@ai-matrx/sharing 0.1.8 → 0.1.10

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.
@@ -184,6 +184,8 @@ interface AccessUiEnv {
184
184
  }
185
185
  /** The documented default for `manualRequestActionKey`. */
186
186
  declare const REQUEST_ACCESS_MANUAL_ACTION = "request_access.manual";
187
+ /** Test seam: forget what was announced. */
188
+ declare function resetAccessUiStandInNotices(): void;
187
189
  /** The host's `Link`, resolved at render. Components import this as `Link`. */
188
190
  declare const AccessLink: react.ForwardRefExoticComponent<AccessUiLinkProps & RefAttributes<HTMLAnchorElement>>;
189
191
  /**
@@ -679,4 +681,4 @@ declare function offerOwnerChoices(error: unknown, request: CantRemoveRequest):
679
681
  */
680
682
  declare function ensureRemovable(request: CantRemoveRequest): Promise<boolean>;
681
683
 
682
- export { ACCESS_REQUESTS_HREF, AccessDenied, type AccessDeniedProps, type AccessDeniedSuggestion, AccessDeniedView, AccessGate, type AccessGateProps, AccessLink, AccessRequestsSurface, type AccessResourceActionRequestAction, type AccessSettingRequestAction, type AccessUi, type AccessUiCurrentUser, type AccessUiEntityInfo, type AccessUiEntityRefProps, type AccessUiEnv, type AccessUiErrorMenuProps, type AccessUiFeedbackInput, type AccessUiLinkProps, AccessUiProvider, type AccessUiRouter, type AccessUiTextareaProps, type AccessUiToast, type AccessUiUserIdentityProps, BlindAccessAsk, CANT_REMOVE_DIALOG, type CantRemoveOutcome, type CantRemoveRequest, ForbiddenSurfaceView, type ForbiddenSurfaceViewProps, GovernedActionDialog, HiddenByMeButton, HiddenFilter, REQUEST_ACCESS_MANUAL_ACTION, RemovalNotYoursError, RequestAccess, RequestAccessPanel, type RequestAccessResult, ResourceActionRequestButtons, ServerReadRecheck, type ServerReadRecheckToken, SettingAccessGate, SettingRequestActionButtons, SlugAccessGate, type SlugAccessGateProps, UnresolvedEntityRef, type UnresolvedEntityRefProps, type UseAccessGateResult, type UseAccessStatesResult, configureAccessUi, ensureRemovable, getAccessUi, isAccessUiConfigured, isRemovalNotYours, offerOwnerChoices, refreshHiddenByMe, requestCantRemove, useAccessGate, useAccessStates, useAccessUi, useHiddenByMe, useHiddenItems, useHideForMe, useRemovalRights, useRequestAccess };
684
+ export { ACCESS_REQUESTS_HREF, AccessDenied, type AccessDeniedProps, type AccessDeniedSuggestion, AccessDeniedView, AccessGate, type AccessGateProps, AccessLink, AccessRequestsSurface, type AccessResourceActionRequestAction, type AccessSettingRequestAction, type AccessUi, type AccessUiCurrentUser, type AccessUiEntityInfo, type AccessUiEntityRefProps, type AccessUiEnv, type AccessUiErrorMenuProps, type AccessUiFeedbackInput, type AccessUiLinkProps, AccessUiProvider, type AccessUiRouter, type AccessUiTextareaProps, type AccessUiToast, type AccessUiUserIdentityProps, BlindAccessAsk, CANT_REMOVE_DIALOG, type CantRemoveOutcome, type CantRemoveRequest, ForbiddenSurfaceView, type ForbiddenSurfaceViewProps, GovernedActionDialog, HiddenByMeButton, HiddenFilter, REQUEST_ACCESS_MANUAL_ACTION, RemovalNotYoursError, RequestAccess, RequestAccessPanel, type RequestAccessResult, ResourceActionRequestButtons, ServerReadRecheck, type ServerReadRecheckToken, SettingAccessGate, SettingRequestActionButtons, SlugAccessGate, type SlugAccessGateProps, UnresolvedEntityRef, type UnresolvedEntityRefProps, type UseAccessGateResult, type UseAccessStatesResult, configureAccessUi, ensureRemovable, getAccessUi, isAccessUiConfigured, isRemovalNotYours, offerOwnerChoices, refreshHiddenByMe, requestCantRemove, resetAccessUiStandInNotices, useAccessGate, useAccessStates, useAccessUi, useHiddenByMe, useHiddenItems, useHideForMe, useRemovalRights, useRequestAccess };
@@ -184,6 +184,8 @@ interface AccessUiEnv {
184
184
  }
