@xnetjs/react 1.0.0 → 2.1.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.
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  useMutate,
3
3
  useQuery
4
- } from "./chunk-EJEGIEIC.js";
4
+ } from "./chunk-ZGP56IIJ.js";
5
5
  import {
6
6
  XNetContext,
7
7
  downloadBackup,
@@ -9,7 +9,7 @@ import {
9
9
  useNodeStore,
10
10
  useSecurityContext,
11
11
  useXNet
12
- } from "./chunk-RIN2MXZK.js";
12
+ } from "./chunk-H44ZSIH4.js";
13
13
 
14
14
  // src/hooks/useTaskProjectionSync.ts
15
15
  import { ExternalReferenceSchema, TaskSchema, isCompletedTaskStatus } from "@xnetjs/data";
@@ -80,7 +80,8 @@ function useTracingReporter() {
80
80
  }
81
81
 
82
82
  // src/hooks/usePlugins.ts
83
- import { createContext as createContext4, useContext as useContext4, useState as useState2, useEffect as useEffect2 } from "react";
83
+ import { warnOnEditorSchemaRisks } from "@xnetjs/plugins";
84
+ import { createContext as createContext4, useContext as useContext4, useState as useState2, useEffect as useEffect2, useMemo as useMemo2 } from "react";
84
85
  var PluginRegistryContext = createContext4(null);
85
86
  function usePluginRegistry() {
86
87
  const registry = useContext4(PluginRegistryContext);
@@ -180,6 +181,39 @@ function useEditorExtensionsSafe() {
180
181
  }, [registry]);
181
182
  return items;
182
183
  }
