streetui 2.5.0 → 2.7.0
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/bin.cjs +1 -1
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/bin.js.map +1 -1
- package/dist/create-bin.cjs +1 -1
- package/dist/create-bin.cjs.map +1 -1
- package/dist/create-bin.js +1 -1
- package/dist/create-bin.js.map +1 -1
- package/dist/{hydration-diagnostics-j2ged4cF.d.cts → hydration-diagnostics-Bh0-5vdC.d.cts} +82 -60
- package/dist/{hydration-diagnostics-j2ged4cF.d.ts → hydration-diagnostics-Bh0-5vdC.d.ts} +82 -60
- package/dist/index.cjs +1443 -201
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1033 -6
- package/dist/index.d.ts +1033 -6
- package/dist/index.js +1376 -201
- package/dist/index.js.map +1 -1
- package/dist/{renderer-interface-DngAhfHx.d.ts → renderer-interface-BOpzkWWQ.d.ts} +1 -1
- package/dist/{renderer-interface-hcqzG-N6.d.cts → renderer-interface-D0021Or5.d.cts} +1 -1
- package/dist/{server-VTKCPoqG.d.ts → server-CzcNNC9F.d.ts} +1 -1
- package/dist/{server-Codluzqu.d.cts → server-cE_Qhu4k.d.cts} +1 -1
- package/dist/server.cjs +30 -1
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +2 -2
- package/dist/server.d.ts +2 -2
- package/dist/server.js +30 -1
- package/dist/server.js.map +1 -1
- package/dist/testing.cjs +245 -183
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +3 -3
- package/dist/testing.d.ts +3 -3
- package/dist/testing.js +245 -183
- package/dist/testing.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -23,11 +23,13 @@ __export(src_exports, {
|
|
|
23
23
|
AppBuilder: () => AppBuilder,
|
|
24
24
|
Application: () => Application,
|
|
25
25
|
ApplicationGraph: () => ApplicationGraph,
|
|
26
|
+
BREAKPOINTS: () => BREAKPOINTS,
|
|
26
27
|
BaseNode: () => BaseNode,
|
|
27
28
|
BrowserDOMAdapter: () => BrowserDOMAdapter,
|
|
28
29
|
CleanupRegistry: () => CleanupRegistry,
|
|
29
30
|
ContainerBuilderImpl: () => ContainerBuilderImpl,
|
|
30
31
|
DEFAULT_PERF_THRESHOLDS: () => DEFAULT_PERF_THRESHOLDS,
|
|
32
|
+
DEFAULT_TOKENS: () => DEFAULT_TOKENS,
|
|
31
33
|
DEVTOOLS_TABS: () => DEVTOOLS_TABS,
|
|
32
34
|
DerivedSignal: () => DerivedSignal,
|
|
33
35
|
DiagnosticCollector: () => DiagnosticCollector,
|
|
@@ -45,6 +47,7 @@ __export(src_exports, {
|
|
|
45
47
|
NodeInstance: () => NodeInstance,
|
|
46
48
|
PageBuilderImpl: () => PageBuilderImpl,
|
|
47
49
|
ROUTER_OUTLET_ID: () => ROUTER_OUTLET_ID,
|
|
50
|
+
ROUTER_OUTLET_KEY: () => ROUTER_OUTLET_KEY,
|
|
48
51
|
Runtime: () => Runtime,
|
|
49
52
|
RuntimeNodeInstance: () => RuntimeNodeInstance,
|
|
50
53
|
STATE_MARKER_ATTR: () => STATE_MARKER_ATTR,
|
|
@@ -63,21 +66,35 @@ __export(src_exports, {
|
|
|
63
66
|
StreetFrameworkError: () => StreetFrameworkError,
|
|
64
67
|
StreetRenderHandle: () => StreetRenderHandle,
|
|
65
68
|
StreetRendererImpl: () => StreetRendererImpl,
|
|
69
|
+
StyleRegistry: () => StyleRegistry,
|
|
66
70
|
TransitionController: () => TransitionController,
|
|
67
71
|
VERSION: () => VERSION,
|
|
72
|
+
a11y: () => a11y,
|
|
68
73
|
a11yIds: () => a11yIds,
|
|
74
|
+
adoptServerStyles: () => adoptServerStyles,
|
|
75
|
+
animate: () => animate,
|
|
76
|
+
animation: () => animation,
|
|
69
77
|
applyNodeProps: () => applyNodeProps,
|
|
70
78
|
applyProp: () => applyProp,
|
|
79
|
+
backdrop: () => backdrop,
|
|
71
80
|
batch: () => batch,
|
|
72
81
|
bindDomEvent: () => bindDomEvent,
|
|
82
|
+
blockquote: () => blockquote,
|
|
83
|
+
body: () => body,
|
|
73
84
|
browserDOMAdapter: () => browserDOMAdapter,
|
|
85
|
+
button: () => button,
|
|
74
86
|
buttonUpdate: () => buttonUpdate,
|
|
87
|
+
canonicalize: () => canonicalize,
|
|
88
|
+
caption: () => caption,
|
|
89
|
+
center: () => center,
|
|
90
|
+
code: () => code,
|
|
75
91
|
compile: () => compile,
|
|
76
92
|
compileGraph: () => compileGraph,
|
|
77
93
|
component: () => component,
|
|
78
94
|
consoleDiagnosticSink: () => consoleDiagnosticSink,
|
|
79
95
|
consoleHydrationDiagnosticSink: () => consoleHydrationDiagnosticSink,
|
|
80
96
|
containFocus: () => containFocus,
|
|
97
|
+
container: () => container,
|
|
81
98
|
createAnnouncer: () => createAnnouncer,
|
|
82
99
|
createApplication: () => createApplication,
|
|
83
100
|
createAuthSession: () => createAuthSession,
|
|
@@ -96,31 +113,53 @@ __export(src_exports, {
|
|
|
96
113
|
createRuntime: () => createRuntime,
|
|
97
114
|
createStore: () => createStore,
|
|
98
115
|
createStreetEvent: () => createStreetEvent,
|
|
116
|
+
createTheme: () => createTheme,
|
|
117
|
+
createThemeTokens: () => createThemeTokens,
|
|
118
|
+
cssPropName: () => cssPropName,
|
|
119
|
+
cssValue: () => cssValue,
|
|
120
|
+
cx: () => cx,
|
|
121
|
+
defaultThemeStorage: () => defaultThemeStorage,
|
|
99
122
|
defineConfig: () => defineConfig,
|
|
100
123
|
derived: () => derived,
|
|
101
124
|
describeError: () => describeError,
|
|
102
125
|
diagnosePerformance: () => diagnosePerformance,
|
|
126
|
+
dialog: () => dialog,
|
|
127
|
+
dropdown: () => dropdown,
|
|
128
|
+
dropdownItem: () => dropdownItem,
|
|
103
129
|
effect: () => effect,
|
|
104
130
|
email: () => email,
|
|
105
131
|
environment: () => environment,
|
|
106
132
|
escapeHtml: () => escapeHtml,
|
|
107
133
|
escapeHtmlAttr: () => escapeHtmlAttr,
|
|
108
134
|
escapeHtmlText: () => escapeHtmlText,
|
|
135
|
+
fadeTransition: () => fadeTransition,
|
|
136
|
+
field: () => field,
|
|
137
|
+
fieldError: () => fieldError,
|
|
138
|
+
fieldHelp: () => fieldHelp,
|
|
139
|
+
fieldLabel: () => fieldLabel,
|
|
109
140
|
flushSync: () => flushSync,
|
|
110
141
|
focusById: () => focusById,
|
|
111
142
|
focusFirst: () => focusFirst,
|
|
112
143
|
focusInitial: () => focusInitial,
|
|
144
|
+
focusRing: () => focusRing,
|
|
145
|
+
form: () => form,
|
|
113
146
|
formatDiagnostic: () => formatDiagnostic,
|
|
114
147
|
formatDiagnosticContext: () => formatDiagnosticContext,
|
|
115
148
|
formatHydrationDiagnostic: () => formatHydrationDiagnostic,
|
|
116
149
|
frameworkError: () => frameworkError,
|
|
117
150
|
generateApplicationId: () => generateApplicationId,
|
|
151
|
+
generateCSS: () => generateCSS,
|
|
118
152
|
generateNodeId: () => generateNodeId,
|
|
119
153
|
getFocusable: () => getFocusable,
|
|
120
154
|
getResolvedTransition: () => getResolvedTransition,
|
|
121
155
|
globalEventBus: () => globalEventBus,
|
|
156
|
+
grid: () => grid,
|
|
157
|
+
hashIdentity: () => hashIdentity,
|
|
158
|
+
heading: () => heading,
|
|
122
159
|
headingUpdate: () => headingUpdate,
|
|
123
160
|
hydrateGraph: () => hydrateGraph,
|
|
161
|
+
identityOf: () => identityOf,
|
|
162
|
+
input: () => input,
|
|
124
163
|
inputUpdate: () => inputUpdate,
|
|
125
164
|
inspectApplication: () => inspectApplication,
|
|
126
165
|
inspectComponents: () => inspectComponents,
|
|
@@ -141,7 +180,11 @@ __export(src_exports, {
|
|
|
141
180
|
isComponentDefinition: () => isComponentDefinition,
|
|
142
181
|
isHeadContribution: () => isHeadContribution,
|
|
143
182
|
isTransitionConfig: () => isTransitionConfig,
|
|
183
|
+
label: () => label,
|
|
184
|
+
layout: () => layout,
|
|
185
|
+
link: () => link,
|
|
144
186
|
linkUpdate: () => linkUpdate,
|
|
187
|
+
list: () => list,
|
|
145
188
|
matchPattern: () => matchPattern,
|
|
146
189
|
matchRoutes: () => matchRoutes,
|
|
147
190
|
maxLength: () => maxLength,
|
|
@@ -156,13 +199,18 @@ __export(src_exports, {
|
|
|
156
199
|
normalizePath: () => normalizePath,
|
|
157
200
|
observerCount: () => observerCount,
|
|
158
201
|
onEscape: () => onEscape,
|
|
202
|
+
overlay: () => overlay,
|
|
159
203
|
patchNode: () => patchNode,
|
|
160
204
|
patchProp: () => patchProp,
|
|
161
205
|
pattern: () => pattern,
|
|
206
|
+
popover: () => popover,
|
|
207
|
+
pre: () => pre,
|
|
162
208
|
printDiagnostics: () => printDiagnostics,
|
|
163
209
|
printGraph: () => printGraph,
|
|
164
210
|
reactiveListItemKey: () => reactiveListItemKey,
|
|
165
211
|
reactiveListItemSignature: () => reactiveListItemSignature,
|
|
212
|
+
reactiveVarName: () => reactiveVarName,
|
|
213
|
+
reactiveVarValue: () => reactiveVarValue,
|
|
166
214
|
readState: () => readState,
|
|
167
215
|
reconcileChildren: () => reconcileChildren,
|
|
168
216
|
reconcileChildrenByPlan: () => reconcileChildrenByPlan,
|
|
@@ -170,6 +218,7 @@ __export(src_exports, {
|
|
|
170
218
|
renderDevToolsReport: () => renderDevToolsReport,
|
|
171
219
|
renderHead: () => renderHead,
|
|
172
220
|
renderInteractiveDevTools: () => renderInteractiveDevTools,
|
|
221
|
+
renderStyles: () => renderStyles,
|
|
173
222
|
renderToString: () => renderToString,
|
|
174
223
|
reportDiagnostic: () => reportDiagnostic,
|
|
175
224
|
reportError: () => reportError,
|
|
@@ -182,9 +231,11 @@ __export(src_exports, {
|
|
|
182
231
|
restoreFocus: () => restoreFocus,
|
|
183
232
|
routerOutlet: () => routerOutlet,
|
|
184
233
|
rovingMenu: () => rovingMenu,
|
|
234
|
+
row: () => row,
|
|
185
235
|
runElementTransition: () => runElementTransition,
|
|
186
236
|
runValidators: () => runValidators,
|
|
187
237
|
saveFocus: () => saveFocus,
|
|
238
|
+
scaleTransition: () => scaleTransition,
|
|
188
239
|
scheduleImmediate: () => scheduleImmediate,
|
|
189
240
|
scheduleUpdate: () => scheduleUpdate,
|
|
190
241
|
scheduler: () => scheduler,
|
|
@@ -194,13 +245,29 @@ __export(src_exports, {
|
|
|
194
245
|
serverDOMAdapter: () => serverDOMAdapter,
|
|
195
246
|
signal: () => signal,
|
|
196
247
|
signalKind: () => signalKind,
|
|
248
|
+
skipLink: () => skipLink,
|
|
249
|
+
slideTransition: () => slideTransition,
|
|
250
|
+
spacer: () => spacer,
|
|
197
251
|
splitTarget: () => splitTarget,
|
|
252
|
+
stack: () => stack,
|
|
253
|
+
stateAttr: () => stateAttr,
|
|
198
254
|
streetui: () => streetui,
|
|
255
|
+
style: () => style,
|
|
256
|
+
styleRegistry: () => styleRegistry,
|
|
257
|
+
styleVariants: () => styleVariants,
|
|
258
|
+
styleWithVars: () => styleWithVars,
|
|
259
|
+
text: () => text,
|
|
199
260
|
textUpdate: () => textUpdate,
|
|
200
261
|
toIdToken: () => toIdToken,
|
|
262
|
+
toast: () => toast,
|
|
263
|
+
tokens: () => tokens,
|
|
264
|
+
tooltip: () => tooltip,
|
|
201
265
|
transformGraph: () => transformGraph,
|
|
266
|
+
transition: () => transition,
|
|
267
|
+
transitions: () => transitions,
|
|
202
268
|
trapFocus: () => trapFocus,
|
|
203
269
|
validateGraph: () => validateGraph,
|
|
270
|
+
visuallyHidden: () => visuallyHidden,
|
|
204
271
|
wireComponentBehavior: () => wireComponentBehavior,
|
|
205
272
|
wireEvents: () => wireEvents,
|
|
206
273
|
wireHeadBehavior: () => wireHeadBehavior,
|
|
@@ -211,7 +278,7 @@ __export(src_exports, {
|
|
|
211
278
|
module.exports = __toCommonJS(src_exports);
|
|
212
279
|
|
|
213
280
|
// src/version.ts
|
|
214
|
-
var VERSION = "2.
|
|
281
|
+
var VERSION = "2.7.0";
|
|
215
282
|
|
|
216
283
|
// ../state/src/signal.ts
|
|
217
284
|
var _activeConsumer = null;
|
|
@@ -614,13 +681,13 @@ var HttpError = class extends Error {
|
|
|
614
681
|
statusText;
|
|
615
682
|
url;
|
|
616
683
|
body;
|
|
617
|
-
constructor(status, statusText, url,
|
|
684
|
+
constructor(status, statusText, url, body2) {
|
|
618
685
|
super(`HTTP ${status} ${statusText} for ${url}`);
|
|
619
686
|
this.name = "HttpError";
|
|
620
687
|
this.status = status;
|
|
621
688
|
this.statusText = statusText;
|
|
622
689
|
this.url = url;
|
|
623
|
-
this.body =
|
|
690
|
+
this.body = body2;
|
|
624
691
|
}
|
|
625
692
|
};
|
|
626
693
|
function joinUrl(baseUrl, path) {
|
|
@@ -638,20 +705,20 @@ function withQuery(url, query) {
|
|
|
638
705
|
return url.includes("?") ? `${url}&${qs}` : `${url}?${qs}`;
|
|
639
706
|
}
|
|
640
707
|
function createClient(config = {}) {
|
|
641
|
-
const doFetch = config.fetch ?? ((
|
|
708
|
+
const doFetch = config.fetch ?? ((input2, init) => {
|
|
642
709
|
if (typeof fetch === "undefined") {
|
|
643
710
|
throw new Error("createClient: no global fetch; pass { fetch } explicitly");
|
|
644
711
|
}
|
|
645
|
-
return fetch(
|
|
712
|
+
return fetch(input2, init);
|
|
646
713
|
});
|
|
647
|
-
async function request(method, path,
|
|
714
|
+
async function request(method, path, body2, reqConfig = {}) {
|
|
648
715
|
const url = withQuery(joinUrl(config.baseUrl, path), reqConfig.query);
|
|
649
716
|
const headers = { ...config.headers, ...reqConfig.headers };
|
|
650
717
|
const init = { method, headers };
|
|
651
718
|
if (reqConfig.signal !== void 0) init.signal = reqConfig.signal;
|
|
652
|
-
if (
|
|
719
|
+
if (body2 !== void 0) {
|
|
653
720
|
if (headers["Content-Type"] === void 0) headers["Content-Type"] = "application/json";
|
|
654
|
-
init.body = JSON.stringify(
|
|
721
|
+
init.body = JSON.stringify(body2);
|
|
655
722
|
}
|
|
656
723
|
const response = await doFetch(url, init);
|
|
657
724
|
const parsed = await parseBody(response);
|
|
@@ -678,17 +745,17 @@ function createClient(config = {}) {
|
|
|
678
745
|
};
|
|
679
746
|
}
|
|
680
747
|
async function parseBody(response) {
|
|
681
|
-
const
|
|
682
|
-
if (
|
|
748
|
+
const text2 = await response.text();
|
|
749
|
+
if (text2 === "") return void 0;
|
|
683
750
|
const type = response.headers.get("content-type") ?? "";
|
|
684
751
|
if (type.includes("application/json")) {
|
|
685
752
|
try {
|
|
686
|
-
return JSON.parse(
|
|
753
|
+
return JSON.parse(text2);
|
|
687
754
|
} catch {
|
|
688
|
-
return
|
|
755
|
+
return text2;
|
|
689
756
|
}
|
|
690
757
|
}
|
|
691
|
-
return
|
|
758
|
+
return text2;
|
|
692
759
|
}
|
|
693
760
|
|
|
694
761
|
// ../state/src/auth.ts
|
|
@@ -919,14 +986,14 @@ var DiagnosticCollector = class {
|
|
|
919
986
|
get hasWarnings() {
|
|
920
987
|
return this._diagnostics.some((d) => d.severity === "warning");
|
|
921
988
|
}
|
|
922
|
-
error(
|
|
923
|
-
this._diagnostics.push({ severity: "error", code, message, location: location ?? void 0, cause: cause ?? void 0 });
|
|
989
|
+
error(code2, message, location, cause) {
|
|
990
|
+
this._diagnostics.push({ severity: "error", code: code2, message, location: location ?? void 0, cause: cause ?? void 0 });
|
|
924
991
|
}
|
|
925
|
-
warn(
|
|
926
|
-
this._diagnostics.push({ severity: "warning", code, message, location: location ?? void 0, cause: void 0 });
|
|
992
|
+
warn(code2, message, location) {
|
|
993
|
+
this._diagnostics.push({ severity: "warning", code: code2, message, location: location ?? void 0, cause: void 0 });
|
|
927
994
|
}
|
|
928
|
-
info(
|
|
929
|
-
this._diagnostics.push({ severity: "info", code, message, location: location ?? void 0, cause: void 0 });
|
|
995
|
+
info(code2, message, location) {
|
|
996
|
+
this._diagnostics.push({ severity: "info", code: code2, message, location: location ?? void 0, cause: void 0 });
|
|
930
997
|
}
|
|
931
998
|
merge(other) {
|
|
932
999
|
for (const d of other.diagnostics) {
|
|
@@ -1067,11 +1134,11 @@ function safeStringify(value) {
|
|
|
1067
1134
|
if (typeof value === "string") return value;
|
|
1068
1135
|
if (value === null) return "null";
|
|
1069
1136
|
if (value === void 0) return "undefined";
|
|
1070
|
-
const
|
|
1071
|
-
if (
|
|
1137
|
+
const t6 = typeof value;
|
|
1138
|
+
if (t6 === "number" || t6 === "boolean" || t6 === "bigint" || t6 === "symbol") {
|
|
1072
1139
|
return String(value);
|
|
1073
1140
|
}
|
|
1074
|
-
const ctor =
|
|
1141
|
+
const ctor = t6 === "object" && value !== null ? value.constructor?.name ?? "Object" : t6;
|
|
1075
1142
|
return `[non-Error ${ctor}]`;
|
|
1076
1143
|
}
|
|
1077
1144
|
function describeError(error, context, options = {}) {
|
|
@@ -1083,6 +1150,884 @@ function reportError(sink, error, context, options = {}) {
|
|
|
1083
1150
|
return report;
|
|
1084
1151
|
}
|
|
1085
1152
|
|
|
1153
|
+
// ../core/src/styling/canonical.ts
|
|
1154
|
+
var LENGTH_PROPS = /* @__PURE__ */ new Set([
|
|
1155
|
+
"inset",
|
|
1156
|
+
"top",
|
|
1157
|
+
"right",
|
|
1158
|
+
"bottom",
|
|
1159
|
+
"left",
|
|
1160
|
+
"width",
|
|
1161
|
+
"minWidth",
|
|
1162
|
+
"maxWidth",
|
|
1163
|
+
"height",
|
|
1164
|
+
"minHeight",
|
|
1165
|
+
"maxHeight",
|
|
1166
|
+
"margin",
|
|
1167
|
+
"marginTop",
|
|
1168
|
+
"marginRight",
|
|
1169
|
+
"marginBottom",
|
|
1170
|
+
"marginLeft",
|
|
1171
|
+
"padding",
|
|
1172
|
+
"paddingTop",
|
|
1173
|
+
"paddingRight",
|
|
1174
|
+
"paddingBottom",
|
|
1175
|
+
"paddingLeft",
|
|
1176
|
+
"gap",
|
|
1177
|
+
"rowGap",
|
|
1178
|
+
"columnGap",
|
|
1179
|
+
"flexBasis",
|
|
1180
|
+
"borderWidth",
|
|
1181
|
+
"borderRadius",
|
|
1182
|
+
"fontSize",
|
|
1183
|
+
"letterSpacing"
|
|
1184
|
+
]);
|
|
1185
|
+
function cssPropName(camel) {
|
|
1186
|
+
if (camel.startsWith("--")) return camel;
|
|
1187
|
+
return camel.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
|
|
1188
|
+
}
|
|
1189
|
+
function cssValue(prop, value) {
|
|
1190
|
+
if (typeof value === "number") {
|
|
1191
|
+
if (value === 0) return "0";
|
|
1192
|
+
return LENGTH_PROPS.has(prop) ? `${value}px` : String(value);
|
|
1193
|
+
}
|
|
1194
|
+
return value;
|
|
1195
|
+
}
|
|
1196
|
+
function sortDeep(value) {
|
|
1197
|
+
if (Array.isArray(value)) return value.map(sortDeep);
|
|
1198
|
+
if (value !== null && typeof value === "object") {
|
|
1199
|
+
const out = {};
|
|
1200
|
+
for (const key of Object.keys(value).sort()) {
|
|
1201
|
+
const v = value[key];
|
|
1202
|
+
if (v === void 0) continue;
|
|
1203
|
+
out[key] = sortDeep(v);
|
|
1204
|
+
}
|
|
1205
|
+
return out;
|
|
1206
|
+
}
|
|
1207
|
+
return value;
|
|
1208
|
+
}
|
|
1209
|
+
function canonicalize(def) {
|
|
1210
|
+
return JSON.stringify(sortDeep(def));
|
|
1211
|
+
}
|
|
1212
|
+
function hashIdentity(canonical) {
|
|
1213
|
+
let h1 = 2166136261;
|
|
1214
|
+
let h2 = 16777619 ^ canonical.length;
|
|
1215
|
+
for (let i = 0; i < canonical.length; i++) {
|
|
1216
|
+
const c = canonical.charCodeAt(i);
|
|
1217
|
+
h1 ^= c;
|
|
1218
|
+
h1 = Math.imul(h1, 16777619);
|
|
1219
|
+
h2 = Math.imul(h2 ^ c, 2246822507);
|
|
1220
|
+
}
|
|
1221
|
+
const a = (h1 >>> 0).toString(36);
|
|
1222
|
+
const b = (h2 >>> 0).toString(36);
|
|
1223
|
+
return `s-${a}${b}`;
|
|
1224
|
+
}
|
|
1225
|
+
function identityOf(def) {
|
|
1226
|
+
const canonical = canonicalize(def);
|
|
1227
|
+
return { canonical, id: hashIdentity(canonical) };
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
// ../core/src/styling/registry.ts
|
|
1231
|
+
var BAND_ORDER = ["tokens", "base", "responsive", "state", "variant"];
|
|
1232
|
+
var StyleRegistry = class {
|
|
1233
|
+
_entries = /* @__PURE__ */ new Map();
|
|
1234
|
+
_seq = 0;
|
|
1235
|
+
/** True once the registry has adopted a server-emitted stylesheet (§12). */
|
|
1236
|
+
_adopted = false;
|
|
1237
|
+
/**
|
|
1238
|
+
* Register (idempotently) the CSS for a style identity. Returns the identity so
|
|
1239
|
+
* callers can chain. Re-registering an existing id with the same css is a no-op;
|
|
1240
|
+
* with different css it keeps the first registration (identity is content-derived,
|
|
1241
|
+
* so this cannot happen for honest input and signals a hash collision if it does).
|
|
1242
|
+
*/
|
|
1243
|
+
register(id, band, css) {
|
|
1244
|
+
const existing = this._entries.get(id);
|
|
1245
|
+
if (existing !== void 0) return id;
|
|
1246
|
+
this._entries.set(id, { id, band, css, seq: this._seq++ });
|
|
1247
|
+
return id;
|
|
1248
|
+
}
|
|
1249
|
+
/** Whether an identity is already present (server-adopted or locally registered). */
|
|
1250
|
+
has(id) {
|
|
1251
|
+
return this._entries.has(id);
|
|
1252
|
+
}
|
|
1253
|
+
/** Number of distinct rules held (bounded by source diversity, not instances). */
|
|
1254
|
+
get size() {
|
|
1255
|
+
return this._entries.size;
|
|
1256
|
+
}
|
|
1257
|
+
/**
|
|
1258
|
+
* Seed the registry from identities a server stylesheet already shipped (§12).
|
|
1259
|
+
* We only need the *keys* to avoid re-emitting duplicates; the rule text is
|
|
1260
|
+
* already in the adopted `<style>` element, so a placeholder css is stored.
|
|
1261
|
+
*/
|
|
1262
|
+
adoptServerIdentities(ids) {
|
|
1263
|
+
for (const id of ids) {
|
|
1264
|
+
if (!this._entries.has(id)) {
|
|
1265
|
+
this._entries.set(id, { id, band: "base", css: "", seq: this._seq++ });
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
this._adopted = true;
|
|
1269
|
+
}
|
|
1270
|
+
get adopted() {
|
|
1271
|
+
return this._adopted;
|
|
1272
|
+
}
|
|
1273
|
+
/** Serialize all rules to a single CSS string in deterministic band order. */
|
|
1274
|
+
serializeCSS() {
|
|
1275
|
+
if (this._entries.size === 0) return "";
|
|
1276
|
+
const byBand = {
|
|
1277
|
+
tokens: [],
|
|
1278
|
+
base: [],
|
|
1279
|
+
responsive: [],
|
|
1280
|
+
state: [],
|
|
1281
|
+
variant: []
|
|
1282
|
+
};
|
|
1283
|
+
for (const e of this._entries.values()) {
|
|
1284
|
+
if (e.css.length > 0) byBand[e.band].push(e);
|
|
1285
|
+
}
|
|
1286
|
+
let out = "";
|
|
1287
|
+
for (const band of BAND_ORDER) {
|
|
1288
|
+
const list2 = byBand[band].sort((a, b) => a.seq - b.seq);
|
|
1289
|
+
for (const e of list2) out += e.css;
|
|
1290
|
+
}
|
|
1291
|
+
return out;
|
|
1292
|
+
}
|
|
1293
|
+
/** The ordered list of identities present (for the `data-streetui-css-keys` attr). */
|
|
1294
|
+
identities() {
|
|
1295
|
+
return [...this._entries.values()].sort((a, b) => a.seq - b.seq).map((e) => e.id);
|
|
1296
|
+
}
|
|
1297
|
+
/** Clear everything — test isolation and per-process reset only. */
|
|
1298
|
+
reset() {
|
|
1299
|
+
this._entries.clear();
|
|
1300
|
+
this._seq = 0;
|
|
1301
|
+
this._adopted = false;
|
|
1302
|
+
}
|
|
1303
|
+
};
|
|
1304
|
+
var styleRegistry = new StyleRegistry();
|
|
1305
|
+
|
|
1306
|
+
// ../core/src/styling/css.ts
|
|
1307
|
+
var BREAKPOINTS = {
|
|
1308
|
+
sm: 480,
|
|
1309
|
+
md: 768,
|
|
1310
|
+
lg: 1024,
|
|
1311
|
+
xl: 1280
|
|
1312
|
+
};
|
|
1313
|
+
var PSEUDO_SELECTOR = {
|
|
1314
|
+
hover: ":hover",
|
|
1315
|
+
focus: ":focus",
|
|
1316
|
+
focusVisible: ":focus-visible",
|
|
1317
|
+
focusWithin: ":focus-within",
|
|
1318
|
+
active: ":active",
|
|
1319
|
+
disabled: ":disabled",
|
|
1320
|
+
checked: ":checked",
|
|
1321
|
+
firstChild: ":first-child",
|
|
1322
|
+
lastChild: ":last-child"
|
|
1323
|
+
};
|
|
1324
|
+
function stateAttr(state) {
|
|
1325
|
+
return `data-${state}`;
|
|
1326
|
+
}
|
|
1327
|
+
function isResponsiveObject(v) {
|
|
1328
|
+
return v !== null && typeof v === "object";
|
|
1329
|
+
}
|
|
1330
|
+
function splitResponsive(props) {
|
|
1331
|
+
const base = [];
|
|
1332
|
+
const media = { sm: [], md: [], lg: [], xl: [] };
|
|
1333
|
+
for (const key of Object.keys(props).sort()) {
|
|
1334
|
+
if (key === "vars") {
|
|
1335
|
+
const vars = props.vars;
|
|
1336
|
+
if (vars) for (const vk of Object.keys(vars).sort()) base.push([vk, vars[vk]]);
|
|
1337
|
+
continue;
|
|
1338
|
+
}
|
|
1339
|
+
const raw = props[key];
|
|
1340
|
+
if (raw === void 0) continue;
|
|
1341
|
+
if (isResponsiveObject(raw)) {
|
|
1342
|
+
const r = raw;
|
|
1343
|
+
if (r.base !== void 0) base.push([key, r.base]);
|
|
1344
|
+
for (const bp of ["sm", "md", "lg", "xl"]) {
|
|
1345
|
+
if (r[bp] !== void 0) media[bp].push([key, r[bp]]);
|
|
1346
|
+
}
|
|
1347
|
+
} else {
|
|
1348
|
+
base.push([key, raw]);
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
return { base, media };
|
|
1352
|
+
}
|
|
1353
|
+
function declBody(pairs) {
|
|
1354
|
+
let out = "";
|
|
1355
|
+
for (const [prop, val] of pairs) out += `${cssPropName(prop)}:${cssValue(prop, val)};`;
|
|
1356
|
+
return out;
|
|
1357
|
+
}
|
|
1358
|
+
function flatBody(props) {
|
|
1359
|
+
const pairs = [];
|
|
1360
|
+
for (const key of Object.keys(props).sort()) {
|
|
1361
|
+
if (key === "vars") {
|
|
1362
|
+
const vars = props.vars;
|
|
1363
|
+
if (vars) for (const vk of Object.keys(vars).sort()) pairs.push([vk, vars[vk]]);
|
|
1364
|
+
continue;
|
|
1365
|
+
}
|
|
1366
|
+
const raw = props[key];
|
|
1367
|
+
if (raw === void 0) continue;
|
|
1368
|
+
if (isResponsiveObject(raw)) {
|
|
1369
|
+
const b = raw.base;
|
|
1370
|
+
if (b !== void 0) pairs.push([key, b]);
|
|
1371
|
+
} else {
|
|
1372
|
+
pairs.push([key, raw]);
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
return declBody(pairs);
|
|
1376
|
+
}
|
|
1377
|
+
function generateCSS(id, def) {
|
|
1378
|
+
const sel = `.${id}`;
|
|
1379
|
+
const { base, media } = splitResponsive(def);
|
|
1380
|
+
let baseCss = "";
|
|
1381
|
+
const baseBody = declBody(base);
|
|
1382
|
+
if (baseBody.length > 0) baseCss += `${sel}{${baseBody}}`;
|
|
1383
|
+
let hasResponsive = false;
|
|
1384
|
+
for (const bp of ["sm", "md", "lg", "xl"]) {
|
|
1385
|
+
if (media[bp].length > 0) {
|
|
1386
|
+
hasResponsive = true;
|
|
1387
|
+
baseCss += `@media (min-width:${BREAKPOINTS[bp]}px){${sel}{${declBody(media[bp])}}}`;
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
let stateCss = "";
|
|
1391
|
+
if (def.on) {
|
|
1392
|
+
for (const ps of Object.keys(def.on).sort()) {
|
|
1393
|
+
const block = def.on[ps];
|
|
1394
|
+
if (!block) continue;
|
|
1395
|
+
const body2 = flatBody(block);
|
|
1396
|
+
if (body2.length > 0) stateCss += `${sel}${PSEUDO_SELECTOR[ps]}{${body2}}`;
|
|
1397
|
+
}
|
|
1398
|
+
}
|
|
1399
|
+
if (def.when) {
|
|
1400
|
+
for (const st of Object.keys(def.when).sort()) {
|
|
1401
|
+
const block = def.when[st];
|
|
1402
|
+
if (!block) continue;
|
|
1403
|
+
const body2 = flatBody(block);
|
|
1404
|
+
if (body2.length > 0) stateCss += `${sel}[${stateAttr(st)}]{${body2}}`;
|
|
1405
|
+
}
|
|
1406
|
+
}
|
|
1407
|
+
return { base: baseCss, state: stateCss, hasResponsive };
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
// ../core/src/styling/tokens.ts
|
|
1411
|
+
function kebab(seg) {
|
|
1412
|
+
return seg.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
|
|
1413
|
+
}
|
|
1414
|
+
function isLeaf(v) {
|
|
1415
|
+
return typeof v === "string" || typeof v === "number";
|
|
1416
|
+
}
|
|
1417
|
+
function walkTokens(tree, path, visit) {
|
|
1418
|
+
for (const key of Object.keys(tree).sort()) {
|
|
1419
|
+
const v = tree[key];
|
|
1420
|
+
const next = [...path, kebab(key)];
|
|
1421
|
+
if (isLeaf(v)) visit(`--${next.join("-")}`, v);
|
|
1422
|
+
else walkTokens(v, next, visit);
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
1425
|
+
function buildRefs(tree, path) {
|
|
1426
|
+
const out = {};
|
|
1427
|
+
for (const key of Object.keys(tree)) {
|
|
1428
|
+
const v = tree[key];
|
|
1429
|
+
const next = [...path, kebab(key)];
|
|
1430
|
+
out[key] = isLeaf(v) ? `var(--${next.join("-")})` : buildRefs(v, next);
|
|
1431
|
+
}
|
|
1432
|
+
return out;
|
|
1433
|
+
}
|
|
1434
|
+
function tokenIdentity(def) {
|
|
1435
|
+
const json = JSON.stringify({ light: def.light, dark: def.dark ?? null });
|
|
1436
|
+
let h = 2166136261;
|
|
1437
|
+
for (let i = 0; i < json.length; i++) {
|
|
1438
|
+
h ^= json.charCodeAt(i);
|
|
1439
|
+
h = Math.imul(h, 16777619);
|
|
1440
|
+
}
|
|
1441
|
+
return `t-${(h >>> 0).toString(36)}`;
|
|
1442
|
+
}
|
|
1443
|
+
function createThemeTokens(def) {
|
|
1444
|
+
const id = tokenIdentity(def);
|
|
1445
|
+
let root = "";
|
|
1446
|
+
walkTokens(def.light, [], (name, value) => {
|
|
1447
|
+
root += `${name}:${value};`;
|
|
1448
|
+
});
|
|
1449
|
+
let dark = "";
|
|
1450
|
+
if (def.dark) walkTokens(def.dark, [], (name, value) => {
|
|
1451
|
+
dark += `${name}:${value};`;
|
|
1452
|
+
});
|
|
1453
|
+
let css = root.length > 0 ? `:root{${root}}` : "";
|
|
1454
|
+
if (dark.length > 0) css += `[data-theme="dark"]{${dark}}`;
|
|
1455
|
+
styleRegistry.register(id, "tokens", css);
|
|
1456
|
+
return {
|
|
1457
|
+
ref: buildRefs(def.light, []),
|
|
1458
|
+
css,
|
|
1459
|
+
id
|
|
1460
|
+
};
|
|
1461
|
+
}
|
|
1462
|
+
var DEFAULT_TOKENS = {
|
|
1463
|
+
surface: { background: "#ffffff", raised: "#f7f7f8", sunken: "#eeeef1", overlay: "rgba(17,17,20,0.55)" },
|
|
1464
|
+
content: { primary: "#17171a", secondary: "#55555f", muted: "#666672", inverse: "#ffffff" },
|
|
1465
|
+
border: { default: "#e3e3e8", strong: "#c9c9d1", subtle: "#f0f0f3" },
|
|
1466
|
+
accent: { primary: "#4f46e5", hover: "#4338ca", contrast: "#ffffff" },
|
|
1467
|
+
focus: { ring: "#6366f1" },
|
|
1468
|
+
danger: { surface: "#fef2f2", border: "#fecaca", content: "#b91c1c", solid: "#dc2626" },
|
|
1469
|
+
success: { content: "#15803d", solid: "#16a34a" },
|
|
1470
|
+
space: { "0": "0", "1": "4px", "2": "8px", "3": "12px", "4": "16px", "5": "24px", "6": "32px", "8": "48px", "10": "64px" },
|
|
1471
|
+
radius: { sm: "4px", md: "8px", lg: "12px", xl: "16px", full: "9999px" },
|
|
1472
|
+
font: {
|
|
1473
|
+
sans: "ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif",
|
|
1474
|
+
mono: "ui-monospace,SFMono-Regular,Menlo,Consolas,monospace"
|
|
1475
|
+
},
|
|
1476
|
+
size: { xs: "12px", sm: "14px", md: "16px", lg: "18px", xl: "24px", "2xl": "32px", "3xl": "44px" },
|
|
1477
|
+
weight: { normal: "400", medium: "500", semibold: "600", bold: "700" },
|
|
1478
|
+
leading: { tight: "1.2", normal: "1.5", relaxed: "1.7" },
|
|
1479
|
+
shadow: {
|
|
1480
|
+
sm: "0 1px 2px rgba(17,17,20,0.08)",
|
|
1481
|
+
md: "0 4px 12px rgba(17,17,20,0.1)",
|
|
1482
|
+
lg: "0 12px 32px rgba(17,17,20,0.16)"
|
|
1483
|
+
},
|
|
1484
|
+
z: { base: "0", dropdown: "1000", overlay: "1100", toast: "1200" },
|
|
1485
|
+
duration: { fast: "120ms", base: "200ms", slow: "320ms" },
|
|
1486
|
+
easing: { standard: "cubic-bezier(0.2,0,0,1)", emphasized: "cubic-bezier(0.3,0,0,1)" }
|
|
1487
|
+
};
|
|
1488
|
+
var DARK_OVERRIDES = {
|
|
1489
|
+
surface: { background: "#0f0f12", raised: "#17171c", sunken: "#0a0a0d", overlay: "rgba(0,0,0,0.6)" },
|
|
1490
|
+
content: { primary: "#f4f4f6", secondary: "#b4b4bf", muted: "#7c7c88", inverse: "#17171a" },
|
|
1491
|
+
border: { default: "#2a2a31", strong: "#3a3a44", subtle: "#1e1e24" },
|
|
1492
|
+
accent: { primary: "#818cf8", hover: "#a5b4fc", contrast: "#0f0f12" },
|
|
1493
|
+
focus: { ring: "#a5b4fc" },
|
|
1494
|
+
danger: { surface: "#2a1416", border: "#5b1d1d", content: "#fca5a5", solid: "#ef4444" },
|
|
1495
|
+
success: { content: "#4ade80", solid: "#22c55e" }
|
|
1496
|
+
};
|
|
1497
|
+
var tokens = createThemeTokens({ light: DEFAULT_TOKENS, dark: DARK_OVERRIDES });
|
|
1498
|
+
|
|
1499
|
+
// ../core/src/styling/style.ts
|
|
1500
|
+
function style(def) {
|
|
1501
|
+
const { id } = identityOf(def);
|
|
1502
|
+
if (!styleRegistry.has(id)) {
|
|
1503
|
+
const gen = generateCSS(id, def);
|
|
1504
|
+
styleRegistry.register(id, gen.hasResponsive ? "responsive" : "base", gen.base);
|
|
1505
|
+
if (gen.state.length > 0) {
|
|
1506
|
+
styleRegistry.register(`${id}~state`, "state", gen.state);
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1509
|
+
return id;
|
|
1510
|
+
}
|
|
1511
|
+
function cx(...parts) {
|
|
1512
|
+
let out = "";
|
|
1513
|
+
for (const p of parts) {
|
|
1514
|
+
if (!p) continue;
|
|
1515
|
+
out = out.length === 0 ? p : `${out} ${p}`;
|
|
1516
|
+
}
|
|
1517
|
+
return out;
|
|
1518
|
+
}
|
|
1519
|
+
function styleVariants(cfg) {
|
|
1520
|
+
const baseClass = cfg.base ? style(cfg.base) : "";
|
|
1521
|
+
const groupClasses = {};
|
|
1522
|
+
for (const group of Object.keys(cfg.variants)) {
|
|
1523
|
+
const values = cfg.variants[group];
|
|
1524
|
+
const map = {};
|
|
1525
|
+
for (const value of Object.keys(values)) map[value] = style(values[value]);
|
|
1526
|
+
groupClasses[group] = map;
|
|
1527
|
+
}
|
|
1528
|
+
const defaults = cfg.defaultVariants ?? {};
|
|
1529
|
+
return (selection) => {
|
|
1530
|
+
const parts = [];
|
|
1531
|
+
if (baseClass) parts.push(baseClass);
|
|
1532
|
+
for (const group of Object.keys(groupClasses)) {
|
|
1533
|
+
const chosen = selection?.[group] ?? defaults[group];
|
|
1534
|
+
if (chosen === void 0) continue;
|
|
1535
|
+
const cls = groupClasses[group][chosen];
|
|
1536
|
+
if (cls) parts.push(cls);
|
|
1537
|
+
}
|
|
1538
|
+
return cx(...parts);
|
|
1539
|
+
};
|
|
1540
|
+
}
|
|
1541
|
+
|
|
1542
|
+
// ../core/src/styling/reactive.ts
|
|
1543
|
+
function reactiveVarName(prop) {
|
|
1544
|
+
return `--s-${cssPropName(prop)}`;
|
|
1545
|
+
}
|
|
1546
|
+
function styleWithVars(staticDef, reactiveProps) {
|
|
1547
|
+
const vars = {};
|
|
1548
|
+
const bind = {};
|
|
1549
|
+
const dynamic = {};
|
|
1550
|
+
for (const prop of reactiveProps) {
|
|
1551
|
+
const varName = reactiveVarName(prop);
|
|
1552
|
+
vars[prop] = varName;
|
|
1553
|
+
bind[prop] = `style.${varName}`;
|
|
1554
|
+
dynamic[prop] = `var(${varName})`;
|
|
1555
|
+
}
|
|
1556
|
+
const merged = { ...staticDef, ...dynamic };
|
|
1557
|
+
return { class: style(merged), vars, bind };
|
|
1558
|
+
}
|
|
1559
|
+
function reactiveVarValue(prop, value) {
|
|
1560
|
+
return cssValue(prop, value);
|
|
1561
|
+
}
|
|
1562
|
+
|
|
1563
|
+
// ../core/src/styling/layout.ts
|
|
1564
|
+
var space = (k) => tokens.ref.space[k];
|
|
1565
|
+
function container(opts = {}) {
|
|
1566
|
+
const def = {
|
|
1567
|
+
width: "100%",
|
|
1568
|
+
maxWidth: opts.max ?? 1120,
|
|
1569
|
+
paddingLeft: space(opts.padX ?? "4"),
|
|
1570
|
+
paddingRight: space(opts.padX ?? "4"),
|
|
1571
|
+
...opts.center === false ? {} : { marginLeft: "auto", marginRight: "auto" }
|
|
1572
|
+
};
|
|
1573
|
+
return style(def);
|
|
1574
|
+
}
|
|
1575
|
+
var ALIGN = {
|
|
1576
|
+
start: "flex-start",
|
|
1577
|
+
center: "center",
|
|
1578
|
+
end: "flex-end",
|
|
1579
|
+
stretch: "stretch"
|
|
1580
|
+
};
|
|
1581
|
+
var JUSTIFY = {
|
|
1582
|
+
start: "flex-start",
|
|
1583
|
+
center: "center",
|
|
1584
|
+
end: "flex-end",
|
|
1585
|
+
between: "space-between",
|
|
1586
|
+
around: "space-around"
|
|
1587
|
+
};
|
|
1588
|
+
function stack(opts = {}) {
|
|
1589
|
+
return style({
|
|
1590
|
+
display: "flex",
|
|
1591
|
+
flexDirection: "column",
|
|
1592
|
+
gap: space(opts.gap ?? "4"),
|
|
1593
|
+
...opts.align ? { alignItems: ALIGN[opts.align] } : {},
|
|
1594
|
+
...opts.justify ? { justifyContent: JUSTIFY[opts.justify] } : {}
|
|
1595
|
+
});
|
|
1596
|
+
}
|
|
1597
|
+
function row(opts = {}) {
|
|
1598
|
+
return style({
|
|
1599
|
+
display: "flex",
|
|
1600
|
+
flexDirection: "row",
|
|
1601
|
+
gap: space(opts.gap ?? "4"),
|
|
1602
|
+
alignItems: opts.align ? ALIGN[opts.align] : "center",
|
|
1603
|
+
...opts.justify ? { justifyContent: JUSTIFY[opts.justify] } : {},
|
|
1604
|
+
...opts.wrap ? { flexWrap: "wrap" } : {}
|
|
1605
|
+
});
|
|
1606
|
+
}
|
|
1607
|
+
function grid(opts = {}) {
|
|
1608
|
+
const columns = opts.columns ?? "auto";
|
|
1609
|
+
const min = typeof opts.min === "number" ? `${opts.min}px` : opts.min ?? "220px";
|
|
1610
|
+
const template = columns === "auto" ? `repeat(auto-fill, minmax(${min}, 1fr))` : `repeat(${columns}, minmax(0, 1fr))`;
|
|
1611
|
+
return style({ display: "grid", gridTemplateColumns: template, gap: space(opts.gap ?? "4") });
|
|
1612
|
+
}
|
|
1613
|
+
function center(opts = {}) {
|
|
1614
|
+
return style({
|
|
1615
|
+
display: opts.inline ? "inline-flex" : "flex",
|
|
1616
|
+
alignItems: "center",
|
|
1617
|
+
justifyContent: "center",
|
|
1618
|
+
...opts.minHeight !== void 0 ? { minHeight: opts.minHeight } : {}
|
|
1619
|
+
});
|
|
1620
|
+
}
|
|
1621
|
+
function spacer(opts = {}) {
|
|
1622
|
+
return opts.size !== void 0 ? style({ flex: "0 0 auto", width: opts.size, height: opts.size }) : style({ flex: "1 1 0%" });
|
|
1623
|
+
}
|
|
1624
|
+
var layout = { container, stack, row, grid, center, spacer };
|
|
1625
|
+
|
|
1626
|
+
// ../core/src/styling/typography.ts
|
|
1627
|
+
var t = tokens.ref;
|
|
1628
|
+
var HEADING_SIZE = {
|
|
1629
|
+
1: t.size["3xl"],
|
|
1630
|
+
2: t.size["2xl"],
|
|
1631
|
+
3: t.size.xl,
|
|
1632
|
+
4: t.size.lg,
|
|
1633
|
+
5: t.size.md,
|
|
1634
|
+
6: t.size.sm
|
|
1635
|
+
};
|
|
1636
|
+
function heading(opts = {}) {
|
|
1637
|
+
const level = opts.level ?? 2;
|
|
1638
|
+
return style({
|
|
1639
|
+
fontFamily: t.font.sans,
|
|
1640
|
+
fontSize: HEADING_SIZE[level],
|
|
1641
|
+
fontWeight: level <= 2 ? t.weight.bold : t.weight.semibold,
|
|
1642
|
+
lineHeight: t.leading.tight,
|
|
1643
|
+
color: t.content.primary,
|
|
1644
|
+
letterSpacing: level <= 2 ? "-0.02em" : "-0.01em"
|
|
1645
|
+
});
|
|
1646
|
+
}
|
|
1647
|
+
function body(opts = {}) {
|
|
1648
|
+
const def = {
|
|
1649
|
+
fontFamily: t.font.sans,
|
|
1650
|
+
fontSize: t.size.md,
|
|
1651
|
+
fontWeight: t.weight.normal,
|
|
1652
|
+
lineHeight: t.leading.normal,
|
|
1653
|
+
color: opts.muted ? t.content.secondary : t.content.primary
|
|
1654
|
+
};
|
|
1655
|
+
return style(opts.measure !== void 0 ? { ...def, maxWidth: opts.measure } : def);
|
|
1656
|
+
}
|
|
1657
|
+
function label() {
|
|
1658
|
+
return style({
|
|
1659
|
+
fontFamily: t.font.sans,
|
|
1660
|
+
fontSize: t.size.sm,
|
|
1661
|
+
fontWeight: t.weight.medium,
|
|
1662
|
+
lineHeight: t.leading.normal,
|
|
1663
|
+
color: t.content.primary
|
|
1664
|
+
});
|
|
1665
|
+
}
|
|
1666
|
+
function caption() {
|
|
1667
|
+
return style({
|
|
1668
|
+
fontFamily: t.font.sans,
|
|
1669
|
+
fontSize: t.size.xs,
|
|
1670
|
+
fontWeight: t.weight.normal,
|
|
1671
|
+
lineHeight: t.leading.normal,
|
|
1672
|
+
color: t.content.muted
|
|
1673
|
+
});
|
|
1674
|
+
}
|
|
1675
|
+
function link() {
|
|
1676
|
+
return style({
|
|
1677
|
+
color: t.accent.primary,
|
|
1678
|
+
textDecoration: "underline",
|
|
1679
|
+
cursor: "pointer",
|
|
1680
|
+
borderRadius: t.radius.sm,
|
|
1681
|
+
on: {
|
|
1682
|
+
hover: { color: t.accent.hover },
|
|
1683
|
+
focusVisible: { outline: `2px solid ${t.focus.ring}` }
|
|
1684
|
+
}
|
|
1685
|
+
});
|
|
1686
|
+
}
|
|
1687
|
+
function code() {
|
|
1688
|
+
return style({
|
|
1689
|
+
fontFamily: t.font.mono,
|
|
1690
|
+
fontSize: "0.9em",
|
|
1691
|
+
background: t.surface.sunken,
|
|
1692
|
+
color: t.content.primary,
|
|
1693
|
+
borderRadius: t.radius.sm,
|
|
1694
|
+
paddingLeft: t.space["1"],
|
|
1695
|
+
paddingRight: t.space["1"],
|
|
1696
|
+
borderWidth: 1,
|
|
1697
|
+
borderStyle: "solid",
|
|
1698
|
+
borderColor: t.border.subtle
|
|
1699
|
+
});
|
|
1700
|
+
}
|
|
1701
|
+
function pre() {
|
|
1702
|
+
return style({
|
|
1703
|
+
fontFamily: t.font.mono,
|
|
1704
|
+
fontSize: t.size.sm,
|
|
1705
|
+
lineHeight: t.leading.relaxed,
|
|
1706
|
+
background: t.surface.sunken,
|
|
1707
|
+
color: t.content.primary,
|
|
1708
|
+
borderRadius: t.radius.md,
|
|
1709
|
+
borderWidth: 1,
|
|
1710
|
+
borderStyle: "solid",
|
|
1711
|
+
borderColor: t.border.subtle,
|
|
1712
|
+
padding: t.space["4"],
|
|
1713
|
+
overflowX: "auto",
|
|
1714
|
+
whiteSpace: "pre"
|
|
1715
|
+
});
|
|
1716
|
+
}
|
|
1717
|
+
function blockquote() {
|
|
1718
|
+
return style({
|
|
1719
|
+
fontFamily: t.font.sans,
|
|
1720
|
+
fontSize: t.size.lg,
|
|
1721
|
+
lineHeight: t.leading.relaxed,
|
|
1722
|
+
color: t.content.secondary,
|
|
1723
|
+
borderStyle: "solid",
|
|
1724
|
+
borderColor: t.accent.primary,
|
|
1725
|
+
paddingLeft: t.space["4"],
|
|
1726
|
+
marginLeft: 0
|
|
1727
|
+
});
|
|
1728
|
+
}
|
|
1729
|
+
function list() {
|
|
1730
|
+
return style({
|
|
1731
|
+
fontFamily: t.font.sans,
|
|
1732
|
+
fontSize: t.size.md,
|
|
1733
|
+
lineHeight: t.leading.normal,
|
|
1734
|
+
color: t.content.primary,
|
|
1735
|
+
display: "flex",
|
|
1736
|
+
flexDirection: "column",
|
|
1737
|
+
gap: t.space["2"]
|
|
1738
|
+
});
|
|
1739
|
+
}
|
|
1740
|
+
var text = { heading, body, label, caption, link, code, pre, blockquote, list };
|
|
1741
|
+
|
|
1742
|
+
// ../core/src/styling/a11y.ts
|
|
1743
|
+
var t2 = tokens.ref;
|
|
1744
|
+
function focusRing(opts = {}) {
|
|
1745
|
+
const color = opts.color ?? t2.focus.ring;
|
|
1746
|
+
const width = opts.width ?? 2;
|
|
1747
|
+
const offset = opts.offset ?? 2;
|
|
1748
|
+
return style({
|
|
1749
|
+
outline: "2px solid transparent",
|
|
1750
|
+
// reserve space; real ring shown on focus
|
|
1751
|
+
on: {
|
|
1752
|
+
focusVisible: {
|
|
1753
|
+
outline: `${width}px solid ${color}`,
|
|
1754
|
+
outlineOffset: offset
|
|
1755
|
+
}
|
|
1756
|
+
}
|
|
1757
|
+
});
|
|
1758
|
+
}
|
|
1759
|
+
function visuallyHidden() {
|
|
1760
|
+
return style({
|
|
1761
|
+
position: "absolute",
|
|
1762
|
+
width: 1,
|
|
1763
|
+
height: 1,
|
|
1764
|
+
padding: 0,
|
|
1765
|
+
margin: -1,
|
|
1766
|
+
overflow: "hidden",
|
|
1767
|
+
whiteSpace: "nowrap",
|
|
1768
|
+
border: 0,
|
|
1769
|
+
// clip to a zero-area rect so the node occupies no visual space
|
|
1770
|
+
clipPath: "inset(50%)"
|
|
1771
|
+
});
|
|
1772
|
+
}
|
|
1773
|
+
function skipLink() {
|
|
1774
|
+
return style({
|
|
1775
|
+
position: "absolute",
|
|
1776
|
+
left: t2.space["2"],
|
|
1777
|
+
top: -40,
|
|
1778
|
+
background: t2.surface.raised,
|
|
1779
|
+
color: t2.content.primary,
|
|
1780
|
+
padding: t2.space["2"],
|
|
1781
|
+
borderRadius: t2.radius.md,
|
|
1782
|
+
boxShadow: t2.shadow.md,
|
|
1783
|
+
transition: `top ${t2.duration.fast} ${t2.easing.standard}`,
|
|
1784
|
+
on: {
|
|
1785
|
+
focusVisible: { top: t2.space["2"], outline: `2px solid ${t2.focus.ring}`, outlineOffset: 2 }
|
|
1786
|
+
}
|
|
1787
|
+
});
|
|
1788
|
+
}
|
|
1789
|
+
var a11y = { focusRing, visuallyHidden, skipLink };
|
|
1790
|
+
|
|
1791
|
+
// ../core/src/styling/forms.ts
|
|
1792
|
+
var t3 = tokens.ref;
|
|
1793
|
+
var CONTROL_BASE = {
|
|
1794
|
+
fontFamily: t3.font.sans,
|
|
1795
|
+
fontSize: t3.size.md,
|
|
1796
|
+
lineHeight: t3.leading.normal,
|
|
1797
|
+
color: t3.content.primary,
|
|
1798
|
+
background: t3.surface.background,
|
|
1799
|
+
borderWidth: 1,
|
|
1800
|
+
borderStyle: "solid",
|
|
1801
|
+
borderColor: t3.border.strong,
|
|
1802
|
+
borderRadius: t3.radius.md,
|
|
1803
|
+
paddingTop: t3.space["2"],
|
|
1804
|
+
paddingBottom: t3.space["2"],
|
|
1805
|
+
paddingLeft: t3.space["3"],
|
|
1806
|
+
paddingRight: t3.space["3"],
|
|
1807
|
+
width: "100%",
|
|
1808
|
+
appearance: "none",
|
|
1809
|
+
transition: `border-color ${t3.duration.fast} ${t3.easing.standard}, box-shadow ${t3.duration.fast} ${t3.easing.standard}`,
|
|
1810
|
+
on: {
|
|
1811
|
+
focusVisible: { outline: "none", borderColor: t3.accent.primary, boxShadow: `0 0 0 3px ${t3.focus.ring}` },
|
|
1812
|
+
disabled: { opacity: 0.55, cursor: "not-allowed", background: t3.surface.sunken }
|
|
1813
|
+
},
|
|
1814
|
+
when: {
|
|
1815
|
+
invalid: { borderColor: t3.danger.border, boxShadow: `0 0 0 3px ${t3.danger.surface}` }
|
|
1816
|
+
}
|
|
1817
|
+
};
|
|
1818
|
+
function input() {
|
|
1819
|
+
return style(CONTROL_BASE);
|
|
1820
|
+
}
|
|
1821
|
+
function field() {
|
|
1822
|
+
return style({ display: "flex", flexDirection: "column", gap: t3.space["2"] });
|
|
1823
|
+
}
|
|
1824
|
+
function fieldLabel() {
|
|
1825
|
+
return style({
|
|
1826
|
+
fontFamily: t3.font.sans,
|
|
1827
|
+
fontSize: t3.size.sm,
|
|
1828
|
+
fontWeight: t3.weight.medium,
|
|
1829
|
+
color: t3.content.primary
|
|
1830
|
+
});
|
|
1831
|
+
}
|
|
1832
|
+
function fieldHelp() {
|
|
1833
|
+
return style({ fontFamily: t3.font.sans, fontSize: t3.size.xs, color: t3.content.muted });
|
|
1834
|
+
}
|
|
1835
|
+
function fieldError() {
|
|
1836
|
+
return style({
|
|
1837
|
+
fontFamily: t3.font.sans,
|
|
1838
|
+
fontSize: t3.size.xs,
|
|
1839
|
+
fontWeight: t3.weight.medium,
|
|
1840
|
+
color: t3.danger.content
|
|
1841
|
+
});
|
|
1842
|
+
}
|
|
1843
|
+
function button() {
|
|
1844
|
+
return style({
|
|
1845
|
+
fontFamily: t3.font.sans,
|
|
1846
|
+
fontSize: t3.size.md,
|
|
1847
|
+
fontWeight: t3.weight.semibold,
|
|
1848
|
+
lineHeight: t3.leading.normal,
|
|
1849
|
+
color: t3.accent.contrast,
|
|
1850
|
+
background: t3.accent.primary,
|
|
1851
|
+
borderWidth: 0,
|
|
1852
|
+
borderStyle: "solid",
|
|
1853
|
+
borderRadius: t3.radius.md,
|
|
1854
|
+
paddingTop: t3.space["2"],
|
|
1855
|
+
paddingBottom: t3.space["2"],
|
|
1856
|
+
paddingLeft: t3.space["4"],
|
|
1857
|
+
paddingRight: t3.space["4"],
|
|
1858
|
+
cursor: "pointer",
|
|
1859
|
+
appearance: "none",
|
|
1860
|
+
transition: `background ${t3.duration.fast} ${t3.easing.standard}`,
|
|
1861
|
+
on: {
|
|
1862
|
+
hover: { background: t3.accent.hover },
|
|
1863
|
+
focusVisible: { outline: "none", boxShadow: `0 0 0 3px ${t3.focus.ring}` },
|
|
1864
|
+
disabled: { opacity: 0.55, cursor: "not-allowed" }
|
|
1865
|
+
}
|
|
1866
|
+
});
|
|
1867
|
+
}
|
|
1868
|
+
var form = { field, input, label: fieldLabel, help: fieldHelp, error: fieldError, button };
|
|
1869
|
+
|
|
1870
|
+
// ../core/src/styling/overlays.ts
|
|
1871
|
+
var t4 = tokens.ref;
|
|
1872
|
+
function backdrop() {
|
|
1873
|
+
return style({
|
|
1874
|
+
position: "fixed",
|
|
1875
|
+
inset: 0,
|
|
1876
|
+
background: t4.surface.overlay,
|
|
1877
|
+
zIndex: t4.z.overlay
|
|
1878
|
+
});
|
|
1879
|
+
}
|
|
1880
|
+
function dialog() {
|
|
1881
|
+
return style({
|
|
1882
|
+
position: "relative",
|
|
1883
|
+
background: t4.surface.background,
|
|
1884
|
+
color: t4.content.primary,
|
|
1885
|
+
borderRadius: t4.radius.lg,
|
|
1886
|
+
boxShadow: t4.shadow.lg,
|
|
1887
|
+
borderWidth: 1,
|
|
1888
|
+
borderStyle: "solid",
|
|
1889
|
+
borderColor: t4.border.default,
|
|
1890
|
+
padding: t4.space["5"],
|
|
1891
|
+
maxWidth: "min(560px, calc(100vw - 32px))",
|
|
1892
|
+
width: "100%",
|
|
1893
|
+
zIndex: t4.z.overlay
|
|
1894
|
+
});
|
|
1895
|
+
}
|
|
1896
|
+
function popover() {
|
|
1897
|
+
return style({
|
|
1898
|
+
position: "absolute",
|
|
1899
|
+
background: t4.surface.raised,
|
|
1900
|
+
color: t4.content.primary,
|
|
1901
|
+
borderRadius: t4.radius.md,
|
|
1902
|
+
boxShadow: t4.shadow.md,
|
|
1903
|
+
borderWidth: 1,
|
|
1904
|
+
borderStyle: "solid",
|
|
1905
|
+
borderColor: t4.border.default,
|
|
1906
|
+
padding: t4.space["3"],
|
|
1907
|
+
zIndex: t4.z.dropdown
|
|
1908
|
+
});
|
|
1909
|
+
}
|
|
1910
|
+
function tooltip() {
|
|
1911
|
+
return style({
|
|
1912
|
+
position: "absolute",
|
|
1913
|
+
background: t4.content.primary,
|
|
1914
|
+
color: t4.surface.background,
|
|
1915
|
+
fontFamily: t4.font.sans,
|
|
1916
|
+
fontSize: t4.size.xs,
|
|
1917
|
+
lineHeight: t4.leading.tight,
|
|
1918
|
+
borderRadius: t4.radius.sm,
|
|
1919
|
+
paddingTop: t4.space["1"],
|
|
1920
|
+
paddingBottom: t4.space["1"],
|
|
1921
|
+
paddingLeft: t4.space["2"],
|
|
1922
|
+
paddingRight: t4.space["2"],
|
|
1923
|
+
maxWidth: 240,
|
|
1924
|
+
zIndex: t4.z.overlay,
|
|
1925
|
+
pointerEvents: "none"
|
|
1926
|
+
});
|
|
1927
|
+
}
|
|
1928
|
+
var MENU_BASE = {
|
|
1929
|
+
position: "absolute",
|
|
1930
|
+
background: t4.surface.background,
|
|
1931
|
+
color: t4.content.primary,
|
|
1932
|
+
borderRadius: t4.radius.md,
|
|
1933
|
+
boxShadow: t4.shadow.md,
|
|
1934
|
+
borderWidth: 1,
|
|
1935
|
+
borderStyle: "solid",
|
|
1936
|
+
borderColor: t4.border.default,
|
|
1937
|
+
paddingTop: t4.space["1"],
|
|
1938
|
+
paddingBottom: t4.space["1"],
|
|
1939
|
+
minWidth: 180,
|
|
1940
|
+
zIndex: t4.z.dropdown
|
|
1941
|
+
};
|
|
1942
|
+
function dropdown() {
|
|
1943
|
+
return style(MENU_BASE);
|
|
1944
|
+
}
|
|
1945
|
+
function dropdownItem() {
|
|
1946
|
+
return style({
|
|
1947
|
+
display: "flex",
|
|
1948
|
+
alignItems: "center",
|
|
1949
|
+
gap: t4.space["2"],
|
|
1950
|
+
fontFamily: t4.font.sans,
|
|
1951
|
+
fontSize: t4.size.sm,
|
|
1952
|
+
color: t4.content.primary,
|
|
1953
|
+
paddingTop: t4.space["2"],
|
|
1954
|
+
paddingBottom: t4.space["2"],
|
|
1955
|
+
paddingLeft: t4.space["3"],
|
|
1956
|
+
paddingRight: t4.space["3"],
|
|
1957
|
+
cursor: "pointer",
|
|
1958
|
+
on: {
|
|
1959
|
+
hover: { background: t4.surface.raised },
|
|
1960
|
+
disabled: { opacity: 0.5, cursor: "not-allowed" }
|
|
1961
|
+
},
|
|
1962
|
+
when: { selected: { background: t4.surface.sunken, fontWeight: t4.weight.medium } }
|
|
1963
|
+
});
|
|
1964
|
+
}
|
|
1965
|
+
function toast() {
|
|
1966
|
+
return style({
|
|
1967
|
+
background: t4.surface.raised,
|
|
1968
|
+
color: t4.content.primary,
|
|
1969
|
+
borderRadius: t4.radius.md,
|
|
1970
|
+
boxShadow: t4.shadow.lg,
|
|
1971
|
+
borderWidth: 1,
|
|
1972
|
+
borderStyle: "solid",
|
|
1973
|
+
borderColor: t4.border.default,
|
|
1974
|
+
padding: t4.space["3"],
|
|
1975
|
+
minWidth: 240,
|
|
1976
|
+
maxWidth: 420,
|
|
1977
|
+
zIndex: t4.z.toast
|
|
1978
|
+
});
|
|
1979
|
+
}
|
|
1980
|
+
var overlay = {
|
|
1981
|
+
backdrop,
|
|
1982
|
+
dialog,
|
|
1983
|
+
popover,
|
|
1984
|
+
tooltip,
|
|
1985
|
+
dropdown,
|
|
1986
|
+
dropdownItem,
|
|
1987
|
+
toast
|
|
1988
|
+
};
|
|
1989
|
+
|
|
1990
|
+
// ../core/src/styling/animation.ts
|
|
1991
|
+
var t5 = tokens.ref;
|
|
1992
|
+
var KEYFRAMES = {
|
|
1993
|
+
"streetui-fade-in": "from{opacity:0}to{opacity:1}",
|
|
1994
|
+
"streetui-fade-out": "from{opacity:1}to{opacity:0}",
|
|
1995
|
+
"streetui-scale-in": "from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}",
|
|
1996
|
+
"streetui-scale-out": "from{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}",
|
|
1997
|
+
"streetui-slide-in-up": "from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}",
|
|
1998
|
+
"streetui-slide-out-down": "from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(8px)}",
|
|
1999
|
+
"streetui-spin": "to{transform:rotate(360deg)}"
|
|
2000
|
+
};
|
|
2001
|
+
function ensureKeyframes(name) {
|
|
2002
|
+
const id = `kf-${name}`;
|
|
2003
|
+
if (!styleRegistry.has(id)) {
|
|
2004
|
+
styleRegistry.register(id, "base", `@keyframes ${name}{${KEYFRAMES[name]}}`);
|
|
2005
|
+
}
|
|
2006
|
+
}
|
|
2007
|
+
function animate(name, opts = {}) {
|
|
2008
|
+
ensureKeyframes(name);
|
|
2009
|
+
const duration = t5.duration[opts.duration ?? "base"];
|
|
2010
|
+
const easing = t5.easing[opts.easing ?? "standard"];
|
|
2011
|
+
const iterations = opts.iterations ?? 1;
|
|
2012
|
+
const fill = opts.fill ?? "both";
|
|
2013
|
+
return style({
|
|
2014
|
+
animationName: name,
|
|
2015
|
+
animationDuration: duration,
|
|
2016
|
+
animationTimingFunction: easing,
|
|
2017
|
+
animationFillMode: fill,
|
|
2018
|
+
animationIterationCount: String(iterations),
|
|
2019
|
+
...opts.delay !== void 0 ? { animationDelay: opts.delay } : {}
|
|
2020
|
+
});
|
|
2021
|
+
}
|
|
2022
|
+
function transition(properties, opts = {}) {
|
|
2023
|
+
const props = typeof properties === "string" ? [properties] : properties;
|
|
2024
|
+
const duration = t5.duration[opts.duration ?? "base"];
|
|
2025
|
+
const easing = t5.easing[opts.easing ?? "standard"];
|
|
2026
|
+
const delay = opts.delay !== void 0 ? ` ${typeof opts.delay === "number" ? `${opts.delay}ms` : opts.delay}` : "";
|
|
2027
|
+
return props.map((p) => `${p} ${duration} ${easing}${delay}`).join(", ");
|
|
2028
|
+
}
|
|
2029
|
+
var animation = { animate, transition, keyframes: KEYFRAMES };
|
|
2030
|
+
|
|
1086
2031
|
// ../graph/src/graph-node.ts
|
|
1087
2032
|
var GraphNode = class _GraphNode {
|
|
1088
2033
|
id;
|
|
@@ -1616,13 +2561,13 @@ var ContentBuilderBase = class {
|
|
|
1616
2561
|
this._node = _node;
|
|
1617
2562
|
this._graph = _graph;
|
|
1618
2563
|
}
|
|
1619
|
-
heading(
|
|
2564
|
+
heading(text2, options = {}) {
|
|
1620
2565
|
const props = { level: options.level ?? 1 };
|
|
1621
2566
|
if (options.class !== void 0) props["class"] = options.class;
|
|
1622
2567
|
if (options.id !== void 0) props["id"] = options.id;
|
|
1623
2568
|
applyA11yProps(props, options);
|
|
1624
2569
|
const node = this._graph.createNode("heading", { parent: this._node, props });
|
|
1625
|
-
const resolved = bindValue(this._graph, node, "text",
|
|
2570
|
+
const resolved = bindValue(this._graph, node, "text", text2);
|
|
1626
2571
|
node.setProp("text", resolved);
|
|
1627
2572
|
}
|
|
1628
2573
|
text(content, options = {}) {
|
|
@@ -1634,13 +2579,13 @@ var ContentBuilderBase = class {
|
|
|
1634
2579
|
const resolved = bindValue(this._graph, node, "text", content);
|
|
1635
2580
|
node.setProp("text", resolved);
|
|
1636
2581
|
}
|
|
1637
|
-
button(
|
|
2582
|
+
button(label2, options = {}) {
|
|
1638
2583
|
const props = {};
|
|
1639
2584
|
if (options.class !== void 0) props["class"] = options.class;
|
|
1640
2585
|
if (options.id !== void 0) props["id"] = options.id;
|
|
1641
2586
|
applyA11yProps(props, options);
|
|
1642
2587
|
const node = this._graph.createNode("button", { parent: this._node, props });
|
|
1643
|
-
const resolved = bindValue(this._graph, node, "label",
|
|
2588
|
+
const resolved = bindValue(this._graph, node, "label", label2);
|
|
1644
2589
|
node.setProp("label", resolved);
|
|
1645
2590
|
if (options.disabled !== void 0) {
|
|
1646
2591
|
const resolvedDisabled = bindValue(this._graph, node, "disabled", options.disabled);
|
|
@@ -1704,7 +2649,7 @@ var ContentBuilderBase = class {
|
|
|
1704
2649
|
if (options.id !== void 0) nodeOpts.key = options.id;
|
|
1705
2650
|
this._graph.createNode("image", nodeOpts);
|
|
1706
2651
|
}
|
|
1707
|
-
link(
|
|
2652
|
+
link(label2, options) {
|
|
1708
2653
|
const props = {
|
|
1709
2654
|
href: options.href,
|
|
1710
2655
|
external: options.external ?? false
|
|
@@ -1713,7 +2658,7 @@ var ContentBuilderBase = class {
|
|
|
1713
2658
|
if (options.id !== void 0) props["id"] = options.id;
|
|
1714
2659
|
applyA11yProps(props, options);
|
|
1715
2660
|
const node = this._graph.createNode("link", { parent: this._node, props });
|
|
1716
|
-
const resolved = bindValue(this._graph, node, "label",
|
|
2661
|
+
const resolved = bindValue(this._graph, node, "label", label2);
|
|
1717
2662
|
node.setProp("label", resolved);
|
|
1718
2663
|
if (options.onClick !== void 0) {
|
|
1719
2664
|
const handlerKey = `click:${node.id}`;
|
|
@@ -1721,6 +2666,16 @@ var ContentBuilderBase = class {
|
|
|
1721
2666
|
node.addEvent({ type: "click", handlerKey });
|
|
1722
2667
|
}
|
|
1723
2668
|
}
|
|
2669
|
+
code(source, options = {}) {
|
|
2670
|
+
const props = {};
|
|
2671
|
+
if (options.language !== void 0) props["data-language"] = options.language;
|
|
2672
|
+
if (options.class !== void 0) props["class"] = options.class;
|
|
2673
|
+
if (options.id !== void 0) props["id"] = options.id;
|
|
2674
|
+
applyA11yProps(props, options);
|
|
2675
|
+
const node = this._graph.createNode("code", { parent: this._node, props });
|
|
2676
|
+
const resolved = bindValue(this._graph, node, "text", source);
|
|
2677
|
+
node.setProp("text", resolved);
|
|
2678
|
+
}
|
|
1724
2679
|
};
|
|
1725
2680
|
var ContainerBuilderBase = class extends ContentBuilderBase {
|
|
1726
2681
|
section(key, builder, options = {}) {
|
|
@@ -1887,9 +2842,9 @@ var ContainerBuilderBase = class extends ContentBuilderBase {
|
|
|
1887
2842
|
options.fallback(fb, currentError, retry);
|
|
1888
2843
|
},
|
|
1889
2844
|
// Healthy state → body, guarded against synchronous build throws.
|
|
1890
|
-
(
|
|
2845
|
+
(body2) => {
|
|
1891
2846
|
try {
|
|
1892
|
-
builder(
|
|
2847
|
+
builder(body2);
|
|
1893
2848
|
} catch (err) {
|
|
1894
2849
|
queueMicrotask(() => localError.set(err));
|
|
1895
2850
|
}
|
|
@@ -2172,8 +3127,8 @@ function validateGraph(graph) {
|
|
|
2172
3127
|
function validateNode(node, dc) {
|
|
2173
3128
|
switch (node.type) {
|
|
2174
3129
|
case "heading": {
|
|
2175
|
-
const
|
|
2176
|
-
if (
|
|
3130
|
+
const text2 = node.getProp("text");
|
|
3131
|
+
if (text2 === void 0 || text2 === "") {
|
|
2177
3132
|
dc.warn("COMPILER_EMPTY_HEADING", `Heading node "${node.id}" has no text content`, {
|
|
2178
3133
|
nodeId: node.id
|
|
2179
3134
|
});
|
|
@@ -2453,11 +3408,11 @@ var Runtime = class {
|
|
|
2453
3408
|
/**
|
|
2454
3409
|
* Mount the compiled application into the given DOM container.
|
|
2455
3410
|
*/
|
|
2456
|
-
mount(compiled,
|
|
3411
|
+
mount(compiled, container2) {
|
|
2457
3412
|
if (this._mounted) {
|
|
2458
3413
|
throw new Error("[Runtime] Already mounted. Call unmount() first.");
|
|
2459
3414
|
}
|
|
2460
|
-
this._renderHandle = this._renderer.mount(compiled,
|
|
3415
|
+
this._renderHandle = this._renderer.mount(compiled, container2);
|
|
2461
3416
|
this._mounted = true;
|
|
2462
3417
|
this._bindSignals(compiled.graph);
|
|
2463
3418
|
const self2 = this;
|
|
@@ -2486,11 +3441,11 @@ var Runtime = class {
|
|
|
2486
3441
|
* cannot hydrate. Signal binding is identical to `mount`, so the live client
|
|
2487
3442
|
* lifecycle is established the same way.
|
|
2488
3443
|
*/
|
|
2489
|
-
hydrate(compiled,
|
|
3444
|
+
hydrate(compiled, container2) {
|
|
2490
3445
|
if (this._mounted) {
|
|
2491
3446
|
throw new Error("[Runtime] Already mounted. Call unmount() first.");
|
|
2492
3447
|
}
|
|
2493
|
-
this._renderHandle = this._renderer.hydrate !== void 0 ? this._renderer.hydrate(compiled,
|
|
3448
|
+
this._renderHandle = this._renderer.hydrate !== void 0 ? this._renderer.hydrate(compiled, container2) : this._renderer.mount(compiled, container2);
|
|
2494
3449
|
this._mounted = true;
|
|
2495
3450
|
this._bindSignals(compiled.graph);
|
|
2496
3451
|
const self2 = this;
|
|
@@ -2665,8 +3620,8 @@ var BrowserDOMAdapter = class {
|
|
|
2665
3620
|
setProperty(element, name, value) {
|
|
2666
3621
|
element[name] = value;
|
|
2667
3622
|
}
|
|
2668
|
-
setTextContent(node,
|
|
2669
|
-
node.textContent =
|
|
3623
|
+
setTextContent(node, text2) {
|
|
3624
|
+
node.textContent = text2;
|
|
2670
3625
|
}
|
|
2671
3626
|
getTextContent(node) {
|
|
2672
3627
|
return node.textContent;
|
|
@@ -2906,9 +3861,9 @@ function serializeAttributes(el) {
|
|
|
2906
3861
|
}
|
|
2907
3862
|
}
|
|
2908
3863
|
}
|
|
2909
|
-
const
|
|
2910
|
-
if (
|
|
2911
|
-
parts.push(` style="${escapeHtmlAttr(
|
|
3864
|
+
const style2 = el._style;
|
|
3865
|
+
if (style2 !== null && !style2.isEmpty && !el.attributes.has("style")) {
|
|
3866
|
+
parts.push(` style="${escapeHtmlAttr(style2.toCss())}"`);
|
|
2912
3867
|
}
|
|
2913
3868
|
return parts.join("");
|
|
2914
3869
|
}
|
|
@@ -3031,16 +3986,16 @@ var ServerDOMAdapter = class {
|
|
|
3031
3986
|
setProperty(element, name, value) {
|
|
3032
3987
|
element.properties.set(name, value);
|
|
3033
3988
|
}
|
|
3034
|
-
setTextContent(node,
|
|
3989
|
+
setTextContent(node, text2) {
|
|
3035
3990
|
const n = asServer(node);
|
|
3036
3991
|
if (n.kind === "element" || n.kind === "fragment") {
|
|
3037
3992
|
const el = n;
|
|
3038
3993
|
el.children.length = 0;
|
|
3039
|
-
const
|
|
3040
|
-
|
|
3041
|
-
el.children.push(
|
|
3994
|
+
const t6 = new ServerText(text2);
|
|
3995
|
+
t6.parent = el;
|
|
3996
|
+
el.children.push(t6);
|
|
3042
3997
|
} else if (n.kind === "text") {
|
|
3043
|
-
n.data =
|
|
3998
|
+
n.data = text2;
|
|
3044
3999
|
}
|
|
3045
4000
|
}
|
|
3046
4001
|
getTextContent(node) {
|
|
@@ -3145,14 +4100,14 @@ function focusById(dom, root, id) {
|
|
|
3145
4100
|
dom.focus(el);
|
|
3146
4101
|
return true;
|
|
3147
4102
|
}
|
|
3148
|
-
function focusFirst(dom,
|
|
3149
|
-
const el = dom.querySelector(
|
|
4103
|
+
function focusFirst(dom, container2, selector = FOCUSABLE_SELECTOR) {
|
|
4104
|
+
const el = dom.querySelector(container2, selector);
|
|
3150
4105
|
if (el === null) return false;
|
|
3151
4106
|
dom.focus(el);
|
|
3152
4107
|
return true;
|
|
3153
4108
|
}
|
|
3154
|
-
function getFocusable(dom,
|
|
3155
|
-
return Array.from(dom.querySelectorAll(
|
|
4109
|
+
function getFocusable(dom, container2, selector = FOCUSABLE_SELECTOR) {
|
|
4110
|
+
return Array.from(dom.querySelectorAll(container2, selector)).filter(
|
|
3156
4111
|
(el) => dom.matches(el, selector)
|
|
3157
4112
|
);
|
|
3158
4113
|
}
|
|
@@ -3162,14 +4117,14 @@ function saveFocus(dom) {
|
|
|
3162
4117
|
function restoreFocus(dom, saved) {
|
|
3163
4118
|
if (saved !== null) dom.focus(saved);
|
|
3164
4119
|
}
|
|
3165
|
-
function focusInitial(dom,
|
|
3166
|
-
if (initialFocusId !== void 0 && focusById(dom,
|
|
3167
|
-
focusFirst(dom,
|
|
4120
|
+
function focusInitial(dom, container2, initialFocusId) {
|
|
4121
|
+
if (initialFocusId !== void 0 && focusById(dom, container2, initialFocusId)) return;
|
|
4122
|
+
focusFirst(dom, container2);
|
|
3168
4123
|
}
|
|
3169
|
-
function trapFocus(dom,
|
|
4124
|
+
function trapFocus(dom, container2) {
|
|
3170
4125
|
const onKeydown = (event) => {
|
|
3171
4126
|
if (event.key !== "Tab") return;
|
|
3172
|
-
const items = getFocusable(dom,
|
|
4127
|
+
const items = getFocusable(dom, container2);
|
|
3173
4128
|
if (items.length === 0) {
|
|
3174
4129
|
event.preventDefault();
|
|
3175
4130
|
return;
|
|
@@ -3177,7 +4132,7 @@ function trapFocus(dom, container) {
|
|
|
3177
4132
|
const first = items[0];
|
|
3178
4133
|
const last = items[items.length - 1];
|
|
3179
4134
|
const active = dom.activeElement();
|
|
3180
|
-
if (active === null || !dom.contains(
|
|
4135
|
+
if (active === null || !dom.contains(container2, active)) {
|
|
3181
4136
|
event.preventDefault();
|
|
3182
4137
|
dom.focus(first);
|
|
3183
4138
|
} else if (event.shiftKey && active === first) {
|
|
@@ -3188,26 +4143,26 @@ function trapFocus(dom, container) {
|
|
|
3188
4143
|
dom.focus(first);
|
|
3189
4144
|
}
|
|
3190
4145
|
};
|
|
3191
|
-
dom.addEventListener(
|
|
3192
|
-
return () => dom.removeEventListener(
|
|
4146
|
+
dom.addEventListener(container2, "keydown", onKeydown);
|
|
4147
|
+
return () => dom.removeEventListener(container2, "keydown", onKeydown);
|
|
3193
4148
|
}
|
|
3194
4149
|
var containmentStack = [];
|
|
3195
|
-
function containFocus(dom,
|
|
3196
|
-
const
|
|
3197
|
-
if (
|
|
4150
|
+
function containFocus(dom, container2) {
|
|
4151
|
+
const body2 = dom.body();
|
|
4152
|
+
if (body2 === null) return () => {
|
|
3198
4153
|
};
|
|
3199
|
-
containmentStack.push(
|
|
4154
|
+
containmentStack.push(container2);
|
|
3200
4155
|
const onFocusIn = (event) => {
|
|
3201
|
-
if (containmentStack[containmentStack.length - 1] !==
|
|
4156
|
+
if (containmentStack[containmentStack.length - 1] !== container2) return;
|
|
3202
4157
|
const target = event.target;
|
|
3203
|
-
if (target !== null && !dom.contains(
|
|
3204
|
-
focusFirst(dom,
|
|
4158
|
+
if (target !== null && !dom.contains(container2, target)) {
|
|
4159
|
+
focusFirst(dom, container2);
|
|
3205
4160
|
}
|
|
3206
4161
|
};
|
|
3207
|
-
dom.addEventListener(
|
|
4162
|
+
dom.addEventListener(body2, "focusin", onFocusIn);
|
|
3208
4163
|
return () => {
|
|
3209
|
-
dom.removeEventListener(
|
|
3210
|
-
const index = containmentStack.lastIndexOf(
|
|
4164
|
+
dom.removeEventListener(body2, "focusin", onFocusIn);
|
|
4165
|
+
const index = containmentStack.lastIndexOf(container2);
|
|
3211
4166
|
if (index !== -1) containmentStack.splice(index, 1);
|
|
3212
4167
|
};
|
|
3213
4168
|
}
|
|
@@ -3218,13 +4173,13 @@ function onEscape(dom, target, handler) {
|
|
|
3218
4173
|
dom.addEventListener(target, "keydown", onKeydown);
|
|
3219
4174
|
return () => dom.removeEventListener(target, "keydown", onKeydown);
|
|
3220
4175
|
}
|
|
3221
|
-
function rovingMenu(dom,
|
|
4176
|
+
function rovingMenu(dom, container2, selector = FOCUSABLE_SELECTOR) {
|
|
3222
4177
|
const onKeydown = (event) => {
|
|
3223
4178
|
const key = event.key;
|
|
3224
4179
|
const isActivate = key === "Enter" || key === " " || key === "Spacebar";
|
|
3225
4180
|
const isMove = key === "ArrowDown" || key === "ArrowUp" || key === "Home" || key === "End";
|
|
3226
4181
|
if (!isActivate && !isMove) return;
|
|
3227
|
-
const items = getFocusable(dom,
|
|
4182
|
+
const items = getFocusable(dom, container2, selector);
|
|
3228
4183
|
if (items.length === 0) return;
|
|
3229
4184
|
const active = dom.activeElement();
|
|
3230
4185
|
const index = active === null ? -1 : items.indexOf(active);
|
|
@@ -3242,8 +4197,8 @@ function rovingMenu(dom, container, selector = FOCUSABLE_SELECTOR) {
|
|
|
3242
4197
|
else next = index <= 0 ? items.length - 1 : index - 1;
|
|
3243
4198
|
dom.focus(items[next]);
|
|
3244
4199
|
};
|
|
3245
|
-
dom.addEventListener(
|
|
3246
|
-
return () => dom.removeEventListener(
|
|
4200
|
+
dom.addEventListener(container2, "keydown", onKeydown);
|
|
4201
|
+
return () => dom.removeEventListener(container2, "keydown", onKeydown);
|
|
3247
4202
|
}
|
|
3248
4203
|
|
|
3249
4204
|
// ../dom/src/live-region.ts
|
|
@@ -3258,8 +4213,8 @@ function makeRegion(dom, politeness) {
|
|
|
3258
4213
|
return el;
|
|
3259
4214
|
}
|
|
3260
4215
|
function createAnnouncer(dom) {
|
|
3261
|
-
const
|
|
3262
|
-
if (
|
|
4216
|
+
const body2 = dom.body();
|
|
4217
|
+
if (body2 === null) {
|
|
3263
4218
|
return { announce() {
|
|
3264
4219
|
}, clear() {
|
|
3265
4220
|
}, destroy() {
|
|
@@ -3267,8 +4222,8 @@ function createAnnouncer(dom) {
|
|
|
3267
4222
|
}
|
|
3268
4223
|
const polite = makeRegion(dom, "polite");
|
|
3269
4224
|
const assertive = makeRegion(dom, "assertive");
|
|
3270
|
-
dom.appendChild(
|
|
3271
|
-
dom.appendChild(
|
|
4225
|
+
dom.appendChild(body2, polite);
|
|
4226
|
+
dom.appendChild(body2, assertive);
|
|
3272
4227
|
let destroyed = false;
|
|
3273
4228
|
const write = (region, message) => {
|
|
3274
4229
|
dom.setTextContent(region, "");
|
|
@@ -3298,12 +4253,12 @@ function createAnnouncer(dom) {
|
|
|
3298
4253
|
}
|
|
3299
4254
|
|
|
3300
4255
|
// ../renderer/src/render-context.ts
|
|
3301
|
-
function createRenderContext(dom, graph,
|
|
4256
|
+
function createRenderContext(dom, graph, container2, hydrationDiagnostics, staticHTML) {
|
|
3302
4257
|
return {
|
|
3303
4258
|
dom,
|
|
3304
4259
|
graph,
|
|
3305
4260
|
instances: /* @__PURE__ */ new Map(),
|
|
3306
|
-
container,
|
|
4261
|
+
container: container2,
|
|
3307
4262
|
...hydrationDiagnostics !== void 0 ? { hydrationDiagnostics } : {},
|
|
3308
4263
|
...staticHTML !== void 0 ? { staticHTML } : {}
|
|
3309
4264
|
};
|
|
@@ -3401,6 +4356,13 @@ function applyProp(dom, element, name, value) {
|
|
|
3401
4356
|
}
|
|
3402
4357
|
return;
|
|
3403
4358
|
}
|
|
4359
|
+
if (name.startsWith("style.")) {
|
|
4360
|
+
const el = element;
|
|
4361
|
+
const prop = name.slice("style.".length);
|
|
4362
|
+
if (value === null || value === void 0) el.style.removeProperty(prop);
|
|
4363
|
+
else el.style.setProperty(prop, String(value));
|
|
4364
|
+
return;
|
|
4365
|
+
}
|
|
3404
4366
|
if (value === null || value === void 0 || value === false) {
|
|
3405
4367
|
dom.removeAttribute(element, name);
|
|
3406
4368
|
return;
|
|
@@ -3420,8 +4382,8 @@ function wireEvents(dom, graph, node, element, instance) {
|
|
|
3420
4382
|
if (handler === void 0) continue;
|
|
3421
4383
|
const domListener = (domEvent) => {
|
|
3422
4384
|
if (eventDesc.type === "input" || eventDesc.type === "change") {
|
|
3423
|
-
const
|
|
3424
|
-
handler(
|
|
4385
|
+
const input2 = domEvent.target;
|
|
4386
|
+
handler(input2.value);
|
|
3425
4387
|
} else if (eventDesc.type === "submit") {
|
|
3426
4388
|
domEvent.preventDefault();
|
|
3427
4389
|
handler(domEvent);
|
|
@@ -3451,6 +4413,11 @@ var TAG_MAP = {
|
|
|
3451
4413
|
"list-item": "li",
|
|
3452
4414
|
image: "img",
|
|
3453
4415
|
link: "a",
|
|
4416
|
+
// A `code()` node renders as a semantic `<pre>` outer element; the mount/
|
|
4417
|
+
// hydrate branches add a single inner `<code>` holding the escaped source
|
|
4418
|
+
// (mirrors how `text` renders `<span>` + an inner text node). One graph
|
|
4419
|
+
// node → one outer element preserves positional hydration.
|
|
4420
|
+
code: "pre",
|
|
3454
4421
|
component: "div",
|
|
3455
4422
|
slot: "div",
|
|
3456
4423
|
fragment: "div",
|
|
@@ -3760,7 +4727,7 @@ function nextFrame(cb) {
|
|
|
3760
4727
|
function splitClass(value) {
|
|
3761
4728
|
if (value === null) return [];
|
|
3762
4729
|
const out = [];
|
|
3763
|
-
for (const
|
|
4730
|
+
for (const t6 of value.split(/\s+/)) if (t6.length > 0) out.push(t6);
|
|
3764
4731
|
return out;
|
|
3765
4732
|
}
|
|
3766
4733
|
function addClasses(dom, el, classes2) {
|
|
@@ -4142,9 +5109,9 @@ function mountNode(ctx, graphNode, parentDom) {
|
|
|
4142
5109
|
return instance2;
|
|
4143
5110
|
}
|
|
4144
5111
|
if (graphNode.type === "text") {
|
|
4145
|
-
const
|
|
5112
|
+
const text2 = String(graphNode.getProp("text") ?? "");
|
|
4146
5113
|
const el2 = dom.createElement("span");
|
|
4147
|
-
const textNode = dom.createTextNode(
|
|
5114
|
+
const textNode = dom.createTextNode(text2);
|
|
4148
5115
|
dom.appendChild(el2, textNode);
|
|
4149
5116
|
applyNodeProps(ctx, graphNode, el2);
|
|
4150
5117
|
const instance2 = new NodeInstance(graphNode, el2);
|
|
@@ -4160,8 +5127,8 @@ function mountNode(ctx, graphNode, parentDom) {
|
|
|
4160
5127
|
const level = graphNode.getProp("level") ?? 1;
|
|
4161
5128
|
const tag2 = `h${level}`;
|
|
4162
5129
|
const el2 = dom.createElement(tag2);
|
|
4163
|
-
const
|
|
4164
|
-
dom.setTextContent(el2,
|
|
5130
|
+
const text2 = String(graphNode.getProp("text") ?? "");
|
|
5131
|
+
dom.setTextContent(el2, text2);
|
|
4165
5132
|
applyNodeProps(ctx, graphNode, el2);
|
|
4166
5133
|
const instance2 = new NodeInstance(graphNode, el2);
|
|
4167
5134
|
ctx.instances.set(graphNode.id, instance2);
|
|
@@ -4206,13 +5173,30 @@ function mountNode(ctx, graphNode, parentDom) {
|
|
|
4206
5173
|
dom.appendChild(parentDom, el2);
|
|
4207
5174
|
return instance2;
|
|
4208
5175
|
}
|
|
5176
|
+
if (graphNode.type === "code") {
|
|
5177
|
+
const source = String(graphNode.getProp("text") ?? "");
|
|
5178
|
+
const pre2 = dom.createElement("pre");
|
|
5179
|
+
const codeEl = dom.createElement("code");
|
|
5180
|
+
const textNode = dom.createTextNode(source);
|
|
5181
|
+
dom.appendChild(codeEl, textNode);
|
|
5182
|
+
dom.appendChild(pre2, codeEl);
|
|
5183
|
+
applyNodeProps(ctx, graphNode, pre2);
|
|
5184
|
+
const instance2 = new NodeInstance(graphNode, pre2);
|
|
5185
|
+
ctx.instances.set(graphNode.id, instance2);
|
|
5186
|
+
wireEvents(dom, graph, graphNode, pre2, instance2);
|
|
5187
|
+
if (graphNode.stateRefs.length !== 0) {
|
|
5188
|
+
wireSignalBindings(ctx, graphNode, instance2, textUpdate(dom, pre2, textNode));
|
|
5189
|
+
}
|
|
5190
|
+
dom.appendChild(parentDom, pre2);
|
|
5191
|
+
return instance2;
|
|
5192
|
+
}
|
|
4209
5193
|
if (graphNode.type === "link") {
|
|
4210
5194
|
const el2 = dom.createElement("a");
|
|
4211
5195
|
const href = graphNode.getProp("href");
|
|
4212
|
-
const
|
|
5196
|
+
const label2 = graphNode.getProp("label");
|
|
4213
5197
|
const external = graphNode.getProp("external");
|
|
4214
5198
|
if (href !== void 0) dom.setAttribute(el2, "href", String(href));
|
|
4215
|
-
if (
|
|
5199
|
+
if (label2 !== void 0) dom.setTextContent(el2, String(label2));
|
|
4216
5200
|
if (external === true) {
|
|
4217
5201
|
dom.setAttribute(el2, "target", "_blank");
|
|
4218
5202
|
dom.setAttribute(el2, "rel", "noopener noreferrer");
|
|
@@ -4229,8 +5213,8 @@ function mountNode(ctx, graphNode, parentDom) {
|
|
|
4229
5213
|
}
|
|
4230
5214
|
if (graphNode.type === "button") {
|
|
4231
5215
|
const el2 = dom.createElement("button");
|
|
4232
|
-
const
|
|
4233
|
-
if (
|
|
5216
|
+
const label2 = graphNode.getProp("label");
|
|
5217
|
+
if (label2 !== void 0) dom.setTextContent(el2, String(label2));
|
|
4234
5218
|
const disabled = graphNode.getProp("disabled");
|
|
4235
5219
|
if (disabled === true) dom.setAttribute(el2, "disabled", "");
|
|
4236
5220
|
applyNodeProps(ctx, graphNode, el2);
|
|
@@ -4263,13 +5247,13 @@ function mountNode(ctx, graphNode, parentDom) {
|
|
|
4263
5247
|
applyNodeProps(ctx, graphNode, anchor);
|
|
4264
5248
|
const instance2 = new NodeInstance(graphNode, anchor);
|
|
4265
5249
|
ctx.instances.set(graphNode.id, instance2);
|
|
4266
|
-
const
|
|
5250
|
+
const body2 = dom.body();
|
|
4267
5251
|
let target = anchor;
|
|
4268
|
-
if (
|
|
5252
|
+
if (body2 !== null) {
|
|
4269
5253
|
const portalContainer = dom.createElement("div");
|
|
4270
5254
|
dom.setAttribute(portalContainer, "data-streetui-portal-container", "");
|
|
4271
|
-
dom.appendChild(
|
|
4272
|
-
instance2.trackCleanup(() => dom.removeChild(
|
|
5255
|
+
dom.appendChild(body2, portalContainer);
|
|
5256
|
+
instance2.trackCleanup(() => dom.removeChild(body2, portalContainer));
|
|
4273
5257
|
target = portalContainer;
|
|
4274
5258
|
}
|
|
4275
5259
|
for (const child of graphNode.children) {
|
|
@@ -4508,6 +5492,173 @@ function wireComponentBehavior(ctx, graphNode, instance) {
|
|
|
4508
5492
|
for (const cleanup of fn()) instance.trackCleanup(cleanup);
|
|
4509
5493
|
}
|
|
4510
5494
|
|
|
5495
|
+
// ../renderer/src/styling-transitions.ts
|
|
5496
|
+
var DURATION_MS = { fast: 120, base: 200, slow: 320 };
|
|
5497
|
+
function activeClass(props, duration, easing) {
|
|
5498
|
+
return style({ transition: transition(props, { duration, easing }) });
|
|
5499
|
+
}
|
|
5500
|
+
function fadeTransition(opts = {}) {
|
|
5501
|
+
const duration = opts.duration ?? "base";
|
|
5502
|
+
const easing = opts.easing ?? "standard";
|
|
5503
|
+
const active = activeClass(["opacity"], duration, easing);
|
|
5504
|
+
const hidden = style({ opacity: 0 });
|
|
5505
|
+
const shown = style({ opacity: 1 });
|
|
5506
|
+
return {
|
|
5507
|
+
enterActive: [active],
|
|
5508
|
+
enterFrom: [hidden],
|
|
5509
|
+
enterTo: [shown],
|
|
5510
|
+
leaveActive: [active],
|
|
5511
|
+
leaveFrom: [shown],
|
|
5512
|
+
leaveTo: [hidden],
|
|
5513
|
+
appear: opts.appear ?? false,
|
|
5514
|
+
duration: DURATION_MS[duration]
|
|
5515
|
+
};
|
|
5516
|
+
}
|
|
5517
|
+
function scaleTransition(opts = {}) {
|
|
5518
|
+
const duration = opts.duration ?? "base";
|
|
5519
|
+
const easing = opts.easing ?? "emphasized";
|
|
5520
|
+
const active = activeClass(["opacity", "transform"], duration, easing);
|
|
5521
|
+
const hidden = style({ opacity: 0, transform: "scale(.96)" });
|
|
5522
|
+
const shown = style({ opacity: 1, transform: "scale(1)" });
|
|
5523
|
+
return {
|
|
5524
|
+
enterActive: [active],
|
|
5525
|
+
enterFrom: [hidden],
|
|
5526
|
+
enterTo: [shown],
|
|
5527
|
+
leaveActive: [active],
|
|
5528
|
+
leaveFrom: [shown],
|
|
5529
|
+
leaveTo: [hidden],
|
|
5530
|
+
appear: opts.appear ?? false,
|
|
5531
|
+
duration: DURATION_MS[duration]
|
|
5532
|
+
};
|
|
5533
|
+
}
|
|
5534
|
+
function slideTransition(opts = {}) {
|
|
5535
|
+
const duration = opts.duration ?? "base";
|
|
5536
|
+
const easing = opts.easing ?? "standard";
|
|
5537
|
+
const active = activeClass(["opacity", "transform"], duration, easing);
|
|
5538
|
+
const hidden = style({ opacity: 0, transform: "translateY(8px)" });
|
|
5539
|
+
const shown = style({ opacity: 1, transform: "translateY(0)" });
|
|
5540
|
+
return {
|
|
5541
|
+
enterActive: [active],
|
|
5542
|
+
enterFrom: [hidden],
|
|
5543
|
+
enterTo: [shown],
|
|
5544
|
+
leaveActive: [active],
|
|
5545
|
+
leaveFrom: [shown],
|
|
5546
|
+
leaveTo: [hidden],
|
|
5547
|
+
appear: opts.appear ?? false,
|
|
5548
|
+
duration: DURATION_MS[duration]
|
|
5549
|
+
};
|
|
5550
|
+
}
|
|
5551
|
+
var transitions = { fadeTransition, scaleTransition, slideTransition };
|
|
5552
|
+
|
|
5553
|
+
// ../renderer/src/styles.ts
|
|
5554
|
+
var CSS_MARKER = "data-streetui-css";
|
|
5555
|
+
var CSS_KEYS = "data-streetui-css-keys";
|
|
5556
|
+
function renderStyles(options = {}) {
|
|
5557
|
+
const registry = options.registry ?? styleRegistry;
|
|
5558
|
+
const css = registry.serializeCSS();
|
|
5559
|
+
if (css.length === 0) return "";
|
|
5560
|
+
const keys = registry.identities().join(" ");
|
|
5561
|
+
return `<style ${CSS_MARKER} ${CSS_KEYS}="${keys}">${css}</style>`;
|
|
5562
|
+
}
|
|
5563
|
+
function adoptServerStyles(dom, root, options = {}) {
|
|
5564
|
+
const registry = options.registry ?? styleRegistry;
|
|
5565
|
+
const el = findStyleBlock(dom, root);
|
|
5566
|
+
if (el === null) return 0;
|
|
5567
|
+
const keysAttr = dom.getAttribute(el, CSS_KEYS);
|
|
5568
|
+
if (keysAttr === null || keysAttr.length === 0) {
|
|
5569
|
+
registry.adoptServerIdentities([]);
|
|
5570
|
+
return 0;
|
|
5571
|
+
}
|
|
5572
|
+
const ids = keysAttr.split(" ").filter((s) => s.length > 0);
|
|
5573
|
+
registry.adoptServerIdentities(ids);
|
|
5574
|
+
return ids.length;
|
|
5575
|
+
}
|
|
5576
|
+
function findStyleBlock(dom, root) {
|
|
5577
|
+
const head = dom.head();
|
|
5578
|
+
const scope = root ?? head;
|
|
5579
|
+
if (scope === null) return null;
|
|
5580
|
+
return searchDescendants(dom, scope);
|
|
5581
|
+
}
|
|
5582
|
+
function searchDescendants(dom, el) {
|
|
5583
|
+
if (dom.isElement(el) && dom.getAttribute(el, CSS_MARKER) !== null) return el;
|
|
5584
|
+
for (const child of dom.childNodes(el)) {
|
|
5585
|
+
if (!dom.isElement(child)) continue;
|
|
5586
|
+
const found = searchDescendants(dom, child);
|
|
5587
|
+
if (found !== null) return found;
|
|
5588
|
+
}
|
|
5589
|
+
return null;
|
|
5590
|
+
}
|
|
5591
|
+
|
|
5592
|
+
// ../renderer/src/theme.ts
|
|
5593
|
+
var DEFAULT_STORAGE_KEY = "streetui-theme";
|
|
5594
|
+
var CHOICES = ["light", "dark", "system"];
|
|
5595
|
+
function defaultThemeStorage(key = DEFAULT_STORAGE_KEY) {
|
|
5596
|
+
try {
|
|
5597
|
+
if (typeof localStorage !== "undefined") {
|
|
5598
|
+
return {
|
|
5599
|
+
read() {
|
|
5600
|
+
const v = localStorage.getItem(key);
|
|
5601
|
+
return v === "light" || v === "dark" || v === "system" ? v : null;
|
|
5602
|
+
},
|
|
5603
|
+
write(choice) {
|
|
5604
|
+
try {
|
|
5605
|
+
localStorage.setItem(key, choice);
|
|
5606
|
+
} catch {
|
|
5607
|
+
}
|
|
5608
|
+
}
|
|
5609
|
+
};
|
|
5610
|
+
}
|
|
5611
|
+
} catch {
|
|
5612
|
+
}
|
|
5613
|
+
let mem = null;
|
|
5614
|
+
return { read: () => mem, write: (c) => {
|
|
5615
|
+
mem = c;
|
|
5616
|
+
} };
|
|
5617
|
+
}
|
|
5618
|
+
function systemPrefersDark() {
|
|
5619
|
+
try {
|
|
5620
|
+
return typeof matchMedia !== "undefined" && matchMedia("(prefers-color-scheme: dark)").matches;
|
|
5621
|
+
} catch {
|
|
5622
|
+
return false;
|
|
5623
|
+
}
|
|
5624
|
+
}
|
|
5625
|
+
function createTheme(options = {}) {
|
|
5626
|
+
const storage = options.storage ?? defaultThemeStorage();
|
|
5627
|
+
const choice = signal(storage.read() ?? options.initial ?? "system");
|
|
5628
|
+
const resolved = derived(() => {
|
|
5629
|
+
const c = choice.get();
|
|
5630
|
+
if (c === "system") return systemPrefersDark() ? "dark" : "light";
|
|
5631
|
+
return c;
|
|
5632
|
+
});
|
|
5633
|
+
const label2 = derived(() => {
|
|
5634
|
+
const c = choice.get();
|
|
5635
|
+
return c === "light" ? "Theme: Light" : c === "dark" ? "Theme: Dark" : "Theme: System";
|
|
5636
|
+
});
|
|
5637
|
+
const root = options.root ?? (typeof document !== "undefined" ? document.documentElement : null);
|
|
5638
|
+
const stop = root !== null ? effect(() => {
|
|
5639
|
+
root.setAttribute("data-theme", resolved.get());
|
|
5640
|
+
}) : () => {
|
|
5641
|
+
};
|
|
5642
|
+
return {
|
|
5643
|
+
choice,
|
|
5644
|
+
resolved,
|
|
5645
|
+
label: label2,
|
|
5646
|
+
set(next) {
|
|
5647
|
+
choice.set(next);
|
|
5648
|
+
storage.write(next);
|
|
5649
|
+
},
|
|
5650
|
+
cycle() {
|
|
5651
|
+
const i = CHOICES.indexOf(choice.get());
|
|
5652
|
+
const next = CHOICES[(i + 1) % CHOICES.length];
|
|
5653
|
+
choice.set(next);
|
|
5654
|
+
storage.write(next);
|
|
5655
|
+
},
|
|
5656
|
+
dispose() {
|
|
5657
|
+
stop();
|
|
5658
|
+
}
|
|
5659
|
+
};
|
|
5660
|
+
}
|
|
5661
|
+
|
|
4511
5662
|
// ../renderer/src/hydration-diagnostics.ts
|
|
4512
5663
|
function formatHydrationDiagnostic(d) {
|
|
4513
5664
|
const at = ` at ${d.path}`;
|
|
@@ -4594,6 +5745,27 @@ function hydrateNode(ctx, graphNode, domNode, path) {
|
|
|
4594
5745
|
}
|
|
4595
5746
|
return instance;
|
|
4596
5747
|
}
|
|
5748
|
+
case "code": {
|
|
5749
|
+
let codeEl = dom.firstChild(domNode);
|
|
5750
|
+
if (codeEl === null || dom.isTextNode(codeEl)) {
|
|
5751
|
+
const createdCode = dom.createElement("code");
|
|
5752
|
+
dom.appendChild(domNode, createdCode);
|
|
5753
|
+
codeEl = createdCode;
|
|
5754
|
+
}
|
|
5755
|
+
let textNode = dom.firstChild(codeEl);
|
|
5756
|
+
if (textNode === null || !dom.isTextNode(textNode)) {
|
|
5757
|
+
const created = dom.createTextNode(String(graphNode.getProp("text") ?? ""));
|
|
5758
|
+
dom.appendChild(codeEl, created);
|
|
5759
|
+
textNode = created;
|
|
5760
|
+
}
|
|
5761
|
+
const instance = new NodeInstance(graphNode, domNode);
|
|
5762
|
+
ctx.instances.set(graphNode.id, instance);
|
|
5763
|
+
wireEvents(dom, graph, graphNode, domNode, instance);
|
|
5764
|
+
if (graphNode.stateRefs.length !== 0) {
|
|
5765
|
+
wireSignalBindings(ctx, graphNode, instance, textUpdate(dom, domNode, textNode));
|
|
5766
|
+
}
|
|
5767
|
+
return instance;
|
|
5768
|
+
}
|
|
4597
5769
|
case "image":
|
|
4598
5770
|
case "link": {
|
|
4599
5771
|
const instance = new NodeInstance(graphNode, domNode);
|
|
@@ -4617,16 +5789,16 @@ function hydrateNode(ctx, graphNode, domNode, path) {
|
|
|
4617
5789
|
case "portal": {
|
|
4618
5790
|
const instance = new NodeInstance(graphNode, domNode);
|
|
4619
5791
|
ctx.instances.set(graphNode.id, instance);
|
|
4620
|
-
const
|
|
5792
|
+
const body2 = dom.body();
|
|
4621
5793
|
let target = domNode;
|
|
4622
|
-
if (
|
|
5794
|
+
if (body2 !== null) {
|
|
4623
5795
|
const portalContainer = dom.createElement("div");
|
|
4624
5796
|
dom.setAttribute(portalContainer, "data-streetui-portal-container", "");
|
|
4625
5797
|
for (const child of dom.childNodes(domNode)) {
|
|
4626
5798
|
dom.appendChild(portalContainer, child);
|
|
4627
5799
|
}
|
|
4628
|
-
dom.appendChild(
|
|
4629
|
-
instance.trackCleanup(() => dom.removeChild(
|
|
5800
|
+
dom.appendChild(body2, portalContainer);
|
|
5801
|
+
instance.trackCleanup(() => dom.removeChild(body2, portalContainer));
|
|
4630
5802
|
target = portalContainer;
|
|
4631
5803
|
}
|
|
4632
5804
|
hydrateChildren(ctx, graphNode, instance, target, path);
|
|
@@ -4745,6 +5917,8 @@ function expectedTag(ctx, graphNode) {
|
|
|
4745
5917
|
return "img";
|
|
4746
5918
|
case "link":
|
|
4747
5919
|
return "a";
|
|
5920
|
+
case "code":
|
|
5921
|
+
return "pre";
|
|
4748
5922
|
case "button":
|
|
4749
5923
|
return "button";
|
|
4750
5924
|
default:
|
|
@@ -4769,9 +5943,9 @@ var StreetRenderHandle = class {
|
|
|
4769
5943
|
this._disposed = true;
|
|
4770
5944
|
this._rootInstance.dispose();
|
|
4771
5945
|
const dom = this._ctx.dom;
|
|
4772
|
-
const
|
|
4773
|
-
for (const child of dom.childNodes(
|
|
4774
|
-
dom.removeChild(
|
|
5946
|
+
const container2 = this._ctx.container;
|
|
5947
|
+
for (const child of dom.childNodes(container2)) {
|
|
5948
|
+
dom.removeChild(container2, child);
|
|
4775
5949
|
}
|
|
4776
5950
|
this._ctx.instances.clear();
|
|
4777
5951
|
}
|
|
@@ -4787,8 +5961,8 @@ var StreetRendererImpl = class {
|
|
|
4787
5961
|
this._hydrationDiagnostics = options.hydrationDiagnostics;
|
|
4788
5962
|
}
|
|
4789
5963
|
}
|
|
4790
|
-
mount(compiled,
|
|
4791
|
-
const ctx = createRenderContext(this._dom, compiled.graph,
|
|
5964
|
+
mount(compiled, container2) {
|
|
5965
|
+
const ctx = createRenderContext(this._dom, compiled.graph, container2);
|
|
4792
5966
|
const rootInstance = mountGraph(ctx);
|
|
4793
5967
|
this._wireSignals(ctx, rootInstance);
|
|
4794
5968
|
return new StreetRenderHandle(ctx, rootInstance);
|
|
@@ -4800,11 +5974,11 @@ var StreetRendererImpl = class {
|
|
|
4800
5974
|
* behavior (events + signal subscriptions). Mismatched subtrees are locally
|
|
4801
5975
|
* replaced. Returns the same handle type as `mount`.
|
|
4802
5976
|
*/
|
|
4803
|
-
hydrate(compiled,
|
|
5977
|
+
hydrate(compiled, container2) {
|
|
4804
5978
|
const ctx = createRenderContext(
|
|
4805
5979
|
this._dom,
|
|
4806
5980
|
compiled.graph,
|
|
4807
|
-
|
|
5981
|
+
container2,
|
|
4808
5982
|
this._hydrationDiagnostics
|
|
4809
5983
|
);
|
|
4810
5984
|
const rootInstance = hydrateGraph(ctx);
|
|
@@ -4823,12 +5997,12 @@ var STATE_MARKER_ATTR = "data-streetui-state";
|
|
|
4823
5997
|
function escapeForScript(json) {
|
|
4824
5998
|
let out = "";
|
|
4825
5999
|
for (const ch of json) {
|
|
4826
|
-
const
|
|
6000
|
+
const code2 = ch.charCodeAt(0);
|
|
4827
6001
|
if (ch === "<") out += "\\u003c";
|
|
4828
6002
|
else if (ch === ">") out += "\\u003e";
|
|
4829
6003
|
else if (ch === "&") out += "\\u0026";
|
|
4830
|
-
else if (
|
|
4831
|
-
else if (
|
|
6004
|
+
else if (code2 === 8232) out += "\\u2028";
|
|
6005
|
+
else if (code2 === 8233) out += "\\u2029";
|
|
4832
6006
|
else out += ch;
|
|
4833
6007
|
}
|
|
4834
6008
|
return out;
|
|
@@ -4841,10 +6015,10 @@ function serializeState(state) {
|
|
|
4841
6015
|
function readState(dom, root) {
|
|
4842
6016
|
const el = dom.querySelector(root, `script[${STATE_MARKER_ATTR}]`);
|
|
4843
6017
|
if (el === null) return {};
|
|
4844
|
-
const
|
|
4845
|
-
if (
|
|
6018
|
+
const text2 = dom.getTextContent(el);
|
|
6019
|
+
if (text2 === null || text2.length === 0) return {};
|
|
4846
6020
|
try {
|
|
4847
|
-
const parsed = JSON.parse(
|
|
6021
|
+
const parsed = JSON.parse(text2);
|
|
4848
6022
|
if (parsed !== null && typeof parsed === "object") {
|
|
4849
6023
|
return parsed;
|
|
4850
6024
|
}
|
|
@@ -4929,10 +6103,10 @@ function collectMaximalStaticRoots(graph) {
|
|
|
4929
6103
|
return roots;
|
|
4930
6104
|
}
|
|
4931
6105
|
function serializeStaticSubtree(dom, graph, root) {
|
|
4932
|
-
const
|
|
4933
|
-
const ctx = createRenderContext(dom, graph,
|
|
4934
|
-
const instance = mountNode(ctx, root,
|
|
4935
|
-
const html = dom.serializeInner(
|
|
6106
|
+
const container2 = dom.createElement("div");
|
|
6107
|
+
const ctx = createRenderContext(dom, graph, container2);
|
|
6108
|
+
const instance = mountNode(ctx, root, container2);
|
|
6109
|
+
const html = dom.serializeInner(container2);
|
|
4936
6110
|
instance.dispose();
|
|
4937
6111
|
ctx.instances.clear();
|
|
4938
6112
|
return html;
|
|
@@ -4963,10 +6137,10 @@ function renderToString(compiled, options = {}) {
|
|
|
4963
6137
|
const dom = options.domAdapter ?? new ServerDOMAdapter();
|
|
4964
6138
|
const plan = options.staticPlan === null ? void 0 : options.staticPlan ?? getStaticSSRPlan(compiled);
|
|
4965
6139
|
const staticHTML = plan !== void 0 && plan.size > 0 ? plan : void 0;
|
|
4966
|
-
const
|
|
4967
|
-
const ctx = createRenderContext(dom, compiled.graph,
|
|
6140
|
+
const container2 = dom.createElement("div");
|
|
6141
|
+
const ctx = createRenderContext(dom, compiled.graph, container2, void 0, staticHTML);
|
|
4968
6142
|
const rootInstance = mountGraph(ctx);
|
|
4969
|
-
const html = dom.serializeInner(
|
|
6143
|
+
const html = dom.serializeInner(container2);
|
|
4970
6144
|
rootInstance.dispose();
|
|
4971
6145
|
ctx.instances.clear();
|
|
4972
6146
|
return html;
|
|
@@ -5081,20 +6255,20 @@ function createMemoryHistory(initial = "/") {
|
|
|
5081
6255
|
if (qIndex < 0) return buildLocation(entry, "");
|
|
5082
6256
|
return buildLocation(entry.slice(0, qIndex), entry.slice(qIndex + 1));
|
|
5083
6257
|
};
|
|
5084
|
-
const
|
|
6258
|
+
const stack2 = [initial];
|
|
5085
6259
|
let index = 0;
|
|
5086
6260
|
return {
|
|
5087
6261
|
location() {
|
|
5088
|
-
return parse(
|
|
6262
|
+
return parse(stack2[index]);
|
|
5089
6263
|
},
|
|
5090
6264
|
push(pathname, search) {
|
|
5091
|
-
|
|
5092
|
-
|
|
5093
|
-
index =
|
|
6265
|
+
stack2.splice(index + 1);
|
|
6266
|
+
stack2.push(toUrl(pathname, search));
|
|
6267
|
+
index = stack2.length - 1;
|
|
5094
6268
|
notify();
|
|
5095
6269
|
},
|
|
5096
6270
|
replace(pathname, search) {
|
|
5097
|
-
|
|
6271
|
+
stack2[index] = toUrl(pathname, search);
|
|
5098
6272
|
notify();
|
|
5099
6273
|
},
|
|
5100
6274
|
back() {
|
|
@@ -5104,7 +6278,7 @@ function createMemoryHistory(initial = "/") {
|
|
|
5104
6278
|
}
|
|
5105
6279
|
},
|
|
5106
6280
|
forward() {
|
|
5107
|
-
if (index <
|
|
6281
|
+
if (index < stack2.length - 1) {
|
|
5108
6282
|
index++;
|
|
5109
6283
|
notify();
|
|
5110
6284
|
}
|
|
@@ -5194,8 +6368,9 @@ function createRouter(options) {
|
|
|
5194
6368
|
|
|
5195
6369
|
// ../router/src/mount-router.ts
|
|
5196
6370
|
var ROUTER_OUTLET_ID = "streetui-router-outlet";
|
|
6371
|
+
var ROUTER_OUTLET_KEY = "router-outlet";
|
|
5197
6372
|
function routerOutlet(scope, id = ROUTER_OUTLET_ID) {
|
|
5198
|
-
scope.container(
|
|
6373
|
+
scope.container(ROUTER_OUTLET_KEY, () => {
|
|
5199
6374
|
}, { id });
|
|
5200
6375
|
}
|
|
5201
6376
|
function isExternalHref(href) {
|
|
@@ -5203,7 +6378,7 @@ function isExternalHref(href) {
|
|
|
5203
6378
|
href.startsWith("//");
|
|
5204
6379
|
}
|
|
5205
6380
|
function mountRouter(router, options) {
|
|
5206
|
-
const { container } = options;
|
|
6381
|
+
const { container: container2 } = options;
|
|
5207
6382
|
const renderer = options.renderer ?? createRenderer();
|
|
5208
6383
|
const outletId = options.outletId ?? ROUTER_OUTLET_ID;
|
|
5209
6384
|
const interceptLinks = options.interceptLinks ?? true;
|
|
@@ -5221,8 +6396,8 @@ function mountRouter(router, options) {
|
|
|
5221
6396
|
node.setProp("_hydrationBoundary", true);
|
|
5222
6397
|
}
|
|
5223
6398
|
}
|
|
5224
|
-
shellMounted = hydrateMode ? shellRuntime.hydrate(shellCompiled,
|
|
5225
|
-
const found =
|
|
6399
|
+
shellMounted = hydrateMode ? shellRuntime.hydrate(shellCompiled, container2) : shellRuntime.mount(shellCompiled, container2);
|
|
6400
|
+
const found = container2.querySelector(`[id="${outletId}"]`);
|
|
5226
6401
|
if (found === null) {
|
|
5227
6402
|
throw new Error(
|
|
5228
6403
|
`[Router] The shell must contain a route outlet. Call routerOutlet(scope) (or add a container with id="${outletId}") inside your shell builder.`
|
|
@@ -5230,7 +6405,7 @@ function mountRouter(router, options) {
|
|
|
5230
6405
|
}
|
|
5231
6406
|
outlet = found;
|
|
5232
6407
|
} else {
|
|
5233
|
-
outlet =
|
|
6408
|
+
outlet = container2;
|
|
5234
6409
|
}
|
|
5235
6410
|
const routeTransition = options.transition !== void 0 ? resolveTransition(options.transition) : void 0;
|
|
5236
6411
|
const txDom = routeTransition !== void 0 ? new BrowserDOMAdapter() : void 0;
|
|
@@ -5343,12 +6518,12 @@ function mountRouter(router, options) {
|
|
|
5343
6518
|
router.navigate(href);
|
|
5344
6519
|
};
|
|
5345
6520
|
if (interceptLinks) {
|
|
5346
|
-
|
|
6521
|
+
container2.addEventListener("click", onClick);
|
|
5347
6522
|
}
|
|
5348
6523
|
return {
|
|
5349
6524
|
outlet,
|
|
5350
6525
|
unmount() {
|
|
5351
|
-
if (interceptLinks)
|
|
6526
|
+
if (interceptLinks) container2.removeEventListener("click", onClick);
|
|
5352
6527
|
stopRouteSub();
|
|
5353
6528
|
for (const [route, run] of pendingLeaves) {
|
|
5354
6529
|
run.cancel();
|
|
@@ -5381,8 +6556,8 @@ function pattern(regex, message = "Invalid format") {
|
|
|
5381
6556
|
}
|
|
5382
6557
|
function runValidators(value, validators) {
|
|
5383
6558
|
if (validators === void 0) return void 0;
|
|
5384
|
-
const
|
|
5385
|
-
for (const validate of
|
|
6559
|
+
const list2 = Array.isArray(validators) ? validators : [validators];
|
|
6560
|
+
for (const validate of list2) {
|
|
5386
6561
|
const error = validate(value);
|
|
5387
6562
|
if (error !== void 0) return error;
|
|
5388
6563
|
}
|
|
@@ -5434,31 +6609,31 @@ function createForm(config) {
|
|
|
5434
6609
|
};
|
|
5435
6610
|
fields.set(name, { api, value, touched, error, valid: valid2, dirty: dirty2, initial, unsub });
|
|
5436
6611
|
}
|
|
5437
|
-
const
|
|
6612
|
+
const field2 = (name) => {
|
|
5438
6613
|
const f = fields.get(name);
|
|
5439
6614
|
if (f === void 0) throw new Error(`Unknown form field: ${name}`);
|
|
5440
6615
|
return f;
|
|
5441
6616
|
};
|
|
5442
6617
|
const values = derived(() => {
|
|
5443
6618
|
const out = {};
|
|
5444
|
-
for (const name of names) out[name] =
|
|
6619
|
+
for (const name of names) out[name] = field2(name).value.get();
|
|
5445
6620
|
return out;
|
|
5446
6621
|
});
|
|
5447
6622
|
const errors = derived(() => {
|
|
5448
6623
|
const out = {};
|
|
5449
6624
|
for (const name of names) {
|
|
5450
|
-
const e =
|
|
6625
|
+
const e = field2(name).error.get();
|
|
5451
6626
|
if (e !== void 0) out[name] = e;
|
|
5452
6627
|
}
|
|
5453
6628
|
return out;
|
|
5454
6629
|
});
|
|
5455
6630
|
const touchedMap = derived(() => {
|
|
5456
6631
|
const out = {};
|
|
5457
|
-
for (const name of names) out[name] =
|
|
6632
|
+
for (const name of names) out[name] = field2(name).touched.get();
|
|
5458
6633
|
return out;
|
|
5459
6634
|
});
|
|
5460
|
-
const dirty = derived(() => names.some((n) =>
|
|
5461
|
-
const valid = derived(() => names.every((n) =>
|
|
6635
|
+
const dirty = derived(() => names.some((n) => field2(n).dirty.get()));
|
|
6636
|
+
const valid = derived(() => names.every((n) => field2(n).valid.get()));
|
|
5462
6637
|
const status = signal("idle");
|
|
5463
6638
|
const submitting = derived(() => status.get() === "submitting");
|
|
5464
6639
|
const submitted = derived(() => status.get() === "success");
|
|
@@ -5469,7 +6644,7 @@ function createForm(config) {
|
|
|
5469
6644
|
batch(() => {
|
|
5470
6645
|
for (const name of names) {
|
|
5471
6646
|
const next = partial[name];
|
|
5472
|
-
if (next !== void 0)
|
|
6647
|
+
if (next !== void 0) field2(name).value.set(next);
|
|
5473
6648
|
}
|
|
5474
6649
|
});
|
|
5475
6650
|
} finally {
|
|
@@ -5481,7 +6656,7 @@ function createForm(config) {
|
|
|
5481
6656
|
try {
|
|
5482
6657
|
batch(() => {
|
|
5483
6658
|
for (const name of names) {
|
|
5484
|
-
const f =
|
|
6659
|
+
const f = field2(name);
|
|
5485
6660
|
f.value.set(f.initial);
|
|
5486
6661
|
f.touched.set(false);
|
|
5487
6662
|
}
|
|
@@ -5494,7 +6669,7 @@ function createForm(config) {
|
|
|
5494
6669
|
}
|
|
5495
6670
|
async function submit() {
|
|
5496
6671
|
batch(() => {
|
|
5497
|
-
for (const name of names)
|
|
6672
|
+
for (const name of names) field2(name).touched.set(true);
|
|
5498
6673
|
});
|
|
5499
6674
|
if (!valid.peek()) {
|
|
5500
6675
|
return;
|
|
@@ -5534,7 +6709,7 @@ function createForm(config) {
|
|
|
5534
6709
|
submitted,
|
|
5535
6710
|
status,
|
|
5536
6711
|
submitError,
|
|
5537
|
-
field: (name) =>
|
|
6712
|
+
field: (name) => field2(name).api,
|
|
5538
6713
|
setValues,
|
|
5539
6714
|
submit,
|
|
5540
6715
|
reset,
|
|
@@ -5545,23 +6720,23 @@ function createForm(config) {
|
|
|
5545
6720
|
// ../context/src/context.ts
|
|
5546
6721
|
function createContext(defaultValue, description) {
|
|
5547
6722
|
const id = Symbol(description ?? "streetui.context");
|
|
5548
|
-
const
|
|
6723
|
+
const stack2 = [];
|
|
5549
6724
|
return {
|
|
5550
6725
|
id,
|
|
5551
6726
|
defaultValue,
|
|
5552
6727
|
provide(value, run) {
|
|
5553
|
-
|
|
6728
|
+
stack2.push(value);
|
|
5554
6729
|
try {
|
|
5555
6730
|
return run();
|
|
5556
6731
|
} finally {
|
|
5557
|
-
|
|
6732
|
+
stack2.pop();
|
|
5558
6733
|
}
|
|
5559
6734
|
},
|
|
5560
6735
|
consume() {
|
|
5561
|
-
return
|
|
6736
|
+
return stack2.length > 0 ? stack2[stack2.length - 1] : defaultValue;
|
|
5562
6737
|
},
|
|
5563
6738
|
hasProvider() {
|
|
5564
|
-
return
|
|
6739
|
+
return stack2.length > 0;
|
|
5565
6740
|
}
|
|
5566
6741
|
};
|
|
5567
6742
|
}
|
|
@@ -5681,7 +6856,7 @@ function inspectComponents(graph) {
|
|
|
5681
6856
|
}
|
|
5682
6857
|
function inspectInteractions(graph) {
|
|
5683
6858
|
const overlays = [];
|
|
5684
|
-
const
|
|
6859
|
+
const transitions2 = [];
|
|
5685
6860
|
graph.walk((node, depth) => {
|
|
5686
6861
|
const overlayFn = graph.getHandler(`__overlay__${node.id}`);
|
|
5687
6862
|
if (overlayFn !== void 0) {
|
|
@@ -5700,18 +6875,18 @@ function inspectInteractions(graph) {
|
|
|
5700
6875
|
}
|
|
5701
6876
|
const transitionFn = graph.getHandler(`__transition__${node.id}`);
|
|
5702
6877
|
if (transitionFn !== void 0) {
|
|
5703
|
-
const
|
|
5704
|
-
|
|
6878
|
+
const t6 = transitionFn();
|
|
6879
|
+
transitions2.push({
|
|
5705
6880
|
id: node.id,
|
|
5706
6881
|
key: node.key,
|
|
5707
6882
|
nodeType: node.type,
|
|
5708
|
-
duration:
|
|
5709
|
-
appear:
|
|
6883
|
+
duration: t6.duration,
|
|
6884
|
+
appear: t6.appear,
|
|
5710
6885
|
depth
|
|
5711
6886
|
});
|
|
5712
6887
|
}
|
|
5713
6888
|
});
|
|
5714
|
-
return { overlays, transitions };
|
|
6889
|
+
return { overlays, transitions: transitions2 };
|
|
5715
6890
|
}
|
|
5716
6891
|
|
|
5717
6892
|
// ../devtools/src/application.ts
|
|
@@ -5779,39 +6954,39 @@ var DEFAULT_PERF_THRESHOLDS = {
|
|
|
5779
6954
|
maxSignals: 1e3
|
|
5780
6955
|
};
|
|
5781
6956
|
function diagnosePerformance(compiled, thresholds = {}) {
|
|
5782
|
-
const
|
|
6957
|
+
const t6 = { ...DEFAULT_PERF_THRESHOLDS, ...thresholds };
|
|
5783
6958
|
const { perf } = inspectApplication(compiled);
|
|
5784
6959
|
const out = [];
|
|
5785
|
-
if (perf.totalNodes >
|
|
6960
|
+
if (perf.totalNodes > t6.maxNodes) {
|
|
5786
6961
|
out.push({
|
|
5787
6962
|
code: "large-graph",
|
|
5788
|
-
message: `Graph has ${perf.totalNodes} nodes (> ${
|
|
6963
|
+
message: `Graph has ${perf.totalNodes} nodes (> ${t6.maxNodes}); consider splitting the view or paginating.`,
|
|
5789
6964
|
observed: perf.totalNodes,
|
|
5790
|
-
threshold:
|
|
6965
|
+
threshold: t6.maxNodes
|
|
5791
6966
|
});
|
|
5792
6967
|
}
|
|
5793
|
-
if (perf.maxDepth >
|
|
6968
|
+
if (perf.maxDepth > t6.maxDepth) {
|
|
5794
6969
|
out.push({
|
|
5795
6970
|
code: "deep-tree",
|
|
5796
|
-
message: `Graph nests ${perf.maxDepth} levels deep (> ${
|
|
6971
|
+
message: `Graph nests ${perf.maxDepth} levels deep (> ${t6.maxDepth}); deep trees slow mount and reconciliation.`,
|
|
5797
6972
|
observed: perf.maxDepth,
|
|
5798
|
-
threshold:
|
|
6973
|
+
threshold: t6.maxDepth
|
|
5799
6974
|
});
|
|
5800
6975
|
}
|
|
5801
|
-
if (perf.largestChildCount >
|
|
6976
|
+
if (perf.largestChildCount > t6.maxChildCount) {
|
|
5802
6977
|
out.push({
|
|
5803
6978
|
code: "large-list",
|
|
5804
|
-
message: `A single node has ${perf.largestChildCount} children (> ${
|
|
6979
|
+
message: `A single node has ${perf.largestChildCount} children (> ${t6.maxChildCount}); large un-windowed lists dominate DOM cost.`,
|
|
5805
6980
|
observed: perf.largestChildCount,
|
|
5806
|
-
threshold:
|
|
6981
|
+
threshold: t6.maxChildCount
|
|
5807
6982
|
});
|
|
5808
6983
|
}
|
|
5809
|
-
if (perf.distinctSignals >
|
|
6984
|
+
if (perf.distinctSignals > t6.maxSignals) {
|
|
5810
6985
|
out.push({
|
|
5811
6986
|
code: "high-signal-fanout",
|
|
5812
|
-
message: `${perf.distinctSignals} distinct signals are bound (> ${
|
|
6987
|
+
message: `${perf.distinctSignals} distinct signals are bound (> ${t6.maxSignals}); heavy reactive fan-out increases update overhead.`,
|
|
5813
6988
|
observed: perf.distinctSignals,
|
|
5814
|
-
threshold:
|
|
6989
|
+
threshold: t6.maxSignals
|
|
5815
6990
|
});
|
|
5816
6991
|
}
|
|
5817
6992
|
return out;
|
|
@@ -5884,10 +7059,10 @@ function inspectRouter(router) {
|
|
|
5884
7059
|
isFallback: match.isFallback === true
|
|
5885
7060
|
};
|
|
5886
7061
|
}
|
|
5887
|
-
function inspectForm(
|
|
5888
|
-
const values =
|
|
5889
|
-
const errorsRaw =
|
|
5890
|
-
const touchedRaw =
|
|
7062
|
+
function inspectForm(form2, options = {}) {
|
|
7063
|
+
const values = form2.values.peek();
|
|
7064
|
+
const errorsRaw = form2.errors.peek();
|
|
7065
|
+
const touchedRaw = form2.touched.peek();
|
|
5891
7066
|
const errors = {};
|
|
5892
7067
|
for (const [k, v] of Object.entries(errorsRaw)) if (v !== void 0) errors[k] = v;
|
|
5893
7068
|
const touched = {};
|
|
@@ -5896,9 +7071,9 @@ function inspectForm(form, options = {}) {
|
|
|
5896
7071
|
fields: Object.keys(values),
|
|
5897
7072
|
errors,
|
|
5898
7073
|
touched,
|
|
5899
|
-
dirty:
|
|
5900
|
-
valid:
|
|
5901
|
-
status:
|
|
7074
|
+
dirty: form2.dirty.peek(),
|
|
7075
|
+
valid: form2.valid.peek(),
|
|
7076
|
+
status: form2.status.peek()
|
|
5902
7077
|
};
|
|
5903
7078
|
if (options.includeValues !== true) return base;
|
|
5904
7079
|
return { ...base, values: { ...values } };
|
|
@@ -5927,8 +7102,8 @@ function inspectEvents(graph) {
|
|
|
5927
7102
|
graph.walk((node, depth) => {
|
|
5928
7103
|
if (node.events.length === 0) return;
|
|
5929
7104
|
const types = node.events.map((e) => e.type);
|
|
5930
|
-
for (const
|
|
5931
|
-
byType[
|
|
7105
|
+
for (const t6 of types) {
|
|
7106
|
+
byType[t6] = (byType[t6] ?? 0) + 1;
|
|
5932
7107
|
totalHandlers += 1;
|
|
5933
7108
|
}
|
|
5934
7109
|
nodes.push({
|
|
@@ -6044,8 +7219,8 @@ function capture(compiled, sources, options) {
|
|
|
6044
7219
|
};
|
|
6045
7220
|
const live = {};
|
|
6046
7221
|
if (sources.signals !== void 0) {
|
|
6047
|
-
for (const [
|
|
6048
|
-
live[
|
|
7222
|
+
for (const [label2, sig] of Object.entries(sources.signals)) {
|
|
7223
|
+
live[label2] = inspectSignal(
|
|
6049
7224
|
sig,
|
|
6050
7225
|
options.redactSignals !== void 0 ? { redact: options.redactSignals } : {}
|
|
6051
7226
|
);
|
|
@@ -6097,7 +7272,7 @@ function capture(compiled, sources, options) {
|
|
|
6097
7272
|
}
|
|
6098
7273
|
function mapInspect(source, inspect) {
|
|
6099
7274
|
const out = {};
|
|
6100
|
-
for (const [
|
|
7275
|
+
for (const [label2, value] of Object.entries(source)) out[label2] = inspect(value);
|
|
6101
7276
|
return out;
|
|
6102
7277
|
}
|
|
6103
7278
|
function findNode(node, id) {
|
|
@@ -6119,8 +7294,8 @@ function formatSnapshot(s) {
|
|
|
6119
7294
|
` signals ${app.signalCount} \xB7 handlers ${app.eventHandlers} \xB7 bindings ${app.stateBindings} \xB7 errors ${app.errors} \xB7 warnings ${app.warnings}`
|
|
6120
7295
|
);
|
|
6121
7296
|
lines.push(`Signals: ${s.signals.boundSignalIds.length} bound in graph`);
|
|
6122
|
-
for (const [
|
|
6123
|
-
lines.push(` ${
|
|
7297
|
+
for (const [label2, sig] of Object.entries(s.signals.live)) {
|
|
7298
|
+
lines.push(` ${label2} [${sig.kind}] = ${format(sig.value)} \xB7 observers ${sig.observerCount ?? "?"}`);
|
|
6124
7299
|
}
|
|
6125
7300
|
if (s.components.length > 0) {
|
|
6126
7301
|
lines.push(`Components: ${s.components.length}`);
|
|
@@ -6137,8 +7312,8 @@ function formatSnapshot(s) {
|
|
|
6137
7312
|
}
|
|
6138
7313
|
if (s.transitions.length > 0) {
|
|
6139
7314
|
lines.push(`Transitions: ${s.transitions.length}`);
|
|
6140
|
-
for (const
|
|
6141
|
-
lines.push(` ${
|
|
7315
|
+
for (const t6 of s.transitions) {
|
|
7316
|
+
lines.push(` ${t6.key ?? t6.id} on <${t6.nodeType}> \xB7 ${t6.duration}ms${t6.appear ? " \xB7 appear" : ""}`);
|
|
6142
7317
|
}
|
|
6143
7318
|
}
|
|
6144
7319
|
if (s.router !== void 0) {
|
|
@@ -6146,26 +7321,26 @@ function formatSnapshot(s) {
|
|
|
6146
7321
|
}
|
|
6147
7322
|
if (s.resources !== void 0) {
|
|
6148
7323
|
lines.push("Resources:");
|
|
6149
|
-
for (const [
|
|
6150
|
-
lines.push(` ${
|
|
7324
|
+
for (const [label2, r] of Object.entries(s.resources)) {
|
|
7325
|
+
lines.push(` ${label2}: ${r.status}${r.loading ? " (loading)" : ""}${r.hasError ? ` !${r.errorName}` : ""}`);
|
|
6151
7326
|
}
|
|
6152
7327
|
}
|
|
6153
7328
|
if (s.mutations !== void 0) {
|
|
6154
7329
|
lines.push("Mutations:");
|
|
6155
|
-
for (const [
|
|
6156
|
-
lines.push(` ${
|
|
7330
|
+
for (const [label2, m] of Object.entries(s.mutations)) {
|
|
7331
|
+
lines.push(` ${label2}: ${m.status}${m.pending ? " (pending)" : ""}${m.hasError ? ` !${m.errorName}` : ""}`);
|
|
6157
7332
|
}
|
|
6158
7333
|
}
|
|
6159
7334
|
if (s.forms !== void 0) {
|
|
6160
7335
|
lines.push("Forms:");
|
|
6161
|
-
for (const [
|
|
6162
|
-
lines.push(` ${
|
|
7336
|
+
for (const [label2, f] of Object.entries(s.forms)) {
|
|
7337
|
+
lines.push(` ${label2}: ${f.valid ? "valid" : "invalid"} \xB7 ${f.status} \xB7 fields ${f.fields.length}`);
|
|
6163
7338
|
}
|
|
6164
7339
|
}
|
|
6165
7340
|
if (s.contexts !== void 0) {
|
|
6166
7341
|
lines.push("Contexts:");
|
|
6167
|
-
for (const [
|
|
6168
|
-
lines.push(` ${
|
|
7342
|
+
for (const [label2, c] of Object.entries(s.contexts)) {
|
|
7343
|
+
lines.push(` ${label2} (${c.description}): ${c.hasProvider ? "provided" : "no provider"}`);
|
|
6169
7344
|
}
|
|
6170
7345
|
}
|
|
6171
7346
|
if (s.i18n !== void 0) {
|
|
@@ -6187,7 +7362,7 @@ function formatSnapshot(s) {
|
|
|
6187
7362
|
lines.push(` ${m}`);
|
|
6188
7363
|
}
|
|
6189
7364
|
lines.push(
|
|
6190
|
-
`Events: ${s.events.nodes.length} node(s), ${s.events.totalHandlers} handler(s)` + (Object.keys(s.events.byType).length > 0 ? ` \xB7 ${Object.entries(s.events.byType).map(([
|
|
7365
|
+
`Events: ${s.events.nodes.length} node(s), ${s.events.totalHandlers} handler(s)` + (Object.keys(s.events.byType).length > 0 ? ` \xB7 ${Object.entries(s.events.byType).map(([t6, n]) => `${t6}\xD7${n}`).join(", ")}` : "")
|
|
6191
7366
|
);
|
|
6192
7367
|
lines.push(
|
|
6193
7368
|
`Signal graph: ${s.signalGraph.signals.length} signal(s), ${s.signalGraph.edges.length} binding edge(s)`
|
|
@@ -6228,9 +7403,9 @@ function stringifyValue(value) {
|
|
|
6228
7403
|
}
|
|
6229
7404
|
return String(value);
|
|
6230
7405
|
}
|
|
6231
|
-
function section(title, count,
|
|
7406
|
+
function section(title, count, body2) {
|
|
6232
7407
|
const badge = count === void 0 ? "" : ` <span class="st-count">${count}</span>`;
|
|
6233
|
-
return `<section class="st-panel"><h2>${escapeHtml(title)}${badge}</h2>${
|
|
7408
|
+
return `<section class="st-panel"><h2>${escapeHtml(title)}${badge}</h2>${body2}</section>`;
|
|
6234
7409
|
}
|
|
6235
7410
|
function ul(items) {
|
|
6236
7411
|
if (items.length === 0) return '<p class="st-empty">(none)</p>';
|
|
@@ -6264,7 +7439,7 @@ function renderDevToolsHTML(s) {
|
|
|
6264
7439
|
s.signals.boundSignalIds.length,
|
|
6265
7440
|
`<p class="st-dim">${s.signals.boundSignalIds.length} bound in graph \xB7 effects shown as observer counts (no global effect registry)</p>` + ul(
|
|
6266
7441
|
Object.entries(s.signals.live).map(
|
|
6267
|
-
([
|
|
7442
|
+
([label2, sig]) => `<code>${escapeHtml(label2)}</code> <span class="st-key">[${escapeHtml(sig.kind)}]</span> = <code>${escapeHtml(sig.value)}</code> <span class="st-dim">observers ${escapeHtml(sig.observerCount ?? "?")}</span>`
|
|
6268
7443
|
)
|
|
6269
7444
|
)
|
|
6270
7445
|
)
|
|
@@ -6285,7 +7460,7 @@ function renderDevToolsHTML(s) {
|
|
|
6285
7460
|
Object.keys(s.resources).length,
|
|
6286
7461
|
ul(
|
|
6287
7462
|
Object.entries(s.resources).map(
|
|
6288
|
-
([
|
|
7463
|
+
([label2, r]) => `<code>${escapeHtml(label2)}</code>: ${escapeHtml(r.status)}` + (r.loading ? ' <span class="st-dim">(loading)</span>' : "") + (r.hasError ? ` <span class="st-err">!${escapeHtml(r.errorName)}</span>` : "")
|
|
6289
7464
|
)
|
|
6290
7465
|
)
|
|
6291
7466
|
)
|
|
@@ -6309,7 +7484,7 @@ function renderDevToolsHTML(s) {
|
|
|
6309
7484
|
s.transitions.length,
|
|
6310
7485
|
ul(
|
|
6311
7486
|
s.transitions.map(
|
|
6312
|
-
(
|
|
7487
|
+
(t6) => `<code>${escapeHtml(t6.key ?? t6.id)}</code> on <code><${escapeHtml(t6.nodeType)}></code> <span class="st-dim">${t6.duration}ms${t6.appear ? " \xB7 appear" : ""}</span>`
|
|
6313
7488
|
)
|
|
6314
7489
|
)
|
|
6315
7490
|
)
|
|
@@ -6321,7 +7496,7 @@ function renderDevToolsHTML(s) {
|
|
|
6321
7496
|
Object.keys(s.forms).length,
|
|
6322
7497
|
ul(
|
|
6323
7498
|
Object.entries(s.forms).map(
|
|
6324
|
-
([
|
|
7499
|
+
([label2, f]) => `<code>${escapeHtml(label2)}</code>: ${f.valid ? "valid" : "invalid"} \xB7 ${escapeHtml(f.status)} \xB7 ${f.fields.length} field(s)`
|
|
6325
7500
|
)
|
|
6326
7501
|
)
|
|
6327
7502
|
)
|
|
@@ -6400,8 +7575,8 @@ var DEVTOOLS_TABS = [
|
|
|
6400
7575
|
var EMBED_ESCAPE = new RegExp("[<\\u2028\\u2029]", "g");
|
|
6401
7576
|
function embedJson(snapshot) {
|
|
6402
7577
|
return JSON.stringify(snapshot).replace(EMBED_ESCAPE, (ch) => {
|
|
6403
|
-
const
|
|
6404
|
-
return `\\u${
|
|
7578
|
+
const code2 = ch.charCodeAt(0).toString(16).padStart(4, "0");
|
|
7579
|
+
return `\\u${code2}`;
|
|
6405
7580
|
});
|
|
6406
7581
|
}
|
|
6407
7582
|
function renderInteractiveDevTools(snapshot, options = {}) {
|
|
@@ -6409,7 +7584,7 @@ function renderInteractiveDevTools(snapshot, options = {}) {
|
|
|
6409
7584
|
const title = options.title ?? `StreetUI DevTools \u2014 ${app.identity.name}`;
|
|
6410
7585
|
const initialTab = options.initialTab ?? DEVTOOLS_TABS[0].id;
|
|
6411
7586
|
const tabButtons = DEVTOOLS_TABS.map(
|
|
6412
|
-
(
|
|
7587
|
+
(t6) => `<button type="button" role="tab" class="st-tab" data-tab="${escapeHtml(t6.id)}"${t6.id === initialTab ? ' aria-selected="true"' : ' aria-selected="false"'}>${escapeHtml(t6.label)}</button>`
|
|
6413
7588
|
).join("");
|
|
6414
7589
|
return `<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${escapeHtml(title)}</title><style>${INTERACTIVE_CSS}</style></head><body class="st-dt"><header class="st-top"><h1>${escapeHtml(title)} <span class="st-dim">v${escapeHtml(app.identity.version)}</span></h1><button type="button" id="st-refresh" class="st-refresh">↻ Refresh</button></header><nav class="st-tabs" role="tablist" aria-label="DevTools panels">${tabButtons}</nav><main id="st-panel" class="st-body" role="tabpanel" aria-live="polite"></main><footer class="st-foot"><span class="st-dim">Structural inspection over one compiled graph. Not a production profiler; browser/AT conformance not claimed (gates BLOCKED).</span></footer><script type="application/json" id="st-data">${embedJson(snapshot)}</script><script>${CONTROLLER_JS.replace("__INITIAL_TAB__", JSON.stringify(initialTab))}</script></body></html>`;
|
|
6415
7590
|
}
|
|
@@ -6598,11 +7773,13 @@ function defineConfig(config) {
|
|
|
6598
7773
|
AppBuilder,
|
|
6599
7774
|
Application,
|
|
6600
7775
|
ApplicationGraph,
|
|
7776
|
+
BREAKPOINTS,
|
|
6601
7777
|
BaseNode,
|
|
6602
7778
|
BrowserDOMAdapter,
|
|
6603
7779
|
CleanupRegistry,
|
|
6604
7780
|
ContainerBuilderImpl,
|
|
6605
7781
|
DEFAULT_PERF_THRESHOLDS,
|
|
7782
|
+
DEFAULT_TOKENS,
|
|
6606
7783
|
DEVTOOLS_TABS,
|
|
6607
7784
|
DerivedSignal,
|
|
6608
7785
|
DiagnosticCollector,
|
|
@@ -6620,6 +7797,7 @@ function defineConfig(config) {
|
|
|
6620
7797
|
NodeInstance,
|
|
6621
7798
|
PageBuilderImpl,
|
|
6622
7799
|
ROUTER_OUTLET_ID,
|
|
7800
|
+
ROUTER_OUTLET_KEY,
|
|
6623
7801
|
Runtime,
|
|
6624
7802
|
RuntimeNodeInstance,
|
|
6625
7803
|
STATE_MARKER_ATTR,
|
|
@@ -6638,21 +7816,35 @@ function defineConfig(config) {
|
|
|
6638
7816
|
StreetFrameworkError,
|
|
6639
7817
|
StreetRenderHandle,
|
|
6640
7818
|
StreetRendererImpl,
|
|
7819
|
+
StyleRegistry,
|
|
6641
7820
|
TransitionController,
|
|
6642
7821
|
VERSION,
|
|
7822
|
+
a11y,
|
|
6643
7823
|
a11yIds,
|
|
7824
|
+
adoptServerStyles,
|
|
7825
|
+
animate,
|
|
7826
|
+
animation,
|
|
6644
7827
|
applyNodeProps,
|
|
6645
7828
|
applyProp,
|
|
7829
|
+
backdrop,
|
|
6646
7830
|
batch,
|
|
6647
7831
|
bindDomEvent,
|
|
7832
|
+
blockquote,
|
|
7833
|
+
body,
|
|
6648
7834
|
browserDOMAdapter,
|
|
7835
|
+
button,
|
|
6649
7836
|
buttonUpdate,
|
|
7837
|
+
canonicalize,
|
|
7838
|
+
caption,
|
|
7839
|
+
center,
|
|
7840
|
+
code,
|
|
6650
7841
|
compile,
|
|
6651
7842
|
compileGraph,
|
|
6652
7843
|
component,
|
|
6653
7844
|
consoleDiagnosticSink,
|
|
6654
7845
|
consoleHydrationDiagnosticSink,
|
|
6655
7846
|
containFocus,
|
|
7847
|
+
container,
|
|
6656
7848
|
createAnnouncer,
|
|
6657
7849
|
createApplication,
|
|
6658
7850
|
createAuthSession,
|
|
@@ -6671,31 +7863,53 @@ function defineConfig(config) {
|
|
|
6671
7863
|
createRuntime,
|
|
6672
7864
|
createStore,
|
|
6673
7865
|
createStreetEvent,
|
|
7866
|
+
createTheme,
|
|
7867
|
+
createThemeTokens,
|
|
7868
|
+
cssPropName,
|
|
7869
|
+
cssValue,
|
|
7870
|
+
cx,
|
|
7871
|
+
defaultThemeStorage,
|
|
6674
7872
|
defineConfig,
|
|
6675
7873
|
derived,
|
|
6676
7874
|
describeError,
|
|
6677
7875
|
diagnosePerformance,
|
|
7876
|
+
dialog,
|
|
7877
|
+
dropdown,
|
|
7878
|
+
dropdownItem,
|
|
6678
7879
|
effect,
|
|
6679
7880
|
email,
|
|
6680
7881
|
environment,
|
|
6681
7882
|
escapeHtml,
|
|
6682
7883
|
escapeHtmlAttr,
|
|
6683
7884
|
escapeHtmlText,
|
|
7885
|
+
fadeTransition,
|
|
7886
|
+
field,
|
|
7887
|
+
fieldError,
|
|
7888
|
+
fieldHelp,
|
|
7889
|
+
fieldLabel,
|
|
6684
7890
|
flushSync,
|
|
6685
7891
|
focusById,
|
|
6686
7892
|
focusFirst,
|
|
6687
7893
|
focusInitial,
|
|
7894
|
+
focusRing,
|
|
7895
|
+
form,
|
|
6688
7896
|
formatDiagnostic,
|
|
6689
7897
|
formatDiagnosticContext,
|
|
6690
7898
|
formatHydrationDiagnostic,
|
|
6691
7899
|
frameworkError,
|
|
6692
7900
|
generateApplicationId,
|
|
7901
|
+
generateCSS,
|
|
6693
7902
|
generateNodeId,
|
|
6694
7903
|
getFocusable,
|
|
6695
7904
|
getResolvedTransition,
|
|
6696
7905
|
globalEventBus,
|
|
7906
|
+
grid,
|
|
7907
|
+
hashIdentity,
|
|
7908
|
+
heading,
|
|
6697
7909
|
headingUpdate,
|
|
6698
7910
|
hydrateGraph,
|
|
7911
|
+
identityOf,
|
|
7912
|
+
input,
|
|
6699
7913
|
inputUpdate,
|
|
6700
7914
|
inspectApplication,
|
|
6701
7915
|
inspectComponents,
|
|
@@ -6716,7 +7930,11 @@ function defineConfig(config) {
|
|
|
6716
7930
|
isComponentDefinition,
|
|
6717
7931
|
isHeadContribution,
|
|
6718
7932
|
isTransitionConfig,
|
|
7933
|
+
label,
|
|
7934
|
+
layout,
|
|
7935
|
+
link,
|
|
6719
7936
|
linkUpdate,
|
|
7937
|
+
list,
|
|
6720
7938
|
matchPattern,
|
|
6721
7939
|
matchRoutes,
|
|
6722
7940
|
maxLength,
|
|
@@ -6731,13 +7949,18 @@ function defineConfig(config) {
|
|
|
6731
7949
|
normalizePath,
|
|
6732
7950
|
observerCount,
|
|
6733
7951
|
onEscape,
|
|
7952
|
+
overlay,
|
|
6734
7953
|
patchNode,
|
|
6735
7954
|
patchProp,
|
|
6736
7955
|
pattern,
|
|
7956
|
+
popover,
|
|
7957
|
+
pre,
|
|
6737
7958
|
printDiagnostics,
|
|
6738
7959
|
printGraph,
|
|
6739
7960
|
reactiveListItemKey,
|
|
6740
7961
|
reactiveListItemSignature,
|
|
7962
|
+
reactiveVarName,
|
|
7963
|
+
reactiveVarValue,
|
|
6741
7964
|
readState,
|
|
6742
7965
|
reconcileChildren,
|
|
6743
7966
|
reconcileChildrenByPlan,
|
|
@@ -6745,6 +7968,7 @@ function defineConfig(config) {
|
|
|
6745
7968
|
renderDevToolsReport,
|
|
6746
7969
|
renderHead,
|
|
6747
7970
|
renderInteractiveDevTools,
|
|
7971
|
+
renderStyles,
|
|
6748
7972
|
renderToString,
|
|
6749
7973
|
reportDiagnostic,
|
|
6750
7974
|
reportError,
|
|
@@ -6757,9 +7981,11 @@ function defineConfig(config) {
|
|
|
6757
7981
|
restoreFocus,
|
|
6758
7982
|
routerOutlet,
|
|
6759
7983
|
rovingMenu,
|
|
7984
|
+
row,
|
|
6760
7985
|
runElementTransition,
|
|
6761
7986
|
runValidators,
|
|
6762
7987
|
saveFocus,
|
|
7988
|
+
scaleTransition,
|
|
6763
7989
|
scheduleImmediate,
|
|
6764
7990
|
scheduleUpdate,
|
|
6765
7991
|
scheduler,
|
|
@@ -6769,13 +7995,29 @@ function defineConfig(config) {
|
|
|
6769
7995
|
serverDOMAdapter,
|
|
6770
7996
|
signal,
|
|
6771
7997
|
signalKind,
|
|
7998
|
+
skipLink,
|
|
7999
|
+
slideTransition,
|
|
8000
|
+
spacer,
|
|
6772
8001
|
splitTarget,
|
|
8002
|
+
stack,
|
|
8003
|
+
stateAttr,
|
|
6773
8004
|
streetui,
|
|
8005
|
+
style,
|
|
8006
|
+
styleRegistry,
|
|
8007
|
+
styleVariants,
|
|
8008
|
+
styleWithVars,
|
|
8009
|
+
text,
|
|
6774
8010
|
textUpdate,
|
|
6775
8011
|
toIdToken,
|
|
8012
|
+
toast,
|
|
8013
|
+
tokens,
|
|
8014
|
+
tooltip,
|
|
6776
8015
|
transformGraph,
|
|
8016
|
+
transition,
|
|
8017
|
+
transitions,
|
|
6777
8018
|
trapFocus,
|
|
6778
8019
|
validateGraph,
|
|
8020
|
+
visuallyHidden,
|
|
6779
8021
|
wireComponentBehavior,
|
|
6780
8022
|
wireEvents,
|
|
6781
8023
|
wireHeadBehavior,
|