185
185
  /** The documented default for `manualRequestActionKey`. */
186
186
  declare const REQUEST_ACCESS_MANUAL_ACTION = "request_access.manual";
187
+ /** Test seam: forget what was announced. */
188
+ declare function resetAccessUiStandInNotices(): void;
187
189
  /** The host's `Link`, resolved at render. Components import this as `Link`. */
188
190
  declare const AccessLink: react.ForwardRefExoticComponent<AccessUiLinkProps & RefAttributes<HTMLAnchorElement>>;
189
191
  /**
@@ -679,4 +681,4 @@ declare function offerOwnerChoices(error: unknown, request: CantRemoveRequest):
679
681
  */
680
682
  declare function ensureRemovable(request: CantRemoveRequest): Promise<boolean>;
681
683
 
682
- export { ACCESS_REQUESTS_HREF, AccessDenied, type AccessDeniedProps, type AccessDeniedSuggestion, AccessDeniedView, AccessGate, type AccessGateProps, AccessLink, AccessRequestsSurface, type AccessResourceActionRequestAction, type AccessSettingRequestAction, type AccessUi, type AccessUiCurrentUser, type AccessUiEntityInfo, type AccessUiEntityRefProps, type AccessUiEnv, type AccessUiErrorMenuProps, type AccessUiFeedbackInput, type AccessUiLinkProps, AccessUiProvider, type AccessUiRouter, type AccessUiTextareaProps, type AccessUiToast, type AccessUiUserIdentityProps, BlindAccessAsk, CANT_REMOVE_DIALOG, type CantRemoveOutcome, type CantRemoveRequest, ForbiddenSurfaceView, type ForbiddenSurfaceViewProps, GovernedActionDialog, HiddenByMeButton, HiddenFilter, REQUEST_ACCESS_MANUAL_ACTION, RemovalNotYoursError, RequestAccess, RequestAccessPanel, type RequestAccessResult, ResourceActionRequestButtons, ServerReadRecheck, type ServerReadRecheckToken, SettingAccessGate, SettingRequestActionButtons, SlugAccessGate, type SlugAccessGateProps, UnresolvedEntityRef, type UnresolvedEntityRefProps, type UseAccessGateResult, type UseAccessStatesResult, configureAccessUi, ensureRemovable, getAccessUi, isAccessUiConfigured, isRemovalNotYours, offerOwnerChoices, refreshHiddenByMe, requestCantRemove, useAccessGate, useAccessStates, useAccessUi, useHiddenByMe, useHiddenItems, useHideForMe, useRemovalRights, useRequestAccess };
684
+ export { ACCESS_REQUESTS_HREF, AccessDenied, type AccessDeniedProps, type AccessDeniedSuggestion, AccessDeniedView, AccessGate, type AccessGateProps, AccessLink, AccessRequestsSurface, type AccessResourceActionRequestAction, type AccessSettingRequestAction, type AccessUi, type AccessUiCurrentUser, type AccessUiEntityInfo, type AccessUiEntityRefProps, type AccessUiEnv, type AccessUiErrorMenuProps, type AccessUiFeedbackInput, type AccessUiLinkProps, AccessUiProvider, type AccessUiRouter, type AccessUiTextareaProps, type AccessUiToast, type AccessUiUserIdentityProps, BlindAccessAsk, CANT_REMOVE_DIALOG, type CantRemoveOutcome, type CantRemoveRequest, ForbiddenSurfaceView, type ForbiddenSurfaceViewProps, GovernedActionDialog, HiddenByMeButton, HiddenFilter, REQUEST_ACCESS_MANUAL_ACTION, RemovalNotYoursError, RequestAccess, RequestAccessPanel, type RequestAccessResult, ResourceActionRequestButtons, ServerReadRecheck, type ServerReadRecheckToken, SettingAccessGate, SettingRequestActionButtons, SlugAccessGate, type SlugAccessGateProps, UnresolvedEntityRef, type UnresolvedEntityRefProps, type UseAccessGateResult, type UseAccessStatesResult, configureAccessUi, ensureRemovable, getAccessUi, isAccessUiConfigured, isRemovalNotYours, offerOwnerChoices, refreshHiddenByMe, requestCantRemove, resetAccessUiStandInNotices, useAccessGate, useAccessStates, useAccessUi, useHiddenByMe, useHiddenItems, useHideForMe, useRemovalRights, useRequestAccess };
@@ -5,6 +5,7 @@ import {
5
5
  createContext,
6
6
  forwardRef,
7
7
  useContext,
8
+ useEffect,
8
9
  useMemo
9
10
  } from "react";
