@almadar/ui 5.157.0 → 5.158.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.
@@ -360,11 +360,32 @@ function isPlainObject(value) {
360
360
  if (typeof value === "function") return false;
361
361
  return true;
362
362
  }
363
+ function subtreeHasMarker(value) {
364
+ const cached = markerPresenceCache.get(value);
365
+ if (cached !== void 0) return cached;
366
+ let found = false;
367
+ const children = Array.isArray(value) ? value : Object.values(value);
368
+ for (const child of children) {
369
+ if (core.isRenderBindingMarker(child)) {
370
+ found = true;
371
+ break;
372
+ }
373
+ if (Array.isArray(child) || isPlainObject(child)) {
374
+ if (subtreeHasMarker(child)) {
375
+ found = true;
376
+ break;
377
+ }
378
+ }
379
+ }
380
+ markerPresenceCache.set(value, found);
381
+ return found;
382
+ }
363
383
  function walkValue(value, scopeTrait, entity, config, state) {
364
384
  if (core.isRenderBindingMarker(value)) {
365
385
  return { resolved: resolveMarkerExpression(value.expression, entity, config, state), changed: true };
366
386
  }
367
387
  if (Array.isArray(value)) {
388
+ if (!subtreeHasMarker(value)) return { resolved: value, changed: false };
368
389
  const out = [];
369
390
  let changed = false;
370
391
  for (const item of value) {
@@ -382,6 +403,7 @@ function walkValue(value, scopeTrait, entity, config, state) {
382
403
  return changed ? { resolved: out, changed: true } : { resolved: value, changed: false };
383
404
  }
384
405
  if (isPlainObject(value)) {
406
+ if (!subtreeHasMarker(value)) return { resolved: value, changed: false };
385
407
  const sourceTrait = value._sourceTrait;
386
408
  if (typeof sourceTrait === "string" && sourceTrait !== scopeTrait) {
387
409
  return { resolved: value, changed: false };
@@ -407,9 +429,11 @@ function resolveRenderBindingMarkers(props, scopeTrait, entity, config, state) {
407
429
  }
408
430
  return changed ? out : props;
409
431
  }
432
+ var markerPresenceCache;
410
433
  var init_resolve_render_bindings = __esm({
411
434
  "lib/resolve-render-bindings.ts"() {
412
435
  "use client";
436
+ markerPresenceCache = /* @__PURE__ */ new WeakMap();
413
437
  }
414
438
  });
415
439
  function cn(...inputs) {
@@ -27442,7 +27466,7 @@ function fileIcon(name) {
27442
27466
  return "file";
27443
27467
  }
27444
27468
  }
27445
- var TreeNodeItem, FileTree;
27469
+ var TreeNodeItem, FlatTreeNodeItem, FileTree;
27446
27470
  var init_FileTree = __esm({
27447
27471
  "components/core/molecules/FileTree.tsx"() {
27448
27472
  "use client";
@@ -27527,14 +27551,101 @@ var init_FileTree = __esm({
27527
27551
  )) })
27528
27552
  ] });
27529
27553
  };
27554
+ FlatTreeNodeItem = ({
27555
+ item,
27556
+ depth,
27557
+ indent,
27558
+ childrenByParent,
27559
+ onNodeSelect,
27560
+ defaultExpanded = false
27561
+ }) => {
27562
+ const [expanded, setExpanded] = React87.useState(defaultExpanded || depth < 1);
27563
+ const children = childrenByParent.get(item.id);
27564
+ const hasChildren = !!children && children.length > 0;
27565
+ const handleClick = React87.useCallback(() => {
27566
+ if (hasChildren) setExpanded((prev) => !prev);
27567
+ onNodeSelect?.(item.id);
27568
+ }, [hasChildren, item.id, onNodeSelect]);
27569
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
27570
+ /* @__PURE__ */ jsxRuntime.jsxs(
27571
+ Box,
27572
+ {
27573
+ className: "flex items-center gap-1.5 py-0.5 px-2 cursor-pointer rounded-sm transition-colors hover:bg-muted",
27574
+ style: { paddingLeft: depth * indent + 8 },
27575
+ onClick: handleClick,
27576
+ role: "treeitem",
27577
+ "aria-expanded": hasChildren ? expanded : void 0,
27578
+ children: [
27579
+ hasChildren ? /* @__PURE__ */ jsxRuntime.jsx(
27580
+ Icon,
27581
+ {
27582
+ name: expanded ? "chevron-down" : "chevron-right",
27583
+ size: "xs",
27584
+ className: "text-[var(--color-muted-foreground)] flex-shrink-0"
27585
+ }
27586
+ ) : /* @__PURE__ */ jsxRuntime.jsx(Box, { style: { width: 12, flexShrink: 0 } }),
27587
+ /* @__PURE__ */ jsxRuntime.jsx(
27588
+ Icon,
27589
+ {
27590
+ name: item.icon ?? (hasChildren ? expanded ? "folder-open" : "folder" : "file"),
27591
+ size: "xs",
27592
+ className: hasChildren ? "text-[var(--color-warning)]" : "text-[var(--color-muted-foreground)]"
27593
+ }
27594
+ ),
27595
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "truncate font-mono text-xs", children: item.label })
27596
+ ]
27597
+ }
27598
+ ),
27599
+ hasChildren && expanded && /* @__PURE__ */ jsxRuntime.jsx(Box, { role: "group", children: children.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
27600
+ FlatTreeNodeItem,
27601
+ {
27602
+ item: child,
27603
+ depth: depth + 1,
27604
+ indent,
27605
+ childrenByParent,
27606
+ onNodeSelect
27607
+ },
27608
+ child.id
27609
+ )) })
27610
+ ] });
27611
+ };
27530
27612
  FileTree = ({
27531
27613
  tree,
27614
+ items,
27532
27615
  selectedPath,
27533
27616
  onFileSelect,
27617
+ onNodeSelect,
27534
27618
  className,
27535
27619
  indent = 16
27536
27620
  }) => {
27537
- if (tree.length === 0) return null;
27621
+ if (items) {
27622
+ if (items.length === 0) return null;
27623
+ const ids = new Set(items.map((node) => node.id));
27624
+ const childrenByParent = /* @__PURE__ */ new Map();
27625
+ const roots = [];
27626
+ for (const item of items) {
27627
+ if (item.parentId && ids.has(item.parentId)) {
27628
+ const siblings = childrenByParent.get(item.parentId);
27629
+ if (siblings) siblings.push(item);
27630
+ else childrenByParent.set(item.parentId, [item]);
27631
+ } else {
27632
+ roots.push(item);
27633
+ }
27634
+ }
27635
+ return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: roots.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
27636
+ FlatTreeNodeItem,
27637
+ {
27638
+ item,
27639
+ depth: 0,
27640
+ indent,
27641
+ childrenByParent,
27642
+ onNodeSelect,
27643
+ defaultExpanded: true
27644
+ },
27645
+ item.id
27646
+ )) });
27647
+ }
27648
+ if (!tree || tree.length === 0) return null;
27538
27649
  return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsxRuntime.jsx(
27539
27650
  TreeNodeItem,
27540
27651
  {
@@ -28929,7 +29040,7 @@ var init_debug = __esm({
28929
29040
  logger.createLogger("almadar:ui:debug:game-state");
28930
29041
  }
28931
29042
  });
28932
- var isRelationsDebugEnabled, RelationSelect;
29043
+ var isRelationsDebugEnabled, MANY_CARDINALITIES, RelationSelect;
28933
29044
  var init_RelationSelect = __esm({
28934
29045
  "components/core/molecules/RelationSelect.tsx"() {
28935
29046
  "use client";
@@ -28943,6 +29054,11 @@ var init_RelationSelect = __esm({
28943
29054
  init_Typography();
28944
29055
  init_debug();
28945
29056
  isRelationsDebugEnabled = () => isDebugEnabled();
29057
+ MANY_CARDINALITIES = [
29058
+ "many",
29059
+ "one-to-many",
29060
+ "many-to-many"
29061
+ ];
28946
29062
  RelationSelect = ({
28947
29063
  value,
28948
29064
  onChange,
@@ -30607,17 +30723,21 @@ var init_MathCanvas = __esm({
30607
30723
  error
30608
30724
  }) => {
30609
30725
  const eventBus = useEventBus();
30726
+ const keyMapKey = keyMap ? JSON.stringify(keyMap) : null;
30727
+ const keyUpMapKey = keyUpMap ? JSON.stringify(keyUpMap) : null;
30728
+ const stableKeyMap = React87.useMemo(() => keyMap, [keyMapKey]);
30729
+ const stableKeyUpMap = React87.useMemo(() => keyUpMap, [keyUpMapKey]);
30610
30730
  React87.useEffect(() => {
30611
- if (!keyMap && !keyUpMap) return;
30731
+ if (!stableKeyMap && !stableKeyUpMap) return;
30612
30732
  const onDown = (e) => {
30613
- const ev = keyMap?.[e.code];
30733
+ const ev = stableKeyMap?.[e.code];
30614
30734
  if (ev) {
30615
30735
  eventBus.emit(`UI:${ev}`, {});
30616
30736
  e.preventDefault();
30617
30737
  }
30618
30738
  };
30619
30739
  const onUp = (e) => {
30620
- const ev = keyUpMap?.[e.code];
30740
+ const ev = stableKeyUpMap?.[e.code];
30621
30741
  if (ev) eventBus.emit(`UI:${ev}`, {});
30622
30742
  };
30623
30743
  window.addEventListener("keydown", onDown);
@@ -30626,7 +30746,7 @@ var init_MathCanvas = __esm({
30626
30746
  window.removeEventListener("keydown", onDown);
30627
30747
  window.removeEventListener("keyup", onUp);
30628
30748
  };
30629
- }, [keyMap, keyUpMap, eventBus]);
30749
+ }, [stableKeyMap, stableKeyUpMap, eventBus]);
30630
30750
  const derivedShapes = React87.useMemo(() => {
30631
30751
  const out = [];
30632
30752
  const margin = 24;
@@ -43063,6 +43183,9 @@ function determineInputType(field) {
43063
43183
  if (field.type === "relation" || field.relation) {
43064
43184
  return "relation";
43065
43185
  }
43186
+ if (field.type === "array") {
43187
+ return "array";
43188
+ }
43066
43189
  if (field.type === "enum" || field.values || getEnumOptions(field).length > 0) {
43067
43190
  return "select";
43068
43191
  }
@@ -43138,6 +43261,7 @@ var init_Form = __esm({
43138
43261
  init_Typography();
43139
43262
  init_Icon();
43140
43263
  init_RelationSelect();
43264
+ init_TagInput();
43141
43265
  init_UploadDropZone();
43142
43266
  init_Alert();
43143
43267
  init_useEventBus();
@@ -43217,7 +43341,7 @@ var init_Form = __esm({
43217
43341
  values: "values" in f3 ? f3.values : void 0,
43218
43342
  min: f3.min,
43219
43343
  max: f3.max,
43220
- relation: "relation" in f3 ? { entity: f3.relation.entity } : void 0
43344
+ relation: "relation" in f3 ? { entity: f3.relation.entity, cardinality: f3.relation.cardinality } : void 0
43221
43345
  })
43222
43346
  );
43223
43347
  }, [entity, fields]);
@@ -43452,7 +43576,7 @@ var init_Form = __esm({
43452
43576
  values: "values" in entityField ? entityField.values : void 0,
43453
43577
  min: entityField.min,
43454
43578
  max: entityField.max,
43455
- relation: "relation" in entityField ? { entity: entityField.relation.entity } : void 0
43579
+ relation: "relation" in entityField ? { entity: entityField.relation.entity, cardinality: entityField.relation.cardinality } : void 0
43456
43580
  };
43457
43581
  }
43458
43582
  return { name: field, type: "string" };
@@ -43564,6 +43688,22 @@ var init_Form = __esm({
43564
43688
  case "relation": {
43565
43689
  const relationOptions = relationsData[fieldName] || [];
43566
43690
  const relationLoading = relationsLoading[fieldName] || false;
43691
+ if (field.relation?.cardinality !== void 0 && MANY_CARDINALITIES.includes(field.relation.cardinality)) {
43692
+ const selectedValues = Array.isArray(currentValue) ? currentValue.map((v) => String(v)) : [];
43693
+ return /* @__PURE__ */ jsxRuntime.jsx(
43694
+ Select,
43695
+ {
43696
+ ...commonProps,
43697
+ multiple: true,
43698
+ searchable: true,
43699
+ clearable: true,
43700
+ options: [...relationOptions],
43701
+ value: selectedValues,
43702
+ onValueChange: (value) => handleChange(fieldName, Array.isArray(value) ? value : [value]),
43703
+ placeholder: field.placeholder || `Select ${label}...`
43704
+ }
43705
+ );
43706
+ }
43567
43707
  return /* @__PURE__ */ jsxRuntime.jsx(
43568
43708
  RelationSelect,
43569
43709
  {
@@ -43578,6 +43718,18 @@ var init_Form = __esm({
43578
43718
  }
43579
43719
  );
43580
43720
  }
43721
+ case "array": {
43722
+ const arrayValue = Array.isArray(currentValue) ? currentValue.map((v) => String(v)) : currentValue != null && currentValue !== "" ? [String(currentValue)] : [];
43723
+ return /* @__PURE__ */ jsxRuntime.jsx(
43724
+ TagInput,
43725
+ {
43726
+ placeholder: field.placeholder,
43727
+ disabled: isLoading,
43728
+ value: arrayValue,
43729
+ onChange: (next) => handleChange(fieldName, [...next])
43730
+ }
43731
+ );
43732
+ }
43581
43733
  case "number":
43582
43734
  return /* @__PURE__ */ jsxRuntime.jsx(
43583
43735
  Input,
@@ -49127,7 +49279,10 @@ function enrichFormFields(fields, entityDef) {
49127
49279
  enriched.values = entityField.enumValues;
49128
49280
  }
49129
49281
  if (entityField.relation) {
49130
- enriched.relation = entityField.relation.entity;
49282
+ enriched.relation = {
49283
+ entity: entityField.relation.entity,
49284
+ cardinality: entityField.relation.cardinality
49285
+ };
49131
49286
  }
49132
49287
  return enriched;
49133
49288
  }
@@ -49155,7 +49310,10 @@ function enrichFormFields(fields, entityDef) {
49155
49310
  }
49156
49311
  }
49157
49312
  if (!obj.relation && entityField.relation) {
49158
- enriched.relation = entityField.relation.entity;
49313
+ enriched.relation = {
49314
+ entity: entityField.relation.entity,
49315
+ cardinality: entityField.relation.cardinality
49316
+ };
49159
49317
  }
49160
49318
  return enriched;
49161
49319
  }
@@ -49170,7 +49328,12 @@ function enrichDetailFields(fields, entityDef) {
49170
49328
  const meta = { type: entityField.type };
49171
49329
  const values = entityField.values ?? entityField.enumValues;
49172
49330
  if (values && values.length > 0) meta.values = values;
49173
- if (entityField.relation) meta.relation = entityField.relation.entity;
49331
+ if (entityField.relation) {
49332
+ meta.relation = {
49333
+ entity: entityField.relation.entity,
49334
+ cardinality: entityField.relation.cardinality
49335
+ };
49336
+ }
49174
49337
  return meta;
49175
49338
  };
49176
49339
  return fields.map((field) => {
@@ -49724,6 +49887,32 @@ function isPlainConfigObject(value) {
49724
49887
  const proto = Object.getPrototypeOf(value);
49725
49888
  return proto === Object.prototype || proto === null;
49726
49889
  }
49890
+ function subtreeHasTraitRef(value) {
49891
+ const cached = traitRefPresenceCache.get(value);
49892
+ if (cached !== void 0) return cached;
49893
+ let found = false;
49894
+ const children = Array.isArray(value) ? value : Object.values(value);
49895
+ for (const child of children) {
49896
+ if (typeof child === "string" && TRAIT_BINDING_RE.test(child)) {
49897
+ found = true;
49898
+ break;
49899
+ }
49900
+ if (core.isRenderBindingMarker(child)) continue;
49901
+ if (Array.isArray(child)) {
49902
+ if (subtreeHasTraitRef(child)) {
49903
+ found = true;
49904
+ break;
49905
+ }
49906
+ } else if (child !== null && typeof child === "object" && isPlainConfigObject(child)) {
49907
+ if (subtreeHasTraitRef(child)) {
49908
+ found = true;
49909
+ break;
49910
+ }
49911
+ }
49912
+ }
49913
+ traitRefPresenceCache.set(value, found);
49914
+ return found;
49915
+ }
49727
49916
  function substituteTraitRefsDeep(value, pathKey) {
49728
49917
  if (core.isRenderBindingMarker(value)) return value;
49729
49918
  if (typeof value === "string") {
@@ -49738,11 +49927,13 @@ function substituteTraitRefsDeep(value, pathKey) {
49738
49927
  return value;
49739
49928
  }
49740
49929
  if (Array.isArray(value)) {
49930
+ if (!subtreeHasTraitRef(value)) return value;
49741
49931
  return value.map(
49742
49932
  (item, i) => substituteTraitRefsDeep(item, `${pathKey}[${i}]`)
49743
49933
  );
49744
49934
  }
49745
49935
  if (typeof value === "object" && isPlainConfigObject(value)) {
49936
+ if (!subtreeHasTraitRef(value)) return value;
49746
49937
  const out = {};
49747
49938
  for (const [k, v] of Object.entries(value)) {
49748
49939
  out[k] = substituteTraitRefsDeep(v, `${pathKey}.${k}`);
@@ -50031,7 +50222,7 @@ function UISlotRenderer({
50031
50222
  }
50032
50223
  return wrapped;
50033
50224
  }
50034
- var scopeWrapLog, TRAIT_BINDING_RE, SuspenseConfigContext, SlotContainedContext, SLOT_SKELETON_MAP, SELF_OVERLAY_PATTERNS, CONTENT_NODE_SLOTS, PATTERNS_WITH_CHILDREN;
50225
+ var scopeWrapLog, TRAIT_BINDING_RE, SuspenseConfigContext, SlotContainedContext, SLOT_SKELETON_MAP, SELF_OVERLAY_PATTERNS, CONTENT_NODE_SLOTS, PATTERNS_WITH_CHILDREN, traitRefPresenceCache;
50035
50226
  var init_UISlotRenderer = __esm({
50036
50227
  "components/core/organisms/UISlotRenderer.tsx"() {
50037
50228
  "use client";
@@ -50105,6 +50296,7 @@ var init_UISlotRenderer = __esm({
50105
50296
  "alert",
50106
50297
  "dialog"
50107
50298
  ]);
50299
+ traitRefPresenceCache = /* @__PURE__ */ new WeakMap();
50108
50300
  UISlotRenderer.displayName = "UISlotRenderer";
50109
50301
  }
50110
50302
  });
@@ -51297,8 +51489,8 @@ function createHttpTransport(serverUrl) {
51297
51489
  } catch {
51298
51490
  }
51299
51491
  },
51300
- sendEvent: async (orbitalName, event, payload, clientId) => {
51301
- const body = { event, payload, clientId };
51492
+ sendEvent: async (orbitalName, event, payload, clientId, tick, sourceTrait) => {
51493
+ const body = { event, payload, clientId, tick, sourceTrait };
51302
51494
  const res = await fetch(`${serverUrl}/${orbitalName}/events`, {
51303
51495
  method: "POST",
51304
51496
  headers: { "Content-Type": "application/json" },
@@ -51343,12 +51535,15 @@ function ServerBridgeProvider({
51343
51535
  async () => transport.unregister(),
51344
51536
  [transport]
51345
51537
  );
51346
- const sendEvent = React87.useCallback(async (orbitalName, event, payload) => {
51538
+ const sendEvent = React87.useCallback(async (orbitalName, event, payload, tick, sourceTrait) => {
51347
51539
  const emptyMeta = { success: false, clientEffects: 0, dataEntities: {}, emittedEvents: [] };
51348
51540
  if (!connected) return { effects: [], meta: emptyMeta };
51349
51541
  try {
51350
- const result = await transport.sendEvent(orbitalName, event, payload, getTabClientId());
51542
+ const result = await transport.sendEvent(orbitalName, event, payload, getTabClientId(), tick, sourceTrait);
51351
51543
  const effects = [];
51544
+ if (tick !== void 0) {
51545
+ return { effects, meta: { ...emptyMeta, success: !!result.success, error: result.error } };
51546
+ }
51352
51547
  const responseData = result.data || {};
51353
51548
  const dataEntities = {};
51354
51549
  for (const [entityName, records] of Object.entries(responseData)) {
@@ -3,7 +3,7 @@ import { EntityRow, SExpr } from '@almadar/core';
3
3
  export { ANONYMOUS_USER } from '@almadar/core';
4
4
  import { U as UIThemeDefinition, j as UserData } from '../UserContext-g_LcDiGN.cjs';
5
5
  export { a as CurrentPagePathContext, b as CurrentPagePathProvider, c as CurrentPagePathProviderProps, d as DesignThemeProvider, O as OrbitalThemeProvider, e as OrbitalThemeProviderProps, h as UserContext, i as UserContextValue, k as UserProvider, l as UserProviderProps, u as useCurrentPagePath, m as useDesignTheme, n as useHasPermission, o as useHasRole, q as useUser, r as useUserForEvaluation } from '../UserContext-g_LcDiGN.cjs';
6
- export { E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-BfZGeDfX.cjs';
6
+ export { E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-Bn3ePJQC.cjs';
7
7
  import { j as UseOfflineExecutorResult, U as UseOfflineExecutorOptions } from '../offline-executor-QUdKOj7f.cjs';
8
8
  export { c as NavigationContextValue, d as NavigationProvider, e as NavigationProviderProps, f as NavigationState, k as comparePathSpecificity, m as extractRouteParams, n as findPageByName, o as findPageByPath, p as getAllPages, q as getDefaultPage, r as matchPath, s as matchPathAmong, t as pathMatches, u as useActivePage, v as useInitPayload, w as useNavigateTo, x as useNavigation, y as useNavigationId, z as useNavigationState } from '../offline-executor-QUdKOj7f.cjs';
9
9
  import { E as EventBusContextType } from '../event-bus-types-Bl78kokd.cjs';
@@ -3,7 +3,7 @@ import { EntityRow, SExpr } from '@almadar/core';
3
3
  export { ANONYMOUS_USER } from '@almadar/core';
4
4
  import { U as UIThemeDefinition, j as UserData } from '../UserContext-g_LcDiGN.js';
5
5
  export { a as CurrentPagePathContext, b as CurrentPagePathProvider, c as CurrentPagePathProviderProps, d as DesignThemeProvider, O as OrbitalThemeProvider, e as OrbitalThemeProviderProps, h as UserContext, i as UserContextValue, k as UserProvider, l as UserProviderProps, u as useCurrentPagePath, m as useDesignTheme, n as useHasPermission, o as useHasRole, q as useUser, r as useUserForEvaluation } from '../UserContext-g_LcDiGN.js';
6
- export { E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-BfZGeDfX.js';
6
+ export { E as EntityBindingContext, a as EntityBindingSource, b as EntitySchemaContextValue, c as EntitySchemaProvider, d as EntitySchemaProviderProps, S as SendEventResult, e as ServerBridgeContextValue, f as ServerBridgeProvider, g as ServerBridgeProviderProps, h as ServerBridgeTransport, i as ServerClientEffect, j as ServerResponseMeta, T as TraitContext, k as TraitContextValue, l as TraitInstance, m as TraitProvider, n as TraitProviderProps, u as useEntityBindingSnapshot, o as useEntitySchema, p as useEntitySchemaOptional, q as useServerBridge, r as useTrait, s as useTraitContext } from '../EntityBindingContext-Bn3ePJQC.js';
7
7
  import { j as UseOfflineExecutorResult, U as UseOfflineExecutorOptions } from '../offline-executor-QUdKOj7f.js';
8
8
  export { c as NavigationContextValue, d as NavigationProvider, e as NavigationProviderProps, f as NavigationState, k as comparePathSpecificity, m as extractRouteParams, n as findPageByName, o as findPageByPath, p as getAllPages, q as getDefaultPage, r as matchPath, s as matchPathAmong, t as pathMatches, u as useActivePage, v as useInitPayload, w as useNavigateTo, x as useNavigation, y as useNavigationId, z as useNavigationState } from '../offline-executor-QUdKOj7f.js';
9
9
  import { E as EventBusContextType } from '../event-bus-types-Bl78kokd.js';