@almadar/ui 6.57.0 → 6.59.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.
Files changed (32) hide show
  1. package/dist/{AwaitingSkeletonContext-DPgW__WV.d.ts → AwaitingSkeletonContext-Bh399p1x.d.ts} +1 -3
  2. package/dist/{Canvas3DHost-DfAhg6EH.d.ts → Canvas3DHost-CNjANoaU.d.ts} +1 -1
  3. package/dist/{GameAudioProvider-DyBvYP2c.d.ts → GameAudioProvider-Dv_L-PHt.d.ts} +1 -1
  4. package/dist/{UISlotRenderer-NCGDIXN4.js → UISlotRenderer-YNY7V2UJ.js} +2 -2
  5. package/dist/avl/index.cjs +137 -71
  6. package/dist/avl/index.js +24 -8
  7. package/dist/{chunk-GZGDBS4S.js → chunk-7CVXM2KS.js} +1 -1
  8. package/dist/{chunk-PYJ2UQWM.js → chunk-E6MWYQVZ.js} +42 -35
  9. package/dist/{chunk-HA7CJWQX.js → chunk-J755QADM.js} +1184 -1184
  10. package/dist/{chunk-VHTJRS2N.js → chunk-L3MTZ3RH.js} +7 -0
  11. package/dist/{chunk-RHP5WL55.js → chunk-QJIAJ6EH.js} +77 -42
  12. package/dist/components/index.cjs +76 -32
  13. package/dist/components/index.d.ts +9 -7
  14. package/dist/components/index.js +5 -5
  15. package/dist/context/index.cjs +7 -0
  16. package/dist/context/index.js +1 -1
  17. package/dist/hooks/index.cjs +7 -0
  18. package/dist/hooks/index.js +1 -1
  19. package/dist/lib/drawable/three/index.d.ts +3 -3
  20. package/dist/lib/drawable/three/index.js +3 -3
  21. package/dist/lib/index.d.ts +2 -2
  22. package/dist/{paintDispatch-_6EhJCiL.d.ts → paintDispatch-Cp1_S93j.d.ts} +30 -2
  23. package/dist/providers/index.cjs +51 -50
  24. package/dist/providers/index.d.ts +4 -4
  25. package/dist/providers/index.js +8 -21
  26. package/dist/runtime/index.cjs +120 -70
  27. package/dist/runtime/index.d.ts +4 -4
  28. package/dist/runtime/index.js +4 -4
  29. package/dist/ssr/index.cjs +2 -0
  30. package/dist/ssr/index.js +2 -0
  31. package/dist/{verificationRegistry-CD7Xb40L.d.ts → verificationRegistry-B3dj1Zl8.d.ts} +1 -1
  32. package/package.json +9 -8