10
11
  import { Avatar, AvatarFallback, AvatarImage, Textarea } from "@ai-matrx/design-system";
@@ -16,9 +17,33 @@ var DEFAULT_NAV_ITEM_CLASSES = {
16
17
  selected: "bg-[var(--shell-nav-selected-bg)] text-[var(--shell-nav-selected-text)] shadow-[var(--shell-nav-selected-shadow)] font-semibold",
17
18
  unselected: "text-[var(--shell-nav-unselected-text)] hover:text-[var(--shell-nav-text-hover)] hover:bg-[var(--matrx-glass-bg-hover)]"
18
19
  };
20
+ var announcedPorts = /* @__PURE__ */ new Set();
21
+ function announceDefault(port, consequence) {
22
+ if (announcedPorts.has(port)) return;
23
+ announcedPorts.add(port);
24
+ if (typeof console !== "undefined") {
25
+ console.warn(
26
+ `[@ai-matrx/sharing/access/react] The access screens are using their built-in stand-in for "${port}": ${consequence}. Pass it with configureAccessUi({ ${port} }) once at app boot.`
27
+ );
28
+ }
29
+ if (typeof document !== "undefined") {
30
+ const root = document.documentElement;
31
+ const ports = new Set((root.getAttribute("data-access-ui-ports") ?? "").split(",").filter(Boolean));
32
+ ports.add(port);
33
+ root.setAttribute("data-access-ui-ports", [...ports].join(","));
34
+ }
35
+ }
36
+ function resetAccessUiStandInNotices() {
37
+ announcedPorts.clear();
38
+ if (typeof document !== "undefined") document.documentElement.removeAttribute("data-access-ui-ports");
39
+ }
40
+ function standInAttrs(port) {
41
+ return { "data-access-ui-host": "unconfigured", "data-access-ui-port": port };
42
+ }
19
43
  var DefaultLink = forwardRef(
20
44
  function DefaultLink2(props, ref) {
21
- return /* @__PURE__ */ jsx("a", { ref, ...props });
45
+ useEffect(() => announceDefault("Link", "links are plain anchors (a full page load, no client navigation)"), []);
46
+ return /* @__PURE__ */ jsx("a", { ref, ...standInAttrs("Link"), ...props });
22
47
  }
23
48
  );
24
49
  var AccessLink = forwardRef(
@@ -27,28 +52,35 @@ var AccessLink = forwardRef(
27
52
  return /* @__PURE__ */ jsx(Link, { ref, ...props });
28
53
  }
29
54
  );
55
+ var ROUTER_CONSEQUENCE = "navigation uses the browser (full page loads; refresh reloads the tab)";
30
56
  var DEFAULT_ROUTER = {
31
57
  push: (href) => {
58
+ announceDefault("router", ROUTER_CONSEQUENCE);
32
59
  if (typeof window !== "undefined") window.location.assign(href);
33
60
  },
34
61
  back: () => {
62
+ announceDefault("router", ROUTER_CONSEQUENCE);
35
63
  if (typeof window !== "undefined") window.history.back();
36
64
  },
37
65
  refresh: () => {
66
+ announceDefault("router", ROUTER_CONSEQUENCE);
38
67
  if (typeof window !== "undefined") window.location.reload();
39
68
  }
40
69
  };
41
70
  function defaultSearchParam(name) {
71
+ announceDefault("searchParam", "query parameters are read from window.location");
42
72
  if (typeof window === "undefined") return null;
43
73
  return new URLSearchParams(window.location.search).get(name);
44
74
  }
45
75
  function DefaultTextarea(props) {
46
- return /* @__PURE__ */ jsx(Textarea, { ...props });
76
+ useEffect(() => announceDefault("Textarea", "the message box is the plain design-system textarea (no voice, no agent actions)"), []);
77
+ return /* @__PURE__ */ jsx(Textarea, { ...standInAttrs("Textarea"), ...props });
47
78
  }