184
+ function mergeEditorContributions(contributions, bundledSpecNames = []) {
185
+ const risks = warnOnEditorSchemaRisks("plugin-host", contributions, bundledSpecNames);
186
+ const risky = new Set(risks.map((risk) => `${risk.kind}:${risk.name}`));
187
+ const sorted = [...contributions].sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));
188
+ const merged = {
189
+ blockSpecs: {},
190
+ inlineContentSpecs: {},
191
+ styleSpecs: {},
192
+ slashMenuItems: []
193
+ };
194
+ for (const contribution of sorted) {
195
+ for (const [name, spec] of Object.entries(contribution.blockSpecs ?? {})) {
196
+ if (!risky.has(`block:${name}`)) merged.blockSpecs[name] = spec;
197
+ }
198
+ for (const [name, spec] of Object.entries(contribution.inlineContentSpecs ?? {})) {
199
+ if (!risky.has(`inlineContent:${name}`)) merged.inlineContentSpecs[name] = spec;
200
+ }
201
+ for (const [name, spec] of Object.entries(contribution.styleSpecs ?? {})) {
202
+ if (!risky.has(`style:${name}`)) merged.styleSpecs[name] = spec;
203
+ }
204
+ if (contribution.slashMenuItems) {
205
+ merged.slashMenuItems.push(...contribution.slashMenuItems);
206
+ }
207
+ }
208
+ return merged;
209
+ }
210
+ function useMergedEditorContributions(bundledSpecNames = []) {
211
+ const contributions = useEditorExtensionsSafe();
212
+ return useMemo2(
213
+ () => mergeEditorContributions(contributions, bundledSpecNames),
214
+ [contributions, bundledSpecNames]
215
+ );
216
+ }
183
217
  function useView(type) {
184
218
  const views = useViews();
185
219
  return views.find((v) => v.type === type);
@@ -229,7 +263,7 @@ function createRuntimeStatus(runtime, overrides = {}) {
229
263
  // src/context.ts
230
264
  import { UndoManager } from "@xnetjs/history";
231
265
  import { PluginRegistry } from "@xnetjs/plugins";
232
- import React, { createContext as createContext5, useContext as useContext5, useEffect as useEffect6, useMemo as useMemo2, useState as useState5 } from "react";
266
+ import React, { createContext as createContext5, useContext as useContext5, useEffect as useEffect6, useMemo as useMemo3, useState as useState5 } from "react";
233
267
 
234
268
  // src/provider/debug.ts
235
269
  function log(...args) {
@@ -972,11 +1006,11 @@ function XNetProvider({ config, children }) {
972
1006
  const authorDID = config.authorDID ?? config.identity?.did;
973
1007
  const hubUrl = config.hubUrl ?? null;
974
1008
  const signalingServersKey = (config.signalingServers ?? []).join("\n");
975
- const signalingServers = useMemo2(
1009
+ const signalingServers = useMemo3(
976
1010
  () => signalingServersKey ? signalingServersKey.split("\n") : [],
977
1011
  [signalingServersKey]
978
1012
  );
979
- const signalingUrls = useMemo2(
1013
+ const signalingUrls = useMemo3(
980
1014
  () => resolveConfiguredSignalingUrls(hubUrl, signalingServers),
981
1015
  [hubUrl, signalingServers]
982
1016
  );
@@ -989,7 +1023,7 @@ function XNetProvider({ config, children }) {
989
1023
  const nodeSyncRoom = hubOptions?.nodeSyncRoom ?? authorDID ?? "default";
990
1024
  const encryptionKey = config.encryptionKey ?? null;
991
1025
  const runtimeWorkerUrlKey = config.runtime?.worker?.url ? String(config.runtime.worker.url) : "";
992
- const runtimeConfig = useMemo2(
1026
+ const runtimeConfig = useMemo3(
993
1027
  () => resolveRuntimeConfig(config.runtime, platform),
994
1028
  [
995
1029
  config.runtime?.mode,
@@ -1086,7 +1120,7 @@ function XNetProvider({ config, children }) {
1086
1120
  setUndoManager(null);
1087
1121
  };
1088
1122
  }, [nodeStore, nodeStoreReady, authorDID, config.telemetry]);
1089
- const value = useMemo2(
1123
+ const value = useMemo3(
1090
1124
  () => ({
1091
1125
  nodeStore,
1092
1126
  nodeStoreReady,
@@ -1121,7 +1155,7 @@ function XNetProvider({ config, children }) {
1121
1155
  undoManager
1122
1156
  ]
1123
1157
  );
1124
- const internalValue = useMemo2(
1158
+ const internalValue = useMemo3(
1125
1159
  () => ({
1126
1160
  authorDID: authorDID ?? null,
1127
1161
  signingKey: config.signingKey ?? null,
@@ -1198,6 +1232,8 @@ export {
1198
1232
  useImporters,
1199
1233
  useEditorExtensions,
1200
1234
  useEditorExtensionsSafe,
1235
+ mergeEditorContributions,
1236
+ useMergedEditorContributions,
1201
1237
  useView,
1202
1238
  useCommand,
1203
1239
  uploadBackup,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useNodeStore
3
- } from "./chunk-RIN2MXZK.js";
3
+ } from "./chunk-H44ZSIH4.js";
4
4
 
5
5
  // src/hooks/useDatabaseDoc.ts
6
6
  import {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useNodeStore
3
- } from "./chunk-RIN2MXZK.js";
3
+ } from "./chunk-H44ZSIH4.js";
4
4
 
5
5
  // src/hooks/useUndoScope.ts
6
6
  import { UndoManager } from "@xnetjs/history";
@@ -2,7 +2,7 @@ import {
2
2
  flattenNode,
3
3
  useQuery,
4
4
  useSyncManager
5
- } from "./chunk-EJEGIEIC.js";
5
+ } from "./chunk-ZGP56IIJ.js";
6
6
  import {
7
7
  useInstrumentation
8
8
  } from "./chunk-JCOFKBOB.js";
@@ -11,7 +11,7 @@ import {
11
11
  useNodeStore,
12
12
  useXNet,
13
13
  useXNetInternal
14
- } from "./chunk-RIN2MXZK.js";
14
+ } from "./chunk-H44ZSIH4.js";
15
15
 
16
16
  // src/hooks/useInfiniteQuery.ts
17
17
  import { createQueryDescriptor, serializeQueryDescriptor } from "@xnetjs/data-bridge";
@@ -7,7 +7,7 @@ import {
7
7
  useDataBridge,
8
8
  useTelemetryReporter,
9
9
  useTracingReporter
10
- } from "./chunk-RIN2MXZK.js";
10
+ } from "./chunk-H44ZSIH4.js";
11
11
 
12
12
  // src/utils/flattenNode.ts
13
13
  function flattenNode(node, options) {
package/dist/core.js CHANGED
@@ -5,16 +5,16 @@ import {
5
5
  useInfiniteQuery,
6
6
  useIsOffline,
7
7
  useNode
8
- } from "./chunk-Q3NDLI6Z.js";
8
+ } from "./chunk-VZMZQTR7.js";
9
9
  import {
10
10
  useMutate,
11
11
  useQuery
12
- } from "./chunk-EJEGIEIC.js";
12
+ } from "./chunk-ZGP56IIJ.js";
13
13
  import "./chunk-JCOFKBOB.js";
14
14
  import {
15
15
  XNetProvider,
16
16
  useXNet
17
- } from "./chunk-RIN2MXZK.js";
17
+ } from "./chunk-H44ZSIH4.js";
18
18
  export {
19
19
  ErrorBoundary,
20
20
  OfflineIndicator,
package/dist/database.js CHANGED
@@ -6,8 +6,8 @@ import {
6
6
  useDatabaseSchema,
7
7
  useRelatedRows,
8
8
  useReverseRelations
9
- } from "./chunk-WL7OCTSM.js";
10
- import "./chunk-RIN2MXZK.js";
9
+ } from "./chunk-HTFAHJQK.js";
10
+ import "./chunk-H44ZSIH4.js";
11
11
  export {
12
12
  useCell,
13
13
  useDatabase,
@@ -1572,6 +1572,44 @@ declare function useEditorExtensions(): EditorContribution[];
1572
1572
  * Safe version that doesn't throw if plugins aren't enabled.
1573
1573
  */
1574
1574
  declare function useEditorExtensionsSafe(): EditorContribution[];
1575
+ /**
1576
+ * Plugin-contributed BlockNote specs and slash menu items, merged across
1577
+ * all editor contributions in priority order.
1578
+ */
1579
+ interface MergedEditorContributions {
1580
+ /** BlockNote block specs, keyed by block type name */
1581
+ blockSpecs: Record<string, unknown>;
1582
+ /** BlockNote inline content specs, keyed by type name */
1583
+ inlineContentSpecs: Record<string, unknown>;
1584
+ /** BlockNote style specs, keyed by style name */
1585
+ styleSpecs: Record<string, unknown>;
1586
+ /** Behavior-only slash menu items (skew-safe) */
1587
+ slashMenuItems: SlashCommandContribution[];
1588
+ }
1589
+ /**
1590
+ * Merge editor contributions (priority order; lower = earlier, later wins
1591
+ * on spec-name collision) and run the schema-skew guard (0205/0312).
1592
+ *
1593
+ * `bundledSpecNames` is the host editor's statically bundled spec list
1594
+ * (`XNET_SCHEMA_SPEC_NAMES` from `@xnetjs/editor/react` — passed by the
1595
+ * caller because this package must not depend on the editor). Specs NOT in
1596
+ * that list change the persisted document schema for only some peers, so
1597
+ * they are warned about and excluded from the merge.
1598
+ */
1599
+ declare function mergeEditorContributions(contributions: readonly EditorContribution[], bundledSpecNames?: readonly string[]): MergedEditorContributions;
1600
+ /**
1601
+ * Collect and merge all plugin editor contributions (BlockNote specs +
1602
+ * slash menu items) from the registry, with reactive updates. Safe when
1603
+ * the plugin system isn't enabled (returns empty results).
1604
+ *
1605
+ * @example
1606
+ * ```tsx
1607
+ * import { XNET_SCHEMA_SPEC_NAMES } from '@xnetjs/editor/react'
1608
+ *
1609
+ * const { slashMenuItems } = useMergedEditorContributions(XNET_SCHEMA_SPEC_NAMES)
1610
+ * ```
1611
+ */
1612
+ declare function useMergedEditorContributions(bundledSpecNames?: readonly string[]): MergedEditorContributions;
1575
1613
  /**
1576
1614
  * Get a specific view by type
1577
1615
  */
@@ -1581,4 +1619,4 @@ declare function useView(type: string): ViewContribution | undefined;
1581
1619
  */
1582
1620
  declare function useCommand(id: string): CommandContribution | undefined;
1583
1621
 
1584
- export { summarizeReactionNode as $, type AddCommentOptions as A, selectPublicInteractionMode as B, type CommentThread as C, summarizeModerationLabel as D, summarizePublicInteractionPolicy as E, type CommentVisibility as F, type FirstContactMode as G, type ModeratedCommentThread as H, type InteractionPermission as I, type ModerationFilterOptions as J, type ModerationLabelSummary as K, type PublicInteractionMode as L, type ModeratedCommentNode as M, type PublicInteractionPolicySnapshot as N, type PublicInteractionSurface as O, type PageTaskInput as P, type PublicModerationMode as Q, type ReplyContext as R, type UseModeratedThreadOptions as S, type TaskProjectionInput as T, type UseTaskProjectionSyncResult as U, type UseVisibleCommentsOptions as V, type UseVisibleCommentsResult as W, usePolicyFilteredReactionCounters as X, createReactionCounterSnapshot as Y, dedupeReactions as Z, isReactionVisible as _, type TaskTreeItem as a, type RemoteSchemaDefinition as a$, type AddReactionOptions as a0, type ReactionCounterSnapshot as a1, type ReactionNode as a2, type ReactionType as a3, type UsePolicyFilteredReactionCountersOptions as a4, type UsePolicyFilteredReactionCountersResult as a5, useMessageRequests as a6, createConversationKey as a7, createMessageRequestProperties as a8, evaluateFirstContactDecision as a9, type UseBlameResult as aA, useVerification as aB, type UseVerificationResult as aC, useHubStatus as aD, useCan as aE, type UseCanResult as aF, useCanEdit as aG, type UseCanEditResult as aH, describeGrantConsent as aI, useGrants as aJ, type GrantConsentSummary as aK, type GrantInput as aL, type UseGrantsResult as aM, summarizeAuthTrace as aN, useAuthTrace as aO, type AuthTraceSummary as aP, type UseAuthTraceResult as aQ, useBackup as aR, type UseBackupReturn as aS, useFileUpload as aT, type FileRef as aU, type UseFileUploadReturn as aV, useHubSearch as aW, type HubSearchOptions as aX, type HubSearchResult as aY, type HubSearchState as aZ, useRemoteSchema as a_, findLatestMessageRequest as aa, hasAcceptedContact as ab, summarizeMessageRequest as ac, type CreateMessageRequestOptions as ad, type FirstContactAdmission as ae, type FirstContactDecision as af, type FirstContactDecisionInput as ag, type FirstContactVisibility as ah, type MessageRequestNode as ai, type MessageRequestProperties as aj, type MessageRequestStatus as ak, type UseMessageRequestsOptions as al, type UseMessageRequestsResult as am, useCommentCount as an, useCommentCounts as ao, useHistory as ap, type UseHistoryResult as aq, useUndo as ar, type UseUndoResult as as, type UseUndoOptions as at, useAudit as au, type UseAuditResult as av, type UseAuditOptions as aw, useDiff as ax, type UseDiffResult as ay, useBlame as az, type UseFindOptions as b, useViews as b$, type RemoteSchemaState as b0, usePeerDiscovery as b1, type DiscoveredPeer as b2, HubStatusIndicator as b3, Skeleton as b4, injectSkeletonStyles as b5, type SkeletonProps as b6, DemoBanner as b7, type DemoBannerProps as b8, DemoQuotaIndicator as b9, type OnboardingContextValue as bA, type OnboardingFlowProps as bB, type OnboardingState as bC, type OnboardingEvent as bD, type OnboardingMachineContext as bE, type OnboardingReducerState as bF, type QuickStartTemplate as bG, type SyncProgressOverlayProps as bH, PageTasksPanel as bI, type PageTasksPanelProps as bJ, TaskCollectionEmbed as bK, type TaskCollectionEmbedProps as bL, SecurityProvider as bM, useSecurityContext as bN, useSecurityContextOptional as bO, type SecurityContextState as bP, type SecurityContextActions as bQ, type SecurityContextValue as bR, type SecurityProviderProps as bS, useSecurity as bT, type UseSecurityOptions as bU, type UseSecurityResult as bV, PluginRegistryContext as bW, usePluginRegistry as bX, usePluginRegistryOptional as bY, usePlugins as bZ, useContributions as b_, type DemoQuotaIndicatorProps as ba, DemoDataExpiredScreen as bb, useDemoMode as bc, type DemoModeState as bd, type DemoLimits as be, type DemoUsage as bf, useSyncManager as bg, OnboardingProvider as bh, useOnboarding as bi, OnboardingFlow as bj, WelcomeScreen as bk, AuthenticatingScreen as bl, AuthErrorScreen as bm, UnsupportedBrowserScreen as bn, ImportIdentityScreen as bo, HubConnectScreen as bp, ReadyScreen as bq, SmartWelcome as br, SyncProgressOverlay as bs, onboardingReducer as bt, createInitialState as bu, QUICK_START_TEMPLATES as bv, getPlatformAuthName as bw, truncateDid as bx, copyToClipboard as by, type OnboardingProviderProps as bz, type UseFindResult as c, useCommands as c0, useSlashCommands as c1, useSidebarItems as c2, useImporters as c3, useEditorExtensions as c4, useEditorExtensionsSafe as c5, useView as c6, useCommand as c7, usePageTaskSync as d, type PageTaskReferenceInput as e, type UsePageTaskSyncOptions as f, type UsePageTaskSyncResult as g, useTaskProjectionSync as h, type TaskProjectionReferenceInput as i, type TaskProjectionHost as j, type UseTaskProjectionSyncOptions as k, useTasks as l, type UseTasksOptions as m, type UseTasksResult as n, useComments as o, type UseCommentsOptions as p, type UseCommentsResult as q, type CommentNode as r, useVisibleComments as s, useModeratedThread as t, useFind as u, createModerationLabelIndex as v, evaluateCommentModeration as w, evaluateInteractionPermission as x, moderateThread as y, selectActiveInteractionPolicy as z };
1622
+ export { summarizeReactionNode as $, type AddCommentOptions as A, selectPublicInteractionMode as B, type CommentThread as C, summarizeModerationLabel as D, summarizePublicInteractionPolicy as E, type CommentVisibility as F, type FirstContactMode as G, type ModeratedCommentThread as H, type InteractionPermission as I, type ModerationFilterOptions as J, type ModerationLabelSummary as K, type PublicInteractionMode as L, type ModeratedCommentNode as M, type PublicInteractionPolicySnapshot as N, type PublicInteractionSurface as O, type PageTaskInput as P, type PublicModerationMode as Q, type ReplyContext as R, type UseModeratedThreadOptions as S, type TaskProjectionInput as T, type UseTaskProjectionSyncResult as U, type UseVisibleCommentsOptions as V, type UseVisibleCommentsResult as W, usePolicyFilteredReactionCounters as X, createReactionCounterSnapshot as Y, dedupeReactions as Z, isReactionVisible as _, type TaskTreeItem as a, type RemoteSchemaDefinition as a$, type AddReactionOptions as a0, type ReactionCounterSnapshot as a1, type ReactionNode as a2, type ReactionType as a3, type UsePolicyFilteredReactionCountersOptions as a4, type UsePolicyFilteredReactionCountersResult as a5, useMessageRequests as a6, createConversationKey as a7, createMessageRequestProperties as a8, evaluateFirstContactDecision as a9, type UseBlameResult as aA, useVerification as aB, type UseVerificationResult as aC, useHubStatus as aD, useCan as aE, type UseCanResult as aF, useCanEdit as aG, type UseCanEditResult as aH, describeGrantConsent as aI, useGrants as aJ, type GrantConsentSummary as aK, type GrantInput as aL, type UseGrantsResult as aM, summarizeAuthTrace as aN, useAuthTrace as aO, type AuthTraceSummary as aP, type UseAuthTraceResult as aQ, useBackup as aR, type UseBackupReturn as aS, useFileUpload as aT, type FileRef as aU, type UseFileUploadReturn as aV, useHubSearch as aW, type HubSearchOptions as aX, type HubSearchResult as aY, type HubSearchState as aZ, useRemoteSchema as a_, findLatestMessageRequest as aa, hasAcceptedContact as ab, summarizeMessageRequest as ac, type CreateMessageRequestOptions as ad, type FirstContactAdmission as ae, type FirstContactDecision as af, type FirstContactDecisionInput as ag, type FirstContactVisibility as ah, type MessageRequestNode as ai, type MessageRequestProperties as aj, type MessageRequestStatus as ak, type UseMessageRequestsOptions as al, type UseMessageRequestsResult as am, useCommentCount as an, useCommentCounts as ao, useHistory as ap, type UseHistoryResult as aq, useUndo as ar, type UseUndoResult as as, type UseUndoOptions as at, useAudit as au, type UseAuditResult as av, type UseAuditOptions as aw, useDiff as ax, type UseDiffResult as ay, useBlame as az, type UseFindOptions as b, useViews as b$, type RemoteSchemaState as b0, usePeerDiscovery as b1, type DiscoveredPeer as b2, HubStatusIndicator as b3, Skeleton as b4, injectSkeletonStyles as b5, type SkeletonProps as b6, DemoBanner as b7, type DemoBannerProps as b8, DemoQuotaIndicator as b9, type OnboardingContextValue as bA, type OnboardingFlowProps as bB, type OnboardingState as bC, type OnboardingEvent as bD, type OnboardingMachineContext as bE, type OnboardingReducerState as bF, type QuickStartTemplate as bG, type SyncProgressOverlayProps as bH, PageTasksPanel as bI, type PageTasksPanelProps as bJ, TaskCollectionEmbed as bK, type TaskCollectionEmbedProps as bL, SecurityProvider as bM, useSecurityContext as bN, useSecurityContextOptional as bO, type SecurityContextState as bP, type SecurityContextActions as bQ, type SecurityContextValue as bR, type SecurityProviderProps as bS, useSecurity as bT, type UseSecurityOptions as bU, type UseSecurityResult as bV, PluginRegistryContext as bW, usePluginRegistry as bX, usePluginRegistryOptional as bY, usePlugins as bZ, useContributions as b_, type DemoQuotaIndicatorProps as ba, DemoDataExpiredScreen as bb, useDemoMode as bc, type DemoModeState as bd, type DemoLimits as be, type DemoUsage as bf, useSyncManager as bg, OnboardingProvider as bh, useOnboarding as bi, OnboardingFlow as bj, WelcomeScreen as bk, AuthenticatingScreen as bl, AuthErrorScreen as bm, UnsupportedBrowserScreen as bn, ImportIdentityScreen as bo, HubConnectScreen as bp, ReadyScreen as bq, SmartWelcome as br, SyncProgressOverlay as bs, onboardingReducer as bt, createInitialState as bu, QUICK_START_TEMPLATES as bv, getPlatformAuthName as bw, truncateDid as bx, copyToClipboard as by, type OnboardingProviderProps as bz, type UseFindResult as c, useCommands as c0, useSlashCommands as c1, useSidebarItems as c2, useImporters as c3, useEditorExtensions as c4, useEditorExtensionsSafe as c5, useMergedEditorContributions as c6, mergeEditorContributions as c7, type MergedEditorContributions as c8, useView as c9, useCommand as ca, usePageTaskSync as d, type PageTaskReferenceInput as e, type UsePageTaskSyncOptions as f, type UsePageTaskSyncResult as g, useTaskProjectionSync as h, type TaskProjectionReferenceInput as i, type TaskProjectionHost as j, type UseTaskProjectionSyncOptions as k, useTasks as l, type UseTasksOptions as m, type UseTasksResult as n, useComments as o, type UseCommentsOptions as p, type UseCommentsResult as q, type CommentNode as r, useVisibleComments as s, useModeratedThread as t, useFind as u, createModerationLabelIndex as v, evaluateCommentModeration as w, evaluateInteractionPermission as x, moderateThread as y, selectActiveInteractionPolicy as z };
@@ -1,4 +1,4 @@
1
- export { A as AddCommentOptions, a0 as AddReactionOptions, bm as AuthErrorScreen, aP as AuthTraceSummary, bl as AuthenticatingScreen, r as CommentNode, C as CommentThread, F as CommentVisibility, ad as CreateMessageRequestOptions, b7 as DemoBanner, b8 as DemoBannerProps, bb as DemoDataExpiredScreen, be as DemoLimits, bd as DemoModeState, b9 as DemoQuotaIndicator, ba as DemoQuotaIndicatorProps, bf as DemoUsage, b2 as DiscoveredPeer, aU as FileRef, ae as FirstContactAdmission, af as FirstContactDecision, ag as FirstContactDecisionInput, G as FirstContactMode, ah as FirstContactVisibility, aK as GrantConsentSummary, aL as GrantInput, bp as HubConnectScreen, aX as HubSearchOptions, aY as HubSearchResult, aZ as HubSearchState, b3 as HubStatusIndicator, bo as ImportIdentityScreen, I as InteractionPermission, ai as MessageRequestNode, aj as MessageRequestProperties, ak as MessageRequestStatus, M as ModeratedCommentNode, H as ModeratedCommentThread, J as ModerationFilterOptions, K as ModerationLabelSummary, bA as OnboardingContextValue, bD as OnboardingEvent, bj as OnboardingFlow, bB as OnboardingFlowProps, bE as OnboardingMachineContext, bh as OnboardingProvider, bz as OnboardingProviderProps, bF as OnboardingReducerState, bC as OnboardingState, P as PageTaskInput, e as PageTaskReferenceInput, bI as PageTasksPanel, bJ as PageTasksPanelProps, bW as PluginRegistryContext, L as PublicInteractionMode, N as PublicInteractionPolicySnapshot, O as PublicInteractionSurface, Q as PublicModerationMode, bv as QUICK_START_TEMPLATES, bG as QuickStartTemplate, a1 as ReactionCounterSnapshot, a2 as ReactionNode, a3 as ReactionType, bq as ReadyScreen, a$ as RemoteSchemaDefinition, b0 as RemoteSchemaState, R as ReplyContext, bQ as SecurityContextActions, bP as SecurityContextState, bR as SecurityContextValue, bM as SecurityProvider, bS as SecurityProviderProps, b4 as Skeleton, b6 as SkeletonProps, br as SmartWelcome, bs as SyncProgressOverlay, bH as SyncProgressOverlayProps, bK as TaskCollectionEmbed, bL as TaskCollectionEmbedProps, a as TaskTreeItem, bn as UnsupportedBrowserScreen, aw as UseAuditOptions, av as UseAuditResult, aQ as UseAuthTraceResult, aS as UseBackupReturn, aA as UseBlameResult, aH as UseCanEditResult, aF as UseCanResult, p as UseCommentsOptions, q as UseCommentsResult, ay as UseDiffResult, aV as UseFileUploadReturn, b as UseFindOptions, c as UseFindResult, aM as UseGrantsResult, aq as UseHistoryResult, al as UseMessageRequestsOptions, am as UseMessageRequestsResult, S as UseModeratedThreadOptions, f as UsePageTaskSyncOptions, g as UsePageTaskSyncResult, a4 as UsePolicyFilteredReactionCountersOptions, a5 as UsePolicyFilteredReactionCountersResult, bU as UseSecurityOptions, bV as UseSecurityResult, m as UseTasksOptions, n as UseTasksResult, at as UseUndoOptions, as as UseUndoResult, aC as UseVerificationResult, V as UseVisibleCommentsOptions, W as UseVisibleCommentsResult, bk as WelcomeScreen, by as copyToClipboard, a7 as createConversationKey, bu as createInitialState, a8 as createMessageRequestProperties, v as createModerationLabelIndex, Y as createReactionCounterSnapshot, Z as dedupeReactions, aI as describeGrantConsent, w as evaluateCommentModeration, a9 as evaluateFirstContactDecision, x as evaluateInteractionPermission, aa as findLatestMessageRequest, bw as getPlatformAuthName, ab as hasAcceptedContact, b5 as injectSkeletonStyles, _ as isReactionVisible, y as moderateThread, bt as onboardingReducer, z as selectActiveInteractionPolicy, B as selectPublicInteractionMode, aN as summarizeAuthTrace, ac as summarizeMessageRequest, D as summarizeModerationLabel, E as summarizePublicInteractionPolicy, $ as summarizeReactionNode, bx as truncateDid, au as useAudit, aO as useAuthTrace, aR as useBackup, az as useBlame, aE as useCan, aG as useCanEdit, c7 as useCommand, c0 as useCommands, an as useCommentCount, ao as useCommentCounts, o as useComments, b_ as useContributions, bc as useDemoMode, ax as useDiff, c4 as useEditorExtensions, c5 as useEditorExtensionsSafe, aT as useFileUpload, u as useFind, aJ as useGrants, ap as useHistory, aW as useHubSearch, aD as useHubStatus, a6 as useMessageRequests, t as useModeratedThread, bi as useOnboarding, d as usePageTaskSync, b1 as usePeerDiscovery, bX as usePluginRegistry, bY as usePluginRegistryOptional, bZ as usePlugins, X as usePolicyFilteredReactionCounters, a_ as useRemoteSchema, bT as useSecurity, bN as useSecurityContext, bO as useSecurityContextOptional, c2 as useSidebarItems, c1 as useSlashCommands, bg as useSyncManager, l as useTasks, ar as useUndo, aB as useVerification, c6 as useView, b$ as useViews, s as useVisibleComments } from './experimental-B2FrBnkV.js';
1
+ export { A as AddCommentOptions, a0 as AddReactionOptions, bm as AuthErrorScreen, aP as AuthTraceSummary, bl as AuthenticatingScreen, r as CommentNode, C as CommentThread, F as CommentVisibility, ad as CreateMessageRequestOptions, b7 as DemoBanner, b8 as DemoBannerProps, bb as DemoDataExpiredScreen, be as DemoLimits, bd as DemoModeState, b9 as DemoQuotaIndicator, ba as DemoQuotaIndicatorProps, bf as DemoUsage, b2 as DiscoveredPeer, aU as FileRef, ae as FirstContactAdmission, af as FirstContactDecision, ag as FirstContactDecisionInput, G as FirstContactMode, ah as FirstContactVisibility, aK as GrantConsentSummary, aL as GrantInput, bp as HubConnectScreen, aX as HubSearchOptions, aY as HubSearchResult, aZ as HubSearchState, b3 as HubStatusIndicator, bo as ImportIdentityScreen, I as InteractionPermission, c8 as MergedEditorContributions, ai as MessageRequestNode, aj as MessageRequestProperties, ak as MessageRequestStatus, M as ModeratedCommentNode, H as ModeratedCommentThread, J as ModerationFilterOptions, K as ModerationLabelSummary, bA as OnboardingContextValue, bD as OnboardingEvent, bj as OnboardingFlow, bB as OnboardingFlowProps, bE as OnboardingMachineContext, bh as OnboardingProvider, bz as OnboardingProviderProps, bF as OnboardingReducerState, bC as OnboardingState, P as PageTaskInput, e as PageTaskReferenceInput, bI as PageTasksPanel, bJ as PageTasksPanelProps, bW as PluginRegistryContext, L as PublicInteractionMode, N as PublicInteractionPolicySnapshot, O as PublicInteractionSurface, Q as PublicModerationMode, bv as QUICK_START_TEMPLATES, bG as QuickStartTemplate, a1 as ReactionCounterSnapshot, a2 as ReactionNode, a3 as ReactionType, bq as ReadyScreen, a$ as RemoteSchemaDefinition, b0 as RemoteSchemaState, R as ReplyContext, bQ as SecurityContextActions, bP as SecurityContextState, bR as SecurityContextValue, bM as SecurityProvider, bS as SecurityProviderProps, b4 as Skeleton, b6 as SkeletonProps, br as SmartWelcome, bs as SyncProgressOverlay, bH as SyncProgressOverlayProps, bK as TaskCollectionEmbed, bL as TaskCollectionEmbedProps, a as TaskTreeItem, bn as UnsupportedBrowserScreen, aw as UseAuditOptions, av as UseAuditResult, aQ as UseAuthTraceResult, aS as UseBackupReturn, aA as UseBlameResult, aH as UseCanEditResult, aF as UseCanResult, p as UseCommentsOptions, q as UseCommentsResult, ay as UseDiffResult, aV as UseFileUploadReturn, b as UseFindOptions, c as UseFindResult, aM as UseGrantsResult, aq as UseHistoryResult, al as UseMessageRequestsOptions, am as UseMessageRequestsResult, S as UseModeratedThreadOptions, f as UsePageTaskSyncOptions, g as UsePageTaskSyncResult, a4 as UsePolicyFilteredReactionCountersOptions, a5 as UsePolicyFilteredReactionCountersResult, bU as UseSecurityOptions, bV as UseSecurityResult, m as UseTasksOptions, n as UseTasksResult, at as UseUndoOptions, as as UseUndoResult, aC as UseVerificationResult, V as UseVisibleCommentsOptions, W as UseVisibleCommentsResult, bk as WelcomeScreen, by as copyToClipboard, a7 as createConversationKey, bu as createInitialState, a8 as createMessageRequestProperties, v as createModerationLabelIndex, Y as createReactionCounterSnapshot, Z as dedupeReactions, aI as describeGrantConsent, w as evaluateCommentModeration, a9 as evaluateFirstContactDecision, x as evaluateInteractionPermission, aa as findLatestMessageRequest, bw as getPlatformAuthName, ab as hasAcceptedContact, b5 as injectSkeletonStyles, _ as isReactionVisible, c7 as mergeEditorContributions, y as moderateThread, bt as onboardingReducer, z as selectActiveInteractionPolicy, B as selectPublicInteractionMode, aN as summarizeAuthTrace, ac as summarizeMessageRequest, D as summarizeModerationLabel, E as summarizePublicInteractionPolicy, $ as summarizeReactionNode, bx as truncateDid, au as useAudit, aO as useAuthTrace, aR as useBackup, az as useBlame, aE as useCan, aG as useCanEdit, ca as useCommand, c0 as useCommands, an as useCommentCount, ao as useCommentCounts, o as useComments, b_ as useContributions, bc as useDemoMode, ax as useDiff, c4 as useEditorExtensions, c5 as useEditorExtensionsSafe, aT as useFileUpload, u as useFind, aJ as useGrants, ap as useHistory, aW as useHubSearch, aD as useHubStatus, c6 as useMergedEditorContributions, a6 as useMessageRequests, t as useModeratedThread, bi as useOnboarding, d as usePageTaskSync, b1 as usePeerDiscovery, bX as usePluginRegistry, bY as usePluginRegistryOptional, bZ as usePlugins, X as usePolicyFilteredReactionCounters, a_ as useRemoteSchema, bT as useSecurity, bN as useSecurityContext, bO as useSecurityContextOptional, c2 as useSidebarItems, c1 as useSlashCommands, bg as useSyncManager, l as useTasks, ar as useUndo, aB as useVerification, c9 as useView, b$ as useViews, s as useVisibleComments } from './experimental-DyPoZcJT.js';
2
2
  export { i as FlattenNodeOptions, f as flattenNode, e as flattenNodes, h as flattenNodesWithSchemaCheck, g as flattenUnknownSchemaNode } from './useQuery-D7ajycrc.js';
3
3
  export { BlobStoreForSync, ConnectionManager, ConnectionManagerConfig, ConnectionStatus, InitialSyncManager, InitialSyncMessage, METABRIDGE_ORIGIN, METABRIDGE_SEED_ORIGIN, MetaBridge, NodePool, NodePoolConfig, NodeStoreSyncProvider, NodeSyncResponse, OfflineQueue, OfflineQueueConfig, PoolEntryState, ProgressListener, QueueEntry, Registry, RegistryConfig, RegistryStorage, SerializedNodeChange, SyncLifecyclePhase, SyncLifecycleState, SyncManager, SyncManagerConfig, SyncStatus as SyncManagerStatus, SyncPhase, SyncProgress, TrackedNode, WebSocketSyncProvider, WebSocketSyncProviderOptions, createConnectionManager, createInitialSyncManager, createMetaBridge, createNodePool, createOfflineQueue, createRegistry, createSyncManager } from '@xnetjs/runtime';
4
4
  export { I as InstrumentationContext, a as InstrumentationContextValue, Q as QueryTrackerLike, Y as YDocRegistryLike, u as useInstrumentation } from './instrumentation-CpIuG2y5.js';
@@ -73,14 +73,14 @@ import {
73
73
  useUndo,
74
74
  useVerification,
75
75
  useVisibleComments
76
- } from "./chunk-MEIYFD6R.js";
76
+ } from "./chunk-ANCTAEML.js";
77
77
  import {
78
78
  flattenNode,
79
79
  flattenNodes,
80
80
  flattenNodesWithSchemaCheck,
81
81
  flattenUnknownSchemaNode,
82
82
  useSyncManager
83
- } from "./chunk-EJEGIEIC.js";
83
+ } from "./chunk-ZGP56IIJ.js";
84
84
  import {
85
85
  InstrumentationContext,
86
86
  useInstrumentation
@@ -89,11 +89,13 @@ import {
89
89
  PluginRegistryContext,
90
90
  SecurityProvider,
91
91
  TelemetryContext,
92
+ mergeEditorContributions,
92
93
  useCommand,
93
94
  useCommands,
94
95
  useContributions,
95
96
  useEditorExtensions,
96
97
  useEditorExtensionsSafe,
98
+ useMergedEditorContributions,
97
99
  usePluginRegistry,
98
100
  usePluginRegistryOptional,
99
101
  usePlugins,
@@ -104,7 +106,7 @@ import {
104
106
  useTelemetryReporter,
105
107
  useView,
106
108
  useViews
107
- } from "./chunk-RIN2MXZK.js";
109
+ } from "./chunk-H44ZSIH4.js";
108
110
 
109
111
  // src/experimental.ts
110
112
  import { WebSocketSyncProvider } from "@xnetjs/runtime";
@@ -189,6 +191,7 @@ export {
189
191
  hasAcceptedContact,
190
192
  injectSkeletonStyles,
191
193
  isReactionVisible,
194
+ mergeEditorContributions,
192
195
  moderateThread,
193
196
  onboardingReducer,
194
197
  selectActiveInteractionPolicy,
@@ -222,6 +225,7 @@ export {
222
225
  useHubSearch,
223
226
  useHubStatus,
224
227
  useInstrumentation,
228
+ useMergedEditorContributions,
225
229
  useMessageRequests,
226
230
  useModeratedThread,
227
231
  useOnboarding,
package/dist/index.d.ts CHANGED
@@ -1,15 +1,17 @@
1
1
  import { Q as QueryFilter, a as QueryStatus, F as FlatNode, b as QueryPlanSummary } from './useQuery-D7ajycrc.js';
2
2
  export { i as FlattenNodeOptions, M as MigrationWarning, c as QueryListResult, d as QuerySingleResult, S as SortDirection, f as flattenNode, e as flattenNodes, h as flattenNodesWithSchemaCheck, g as flattenUnknownSchemaNode, u as useQuery } from './useQuery-D7ajycrc.js';
3
3
  export { ErrorBoundary, ErrorBoundaryProps, InfiniteQueryFilter, InfiniteQueryPage, InfiniteQueryResult, MutateCreate, MutateDelete, MutateOp, MutateRestore, MutateUpdate, OfflineIndicator, OfflineIndicatorProps, PresenceUser, SyncStatus, UseIdentityResult, UseMutateResult, UseNodeOptions, UseNodeResult, useIdentity, useInfiniteQuery, useIsOffline, useMutate, useNode } from './core.js';
4
- import { U as UseTaskProjectionSyncResult, T as TaskProjectionInput, a as TaskTreeItem } from './experimental-B2FrBnkV.js';
5
- export { A as AddCommentOptions, a0 as AddReactionOptions, bm as AuthErrorScreen, aP as AuthTraceSummary, bl as AuthenticatingScreen, r as CommentNode, C as CommentThread, F as CommentVisibility, ad as CreateMessageRequestOptions, b7 as DemoBanner, b8 as DemoBannerProps, bb as DemoDataExpiredScreen, be as DemoLimits, bd as DemoModeState, b9 as DemoQuotaIndicator, ba as DemoQuotaIndicatorProps, bf as DemoUsage, b2 as DiscoveredPeer, aU as FileRef, ae as FirstContactAdmission, af as FirstContactDecision, ag as FirstContactDecisionInput, G as FirstContactMode, ah as FirstContactVisibility, aK as GrantConsentSummary, aL as GrantInput, bp as HubConnectScreen, aX as HubSearchOptions, aY as HubSearchResult, aZ as HubSearchState, b3 as HubStatusIndicator, bo as ImportIdentityScreen, I as InteractionPermission, ai as MessageRequestNode, aj as MessageRequestProperties, ak as MessageRequestStatus, M as ModeratedCommentNode, H as ModeratedCommentThread, J as ModerationFilterOptions, K as ModerationLabelSummary, bA as OnboardingContextValue, bD as OnboardingEvent, bj as OnboardingFlow, bB as OnboardingFlowProps, bE as OnboardingMachineContext, bh as OnboardingProvider, bz as OnboardingProviderProps, bF as OnboardingReducerState, bC as OnboardingState, P as PageTaskInput, e as PageTaskReferenceInput, bI as PageTasksPanel, bJ as PageTasksPanelProps, bW as PluginRegistryContext, L as PublicInteractionMode, N as PublicInteractionPolicySnapshot, O as PublicInteractionSurface, Q as PublicModerationMode, bv as QUICK_START_TEMPLATES, bG as QuickStartTemplate, a1 as ReactionCounterSnapshot, a2 as ReactionNode, a3 as ReactionType, bq as ReadyScreen, a$ as RemoteSchemaDefinition, b0 as RemoteSchemaState, R as ReplyContext, bQ as SecurityContextActions, bP as SecurityContextState, bR as SecurityContextValue, bM as SecurityProvider, bS as SecurityProviderProps, b4 as Skeleton, b6 as SkeletonProps, br as SmartWelcome, bs as SyncProgressOverlay, bH as SyncProgressOverlayProps, bK as TaskCollectionEmbed, bL as TaskCollectionEmbedProps, j as TaskProjectionHost, i as TaskProjectionReferenceInput, bn as UnsupportedBrowserScreen, aw as UseAuditOptions, av as UseAuditResult, aQ as UseAuthTraceResult, aS as UseBackupReturn, aA as UseBlameResult, aH as UseCanEditResult, aF as UseCanResult, p as UseCommentsOptions, q as UseCommentsResult, ay as UseDiffResult, aV as UseFileUploadReturn, b as UseFindOptions, c as UseFindResult, aM as UseGrantsResult, aq as UseHistoryResult, al as UseMessageRequestsOptions, am as UseMessageRequestsResult, S as UseModeratedThreadOptions, f as UsePageTaskSyncOptions, g as UsePageTaskSyncResult, a4 as UsePolicyFilteredReactionCountersOptions, a5 as UsePolicyFilteredReactionCountersResult, bU as UseSecurityOptions, bV as UseSecurityResult, k as UseTaskProjectionSyncOptions, m as UseTasksOptions, n as UseTasksResult, at as UseUndoOptions, as as UseUndoResult, aC as UseVerificationResult, V as UseVisibleCommentsOptions, W as UseVisibleCommentsResult, bk as WelcomeScreen, by as copyToClipboard, a7 as createConversationKey, bu as createInitialState, a8 as createMessageRequestProperties, v as createModerationLabelIndex, Y as createReactionCounterSnapshot, Z as dedupeReactions, aI as describeGrantConsent, w as evaluateCommentModeration, a9 as evaluateFirstContactDecision, x as evaluateInteractionPermission, aa as findLatestMessageRequest, bw as getPlatformAuthName, ab as hasAcceptedContact, b5 as injectSkeletonStyles, _ as isReactionVisible, y as moderateThread, bt as onboardingReducer, z as selectActiveInteractionPolicy, B as selectPublicInteractionMode, aN as summarizeAuthTrace, ac as summarizeMessageRequest, D as summarizeModerationLabel, E as summarizePublicInteractionPolicy, $ as summarizeReactionNode, bx as truncateDid, au as useAudit, aO as useAuthTrace, aR as useBackup, az as useBlame, aE as useCan, aG as useCanEdit, c7 as useCommand, c0 as useCommands, an as useCommentCount, ao as useCommentCounts, o as useComments, b_ as useContributions, bc as useDemoMode, ax as useDiff, c4 as useEditorExtensions, c5 as useEditorExtensionsSafe, aT as useFileUpload, u as useFind, aJ as useGrants, ap as useHistory, aW as useHubSearch, aD as useHubStatus, c3 as useImporters, a6 as useMessageRequests, t as useModeratedThread, bi as useOnboarding, d as usePageTaskSync, b1 as usePeerDiscovery, bX as usePluginRegistry, bY as usePluginRegistryOptional, bZ as usePlugins, X as usePolicyFilteredReactionCounters, a_ as useRemoteSchema, bT as useSecurity, bN as useSecurityContext, bO as useSecurityContextOptional, c2 as useSidebarItems, c1 as useSlashCommands, bg as useSyncManager, h as useTaskProjectionSync, l as useTasks, ar as useUndo, aB as useVerification, c6 as useView, b$ as useViews, s as useVisibleComments } from './experimental-B2FrBnkV.js';
6
- import { SchemaIRI, Schema, SavedViewDescriptor, DefinedSchema, PropertyBuilder, QueryASTOrderBy, QueryASTPage, QueryASTValidationResult, QueryASTPlannerGate, QueryASTAggregateExecution, ExternalReferenceProvider, SavedViewFeedLayout, SavedViewFeedDensity, FieldType, FieldConfig, ViewType, FilterGroup, SortConfig, RowHeight, SummaryFunction, FormViewConfig, FormFieldRule, CellValue, FormSubmissionMeta } from '@xnetjs/data';
4
+ import { U as UseTaskProjectionSyncResult, T as TaskProjectionInput, a as TaskTreeItem } from './experimental-DyPoZcJT.js';
5
+ export { A as AddCommentOptions, a0 as AddReactionOptions, bm as AuthErrorScreen, aP as AuthTraceSummary, bl as AuthenticatingScreen, r as CommentNode, C as CommentThread, F as CommentVisibility, ad as CreateMessageRequestOptions, b7 as DemoBanner, b8 as DemoBannerProps, bb as DemoDataExpiredScreen, be as DemoLimits, bd as DemoModeState, b9 as DemoQuotaIndicator, ba as DemoQuotaIndicatorProps, bf as DemoUsage, b2 as DiscoveredPeer, aU as FileRef, ae as FirstContactAdmission, af as FirstContactDecision, ag as FirstContactDecisionInput, G as FirstContactMode, ah as FirstContactVisibility, aK as GrantConsentSummary, aL as GrantInput, bp as HubConnectScreen, aX as HubSearchOptions, aY as HubSearchResult, aZ as HubSearchState, b3 as HubStatusIndicator, bo as ImportIdentityScreen, I as InteractionPermission, c8 as MergedEditorContributions, ai as MessageRequestNode, aj as MessageRequestProperties, ak as MessageRequestStatus, M as ModeratedCommentNode, H as ModeratedCommentThread, J as ModerationFilterOptions, K as ModerationLabelSummary, bA as OnboardingContextValue, bD as OnboardingEvent, bj as OnboardingFlow, bB as OnboardingFlowProps, bE as OnboardingMachineContext, bh as OnboardingProvider, bz as OnboardingProviderProps, bF as OnboardingReducerState, bC as OnboardingState, P as PageTaskInput, e as PageTaskReferenceInput, bI as PageTasksPanel, bJ as PageTasksPanelProps, bW as PluginRegistryContext, L as PublicInteractionMode, N as PublicInteractionPolicySnapshot, O as PublicInteractionSurface, Q as PublicModerationMode, bv as QUICK_START_TEMPLATES, bG as QuickStartTemplate, a1 as ReactionCounterSnapshot, a2 as ReactionNode, a3 as ReactionType, bq as ReadyScreen, a$ as RemoteSchemaDefinition, b0 as RemoteSchemaState, R as ReplyContext, bQ as SecurityContextActions, bP as SecurityContextState, bR as SecurityContextValue, bM as SecurityProvider, bS as SecurityProviderProps, b4 as Skeleton, b6 as SkeletonProps, br as SmartWelcome, bs as SyncProgressOverlay, bH as SyncProgressOverlayProps, bK as TaskCollectionEmbed, bL as TaskCollectionEmbedProps, j as TaskProjectionHost, i as TaskProjectionReferenceInput, bn as UnsupportedBrowserScreen, aw as UseAuditOptions, av as UseAuditResult, aQ as UseAuthTraceResult, aS as UseBackupReturn, aA as UseBlameResult, aH as UseCanEditResult, aF as UseCanResult, p as UseCommentsOptions, q as UseCommentsResult, ay as UseDiffResult, aV as UseFileUploadReturn, b as UseFindOptions, c as UseFindResult, aM as UseGrantsResult, aq as UseHistoryResult, al as UseMessageRequestsOptions, am as UseMessageRequestsResult, S as UseModeratedThreadOptions, f as UsePageTaskSyncOptions, g as UsePageTaskSyncResult, a4 as UsePolicyFilteredReactionCountersOptions, a5 as UsePolicyFilteredReactionCountersResult, bU as UseSecurityOptions, bV as UseSecurityResult, k as UseTaskProjectionSyncOptions, m as UseTasksOptions, n as UseTasksResult, at as UseUndoOptions, as as UseUndoResult, aC as UseVerificationResult, V as UseVisibleCommentsOptions, W as UseVisibleCommentsResult, bk as WelcomeScreen, by as copyToClipboard, a7 as createConversationKey, bu as createInitialState, a8 as createMessageRequestProperties, v as createModerationLabelIndex, Y as createReactionCounterSnapshot, Z as dedupeReactions, aI as describeGrantConsent, w as evaluateCommentModeration, a9 as evaluateFirstContactDecision, x as evaluateInteractionPermission, aa as findLatestMessageRequest, bw as getPlatformAuthName, ab as hasAcceptedContact, b5 as injectSkeletonStyles, _ as isReactionVisible, c7 as mergeEditorContributions, y as moderateThread, bt as onboardingReducer, z as selectActiveInteractionPolicy, B as selectPublicInteractionMode, aN as summarizeAuthTrace, ac as summarizeMessageRequest, D as summarizeModerationLabel, E as summarizePublicInteractionPolicy, $ as summarizeReactionNode, bx as truncateDid, au as useAudit, aO as useAuthTrace, aR as useBackup, az as useBlame, aE as useCan, aG as useCanEdit, ca as useCommand, c0 as useCommands, an as useCommentCount, ao as useCommentCounts, o as useComments, b_ as useContributions, bc as useDemoMode, ax as useDiff, c4 as useEditorExtensions, c5 as useEditorExtensionsSafe, aT as useFileUpload, u as useFind, aJ as useGrants, ap as useHistory, aW as useHubSearch, aD as useHubStatus, c3 as useImporters, c6 as useMergedEditorContributions, a6 as useMessageRequests, t as useModeratedThread, bi as useOnboarding, d as usePageTaskSync, b1 as usePeerDiscovery, bX as usePluginRegistry, bY as usePluginRegistryOptional, bZ as usePlugins, X as usePolicyFilteredReactionCounters, a_ as useRemoteSchema, bT as useSecurity, bN as useSecurityContext, bO as useSecurityContextOptional, c2 as useSidebarItems, c1 as useSlashCommands, bg as useSyncManager, h as useTaskProjectionSync, l as useTasks, ar as useUndo, aB as useVerification, c9 as useView, b$ as useViews, s as useVisibleComments } from './experimental-DyPoZcJT.js';
6
+ import { SchemaIRI, Schema, SavedViewDescriptor, DefinedSchema, PropertyBuilder, QueryASTOrderBy, QueryASTPage, QueryASTValidationResult, QueryASTPlannerGate, QueryASTAggregateExecution, ExternalReferenceProvider, SavedViewFeedLayout, SavedViewFeedDensity, FieldType, FieldConfig, ViewType, FilterGroup, SortConfig, RowHeight, SummaryFunction, FormViewConfig, FormFieldRule, CellValue, FormSubmissionMeta, NodeId, NodeState } from '@xnetjs/data';
7
7
  export { ColumnConfig, ColumnDefinition, ColumnType, SavedViewFeedDensity, SavedViewFeedLayout, ViewConfig, ViewType } from '@xnetjs/data';
8
8
  import { QueryExecutionMode, QuerySourcePreference, QuerySearchFilter, QueryPageInfo, QueryMetadata } from '@xnetjs/data-bridge';
9
9
  import { LucideIcon } from 'lucide-react';
10
10
  import { ReactNode, JSX } from 'react';
11
11
  export { DatabaseRow, DatabaseRowData, ReverseRelation, UseCellOptions, UseCellResult, UseDatabaseDocResult, UseDatabaseOptions, UseDatabaseResult, UseDatabaseRowResult, UseDatabaseSchemaResult, UseRelatedRowsResult, UseReverseRelationsResult, useCell, useDatabase, useDatabaseDoc, useDatabaseRow, useDatabaseSchema, useRelatedRows, useReverseRelations } from './database.js';
12
12
  export { u as useNodeStore } from './useNodeStore-DTCSBF51.js';
13
+ import { ScopeTimelineEntry, PropertyDiff, HistoryHorizon, Frontier, RestoreResult, MergeDraftResult, RefreshDraftResult } from '@xnetjs/history';
14
+ export { DraftMergeConflict, Frontier, FrontierEntry, HistoryHorizon, MergeDraftResult, PropertyDiff, RefreshDraftResult, RestoreResult, ScopeTimelineEntry } from '@xnetjs/history';
13
15
  export { BlobStoreForSync, ConnectionManager, ConnectionManagerConfig, ConnectionStatus, InitialSyncManager, InitialSyncMessage, METABRIDGE_ORIGIN, METABRIDGE_SEED_ORIGIN, MetaBridge, MultiHubConnectionManagerConfig, NodePool, NodePoolConfig, NodeStoreSyncProvider, NodeSyncResponse, OfflineQueue, OfflineQueueConfig, PoolEntryState, ProgressListener, QueueEntry, Registry, RegistryConfig, RegistryStorage, SerializedNodeChange, SyncManager, SyncManagerConfig, SyncStatus as SyncManagerStatus, SyncPhase, SyncProgress, SyncReconciliationOptions, SyncReconciliationReport, TrackedNode, WebSocketSyncProvider, WebSocketSyncProviderOptions, channelShareRoom, createConnectionManager, createInitialSyncManager, createMetaBridge, createMultiHubConnectionManager, createNodePool, createOfflineQueue, createRegistry, createSyncManager, workspaceShareRoom } from '@xnetjs/runtime';
14
16
  import { Subscription, Customer, Invoice, Payment } from '@xnetjs/billing';
15
17
  export { n as TRACE_STAGES, s as TracingAttributes, T as TracingContext, p as TracingHandle, o as TracingReporter, r as TracingRootKind, q as TracingSpanInput, f as XNetConfig, X as XNetContextValue, e as XNetProvider, g as XNetProviderProps, h as XNetRuntimeConfig, i as XNetRuntimeFallback, j as XNetRuntimeMode, k as XNetRuntimePhase, d as XNetRuntimeStatus, l as XNetRuntimeWorkerConfig, u as useDataBridge, m as useTracingReporter, a as useXNet } from './context-aeFzX2eW.js';
@@ -19,7 +21,6 @@ import '@xnetjs/core';
19
21
  import 'y-protocols/awareness';
20
22
  import 'yjs';
21
23
  import '@xnetjs/identity';
22
- import '@xnetjs/history';
23
24
  import 'react/jsx-runtime';
24
25
  import '@xnetjs/crypto';
25
26
  import '@xnetjs/plugins';
@@ -580,8 +581,15 @@ interface UseGridDatabaseOptions {
580
581
  viewId?: string;
581
582
  /** Quick-find text (full-text search via SQLite FTS) */
582
583
  search?: string;
583
- /** Row window size (default 500) */
584
+ /** Rows fetched per window grow (default 500) */
584
585
  pageSize?: number;
586
+ /**
587
+ * Ceiling on the live row window (default 2000). The window grows by
588
+ * `pageSize` via `fetchMoreRows` until this bound; beyond it further
589
+ * fetches are no-ops so the overfetch buffer and live snapshot stay
590
+ * bounded (exploration 0340).
591
+ */
592
+ maxLoaded?: number;
585
593
  }
586
594
  interface UseGridDatabaseResult {
587
595
  /** Database node (flattened) */
@@ -600,6 +608,14 @@ interface UseGridDatabaseResult {
600
608
  /** Rows: view filters + sorts applied to the fetched window */
601
609
  rows: GridRowModel[];
602
610
  loading: boolean;
611
+ /** Exact matching row count for the whole database (null while unknown). */
612
+ totalRowCount: number | null;
613
+ /** Whether the row window can grow further (more rows exist past it). */
614
+ hasMoreRows: boolean;
615
+ /** Whether a window grow is awaiting the larger read. */
616
+ isFetchingMoreRows: boolean;
617
+ /** Grow the row window by `pageSize` (bounded by `maxLoaded`). */
618
+ fetchMoreRows: () => Promise<void>;
603
619
  updateCell: (rowId: string, fieldId: string, value: CellValue) => Promise<void>;
604
620
  clearCells: (cells: Array<{
605
621
  rowId: string;
@@ -638,6 +654,166 @@ interface UseGridDatabaseResult {
638
654
  }
639
655
  declare function useGridDatabase(databaseId: string, options?: UseGridDatabaseOptions): UseGridDatabaseResult;
640
656
 
657
+ /**
658
+ * useTimeMachine — React binding for the Time Machine (exploration 0329 P1).
659
+ *
660
+ * Wraps the history engine's scrub stack (`ScopeTimeline` merged Lamport line,
661
+ * hash-anchored `Frontier` positions, named `Checkpoint` nodes, the prune
662
+ * horizon) into one hook a scrubber UI can bind to:
663
+ *
664
+ * - `timeline` is the merged, Lamport-ordered change line for the scope (the
665
+ * node itself by default; pass `memberIds` to widen to a database's rows…).
666
+ * - `position` glides along that line (`setPosition`/`stepBack`/`stepForward`);
667
+ * `preview` + `diffs` materialize the primary node there and compare it to
668
+ * current state (before = at position, after = now).
669
+ * - `checkpoints` are named versions scoped to the node; `createNamedVersion`
670
+ * captures-and-pins the current frontier (Google Docs' named versions).
671
+ * - `restore` applies one compensating transaction back to the scrubbed
672
+ * frontier (new changes, no log rewriting — the restore is itself undoable).
673
+ * - `horizon` is non-null when older history was compacted on this device.
674
+ *
675
+ * @example
676
+ * ```tsx
677
+ * const tm = useTimeMachine(nodeId)
678
+ * <input type="range" max={tm.changeCount - 1} value={tm.position}
679
+ * onChange={(e) => tm.setPosition(Number(e.target.value))} />
680
+ * ```
681
+ */
682
+
683
+ interface UseTimeMachineOptions {
684
+ /**
685
+ * Scope membership beyond the node itself (e.g. a database's row ids).
686
+ * The primary node is always included.
687
+ */
688
+ memberIds?: readonly NodeId[];
689
+ }
690
+ interface UseTimeMachineResult {
691
+ /** Merged, Lamport-ordered change line for the scope. */
692
+ timeline: ScopeTimelineEntry[];
693
+ /** Total changes on the line. */
694
+ changeCount: number;
695
+ /** Current scrub index on the line (latest = changeCount - 1). */
696
+ position: number;
697
+ /** True when scrubbed to (following) the latest change. */
698
+ atLatest: boolean;
699
+ setPosition: (index: number) => void;
700
+ /** Step one change back / forward along the line. */
701
+ stepBack: () => void;
702
+ stepForward: () => void;
703
+ /** Jump back to (and follow) the latest change. */
704
+ goToLatest: () => void;
705
+ /** The primary node materialized at the scrub position. */
706
+ preview: NodeState | null;
707
+ /** Property diff position → current (what restore would change back). */
708
+ diffs: PropertyDiff[];
709
+ /** Non-null when older history was compacted on this device. */
710
+ horizon: HistoryHorizon | null;
711
+ /** Yjs document snapshots stored for the node; null when storage can't say. */
712
+ docSnapshotCount: number | null;
713
+ /** Named versions (Checkpoint nodes) scoped to this node, newest first. */
714
+ checkpoints: NodeState[];
715
+ /** Capture-and-pin the current frontier under a name. */
716
+ createNamedVersion: (name: string, note?: string) => Promise<NodeState | null>;
717
+ /** Timeline index a checkpoint pins the scope at, or null (below horizon). */
718
+ positionOfCheckpoint: (checkpoint: NodeState) => number | null;
719
+ /** The hash-anchored frontier at a timeline index. */
720
+ frontierAt: (index: number) => Frontier;
721
+ /** Restore the scope to the scrubbed frontier (one compensating batch). */
722
+ restore: () => Promise<RestoreResult | null>;
723
+ loading: boolean;
724
+ error: Error | null;
725
+ reload: () => Promise<void>;
726
+ }
727
+ declare function useTimeMachine(nodeId: NodeId | null, options?: UseTimeMachineOptions): UseTimeMachineResult;
728
+
729
+ /**
730
+ * useDraft — React binding for drafts (exploration 0329 P2/P3).
731
+ *
732
+ * Given a host node id, wraps the draft engine (`@xnetjs/history` draft/merge
733
+ * modules) and the NodeStore checkout overlay into one hook the switcher and
734
+ * review surfaces bind to:
735
+ *
736
+ * - `drafts` lists open Draft nodes targeting the host, newest first.
737
+ * - `createDraft` opens an empty draft (Upwelling: a name that signals
738
+ * intent); forking stays lazy — the first write through the overlay clones
739
+ * the touched member (`onMissingMember` → `forkNodeIntoDraft`).
740
+ * - `checkout` installs the store overlay (content-swap reads, write
741
+ * redirect); `returnToMain` clears it. The clones map is re-derived from
742
+ * the draft's entries at checkout and kept fresh via
743
+ * `subscribeToDraftOverlay` (the store self-updates it on lazy forks).
744
+ * - `merge` is the merger-signed three-way squash — it returns conflict
745
+ * cards (applying nothing) when main and draft both changed a property.
746
+ * - `refresh` folds main's post-fork changes into the draft (floating
747
+ * drafts); it pauses on the same conflict cards.
748
+ * - `computeReview` builds per-property review cards (base at fork vs main
749
+ * now vs draft now) WITHOUT applying anything — the DraftReviewPanel's
750
+ * data source.
751
+ *
752
+ * @example
753
+ * ```tsx
754
+ * const d = useDraft(nodeId)
755
+ * {d.checkedOut ? `Draft: ${d.checkedOut.properties.name}` : 'Main'}
756
+ * ```
757
+ */
758
+
759
+ /** One reviewable property difference between main and the draft. */
760
+ interface DraftReviewCard {
761
+ /** The original (main-side) node the property lives on. */
762
+ originalId: NodeId;
763
+ property: string;
764
+ /** Value at the fork point (the three-way merge base). */
765
+ base: unknown;
766
+ /** Main's value now. */
767
+ main: unknown;
768
+ /** The draft's value now. */
769
+ draft: unknown;
770
+ /** True when main and draft both changed the property differently. */
771
+ conflict: boolean;
772
+ }
773
+ /** One forked member's review summary. */
774
+ interface DraftReviewMember {
775
+ originalId: NodeId;
776
+ cloneId: NodeId;
777
+ /** The member carries a Yjs document forked into the draft. */
778
+ hasDocument: boolean;
779
+ /**
780
+ * The member's document bytes differ between draft and main (no text diff
781
+ * yet — deferred; this powers the "document edited in draft" line).
782
+ */
783
+ documentDiffers: boolean;
784
+ }
785
+ /** Pending changes + conflicts for a draft, computed without applying. */
786
+ interface DraftReview {
787
+ cards: DraftReviewCard[];
788
+ members: DraftReviewMember[];
789
+ }
790
+ interface UseDraftResult {
791
+ /** Open drafts targeting the host node, newest first. */
792
+ drafts: NodeState[];
793
+ /** The Draft node checked out for THIS host, or null (on main). */
794
+ checkedOut: NodeState | null;
795
+ /** Create (and check out) an open draft named for its intent. */
796
+ createDraft: (name: string) => Promise<NodeState | null>;
797
+ /** Install the checkout overlay for one of the host's drafts. */
798
+ checkout: (draftId: NodeId) => Promise<boolean>;
799
+ /** Clear the overlay — reads and writes hit main again. */
800
+ returnToMain: () => void;
801
+ /** Tombstone clones + release pins; checks out main first if needed. */
802
+ discard: (draftId: NodeId) => Promise<boolean>;
803
+ /** Merger-signed squash; `{status:'conflicts'}` applies nothing. */
804
+ merge: (draftId: NodeId) => Promise<MergeDraftResult | null>;
805
+ /** Fold main's post-fork changes into the draft (floating drafts). */
806
+ refresh: (draftId: NodeId) => Promise<RefreshDraftResult | null>;
807
+ /** P4: flag the draft for review in the Inbox/Requests surface. */
808
+ setReviewRequested: (draftId: NodeId, requested: boolean) => Promise<void>;
809
+ /** Per-property review cards + member doc indicators; applies nothing. */
810
+ computeReview: (draftId: NodeId) => Promise<DraftReview | null>;
811
+ loading: boolean;
812
+ error: Error | null;
813
+ reload: () => Promise<void>;
814
+ }
815
+ declare function useDraft(hostId: NodeId | null): UseDraftResult;
816
+
641
817
  /**
642
818
  * useGlobalUndo - app-wide Cmd+Z (exploration 0179)
643
819
  *
@@ -757,4 +933,4 @@ declare function flattenTaskTree(items: TaskTreeItem[], depth?: number): Rendera
757
933
  declare function formatTaskDueDate(timestamp: number | undefined): string | null;
758
934
  declare function isTaskOverdue(timestamp: number | undefined, completed: boolean): boolean;
759
935
 
760
- export { type AddRowOptions, type CanvasTaskInput, type CheckoutOptions, FlatNode, type GridFieldModel, type GridOptionModel, type GridRowModel, type GridViewModel, type PresenceAwareness, type PresencePeer, QueryFilter, type RenderableTaskRow, type SavedViewCanvasProjectionNode, type SavedViewDateBrushSelection, type SavedViewDateBucketFieldSummary, type SavedViewDateBucketInterval, type SavedViewDateBucketSummary, type SavedViewFacetSelection, type SavedViewFacetSummary, type SavedViewFacetValueSummary, type SavedViewFeedEnrichmentAdapter, type SavedViewFeedEnrichmentEntry, type SavedViewInspectorItem, type SavedViewInspectorItemKind, type SavedViewLensDraft, type SavedViewPresentationMode, type SavedViewPrivacyChip, type SavedViewPrivacyChipTone, type SavedViewPrivacySummary, type SavedViewQueryOverride, type SavedViewQueryResult, SavedViewResultTable, type SavedViewResultTableProps, type SavedViewRowInspectorModel, SavedViewRunner, type SavedViewRunnerProps, type SavedViewSchemaRegistry, type SavedViewSortDirection, type SavedViewVisualCanvasProjectionRequest, SavedViewVisualFeed, type SavedViewVisualLayoutId, type SavedViewVisualLayoutOption, type SavedViewVisualPreviewCreator, type SavedViewVisualPreviewKind, type SavedViewVisualPreviewModel, type SavedViewVisualPreviewPrivacy, type SavedViewVisualPreviewRelationship, type SavedViewVisualTimelineBucket, type SavedViewVisualWorkspaceLayout, TaskProjectionInput, TaskTreeItem, type UseBillingResult, type UseCanCreateResult, type UseCanvasTaskSyncOptions, type UseCanvasTaskSyncResult, type UseEffectiveSchemaResult, type UseGlobalUndoResult, type UseGridDatabaseOptions, type UseGridDatabaseResult, type UsePresenceOptions, type UsePresenceResult, type UseSavedViewOptions, type UseSavedViewResult, UseTaskProjectionSyncResult, createSavedViewCanvasProjectionNodes, createSavedViewLensDraft, createSavedViewVisualCanvasProjectionRequest, createSavedViewVisualPreviewFingerprint, deriveCachedSavedViewVisualPreviews, deriveSavedViewColumns, deriveSavedViewDateBucketSummaries, deriveSavedViewFacetSummaries, deriveSavedViewPrivacyChips, deriveSavedViewRowInspector, deriveSavedViewTimelineBuckets, deriveSavedViewVisualPreview, deriveSavedViewVisualPreviews, filterSavedViewRowsByDateBrush, filterSavedViewRowsByFacets, flattenTaskTree, formatSavedViewCellValue, formatTaskDueDate, getSavedViewSensitiveResultWarning, hasSavedViewVisualPreviewSensitiveData, isSavedViewVisualPreviewEmbeddable, isTaskOverdue, mergeSavedViewFeedEnrichment, savedViewVisualPreviewIsSelfActor, useBilling, useCanCreate, useCanvasTaskSync, useEffectiveSchema, useGlobalUndo, useGridDatabase, usePresence, useSavedView };
936
+ export { type AddRowOptions, type CanvasTaskInput, type CheckoutOptions, type DraftReview, type DraftReviewCard, type DraftReviewMember, FlatNode, type GridFieldModel, type GridOptionModel, type GridRowModel, type GridViewModel, type PresenceAwareness, type PresencePeer, QueryFilter, type RenderableTaskRow, type SavedViewCanvasProjectionNode, type SavedViewDateBrushSelection, type SavedViewDateBucketFieldSummary, type SavedViewDateBucketInterval, type SavedViewDateBucketSummary, type SavedViewFacetSelection, type SavedViewFacetSummary, type SavedViewFacetValueSummary, type SavedViewFeedEnrichmentAdapter, type SavedViewFeedEnrichmentEntry, type SavedViewInspectorItem, type SavedViewInspectorItemKind, type SavedViewLensDraft, type SavedViewPresentationMode, type SavedViewPrivacyChip, type SavedViewPrivacyChipTone, type SavedViewPrivacySummary, type SavedViewQueryOverride, type SavedViewQueryResult, SavedViewResultTable, type SavedViewResultTableProps, type SavedViewRowInspectorModel, SavedViewRunner, type SavedViewRunnerProps, type SavedViewSchemaRegistry, type SavedViewSortDirection, type SavedViewVisualCanvasProjectionRequest, SavedViewVisualFeed, type SavedViewVisualLayoutId, type SavedViewVisualLayoutOption, type SavedViewVisualPreviewCreator, type SavedViewVisualPreviewKind, type SavedViewVisualPreviewModel, type SavedViewVisualPreviewPrivacy, type SavedViewVisualPreviewRelationship, type SavedViewVisualTimelineBucket, type SavedViewVisualWorkspaceLayout, TaskProjectionInput, TaskTreeItem, type UseBillingResult, type UseCanCreateResult, type UseCanvasTaskSyncOptions, type UseCanvasTaskSyncResult, type UseDraftResult, type UseEffectiveSchemaResult, type UseGlobalUndoResult, type UseGridDatabaseOptions, type UseGridDatabaseResult, type UsePresenceOptions, type UsePresenceResult, type UseSavedViewOptions, type UseSavedViewResult, UseTaskProjectionSyncResult, type UseTimeMachineOptions, type UseTimeMachineResult, createSavedViewCanvasProjectionNodes, createSavedViewLensDraft, createSavedViewVisualCanvasProjectionRequest, createSavedViewVisualPreviewFingerprint, deriveCachedSavedViewVisualPreviews, deriveSavedViewColumns, deriveSavedViewDateBucketSummaries, deriveSavedViewFacetSummaries, deriveSavedViewPrivacyChips, deriveSavedViewRowInspector, deriveSavedViewTimelineBuckets, deriveSavedViewVisualPreview, deriveSavedViewVisualPreviews, filterSavedViewRowsByDateBrush, filterSavedViewRowsByFacets, flattenTaskTree, formatSavedViewCellValue, formatTaskDueDate, getSavedViewSensitiveResultWarning, hasSavedViewVisualPreviewSensitiveData, isSavedViewVisualPreviewEmbeddable, isTaskOverdue, mergeSavedViewFeedEnrichment, savedViewVisualPreviewIsSelfActor, useBilling, useCanCreate, useCanvasTaskSync, useDraft, useEffectiveSchema, useGlobalUndo, useGridDatabase, usePresence, useSavedView, useTimeMachine };