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/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.5.0";
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, body) {
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 = 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 ?? ((input, init) => {
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(input, init);
712
+ return fetch(input2, init);
646
713
  });
647
- async function request(method, path, body, reqConfig = {}) {
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 (body !== void 0) {
719
+ if (body2 !== void 0) {
653
720
  if (headers["Content-Type"] === void 0) headers["Content-Type"] = "application/json";
654
- init.body = JSON.stringify(body);
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 text = await response.text();
682
- if (text === "") return void 0;
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(text);
753
+ return JSON.parse(text2);
687
754
  } catch {
688
- return text;
755
+ return text2;
689
756
  }
690
757
  }
691
- return text;
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(code, message, location, cause) {
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(code, message, location) {
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(code, message, location) {
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 t = typeof value;
1071
- if (t === "number" || t === "boolean" || t === "bigint" || t === "symbol") {
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 = t === "object" && value !== null ? value.constructor?.name ?? "Object" : t;
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(text, options = {}) {
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", 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(label, options = {}) {
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", 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(label, options) {
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", 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
- (body) => {
2845
+ (body2) => {
1891
2846
  try {
1892
- builder(body);
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 text = node.getProp("text");
2176
- if (text === void 0 || text === "") {
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, container) {
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, container);
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, container) {
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, container) : this._renderer.mount(compiled, container);
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, text) {
2669
- node.textContent = text;
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 style = el._style;
2910
- if (style !== null && !style.isEmpty && !el.attributes.has("style")) {
2911
- parts.push(` style="${escapeHtmlAttr(style.toCss())}"`);
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, text) {
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 t = new ServerText(text);
3040
- t.parent = el;
3041
- el.children.push(t);
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 = text;
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, container, selector = FOCUSABLE_SELECTOR) {
3149
- const el = dom.querySelector(container, selector);
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, container, selector = FOCUSABLE_SELECTOR) {
3155
- return Array.from(dom.querySelectorAll(container, selector)).filter(
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, container, initialFocusId) {
3166
- if (initialFocusId !== void 0 && focusById(dom, container, initialFocusId)) return;
3167
- focusFirst(dom, container);
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, container) {
4124
+ function trapFocus(dom, container2) {
3170
4125
  const onKeydown = (event) => {
3171
4126
  if (event.key !== "Tab") return;
3172
- const items = getFocusable(dom, container);
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(container, active)) {
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(container, "keydown", onKeydown);
3192
- return () => dom.removeEventListener(container, "keydown", onKeydown);
4146
+ dom.addEventListener(container2, "keydown", onKeydown);
4147
+ return () => dom.removeEventListener(container2, "keydown", onKeydown);
3193
4148
  }
3194
4149
  var containmentStack = [];
3195
- function containFocus(dom, container) {
3196
- const body = dom.body();
3197
- if (body === null) return () => {
4150
+ function containFocus(dom, container2) {
4151
+ const body2 = dom.body();
4152
+ if (body2 === null) return () => {
3198
4153
  };
3199
- containmentStack.push(container);
4154
+ containmentStack.push(container2);
3200
4155
  const onFocusIn = (event) => {
3201
- if (containmentStack[containmentStack.length - 1] !== container) return;
4156
+ if (containmentStack[containmentStack.length - 1] !== container2) return;
3202
4157
  const target = event.target;
3203
- if (target !== null && !dom.contains(container, target)) {
3204
- focusFirst(dom, container);
4158
+ if (target !== null && !dom.contains(container2, target)) {
4159
+ focusFirst(dom, container2);
3205
4160
  }
3206
4161
  };
3207
- dom.addEventListener(body, "focusin", onFocusIn);
4162
+ dom.addEventListener(body2, "focusin", onFocusIn);
3208
4163
  return () => {
3209
- dom.removeEventListener(body, "focusin", onFocusIn);
3210
- const index = containmentStack.lastIndexOf(container);
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, container, selector = FOCUSABLE_SELECTOR) {
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, container, selector);
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(container, "keydown", onKeydown);
3246
- return () => dom.removeEventListener(container, "keydown", onKeydown);
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 body = dom.body();
3262
- if (body === null) {
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(body, polite);
3271
- dom.appendChild(body, assertive);
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, container, hydrationDiagnostics, staticHTML) {
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 input = domEvent.target;
3424
- handler(input.value);
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 t of value.split(/\s+/)) if (t.length > 0) out.push(t);
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 text = String(graphNode.getProp("text") ?? "");
5112
+ const text2 = String(graphNode.getProp("text") ?? "");
4146
5113
  const el2 = dom.createElement("span");
4147
- const textNode = dom.createTextNode(text);
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 text = String(graphNode.getProp("text") ?? "");
4164
- dom.setTextContent(el2, text);
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 label = graphNode.getProp("label");
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 (label !== void 0) dom.setTextContent(el2, String(label));
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 label = graphNode.getProp("label");
4233
- if (label !== void 0) dom.setTextContent(el2, String(label));
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 body = dom.body();
5250
+ const body2 = dom.body();
4267
5251
  let target = anchor;
4268
- if (body !== null) {
5252
+ if (body2 !== null) {
4269
5253
  const portalContainer = dom.createElement("div");
4270
5254
  dom.setAttribute(portalContainer, "data-streetui-portal-container", "");
4271
- dom.appendChild(body, portalContainer);
4272
- instance2.trackCleanup(() => dom.removeChild(body, portalContainer));
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 body = dom.body();
5792
+ const body2 = dom.body();
4621
5793
  let target = domNode;
4622
- if (body !== null) {
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(body, portalContainer);
4629
- instance.trackCleanup(() => dom.removeChild(body, portalContainer));
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 container = this._ctx.container;
4773
- for (const child of dom.childNodes(container)) {
4774
- dom.removeChild(container, child);
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, container) {
4791
- const ctx = createRenderContext(this._dom, compiled.graph, container);
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, container) {
5977
+ hydrate(compiled, container2) {
4804
5978
  const ctx = createRenderContext(
4805
5979
  this._dom,
4806
5980
  compiled.graph,
4807
- container,
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 code = ch.charCodeAt(0);
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 (code === 8232) out += "\\u2028";
4831
- else if (code === 8233) out += "\\u2029";
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 text = dom.getTextContent(el);
4845
- if (text === null || text.length === 0) return {};
6018
+ const text2 = dom.getTextContent(el);
6019
+ if (text2 === null || text2.length === 0) return {};
4846
6020
  try {
4847
- const parsed = JSON.parse(text);
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 container = dom.createElement("div");
4933
- const ctx = createRenderContext(dom, graph, container);
4934
- const instance = mountNode(ctx, root, container);
4935
- const html = dom.serializeInner(container);
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 container = dom.createElement("div");
4967
- const ctx = createRenderContext(dom, compiled.graph, container, void 0, staticHTML);
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(container);
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 stack = [initial];
6258
+ const stack2 = [initial];
5085
6259
  let index = 0;
5086
6260
  return {
5087
6261
  location() {
5088
- return parse(stack[index]);
6262
+ return parse(stack2[index]);
5089
6263
  },
5090
6264
  push(pathname, search) {
5091
- stack.splice(index + 1);
5092
- stack.push(toUrl(pathname, search));
5093
- index = stack.length - 1;
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
- stack[index] = toUrl(pathname, search);
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 < stack.length - 1) {
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("router-outlet", () => {
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, container) : shellRuntime.mount(shellCompiled, container);
5225
- const found = container.querySelector(`[id="${outletId}"]`);
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 = container;
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
- container.addEventListener("click", onClick);
6521
+ container2.addEventListener("click", onClick);
5347
6522
  }
5348
6523
  return {
5349
6524
  outlet,
5350
6525
  unmount() {
5351
- if (interceptLinks) container.removeEventListener("click", onClick);
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 list = Array.isArray(validators) ? validators : [validators];
5385
- for (const validate of list) {
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 field = (name) => {
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] = field(name).value.get();
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 = field(name).error.get();
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] = field(name).touched.get();
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) => field(n).dirty.get()));
5461
- const valid = derived(() => names.every((n) => field(n).valid.get()));
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) field(name).value.set(next);
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 = field(name);
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) field(name).touched.set(true);
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) => field(name).api,
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 stack = [];
6723
+ const stack2 = [];
5549
6724
  return {
5550
6725
  id,
5551
6726
  defaultValue,
5552
6727
  provide(value, run) {
5553
- stack.push(value);
6728
+ stack2.push(value);
5554
6729
  try {
5555
6730
  return run();
5556
6731
  } finally {
5557
- stack.pop();
6732
+ stack2.pop();
5558
6733
  }
5559
6734
  },
5560
6735
  consume() {
5561
- return stack.length > 0 ? stack[stack.length - 1] : defaultValue;
6736
+ return stack2.length > 0 ? stack2[stack2.length - 1] : defaultValue;
5562
6737
  },
5563
6738
  hasProvider() {
5564
- return stack.length > 0;
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 transitions = [];
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 t = transitionFn();
5704
- transitions.push({
6878
+ const t6 = transitionFn();
6879
+ transitions2.push({
5705
6880
  id: node.id,
5706
6881
  key: node.key,
5707
6882
  nodeType: node.type,
5708
- duration: t.duration,
5709
- appear: t.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 t = { ...DEFAULT_PERF_THRESHOLDS, ...thresholds };
6957
+ const t6 = { ...DEFAULT_PERF_THRESHOLDS, ...thresholds };
5783
6958
  const { perf } = inspectApplication(compiled);
5784
6959
  const out = [];
5785
- if (perf.totalNodes > t.maxNodes) {
6960
+ if (perf.totalNodes > t6.maxNodes) {
5786
6961
  out.push({
5787
6962
  code: "large-graph",
5788
- message: `Graph has ${perf.totalNodes} nodes (> ${t.maxNodes}); consider splitting the view or paginating.`,
6963
+ message: `Graph has ${perf.totalNodes} nodes (> ${t6.maxNodes}); consider splitting the view or paginating.`,
5789
6964
  observed: perf.totalNodes,
5790
- threshold: t.maxNodes
6965
+ threshold: t6.maxNodes
5791
6966
  });
5792
6967
  }
5793
- if (perf.maxDepth > t.maxDepth) {
6968
+ if (perf.maxDepth > t6.maxDepth) {
5794
6969
  out.push({
5795
6970
  code: "deep-tree",
5796
- message: `Graph nests ${perf.maxDepth} levels deep (> ${t.maxDepth}); deep trees slow mount and reconciliation.`,
6971
+ message: `Graph nests ${perf.maxDepth} levels deep (> ${t6.maxDepth}); deep trees slow mount and reconciliation.`,
5797
6972
  observed: perf.maxDepth,
5798
- threshold: t.maxDepth
6973
+ threshold: t6.maxDepth
5799
6974
  });
5800
6975
  }
5801
- if (perf.largestChildCount > t.maxChildCount) {
6976
+ if (perf.largestChildCount > t6.maxChildCount) {
5802
6977
  out.push({
5803
6978
  code: "large-list",
5804
- message: `A single node has ${perf.largestChildCount} children (> ${t.maxChildCount}); large un-windowed lists dominate DOM cost.`,
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: t.maxChildCount
6981
+ threshold: t6.maxChildCount
5807
6982
  });
5808
6983
  }
5809
- if (perf.distinctSignals > t.maxSignals) {
6984
+ if (perf.distinctSignals > t6.maxSignals) {
5810
6985
  out.push({
5811
6986
  code: "high-signal-fanout",
5812
- message: `${perf.distinctSignals} distinct signals are bound (> ${t.maxSignals}); heavy reactive fan-out increases update overhead.`,
6987
+ message: `${perf.distinctSignals} distinct signals are bound (> ${t6.maxSignals}); heavy reactive fan-out increases update overhead.`,
5813
6988
  observed: perf.distinctSignals,
5814
- threshold: t.maxSignals
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(form, options = {}) {
5888
- const values = form.values.peek();
5889
- const errorsRaw = form.errors.peek();
5890
- const touchedRaw = form.touched.peek();
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: form.dirty.peek(),
5900
- valid: form.valid.peek(),
5901
- status: form.status.peek()
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 t of types) {
5931
- byType[t] = (byType[t] ?? 0) + 1;
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 [label, sig] of Object.entries(sources.signals)) {
6048
- live[label] = inspectSignal(
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 [label, value] of Object.entries(source)) out[label] = inspect(value);
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 [label, sig] of Object.entries(s.signals.live)) {
6123
- lines.push(` ${label} [${sig.kind}] = ${format(sig.value)} \xB7 observers ${sig.observerCount ?? "?"}`);
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 t of s.transitions) {
6141
- lines.push(` ${t.key ?? t.id} on <${t.nodeType}> \xB7 ${t.duration}ms${t.appear ? " \xB7 appear" : ""}`);
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 [label, r] of Object.entries(s.resources)) {
6150
- lines.push(` ${label}: ${r.status}${r.loading ? " (loading)" : ""}${r.hasError ? ` !${r.errorName}` : ""}`);
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 [label, m] of Object.entries(s.mutations)) {
6156
- lines.push(` ${label}: ${m.status}${m.pending ? " (pending)" : ""}${m.hasError ? ` !${m.errorName}` : ""}`);
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 [label, f] of Object.entries(s.forms)) {
6162
- lines.push(` ${label}: ${f.valid ? "valid" : "invalid"} \xB7 ${f.status} \xB7 fields ${f.fields.length}`);
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 [label, c] of Object.entries(s.contexts)) {
6168
- lines.push(` ${label} (${c.description}): ${c.hasProvider ? "provided" : "no provider"}`);
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(([t, n]) => `${t}\xD7${n}`).join(", ")}` : "")
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, body) {
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>${body}</section>`;
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
- ([label, sig]) => `<code>${escapeHtml(label)}</code> <span class="st-key">[${escapeHtml(sig.kind)}]</span> = <code>${escapeHtml(sig.value)}</code> <span class="st-dim">observers ${escapeHtml(sig.observerCount ?? "?")}</span>`
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
- ([label, r]) => `<code>${escapeHtml(label)}</code>: ${escapeHtml(r.status)}` + (r.loading ? ' <span class="st-dim">(loading)</span>' : "") + (r.hasError ? ` <span class="st-err">!${escapeHtml(r.errorName)}</span>` : "")
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
- (t) => `<code>${escapeHtml(t.key ?? t.id)}</code> on <code>&lt;${escapeHtml(t.nodeType)}&gt;</code> <span class="st-dim">${t.duration}ms${t.appear ? " \xB7 appear" : ""}</span>`
7487
+ (t6) => `<code>${escapeHtml(t6.key ?? t6.id)}</code> on <code>&lt;${escapeHtml(t6.nodeType)}&gt;</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
- ([label, f]) => `<code>${escapeHtml(label)}</code>: ${f.valid ? "valid" : "invalid"} \xB7 ${escapeHtml(f.status)} \xB7 ${f.fields.length} field(s)`
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 code = ch.charCodeAt(0).toString(16).padStart(4, "0");
6404
- return `\\u${code}`;
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
- (t) => `<button type="button" role="tab" class="st-tab" data-tab="${escapeHtml(t.id)}"${t.id === initialTab ? ' aria-selected="true"' : ' aria-selected="false"'}>${escapeHtml(t.label)}</button>`
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">&#8635; 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,