48
79
  function DefaultUserIdentity({ user, size = "md", avatarOnly }) {
80
+ useEffect(() => announceDefault("renderUserIdentity", "people are drawn as an avatar and a name (no profile door)"), []);
49
81
  const name = user.displayName ?? "Someone";
50
82
  const box = size === "sm" ? "h-7 w-7" : "h-9 w-9";
51
- return /* @__PURE__ */ jsxs("span", { className: "inline-flex min-w-0 items-center gap-2", children: [
83
+ return /* @__PURE__ */ jsxs("span", { ...standInAttrs("renderUserIdentity"), className: "inline-flex min-w-0 items-center gap-2", children: [
52
84
  /* @__PURE__ */ jsxs(Avatar, { className: box, children: [
53
85
  user.avatarUrl ? /* @__PURE__ */ jsx(AvatarImage, { src: user.avatarUrl, alt: name }) : null,
54
86
  /* @__PURE__ */ jsx(AvatarFallback, { className: "text-[11px]", children: getInitials(user.displayName) })
@@ -57,7 +89,16 @@ function DefaultUserIdentity({ user, size = "md", avatarOnly }) {
57
89
  ] });
58
90
  }
59
91
  function DefaultEntityRef({ name, className }) {
60
- return /* @__PURE__ */ jsx("span", { className, children: name });
92
+ useEffect(() => announceDefault("renderEntityRef", "records are drawn as a plain name (not a door to the record)"), []);
93
+ return /* @__PURE__ */ jsx("span", { ...standInAttrs("renderEntityRef"), className, children: name });
94
+ }
95
+ function DefaultErrorMenu() {
96
+ useEffect(() => announceDefault("renderErrorMenu", "errors show no copy / fix-request menu"), []);
97
+ return /* @__PURE__ */ jsx("span", { hidden: true, ...standInAttrs("renderErrorMenu") });
98
+ }
99
+ function defaultConfirm(options) {
100
+ announceDefault("confirm", "confirmations use the kit confirm (the design-system ConfirmDialogHost must be mounted)");
101
+ return kitConfirm(options);
61
102
  }
62
103
  var moduleEnv = {};
63
104
  var moduleVersion = 0;
@@ -94,21 +135,33 @@ function resolveAccessUi(base, override) {
94
135
  Link: env.Link ?? DefaultLink,
95
136
  router: env.router ?? DEFAULT_ROUTER,
96
137
  searchParam: env.searchParam ?? defaultSearchParam,
97
- confirm: env.confirm ?? kitConfirm,
138
+ confirm: env.confirm ?? defaultConfirm,
98
139
  Textarea: env.Textarea ?? DefaultTextarea,
99
140
  renderUserIdentity: env.renderUserIdentity ?? ((p) => /* @__PURE__ */ jsx(DefaultUserIdentity, { ...p })),
100
141
  renderEntityRef: env.renderEntityRef ?? ((p) => /* @__PURE__ */ jsx(DefaultEntityRef, { ...p })),
101
- renderErrorMenu: env.renderErrorMenu ?? (() => null),
142
+ renderErrorMenu: env.renderErrorMenu ?? (() => /* @__PURE__ */ jsx(DefaultErrorMenu, {})),
102
143
  navItemClasses: env.navItemClasses ?? DEFAULT_NAV_ITEM_CLASSES,
103
144
  manualRequestActionKey: env.manualRequestActionKey ?? REQUEST_ACCESS_MANUAL_ACTION,
104
- tryGetEntityInfo: (token) => env.entityRegistry?.tryGetEntityInfo(token) ?? null,
145
+ tryGetEntityInfo: (token) => {
146
+ if (!env.entityRegistry) announceDefault("entityRegistry", "owners and records render as plain names (no labels or links)");
147
+ return env.entityRegistry?.tryGetEntityInfo(token) ?? null;
148
+ },
105
149
  restoreFromTrash: async (token, id) => {
106
150
  if (!env.trash) throw notConfigured("trash");
107
151
  await env.trash.restore(token, id);
108
152
  },
109
- resolveRecordUnavailableCapture: (error, resolution) => env.recordUnavailableCapture?.resolve(error, resolution),
110
- getSettingRequestAction: (key) => env.settingRequestActions?.get(key),
111
- getResourceActionRequestAction: (key) => env.resourceActionRequests?.get(key),
153
+ resolveRecordUnavailableCapture: (error, resolution) => {
154
+ if (!env.recordUnavailableCapture) announceDefault("recordUnavailableCapture", "a captured unavailable read is not reconciled");
155
+ env.recordUnavailableCapture?.resolve(error, resolution);
156
+ },
157
+ getSettingRequestAction: (key) => {
158
+ if (!env.settingRequestActions) announceDefault("settingRequestActions", "setting-change requests show without their primary action button");
159
+ return env.settingRequestActions?.get(key);
160
+ },
161
+ getResourceActionRequestAction: (key) => {
162
+ if (!env.resourceActionRequests) announceDefault("resourceActionRequests", "resource-action requests show without their primary action button");
163
+ return env.resourceActionRequests?.get(key);
164
+ },
112
165
  createCmsAccessRequest: async (args) => {
113
166
  if (!env.cms) throw notConfigured("cms");
114
167
  return env.cms.createAccessRequest(args);
@@ -121,12 +174,18 @@ function resolveAccessUi(base, override) {
121
174
  if (!env.reportFeedback) throw notConfigured("reportFeedback");
122
175
  return env.reportFeedback(input);
123
176
  },
124
- presentOrganizationRefusal: (error, options) => env.presentOrganizationRefusal?.(error, options) ?? false,
177
+ presentOrganizationRefusal: (error, options) => {
178
+ if (!env.presentOrganizationRefusal) announceDefault("presentOrganizationRefusal", "a refusal for a missing organization is shown as a plain error");
179
+ return env.presentOrganizationRefusal?.(error, options) ?? false;
180
+ },
125
181
  openOverlay: (overlayId, instanceId, data) => {
126
182
  if (!env.overlays) throw notConfigured("overlays");
127
183
  env.overlays.open(overlayId, instanceId, data);
128
184
  },
129
- closeOverlay: (overlayId, instanceId) => env.overlays?.close(overlayId, instanceId)
185
+ closeOverlay: (overlayId, instanceId) => {
186
+ if (!env.overlays) announceDefault("overlays", "no overlay can be closed (none was ever opened)");
187
+ env.overlays?.close(overlayId, instanceId);
188
+ }
130
189
  };
131
190
  return ui;
132
191
  }
@@ -422,7 +481,7 @@ function BlindAccessAsk({
422
481
  }
423
482
 
424
483
  // src/access/react/useAccessGate.ts
425
- import { useCallback, useEffect, useState as useState3 } from "react";
484
+ import { useCallback, useEffect as useEffect2, useState as useState3 } from "react";
426
485
  import { fetchAccessDeniedContext } from "@ai-matrx/data/access";
427
486
  import { classifyDataError } from "@ai-matrx/data/access";
428
487
  function useAccessGate(token, id, options = {}) {
@@ -431,7 +490,7 @@ function useAccessGate(token, id, options = {}) {
431
490
  const enabled = options.enabled !== false && Boolean(token && id);
432
491
  const key = enabled ? `${token}:${id}:${nonce}` : null;
433
492
  const [resolved, setResolved] = useState3(null);
434
- useEffect(() => {
493
+ useEffect2(() => {
435
494
  if (!key || !token || !id) return;
436
495
  let active = true;
437
496
  const read = classifyDataError(options.readError) === "fault" ? "fault" : "access-question";
@@ -842,7 +901,7 @@ function ServerRefusalCode({
842
901
  }
843
902
 
844
903
  // src/access/react/SlugAccessGate.tsx
845
- import { useEffect as useEffect2, useState as useState5 } from "react";
904
+ import { useEffect as useEffect3, useState as useState5 } from "react";
846
905
  import { ArrowLeft as ArrowLeft2, Link2Off } from "lucide-react";
847
906
  import { isUuidShape } from "@ai-matrx/kit/uuid";
848
907
  import { Button as Button4 } from "@ai-matrx/design-system/controls";
@@ -862,7 +921,7 @@ function SlugAccessGate({
862
921
  const tokenKey = tokens.join("|");
863
922
  const [resolved, setResolved] = useState5(null);
864
923
  const key = `${tokenKey}::${slug}`;
865
- useEffect2(() => {
924
+ useEffect3(() => {
866
925
  let active = true;
867
926
  const list = tokenKey ? tokenKey.split("|") : [];
868
927
  void (async () => {
@@ -1477,7 +1536,7 @@ function UnresolvedEntityRef({
1477
1536
  }
1478
1537
 
1479
1538
  // src/access/react/ServerReadRecheck.tsx
1480
- import { useEffect as useEffect3, useState as useState10 } from "react";
1539
+ import { useEffect as useEffect4, useState as useState10 } from "react";
1481
1540
  import { getClaimsUser } from "@ai-matrx/auth/claims";
1482
1541
  import { getAccessEnv as getAccessEnv2 } from "@ai-matrx/data/access";
1483
1542
  import { decideServerReadRecheck } from "@ai-matrx/data/access";
@@ -1498,7 +1557,7 @@ function ServerReadRecheck({
1498
1557
  const router = useAccessUi().router;
1499
1558
  const key = `${token}:${id}`;
1500
1559
  const [showGate, setShowGate] = useState10(false);
1501
- useEffect3(() => {
1560
+ useEffect4(() => {
1502
1561
  let active = true;
1503
1562
  void (async () => {
1504
1563
  let signedIn = false;
@@ -1561,7 +1620,7 @@ import {
1561
1620
  } from "@ai-matrx/data/access";
1562
1621
 
1563
1622
  // src/access/react/useHiddenByMe.ts
1564
- import { useEffect as useEffect4, useState as useState11, useSyncExternalStore } from "react";
1623
+ import { useEffect as useEffect5, useState as useState11, useSyncExternalStore } from "react";
1565
1624
  import {
1566
1625
  fetchRemovalRights,
1567
1626
  hideForMe,
@@ -1635,7 +1694,7 @@ function useHiddenSlot(token, enabled) {
1635
1694
  );
1636
1695
  const active = enabled && Boolean(token);
1637
1696
  const slot = active ? slotFor(token) : void 0;
1638
- useEffect4(() => {
1697
+ useEffect5(() => {
1639
1698
  if (!active) return;
1640
1699
  const current = slotFor(token);
1641
1700
  if ((current.items === void 0 || current.failed) && !current.loading) void refreshHiddenByMe(token);
@@ -1657,7 +1716,7 @@ function useRemovalRights(token, id) {
1657
1716
  const [nonce, setNonce] = useState11(0);
1658
1717
  const key = id ? `${token}:${id}:${nonce}` : null;
1659
1718
  const [settled, setSettled] = useState11(null);
1660
- useEffect4(() => {
1719
+ useEffect5(() => {
1661
1720
  if (!key || !id) return;
1662
1721
  let active = true;
1663
1722
  fetchRemovalRights(token, id).then(
@@ -2335,7 +2394,7 @@ function SettingRequestActionButtons({
2335
2394
  }
2336
2395
 
2337
2396
  // src/access/react/AccessRequestsSurface.tsx
2338
- import { useCallback as useCallback2, useEffect as useEffect5, useState as useState16 } from "react";
2397
+ import { useCallback as useCallback2, useEffect as useEffect6, useState as useState16 } from "react";
2339
2398
  import {
2340
2399
  CircleCheck,
2341
2400
  CircleSlash as CircleSlash3,
@@ -2464,7 +2523,7 @@ function AccessRequestsSurface() {
2464
2523
  setError(result.error);
2465
2524
  setRefreshing(false);
2466
2525
  }, []);
2467
- useEffect5(() => {
2526
+ useEffect6(() => {
2468
2527
  let alive = true;
2469
2528
  void (async () => {
2470
2529
  const result = await fetchBoxes();
@@ -2725,7 +2784,7 @@ function AccessRequestsSurface() {
2725
2784
  }
2726
2785
 
2727
2786
  // src/access/react/useAccessStates.ts
2728
- import { useCallback as useCallback3, useEffect as useEffect6, useMemo as useMemo2, useState as useState17 } from "react";
2787
+ import { useCallback as useCallback3, useEffect as useEffect7, useMemo as useMemo2, useState as useState17 } from "react";
2729
2788
  import { fetchAccessDeniedContext as fetchAccessDeniedContext3 } from "@ai-matrx/data/access";
2730
2789
  var CACHE = /* @__PURE__ */ new Map();
2731
2790
  var INFLIGHT = /* @__PURE__ */ new Map();
@@ -2750,7 +2809,7 @@ function useAccessStates(token, ids) {
2750
2809
  const [nonce, setNonce] = useState17(0);
2751
2810
  const [resolved, setResolved] = useState17(() => /* @__PURE__ */ new Map());
2752
2811
  const idKey = useMemo2(() => Array.from(new Set(ids)).sort().join(","), [ids]);
2753
- useEffect6(() => {
2812
+ useEffect7(() => {
2754
2813
  const wanted2 = idKey ? idKey.split(",") : [];
2755
2814
  if (wanted2.length === 0) return;
2756
2815
  let active = true;
@@ -2864,6 +2923,7 @@ export {
2864
2923
  offerOwnerChoices,
2865
2924
  refreshHiddenByMe,
2866
2925
  requestCantRemove,
2926
+ resetAccessUiStandInNotices,
2867
2927
  useAccessGate,
2868
2928
  useAccessStates,
2869
2929
  useAccessUi,