@@ -309,6 +309,13 @@ function useUISlotManager() {
309
309
  setSources((prev) => {
310
310
  const slotSources = prev[slot];
311
311
  if (!slotSources || !(sourceKey in slotSources)) {
312
+ const embedded = traitIndexRef.current.get(sourceTrait);
313
+ if (embedded !== void 0 && embedded.slot === slot) {
314
+ unindexTrait(sourceTrait);
315
+ notifyTraitSubscribers(sourceTrait, null);
316
+ log.info("slot:cleared-embedded", { slot, sourceTrait, lastPatternType: embedded.pattern });
317
+ return prev;
318
+ }
312
319
  log.debug("slot:clear-noop", { slot, sourceTrait, reason: !slotSources ? "no-slot" : "no-source" });
313
320
  return prev;
314
321
  }
@@ -1,26 +1,27 @@
1
1
  import { useTranslate, useRenderI18n, runTickFrame } from './chunk-N7JIG57B.js';
2
- import { ALL_SLOTS } from './chunk-VHTJRS2N.js';
3
- import { LoadingState, ErrorState, UISlotRenderer } from './chunk-PYJ2UQWM.js';
4
- import { Box } from './chunk-HA7CJWQX.js';
2
+ import { ALL_SLOTS } from './chunk-L3MTZ3RH.js';
3
+ import { LoadingState, ErrorState, UISlotRenderer } from './chunk-E6MWYQVZ.js';
4
+ import { Box } from './chunk-J755QADM.js';
5
5
  import { Typography } from './chunk-4ZGXIW3B.js';
6
6
  import { beginPending, endPending } from './chunk-I5QOYW2Z.js';
7
7
  import { useEventBus } from './chunk-CHNC4UYE.js';
8
8
  import { registerTrait, unregisterTrait, perfTimeAsync } from './chunk-KJGVLXEN.js';
9
9
  import { bindTraitStateGetter, registerTraitSnapshot, recordTransition, recordingTransport, recordServerResponse } from './chunk-Q47ZN2DW.js';
10
10
  import { isNotificationSlot } from './chunk-PEST66PN.js';
11
- import React, { useState, useMemo, useEffect, useRef, useCallback, useSyncExternalStore } from 'react';
11
+ import React, { createContext, useState, useMemo, useEffect, useRef, useCallback, useSyncExternalStore, useContext } from 'react';
12
12
  import { schemaToIR, getPage, clearSchemaCache as clearSchemaCache$1, traitsEmbeddedByEvent, traitReferencesCallsitePayload, configReferencesCallsitePayload, TRAIT_MOUNT_ERROR_TESTID, traitsEmbeddedByEffects, applyListenPayloadMapping, buildResolvedTraitConfigs, collectCallsiteCaptureChildren, orbitalInlineEntities, storesRowsInBrowser, walkSExpr, isRenderBindingMarker, containsEntityBinding, isSExpr, isEventPayloadValue, RENDER_BINDING_MARKER } from '@almadar/core';
13
13
  import { createLogger } from '@almadar/logger';
14
- import { collectListenerTargets, LIFECYCLE_EVENTS, TraitMountError, InMemoryPersistence, loadLazyPage, createInProcessTransport, buildTraitIndex, createMemoryCircuitStore, createLocalStoreTransport, createResidenceTransport, createClientKernel, createTickScheduler, isValidCronExpression, parseDurationString, UNMOUNT_EVENT, createClientEffectHandlers, EffectExecutor, isSExpression, collectDeclaredConfigDefaults, createContextFromBindings, openBrowserStore, browserStoreName, normalizeCallSiteConfigToValues } from '@almadar/runtime';
15
- import { useUser, useHasServerBridge, useArbitraryClassStyles, getAllPages, matchPathAmong, CurrentPagePathProvider, NavStackProvider, OrbitalProvider, ServerBridgeProvider, useNavStack, VerificationProvider, EntitySchemaProvider, OrbitalThemeProvider, useServerBridge, EntityBindingContext, AwaitingSkeletonContext } from '@almadar/ui/providers';
14
+ import { collectListenerTargets, LIFECYCLE_EVENTS, TraitMountError, loadLazyPage, createInProcessTransport, buildTraitIndex, createMemoryCircuitStore, createLocalStoreTransport, createResidenceTransport, createClientKernel, createTickScheduler, isValidCronExpression, parseDurationString, UNMOUNT_EVENT, createClientEffectHandlers, EffectExecutor, isSExpression, collectDeclaredConfigDefaults, createContextFromBindings, openBrowserStore, browserStoreName, normalizeCallSiteConfigToValues } from '@almadar/runtime';
15
+ import { useUser, useArbitraryClassStyles, getAllPages, matchPathAmong, CurrentPagePathProvider, NavStackProvider, OrbitalProvider, ServerBridgeProvider, useNavStack, VerificationProvider, EntitySchemaProvider, OrbitalThemeProvider, useServerBridge, EntityBindingContext, AwaitingSkeletonContext } from '@almadar/ui/providers';
16
16
  import { evaluateListenPayloadExpr, evaluate, createMinimalContext, evaluateGuard, executeEffects } from '@almadar/evaluator';
17
17
  import { getPatternDefinition } from '@almadar/core/patterns';
18
18
  import { isKnownStdOperator } from '@almadar/std/registry';
19
- import { prepareSchemaForPreview, collectTraitRefsFromResolvedTrait, buildOrbitalsByTrait, collectEmbeddedTraits } from '@almadar/runtime/ui';
19
+ import { prepareSchemaForPreview, collectTraitRefsFromResolvedTrait, buildOrbitalsByTrait, buildTraitLinkedEntities, collectEmbeddedTraits } from '@almadar/runtime/ui';
20
20
  export { adjustSchemaForMockData, buildMockData, collectEmbeddedTraits, prepareSchemaForPreview } from '@almadar/runtime/ui';
21
21
  import { useInRouterContext, useHref } from 'react-router-dom';
22
22
  import { UISlotProvider, useUISlots } from '@almadar/ui/context';
23
23
  import { useTranslate as useTranslate$1, createTranslate, I18nProvider } from '@almadar/ui/hooks';
24
+ import { InMemoryPersistence } from '@almadar/db/mock';
24
25
  import { jsx, jsxs } from 'react/jsx-runtime';
25
26
  import { OrbitalServerRuntime } from '@almadar/runtime/OrbitalServerRuntime';
26
27
  import { localeDirection } from '@almadar/core/i18n';
@@ -440,6 +441,22 @@ function useBusIngress(traitBindings, traitIndex, settle, eventBus, appTraitName
440
441
  });
441
442
  unsubscribes.push(unsub);
442
443
  }
444
+ const routedBareEvents = /* @__PURE__ */ new Set();
445
+ for (const binding of traitBindings) {
446
+ for (const listen of binding.trait.listens ?? []) {
447
+ if (listen.source !== void 0 && listen.source.kind !== "any") routedBareEvents.add(listen.event);
448
+ }
449
+ }
450
+ for (const eventKey of routedBareEvents) {
451
+ const unsub = eventBus.on(`UI:${eventKey}`, (event) => {
452
+ if (deliveredHere(event.source) || event.source?.trait === void 0) return;
453
+ for (const target of collectListenerTargets(traitIndex, event.source, eventKey, event.payload)) {
454
+ log2.debug("listen-bare:fire", { event: eventKey, source: event.source.trait, listener: target.listenerTrait, triggers: target.triggers });
455
+ dispatch(target.listenerTrait, target.triggers, target.payload, event.source);
456
+ }
457
+ });
458
+ unsubscribes.push(unsub);
459
+ }
443
460
  return () => {
444
461
  for (const unsub of unsubscribes) unsub();
445
462
  };
@@ -518,7 +535,7 @@ function resolveLambdaBindings(body, params, item, index) {
518
535
  return body;
519
536
  }
520
537
  var LazySlotContentRenderer = React.lazy(
521
- () => import('./UISlotRenderer-NCGDIXN4.js').then((m) => ({ default: m.SlotContentRenderer }))
538
+ () => import('./UISlotRenderer-YNY7V2UJ.js').then((m) => ({ default: m.SlotContentRenderer }))
522
539
  );
523
540
  function deferLambdaEntityExprs(value) {
524
541
  if (typeof value === "string") {
@@ -1331,9 +1348,16 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
1331
1348
  useEffect(() => {
1332
1349
  if (!transport?.subscribe) return;
1333
1350
  return transport.subscribe((emitted, target) => {
1334
- for (const t2 of collectListenerTargets(traitIndex, emitted.source, emitted.event, emitted.payload)) {
1335
- void (target === "origin" ? progressAndSettle(t2.listenerTrait, t2.triggers, t2.payload) : dispatchAndSettle(t2.listenerTrait, t2.triggers, t2.payload));
1351
+ const listeners = collectListenerTargets(traitIndex, emitted.source, emitted.event, emitted.payload);
1352
+ if (target !== "origin") {
1353
+ for (const t2 of listeners) void dispatchAndSettle(t2.listenerTrait, t2.triggers, t2.payload);
1354
+ return;
1355
+ }
1356
+ const caller = emitted.source?.trait;
1357
+ if (caller !== void 0 && traitIndex.byName.has(caller) && !listeners.some((t2) => t2.listenerTrait === caller && t2.triggers === emitted.event)) {
1358
+ void progressAndSettle(caller, emitted.event, emitted.payload);
1336
1359
  }
1360
+ for (const t2 of listeners) void progressAndSettle(t2.listenerTrait, t2.triggers, t2.payload);
1337
1361
  }, { clientId: getTabClientId() });
1338
1362
  }, [transport, traitIndex, progressAndSettle, dispatchAndSettle]);
1339
1363
  useEffect(() => {
@@ -1343,7 +1367,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
1343
1367
  if (traitName === void 0 || !traitIndex.byName.has(traitName)) return;
1344
1368
  const composedBefore = new Map(store.callsitePayloads);
1345
1369
  void kernel.foldHostDispatch(request, response).then((outcome) => settleOutcome(traitName, request.event, request.payload, outcome, composedBefore));
1346
- });
1370
+ }, { clientId: getTabClientId() });
1347
1371
  }, [transport, traitIndex, kernel, store, settleOutcome]);
1348
1372
  const mountAndSettle = useCallback(async (seeds, payload) => {
1349
1373
  const composedBefore = new Map(store.callsitePayloads);
@@ -1404,6 +1428,13 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
1404
1428
  prevActiveTraitNamesRef.current = nextActiveTraitNames;
1405
1429
  }, [traitBindings, uiSlots]);
1406
1430
  const mountedRef = useRef(null);
1431
+ const aliveRef = useRef(true);
1432
+ useEffect(() => {
1433
+ aliveRef.current = true;
1434
+ return () => {
1435
+ aliveRef.current = false;
1436
+ };
1437
+ }, []);
1407
1438
  const mountKey = `${options.mountKey ?? ""}\0${JSON.stringify(Object.entries(options.initPayload ?? {}).sort(([a], [b]) => a.localeCompare(b)))}`;
