sanity 6.6.0-next.99 → 6.6.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.
@@ -1019,12 +1019,6 @@ declare const structureLocaleStrings: {
1019
1019
  * @alpha
1020
1020
  */
1021
1021
  type StructureLocaleResourceKeys = keyof typeof structureLocaleStrings;
1022
- /**
1023
- * The locale namespace for the structure tool
1024
- *
1025
- * @public
1026
- */
1027
- declare const structureLocaleNamespace: 'structure';
1028
1022
  /** @internal */
1029
1023
  type DocumentPaneProviderProps = {
1030
1024
  children?: React.ReactNode;
@@ -1147,4 +1141,4 @@ interface StructureToolProviderProps {
1147
1141
  declare function StructureToolProvider({ defaultDocumentNode, structure: resolveStructure, children }: StructureToolProviderProps): React.JSX.Element;
1148
1142
  /** @internal */
1149
1143
  declare function useStructureTool(): StructureToolContextValue;
1150
- export { usePaneRouter as C, ConfirmDeleteDialogContainer as D, Pane as E, ConfirmDeleteDialogProps as O, IncomingReferencesOptions as S, PaneContent as T, structureLocaleNamespace as _, structureTool as a, defineIncomingReferenceDecoration as b, PaneContainer as c, UseDocumentTitle as d, useDocumentTitle as f, DocumentPaneProviderProps as g, usePaneOptions as h, StructureToolProviderProps as i, BaseStructureToolPaneProps as k, useDocumentPane as l, DocumentPane as m, useStructureTool as n, ORDER_BY_IDS_PARAM_FIELD as o, DocumentPaneProviderWrapper as p, StructureToolProvider as r, DocumentListPaneProps as s, PaneRouterContext as t, DocumentInspectorHeader as u, StructureLocaleResourceKeys as v, PaneLayout as w, IncomingReferenceAction as x, isIncomingReferenceCreation as y };
1144
+ export { PaneLayout as C, ConfirmDeleteDialogProps as D, ConfirmDeleteDialogContainer as E, BaseStructureToolPaneProps as O, usePaneRouter as S, Pane as T, StructureLocaleResourceKeys as _, structureTool as a, IncomingReferenceAction as b, PaneContainer as c, UseDocumentTitle as d, useDocumentTitle as f, DocumentPaneProviderProps as g, usePaneOptions as h, StructureToolProviderProps as i, useDocumentPane as l, DocumentPane as m, useStructureTool as n, ORDER_BY_IDS_PARAM_FIELD as o, DocumentPaneProviderWrapper as p, StructureToolProvider as r, DocumentListPaneProps as s, PaneRouterContext as t, DocumentInspectorHeader as u, isIncomingReferenceCreation as v, PaneContent as w, IncomingReferencesOptions as x, defineIncomingReferenceDecoration as y };
@@ -202,6 +202,10 @@ interface PreviewProps {
202
202
  overlaysConnection: ConnectionStatus;
203
203
  presentationRef: PresentationMachineRef;
204
204
  perspective: PresentationPerspective;
205
+ /**
206
+ * The selected editing variant as a bare variant id, or `undefined` when no variant is selected
207
+ */
208
+ variant: string | undefined;
205
209
  previewUrl?: string;
206
210
  setViewport: (mode: 'desktop' | 'mobile') => void;
207
211
  targetOrigin: string;
@@ -211,6 +215,7 @@ interface PreviewProps {
211
215
  vercelProtectionBypass: string | null;
212
216
  previewUrlRef: PreviewUrlRef;
213
217
  handlesPerspectiveChange: boolean;
218
+ handlesVariantChange: boolean;
214
219
  }
215
220
  /** @public */
216
221
  interface PreviewHeaderProps extends PreviewProps {
@@ -1,3 +1,38 @@
1
+ /** @internal */
2
+ interface NavbarContextValue {
3
+ onSearchFullscreenOpenChange: (open: boolean) => void;
4
+ onSearchOpenChange: (open: boolean) => void;
5
+ searchFullscreenOpen: boolean;
6
+ searchFullscreenPortalEl: HTMLElement | null;
7
+ searchOpen: boolean;
8
+ }
9
+ /**
10
+ * The Studio Layout component is the root component of the Sanity Studio UI.
11
+ * It renders the navbar, the active tool, and the search modal as well as the error boundary.
12
+ *
13
+ * @public
14
+ * @returns A Studio Layout element that renders the navbar, the active tool, and the search modal as well as the error boundary
15
+ * @remarks This component should be used as a child component to the StudioProvider
16
+ * @example Rendering a Studio Layout
17
+ * ```ts
18
+ * <StudioProvider
19
+ * basePath={basePath}
20
+ * config={config}
21
+ * onSchemeChange={onSchemeChange}
22
+ * scheme={scheme}
23
+ * unstable_history={unstable_history}
24
+ * unstable_noAuthBoundary={unstable_noAuthBoundary}
25
+ * >
26
+ * <StudioLayout />
27
+ *</StudioProvider>
28
+ * ```
29
+ */
30
+ declare function StudioLayout(): import("react").JSX.Element;
31
+ /**
32
+ * @internal
33
+ * The default Studio Layout component
34
+ * */
35
+ declare function StudioLayoutComponent(): import("react").JSX.Element;
1
36
  /**
2
37
  * @internal
3
38
  */
@@ -16,4 +51,4 @@ interface EnhancedObjectDialogContextValue {
16
51
  * @deprecated This hook is no longer used and will be removed in a future release as we make the enhanced object dialog the default.
17
52
  */
18
53
  declare function useEnhancedObjectDialog(): EnhancedObjectDialogContextValue;
19
- export { useEnhancedObjectDialog as n, EnhancedObjectDialogContextValue as t };
54
+ export { StudioLayoutComponent as a, StudioLayout as i, useEnhancedObjectDialog as n, NavbarContextValue as r, EnhancedObjectDialogContextValue as t };
@@ -5,7 +5,7 @@ import { createConnectionMachine } from "@sanity/comlink";
5
5
  import { createCompatibilityActors } from "@sanity/presentation-comlink";
6
6
  import isEqual from "fast-deep-equal";
7
7
  import { useReducer, useState, useEffect, useDeferredValue, memo, useEffectEvent, startTransition } from "react";
8
- import { useProjectId, useDataset, RELEASES_STUDIO_CLIENT_OPTIONS, isReleasePerspective, useClient } from "sanity";
8
+ import { useProjectId, useDataset, VARIANTS_STUDIO_CLIENT_OPTIONS, RELEASES_STUDIO_CLIENT_OPTIONS, isReleasePerspective, useClient } from "sanity";
9
9
  import { LOADER_QUERY_GC_INTERVAL, API_VERSION, MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL } from "./presentation.js";
10
10
  import { toPlainText } from "@portabletext/react";
11
11
  import { isPortableTextBlock } from "@portabletext/toolkit";
@@ -69,8 +69,8 @@ const mapChangedValue = (changedValue, {
69
69
  }
70
70
  return changedValue;
71
71
  };
72
- function getQueryCacheKey(perspective, query, params) {
73
- return `${perspective}:${query}:${JSON.stringify(params)}`;
72
+ function getQueryCacheKey(perspective, variant, query, params) {
73
+ return `${perspective}:${variant ?? ""}:${query}:${JSON.stringify(params)}`;
74
74
  }
75
75
  function gc(state) {
76
76
  if (state.queries.size < 1)
@@ -90,10 +90,11 @@ function gc(state) {
90
90
  function queryListen(state, {
91
91
  payload
92
92
  }) {
93
- const key = getQueryCacheKey(payload.perspective, payload.query, payload.params), data = {
93
+ const key = getQueryCacheKey(payload.perspective, payload.variant, payload.query, payload.params), data = {
94
94
  query: payload.query,
95
95
  params: payload.params,
96
- perspective: payload.perspective
96
+ perspective: payload.perspective,
97
+ variant: payload.variant
97
98
  }, nextHeartbeats = new Map(state.heartbeats);
98
99
  nextHeartbeats.set(key, {
99
100
  receivedAt: Date.now(),
@@ -136,9 +137,10 @@ function useLiveQueries() {
136
137
  return $[2] !== queries ? (t2 = [queries, dispatch], $[2] = queries, $[3] = t2) : t2 = $[3], t2;
137
138
  }
138
139
  function LiveQueries(props) {
139
- const $ = c(28), {
140
+ const $ = c(30), {
140
141
  controller,
141
142
  perspective: activePerspective,
143
+ variant: activeVariant,
142
144
  onLoadersConnection,
143
145
  onDocumentsOnPage
144
146
  } = props, [comlink, setComlink] = useState(), [liveQueries, liveQueriesDispatch] = useLiveQueries(), projectId = useProjectId(), dataset = useDataset();
@@ -162,6 +164,7 @@ function LiveQueries(props) {
162
164
  type: "query-listen",
163
165
  payload: {
164
166
  perspective: data_0.perspective,
167
+ variant: data_0.variant || void 0,
165
168
  query: data_0.query,
166
169
  params: data_0.params,
167
170
  heartbeat: data_0.heartbeat ?? !1
@@ -173,43 +176,46 @@ function LiveQueries(props) {
173
176
  return _temp;
174
177
  }, t1 = [controller, dataset, liveQueriesDispatch, onDocumentsOnPage, onLoadersConnection, projectId], $[0] = controller, $[1] = dataset, $[2] = liveQueriesDispatch, $[3] = onDocumentsOnPage, $[4] = onLoadersConnection, $[5] = projectId, $[6] = t0, $[7] = t1) : (t0 = $[6], t1 = $[7]), useEffect(t0, t1);
175
178
  let t2;
176
- $[8] !== activePerspective ? (t2 = isReleasePerspective(activePerspective) ? RELEASES_STUDIO_CLIENT_OPTIONS : {
179
+ $[8] !== activePerspective || $[9] !== activeVariant ? (t2 = activeVariant ? VARIANTS_STUDIO_CLIENT_OPTIONS : isReleasePerspective(activePerspective) ? RELEASES_STUDIO_CLIENT_OPTIONS : {
177
180
  apiVersion: API_VERSION
178
- }, $[8] = activePerspective, $[9] = t2) : t2 = $[9];
181
+ }, $[8] = activePerspective, $[9] = activeVariant, $[10] = t2) : t2 = $[10];
179
182
  const studioClient = useClient(t2);
180
183
  let t3;
181
- $[10] !== studioClient ? (t3 = studioClient.withConfig({
184
+ $[11] !== studioClient ? (t3 = studioClient.withConfig({
182
185
  resultSourceMap: "withKeyArraySelector"
183
- }), $[10] = studioClient, $[11] = t3) : t3 = $[11];
186
+ }), $[11] = studioClient, $[12] = t3) : t3 = $[12];
184
187
  const client = t3;
185
188
  let t4, t5;
186
- $[12] !== activePerspective || $[13] !== comlink || $[14] !== dataset || $[15] !== projectId ? (t4 = () => {
189
+ $[13] !== activePerspective || $[14] !== activeVariant || $[15] !== comlink || $[16] !== dataset || $[17] !== projectId ? (t4 = () => {
187
190
  comlink && comlink.post("loader/perspective", {
188
191
  projectId,
189
192
  dataset,
190
- perspective: activePerspective
193
+ perspective: activePerspective,
194
+ variant: activeVariant
191
195
  });
192
- }, t5 = [comlink, activePerspective, projectId, dataset], $[12] = activePerspective, $[13] = comlink, $[14] = dataset, $[15] = projectId, $[16] = t4, $[17] = t5) : (t4 = $[16], t5 = $[17]), useEffect(t4, t5);
196
+ }, t5 = [comlink, activePerspective, activeVariant, projectId, dataset], $[13] = activePerspective, $[14] = activeVariant, $[15] = comlink, $[16] = dataset, $[17] = projectId, $[18] = t4, $[19] = t5) : (t4 = $[18], t5 = $[19]), useEffect(t4, t5);
193
197
  const liveDocument = useDeferredValue(props.liveDocument), liveEvents = useLiveEvents(client);
194
198
  let t6;
195
- $[18] !== liveQueries ? (t6 = [...liveQueries.entries()], $[18] = liveQueries, $[19] = t6) : t6 = $[19];
199
+ $[20] !== liveQueries ? (t6 = [...liveQueries.entries()], $[20] = liveQueries, $[21] = t6) : t6 = $[21];
196
200
  let t7;
197
- return $[20] !== client || $[21] !== comlink || $[22] !== dataset || $[23] !== liveDocument || $[24] !== liveEvents || $[25] !== projectId || $[26] !== t6 ? (t7 = /* @__PURE__ */ jsx(Fragment, { children: t6.map((t8) => {
201
+ return $[22] !== client || $[23] !== comlink || $[24] !== dataset || $[25] !== liveDocument || $[26] !== liveEvents || $[27] !== projectId || $[28] !== t6 ? (t7 = /* @__PURE__ */ jsx(Fragment, { children: t6.map((t8) => {
198
202
  const [key, t9] = t8, {
199
203
  query,
200
204
  params,
201
- perspective
205
+ perspective,
206
+ variant
202
207
  } = t9;
203
- return /* @__PURE__ */ jsx(QuerySubscription, { projectId, dataset, perspective, query, params, comlink, client, liveDocument, liveEventsMessages: liveEvents.messages }, `${liveEvents.resets}:${key}`);
204
- }) }), $[20] = client, $[21] = comlink, $[22] = dataset, $[23] = liveDocument, $[24] = liveEvents, $[25] = projectId, $[26] = t6, $[27] = t7) : t7 = $[27], t7;
208
+ return /* @__PURE__ */ jsx(QuerySubscription, { projectId, dataset, perspective, variant, query, params, comlink, client, liveDocument, liveEventsMessages: liveEvents.messages }, `${liveEvents.resets}:${key}`);
209
+ }) }), $[22] = client, $[23] = comlink, $[24] = dataset, $[25] = liveDocument, $[26] = liveEvents, $[27] = projectId, $[28] = t6, $[29] = t7) : t7 = $[29], t7;
205
210
  }
206
211
  function _temp() {
207
212
  }
208
213
  function QuerySubscriptionComponent(props) {
209
- const $ = c(20), {
214
+ const $ = c(22), {
210
215
  projectId,
211
216
  dataset,
212
217
  perspective,
218
+ variant,
213
219
  query,
214
220
  client,
215
221
  liveDocument,
@@ -225,15 +231,17 @@ function QuerySubscriptionComponent(props) {
225
231
  liveDocument,
226
232
  params,
227
233
  perspective,
234
+ variant,
228
235
  query,
229
236
  liveEventsMessages
230
237
  }) || {};
231
238
  let t0;
232
- $[0] !== dataset || $[1] !== projectId ? (t0 = (comlink_0, perspective_0, query_0, params_0, result_0, resultSourceMap_0, tags_0) => {
239
+ $[0] !== dataset || $[1] !== projectId ? (t0 = (comlink_0, perspective_0, variant_0, query_0, params_0, result_0, resultSourceMap_0, tags_0) => {
233
240
  comlink_0?.post("loader/query-change", {
234
241
  projectId,
235
242
  dataset,
236
243
  perspective: perspective_0,
244
+ variant: variant_0,
237
245
  query: query_0,
238
246
  params: params_0,
239
247
  result: result_0,
@@ -243,21 +251,22 @@ function QuerySubscriptionComponent(props) {
243
251
  }, $[0] = dataset, $[1] = projectId, $[2] = t0) : t0 = $[2];
244
252
  const handleQueryChange = useEffectEvent(t0);
245
253
  let t1;
246
- $[3] !== comlink || $[4] !== handleQueryChange || $[5] !== params || $[6] !== perspective || $[7] !== query || $[8] !== result || $[9] !== resultSourceMap || $[10] !== tags ? (t1 = () => {
247
- resultSourceMap && handleQueryChange(comlink, perspective, query, params, result, resultSourceMap, tags);
248
- }, $[3] = comlink, $[4] = handleQueryChange, $[5] = params, $[6] = perspective, $[7] = query, $[8] = result, $[9] = resultSourceMap, $[10] = tags, $[11] = t1) : t1 = $[11];
254
+ $[3] !== comlink || $[4] !== handleQueryChange || $[5] !== params || $[6] !== perspective || $[7] !== query || $[8] !== result || $[9] !== resultSourceMap || $[10] !== tags || $[11] !== variant ? (t1 = () => {
255
+ resultSourceMap && handleQueryChange(comlink, perspective, variant, query, params, result, resultSourceMap, tags);
256
+ }, $[3] = comlink, $[4] = handleQueryChange, $[5] = params, $[6] = perspective, $[7] = query, $[8] = result, $[9] = resultSourceMap, $[10] = tags, $[11] = variant, $[12] = t1) : t1 = $[12];
249
257
  let t2;
250
- return $[12] !== comlink || $[13] !== params || $[14] !== perspective || $[15] !== query || $[16] !== result || $[17] !== resultSourceMap || $[18] !== tags ? (t2 = [comlink, params, perspective, query, result, resultSourceMap, tags], $[12] = comlink, $[13] = params, $[14] = perspective, $[15] = query, $[16] = result, $[17] = resultSourceMap, $[18] = tags, $[19] = t2) : t2 = $[19], useEffect(t1, t2), null;
258
+ return $[13] !== comlink || $[14] !== params || $[15] !== perspective || $[16] !== query || $[17] !== result || $[18] !== resultSourceMap || $[19] !== tags || $[20] !== variant ? (t2 = [comlink, params, perspective, query, result, resultSourceMap, tags, variant], $[13] = comlink, $[14] = params, $[15] = perspective, $[16] = query, $[17] = result, $[18] = resultSourceMap, $[19] = tags, $[20] = variant, $[21] = t2) : t2 = $[21], useEffect(t1, t2), null;
251
259
  }
252
260
  const QuerySubscription = memo(QuerySubscriptionComponent);
253
261
  QuerySubscription.displayName = "Memo(QuerySubscription)";
254
262
  function useQuerySubscription(props) {
255
- const $ = c(30), {
263
+ const $ = c(31), {
256
264
  liveDocument,
257
- client,
265
+ client: _client,
258
266
  query,
259
267
  params,
260
268
  perspective,
269
+ variant,
261
270
  liveEventsMessages
262
271
  } = props, [result, setResult] = useState(null), [resultSourceMap, setResultSourceMap] = useState(null), [syncTags, setSyncTags] = useState(void 0);
263
272
  let t0;
@@ -276,13 +285,14 @@ function useQuerySubscription(props) {
276
285
  if (error)
277
286
  throw error;
278
287
  let t2, t3;
279
- $[10] !== client || $[11] !== lastLiveEventId || $[12] !== params || $[13] !== perspective || $[14] !== query ? (t2 = () => {
288
+ $[10] !== _client || $[11] !== lastLiveEventId || $[12] !== params || $[13] !== perspective || $[14] !== query || $[15] !== variant ? (t2 = () => {
280
289
  const controller = new AbortController();
281
- return client.fetch(query, params, {
290
+ return (variant ? _client.withConfig(VARIANTS_STUDIO_CLIENT_OPTIONS) : _client).fetch(query, params, {
282
291
  lastLiveEventId,
283
292
  tag: "presentation-loader",
284
293
  signal: controller.signal,
285
294
  perspective,
295
+ variant,
286
296
  filterResponse: !1,
287
297
  returnQuery: !1
288
298
  }).then((response) => {
@@ -294,26 +304,26 @@ function useQuerySubscription(props) {
294
304
  }), () => {
295
305
  controller.abort();
296
306
  };
297
- }, t3 = [client, lastLiveEventId, params, perspective, query], $[10] = client, $[11] = lastLiveEventId, $[12] = params, $[13] = perspective, $[14] = query, $[15] = t2, $[16] = t3) : (t2 = $[15], t3 = $[16]), useEffect(t2, t3);
307
+ }, t3 = [_client, lastLiveEventId, params, perspective, query, variant], $[10] = _client, $[11] = lastLiveEventId, $[12] = params, $[13] = perspective, $[14] = query, $[15] = variant, $[16] = t2, $[17] = t3) : (t2 = $[16], t3 = $[17]), useEffect(t2, t3);
298
308
  let t4;
299
309
  bb0: {
300
310
  if (liveDocument && resultSourceMap) {
301
311
  let t52;
302
- $[17] !== liveDocument || $[18] !== perspective || $[19] !== result || $[20] !== resultSourceMap ? (t52 = turboChargeResultIfSourceMap(liveDocument, result, perspective, resultSourceMap), $[17] = liveDocument, $[18] = perspective, $[19] = result, $[20] = resultSourceMap, $[21] = t52) : t52 = $[21];
312
+ $[18] !== liveDocument || $[19] !== perspective || $[20] !== result || $[21] !== resultSourceMap ? (t52 = turboChargeResultIfSourceMap(liveDocument, result, perspective, resultSourceMap), $[18] = liveDocument, $[19] = perspective, $[20] = result, $[21] = resultSourceMap, $[22] = t52) : t52 = $[22];
303
313
  let t6;
304
- $[22] !== resultSourceMap || $[23] !== syncTags || $[24] !== t52 ? (t6 = {
314
+ $[23] !== resultSourceMap || $[24] !== syncTags || $[25] !== t52 ? (t6 = {
305
315
  result: t52,
306
316
  resultSourceMap,
307
317
  syncTags
308
- }, $[22] = resultSourceMap, $[23] = syncTags, $[24] = t52, $[25] = t6) : t6 = $[25], t4 = t6;
318
+ }, $[23] = resultSourceMap, $[24] = syncTags, $[25] = t52, $[26] = t6) : t6 = $[26], t4 = t6;
309
319
  break bb0;
310
320
  }
311
321
  let t5;
312
- $[26] !== result || $[27] !== resultSourceMap || $[28] !== syncTags ? (t5 = {
322
+ $[27] !== result || $[28] !== resultSourceMap || $[29] !== syncTags ? (t5 = {
313
323
  result,
314
324
  resultSourceMap,
315
325
  syncTags
316
- }, $[26] = result, $[27] = resultSourceMap, $[28] = syncTags, $[29] = t5) : t5 = $[29], t4 = t5;
326
+ }, $[27] = result, $[28] = resultSourceMap, $[29] = syncTags, $[30] = t5) : t5 = $[30], t4 = t5;
317
327
  }
318
328
  return t4;
319
329
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LiveQueries.js","sources":["../../src/presentation/loader/useLiveEvents.ts","../../src/presentation/loader/utils.ts","../../src/presentation/loader/useLiveQueries.ts","../../src/presentation/loader/LiveQueries.tsx"],"sourcesContent":["import {type LiveEvent, type LiveEventMessage} from '@sanity/client'\nimport {useDeferredValue, useEffect, useReducer, useState} from 'react'\nimport {type SanityClient} from 'sanity'\n\ntype State = {\n /**\n * Growing list over live events with Sync Tags,\n * that can be used to refetch with Sanity Client, using the id as the lastLiveEventId parameter\n */\n messages: LiveEventMessage[]\n /**\n * If the connection experiences a reconnect, or a restart event is received, the counter is incremented.\n * This counter is suitable as a `key` on React Components as a way to reset its internal state and refetch.\n */\n resets: number\n}\n\nexport function reducer(state: State, event: LiveEvent): State {\n switch (event.type) {\n case 'message':\n return {\n ...state,\n messages: [...state.messages, event],\n }\n case 'reconnect':\n case 'restart':\n return {\n ...state,\n messages: [],\n resets: state.resets + 1,\n }\n case 'welcome':\n // no-op\n return state\n default:\n throw Error(\n `Unknown event: ${\n // oxlint-disable-next-line no-explicit-any\n (event as any).type\n }`,\n {cause: event},\n )\n }\n}\n\nexport const initialState: State = {\n messages: [],\n resets: 0,\n}\n\nexport function useLiveEvents(client: SanityClient): State {\n const [state, dispatch] = useReducer(reducer, initialState)\n const [error, setError] = useState<unknown>(null)\n if (error !== null) {\n // Push error to nearest error boundary\n throw error\n }\n\n useEffect(() => {\n const subscription = client.live\n .events({includeDrafts: true, tag: 'presentation-loader'})\n .subscribe({\n next: dispatch,\n error: (err) =>\n setError(\n err instanceof Error\n ? err\n : new Error('Unexpected error in useLiveEvents', {cause: err}),\n ),\n })\n return () => subscription.unsubscribe()\n }, [client.live])\n\n return useDeferredValue(state)\n}\n","import {toPlainText} from '@portabletext/react'\nimport {isPortableTextBlock} from '@portabletext/toolkit'\nimport {type ClientPerspective, type QueryParams} from '@sanity/client'\nimport {type ApplySourceDocumentsUpdateFunction} from '@sanity/client/csm'\nimport {type FIXME} from 'sanity'\n\n/**\n * Used by `applySourceDocuments`\n * @internal\n */\nexport const mapChangedValue: ApplySourceDocumentsUpdateFunction = (\n changedValue: FIXME,\n {previousValue},\n) => {\n if (typeof previousValue === 'string') {\n if (typeof changedValue === 'number') {\n // If the string() function was used in the query, we need to convert the source value to a string as well\n return `${changedValue}`\n }\n // If it's an array in the source, but a string in the query response, it could be pt::text\n if (Array.isArray(changedValue)) {\n if (changedValue.length === 0) {\n // If it's empty assume it's PT and return an empty string\n return ''\n }\n // If the array contains any valid block type, assume the GROQ initially used pt::text on it and do the same conversion\n if (changedValue.some((node) => typeof node === 'object' && isPortableTextBlock(node))) {\n return toPlainText(changedValue)\n }\n }\n }\n\n return changedValue\n}\n\n/**\n * @internal\n */\nexport type QueryCacheKey = `${string}:${string}:${string}`\n/**\n * @internal\n */\nexport function getQueryCacheKey(\n perspective: ClientPerspective,\n query: string,\n params: QueryParams,\n): QueryCacheKey {\n return `${perspective}:${query}:${JSON.stringify(params)}`\n}\n","import {type ClientPerspective} from '@sanity/client'\nimport isEqual from 'fast-deep-equal'\nimport {useDeferredValue, useEffect, useReducer} from 'react'\nimport {type QueryParams} from 'sanity'\n\nimport {LOADER_QUERY_GC_INTERVAL} from '../constants'\nimport {getQueryCacheKey, type QueryCacheKey} from './utils'\n\ntype LiveQueriesState = Map<\n QueryCacheKey,\n {\n query: string\n params: QueryParams\n perspective: ClientPerspective\n }\n>\n\ntype State = {\n queries: LiveQueriesState\n heartbeats: Map<\n QueryCacheKey,\n {\n receivedAt: number\n /**\n * If false it means the query can't safely be garbage collected,\n * as older versions of \\@sanity/core-loader doesn't fire listen events\n * on an interval.\n */\n heartbeat: number | false\n }\n >\n}\n\ntype QueryListenAction = {\n type: 'query-listen'\n payload: {\n perspective: ClientPerspective\n query: string\n params: QueryParams\n heartbeat: number | false\n }\n}\ntype GarbageCollectAction = {type: 'gc'}\ntype Action = QueryListenAction | GarbageCollectAction\n\nfunction gc(state: State): State {\n if (state.queries.size < 1) {\n return state\n }\n\n const now = Date.now()\n const hasAnyExpired = Array.from(state.heartbeats.values()).some(\n (entry) => entry.heartbeat !== false && now > entry.receivedAt + entry.heartbeat,\n )\n if (!hasAnyExpired) {\n return state\n }\n const nextHeartbeats = new Map()\n const nextQueries = new Map()\n for (const [key, entry] of state.heartbeats.entries()) {\n if (entry.heartbeat !== false && now > entry.receivedAt + entry.heartbeat) {\n continue\n }\n nextHeartbeats.set(key, entry)\n nextQueries.set(key, state.queries.get(key))\n }\n\n return {...state, queries: nextQueries, heartbeats: nextHeartbeats}\n}\nfunction queryListen(state: State, {payload}: QueryListenAction): State {\n const key = getQueryCacheKey(payload.perspective, payload.query, payload.params)\n const data = {query: payload.query, params: payload.params, perspective: payload.perspective}\n\n const nextHeartbeats = new Map(state.heartbeats)\n nextHeartbeats.set(key, {\n receivedAt: Date.now(),\n heartbeat: payload.heartbeat,\n })\n\n let nextQueries = state.queries\n /**\n * The data comes from a postMessage event, which uses the structured clone algorithm to serialize state (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#message).\n * This impacts `params`, which is an object, as it will be a new object every time even if the sender is sending the same object instance on their end.\n * It also impacts `perspective`, as it's no longer just a string, but can also be an array of strings.\n * Both cases are handled by fast-deep-equal, which is used to compare the data before deciding wether the state should be updated.\n */\n if (!state.queries.has(key) || !isEqual(state.queries.get(key), data)) {\n nextQueries = new Map(state.queries)\n nextQueries.set(key, data)\n }\n\n return {heartbeats: nextHeartbeats, queries: nextQueries}\n}\n\nexport function reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'query-listen':\n return queryListen(state, action)\n case 'gc':\n return gc(state)\n default:\n throw Error(\n `Unknown action: ${\n // oxlint-disable-next-line no-explicit-any\n (action as any).type\n }`,\n {cause: action},\n )\n }\n}\n\nexport const initialState: State = {\n queries: new Map(),\n heartbeats: new Map(),\n}\n\nexport function useLiveQueries(): [LiveQueriesState, React.ActionDispatch<[action: Action]>] {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n useEffect(() => {\n const interval = setInterval(() => dispatch({type: 'gc'}), LOADER_QUERY_GC_INTERVAL)\n return () => clearInterval(interval)\n }, [])\n\n const queries = useDeferredValue(state.queries)\n return [queries, dispatch]\n}\n","import {\n type ClientPerspective,\n type ContentSourceMap,\n type LiveEventMessage,\n type QueryParams,\n type SyncTag,\n} from '@sanity/client'\nimport {applySourceDocuments, getPublishedId} from '@sanity/client/csm'\nimport {\n type ChannelInstance,\n type Controller,\n createConnectionMachine,\n type StatusEvent,\n} from '@sanity/comlink'\nimport {\n createCompatibilityActors,\n type LoaderControllerMsg,\n type LoaderNodeMsg,\n} from '@sanity/presentation-comlink'\nimport isEqual from 'fast-deep-equal'\nimport {\n memo,\n startTransition,\n useDeferredValue,\n useEffect,\n useEffectEvent,\n useMemo,\n useState,\n} from 'react'\nimport {\n isReleasePerspective,\n RELEASES_STUDIO_CLIENT_OPTIONS,\n type SanityClient,\n type SanityDocument,\n useClient,\n useDataset,\n useProjectId,\n} from 'sanity'\n\nimport {API_VERSION, MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL} from '../constants'\nimport {type LoaderConnection, type PresentationPerspective} from '../types'\nimport {type DocumentOnPage} from '../useDocumentsOnPage'\nimport {useLiveEvents} from './useLiveEvents'\nimport {useLiveQueries} from './useLiveQueries'\nimport {mapChangedValue} from './utils'\n\nexport interface LiveQueriesProps {\n liveDocument: Partial<SanityDocument> | null | undefined\n controller: Controller | undefined\n perspective: ClientPerspective\n onLoadersConnection: (event: StatusEvent) => void\n onDocumentsOnPage: (\n key: string,\n perspective: PresentationPerspective,\n state: DocumentOnPage[],\n ) => void\n}\n\nexport default function LiveQueries(props: LiveQueriesProps): React.JSX.Element {\n const {controller, perspective: activePerspective, onLoadersConnection, onDocumentsOnPage} = props\n\n const [comlink, setComlink] = useState<ChannelInstance<LoaderControllerMsg, LoaderNodeMsg>>()\n const [liveQueries, liveQueriesDispatch] = useLiveQueries()\n\n const projectId = useProjectId()\n const dataset = useDataset()\n\n useEffect((): (() => void) => {\n if (controller) {\n const nextComlink = controller.createChannel<LoaderControllerMsg, LoaderNodeMsg>(\n {\n name: 'presentation',\n connectTo: 'loaders',\n heartbeat: true,\n },\n createConnectionMachine<LoaderControllerMsg, LoaderNodeMsg>().provide({\n actors: createCompatibilityActors<LoaderControllerMsg>(),\n }),\n )\n // oxlint-disable-next-line react/react-compiler\n setComlink(nextComlink)\n\n nextComlink.onStatus(onLoadersConnection)\n\n nextComlink.on('loader/documents', (data) => {\n if (data.projectId === projectId && data.dataset === dataset) {\n onDocumentsOnPage(\n 'loaders',\n // oxlint-disable-next-line no-explicit-any\n data.perspective as unknown as any,\n data.documents,\n )\n }\n })\n\n nextComlink.on('loader/query-listen', (data) => {\n if (data.projectId === projectId && data.dataset === dataset) {\n if (\n typeof data.heartbeat === 'number' &&\n data.heartbeat < MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL\n ) {\n throw new Error(\n `Loader query listen heartbeat interval must be at least ${MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL}ms`,\n )\n }\n liveQueriesDispatch({\n type: 'query-listen',\n payload: {\n perspective: data.perspective,\n query: data.query,\n params: data.params,\n heartbeat: data.heartbeat ?? false,\n },\n })\n }\n })\n\n return nextComlink.start()\n }\n return () => undefined\n }, [controller, dataset, liveQueriesDispatch, onDocumentsOnPage, onLoadersConnection, projectId])\n\n const studioClient = useClient(\n isReleasePerspective(activePerspective)\n ? RELEASES_STUDIO_CLIENT_OPTIONS\n : {apiVersion: API_VERSION},\n )\n const client = useMemo(\n () =>\n studioClient.withConfig({\n resultSourceMap: 'withKeyArraySelector',\n }),\n [studioClient],\n )\n useEffect(() => {\n if (comlink) {\n comlink.post('loader/perspective', {\n projectId,\n dataset,\n perspective: activePerspective,\n })\n }\n }, [comlink, activePerspective, projectId, dataset])\n\n /**\n * Defer the liveDocument to avoid unnecessary rerenders on rapid edits\n */\n const liveDocument = useDeferredValue(props.liveDocument)\n\n const liveEvents = useLiveEvents(client)\n\n return (\n <>\n {[...liveQueries.entries()].map(([key, {query, params, perspective}]) => (\n <QuerySubscription\n key={`${liveEvents.resets}:${key}`}\n projectId={projectId}\n dataset={dataset}\n perspective={perspective}\n query={query}\n params={params}\n comlink={comlink}\n client={client}\n liveDocument={liveDocument}\n liveEventsMessages={liveEvents.messages}\n />\n ))}\n </>\n )\n}\n\ninterface SharedProps {\n /**\n * The Sanity client to use for fetching data and listening to mutations.\n */\n client: SanityClient\n}\n\ninterface QuerySubscriptionProps extends Pick<\n UseQuerySubscriptionProps,\n 'client' | 'liveDocument' | 'liveEventsMessages'\n> {\n projectId: string\n dataset: string\n perspective: ClientPerspective\n query: string\n params: QueryParams\n comlink: LoaderConnection | undefined\n}\nfunction QuerySubscriptionComponent(props: QuerySubscriptionProps) {\n const {\n projectId,\n dataset,\n perspective,\n query,\n client,\n liveDocument,\n params,\n comlink,\n liveEventsMessages,\n } = props\n\n const {\n result,\n resultSourceMap,\n syncTags: tags,\n } = useQuerySubscription({\n client,\n liveDocument,\n params,\n perspective,\n query,\n liveEventsMessages,\n }) || {}\n\n const handleQueryChange = useEffectEvent(\n (\n comlink: LoaderConnection | undefined,\n perspective: ClientPerspective,\n query: string,\n params: QueryParams,\n result: unknown,\n resultSourceMap: ContentSourceMap | undefined,\n tags: `s1:${string}`[] | undefined,\n ) => {\n comlink?.post('loader/query-change', {\n projectId,\n dataset,\n perspective,\n query,\n params,\n result,\n resultSourceMap,\n tags,\n })\n },\n )\n\n useEffect(() => {\n if (resultSourceMap) {\n handleQueryChange(comlink, perspective, query, params, result, resultSourceMap, tags)\n }\n return undefined\n }, [comlink, params, perspective, query, result, resultSourceMap, tags])\n\n return null\n}\nconst QuerySubscription = memo(QuerySubscriptionComponent)\nQuerySubscription.displayName = 'Memo(QuerySubscription)'\n\ninterface UseQuerySubscriptionProps extends Required<Pick<SharedProps, 'client'>> {\n liveDocument: Partial<SanityDocument> | null | undefined\n query: string\n params: QueryParams\n perspective: ClientPerspective\n liveEventsMessages: LiveEventMessage[]\n}\nfunction useQuerySubscription(props: UseQuerySubscriptionProps) {\n const {liveDocument, client, query, params, perspective, liveEventsMessages} = props\n const [result, setResult] = useState<unknown>(null)\n const [resultSourceMap, setResultSourceMap] = useState<ContentSourceMap | null | undefined>(null)\n const [syncTags, setSyncTags] = useState<SyncTag[] | undefined>(undefined)\n const [skipEventIds] = useState(() => new Set(liveEventsMessages.map((msg) => msg.id)))\n const recentLiveEvents = liveEventsMessages.filter((msg) => !skipEventIds.has(msg.id))\n const lastLiveEvent = recentLiveEvents.findLast((msg) =>\n msg.tags.some((tag) => syncTags?.includes(tag)),\n )\n const lastLiveEventId = lastLiveEvent?.id\n\n // Make sure any async errors bubble up to the nearest error boundary\n const [error, setError] = useState<unknown>(null)\n if (error) throw error\n\n useEffect(() => {\n const controller = new AbortController()\n\n client\n .fetch(query, params, {\n lastLiveEventId,\n tag: 'presentation-loader',\n signal: controller.signal,\n perspective,\n filterResponse: false,\n returnQuery: false,\n })\n .then((response) => {\n startTransition(() => {\n setResult((prev: unknown) => (isEqual(prev, response.result) ? prev : response.result))\n setResultSourceMap((prev) =>\n isEqual(prev, response.resultSourceMap) ? prev : response.resultSourceMap,\n )\n setSyncTags((prev) => (isEqual(prev, response.syncTags) ? prev : response.syncTags))\n })\n })\n .catch((err) => {\n if (typeof err !== 'object' || err?.name !== 'AbortError') {\n setError(err)\n }\n })\n\n return () => {\n controller.abort()\n }\n }, [client, lastLiveEventId, params, perspective, query])\n\n return useMemo(() => {\n if (liveDocument && resultSourceMap) {\n return {\n result: turboChargeResultIfSourceMap(liveDocument, result, perspective, resultSourceMap),\n resultSourceMap,\n syncTags,\n }\n }\n return {result, resultSourceMap, syncTags}\n }, [liveDocument, perspective, result, resultSourceMap, syncTags])\n}\n\nexport function turboChargeResultIfSourceMap<T = unknown>(\n liveDocument: Partial<SanityDocument> | null | undefined,\n result: T,\n perspective: ClientPerspective,\n resultSourceMap?: ContentSourceMap,\n): T {\n if (perspective === 'raw') {\n throw new Error('turboChargeResultIfSourceMap does not support raw perspective')\n }\n return applySourceDocuments(\n result,\n resultSourceMap,\n (sourceDocument) => {\n // If there's a displayed document, always prefer it\n if (\n // If _projectId is set, it's a cross dataset reference and we should skip it\n !sourceDocument._projectId &&\n liveDocument?._id &&\n getPublishedId(liveDocument._id) === getPublishedId(sourceDocument._id)\n ) {\n if (typeof liveDocument._id === 'string' && typeof sourceDocument._type === 'string') {\n return liveDocument as unknown as Required<Pick<SanityDocument, '_id' | '_type'>>\n }\n return {\n ...liveDocument,\n _id: liveDocument._id || sourceDocument._id,\n _type: liveDocument._type || sourceDocument._type,\n }\n }\n return null\n },\n mapChangedValue,\n Array.isArray(perspective) ? perspective.filter(Boolean) : perspective,\n )\n}\n"],"names":["reducer","state","event","type","messages","resets","Error","cause","initialState","useLiveEvents","client","$","_c","dispatch","useReducer","error","setError","useState","t0","t1","live","subscription","events","includeDrafts","tag","subscribe","next","err","unsubscribe","useEffect","useDeferredValue","mapChangedValue","changedValue","previousValue","Array","isArray","length","some","node","isPortableTextBlock","toPlainText","getQueryCacheKey","perspective","query","params","JSON","stringify","gc","queries","size","now","Date","from","heartbeats","values","entry","heartbeat","receivedAt","nextHeartbeats","Map","nextQueries","key","entries","set","get","queryListen","payload","data","has","isEqual","action","useLiveQueries","Symbol","for","interval","setInterval","LOADER_QUERY_GC_INTERVAL","clearInterval","t2","LiveQueries","props","controller","activePerspective","onLoadersConnection","onDocumentsOnPage","comlink","setComlink","liveQueries","liveQueriesDispatch","projectId","useProjectId","dataset","useDataset","nextComlink","createChannel","name","connectTo","createConnectionMachine","provide","actors","createCompatibilityActors","onStatus","on","documents","data_0","MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL","start","_temp","isReleasePerspective","RELEASES_STUDIO_CLIENT_OPTIONS","apiVersion","API_VERSION","studioClient","useClient","t3","withConfig","resultSourceMap","t4","t5","post","liveDocument","liveEvents","t6","t7","map","t8","t9","QuerySubscriptionComponent","liveEventsMessages","result","syncTags","tags","useQuerySubscription","comlink_0","perspective_0","query_0","params_0","result_0","resultSourceMap_0","tags_0","handleQueryChange","useEffectEvent","QuerySubscription","memo","displayName","setResult","setResultSourceMap","setSyncTags","undefined","Set","_temp2","skipEventIds","msg_0","msg","id","recentLiveEvents","filter","msg_1","includes","findLast","lastLiveEventId","AbortController","fetch","signal","filterResponse","returnQuery","then","response","startTransition","prev","prev_0","prev_1","catch","abort","bb0","turboChargeResultIfSourceMap","applySourceDocuments","sourceDocument","_projectId","_id","getPublishedId","_type","Boolean"],"mappings":"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"}
1
+ {"version":3,"file":"LiveQueries.js","sources":["../../src/presentation/loader/useLiveEvents.ts","../../src/presentation/loader/utils.ts","../../src/presentation/loader/useLiveQueries.ts","../../src/presentation/loader/LiveQueries.tsx"],"sourcesContent":["import {type LiveEvent, type LiveEventMessage} from '@sanity/client'\nimport {useDeferredValue, useEffect, useReducer, useState} from 'react'\nimport {type SanityClient} from 'sanity'\n\ntype State = {\n /**\n * Growing list over live events with Sync Tags,\n * that can be used to refetch with Sanity Client, using the id as the lastLiveEventId parameter\n */\n messages: LiveEventMessage[]\n /**\n * If the connection experiences a reconnect, or a restart event is received, the counter is incremented.\n * This counter is suitable as a `key` on React Components as a way to reset its internal state and refetch.\n */\n resets: number\n}\n\nexport function reducer(state: State, event: LiveEvent): State {\n switch (event.type) {\n case 'message':\n return {\n ...state,\n messages: [...state.messages, event],\n }\n case 'reconnect':\n case 'restart':\n return {\n ...state,\n messages: [],\n resets: state.resets + 1,\n }\n case 'welcome':\n // no-op\n return state\n default:\n throw Error(\n `Unknown event: ${\n // oxlint-disable-next-line no-explicit-any\n (event as any).type\n }`,\n {cause: event},\n )\n }\n}\n\nexport const initialState: State = {\n messages: [],\n resets: 0,\n}\n\nexport function useLiveEvents(client: SanityClient): State {\n const [state, dispatch] = useReducer(reducer, initialState)\n const [error, setError] = useState<unknown>(null)\n if (error !== null) {\n // Push error to nearest error boundary\n throw error\n }\n\n useEffect(() => {\n const subscription = client.live\n .events({includeDrafts: true, tag: 'presentation-loader'})\n .subscribe({\n next: dispatch,\n error: (err) =>\n setError(\n err instanceof Error\n ? err\n : new Error('Unexpected error in useLiveEvents', {cause: err}),\n ),\n })\n return () => subscription.unsubscribe()\n }, [client.live])\n\n return useDeferredValue(state)\n}\n","import {toPlainText} from '@portabletext/react'\nimport {isPortableTextBlock} from '@portabletext/toolkit'\nimport {type ClientPerspective, type QueryParams} from '@sanity/client'\nimport {type ApplySourceDocumentsUpdateFunction} from '@sanity/client/csm'\nimport {type FIXME} from 'sanity'\n\n/**\n * Used by `applySourceDocuments`\n * @internal\n */\nexport const mapChangedValue: ApplySourceDocumentsUpdateFunction = (\n changedValue: FIXME,\n {previousValue},\n) => {\n if (typeof previousValue === 'string') {\n if (typeof changedValue === 'number') {\n // If the string() function was used in the query, we need to convert the source value to a string as well\n return `${changedValue}`\n }\n // If it's an array in the source, but a string in the query response, it could be pt::text\n if (Array.isArray(changedValue)) {\n if (changedValue.length === 0) {\n // If it's empty assume it's PT and return an empty string\n return ''\n }\n // If the array contains any valid block type, assume the GROQ initially used pt::text on it and do the same conversion\n if (changedValue.some((node) => typeof node === 'object' && isPortableTextBlock(node))) {\n return toPlainText(changedValue)\n }\n }\n }\n\n return changedValue\n}\n\n/**\n * @internal\n */\nexport type QueryCacheKey = `${string}:${string}:${string}:${string}`\n/**\n * @internal\n */\nexport function getQueryCacheKey(\n perspective: ClientPerspective,\n variant: string | undefined,\n query: string,\n params: QueryParams,\n): QueryCacheKey {\n return `${perspective}:${variant ?? ''}:${query}:${JSON.stringify(params)}`\n}\n","import {type ClientPerspective} from '@sanity/client'\nimport isEqual from 'fast-deep-equal'\nimport {useDeferredValue, useEffect, useReducer} from 'react'\nimport {type QueryParams} from 'sanity'\n\nimport {LOADER_QUERY_GC_INTERVAL} from '../constants'\nimport {getQueryCacheKey, type QueryCacheKey} from './utils'\n\ntype LiveQueriesState = Map<\n QueryCacheKey,\n {\n query: string\n params: QueryParams\n perspective: ClientPerspective\n /**\n * The editing variant the loader asked for (bare variant id), if any. Loaders that predate\n * variants never send one.\n */\n variant: string | undefined\n }\n>\n\ntype State = {\n queries: LiveQueriesState\n heartbeats: Map<\n QueryCacheKey,\n {\n receivedAt: number\n /**\n * If false it means the query can't safely be garbage collected,\n * as older versions of \\@sanity/core-loader doesn't fire listen events\n * on an interval.\n */\n heartbeat: number | false\n }\n >\n}\n\ntype QueryListenAction = {\n type: 'query-listen'\n payload: {\n perspective: ClientPerspective\n variant: string | undefined\n query: string\n params: QueryParams\n heartbeat: number | false\n }\n}\ntype GarbageCollectAction = {type: 'gc'}\ntype Action = QueryListenAction | GarbageCollectAction\n\nfunction gc(state: State): State {\n if (state.queries.size < 1) {\n return state\n }\n\n const now = Date.now()\n const hasAnyExpired = Array.from(state.heartbeats.values()).some(\n (entry) => entry.heartbeat !== false && now > entry.receivedAt + entry.heartbeat,\n )\n if (!hasAnyExpired) {\n return state\n }\n const nextHeartbeats = new Map()\n const nextQueries = new Map()\n for (const [key, entry] of state.heartbeats.entries()) {\n if (entry.heartbeat !== false && now > entry.receivedAt + entry.heartbeat) {\n continue\n }\n nextHeartbeats.set(key, entry)\n nextQueries.set(key, state.queries.get(key))\n }\n\n return {...state, queries: nextQueries, heartbeats: nextHeartbeats}\n}\nfunction queryListen(state: State, {payload}: QueryListenAction): State {\n const key = getQueryCacheKey(payload.perspective, payload.variant, payload.query, payload.params)\n const data = {\n query: payload.query,\n params: payload.params,\n perspective: payload.perspective,\n variant: payload.variant,\n }\n\n const nextHeartbeats = new Map(state.heartbeats)\n nextHeartbeats.set(key, {\n receivedAt: Date.now(),\n heartbeat: payload.heartbeat,\n })\n\n let nextQueries = state.queries\n /**\n * The data comes from a postMessage event, which uses the structured clone algorithm to serialize state (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#message).\n * This impacts `params`, which is an object, as it will be a new object every time even if the sender is sending the same object instance on their end.\n * It also impacts `perspective`, as it's no longer just a string, but can also be an array of strings.\n * Both cases are handled by fast-deep-equal, which is used to compare the data before deciding wether the state should be updated.\n */\n if (!state.queries.has(key) || !isEqual(state.queries.get(key), data)) {\n nextQueries = new Map(state.queries)\n nextQueries.set(key, data)\n }\n\n return {heartbeats: nextHeartbeats, queries: nextQueries}\n}\n\nexport function reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'query-listen':\n return queryListen(state, action)\n case 'gc':\n return gc(state)\n default:\n throw Error(\n `Unknown action: ${\n // oxlint-disable-next-line no-explicit-any\n (action as any).type\n }`,\n {cause: action},\n )\n }\n}\n\nexport const initialState: State = {\n queries: new Map(),\n heartbeats: new Map(),\n}\n\nexport function useLiveQueries(): [LiveQueriesState, React.ActionDispatch<[action: Action]>] {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n useEffect(() => {\n const interval = setInterval(() => dispatch({type: 'gc'}), LOADER_QUERY_GC_INTERVAL)\n return () => clearInterval(interval)\n }, [])\n\n const queries = useDeferredValue(state.queries)\n return [queries, dispatch]\n}\n","import {\n type ClientPerspective,\n type ContentSourceMap,\n type LiveEventMessage,\n type QueryParams,\n type SyncTag,\n} from '@sanity/client'\nimport {applySourceDocuments, getPublishedId} from '@sanity/client/csm'\nimport {\n type ChannelInstance,\n type Controller,\n createConnectionMachine,\n type StatusEvent,\n} from '@sanity/comlink'\nimport {\n createCompatibilityActors,\n type LoaderControllerMsg,\n type LoaderNodeMsg,\n} from '@sanity/presentation-comlink'\nimport isEqual from 'fast-deep-equal'\nimport {\n memo,\n startTransition,\n useDeferredValue,\n useEffect,\n useEffectEvent,\n useMemo,\n useState,\n} from 'react'\nimport {\n isReleasePerspective,\n RELEASES_STUDIO_CLIENT_OPTIONS,\n type SanityClient,\n type SanityDocument,\n useClient,\n useDataset,\n useProjectId,\n VARIANTS_STUDIO_CLIENT_OPTIONS,\n} from 'sanity'\n\nimport {API_VERSION, MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL} from '../constants'\nimport {type LoaderConnection, type PresentationPerspective} from '../types'\nimport {type DocumentOnPage} from '../useDocumentsOnPage'\nimport {useLiveEvents} from './useLiveEvents'\nimport {useLiveQueries} from './useLiveQueries'\nimport {mapChangedValue} from './utils'\n\nexport interface LiveQueriesProps {\n liveDocument: Partial<SanityDocument> | null | undefined\n controller: Controller | undefined\n perspective: ClientPerspective\n /**\n * The selected editing variant as a bare variant id, or `undefined` when no variant is selected\n */\n variant: string | undefined\n onLoadersConnection: (event: StatusEvent) => void\n onDocumentsOnPage: (\n key: string,\n perspective: PresentationPerspective,\n state: DocumentOnPage[],\n ) => void\n}\n\nexport default function LiveQueries(props: LiveQueriesProps): React.JSX.Element {\n const {\n controller,\n perspective: activePerspective,\n variant: activeVariant,\n onLoadersConnection,\n onDocumentsOnPage,\n } = props\n\n const [comlink, setComlink] = useState<ChannelInstance<LoaderControllerMsg, LoaderNodeMsg>>()\n const [liveQueries, liveQueriesDispatch] = useLiveQueries()\n\n const projectId = useProjectId()\n const dataset = useDataset()\n\n useEffect((): (() => void) => {\n if (controller) {\n const nextComlink = controller.createChannel<LoaderControllerMsg, LoaderNodeMsg>(\n {\n name: 'presentation',\n connectTo: 'loaders',\n heartbeat: true,\n },\n createConnectionMachine<LoaderControllerMsg, LoaderNodeMsg>().provide({\n actors: createCompatibilityActors<LoaderControllerMsg>(),\n }),\n )\n // oxlint-disable-next-line react/react-compiler\n setComlink(nextComlink)\n\n nextComlink.onStatus(onLoadersConnection)\n\n nextComlink.on('loader/documents', (data) => {\n if (data.projectId === projectId && data.dataset === dataset) {\n onDocumentsOnPage(\n 'loaders',\n // oxlint-disable-next-line no-explicit-any\n data.perspective as unknown as any,\n data.documents,\n )\n }\n })\n\n nextComlink.on('loader/query-listen', (data) => {\n if (data.projectId === projectId && data.dataset === dataset) {\n if (\n typeof data.heartbeat === 'number' &&\n data.heartbeat < MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL\n ) {\n throw new Error(\n `Loader query listen heartbeat interval must be at least ${MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL}ms`,\n )\n }\n liveQueriesDispatch({\n type: 'query-listen',\n payload: {\n perspective: data.perspective,\n // Round-tripped from the loader, like perspective: fetches use exactly what the\n // subscription registered so results and cache keys stay coherent on both sides\n // while re-registrations propagate after a variant switch\n variant: data.variant || undefined,\n query: data.query,\n params: data.params,\n heartbeat: data.heartbeat ?? false,\n },\n })\n }\n })\n\n return nextComlink.start()\n }\n return () => undefined\n }, [controller, dataset, liveQueriesDispatch, onDocumentsOnPage, onLoadersConnection, projectId])\n\n const studioClient = useClient(\n // Fetching with a variant requires the `vX` API version for now\n activeVariant\n ? VARIANTS_STUDIO_CLIENT_OPTIONS\n : isReleasePerspective(activePerspective)\n ? RELEASES_STUDIO_CLIENT_OPTIONS\n : {apiVersion: API_VERSION},\n )\n\n const client = useMemo(\n () =>\n studioClient.withConfig({\n resultSourceMap: 'withKeyArraySelector',\n }),\n [studioClient],\n )\n useEffect(() => {\n if (comlink) {\n comlink.post('loader/perspective', {\n projectId,\n dataset,\n perspective: activePerspective,\n variant: activeVariant,\n })\n }\n }, [comlink, activePerspective, activeVariant, projectId, dataset])\n\n /**\n * Defer the liveDocument to avoid unnecessary rerenders on rapid edits\n */\n const liveDocument = useDeferredValue(props.liveDocument)\n\n const liveEvents = useLiveEvents(client)\n\n return (\n <>\n {[...liveQueries.entries()].map(([key, {query, params, perspective, variant}]) => (\n <QuerySubscription\n key={`${liveEvents.resets}:${key}`}\n projectId={projectId}\n dataset={dataset}\n perspective={perspective}\n variant={variant}\n query={query}\n params={params}\n comlink={comlink}\n client={client}\n liveDocument={liveDocument}\n liveEventsMessages={liveEvents.messages}\n />\n ))}\n </>\n )\n}\n\ninterface SharedProps {\n /**\n * The Sanity client to use for fetching data and listening to mutations.\n */\n client: SanityClient\n}\n\ninterface QuerySubscriptionProps extends Pick<\n UseQuerySubscriptionProps,\n 'client' | 'liveDocument' | 'liveEventsMessages'\n> {\n projectId: string\n dataset: string\n perspective: ClientPerspective\n variant: string | undefined\n query: string\n params: QueryParams\n comlink: LoaderConnection | undefined\n}\nfunction QuerySubscriptionComponent(props: QuerySubscriptionProps) {\n const {\n projectId,\n dataset,\n perspective,\n variant,\n query,\n client,\n liveDocument,\n params,\n comlink,\n liveEventsMessages,\n } = props\n\n const {\n result,\n resultSourceMap,\n syncTags: tags,\n } = useQuerySubscription({\n client,\n liveDocument,\n params,\n perspective,\n variant,\n query,\n liveEventsMessages,\n }) || {}\n\n const handleQueryChange = useEffectEvent(\n (\n comlink: LoaderConnection | undefined,\n perspective: ClientPerspective,\n variant: string | undefined,\n query: string,\n params: QueryParams,\n result: unknown,\n resultSourceMap: ContentSourceMap | undefined,\n tags: `s1:${string}`[] | undefined,\n ) => {\n comlink?.post('loader/query-change', {\n projectId,\n dataset,\n perspective,\n variant,\n query,\n params,\n result,\n resultSourceMap,\n tags,\n })\n },\n )\n\n useEffect(() => {\n if (resultSourceMap) {\n handleQueryChange(comlink, perspective, variant, query, params, result, resultSourceMap, tags)\n }\n return undefined\n }, [comlink, params, perspective, query, result, resultSourceMap, tags, variant])\n\n return null\n}\nconst QuerySubscription = memo(QuerySubscriptionComponent)\nQuerySubscription.displayName = 'Memo(QuerySubscription)'\n\ninterface UseQuerySubscriptionProps extends Required<Pick<SharedProps, 'client'>> {\n liveDocument: Partial<SanityDocument> | null | undefined\n query: string\n params: QueryParams\n perspective: ClientPerspective\n variant: string | undefined\n liveEventsMessages: LiveEventMessage[]\n}\nfunction useQuerySubscription(props: UseQuerySubscriptionProps) {\n const {\n liveDocument,\n client: _client,\n query,\n params,\n perspective,\n variant,\n liveEventsMessages,\n } = props\n const [result, setResult] = useState<unknown>(null)\n const [resultSourceMap, setResultSourceMap] = useState<ContentSourceMap | null | undefined>(null)\n const [syncTags, setSyncTags] = useState<SyncTag[] | undefined>(undefined)\n const [skipEventIds] = useState(() => new Set(liveEventsMessages.map((msg) => msg.id)))\n const recentLiveEvents = liveEventsMessages.filter((msg) => !skipEventIds.has(msg.id))\n const lastLiveEvent = recentLiveEvents.findLast((msg) =>\n msg.tags.some((tag) => syncTags?.includes(tag)),\n )\n const lastLiveEventId = lastLiveEvent?.id\n\n // Make sure any async errors bubble up to the nearest error boundary\n const [error, setError] = useState<unknown>(null)\n if (error) throw error\n\n useEffect(() => {\n const controller = new AbortController()\n\n // Parent client follows activeVariant synchronously; per-query variant comes from loader/query-listen and lags.\n // Without this, a client downgrade can run a fetch that still passes variant, which the dated API rejects.\n // Once we have a dated api for variants we can update the default API_VERSION we use for all clients in presentation\n const client = variant ? _client.withConfig(VARIANTS_STUDIO_CLIENT_OPTIONS) : _client\n\n client\n .fetch(query, params, {\n lastLiveEventId,\n tag: 'presentation-loader',\n signal: controller.signal,\n perspective,\n variant,\n filterResponse: false,\n returnQuery: false,\n })\n .then((response) => {\n startTransition(() => {\n setResult((prev: unknown) => (isEqual(prev, response.result) ? prev : response.result))\n setResultSourceMap((prev) =>\n isEqual(prev, response.resultSourceMap) ? prev : response.resultSourceMap,\n )\n setSyncTags((prev) => (isEqual(prev, response.syncTags) ? prev : response.syncTags))\n })\n })\n .catch((err) => {\n if (typeof err !== 'object' || err?.name !== 'AbortError') {\n setError(err)\n }\n })\n\n return () => {\n controller.abort()\n }\n }, [_client, lastLiveEventId, params, perspective, query, variant])\n\n return useMemo(() => {\n if (liveDocument && resultSourceMap) {\n return {\n result: turboChargeResultIfSourceMap(liveDocument, result, perspective, resultSourceMap),\n resultSourceMap,\n syncTags,\n }\n }\n return {result, resultSourceMap, syncTags}\n }, [liveDocument, perspective, result, resultSourceMap, syncTags])\n}\n\nexport function turboChargeResultIfSourceMap<T = unknown>(\n liveDocument: Partial<SanityDocument> | null | undefined,\n result: T,\n perspective: ClientPerspective,\n resultSourceMap?: ContentSourceMap,\n): T {\n if (perspective === 'raw') {\n throw new Error('turboChargeResultIfSourceMap does not support raw perspective')\n }\n return applySourceDocuments(\n result,\n resultSourceMap,\n (sourceDocument) => {\n // If there's a displayed document, always prefer it\n if (\n // If _projectId is set, it's a cross dataset reference and we should skip it\n !sourceDocument._projectId &&\n liveDocument?._id &&\n getPublishedId(liveDocument._id) === getPublishedId(sourceDocument._id)\n ) {\n if (typeof liveDocument._id === 'string' && typeof sourceDocument._type === 'string') {\n return liveDocument as unknown as Required<Pick<SanityDocument, '_id' | '_type'>>\n }\n return {\n ...liveDocument,\n _id: liveDocument._id || sourceDocument._id,\n _type: liveDocument._type || sourceDocument._type,\n }\n }\n return null\n },\n mapChangedValue,\n Array.isArray(perspective) ? perspective.filter(Boolean) : perspective,\n )\n}\n"],"names":["reducer","state","event","type","messages","resets","Error","cause","initialState","useLiveEvents","client","$","_c","dispatch","useReducer","error","setError","useState","t0","t1","live","subscription","events","includeDrafts","tag","subscribe","next","err","unsubscribe","useEffect","useDeferredValue","mapChangedValue","changedValue","previousValue","Array","isArray","length","some","node","isPortableTextBlock","toPlainText","getQueryCacheKey","perspective","variant","query","params","JSON","stringify","gc","queries","size","now","Date","from","heartbeats","values","entry","heartbeat","receivedAt","nextHeartbeats","Map","nextQueries","key","entries","set","get","queryListen","payload","data","has","isEqual","action","useLiveQueries","Symbol","for","interval","setInterval","LOADER_QUERY_GC_INTERVAL","clearInterval","t2","LiveQueries","props","controller","activePerspective","activeVariant","onLoadersConnection","onDocumentsOnPage","comlink","setComlink","liveQueries","liveQueriesDispatch","projectId","useProjectId","dataset","useDataset","nextComlink","createChannel","name","connectTo","createConnectionMachine","provide","actors","createCompatibilityActors","onStatus","on","documents","data_0","MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL","undefined","start","_temp","VARIANTS_STUDIO_CLIENT_OPTIONS","isReleasePerspective","RELEASES_STUDIO_CLIENT_OPTIONS","apiVersion","API_VERSION","studioClient","useClient","t3","withConfig","resultSourceMap","t4","t5","post","liveDocument","liveEvents","t6","t7","map","t8","t9","QuerySubscriptionComponent","liveEventsMessages","result","syncTags","tags","useQuerySubscription","comlink_0","perspective_0","variant_0","query_0","params_0","result_0","resultSourceMap_0","tags_0","handleQueryChange","useEffectEvent","QuerySubscription","memo","displayName","_client","setResult","setResultSourceMap","setSyncTags","Set","_temp2","skipEventIds","msg_0","msg","id","recentLiveEvents","filter","msg_1","includes","findLast","lastLiveEventId","AbortController","fetch","signal","filterResponse","returnQuery","then","response","startTransition","prev","prev_0","prev_1","catch","abort","bb0","turboChargeResultIfSourceMap","applySourceDocuments","sourceDocument","_projectId","_id","getPublishedId","_type","Boolean"],"mappings":";;;;;;;;;;;AAiBO,SAASA,UAAQC,OAAcC,OAAyB;AAC7D,UAAQA,MAAMC,MAAAA;AAAAA,IACZ,KAAK;AACH,aAAO;AAAA,QACL,GAAGF;AAAAA,QACHG,UAAU,CAAC,GAAGH,MAAMG,UAAUF,KAAK;AAAA,MAAA;AAAA,IAEvC,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,QACL,GAAGD;AAAAA,QACHG,UAAU,CAAA;AAAA,QACVC,QAAQJ,MAAMI,SAAS;AAAA,MAAA;AAAA,IAE3B,KAAK;AAEH,aAAOJ;AAAAA,IACT;AACE,YAAMK,MACJ;AAAA,MAEGJ,MAAcC,IAAI,IAErB;AAAA,QAACI,OAAOL;AAAAA,MAAAA,CACV;AAAA,EAAA;AAEN;AAEO,MAAMM,iBAAsB;AAAA,EACjCJ,UAAU,CAAA;AAAA,EACVC,QAAQ;AACV;AAEO,SAAAI,cAAAC,QAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACL,CAAAX,OAAAY,QAAA,IAA0BC,WAAWd,WAASQ,cAAY,GAC1D,CAAAO,OAAAC,QAAA,IAA0BC,SAAkB,IAAI;AAChD,MAAIF,UAAU;AAEZ,UAAMA;AACP,MAAAG,IAAAC;AAAA,SAAAR,EAAA,CAAA,MAAAD,OAAAU,QAESF,KAAAA,MAAA;AACR,UAAAG,eAAqBX,OAAMU,KAAKE,OACtB;AAAA,MAAAC,eAAgB;AAAA,MAAIC,KAAO;AAAA,IAAA,CAAsB,EAACC,UAC/C;AAAA,MAAAC,MACHb;AAAAA,MAAQE,OACPY,SACLX,SACEW,eAAerB,QAAfqB,MAAA,IAEQrB,MAAM,qCAAqC;AAAA,QAAAC,OAAQoB;AAAAA,MAAAA,CAAI,CACjE;AAAA,IAAA,CACH;AAAC,WACG,MAAMN,aAAYO,YAAAA;AAAAA,EAAc,GACtCT,KAAA,CAACT,OAAMU,IAAK,GAACT,EAAA,CAAA,IAAAD,OAAAU,MAAAT,OAAAO,IAAAP,OAAAQ,OAAAD,KAAAP,EAAA,CAAA,GAAAQ,KAAAR,EAAA,CAAA,IAbhBkB,UAAUX,IAaPC,EAAa,GAETW,iBAAiB7B,KAAK;AAAC;AC/DzB,MAAM8B,kBAAsDA,CACjEC,cACA;AAAA,EAACC;AAAa,MACX;AACH,MAAI,OAAOA,iBAAkB,UAAU;AACrC,QAAI,OAAOD,gBAAiB;AAE1B,aAAO,GAAGA,YAAY;AAGxB,QAAIE,MAAMC,QAAQH,YAAY,GAAG;AAC/B,UAAIA,aAAaI,WAAW;AAE1B,eAAO;AAGT,UAAIJ,aAAaK,KAAMC,CAAAA,SAAS,OAAOA,QAAS,YAAYC,oBAAoBD,IAAI,CAAC;AACnF,eAAOE,YAAYR,YAAY;AAAA,IAEnC;AAAA,EACF;AAEA,SAAOA;AACT;AASO,SAASS,iBACdC,aACAC,SACAC,OACAC,QACe;AACf,SAAO,GAAGH,WAAW,IAAIC,WAAW,EAAE,IAAIC,KAAK,IAAIE,KAAKC,UAAUF,MAAM,CAAC;AAC3E;ACEA,SAASG,GAAG/C,OAAqB;AAC/B,MAAIA,MAAMgD,QAAQC,OAAO;AACvB,WAAOjD;AAGT,QAAMkD,MAAMC,KAAKD,IAAAA;AAIjB,MAAI,CAHkBjB,MAAMmB,KAAKpD,MAAMqD,WAAWC,QAAQ,EAAElB,KACzDmB,CAAAA,UAAUA,MAAMC,cAAc,MAASN,MAAMK,MAAME,aAAaF,MAAMC,SACzE;AAEE,WAAOxD;AAET,QAAM0D,iBAAiB,oBAAIC,IAAAA,GACrBC,kCAAkBD,IAAAA;AACxB,aAAW,CAACE,KAAKN,KAAK,KAAKvD,MAAMqD,WAAWS,QAAAA;AACtCP,UAAMC,cAAc,MAASN,MAAMK,MAAME,aAAaF,MAAMC,cAGhEE,eAAeK,IAAIF,KAAKN,KAAK,GAC7BK,YAAYG,IAAIF,KAAK7D,MAAMgD,QAAQgB,IAAIH,GAAG,CAAC;AAG7C,SAAO;AAAA,IAAC,GAAG7D;AAAAA,IAAOgD,SAASY;AAAAA,IAAaP,YAAYK;AAAAA,EAAAA;AACtD;AACA,SAASO,YAAYjE,OAAc;AAAA,EAACkE;AAA0B,GAAU;AACtE,QAAML,MAAMrB,iBAAiB0B,QAAQzB,aAAayB,QAAQxB,SAASwB,QAAQvB,OAAOuB,QAAQtB,MAAM,GAC1FuB,OAAO;AAAA,IACXxB,OAAOuB,QAAQvB;AAAAA,IACfC,QAAQsB,QAAQtB;AAAAA,IAChBH,aAAayB,QAAQzB;AAAAA,IACrBC,SAASwB,QAAQxB;AAAAA,EAAAA,GAGbgB,iBAAiB,IAAIC,IAAI3D,MAAMqD,UAAU;AAC/CK,iBAAeK,IAAIF,KAAK;AAAA,IACtBJ,YAAYN,KAAKD,IAAAA;AAAAA,IACjBM,WAAWU,QAAQV;AAAAA,EAAAA,CACpB;AAED,MAAII,cAAc5D,MAAMgD;AAOxB,UAAI,CAAChD,MAAMgD,QAAQoB,IAAIP,GAAG,KAAK,CAACQ,QAAQrE,MAAMgD,QAAQgB,IAAIH,GAAG,GAAGM,IAAI,OAClEP,cAAc,IAAID,IAAI3D,MAAMgD,OAAO,GACnCY,YAAYG,IAAIF,KAAKM,IAAI,IAGpB;AAAA,IAACd,YAAYK;AAAAA,IAAgBV,SAASY;AAAAA,EAAAA;AAC/C;AAEO,SAAS7D,QAAQC,OAAcsE,QAAuB;AAC3D,UAAQA,OAAOpE,MAAAA;AAAAA,IACb,KAAK;AACH,aAAO+D,YAAYjE,OAAOsE,MAAM;AAAA,IAClC,KAAK;AACH,aAAOvB,GAAG/C,KAAK;AAAA,IACjB;AACE,YAAMK,MACJ;AAAA,MAEGiE,OAAepE,IAAI,IAEtB;AAAA,QAACI,OAAOgE;AAAAA,MAAAA,CACV;AAAA,EAAA;AAEN;AAEO,MAAM/D,eAAsB;AAAA,EACjCyC,6BAAaW,IAAAA;AAAAA,EACbN,gCAAgBM,IAAAA;AAClB;AAEO,SAAAY,iBAAA;AAAA,QAAA7D,IAAAC,EAAA,CAAA,GACL,CAAAX,OAAAY,QAAA,IAA0BC,WAAWd,SAASQ,YAAY;AAAC,MAAAU,IAAAC;AAAAR,IAAA,CAAA,MAAA8D,uBAAAC,IAAA,2BAAA,KAEjDxD,KAAAA,MAAA;AACR,UAAAyD,WAAiBC,YAAY,MAAM/D,SAAS;AAAA,MAAAV,MAAO;AAAA,IAAA,CAAK,GAAG0E,wBAAwB;AAAC,WAC7E,MAAMC,cAAcH,QAAQ;AAAA,EAAC,GACnCxD,KAAA,CAAA,GAAER,OAAAO,IAAAP,OAAAQ,OAAAD,KAAAP,EAAA,CAAA,GAAAQ,KAAAR,EAAA,CAAA,IAHLkB,UAAUX,IAGPC,EAAE;AAEL,QAAA8B,UAAgBnB,iBAAiB7B,MAAKgD,OAAQ;AAAC,MAAA8B;AAAA,SAAApE,SAAAsC,WACxC8B,KAAA,CAAC9B,SAASpC,QAAQ,GAACF,OAAAsC,SAAAtC,OAAAoE,MAAAA,KAAApE,EAAA,CAAA,GAAnBoE;AAAmB;ACzE5B,SAAeC,YAAAC,OAAA;AAAA,QAAAtE,IAAAC,EAAA,EAAA,GACb;AAAA,IAAAsE;AAAAA,IAAAxC,aAAAyC;AAAAA,IAAAxC,SAAAyC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAMIL,OAEJ,CAAAM,SAAAC,UAAA,IAA8BvE,YAC9B,CAAAwE,aAAAC,mBAAA,IAA2ClB,eAAAA,GAE3CmB,YAAkBC,aAAAA,GAClBC,UAAgBC,WAAAA;AAAY,MAAA5E,IAAAC;AAAAR,WAAAuE,cAAAvE,EAAA,CAAA,MAAAkF,WAAAlF,EAAA,CAAA,MAAA+E,uBAAA/E,EAAA,CAAA,MAAA2E,qBAAA3E,SAAA0E,uBAAA1E,EAAA,CAAA,MAAAgF,aAElBzE,KAAAA,MAAA;AACR,QAAIgE,YAAU;AACZ,YAAAa,cAAoBb,WAAUc,cAC5B;AAAA,QAAAC,MACQ;AAAA,QAAcC,WACT;AAAA,QAASzC,WACT;AAAA,MAAA,GAEb0C,wBAAAA,EAA6DC,QAAS;AAAA,QAAAC,QAC5DC,0BAAAA;AAAAA,MAA+C,CACxD,CACH;AAEAd,aAAAA,WAAWO,WAAW,GAEtBA,YAAWQ,SAAUlB,mBAAmB,GAExCU,YAAWS,GAAI,oBAAoBpC,CAAAA,SAAA;AAC7BA,aAAIuB,cAAeA,aAAavB,KAAIyB,YAAaA,WACnDP,kBACE,WAEAlB,KAAI1B,aACJ0B,KAAIqC,SACN;AAAA,MACD,CACF,GAEDV,YAAWS,GAAI,uBAAuBE,CAAAA,WAAA;AACpC,YAAItC,OAAIuB,cAAeA,aAAavB,OAAIyB,YAAaA,SAAO;AAC1D,cACE,OAAOzB,OAAIX,aAAe,YAC1BW,OAAIX,YAAakD;AAEjB,kBAAM,IAAIrG,MACR,2DAA2DqG,0CAA0C,IACvG;AAEFjB,8BAAoB;AAAA,YAAAvF,MACZ;AAAA,YAAcgE,SACX;AAAA,cAAAzB,aACM0B,OAAI1B;AAAAA,cAAYC,SAIpByB,OAAIzB,WAAJiE;AAAAA,cAAyBhE,OAC3BwB,OAAIxB;AAAAA,cAAMC,QACTuB,OAAIvB;AAAAA,cAAOY,WACRW,OAAIX,aAAJ;AAAA,YAAA;AAAA,UACb,CACD;AAAA,QAAC;AAAA,MACH,CACF,GAEMsC,YAAWc,MAAAA;AAAAA,IAAQ;AAC3B,WACMC;AAAAA,EAAe,GACrB3F,KAAA,CAAC+D,YAAYW,SAASH,qBAAqBJ,mBAAmBD,qBAAqBM,SAAS,GAAChF,OAAAuE,YAAAvE,OAAAkF,SAAAlF,OAAA+E,qBAAA/E,OAAA2E,mBAAA3E,OAAA0E,qBAAA1E,OAAAgF,WAAAhF,OAAAO,IAAAP,OAAAQ,OAAAD,KAAAP,EAAA,CAAA,GAAAQ,KAAAR,EAAA,CAAA,IAzDhGkB,UAAUX,IAyDPC,EAA6F;AAAC,MAAA4D;AAAApE,IAAA,CAAA,MAAAwE,qBAAAxE,SAAAyE,iBAI/FL,KAAAK,gBAAA2B,iCAEIC,qBAAqB7B,iBAEK,IAF1B8B,iCAAA;AAAA,IAAAC,YAEeC;AAAAA,EAAAA,GAAYxG,OAAAwE,mBAAAxE,OAAAyE,eAAAzE,QAAAoE,MAAAA,KAAApE,EAAA,EAAA;AANjC,QAAAyG,eAAqBC,UAEnBtC,EAKF;AAAC,MAAAuC;AAAA3G,YAAAyG,gBAIGE,KAAAF,aAAYG,WAAY;AAAA,IAAAC,iBACL;AAAA,EAAA,CAClB,GAAC7G,QAAAyG,cAAAzG,QAAA2G,MAAAA,KAAA3G,EAAA,EAAA;AAJN,QAAAD,SAEI4G;AAIH,MAAAG,IAAAC;AAAA/G,IAAA,EAAA,MAAAwE,qBAAAxE,EAAA,EAAA,MAAAyE,iBAAAzE,EAAA,EAAA,MAAA4E,WAAA5E,EAAA,EAAA,MAAAkF,WAAAlF,UAAAgF,aACS8B,KAAAA,MAAA;AACJlC,eACFA,QAAOoC,KAAM,sBAAsB;AAAA,MAAAhC;AAAAA,MAAAE;AAAAA,MAAAnD,aAGpByC;AAAAA,MAAiBxC,SACrByC;AAAAA,IAAAA,CACV;AAAA,EACF,GACAsC,KAAA,CAACnC,SAASJ,mBAAmBC,eAAeO,WAAWE,OAAO,GAAClF,QAAAwE,mBAAAxE,QAAAyE,eAAAzE,QAAA4E,SAAA5E,QAAAkF,SAAAlF,QAAAgF,WAAAhF,QAAA8G,IAAA9G,QAAA+G,OAAAD,KAAA9G,EAAA,EAAA,GAAA+G,KAAA/G,EAAA,EAAA,IATlEkB,UAAU4F,IASPC,EAA+D;AAKlE,QAAAE,eAAqB9F,iBAAiBmD,MAAK2C,YAAa,GAExDC,aAAmBpH,cAAcC,MAAM;AAAC,MAAAoH;AAAAnH,YAAA8E,eAInCqC,SAAIrC,YAAW1B,QAAAA,CAAU,GAACpD,QAAA8E,aAAA9E,QAAAmH,MAAAA,KAAAnH,EAAA,EAAA;AAAA,MAAAoH;AAAA,SAAApH,EAAA,EAAA,MAAAD,UAAAC,EAAA,EAAA,MAAA4E,WAAA5E,EAAA,EAAA,MAAAkF,WAAAlF,UAAAiH,gBAAAjH,EAAA,EAAA,MAAAkH,cAAAlH,EAAA,EAAA,MAAAgF,aAAAhF,EAAA,EAAA,MAAAmH,MAD7BC,qCACGD,UAAAA,GAA0BE,IAAKC,CAAAA,OAAA;AAAC,UAAA,CAAAnE,KAAAoE,EAAA,IAAAD,IAAM;AAAA,MAAArF;AAAAA,MAAAC;AAAAA,MAAAH;AAAAA,MAAAC;AAAAA,IAAAA,IAAAuF;AAAqC,+BACzE,mBAAA,EAEYvC,WACFE,SACInD,aACJC,SACFC,OACCC,QACC0C,SACD7E,QACMkH,cACM,oBAAAC,WAAUzH,YAVzB,GAAGyH,WAAUxH,MAAO,IAAIyD,GAAG,EAUO;AAAA,EACvC,CACH,EAAA,CAAC,GACDnD,QAAAD,QAAAC,QAAA4E,SAAA5E,QAAAkF,SAAAlF,QAAAiH,cAAAjH,QAAAkH,YAAAlH,QAAAgF,WAAAhF,QAAAmH,IAAAnH,QAAAoH,MAAAA,KAAApH,EAAA,EAAA,GAhBHoH;AAgBG;AA7HQ,SAAAjB,QAAA;AAAA;AAoJf,SAAAqB,2BAAAlD,OAAA;AAAA,QAAAtE,IAAAC,EAAA,EAAA,GACE;AAAA,IAAA+E;AAAAA,IAAAE;AAAAA,IAAAnD;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAlC;AAAAA,IAAAkH;AAAAA,IAAA/E;AAAAA,IAAA0C;AAAAA,IAAA6C;AAAAA,EAAAA,IAWInD,OAEJ;AAAA,IAAAoD;AAAAA,IAAAb;AAAAA,IAAAc,UAAAC;AAAAA,EAAAA,IAIIC,qBAAqB;AAAA,IAAA9H;AAAAA,IAAAkH;AAAAA,IAAA/E;AAAAA,IAAAH;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAwF;AAAAA,EAAAA,CAQlB,KARH,CAAA;AAQI,MAAAlH;AAAAP,IAAA,CAAA,MAAAkF,WAAAlF,SAAAgF,aAGNzE,KAAAA,CAAAuH,WAAAC,eAAAC,WAAAC,SAAAC,UAAAC,UAAAC,mBAAAC,WAAA;AAUEzD,eAAOoC,KAAO,uBAAuB;AAAA,MAAAhC;AAAAA,MAAAE;AAAAA,MAAAnD,aAGnCA;AAAAA,MAAWC,SACXA;AAAAA,MAAOC,OACPA;AAAAA,MAAKC,QACLA;AAAAA,MAAMwF,QACNA;AAAAA,MAAMb,iBACNA;AAAAA,MAAee,MACfA;AAAAA,IAAAA,CACD;AAAA,EAAC,GACH5H,OAAAkF,SAAAlF,OAAAgF,WAAAhF,OAAAO,MAAAA,KAAAP,EAAA,CAAA;AAtBH,QAAAsI,oBAA0BC,eACxBhI,EAsBF;AAAC,MAAAC;AAAAR,IAAA,CAAA,MAAA4E,WAAA5E,EAAA,CAAA,MAAAsI,qBAAAtI,SAAAkC,UAAAlC,EAAA,CAAA,MAAA+B,eAAA/B,EAAA,CAAA,MAAAiC,SAAAjC,EAAA,CAAA,MAAA0H,UAAA1H,EAAA,CAAA,MAAA6G,mBAAA7G,EAAA,EAAA,MAAA4H,QAAA5H,UAAAgC,WAESxB,KAAAA,MAAA;AACJqG,uBACFyB,kBAAkB1D,SAAS7C,aAAaC,SAASC,OAAOC,QAAQwF,QAAQb,iBAAiBe,IAAI;AAAA,EAC9F,GAEF5H,OAAA4E,SAAA5E,OAAAsI,mBAAAtI,OAAAkC,QAAAlC,OAAA+B,aAAA/B,OAAAiC,OAAAjC,OAAA0H,QAAA1H,OAAA6G,iBAAA7G,QAAA4H,MAAA5H,QAAAgC,SAAAhC,QAAAQ,MAAAA,KAAAR,EAAA,EAAA;AAAA,MAAAoE;AAAA,SAAApE,EAAA,EAAA,MAAA4E,WAAA5E,EAAA,EAAA,MAAAkC,UAAAlC,EAAA,EAAA,MAAA+B,eAAA/B,EAAA,EAAA,MAAAiC,SAAAjC,EAAA,EAAA,MAAA0H,UAAA1H,EAAA,EAAA,MAAA6G,mBAAA7G,EAAA,EAAA,MAAA4H,QAAA5H,UAAAgC,WAAEoC,MAACQ,SAAS1C,QAAQH,aAAaE,OAAOyF,QAAQb,iBAAiBe,MAAM5F,OAAO,GAAChC,QAAA4E,SAAA5E,QAAAkC,QAAAlC,QAAA+B,aAAA/B,QAAAiC,OAAAjC,QAAA0H,QAAA1H,QAAA6G,iBAAA7G,QAAA4H,MAAA5H,QAAAgC,SAAAhC,QAAAoE,MAAAA,KAAApE,EAAA,EAAA,GALhFkB,UAAUV,IAKP4D,EAA6E,GAEzE;AAAI;AAEb,MAAMoE,oBAAoBC,KAAKjB,0BAA0B;AACzDgB,kBAAkBE,cAAc;AAUhC,SAAAb,qBAAAvD,OAAA;AAAA,QAAAtE,IAAAC,EAAA,EAAA,GACE;AAAA,IAAAgH;AAAAA,IAAAlH,QAAA4I;AAAAA,IAAA1G;AAAAA,IAAAC;AAAAA,IAAAH;AAAAA,IAAAC;AAAAA,IAAAyF;AAAAA,EAAAA,IAQInD,OACJ,CAAAoD,QAAAkB,SAAA,IAA4BtI,SAAkB,IAAI,GAClD,CAAAuG,iBAAAgC,kBAAA,IAA8CvI,SAA8C,IAAI,GAChG,CAAAqH,UAAAmB,WAAA,IAAgCxI,SAAgC2F,MAAS;AAAC,MAAA1F;AAAAP,WAAAyH,sBAC1ClH,KAAAA,MAAM,IAAIwI,IAAItB,mBAAkBJ,IAAK2B,MAAe,CAAC,GAAChJ,OAAAyH,oBAAAzH,OAAAO,MAAAA,KAAAP,EAAA,CAAA;AAAtF,QAAA,CAAAiJ,YAAA,IAAuB3I,SAASC,EAAsD;AAAC,MAAAC;AAAA,MAAAR,EAAA,CAAA,MAAAyH,sBAAAzH,SAAAiJ,gBAAAjJ,EAAA,CAAA,MAAA2H,UAAA;AAAA,QAAAvD;AAAApE,aAAAiJ,gBACpC7E,MAAA8E,CAAAA,UAAS,CAACD,aAAYvF,IAAKyF,MAAGC,EAAG,GAACpJ,OAAAiJ,cAAAjJ,OAAAoE,OAAAA,MAAApE,EAAA,CAAA;AAArF,UAAAqJ,mBAAyB5B,mBAAkB6B,OAAQlF,GAAkC;AAAC,QAAAuC;AAAA3G,aAAA2H,YACtChB,MAAA4C,CAAAA,UAC9CJ,MAAGvB,KAAKlG,KAAMb,CAAAA,QAAS8G,UAAQ6B,SAAW3I,GAAG,CAAC,GAACb,OAAA2H,UAAA3H,OAAA2G,OAAAA,MAAA3G,EAAA,CAAA,GAD3BQ,KAAA6I,iBAAgBI,SAAU9C,GAEhD,GAAC3G,OAAAyH,oBAAAzH,OAAAiJ,cAAAjJ,OAAA2H,UAAA3H,OAAAQ;AAAAA,EAAA;AAAAA,SAAAR,EAAA,CAAA;AACD,QAAA0J,kBAHsBlJ,IAGe4I,IAGrC,CAAAhJ,OAAAC,QAAA,IAA0BC,SAAkB,IAAI;AAChD,MAAIF;AAAO,UAAMA;AAAK,MAAAgE,IAAAuC;AAAA3G,YAAA2I,WAAA3I,EAAA,EAAA,MAAA0J,mBAAA1J,EAAA,EAAA,MAAAkC,UAAAlC,EAAA,EAAA,MAAA+B,eAAA/B,UAAAiC,SAAAjC,EAAA,EAAA,MAAAgC,WAEZoC,KAAAA,MAAA;AACR,UAAAG,aAAmB,IAAIoF,gBAAAA;AAOvB5J,YAFeiC,UAAU2G,QAAO/B,WAAYR,8BAAwC,IAArEuC,SAETiB,MACG3H,OAAOC,QAAQ;AAAA,MAAAwH;AAAAA,MAAA7I,KAEf;AAAA,MAAqBgJ,QAClBtF,WAAUsF;AAAAA,MAAO9H;AAAAA,MAAAC;AAAAA,MAAA8H,gBAGT;AAAA,MAAKC,aACR;AAAA,IAAA,CACd,EAACC,KACIC,CAAAA,aAAA;AACJC,sBAAgB,MAAA;AACdtB,kBAAUuB,CAAAA,SAAoBxG,QAAQwG,MAAMF,SAAQvC,MAAgC,IAAtDyC,OAAwCF,SAAQvC,MAAQ,GACtFmB,mBAAmBuB,CAAAA,WACjBzG,QAAQwG,QAAMF,SAAQpD,eAAkD,IAAxEuD,SAAiDH,SAAQpD,eAC3D,GACAiC,YAAYuB,CAAAA,WAAW1G,QAAQwG,QAAMF,SAAQtC,QAAoC,IAA1D0C,SAA0CJ,SAAQtC,QAAU;AAAA,MAAC,CACrF;AAAA,IAAC,CACH,EAAC2C,MACKtJ,CAAAA,QAAA;AACL,OAAI,OAAOA,OAAQ,YAAYA,KAAGsE,SAAW,iBAC3CjF,SAASW,GAAG;AAAA,IACb,CACF,GAEI,MAAA;AACLuD,iBAAUgG,MAAAA;AAAAA,IAAQ;AAAA,EACnB,GACA5D,KAAA,CAACgC,SAASe,iBAAiBxH,QAAQH,aAAaE,OAAOD,OAAO,GAAChC,QAAA2I,SAAA3I,QAAA0J,iBAAA1J,QAAAkC,QAAAlC,QAAA+B,aAAA/B,QAAAiC,OAAAjC,QAAAgC,SAAAhC,QAAAoE,IAAApE,QAAA2G,OAAAvC,KAAApE,EAAA,EAAA,GAAA2G,KAAA3G,EAAA,EAAA,IApClEkB,UAAUkD,IAoCPuC,EAA+D;AAAC,MAAAG;AAAA0D,OAAA;AAGjE,QAAIvD,gBAAAJ,iBAA+B;AAAA,UAAAE;AAAA/G,QAAA,EAAA,MAAAiH,gBAAAjH,EAAA,EAAA,MAAA+B,eAAA/B,EAAA,EAAA,MAAA0H,UAAA1H,UAAA6G,mBAEvBE,MAAA0D,6BAA6BxD,cAAcS,QAAQ3F,aAAa8E,eAAe,GAAC7G,QAAAiH,cAAAjH,QAAA+B,aAAA/B,QAAA0H,QAAA1H,QAAA6G,iBAAA7G,QAAA+G,OAAAA,MAAA/G,EAAA,EAAA;AAAA,UAAAmH;AAAAnH,QAAA,EAAA,MAAA6G,mBAAA7G,UAAA2H,YAAA3H,EAAA,EAAA,MAAA+G,OADnFI,KAAA;AAAA,QAAAO,QACGX;AAAAA,QAAgFF;AAAAA,QAAAc;AAAAA,MAAAA,GAGzF3H,QAAA6G,iBAAA7G,QAAA2H,UAAA3H,QAAA+G,KAAA/G,QAAAmH,MAAAA,KAAAnH,EAAA,EAAA,GAJD8G,KAAOK;AAAP,YAAAqD;AAAAA,IAIC;AACF,QAAAzD;AAAA/G,MAAA,EAAA,MAAA0H,UAAA1H,UAAA6G,mBAAA7G,EAAA,EAAA,MAAA2H,YACMZ,KAAA;AAAA,MAAAW;AAAAA,MAAAb;AAAAA,MAAAc;AAAAA,IAAAA,GAAmC3H,QAAA0H,QAAA1H,QAAA6G,iBAAA7G,QAAA2H,UAAA3H,QAAA+G,MAAAA,KAAA/G,EAAA,EAAA,GAA1C8G,KAAOC;AAAAA,EAAmC;AAAA,SARrCD;AAS2D;AAvEpE,SAAAkC,OAAAG,KAAA;AAAA,SAagFA,IAAGC;AAAG;AA6D/E,SAASqB,6BACdxD,cACAS,QACA3F,aACA8E,iBACG;AACH,MAAI9E,gBAAgB;AAClB,UAAM,IAAIpC,MAAM,+DAA+D;AAEjF,SAAO+K,qBACLhD,QACAb,iBACC8D,CAAAA;AAAAA;AAAAA,IAIG,CAACA,eAAeC,cAChB3D,cAAc4D,OACdC,eAAe7D,aAAa4D,GAAG,MAAMC,eAAeH,eAAeE,GAAG,IAElE,OAAO5D,aAAa4D,OAAQ,YAAY,OAAOF,eAAeI,SAAU,WACnE9D,eAEF;AAAA,MACL,GAAGA;AAAAA,MACH4D,KAAK5D,aAAa4D,OAAOF,eAAeE;AAAAA,MACxCE,OAAO9D,aAAa8D,SAASJ,eAAeI;AAAAA,IAAAA,IAGzC;AAAA,KAET3J,iBACAG,MAAMC,QAAQO,WAAW,IAAIA,YAAYuH,OAAO0B,OAAO,IAAIjJ,WAC7D;AACF;"}
@@ -1,20 +1,21 @@
1
1
  import { c } from "react/compiler-runtime";
2
2
  import { memo, useEffect } from "react";
3
3
  import { filter, shareReplay, first, merge } from "rxjs";
4
- import { RELEASES_STUDIO_CLIENT_OPTIONS, isReleasePerspective, useClient } from "sanity";
4
+ import { VARIANTS_STUDIO_CLIENT_OPTIONS, RELEASES_STUDIO_CLIENT_OPTIONS, isReleasePerspective, useClient } from "sanity";
5
5
  import { API_VERSION } from "./presentation.js";
6
6
  const PostMessageDocuments = (props) => {
7
- const $ = c(14), {
7
+ const $ = c(15), {
8
8
  comlink,
9
- perspective
9
+ perspective,
10
+ variant
10
11
  } = props;
11
12
  let t0;
12
- $[0] !== perspective ? (t0 = isReleasePerspective(perspective) ? RELEASES_STUDIO_CLIENT_OPTIONS : {
13
+ $[0] !== perspective || $[1] !== variant ? (t0 = variant ? VARIANTS_STUDIO_CLIENT_OPTIONS : isReleasePerspective(perspective) ? RELEASES_STUDIO_CLIENT_OPTIONS : {
13
14
  apiVersion: API_VERSION
14
- }, $[0] = perspective, $[1] = t0) : t0 = $[1];
15
+ }, $[0] = perspective, $[1] = variant, $[2] = t0) : t0 = $[2];
15
16
  const client = useClient(t0);
16
17
  let t1, t2;
17
- $[2] !== client || $[3] !== comlink ? (t1 = () => {
18
+ $[3] !== client || $[4] !== comlink ? (t1 = () => {
18
19
  const listener = client.listen('*[!(_id in path("_.**"))]', {}, {
19
20
  effectFormat: "mendoza",
20
21
  events: ["welcome", "mutation", "reconnect"],
@@ -40,18 +41,18 @@ const PostMessageDocuments = (props) => {
40
41
  return () => {
41
42
  unsubscribe(), events.unsubscribe();
42
43
  };
43
- }, t2 = [client, comlink], $[2] = client, $[3] = comlink, $[4] = t1, $[5] = t2) : (t1 = $[4], t2 = $[5]), useEffect(t1, t2);
44
+ }, t2 = [client, comlink], $[3] = client, $[4] = comlink, $[5] = t1, $[6] = t2) : (t1 = $[5], t2 = $[6]), useEffect(t1, t2);
44
45
  let t3, t4;
45
- $[6] !== client || $[7] !== comlink ? (t3 = () => comlink.on("visual-editing/fetch-snapshot", async (data) => ({
46
+ $[7] !== client || $[8] !== comlink ? (t3 = () => comlink.on("visual-editing/fetch-snapshot", async (data) => ({
46
47
  snapshot: await client.getDocument(data.documentId, {
47
48
  tag: "document.snapshots"
48
49
  })
49
- })), t4 = [client, comlink], $[6] = client, $[7] = comlink, $[8] = t3, $[9] = t4) : (t3 = $[8], t4 = $[9]), useEffect(t3, t4);
50
+ })), t4 = [client, comlink], $[7] = client, $[8] = comlink, $[9] = t3, $[10] = t4) : (t3 = $[9], t4 = $[10]), useEffect(t3, t4);
50
51
  let t5, t6;
51
- return $[10] !== client || $[11] !== comlink ? (t5 = () => comlink.on("visual-editing/mutate", async (data_0) => client.dataRequest("mutate", data_0, {
52
+ return $[11] !== client || $[12] !== comlink ? (t5 = () => comlink.on("visual-editing/mutate", async (data_0) => client.dataRequest("mutate", data_0, {
52
53
  visibility: "async",
53
54
  returnDocuments: !0
54
- })), t6 = [client, comlink], $[10] = client, $[11] = comlink, $[12] = t5, $[13] = t6) : (t5 = $[12], t6 = $[13]), useEffect(t5, t6), null;
55
+ })), t6 = [client, comlink], $[11] = client, $[12] = comlink, $[13] = t5, $[14] = t6) : (t5 = $[13], t6 = $[14]), useEffect(t5, t6), null;
55
56
  };
56
57
  var PostMessageDocuments_default = memo(PostMessageDocuments);
57
58
  function _temp(event) {
@@ -1 +1 @@
1
- {"version":3,"file":"PostMessageDocuments.js","sources":["../../src/presentation/overlays/PostMessageDocuments.tsx"],"sourcesContent":["import {\n type ClientPerspective,\n type MutationEvent,\n type ReconnectEvent,\n type WelcomeEvent,\n} from '@sanity/client'\nimport {type FunctionComponent, memo, useEffect} from 'react'\nimport {filter, first, merge, shareReplay} from 'rxjs'\nimport {isReleasePerspective, RELEASES_STUDIO_CLIENT_OPTIONS, useClient} from 'sanity'\n\nimport {API_VERSION} from '../constants'\nimport {type VisualEditingConnection} from '../types'\n\ninterface PostMessageDocumentsProps {\n comlink: VisualEditingConnection\n perspective: ClientPerspective\n}\n\nconst PostMessageDocuments: FunctionComponent<PostMessageDocumentsProps> = (props) => {\n const {comlink, perspective} = props\n\n const client = useClient(\n isReleasePerspective(perspective) ? RELEASES_STUDIO_CLIENT_OPTIONS : {apiVersion: API_VERSION},\n )\n\n useEffect(() => {\n const listener = client\n .listen(\n '*[!(_id in path(\"_.**\"))]',\n {},\n {\n effectFormat: 'mendoza',\n events: ['welcome', 'mutation', 'reconnect'],\n includePreviousRevision: false,\n includeResult: false,\n includeAllVersions: true,\n tag: 'presentation-documents',\n visibility: 'transaction',\n },\n )\n .pipe(\n filter(\n (event): event is WelcomeEvent | ReconnectEvent | MutationEvent =>\n event.type === 'welcome' || event.type === 'reconnect' || event.type === 'mutation',\n ),\n )\n\n const welcome = listener.pipe(\n filter((event): event is WelcomeEvent => event.type === 'welcome'),\n shareReplay({bufferSize: 1, refCount: false}),\n )\n\n // When new contexts initialize, they need to explicitly request the welcome\n // event, as we can't rely on emitting it into the void\n const unsubscribe = comlink.on('visual-editing/snapshot-welcome', async () => {\n const event = await new Promise<WelcomeEvent>((resolve) => {\n welcome.pipe(first()).subscribe((event) => {\n resolve(event)\n })\n })\n return {event}\n })\n\n const reconnect = listener.pipe(\n filter((event): event is ReconnectEvent => event.type === 'reconnect'),\n )\n\n const mutations = listener.pipe(\n filter((event): event is MutationEvent => event.type === 'mutation'),\n )\n\n const events = merge(\n /**\n * @deprecated remove 'welcome' here and switch to explict welcome message fetching at next major\n */\n welcome,\n mutations,\n reconnect,\n ).subscribe((event) => {\n comlink.post('presentation/snapshot-event', {event})\n })\n\n return () => {\n unsubscribe()\n events.unsubscribe()\n }\n }, [client, comlink])\n\n useEffect(() => {\n return comlink.on('visual-editing/fetch-snapshot', async (data) => {\n const snapshot = await client.getDocument(data.documentId, {\n tag: 'document.snapshots',\n })\n return {snapshot}\n })\n }, [client, comlink])\n\n useEffect(() => {\n return comlink.on('visual-editing/mutate', async (data) => {\n return client.dataRequest('mutate', data, {\n visibility: 'async',\n returnDocuments: true,\n })\n })\n }, [client, comlink])\n\n return null\n}\n\nexport default memo(PostMessageDocuments)\n"],"names":["PostMessageDocuments","props","$","_c","comlink","perspective","t0","isReleasePerspective","RELEASES_STUDIO_CLIENT_OPTIONS","apiVersion","API_VERSION","client","useClient","t1","t2","listener","listen","effectFormat","events","includePreviousRevision","includeResult","includeAllVersions","tag","visibility","pipe","filter","_temp","welcome","_temp2","shareReplay","bufferSize","refCount","unsubscribe","on","event","Promise","resolve","first","subscribe","event_1","reconnect","_temp3","mutations","_temp4","merge","event_5","post","useEffect","t3","t4","data","snapshot","getDocument","documentId","t5","t6","data_0","dataRequest","returnDocuments","memo","type","event_0","event_3","event_4"],"mappings":"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"}
1
+ {"version":3,"file":"PostMessageDocuments.js","sources":["../../src/presentation/overlays/PostMessageDocuments.tsx"],"sourcesContent":["import {\n type ClientPerspective,\n type MutationEvent,\n type ReconnectEvent,\n type WelcomeEvent,\n} from '@sanity/client'\nimport {type FunctionComponent, memo, useEffect} from 'react'\nimport {filter, first, merge, shareReplay} from 'rxjs'\nimport {\n isReleasePerspective,\n RELEASES_STUDIO_CLIENT_OPTIONS,\n useClient,\n VARIANTS_STUDIO_CLIENT_OPTIONS,\n} from 'sanity'\n\nimport {API_VERSION} from '../constants'\nimport {type VisualEditingConnection} from '../types'\n\ninterface PostMessageDocumentsProps {\n comlink: VisualEditingConnection\n perspective: ClientPerspective\n variant: string | undefined\n}\n\nconst PostMessageDocuments: FunctionComponent<PostMessageDocumentsProps> = (props) => {\n const {comlink, perspective, variant} = props\n\n const client = useClient(\n // Fetching with a variant requires the `vX` API version for now\n variant\n ? VARIANTS_STUDIO_CLIENT_OPTIONS\n : isReleasePerspective(perspective)\n ? RELEASES_STUDIO_CLIENT_OPTIONS\n : {apiVersion: API_VERSION},\n )\n\n useEffect(() => {\n const listener = client\n .listen(\n '*[!(_id in path(\"_.**\"))]',\n {},\n {\n effectFormat: 'mendoza',\n events: ['welcome', 'mutation', 'reconnect'],\n includePreviousRevision: false,\n includeResult: false,\n includeAllVersions: true,\n tag: 'presentation-documents',\n visibility: 'transaction',\n },\n )\n .pipe(\n filter(\n (event): event is WelcomeEvent | ReconnectEvent | MutationEvent =>\n event.type === 'welcome' || event.type === 'reconnect' || event.type === 'mutation',\n ),\n )\n\n const welcome = listener.pipe(\n filter((event): event is WelcomeEvent => event.type === 'welcome'),\n shareReplay({bufferSize: 1, refCount: false}),\n )\n\n // When new contexts initialize, they need to explicitly request the welcome\n // event, as we can't rely on emitting it into the void\n const unsubscribe = comlink.on('visual-editing/snapshot-welcome', async () => {\n const event = await new Promise<WelcomeEvent>((resolve) => {\n welcome.pipe(first()).subscribe((event) => {\n resolve(event)\n })\n })\n return {event}\n })\n\n const reconnect = listener.pipe(\n filter((event): event is ReconnectEvent => event.type === 'reconnect'),\n )\n\n const mutations = listener.pipe(\n filter((event): event is MutationEvent => event.type === 'mutation'),\n )\n\n const events = merge(\n /**\n * @deprecated remove 'welcome' here and switch to explict welcome message fetching at next major\n */\n welcome,\n mutations,\n reconnect,\n ).subscribe((event) => {\n comlink.post('presentation/snapshot-event', {event})\n })\n\n return () => {\n unsubscribe()\n events.unsubscribe()\n }\n }, [client, comlink])\n\n useEffect(() => {\n return comlink.on('visual-editing/fetch-snapshot', async (data) => {\n const snapshot = await client.getDocument(data.documentId, {\n tag: 'document.snapshots',\n })\n return {snapshot}\n })\n }, [client, comlink])\n\n useEffect(() => {\n return comlink.on('visual-editing/mutate', async (data) => {\n return client.dataRequest('mutate', data, {\n visibility: 'async',\n returnDocuments: true,\n })\n })\n }, [client, comlink])\n\n return null\n}\n\nexport default memo(PostMessageDocuments)\n"],"names":["PostMessageDocuments","props","$","_c","comlink","perspective","variant","t0","VARIANTS_STUDIO_CLIENT_OPTIONS","isReleasePerspective","RELEASES_STUDIO_CLIENT_OPTIONS","apiVersion","API_VERSION","client","useClient","t1","t2","listener","listen","effectFormat","events","includePreviousRevision","includeResult","includeAllVersions","tag","visibility","pipe","filter","_temp","welcome","_temp2","shareReplay","bufferSize","refCount","unsubscribe","on","event","Promise","resolve","first","subscribe","event_1","reconnect","_temp3","mutations","_temp4","merge","event_5","post","useEffect","t3","t4","data","snapshot","getDocument","documentId","t5","t6","data_0","dataRequest","returnDocuments","memo","type","event_0","event_3","event_4"],"mappings":"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"}
@@ -1,21 +1,27 @@
1
1
  import { c } from "react/compiler-runtime";
2
2
  import { memo, useEffect, startTransition } from "react";
3
3
  const PostMessagePerspective = (props) => {
4
- const $ = c(9), {
4
+ const $ = c(12), {
5
5
  comlink,
6
6
  perspective,
7
- setHandlesPerspectiveChange
7
+ variant,
8
+ setHandlesPerspectiveChange,
9
+ setHandlesVariantChange
8
10
  } = props;
9
11
  let t0, t1;
10
- $[0] !== comlink || $[1] !== perspective || $[2] !== setHandlesPerspectiveChange ? (t0 = () => comlink.on("visual-editing/fetch-perspective", (payload) => (startTransition(() => setHandlesPerspectiveChange(payload?.handlesPerspectiveChange === !0)), {
11
- perspective
12
- })), t1 = [comlink, perspective, setHandlesPerspectiveChange], $[0] = comlink, $[1] = perspective, $[2] = setHandlesPerspectiveChange, $[3] = t0, $[4] = t1) : (t0 = $[3], t1 = $[4]), useEffect(t0, t1);
12
+ $[0] !== comlink || $[1] !== perspective || $[2] !== setHandlesPerspectiveChange || $[3] !== setHandlesVariantChange || $[4] !== variant ? (t0 = () => comlink.on("visual-editing/fetch-perspective", (payload) => (startTransition(() => {
13
+ setHandlesPerspectiveChange(payload?.handlesPerspectiveChange === !0), setHandlesVariantChange(payload?.handlesVariantChange === !0);
14
+ }), {
15
+ perspective,
16
+ variant
17
+ })), t1 = [comlink, perspective, variant, setHandlesPerspectiveChange, setHandlesVariantChange], $[0] = comlink, $[1] = perspective, $[2] = setHandlesPerspectiveChange, $[3] = setHandlesVariantChange, $[4] = variant, $[5] = t0, $[6] = t1) : (t0 = $[5], t1 = $[6]), useEffect(t0, t1);
13
18
  let t2, t3;
14
- return $[5] !== comlink || $[6] !== perspective ? (t2 = () => {
19
+ return $[7] !== comlink || $[8] !== perspective || $[9] !== variant ? (t2 = () => {
15
20
  comlink.post("presentation/perspective", {
16
- perspective
21
+ perspective,
22
+ variant
17
23
  });
18
- }, t3 = [comlink, perspective], $[5] = comlink, $[6] = perspective, $[7] = t2, $[8] = t3) : (t2 = $[7], t3 = $[8]), useEffect(t2, t3), null;
24
+ }, t3 = [comlink, perspective, variant], $[7] = comlink, $[8] = perspective, $[9] = variant, $[10] = t2, $[11] = t3) : (t2 = $[10], t3 = $[11]), useEffect(t2, t3), null;
19
25
  };
20
26
  var PostMessagePerspective_default = memo(PostMessagePerspective);
21
27
  export {