1408
1439
  useEffect(() => {
1409
1440
  const prev = mountedRef.current;
@@ -1434,6 +1465,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
1434
1465
  const failed = err instanceof TraitMountError ? err.trait : traits.join(", ");
1435
1466
  const cause = err instanceof TraitMountError ? err.original : err;
1436
1467
  stateLog.warn("mount:failed", { traits, failed, error: message, stack: cause instanceof Error ? cause.stack : void 0 });
1468
+ if (!aliveRef.current) return;
1437
1469
  uiSlots.render({
1438
1470
  target: "main",
1439
1471
  pattern: "error-state",
@@ -1562,6 +1594,7 @@ function TraitInitializer({ traits, routeParams, mountKey, orbitals, onNavigate,
1562
1594
  }
1563
1595
  var CONTENT_STAGE_WIDTH = 480;
1564
1596
  var NO_ORBITALS = [];
1597
+ var LazyPageOfRegisteredProgram = createContext(false);
1565
1598
  function FitToBox({ children, mode = "box" }) {
1566
1599
  const outerRef = useRef(null);
1567
1600
  const innerRef = useRef(null);
@@ -1677,19 +1710,10 @@ function SchemaRunner({ schema, serverUrl, transport, getAccessToken, mockData,
1677
1710
  ),
1678
1711
  [schema, ir]
1679
1712
  );
1680
- const traitLinkedEntitiesMap = useMemo(() => {
1681
- const map = /* @__PURE__ */ new Map();
1682
- if (ir) {
1683
- for (const page of ir.pages.values()) {
1684
- for (const binding of page.traits) {
1685
- if (binding.linkedEntity) {
1686
- map.set(binding.trait.name, binding.linkedEntity);
1687
- }
1688
- }
1689
- }
1690
- }
1691
- return map;
1692
- }, [ir]);
1713
+ const traitLinkedEntitiesMap = useMemo(
1714
+ () => ir ? buildTraitLinkedEntities(ir) : /* @__PURE__ */ new Map(),
1715
+ [ir]
1716
+ );
1693
1717
  const orbitalsByTraitMap = useMemo(
1694
1718
  () => new Map(Object.entries(orbitalsByTrait)),
1695
1719
  [orbitalsByTrait]
@@ -1833,7 +1857,7 @@ function OrbPreview({
1833
1857
  if (localFallback) return;
1834
1858
  setLocalFallback(true);
1835
1859
  }, [localFallback]);
1836
- const hasOuterBridge = useHasServerBridge();
1860
+ const isLazyPageOfRegisteredProgram = useContext(LazyPageOfRegisteredProgram);
1837
1861
  const parseResult = useMemo(() => {
1838
1862
  let parsed;
1839
1863
  if (typeof schema === "string") {
@@ -2025,13 +2049,13 @@ function OrbPreview({
2025
2049
  navLog.info("interceptor:installed", { pageCount: pages.length, paths: pages.map((p) => p.page.path) });
2026
2050
  return () => el.removeEventListener("click", handler, true);
2027
2051
  }, [pages, handleNavigate, isolated, hostHrefBase]);
2028
- const withBridge = (node) => (serverUrl || transport) && !hasOuterBridge ? /* @__PURE__ */ jsx(ServerBridgeProvider, { schema: parseResult.schema, serverUrl, transport, getAccessToken, children: node }) : node;
2052
+ const withBridge = (node) => (serverUrl || transport) && !isLazyPageOfRegisteredProgram ? /* @__PURE__ */ jsx(ServerBridgeProvider, { schema: parseResult.schema, serverUrl, transport, getAccessToken, children: node }) : node;
2029
2053
  if (lazyRoute) {
2030
2054
  return withBridge(
2031
2055
  /* @__PURE__ */ jsxs(Box, { ref: containerRef, className: `overflow-auto ${className ?? ""}`, style: { height }, children: [
2032
2056
  lazyLoad.status === "loading" && /* @__PURE__ */ jsx(LoadingState, {}),
2033
2057
  lazyLoad.status === "error" && /* @__PURE__ */ jsx(ErrorState, { "data-testid": "lazy-page-error", message: lazyLoad.error }),
2034
- lazyLoad.status === "ready" && /* @__PURE__ */ jsx(
2058
+ lazyLoad.status === "ready" && /* @__PURE__ */ jsx(LazyPageOfRegisteredProgram.Provider, { value: true, children: /* @__PURE__ */ jsx(
2035
2059
  OrbPreview,
2036
2060
  {
2037
2061
  schema: lazyLoad.schema,
@@ -2051,7 +2075,7 @@ function OrbPreview({
2051
2075
  onUnmatchedNavigate: handleNavigate
2052
2076
  },
2053
2077
  lazyRoute.page.orbRef
2054
- )
2078
+ ) })
2055
2079
  ] })
2056
2080
  );
2057
2081
  }
@@ -2148,21 +2172,28 @@ function BrowserPlayground({
2148
2172
  runtime.resumeTicks();
2149
2173
  }
2150
2174
  }, [runtime, paused]);
2151
- const registrationReady = useMemo(() => {
2152
- const orbitalNames = schema.orbitals.map((o) => o.name);
2153
- playgroundLog.debug("register:start", { schema: schema.name, orbitalNames });
2175
+ const lazySchemas = useMemo(() => {
2154
2176
  const lazyPages = schema.lazyPages ?? [];
2155
- const lazy = lazyPages.length > 0 && lazyLoader !== void 0 ? Promise.all(lazyPages.map(async (page) => {
2177
+ if (lazyPages.length === 0 || lazyLoader === void 0) return Promise.resolve([]);
2178
+ return Promise.all(lazyPages.map(async (page) => {
2156
2179
  const loaded = await loadLazyPage(lazyLoader, page, schemaPath);
2157
2180
  if (!loaded.success) throw new Error(loaded.error);
2158
2181
  return loaded.data;
2159
- })) : Promise.resolve([]);
2160
- return lazy.then(
2161
- (lazySchemas) => runtime.register(schema, { ...messages !== void 0 ? { messages } : {}, lazy: lazySchemas })
2162
- ).then(() => {
2163
- playgroundLog.debug("register:done", { schema: schema.name, orbitalNames });
2182
+ }));
2183
+ }, [schema.lazyPages, lazyLoader, schemaPath]);
2184
+ const registerProgram = useCallback((program) => {
2185
+ const orbitalNames = program.orbitals.map((o) => o.name);
2186
+ playgroundLog.debug("register:start", { schema: program.name, orbitalNames });
2187
+ return lazySchemas.then((lazy) => runtime.register(program, { ...messages !== void 0 ? { messages } : {}, lazy })).then(() => {
2188
+ playgroundLog.debug("register:done", { schema: program.name, orbitalNames });
2164
2189
  });
2165
- }, [runtime, schema, messages, lazyLoader, schemaPath]);
2190
+ }, [runtime, lazySchemas, messages]);
2191
+ const latestRegistration = useRef(Promise.resolve());
2192
+ const registrationReady = useMemo(() => {
2193
+ const ready = registerProgram(schema);
2194
+ latestRegistration.current = ready;
2195
+ return ready;
2196
+ }, [registerProgram, schema]);
2166
2197
  const teardownTimerRef = useRef(null);
2167
2198
  useEffect(() => {
2168
2199
  if (teardownTimerRef.current !== null) {
@@ -2180,18 +2211,22 @@ function BrowserPlayground({
2180
2211
  const transport = useMemo(
2181
2212
  () => createInProcessTransport(
2182
2213
  async (orbitalName, request) => {
2183
- await registrationReady;
2214
+ await latestRegistration.current;
2184
2215
  return runtime.processOrbitalEvent(orbitalName, request);
2185
2216
  },
2186
2217
  {
2187
- // The program (lazy behaviors included) is registered above; the bridge only waits for it.
2188
- onRegister: () => registrationReady,
2218
+ // Registers what the bridge hands over (lazy behaviors included): a bridge that unregistered first gets it back.
2219
+ onRegister: (program) => {
2220
+ const ready = registerProgram(program);
2221
+ latestRegistration.current = ready;
2222
+ return ready;
2223
+ },
2189
2224
  onUnregister: () => {
2190
2225
  runtime.unregisterAll();
2191
2226
  }
2192
2227
  }
2193
2228
  ),
2194
- [runtime, registrationReady]
2229
+ [runtime, registerProgram, registrationReady]
2195
2230
  );
2196
2231
  const viewerLocale = locale ?? schema.locales?.[0];
2197
2232
  const i18n = useMemo(() => {
@@ -5323,6 +5323,7 @@ var init_Avatar = __esm({
5323
5323
  statusClasses[status],
5324
5324
  statusSizeClasses[size2]
5325
5325
  ),
5326
+ role: "img",
5326
5327
  "aria-label": t("avatar.status", { status: t(`avatar.status.${status}`) })
5327
5328
  }
5328
5329
  ),
@@ -8478,6 +8479,7 @@ var init_AnimatedGraphic = __esm({
8478
8479
  "div",
8479
8480
  {
8480
8481
  className: "w-full h-full [&>svg]:w-full [&>svg]:h-full",
8482
+ "aria-hidden": "true",
8481
8483
  dangerouslySetInnerHTML: { __html: resolvedSvg }
8482
8484
  }
8483
8485
  ) : children
@@ -10934,6 +10936,7 @@ var init_Tabs = __esm({
10934
10936
  }
10935
10937
  };
10936
10938
  const activeTabContent = safeItems.find((item) => item.id === activeTab)?.content;
10939
+ const rendersPanel = activeTabContent !== void 0 && activeTabContent !== null;
10937
10940
  if (safeItems.length === 0) {
10938
10941
  return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { ...domPassthrough(rest), className: cn("w-full", className), children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "small", color: "muted", className: "py-4", children: t("empty.noItems") }) });
10939
10942
  }
@@ -10984,7 +10987,7 @@ var init_Tabs = __esm({
10984
10987
  id: tabId(item.id),
10985
10988
  role: "tab",
10986
10989
  "aria-selected": isActive,
10987
- "aria-controls": isActive ? panelId(item.id) : void 0,
10990
+ "aria-controls": isActive && rendersPanel ? panelId(item.id) : void 0,
10988
10991
  "aria-disabled": isDisabled,
10989
10992
  tabIndex: isActive ? 0 : -1,
10990
10993
  onClick: () => !isDisabled && handleTabChange(item.id, item.event),
@@ -11044,7 +11047,7 @@ var init_Tabs = __esm({
11044
11047
  )
11045
11048
  ] })
11046
11049
  ] }) : tablist,
11047
- activeTabContent !== void 0 && activeTabContent !== null && /* @__PURE__ */ jsxRuntime.jsx(
11050
+ rendersPanel && /* @__PURE__ */ jsxRuntime.jsx(
11048
11051
  exports.Box,
11049
11052
  {
11050
11053
  role: "tabpanel",
@@ -20375,8 +20378,10 @@ var init_AvlFieldType = __esm({
20375
20378
  pattern: "hexagon",
20376
20379
  node: "hexagon",
20377
20380
  event: "hexagon",
20381
+ EventAddress: "hexagon",
20378
20382
  SExpr: "hexagon",
20379
20383
  array: "bars",
20384
+ tuple: "bars",
20380
20385
  relation: "link"
20381
20386
  };
20382
20387
  AvlFieldType = ({
@@ -32212,8 +32217,11 @@ function DataGrid({
32212
32217
  children: [
32213
32218
  imageField && (() => {
32214
32219
  const imgUrl = resolveImageUrl(core.getNestedValue(itemData, imageField));
32215
- if (!imgUrl) return null;
32216
- return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: asRows ? "w-12 h-12 flex-shrink-0 overflow-hidden rounded-container" : "w-full aspect-video overflow-hidden rounded-t-container", children: /* @__PURE__ */ jsxRuntime.jsx(
32220
+ const mediaClass = asRows ? "w-12 h-12 flex-shrink-0 overflow-hidden rounded-container" : "w-full aspect-video overflow-hidden rounded-t-container";
32221
+ if (!imgUrl) {
32222
+ return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { "data-media-placeholder": true, "aria-hidden": "true", className: cn(mediaClass, "flex items-center justify-center bg-muted text-muted-foreground"), children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "image", size: asRows ? "sm" : "lg" }) });
32223
+ }
32224
+ return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: mediaClass, children: /* @__PURE__ */ jsxRuntime.jsx(
32217
32225
  "img",
32218
32226
  {
32219
32227
  src: imgUrl,
@@ -32246,7 +32254,7 @@ function DataGrid({
32246
32254
  exports.Typography,
32247
32255
  {
32248
32256
  variant: titleField?.variant === "h3" && !asRows ? "h3" : "h4",
32249
- className: "font-semibold truncate min-w-0",
32257
+ className: cn("font-semibold min-w-0", asRows ? "truncate" : "line-clamp-2 break-words"),
32250
32258
  children: titleDisplay
32251
32259
  }
32252
32260
  )
@@ -32375,24 +32383,33 @@ var init_DataGrid = __esm({
32375
32383
  DataGrid.displayName = "DataGrid";
32376
32384
  }
32377
32385
  });
32378
- function renderIconInput2(icon, props) {
32379
- return typeof icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: icon, ...props }) : /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon, ...props });
32380
- }
32381
- function formatValue2(value, format, fmt2, relationOptions) {
32382
- const relationDisplay = resolveRelationCellDisplay(value, relationOptions);
32383
- if (relationDisplay !== void 0) return relationDisplay;
32384
- return formatValue(value, format, fmt2);
32385
- }
32386
- function groupData(items, field) {
32386
+
32387
+ // lib/groupRows.ts
32388
+ function groupRows(items, field, format, fmt2 = {}) {
32387
32389
  const groups = /* @__PURE__ */ new Map();
32388
32390
  for (const item of items) {
32389
- const key = String(core.getNestedValue(item, field) ?? "");
32391
+ const raw = core.getNestedValue(item, field);
32392
+ const key = format ? formatValue(raw ?? void 0, format, fmt2) : String(raw ?? "");
32390
32393
  const group = groups.get(key);
32391
32394
  if (group) group.push(item);
32392
32395
  else groups.set(key, [item]);
32393
32396
  }
32394
32397
  return Array.from(groups.entries()).map(([label, groupItems]) => ({ label, items: groupItems }));
32395
32398
  }
32399
+ var init_groupRows = __esm({
32400
+ "lib/groupRows.ts"() {
32401
+ init_format();
32402
+ init_getNestedValue();
32403
+ }
32404
+ });
32405
+ function renderIconInput2(icon, props) {
32406
+ return typeof icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: icon, ...props }) : /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon, ...props });
32407
+ }
32408
+ function formatValue2(value, format, fmt2, relationOptions) {
32409
+ const relationDisplay = resolveRelationCellDisplay(value, relationOptions);
32410
+ if (relationDisplay !== void 0) return relationDisplay;
32411
+ return formatValue(value, format, fmt2);
32412
+ }
32396
32413
  function DataList({
32397
32414
  entity,
32398
32415
  fields,
@@ -32403,6 +32420,7 @@ function DataList({
32403
32420
  gap = "none",
32404
32421
  variant = "default",
32405
32422
  groupBy,
32423
+ groupFormat,
32406
32424
  senderField,
32407
32425
  senderLabelField,
32408
32426
  currentUser,
@@ -32510,9 +32528,9 @@ function DataList({
32510
32528
  e.stopPropagation();
32511
32529
  fireRowAction(action, itemData, String(itemData.id ?? ""));
32512
32530
  };
32513
- const renderItemActions = (itemData, onPrimary = false) => {
32531
+ const renderItemActions = (itemData, onPrimary = false, only) => {
32514
32532
  if (!itemActions || itemActions.length === 0) return null;
32515
- const shown = rowActions(itemActions, itemData);
32533
+ const shown = only ?? rowActions(itemActions, itemData);
32516
32534
  if (shown.length === 0) return null;
32517
32535
  const inline = maxInlineActions != null ? shown.slice(0, maxInlineActions) : shown;
32518
32536
  const overflow = maxInlineActions != null ? shown.slice(maxInlineActions) : [];
@@ -32596,7 +32614,7 @@ function DataList({
32596
32614
  const isMessage = variant === "message";
32597
32615
  if (isMessage) {
32598
32616
  const items2 = [...data];
32599
- const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
32617
+ const groups2 = groupBy ? groupRows(items2, groupBy, groupFormat, fmt2) : [{ label: "", items: items2 }];
32600
32618
  const contentField = (fieldDefs.find((f3) => f3.variant === "body") ?? titleField)?.name ?? "";
32601
32619
  const senderLabel = (itemData, raw) => {
32602
32620
  if (!senderLabelField) return raw;
@@ -32693,7 +32711,7 @@ function DataList({
32693
32711
  ] });
32694
32712
  }
32695
32713
  const items = [...data];
32696
- const groups = groupBy ? groupData(items, groupBy) : [{ label: "", items }];
32714
+ const groups = groupBy ? groupRows(items, groupBy, groupFormat, fmt2) : [{ label: "", items }];
32697
32715
  const idFieldName = dndItemIdField ?? "id";
32698
32716
  const renderItem = (itemData, index, isLast) => {
32699
32717
  const dndId = itemData[idFieldName] ?? `__idx_${index}`;
@@ -32704,7 +32722,11 @@ function DataList({
32704
32722
  const divider = (isCard || isCompact) && !isLast ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: cn("border-b border-border/40", isCompact ? "mx-4" : "mx-6") }) : null;
32705
32723
  if (hasRenderProp) {
32706
32724
  const id2 = itemData.id || String(index);
32707
- const actions = renderItemActions(itemData);
32725
+ const allActions = itemActions ? rowActions(itemActions, itemData) : [];
32726
+ const primaryActions = allActions.filter((a) => a.variant === "primary");
32727
+ const otherActions = allActions.filter((a) => a.variant !== "primary");
32728
+ const primary = primaryActions.length > 0 ? renderItemActions(itemData, false, primaryActions) : null;
32729
+ const actions = otherActions.length > 0 ? renderItemActions(itemData, false, otherActions) : null;
32708
32730
  return wrapDnd(
32709
32731
  /* @__PURE__ */ jsxRuntime.jsxs(
32710
32732
  exports.Box,
@@ -32725,6 +32747,7 @@ function DataList({
32725
32747
  }
32726
32748
  ),
32727
32749
  /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: cn(onOpen && "relative"), children: itemRenderer(itemData, index) }),
32750
+ primary && /* @__PURE__ */ jsxRuntime.jsx(exports.HStack, { justify: "end", className: cn("relative px-4 pb-3", STRETCHED_ABOVE), children: primary }),
32728
32751
  actions && /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { onClick: (e) => e.stopPropagation(), className: "absolute top-2 right-2 z-10 opacity-0 group-hover/rowactions:opacity-100 focus-within:opacity-100 [@media(pointer:coarse)]:opacity-100 transition-opacity duration-fast", children: [
32729
32752
  /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "rounded-container border border-border bg-card/95 backdrop-blur-sm shadow-elevation-popover surface-material p-0.5 [@media(pointer:coarse)]:hidden", children: actions }),
32730
32753
  /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "hidden [@media(pointer:coarse)]:block rounded-container border border-border bg-card/95 backdrop-blur-sm shadow-elevation-popover surface-material p-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -32732,7 +32755,7 @@ function DataList({
32732
32755
  {
32733
32756
  position: "bottom-end",
32734
32757
  trigger: /* @__PURE__ */ jsxRuntime.jsx(exports.Button, { variant: "ghost", size: "sm", "aria-label": t("common.actions"), "data-testid": "action-overflow", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "more-horizontal", size: "xs" }) }),
32735
- items: rowActions(itemActions ?? [], itemData).map((action) => ({
32758
+ items: otherActions.map((action) => ({
32736
32759
  label: action.label,
32737
32760
  icon: action.icon,
32738
32761
  variant: action.variant === "danger" ? "danger" : "default",
@@ -32923,6 +32946,7 @@ var init_DataList = __esm({
32923
32946
  init_format();
32924
32947
  init_relationLabel();
32925
32948
  init_getNestedValue();
32949
+ init_groupRows();
32926
32950
  init_useEventBus();
32927
32951
  init_useRowActions();
32928
32952
  init_Box();
@@ -34016,16 +34040,6 @@ function asFieldValue(v) {
34016
34040
  if (t === "object") return v;
34017
34041
  return void 0;
34018
34042
  }
34019
- function groupData2(items, field) {
34020
- const groups = /* @__PURE__ */ new Map();
34021
- for (const item of items) {
34022
- const key = String(core.getNestedValue(item, field) ?? "");
34023
- const group = groups.get(key);
34024
- if (group) group.push(item);
34025
- else groups.set(key, [item]);
34026
- }
34027
- return Array.from(groups.entries()).map(([label, groupItems]) => ({ label, items: groupItems }));
34028
- }
34029
34043
  function TableView({
34030
34044
  entity,
34031
34045
  columns,
@@ -34336,7 +34350,7 @@ function TableView({
34336
34350
  return dnd.isZone ? /* @__PURE__ */ jsxRuntime.jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsxRuntime.jsx(React89__namespace.default.Fragment, { children: rowInner }, id);
34337
34351
  };
34338
34352
  const items = Array.from(data);
34339
- const groups = groupBy ? groupData2(items, groupBy) : [{ label: "", items }];
34353
+ const groups = groupBy ? groupRows(items, groupBy) : [{ label: "", items }];
34340
34354
  let runningIndex = 0;
34341
34355
  const body = /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxRuntime.jsxs(React89__namespace.default.Fragment, { children: [
34342
34356
  group.label && /* @__PURE__ */ jsxRuntime.jsx(exports.Divider, { label: group.label, className: gi > 0 ? "mt-3" : "mt-0" }),
@@ -34375,6 +34389,7 @@ var init_TableView = __esm({
34375
34389
  init_format();
34376
34390
  init_relationLabel();
34377
34391
  init_getNestedValue();
34392
+ init_groupRows();
34378
34393
  init_useEventBus();
34379
34394
  init_useRowActions();
34380
34395
  init_Box();
@@ -59078,6 +59093,18 @@ init_AuthLayout();
59078
59093
  init_CounterTemplate();
59079
59094
  init_GenericAppTemplate();
59080
59095
 
59096
+ // components/game/patterns.ts
59097
+ init_DrawSprite();
59098
+ init_DrawShape();
59099
+ init_DrawText();
59100
+ init_DrawGroup();
59101
+ init_DrawMesh();
59102
+ init_DrawSkinnedMesh();
59103
+ init_DrawSpriteLayer();
59104
+ init_DrawShapeLayer();
59105
+ init_DrawTextLayer();
59106
+ init_DrawFxLayer();
59107
+
59081
59108
  // components/index.ts
59082
59109
  init_cn();
59083
59110
  var log12 = logger.createLogger("almadar:ui:filesystem");
@@ -60230,6 +60257,13 @@ function useUISlotManager() {
60230
60257
  setSources((prev) => {
60231
60258
  const slotSources = prev[slot];
60232
60259
  if (!slotSources || !(sourceKey in slotSources)) {
60260
+ const embedded = traitIndexRef.current.get(sourceTrait);
60261
+ if (embedded !== void 0 && embedded.slot === slot) {
60262
+ unindexTrait(sourceTrait);
60263
+ notifyTraitSubscribers(sourceTrait, null);
60264
+ log20.info("slot:cleared-embedded", { slot, sourceTrait, lastPatternType: embedded.pattern });
60265
+ return prev;
60266
+ }
60233
60267
  log20.debug("slot:clear-noop", { slot, sourceTrait, reason: !slotSources ? "no-slot" : "no-source" });
60234
60268
  return prev;
60235
60269
  }
@@ -63300,6 +63334,16 @@ exports.DocSearch = DocSearch;
63300
63334
  exports.DocumentDetails = DocumentDetails;
63301
63335
  exports.DocumentPanel = DocumentPanel;
63302
63336
  exports.DomStateMachineVisualizer = exports.StateMachineView;
63337
+ exports.DrawFxLayer = DrawFxLayer;
63338
+ exports.DrawGroup = DrawGroup;
63339
+ exports.DrawMesh = DrawMesh;
63340
+ exports.DrawShape = DrawShape;
63341
+ exports.DrawShapeLayer = DrawShapeLayer;
63342
+ exports.DrawSkinnedMesh = DrawSkinnedMesh;
63343
+ exports.DrawSprite = DrawSprite;
63344
+ exports.DrawSpriteLayer = DrawSpriteLayer;
63345
+ exports.DrawText = DrawText;
63346
+ exports.DrawTextLayer = DrawTextLayer;
63303
63347
  exports.EditorCheckbox = EditorCheckbox;
63304
63348
  exports.EditorSelect = EditorSelect;
63305
63349
  exports.EditorSlider = EditorSlider;
@@ -2,12 +2,12 @@ import { A11yProps, Asset, EventKey, EventPayload, EventEmit, AssetUrl, FieldVal
2
2
  export { AnimationDef, AnimationName, AudioManifest, BusEvent, BusEventListener, BusEventSource, BusEventListener as EventListener, SkeletonVariant, SoundEntry, SpriteDirection, UISlot, Unsubscribe } from '@almadar/core';
3
3
  import * as React$1 from 'react';
4
4
  import React__default, { ReactNode, ErrorInfo } from 'react';
5
- import { I as IconInput, U as UiError, D as DrawableNode, P as Projector, F as FxOverlayItem, B as BadgeColor, M as MeshShapeKind, a as MeshMaterial, b as DrawGroupProps, c as DrawTextProps, d as DrawMeshProps, e as DisplayField, f as BadgeVariant, C as ColorToken } from '../paintDispatch-_6EhJCiL.js';
6
- export { g as Badge, h as BadgeProps, i as FxOverlayKind, j as Icon, k as IconAnimation, l as IconProps, m as IconSize, n as ImageSource, L as LinkAction, o as Point, R as Rect } from '../paintDispatch-_6EhJCiL.js';
5
+ import { I as IconInput, U as UiError, D as DrawableNode, P as Projector, F as FxOverlayItem, B as BadgeColor, M as MeshShapeKind, a as MeshMaterial, b as DrawGroupProps, c as DrawTextProps, d as DrawMeshProps, e as DisplayField, f as DisplayFieldFormat, g as BadgeVariant, C as ColorToken } from '../paintDispatch-Cp1_S93j.js';
6
+ export { h as Badge, i as BadgeProps, j as DrawFxLayer, k as DrawGroup, l as DrawMesh, m as DrawShape, n as DrawShapeLayer, o as DrawSkinnedMesh, p as DrawSprite, q as DrawSpriteLayer, r as DrawText, s as DrawTextLayer, t as FxOverlayKind, u as Icon, v as IconAnimation, w as IconProps, x as IconSize, y as ImageSource, L as LinkAction, z as Point, R as Rect } from '../paintDispatch-Cp1_S93j.js';
7
7
  import { SExpr } from '@almadar/evaluator';
8
- import { U as UnitAnimationState, F as FacingDirection, S as SpriteSheetUrls, f as SpriteFrameDims, R as ResolvedFrame, g as CanvasLighting, h as CanvasPost, a as IsometricUnit, i as CameraState } from '../Canvas3DHost-DfAhg6EH.js';
9
- export { B as BoardTile, G as GameAction, j as GamePhase, k as GameState, l as GameUnit, b as IsometricFeature, I as IsometricTile, P as Position, m as UnitTrait, n as calculateAttackTargets, o as calculateValidMoves, p as createInitialGameState } from '../Canvas3DHost-DfAhg6EH.js';
10
- export { G as GameAudioContext, a as GameAudioContextValue, e as GameAudioControls, b as GameAudioProvider, c as GameAudioProviderProps, U as UseGameAudioOptions, f as useGameAudio, u as useGameAudioContext } from '../GameAudioProvider-DyBvYP2c.js';
8
+ import { U as UnitAnimationState, F as FacingDirection, S as SpriteSheetUrls, f as SpriteFrameDims, R as ResolvedFrame, g as CanvasLighting, h as CanvasPost, a as IsometricUnit, i as CameraState } from '../Canvas3DHost-CNjANoaU.js';
9
+ export { B as BoardTile, G as GameAction, j as GamePhase, k as GameState, l as GameUnit, b as IsometricFeature, I as IsometricTile, P as Position, m as UnitTrait, n as calculateAttackTargets, o as calculateValidMoves, p as createInitialGameState } from '../Canvas3DHost-CNjANoaU.js';
10
+ export { G as GameAudioContext, a as GameAudioContextValue, e as GameAudioControls, b as GameAudioProvider, c as GameAudioProviderProps, U as UseGameAudioOptions, f as useGameAudio, u as useGameAudioContext } from '../GameAudioProvider-Dv_L-PHt.js';
11
11
  import { e as AvlStateMachineProps } from '../FileTree-BSfgp-HH.js';
12
12
  export { B as BehaviorView, f as BehaviorViewProps, g as FileTree, F as FileTreeItem, h as FileTreeNode, i as FileTreeProps, M as ModuleCard, j as ModuleCardProps } from '../FileTree-BSfgp-HH.js';
13
13
  import { LucideIcon } from 'lucide-react';
@@ -18,7 +18,7 @@ import { EmojiPickPayload, ItemActionPayload, SelectionChangePayload } from '@al
18
18
  import { T as TraitLevelData } from '../avl-schema-parser-CH1QoZw1.js';
19
19
  import { a as SlotContent, c as SlotPropValue } from '../useUISlots-1dk2TR4j.js';
20
20
  export { D as DEFAULT_SLOTS, S as SlotChangeCallback, b as SlotRenderConfig, U as UISlotManager, u as useUISlotManager } from '../useUISlots-1dk2TR4j.js';
21
- import '../verificationRegistry-CD7Xb40L.js';
21
+ import '../verificationRegistry-B3dj1Zl8.js';
22
22
  export { ALMADAR_DND_MIME, AuthContextValue, AuthUser, CanvasGestureCallbacks, CanvasGestureHandlers, CompileResult, CompileStage, DragReorderResult, DraggablePayload, Extension, ExtensionManifest, FileSystemFile, FileSystemStatus, GitHubRepo, GitHubStatus, I18nContextValue, I18nProvider, InfiniteScrollOptions, InfiniteScrollResult, LongPressHandlers, LongPressOptions, OpenFile, Positioned, PullToRefreshOptions, PullToRefreshResult, QuerySingletonEntity, QuerySingletonResult, QuerySingletonState, QueryState, RenderI18n, RenderInterpolationHandle, RenderInterpolationOptions, SelectedFile, SharedEntityStore, SharedEntityStoreContext, SharedEntitySubscriber, SharedEntityWriter, SwipeGestureOptions, SwipeGestureResult, SwipeHandlers, TapRevealOptions, TapRevealResult, TraitListenSpec, TranslateFunction, UseCanvasGesturesOptions, UseCompileResult, UseDraggableOptions, UseDraggableResult, UseDropZoneOptions, UseDropZoneResult, UseExtensionsOptions, UseExtensionsResult, UseFileEditorOptions, UseFileEditorResult, UseFileSystemResult, createSharedEntityStore, createTranslate, parseQueryBinding, runTickFrame, useAgentChat, useAuthContext, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useFormatContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useInfiniteScroll, useLongPress, useMediaQuery, usePrefersReducedMotion, usePreview, usePullToRefresh, useQuerySingleton, useRenderI18n, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate, useUIEvents, useValidation } from '../hooks/index.js';
23
23
  export { E as EventBusContextType, a as NavStackApi, u as useNavStack } from '../NavStackContext-04NLdXsY.js';
24
24
  export { E as EditorKeyEvent, a as KeyCaptureEntry, K as KeyCaptureTable, U as UseKeyboardRouterOptions, k as keyChord, m as mergeCaptureTables, u as useKeyboardRouter } from '../useKeyboardRouter-BW3rThep.js';
@@ -8190,6 +8190,8 @@ interface DataListProps extends DataDndProps, EmptyStateSlotProps, A11yProps {
8190
8190
  variant?: 'default' | 'card' | 'compact' | 'message';
8191
8191
  /** Group items by a field value (renders section headers between groups) */
8192
8192
  groupBy?: string;
8193
+ /** How a `groupBy` value is bucketed and labelled (`date` = one section per day) */
8194
+ groupFormat?: DisplayFieldFormat;
8193
8195
  /** Field name identifying the sender (used with variant: "message") */
8194
8196
  senderField?: string;
8195
8197
  /**
@@ -8275,7 +8277,7 @@ interface DataListProps extends DataDndProps, EmptyStateSlotProps, A11yProps {
8275
8277
  * field whose type is relation. Same contract DetailPanel takes. */
8276
8278
  relationsData?: Record<string, readonly RelationOption[]>;
8277
8279
  }
8278
- declare function DataList({ entity, fields, columns, itemActions, maxInlineActions, itemClickEvent, gap, variant, groupBy, senderField, senderLabelField, currentUser, emptyMessage, emptyIcon, emptyTitle, emptyDescription, emptyAction, className, isLoading, skeleton, error, reorderable: _reorderable, reorderEvent: _reorderEvent, swipeLeftEvent: _swipeLeftEvent, swipeLeftActions: _swipeLeftActions, swipeRightEvent: _swipeRightEvent, swipeRightActions: _swipeRightActions, longPressEvent: _longPressEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, sortBy, sortDirection, renderItem: schemaRenderItem, dragGroup, accepts, sortable: sortableProp, dropEvent, reorderEvent: dndReorderEvent, positionEvent, dndItemIdField, dndRoot, look, surface, relationsData, ...rest }: DataListProps): React__default.JSX.Element;
8280
+ declare function DataList({ entity, fields, columns, itemActions, maxInlineActions, itemClickEvent, gap, variant, groupBy, groupFormat, senderField, senderLabelField, currentUser, emptyMessage, emptyIcon, emptyTitle, emptyDescription, emptyAction, className, isLoading, skeleton, error, reorderable: _reorderable, reorderEvent: _reorderEvent, swipeLeftEvent: _swipeLeftEvent, swipeLeftActions: _swipeLeftActions, swipeRightEvent: _swipeRightEvent, swipeRightActions: _swipeRightActions, longPressEvent: _longPressEvent, infiniteScroll, loadMoreEvent, hasMore, children, pageSize, sortBy, sortDirection, renderItem: schemaRenderItem, dragGroup, accepts, sortable: sortableProp, dropEvent, reorderEvent: dndReorderEvent, positionEvent, dndItemIdField, dndRoot, look, surface, relationsData, ...rest }: DataListProps): React__default.JSX.Element;
8279
8281
  declare namespace DataList {
8280
8282
  var displayName: string;
8281
8283
  }
@@ -1,12 +1,12 @@
1
1
  export { assertUniqueSlotsPerHost } from '../chunk-O2EIWXWE.js';
2
2
  export { keyChord, mergeCaptureTables, useAgentChat, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useKeyboardRouter, useNavStack, usePreview, useRenderInterpolation, useTraitListens, useUIEvents, useValidation } from '../chunk-MZIDOJMD.js';
3
3
  export { I18nProvider, SharedEntityStoreContext, createSharedEntityStore, createTranslate, runTickFrame, useFormatContext, useRenderI18n, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useTranslate } from '../chunk-N7JIG57B.js';
4
- export { DEFAULT_SLOTS, useUISlotManager } from '../chunk-VHTJRS2N.js';
4
+ export { DEFAULT_SLOTS, useUISlotManager } from '../chunk-L3MTZ3RH.js';
5
5
  import '../chunk-YYYHH5BA.js';
6
- import { GridPicker, Icon, Button, FormSection, Select, JsonTreeEditor, ThemedPortal, Switch, Input } from '../chunk-PYJ2UQWM.js';
7
- export { ALL_PRESETS, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, AgentActivityFeed, AgentActivityRow, AgentChatFeed, AgentThinkingRow, Alert, AlgoGraphCanvas, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, Aside, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, COMPACT_MEDIA_QUERY, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardHeader, CardTitle, Carousel, Center, ChangeList, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommandPalette, CommitRow, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTION_KEYS, DEFAULT_MATRIX_COLUMN_KEYS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DockLayout, DocumentDetails, DocumentPanel, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmojiPicker, EmptyState, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureGrid, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, FloatingToolbar, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, FxOverlay, GameAudioContext, GameAudioCue, GameAudioProvider, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, Gantt, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, Header, HealthBar, Icon, IconButton, Image, ImportPreviewTree, ImportProgress, ImportSourcePicker, InfiniteScrollSentinel, Input, InputGroup, JazariStateMachine, JsonTreeEditor, Label, LawReferenceTooltip, LearningCanvas, LearningScene3D, Lightbox, LikertScale, LineChart, LoadingState, MapView, MarkdownContent, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NumberStepper, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, PageTransition, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, ProgressBar, ProgressDots, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichTextEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SkeletonTree, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StatusBar, StatusDot, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagInput, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TopNavItem, TraitFrame, TraitSlot, TraitStateViewer, TrendIndicator, TypewriterText, UISlotComponent, UISlotRenderer, UploadDropZone, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, activityRowFacts, applyCompletion, applySuggestions, arrowBetween, billboardLabel, boardEntity, bool, calculateAttackTargets, calculateValidMoves, createInitialGameState, createUnitAnimationState, cylinderBetween, dispatchCommandPaletteCommand, get3DClickPayload, getCurrentFrame, getTileDimensions, groupIntoConversations, inferDirection, isoToScreen, makeAsset, makeAssetMap, meshSphere, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, pendulum, projectileMotion, registerCodeLanguageLoader, renderPatternValue, resolveFrame, resolveSheetDirection, rows, sanitizeRichHtml, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAtlasSliceDataUrl, useCamera, useCompactLayout, useDockLayout, useGameAudio, useGameAudioContext, useImageCache, useUnitSpriteAtlas, vec2 } from '../chunk-PYJ2UQWM.js';
8
- import { VStack, HStack, Box } from '../chunk-HA7CJWQX.js';
9
- export { Box, HStack, Stack, VStack } from '../chunk-HA7CJWQX.js';
6
+ import { GridPicker, Icon, Button, FormSection, Select, JsonTreeEditor, ThemedPortal, Switch, Input } from '../chunk-E6MWYQVZ.js';
7
+ export { ALL_PRESETS, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, AgentActivityFeed, AgentActivityRow, AgentChatFeed, AgentThinkingRow, Alert, AlgoGraphCanvas, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, Aside, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, COMPACT_MEDIA_QUERY, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardHeader, CardTitle, Carousel, Center, ChangeList, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommandPalette, CommitRow, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTION_KEYS, DEFAULT_MATRIX_COLUMN_KEYS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DockLayout, DocumentDetails, DocumentPanel, DocumentViewer, StateMachineView as DomStateMachineVisualizer, DrawShapeLayer, DrawSprite, DrawSpriteLayer, DrawText, DrawTextLayer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmojiPicker, EmptyState, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureGrid, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, FloatingToolbar, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, FxOverlay, GameAudioContext, GameAudioCue, GameAudioProvider, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, Gantt, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, Header, HealthBar, Icon, IconButton, Image, ImportPreviewTree, ImportProgress, ImportSourcePicker, InfiniteScrollSentinel, Input, InputGroup, JazariStateMachine, JsonTreeEditor, Label, LawReferenceTooltip, LearningCanvas, LearningScene3D, Lightbox, LikertScale, LineChart, LoadingState, MapView, MarkdownContent, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NumberStepper, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, PageTransition, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, ProgressBar, ProgressDots, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichTextEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SkeletonTree, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StatusBar, StatusDot, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagInput, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TopNavItem, TraitFrame, TraitSlot, TraitStateViewer, TrendIndicator, TypewriterText, UISlotComponent, UISlotRenderer, UploadDropZone, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, activityRowFacts, applyCompletion, applySuggestions, arrowBetween, billboardLabel, boardEntity, bool, calculateAttackTargets, calculateValidMoves, createInitialGameState, createUnitAnimationState, cylinderBetween, dispatchCommandPaletteCommand, get3DClickPayload, getCurrentFrame, getTileDimensions, groupIntoConversations, inferDirection, isoToScreen, makeAsset, makeAssetMap, meshSphere, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, pendulum, projectileMotion, registerCodeLanguageLoader, renderPatternValue, resolveFrame, resolveSheetDirection, rows, sanitizeRichHtml, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAtlasSliceDataUrl, useCamera, useCompactLayout, useDockLayout, useGameAudio, useGameAudioContext, useImageCache, useUnitSpriteAtlas, vec2 } from '../chunk-E6MWYQVZ.js';
8
+ import { VStack, HStack, Box } from '../chunk-J755QADM.js';
9
+ export { Box, DrawFxLayer, DrawGroup, DrawMesh, DrawShape, DrawSkinnedMesh, HStack, Stack, VStack } from '../chunk-J755QADM.js';
10
10
  import { Typography } from '../chunk-4ZGXIW3B.js';
11
11
  export { Typography } from '../chunk-4ZGXIW3B.js';
12
12
  export { ALMADAR_DND_MIME, parseQueryBinding, useAuthContext, useCanvasGestures, useDragReorder, useDraggable, useDropZone, useInfiniteScroll, useLongPress, useMediaQuery, usePrefersReducedMotion, usePullToRefresh, useQuerySingleton, useSwipeGesture } from '../chunk-I5QOYW2Z.js';