next-sanity 0.8.4 → 0.8.5

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.
@@ -40,7 +40,6 @@ function _defineProperties(target, props) {
40
40
  Object.defineProperty(target, descriptor.key, descriptor);
41
41
  }
42
42
  }
43
-
44
43
  function _createClass(Constructor, protoProps, staticProps) {
45
44
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
46
45
  if (staticProps) _defineProperties(Constructor, staticProps);
@@ -56,23 +55,18 @@ var MockAbortController = /*#__PURE__*/function () {
56
55
  aborted: false
57
56
  };
58
57
  }
59
-
60
58
  var _proto = MockAbortController.prototype;
61
-
62
59
  _proto.abort = function abort() {
63
60
  this._signal.aborted = true;
64
61
  };
65
-
66
62
  _createClass(MockAbortController, [{
67
63
  key: "signal",
68
64
  get: function get() {
69
65
  return this._signal;
70
66
  }
71
67
  }]);
72
-
73
68
  return MockAbortController;
74
69
  }();
75
-
76
70
  function getAborter() {
77
71
  return typeof AbortController === 'undefined' ? new MockAbortController() : new AbortController();
78
72
  }
@@ -98,16 +92,13 @@ function getCurrentUser(projectId, abort, token) {
98
92
  return res != null && res.id ? res : null;
99
93
  });
100
94
  }
101
-
102
95
  function useCurrentUser(projectId) {
103
96
  var _useState = react.useState(),
104
- data = _useState[0],
105
- setUser = _useState[1];
106
-
97
+ data = _useState[0],
98
+ setUser = _useState[1];
107
99
  var _useState2 = react.useState(),
108
- error = _useState2[0],
109
- setError = _useState2[1];
110
-
100
+ error = _useState2[0],
101
+ setError = _useState2[1];
111
102
  react.useEffect(function () {
112
103
  var aborter = getAborter();
113
104
  getCurrentUser(projectId, aborter).then(setUser).catch(function (err) {
@@ -124,27 +115,26 @@ function useCurrentUser(projectId) {
124
115
  };
125
116
  }
126
117
 
127
- var EMPTY_PARAMS = {}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
128
-
118
+ var EMPTY_PARAMS = {};
119
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
129
120
  function createPreviewSubscriptionHook(_ref) {
130
121
  var projectId = _ref.projectId,
131
- dataset = _ref.dataset,
132
- token = _ref.token,
133
- EventSource = _ref.EventSource,
134
- _ref$documentLimit = _ref.documentLimit,
135
- documentLimit = _ref$documentLimit === void 0 ? 3000 : _ref$documentLimit;
122
+ dataset = _ref.dataset,
123
+ token = _ref.token,
124
+ EventSource = _ref.EventSource,
125
+ _ref$documentLimit = _ref.documentLimit,
126
+ documentLimit = _ref$documentLimit === void 0 ? 3000 : _ref$documentLimit;
136
127
  // Only construct/setup the store when `getStore()` is called
137
128
  var store;
138
129
  return function usePreviewSubscription(query, options) {
139
130
  if (options === void 0) {
140
131
  options = {};
141
132
  }
142
-
143
133
  var _options = options,
144
- _options$params = _options.params,
145
- params = _options$params === void 0 ? EMPTY_PARAMS : _options$params,
146
- initialData = _options.initialData,
147
- enabled = _options.enabled;
134
+ _options$params = _options.params,
135
+ params = _options$params === void 0 ? EMPTY_PARAMS : _options$params,
136
+ initialData = _options.initialData,
137
+ enabled = _options.enabled;
148
138
  return useQuerySubscription({
149
139
  getStore: getStore,
150
140
  projectId: projectId,
@@ -155,20 +145,17 @@ function createPreviewSubscriptionHook(_ref) {
155
145
  token: token
156
146
  });
157
147
  };
158
-
159
148
  function getStore(abort) {
160
149
  if (!store) {
161
150
  store = new Promise(function (resolve) { resolve(_interopNamespace(require('@sanity/groq-store'))); }).then(function (_ref2) {
162
151
  var groqStore = _ref2.groqStore;
163
-
164
152
  // Skip creating the groq store if we've been unmounted to save memory and reduce gc pressure
165
153
  if (abort.signal.aborted) {
166
- var error = new Error('Cancelling groq store creation'); // This ensures we can skip it in the catch block same way
167
-
154
+ var error = new Error('Cancelling groq store creation');
155
+ // This ensures we can skip it in the catch block same way
168
156
  error.name = 'AbortError';
169
157
  return Promise.reject(error);
170
158
  }
171
-
172
159
  return groqStore({
173
160
  projectId: projectId,
174
161
  dataset: dataset,
@@ -181,49 +168,41 @@ function createPreviewSubscriptionHook(_ref) {
181
168
  });
182
169
  });
183
170
  }
184
-
185
171
  return store;
186
172
  }
187
173
  }
188
-
189
174
  function useQuerySubscription(options) {
190
175
  var getStore = options.getStore,
191
- projectId = options.projectId,
192
- query = options.query,
193
- initialData = options.initialData,
194
- _options$enabled = options.enabled,
195
- enabled = _options$enabled === void 0 ? false : _options$enabled,
196
- token = options.token;
197
-
176
+ projectId = options.projectId,
177
+ query = options.query,
178
+ initialData = options.initialData,
179
+ _options$enabled = options.enabled,
180
+ enabled = _options$enabled === void 0 ? false : _options$enabled,
181
+ token = options.token;
198
182
  var _useState = react.useState(),
199
- error = _useState[0],
200
- setError = _useState[1];
201
-
183
+ error = _useState[0],
184
+ setError = _useState[1];
202
185
  var _useState2 = react.useState(false),
203
- loading = _useState2[0],
204
- setLoading = _useState2[1];
205
-
186
+ loading = _useState2[0],
187
+ setLoading = _useState2[1];
206
188
  var _useState3 = react.useState(),
207
- data = _useState3[0],
208
- setData = _useState3[1];
209
-
210
- var params = useParams(options.params); // Use "deep" dependency comparison because params are often not _referentially_ equal,
189
+ data = _useState3[0],
190
+ setData = _useState3[1];
191
+ var params = useParams(options.params);
192
+ // Use "deep" dependency comparison because params are often not _referentially_ equal,
211
193
  // but contains the same shallow properties, eg `{"slug": "some-slug"}`
212
-
213
194
  react.useEffect(function () {
214
195
  if (!enabled) {
215
196
  return;
216
197
  }
217
-
218
198
  setLoading(true);
219
199
  var aborter = getAborter();
220
200
  var subscription;
221
201
  getCurrentUser(projectId, aborter, token).then(function (user) {
222
202
  if (user) {
223
203
  return;
224
- } // eslint-disable-next-line no-console
225
-
226
-
204
+ }
205
+ // eslint-disable-next-line no-console
227
206
  console.warn('Not authenticated - preview not available');
228
207
  throw new Error('Not authenticated - preview not available');
229
208
  }).then(function () {
@@ -240,13 +219,12 @@ function useQuerySubscription(options) {
240
219
  return err.name === 'AbortError' ? null : setError(err);
241
220
  }).finally(function () {
242
221
  return setLoading(false);
243
- }); // eslint-disable-next-line consistent-return
244
-
222
+ });
223
+ // eslint-disable-next-line consistent-return
245
224
  return function () {
246
225
  if (subscription) {
247
226
  subscription.unsubscribe();
248
227
  }
249
-
250
228
  aborter.abort();
251
229
  };
252
230
  }, [getStore, query, params, enabled, projectId, token]);
@@ -255,9 +233,8 @@ function useQuerySubscription(options) {
255
233
  loading: loading,
256
234
  error: error
257
235
  };
258
- } // Return params that are stable with deep equal as long as the key order is the same
259
-
260
-
236
+ }
237
+ // Return params that are stable with deep equal as long as the key order is the same
261
238
  function useParams(params) {
262
239
  var stringifiedParams = react.useMemo(function () {
263
240
  return JSON.stringify(params);
@@ -1 +1 @@
1
- {"version":3,"file":"next-sanity.cjs.development.js","sources":["../src/client.ts","../src/aborter.ts","../src/currentUser.ts","../src/useSubscription.ts"],"sourcesContent":["import type {ClientConfig, SanityClient} from '@sanity/client'\nimport sanityClient from '@sanity/client'\n\nexport function createClient(config: ClientConfig): SanityClient {\n return sanityClient(config)\n}\n","export interface Aborter {\n abort(): void\n signal: AbortSignal\n}\n\nclass MockAbortController {\n _signal = {aborted: false}\n get signal() {\n return this._signal as AbortSignal\n }\n abort() {\n this._signal.aborted = true\n }\n}\n\nexport function getAborter(): Aborter {\n return typeof AbortController === 'undefined'\n ? new MockAbortController()\n : new AbortController()\n}\n","import {useEffect, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {CurrentUser} from './types'\n\nexport function createCurrentUserHook({projectId}: {projectId: string; dataset?: string}) {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n return () => useCurrentUser(projectId)\n}\n\nexport function getCurrentUser(\n projectId: string,\n abort: Aborter,\n token?: string\n): Promise<CurrentUser | null> {\n const headers = token ? {Authorization: `Bearer ${token}`} : undefined\n return fetch(`https://${projectId}.api.sanity.io/v1/users/me`, {\n credentials: 'include',\n signal: abort.signal,\n headers,\n })\n .then((res) => res.json())\n .then((res) => (res?.id ? res : null))\n}\n\nfunction useCurrentUser(projectId: string) {\n const [data, setUser] = useState<CurrentUser | null>()\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n const aborter = getAborter()\n getCurrentUser(projectId, aborter)\n .then(setUser)\n .catch((err: Error) => err.name !== 'AbortError' && setError(err))\n\n return () => {\n aborter.abort()\n }\n }, [projectId])\n\n return {data, error, loading: data !== null || !error}\n}\n","import {GroqStore, Subscription} from '@sanity/groq-store'\nimport {useEffect, useMemo, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {getCurrentUser} from './currentUser'\nimport {ProjectConfig} from './types'\n\nconst EMPTY_PARAMS = {}\n\nexport type Params = Record<string, unknown>\nexport interface SubscriptionOptions<R = any> {\n enabled?: boolean\n params?: Params\n initialData?: R\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function createPreviewSubscriptionHook({\n projectId,\n dataset,\n token,\n EventSource,\n documentLimit = 3000,\n}: ProjectConfig & {documentLimit?: number}) {\n // Only construct/setup the store when `getStore()` is called\n let store: Promise<GroqStore>\n\n return function usePreviewSubscription<R = any>(\n query: string,\n options: SubscriptionOptions<R> = {}\n ) {\n const {params = EMPTY_PARAMS, initialData, enabled} = options\n return useQuerySubscription<R>({\n getStore,\n projectId,\n query,\n params,\n initialData: initialData as any,\n enabled: enabled ? typeof window !== 'undefined' : false,\n token,\n })\n }\n\n function getStore(abort: Aborter) {\n if (!store) {\n store = import('@sanity/groq-store').then(({groqStore}) => {\n // Skip creating the groq store if we've been unmounted to save memory and reduce gc pressure\n if (abort.signal.aborted) {\n const error = new Error('Cancelling groq store creation')\n // This ensures we can skip it in the catch block same way\n error.name = 'AbortError'\n return Promise.reject(error)\n }\n\n return groqStore({\n projectId,\n dataset,\n documentLimit,\n token,\n EventSource,\n listen: true,\n overlayDrafts: true,\n subscriptionThrottleMs: 10,\n })\n })\n }\n return store\n }\n}\n\nfunction useQuerySubscription<R = any>(options: {\n getStore: (abort: Aborter) => Promise<GroqStore>\n projectId: string\n query: string\n params: Params\n initialData: R\n enabled: boolean\n token?: string\n}) {\n const {getStore, projectId, query, initialData, enabled = false, token} = options\n const [error, setError] = useState<Error>()\n const [loading, setLoading] = useState(false)\n const [data, setData] = useState<R>()\n const params = useParams(options.params)\n\n // Use \"deep\" dependency comparison because params are often not _referentially_ equal,\n // but contains the same shallow properties, eg `{\"slug\": \"some-slug\"}`\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n setLoading(true)\n\n const aborter = getAborter()\n let subscription: Subscription | undefined\n getCurrentUser(projectId, aborter, token)\n .then((user) => {\n if (user) {\n return\n }\n\n // eslint-disable-next-line no-console\n console.warn('Not authenticated - preview not available')\n throw new Error('Not authenticated - preview not available')\n })\n .then(() => getStore(aborter))\n .then((store) => {\n subscription = store.subscribe(query, params, (err, result) => {\n if (err) {\n setError(err)\n } else {\n setData(result)\n }\n })\n })\n .catch((err: Error) => (err.name === 'AbortError' ? null : setError(err)))\n .finally(() => setLoading(false))\n\n // eslint-disable-next-line consistent-return\n return () => {\n if (subscription) {\n subscription.unsubscribe()\n }\n\n aborter.abort()\n }\n }, [getStore, query, params, enabled, projectId, token])\n\n return {\n data: typeof data === 'undefined' ? initialData : data,\n loading,\n error,\n }\n}\n\n// Return params that are stable with deep equal as long as the key order is the same\nfunction useParams(params: Params): Params {\n const stringifiedParams = useMemo(() => JSON.stringify(params), [params])\n return useMemo(() => JSON.parse(stringifiedParams), [stringifiedParams])\n}\n"],"names":["createClient","config","sanityClient","MockAbortController","aborted","abort","_signal","getAborter","AbortController","createCurrentUserHook","projectId","useCurrentUser","getCurrentUser","token","headers","Authorization","undefined","fetch","credentials","signal","then","res","json","id","useState","data","setUser","error","setError","useEffect","aborter","catch","err","name","loading","EMPTY_PARAMS","createPreviewSubscriptionHook","dataset","EventSource","documentLimit","store","usePreviewSubscription","query","options","params","initialData","enabled","useQuerySubscription","getStore","window","groqStore","Error","Promise","reject","listen","overlayDrafts","subscriptionThrottleMs","setLoading","setData","useParams","subscription","user","console","warn","subscribe","result","finally","unsubscribe","stringifiedParams","useMemo","JSON","stringify","parse"],"mappings":"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"}
1
+ {"version":3,"file":"next-sanity.cjs.development.js","sources":["../src/client.ts","../src/aborter.ts","../src/currentUser.ts","../src/useSubscription.ts"],"sourcesContent":["import type {ClientConfig, SanityClient} from '@sanity/client'\nimport sanityClient from '@sanity/client'\n\nexport function createClient(config: ClientConfig): SanityClient {\n return sanityClient(config)\n}\n","export interface Aborter {\n abort(): void\n signal: AbortSignal\n}\n\nclass MockAbortController {\n _signal = {aborted: false}\n get signal() {\n return this._signal as AbortSignal\n }\n abort() {\n this._signal.aborted = true\n }\n}\n\nexport function getAborter(): Aborter {\n return typeof AbortController === 'undefined'\n ? new MockAbortController()\n : new AbortController()\n}\n","import {useEffect, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {CurrentUser} from './types'\n\nexport function createCurrentUserHook({projectId}: {projectId: string; dataset?: string}) {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n return () => useCurrentUser(projectId)\n}\n\nexport function getCurrentUser(\n projectId: string,\n abort: Aborter,\n token?: string\n): Promise<CurrentUser | null> {\n const headers = token ? {Authorization: `Bearer ${token}`} : undefined\n return fetch(`https://${projectId}.api.sanity.io/v1/users/me`, {\n credentials: 'include',\n signal: abort.signal,\n headers,\n })\n .then((res) => res.json())\n .then((res) => (res?.id ? res : null))\n}\n\nfunction useCurrentUser(projectId: string) {\n const [data, setUser] = useState<CurrentUser | null>()\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n const aborter = getAborter()\n getCurrentUser(projectId, aborter)\n .then(setUser)\n .catch((err: Error) => err.name !== 'AbortError' && setError(err))\n\n return () => {\n aborter.abort()\n }\n }, [projectId])\n\n return {data, error, loading: data !== null || !error}\n}\n","import {GroqStore, Subscription} from '@sanity/groq-store'\nimport {useEffect, useMemo, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {getCurrentUser} from './currentUser'\nimport {ProjectConfig} from './types'\n\nconst EMPTY_PARAMS = {}\n\nexport type Params = Record<string, unknown>\nexport interface SubscriptionOptions<R = any> {\n enabled?: boolean\n params?: Params\n initialData?: R\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function createPreviewSubscriptionHook({\n projectId,\n dataset,\n token,\n EventSource,\n documentLimit = 3000,\n}: ProjectConfig & {documentLimit?: number}) {\n // Only construct/setup the store when `getStore()` is called\n let store: Promise<GroqStore>\n\n return function usePreviewSubscription<R = any>(\n query: string,\n options: SubscriptionOptions<R> = {}\n ) {\n const {params = EMPTY_PARAMS, initialData, enabled} = options\n return useQuerySubscription<R>({\n getStore,\n projectId,\n query,\n params,\n initialData: initialData as any,\n enabled: enabled ? typeof window !== 'undefined' : false,\n token,\n })\n }\n\n function getStore(abort: Aborter) {\n if (!store) {\n store = import('@sanity/groq-store').then(({groqStore}) => {\n // Skip creating the groq store if we've been unmounted to save memory and reduce gc pressure\n if (abort.signal.aborted) {\n const error = new Error('Cancelling groq store creation')\n // This ensures we can skip it in the catch block same way\n error.name = 'AbortError'\n return Promise.reject(error)\n }\n\n return groqStore({\n projectId,\n dataset,\n documentLimit,\n token,\n EventSource,\n listen: true,\n overlayDrafts: true,\n subscriptionThrottleMs: 10,\n })\n })\n }\n return store\n }\n}\n\nfunction useQuerySubscription<R = any>(options: {\n getStore: (abort: Aborter) => Promise<GroqStore>\n projectId: string\n query: string\n params: Params\n initialData: R\n enabled: boolean\n token?: string\n}) {\n const {getStore, projectId, query, initialData, enabled = false, token} = options\n const [error, setError] = useState<Error>()\n const [loading, setLoading] = useState(false)\n const [data, setData] = useState<R>()\n const params = useParams(options.params)\n\n // Use \"deep\" dependency comparison because params are often not _referentially_ equal,\n // but contains the same shallow properties, eg `{\"slug\": \"some-slug\"}`\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n setLoading(true)\n\n const aborter = getAborter()\n let subscription: Subscription | undefined\n getCurrentUser(projectId, aborter, token)\n .then((user) => {\n if (user) {\n return\n }\n\n // eslint-disable-next-line no-console\n console.warn('Not authenticated - preview not available')\n throw new Error('Not authenticated - preview not available')\n })\n .then(() => getStore(aborter))\n .then((store) => {\n subscription = store.subscribe(query, params, (err, result) => {\n if (err) {\n setError(err)\n } else {\n setData(result)\n }\n })\n })\n .catch((err: Error) => (err.name === 'AbortError' ? null : setError(err)))\n .finally(() => setLoading(false))\n\n // eslint-disable-next-line consistent-return\n return () => {\n if (subscription) {\n subscription.unsubscribe()\n }\n\n aborter.abort()\n }\n }, [getStore, query, params, enabled, projectId, token])\n\n return {\n data: typeof data === 'undefined' ? initialData : data,\n loading,\n error,\n }\n}\n\n// Return params that are stable with deep equal as long as the key order is the same\nfunction useParams(params: Params): Params {\n const stringifiedParams = useMemo(() => JSON.stringify(params), [params])\n return useMemo(() => JSON.parse(stringifiedParams), [stringifiedParams])\n}\n"],"names":["createClient","config","sanityClient","MockAbortController","aborted","abort","_signal","getAborter","AbortController","createCurrentUserHook","projectId","useCurrentUser","getCurrentUser","token","headers","Authorization","undefined","fetch","credentials","signal","then","res","json","id","useState","data","setUser","error","setError","useEffect","aborter","catch","err","name","loading","EMPTY_PARAMS","createPreviewSubscriptionHook","dataset","EventSource","documentLimit","store","usePreviewSubscription","query","options","params","initialData","enabled","useQuerySubscription","getStore","window","groqStore","Error","Promise","reject","listen","overlayDrafts","subscriptionThrottleMs","setLoading","setData","useParams","subscription","user","console","warn","subscribe","result","finally","unsubscribe","stringifiedParams","useMemo","JSON","stringify","parse"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"next-sanity.cjs.production.min.js","sources":["../src/aborter.ts","../src/currentUser.ts","../src/useSubscription.ts","../src/client.ts"],"sourcesContent":["export interface Aborter {\n abort(): void\n signal: AbortSignal\n}\n\nclass MockAbortController {\n _signal = {aborted: false}\n get signal() {\n return this._signal as AbortSignal\n }\n abort() {\n this._signal.aborted = true\n }\n}\n\nexport function getAborter(): Aborter {\n return typeof AbortController === 'undefined'\n ? new MockAbortController()\n : new AbortController()\n}\n","import {useEffect, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {CurrentUser} from './types'\n\nexport function createCurrentUserHook({projectId}: {projectId: string; dataset?: string}) {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n return () => useCurrentUser(projectId)\n}\n\nexport function getCurrentUser(\n projectId: string,\n abort: Aborter,\n token?: string\n): Promise<CurrentUser | null> {\n const headers = token ? {Authorization: `Bearer ${token}`} : undefined\n return fetch(`https://${projectId}.api.sanity.io/v1/users/me`, {\n credentials: 'include',\n signal: abort.signal,\n headers,\n })\n .then((res) => res.json())\n .then((res) => (res?.id ? res : null))\n}\n\nfunction useCurrentUser(projectId: string) {\n const [data, setUser] = useState<CurrentUser | null>()\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n const aborter = getAborter()\n getCurrentUser(projectId, aborter)\n .then(setUser)\n .catch((err: Error) => err.name !== 'AbortError' && setError(err))\n\n return () => {\n aborter.abort()\n }\n }, [projectId])\n\n return {data, error, loading: data !== null || !error}\n}\n","import {GroqStore, Subscription} from '@sanity/groq-store'\nimport {useEffect, useMemo, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {getCurrentUser} from './currentUser'\nimport {ProjectConfig} from './types'\n\nconst EMPTY_PARAMS = {}\n\nexport type Params = Record<string, unknown>\nexport interface SubscriptionOptions<R = any> {\n enabled?: boolean\n params?: Params\n initialData?: R\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function createPreviewSubscriptionHook({\n projectId,\n dataset,\n token,\n EventSource,\n documentLimit = 3000,\n}: ProjectConfig & {documentLimit?: number}) {\n // Only construct/setup the store when `getStore()` is called\n let store: Promise<GroqStore>\n\n return function usePreviewSubscription<R = any>(\n query: string,\n options: SubscriptionOptions<R> = {}\n ) {\n const {params = EMPTY_PARAMS, initialData, enabled} = options\n return useQuerySubscription<R>({\n getStore,\n projectId,\n query,\n params,\n initialData: initialData as any,\n enabled: enabled ? typeof window !== 'undefined' : false,\n token,\n })\n }\n\n function getStore(abort: Aborter) {\n if (!store) {\n store = import('@sanity/groq-store').then(({groqStore}) => {\n // Skip creating the groq store if we've been unmounted to save memory and reduce gc pressure\n if (abort.signal.aborted) {\n const error = new Error('Cancelling groq store creation')\n // This ensures we can skip it in the catch block same way\n error.name = 'AbortError'\n return Promise.reject(error)\n }\n\n return groqStore({\n projectId,\n dataset,\n documentLimit,\n token,\n EventSource,\n listen: true,\n overlayDrafts: true,\n subscriptionThrottleMs: 10,\n })\n })\n }\n return store\n }\n}\n\nfunction useQuerySubscription<R = any>(options: {\n getStore: (abort: Aborter) => Promise<GroqStore>\n projectId: string\n query: string\n params: Params\n initialData: R\n enabled: boolean\n token?: string\n}) {\n const {getStore, projectId, query, initialData, enabled = false, token} = options\n const [error, setError] = useState<Error>()\n const [loading, setLoading] = useState(false)\n const [data, setData] = useState<R>()\n const params = useParams(options.params)\n\n // Use \"deep\" dependency comparison because params are often not _referentially_ equal,\n // but contains the same shallow properties, eg `{\"slug\": \"some-slug\"}`\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n setLoading(true)\n\n const aborter = getAborter()\n let subscription: Subscription | undefined\n getCurrentUser(projectId, aborter, token)\n .then((user) => {\n if (user) {\n return\n }\n\n // eslint-disable-next-line no-console\n console.warn('Not authenticated - preview not available')\n throw new Error('Not authenticated - preview not available')\n })\n .then(() => getStore(aborter))\n .then((store) => {\n subscription = store.subscribe(query, params, (err, result) => {\n if (err) {\n setError(err)\n } else {\n setData(result)\n }\n })\n })\n .catch((err: Error) => (err.name === 'AbortError' ? null : setError(err)))\n .finally(() => setLoading(false))\n\n // eslint-disable-next-line consistent-return\n return () => {\n if (subscription) {\n subscription.unsubscribe()\n }\n\n aborter.abort()\n }\n }, [getStore, query, params, enabled, projectId, token])\n\n return {\n data: typeof data === 'undefined' ? initialData : data,\n loading,\n error,\n }\n}\n\n// Return params that are stable with deep equal as long as the key order is the same\nfunction useParams(params: Params): Params {\n const stringifiedParams = useMemo(() => JSON.stringify(params), [params])\n return useMemo(() => JSON.parse(stringifiedParams), [stringifiedParams])\n}\n","import type {ClientConfig, SanityClient} from '@sanity/client'\nimport sanityClient from '@sanity/client'\n\nexport function createClient(config: ClientConfig): SanityClient {\n return sanityClient(config)\n}\n"],"names":["MockAbortController","this","aborted","abort","_signal","getAborter","AbortController","getCurrentUser","projectId","token","fetch","credentials","signal","headers","Authorization","undefined","then","res","json","id","EMPTY_PARAMS","config","sanityClient","useState","data","setUser","error","setError","useEffect","aborter","catch","err","name","loading","useCurrentUser","store","dataset","EventSource","documentLimit","query","options","params","getStore","initialData","enabled","setLoading","setData","stringifiedParams","useMemo","JSON","stringify","parse","useParams","subscription","user","console","warn","Error","subscribe","result","finally","unsubscribe","useQuerySubscription","window","groqStore","Promise","reject","listen","overlayDrafts","subscriptionThrottleMs"],"mappings":"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"}
1
+ {"version":3,"file":"next-sanity.cjs.production.min.js","sources":["../src/aborter.ts","../src/currentUser.ts","../src/useSubscription.ts","../src/client.ts"],"sourcesContent":["export interface Aborter {\n abort(): void\n signal: AbortSignal\n}\n\nclass MockAbortController {\n _signal = {aborted: false}\n get signal() {\n return this._signal as AbortSignal\n }\n abort() {\n this._signal.aborted = true\n }\n}\n\nexport function getAborter(): Aborter {\n return typeof AbortController === 'undefined'\n ? new MockAbortController()\n : new AbortController()\n}\n","import {useEffect, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {CurrentUser} from './types'\n\nexport function createCurrentUserHook({projectId}: {projectId: string; dataset?: string}) {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n return () => useCurrentUser(projectId)\n}\n\nexport function getCurrentUser(\n projectId: string,\n abort: Aborter,\n token?: string\n): Promise<CurrentUser | null> {\n const headers = token ? {Authorization: `Bearer ${token}`} : undefined\n return fetch(`https://${projectId}.api.sanity.io/v1/users/me`, {\n credentials: 'include',\n signal: abort.signal,\n headers,\n })\n .then((res) => res.json())\n .then((res) => (res?.id ? res : null))\n}\n\nfunction useCurrentUser(projectId: string) {\n const [data, setUser] = useState<CurrentUser | null>()\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n const aborter = getAborter()\n getCurrentUser(projectId, aborter)\n .then(setUser)\n .catch((err: Error) => err.name !== 'AbortError' && setError(err))\n\n return () => {\n aborter.abort()\n }\n }, [projectId])\n\n return {data, error, loading: data !== null || !error}\n}\n","import {GroqStore, Subscription} from '@sanity/groq-store'\nimport {useEffect, useMemo, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {getCurrentUser} from './currentUser'\nimport {ProjectConfig} from './types'\n\nconst EMPTY_PARAMS = {}\n\nexport type Params = Record<string, unknown>\nexport interface SubscriptionOptions<R = any> {\n enabled?: boolean\n params?: Params\n initialData?: R\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function createPreviewSubscriptionHook({\n projectId,\n dataset,\n token,\n EventSource,\n documentLimit = 3000,\n}: ProjectConfig & {documentLimit?: number}) {\n // Only construct/setup the store when `getStore()` is called\n let store: Promise<GroqStore>\n\n return function usePreviewSubscription<R = any>(\n query: string,\n options: SubscriptionOptions<R> = {}\n ) {\n const {params = EMPTY_PARAMS, initialData, enabled} = options\n return useQuerySubscription<R>({\n getStore,\n projectId,\n query,\n params,\n initialData: initialData as any,\n enabled: enabled ? typeof window !== 'undefined' : false,\n token,\n })\n }\n\n function getStore(abort: Aborter) {\n if (!store) {\n store = import('@sanity/groq-store').then(({groqStore}) => {\n // Skip creating the groq store if we've been unmounted to save memory and reduce gc pressure\n if (abort.signal.aborted) {\n const error = new Error('Cancelling groq store creation')\n // This ensures we can skip it in the catch block same way\n error.name = 'AbortError'\n return Promise.reject(error)\n }\n\n return groqStore({\n projectId,\n dataset,\n documentLimit,\n token,\n EventSource,\n listen: true,\n overlayDrafts: true,\n subscriptionThrottleMs: 10,\n })\n })\n }\n return store\n }\n}\n\nfunction useQuerySubscription<R = any>(options: {\n getStore: (abort: Aborter) => Promise<GroqStore>\n projectId: string\n query: string\n params: Params\n initialData: R\n enabled: boolean\n token?: string\n}) {\n const {getStore, projectId, query, initialData, enabled = false, token} = options\n const [error, setError] = useState<Error>()\n const [loading, setLoading] = useState(false)\n const [data, setData] = useState<R>()\n const params = useParams(options.params)\n\n // Use \"deep\" dependency comparison because params are often not _referentially_ equal,\n // but contains the same shallow properties, eg `{\"slug\": \"some-slug\"}`\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n setLoading(true)\n\n const aborter = getAborter()\n let subscription: Subscription | undefined\n getCurrentUser(projectId, aborter, token)\n .then((user) => {\n if (user) {\n return\n }\n\n // eslint-disable-next-line no-console\n console.warn('Not authenticated - preview not available')\n throw new Error('Not authenticated - preview not available')\n })\n .then(() => getStore(aborter))\n .then((store) => {\n subscription = store.subscribe(query, params, (err, result) => {\n if (err) {\n setError(err)\n } else {\n setData(result)\n }\n })\n })\n .catch((err: Error) => (err.name === 'AbortError' ? null : setError(err)))\n .finally(() => setLoading(false))\n\n // eslint-disable-next-line consistent-return\n return () => {\n if (subscription) {\n subscription.unsubscribe()\n }\n\n aborter.abort()\n }\n }, [getStore, query, params, enabled, projectId, token])\n\n return {\n data: typeof data === 'undefined' ? initialData : data,\n loading,\n error,\n }\n}\n\n// Return params that are stable with deep equal as long as the key order is the same\nfunction useParams(params: Params): Params {\n const stringifiedParams = useMemo(() => JSON.stringify(params), [params])\n return useMemo(() => JSON.parse(stringifiedParams), [stringifiedParams])\n}\n","import type {ClientConfig, SanityClient} from '@sanity/client'\nimport sanityClient from '@sanity/client'\n\nexport function createClient(config: ClientConfig): SanityClient {\n return sanityClient(config)\n}\n"],"names":["MockAbortController","this","aborted","abort","_signal","key","get","getAborter","AbortController","getCurrentUser","projectId","token","fetch","credentials","signal","headers","Authorization","undefined","then","res","json","id","EMPTY_PARAMS","config","sanityClient","useState","data","setUser","error","setError","useEffect","aborter","catch","err","name","loading","useCurrentUser","store","dataset","EventSource","_ref$documentLimit","documentLimit","query","options","_options$params","params","getStore","initialData","_options$enabled","enabled","setLoading","setData","stringifiedParams","useMemo","JSON","stringify","parse","useParams","subscription","user","console","warn","Error","subscribe","result","finally","unsubscribe","useQuerySubscription","window","groqStore","Promise","reject","listen","overlayDrafts","subscriptionThrottleMs"],"mappings":"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"}
@@ -15,7 +15,6 @@ function _defineProperties(target, props) {
15
15
  Object.defineProperty(target, descriptor.key, descriptor);
16
16
  }
17
17
  }
18
-
19
18
  function _createClass(Constructor, protoProps, staticProps) {
20
19
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
21
20
  if (staticProps) _defineProperties(Constructor, staticProps);
@@ -31,23 +30,18 @@ var MockAbortController = /*#__PURE__*/function () {
31
30
  aborted: false
32
31
  };
33
32
  }
34
-
35
33
  var _proto = MockAbortController.prototype;
36
-
37
34
  _proto.abort = function abort() {
38
35
  this._signal.aborted = true;
39
36
  };
40
-
41
37
  _createClass(MockAbortController, [{
42
38
  key: "signal",
43
39
  get: function get() {
44
40
  return this._signal;
45
41
  }
46
42
  }]);
47
-
48
43
  return MockAbortController;
49
44
  }();
50
-
51
45
  function getAborter() {
52
46
  return typeof AbortController === 'undefined' ? new MockAbortController() : new AbortController();
53
47
  }
@@ -73,16 +67,13 @@ function getCurrentUser(projectId, abort, token) {
73
67
  return res != null && res.id ? res : null;
74
68
  });
75
69
  }
76
-
77
70
  function useCurrentUser(projectId) {
78
71
  var _useState = useState(),
79
- data = _useState[0],
80
- setUser = _useState[1];
81
-
72
+ data = _useState[0],
73
+ setUser = _useState[1];
82
74
  var _useState2 = useState(),
83
- error = _useState2[0],
84
- setError = _useState2[1];
85
-
75
+ error = _useState2[0],
76
+ setError = _useState2[1];
86
77
  useEffect(function () {
87
78
  var aborter = getAborter();
88
79
  getCurrentUser(projectId, aborter).then(setUser).catch(function (err) {
@@ -99,27 +90,26 @@ function useCurrentUser(projectId) {
99
90
  };
100
91
  }
101
92
 
102
- var EMPTY_PARAMS = {}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
103
-
93
+ var EMPTY_PARAMS = {};
94
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
104
95
  function createPreviewSubscriptionHook(_ref) {
105
96
  var projectId = _ref.projectId,
106
- dataset = _ref.dataset,
107
- token = _ref.token,
108
- EventSource = _ref.EventSource,
109
- _ref$documentLimit = _ref.documentLimit,
110
- documentLimit = _ref$documentLimit === void 0 ? 3000 : _ref$documentLimit;
97
+ dataset = _ref.dataset,
98
+ token = _ref.token,
99
+ EventSource = _ref.EventSource,
100
+ _ref$documentLimit = _ref.documentLimit,
101
+ documentLimit = _ref$documentLimit === void 0 ? 3000 : _ref$documentLimit;
111
102
  // Only construct/setup the store when `getStore()` is called
112
103
  var store;
113
104
  return function usePreviewSubscription(query, options) {
114
105
  if (options === void 0) {
115
106
  options = {};
116
107
  }
117
-
118
108
  var _options = options,
119
- _options$params = _options.params,
120
- params = _options$params === void 0 ? EMPTY_PARAMS : _options$params,
121
- initialData = _options.initialData,
122
- enabled = _options.enabled;
109
+ _options$params = _options.params,
110
+ params = _options$params === void 0 ? EMPTY_PARAMS : _options$params,
111
+ initialData = _options.initialData,
112
+ enabled = _options.enabled;
123
113
  return useQuerySubscription({
124
114
  getStore: getStore,
125
115
  projectId: projectId,
@@ -130,20 +120,17 @@ function createPreviewSubscriptionHook(_ref) {
130
120
  token: token
131
121
  });
132
122
  };
133
-
134
123
  function getStore(abort) {
135
124
  if (!store) {
136
125
  store = import('@sanity/groq-store').then(function (_ref2) {
137
126
  var groqStore = _ref2.groqStore;
138
-
139
127
  // Skip creating the groq store if we've been unmounted to save memory and reduce gc pressure
140
128
  if (abort.signal.aborted) {
141
- var error = new Error('Cancelling groq store creation'); // This ensures we can skip it in the catch block same way
142
-
129
+ var error = new Error('Cancelling groq store creation');
130
+ // This ensures we can skip it in the catch block same way
143
131
  error.name = 'AbortError';
144
132
  return Promise.reject(error);
145
133
  }
146
-
147
134
  return groqStore({
148
135
  projectId: projectId,
149
136
  dataset: dataset,
@@ -156,49 +143,41 @@ function createPreviewSubscriptionHook(_ref) {
156
143
  });
157
144
  });
158
145
  }
159
-
160
146
  return store;
161
147
  }
162
148
  }
163
-
164
149
  function useQuerySubscription(options) {
165
150
  var getStore = options.getStore,
166
- projectId = options.projectId,
167
- query = options.query,
168
- initialData = options.initialData,
169
- _options$enabled = options.enabled,
170
- enabled = _options$enabled === void 0 ? false : _options$enabled,
171
- token = options.token;
172
-
151
+ projectId = options.projectId,
152
+ query = options.query,
153
+ initialData = options.initialData,
154
+ _options$enabled = options.enabled,
155
+ enabled = _options$enabled === void 0 ? false : _options$enabled,
156
+ token = options.token;
173
157
  var _useState = useState(),
174
- error = _useState[0],
175
- setError = _useState[1];
176
-
158
+ error = _useState[0],
159
+ setError = _useState[1];
177
160
  var _useState2 = useState(false),
178
- loading = _useState2[0],
179
- setLoading = _useState2[1];
180
-
161
+ loading = _useState2[0],
162
+ setLoading = _useState2[1];
181
163
  var _useState3 = useState(),
182
- data = _useState3[0],
183
- setData = _useState3[1];
184
-
185
- var params = useParams(options.params); // Use "deep" dependency comparison because params are often not _referentially_ equal,
164
+ data = _useState3[0],
165
+ setData = _useState3[1];
166
+ var params = useParams(options.params);
167
+ // Use "deep" dependency comparison because params are often not _referentially_ equal,
186
168
  // but contains the same shallow properties, eg `{"slug": "some-slug"}`
187
-
188
169
  useEffect(function () {
189
170
  if (!enabled) {
190
171
  return;
191
172
  }
192
-
193
173
  setLoading(true);
194
174
  var aborter = getAborter();
195
175
  var subscription;
196
176
  getCurrentUser(projectId, aborter, token).then(function (user) {
197
177
  if (user) {
198
178
  return;
199
- } // eslint-disable-next-line no-console
200
-
201
-
179
+ }
180
+ // eslint-disable-next-line no-console
202
181
  console.warn('Not authenticated - preview not available');
203
182
  throw new Error('Not authenticated - preview not available');
204
183
  }).then(function () {
@@ -215,13 +194,12 @@ function useQuerySubscription(options) {
215
194
  return err.name === 'AbortError' ? null : setError(err);
216
195
  }).finally(function () {
217
196
  return setLoading(false);
218
- }); // eslint-disable-next-line consistent-return
219
-
197
+ });
198
+ // eslint-disable-next-line consistent-return
220
199
  return function () {
221
200
  if (subscription) {
222
201
  subscription.unsubscribe();
223
202
  }
224
-
225
203
  aborter.abort();
226
204
  };
227
205
  }, [getStore, query, params, enabled, projectId, token]);
@@ -230,9 +208,8 @@ function useQuerySubscription(options) {
230
208
  loading: loading,
231
209
  error: error
232
210
  };
233
- } // Return params that are stable with deep equal as long as the key order is the same
234
-
235
-
211
+ }
212
+ // Return params that are stable with deep equal as long as the key order is the same
236
213
  function useParams(params) {
237
214
  var stringifiedParams = useMemo(function () {
238
215
  return JSON.stringify(params);
@@ -1 +1 @@
1
- {"version":3,"file":"next-sanity.esm.js","sources":["../src/client.ts","../src/aborter.ts","../src/currentUser.ts","../src/useSubscription.ts"],"sourcesContent":["import type {ClientConfig, SanityClient} from '@sanity/client'\nimport sanityClient from '@sanity/client'\n\nexport function createClient(config: ClientConfig): SanityClient {\n return sanityClient(config)\n}\n","export interface Aborter {\n abort(): void\n signal: AbortSignal\n}\n\nclass MockAbortController {\n _signal = {aborted: false}\n get signal() {\n return this._signal as AbortSignal\n }\n abort() {\n this._signal.aborted = true\n }\n}\n\nexport function getAborter(): Aborter {\n return typeof AbortController === 'undefined'\n ? new MockAbortController()\n : new AbortController()\n}\n","import {useEffect, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {CurrentUser} from './types'\n\nexport function createCurrentUserHook({projectId}: {projectId: string; dataset?: string}) {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n return () => useCurrentUser(projectId)\n}\n\nexport function getCurrentUser(\n projectId: string,\n abort: Aborter,\n token?: string\n): Promise<CurrentUser | null> {\n const headers = token ? {Authorization: `Bearer ${token}`} : undefined\n return fetch(`https://${projectId}.api.sanity.io/v1/users/me`, {\n credentials: 'include',\n signal: abort.signal,\n headers,\n })\n .then((res) => res.json())\n .then((res) => (res?.id ? res : null))\n}\n\nfunction useCurrentUser(projectId: string) {\n const [data, setUser] = useState<CurrentUser | null>()\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n const aborter = getAborter()\n getCurrentUser(projectId, aborter)\n .then(setUser)\n .catch((err: Error) => err.name !== 'AbortError' && setError(err))\n\n return () => {\n aborter.abort()\n }\n }, [projectId])\n\n return {data, error, loading: data !== null || !error}\n}\n","import {GroqStore, Subscription} from '@sanity/groq-store'\nimport {useEffect, useMemo, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {getCurrentUser} from './currentUser'\nimport {ProjectConfig} from './types'\n\nconst EMPTY_PARAMS = {}\n\nexport type Params = Record<string, unknown>\nexport interface SubscriptionOptions<R = any> {\n enabled?: boolean\n params?: Params\n initialData?: R\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function createPreviewSubscriptionHook({\n projectId,\n dataset,\n token,\n EventSource,\n documentLimit = 3000,\n}: ProjectConfig & {documentLimit?: number}) {\n // Only construct/setup the store when `getStore()` is called\n let store: Promise<GroqStore>\n\n return function usePreviewSubscription<R = any>(\n query: string,\n options: SubscriptionOptions<R> = {}\n ) {\n const {params = EMPTY_PARAMS, initialData, enabled} = options\n return useQuerySubscription<R>({\n getStore,\n projectId,\n query,\n params,\n initialData: initialData as any,\n enabled: enabled ? typeof window !== 'undefined' : false,\n token,\n })\n }\n\n function getStore(abort: Aborter) {\n if (!store) {\n store = import('@sanity/groq-store').then(({groqStore}) => {\n // Skip creating the groq store if we've been unmounted to save memory and reduce gc pressure\n if (abort.signal.aborted) {\n const error = new Error('Cancelling groq store creation')\n // This ensures we can skip it in the catch block same way\n error.name = 'AbortError'\n return Promise.reject(error)\n }\n\n return groqStore({\n projectId,\n dataset,\n documentLimit,\n token,\n EventSource,\n listen: true,\n overlayDrafts: true,\n subscriptionThrottleMs: 10,\n })\n })\n }\n return store\n }\n}\n\nfunction useQuerySubscription<R = any>(options: {\n getStore: (abort: Aborter) => Promise<GroqStore>\n projectId: string\n query: string\n params: Params\n initialData: R\n enabled: boolean\n token?: string\n}) {\n const {getStore, projectId, query, initialData, enabled = false, token} = options\n const [error, setError] = useState<Error>()\n const [loading, setLoading] = useState(false)\n const [data, setData] = useState<R>()\n const params = useParams(options.params)\n\n // Use \"deep\" dependency comparison because params are often not _referentially_ equal,\n // but contains the same shallow properties, eg `{\"slug\": \"some-slug\"}`\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n setLoading(true)\n\n const aborter = getAborter()\n let subscription: Subscription | undefined\n getCurrentUser(projectId, aborter, token)\n .then((user) => {\n if (user) {\n return\n }\n\n // eslint-disable-next-line no-console\n console.warn('Not authenticated - preview not available')\n throw new Error('Not authenticated - preview not available')\n })\n .then(() => getStore(aborter))\n .then((store) => {\n subscription = store.subscribe(query, params, (err, result) => {\n if (err) {\n setError(err)\n } else {\n setData(result)\n }\n })\n })\n .catch((err: Error) => (err.name === 'AbortError' ? null : setError(err)))\n .finally(() => setLoading(false))\n\n // eslint-disable-next-line consistent-return\n return () => {\n if (subscription) {\n subscription.unsubscribe()\n }\n\n aborter.abort()\n }\n }, [getStore, query, params, enabled, projectId, token])\n\n return {\n data: typeof data === 'undefined' ? initialData : data,\n loading,\n error,\n }\n}\n\n// Return params that are stable with deep equal as long as the key order is the same\nfunction useParams(params: Params): Params {\n const stringifiedParams = useMemo(() => JSON.stringify(params), [params])\n return useMemo(() => JSON.parse(stringifiedParams), [stringifiedParams])\n}\n"],"names":["createClient","config","sanityClient","MockAbortController","aborted","abort","_signal","getAborter","AbortController","createCurrentUserHook","projectId","useCurrentUser","getCurrentUser","token","headers","Authorization","undefined","fetch","credentials","signal","then","res","json","id","useState","data","setUser","error","setError","useEffect","aborter","catch","err","name","loading","EMPTY_PARAMS","createPreviewSubscriptionHook","dataset","EventSource","documentLimit","store","usePreviewSubscription","query","options","params","initialData","enabled","useQuerySubscription","getStore","window","groqStore","Error","Promise","reject","listen","overlayDrafts","subscriptionThrottleMs","setLoading","setData","useParams","subscription","user","console","warn","subscribe","result","finally","unsubscribe","stringifiedParams","useMemo","JSON","stringify","parse"],"mappings":"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"}
1
+ {"version":3,"file":"next-sanity.esm.js","sources":["../src/client.ts","../src/aborter.ts","../src/currentUser.ts","../src/useSubscription.ts"],"sourcesContent":["import type {ClientConfig, SanityClient} from '@sanity/client'\nimport sanityClient from '@sanity/client'\n\nexport function createClient(config: ClientConfig): SanityClient {\n return sanityClient(config)\n}\n","export interface Aborter {\n abort(): void\n signal: AbortSignal\n}\n\nclass MockAbortController {\n _signal = {aborted: false}\n get signal() {\n return this._signal as AbortSignal\n }\n abort() {\n this._signal.aborted = true\n }\n}\n\nexport function getAborter(): Aborter {\n return typeof AbortController === 'undefined'\n ? new MockAbortController()\n : new AbortController()\n}\n","import {useEffect, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {CurrentUser} from './types'\n\nexport function createCurrentUserHook({projectId}: {projectId: string; dataset?: string}) {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n return () => useCurrentUser(projectId)\n}\n\nexport function getCurrentUser(\n projectId: string,\n abort: Aborter,\n token?: string\n): Promise<CurrentUser | null> {\n const headers = token ? {Authorization: `Bearer ${token}`} : undefined\n return fetch(`https://${projectId}.api.sanity.io/v1/users/me`, {\n credentials: 'include',\n signal: abort.signal,\n headers,\n })\n .then((res) => res.json())\n .then((res) => (res?.id ? res : null))\n}\n\nfunction useCurrentUser(projectId: string) {\n const [data, setUser] = useState<CurrentUser | null>()\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n const aborter = getAborter()\n getCurrentUser(projectId, aborter)\n .then(setUser)\n .catch((err: Error) => err.name !== 'AbortError' && setError(err))\n\n return () => {\n aborter.abort()\n }\n }, [projectId])\n\n return {data, error, loading: data !== null || !error}\n}\n","import {GroqStore, Subscription} from '@sanity/groq-store'\nimport {useEffect, useMemo, useState} from 'react'\n\nimport {Aborter, getAborter} from './aborter'\nimport {getCurrentUser} from './currentUser'\nimport {ProjectConfig} from './types'\n\nconst EMPTY_PARAMS = {}\n\nexport type Params = Record<string, unknown>\nexport interface SubscriptionOptions<R = any> {\n enabled?: boolean\n params?: Params\n initialData?: R\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function createPreviewSubscriptionHook({\n projectId,\n dataset,\n token,\n EventSource,\n documentLimit = 3000,\n}: ProjectConfig & {documentLimit?: number}) {\n // Only construct/setup the store when `getStore()` is called\n let store: Promise<GroqStore>\n\n return function usePreviewSubscription<R = any>(\n query: string,\n options: SubscriptionOptions<R> = {}\n ) {\n const {params = EMPTY_PARAMS, initialData, enabled} = options\n return useQuerySubscription<R>({\n getStore,\n projectId,\n query,\n params,\n initialData: initialData as any,\n enabled: enabled ? typeof window !== 'undefined' : false,\n token,\n })\n }\n\n function getStore(abort: Aborter) {\n if (!store) {\n store = import('@sanity/groq-store').then(({groqStore}) => {\n // Skip creating the groq store if we've been unmounted to save memory and reduce gc pressure\n if (abort.signal.aborted) {\n const error = new Error('Cancelling groq store creation')\n // This ensures we can skip it in the catch block same way\n error.name = 'AbortError'\n return Promise.reject(error)\n }\n\n return groqStore({\n projectId,\n dataset,\n documentLimit,\n token,\n EventSource,\n listen: true,\n overlayDrafts: true,\n subscriptionThrottleMs: 10,\n })\n })\n }\n return store\n }\n}\n\nfunction useQuerySubscription<R = any>(options: {\n getStore: (abort: Aborter) => Promise<GroqStore>\n projectId: string\n query: string\n params: Params\n initialData: R\n enabled: boolean\n token?: string\n}) {\n const {getStore, projectId, query, initialData, enabled = false, token} = options\n const [error, setError] = useState<Error>()\n const [loading, setLoading] = useState(false)\n const [data, setData] = useState<R>()\n const params = useParams(options.params)\n\n // Use \"deep\" dependency comparison because params are often not _referentially_ equal,\n // but contains the same shallow properties, eg `{\"slug\": \"some-slug\"}`\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n setLoading(true)\n\n const aborter = getAborter()\n let subscription: Subscription | undefined\n getCurrentUser(projectId, aborter, token)\n .then((user) => {\n if (user) {\n return\n }\n\n // eslint-disable-next-line no-console\n console.warn('Not authenticated - preview not available')\n throw new Error('Not authenticated - preview not available')\n })\n .then(() => getStore(aborter))\n .then((store) => {\n subscription = store.subscribe(query, params, (err, result) => {\n if (err) {\n setError(err)\n } else {\n setData(result)\n }\n })\n })\n .catch((err: Error) => (err.name === 'AbortError' ? null : setError(err)))\n .finally(() => setLoading(false))\n\n // eslint-disable-next-line consistent-return\n return () => {\n if (subscription) {\n subscription.unsubscribe()\n }\n\n aborter.abort()\n }\n }, [getStore, query, params, enabled, projectId, token])\n\n return {\n data: typeof data === 'undefined' ? initialData : data,\n loading,\n error,\n }\n}\n\n// Return params that are stable with deep equal as long as the key order is the same\nfunction useParams(params: Params): Params {\n const stringifiedParams = useMemo(() => JSON.stringify(params), [params])\n return useMemo(() => JSON.parse(stringifiedParams), [stringifiedParams])\n}\n"],"names":["createClient","config","sanityClient","MockAbortController","aborted","abort","_signal","getAborter","AbortController","createCurrentUserHook","projectId","useCurrentUser","getCurrentUser","token","headers","Authorization","undefined","fetch","credentials","signal","then","res","json","id","useState","data","setUser","error","setError","useEffect","aborter","catch","err","name","loading","EMPTY_PARAMS","createPreviewSubscriptionHook","dataset","EventSource","documentLimit","store","usePreviewSubscription","query","options","params","initialData","enabled","useQuerySubscription","getStore","window","groqStore","Error","Promise","reject","listen","overlayDrafts","subscriptionThrottleMs","setLoading","setData","useParams","subscription","user","console","warn","subscribe","result","finally","unsubscribe","stringifiedParams","useMemo","JSON","stringify","parse"],"mappings":"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"}
@@ -35,6 +35,10 @@ export interface NextStudioProps extends StudioProps {
35
35
  * Sets the background color of <html>
36
36
  */
37
37
  unstable__bg?: NextStudioGlobalStyleProps['bg'];
38
+ /**
39
+ * Sets the font-family of #__next
40
+ */
41
+ unstable__fontFamily?: NextStudioGlobalStyleProps['fontFamily'];
38
42
  /**
39
43
  * Don't load the favicon meta tags
40
44
  */
@@ -44,4 +48,4 @@ export interface NextStudioProps extends StudioProps {
44
48
  */
45
49
  unstable__noNoScript?: boolean;
46
50
  }
47
- export declare const NextStudio: import("react").MemoExoticComponent<({ children, config, unstable__noGlobalStyle, unstable__noTailwindSvgFix, unstable__head, unstable__document_title, unstable__bg, unstable__noFavicons, unstable__noNoScript, ...props }: NextStudioProps) => JSX.Element>;
51
+ export declare const NextStudio: import("react").MemoExoticComponent<({ children, config, unstable__noGlobalStyle, unstable__noTailwindSvgFix, unstable__head, unstable__document_title, unstable__bg, unstable__fontFamily, unstable__noFavicons, unstable__noNoScript, ...props }: NextStudioProps) => JSX.Element>;
@@ -1,4 +1,5 @@
1
1
  export interface NextStudioGlobalStyleProps {
2
+ fontFamily?: string;
2
3
  bg?: string;
3
4
  unstable__tailwindSvgFix?: boolean;
4
5
  }
@@ -1,2 +1 @@
1
- /// <reference types="react" />
2
1
  export declare const NextStudioNoScript: () => JSX.Element;
@@ -29,7 +29,7 @@ import Document, { DocumentContext } from 'next/document';
29
29
  */
30
30
  export declare class ServerStyleSheetDocument extends Document {
31
31
  static getInitialProps(ctx: DocumentContext): Promise<{
32
- styles: ({} | undefined)[];
32
+ styles: (import("react").ReactFragment | JSX.Element | undefined)[];
33
33
  html: string;
34
34
  head?: (JSX.Element | null)[] | undefined;
35
35
  }>;
@@ -13,6 +13,7 @@ export declare type MetaThemeColors = {
13
13
  themeColorDark: string;
14
14
  };
15
15
  export declare const useBackgroundColorsFromTheme: (theme: StudioTheme) => MetaThemeColors;
16
+ export declare const useTextFontFamilyFromTheme: (theme: StudioTheme) => string;
16
17
  /**
17
18
  * Parses the next route to determine the what the base path for Sanity Studio should be
18
19
  */
package/lib/cjs/studio.js CHANGED
@@ -39,9 +39,10 @@ $parcel$export($c8bf9e0a6313dcb9$exports, "NextStudio", () => $c8bf9e0a6313dcb9$
39
39
  /**
40
40
  * Intended to render at the root of a page, letting the Studio own that page and render much like it would if you used `npx sanity start` to render
41
41
  * It's a drop-in replacement for `import {Studio} from 'sanity'`
42
- */ const $c8bf9e0a6313dcb9$var$NextStudioComponent = ({ children: children , config: config , unstable__noGlobalStyle: unstable__noGlobalStyle , unstable__noTailwindSvgFix: unstable__noTailwindSvgFix , unstable__head: unstable__head , unstable__document_title: unstable__document_title , unstable__bg: unstable__bg , unstable__noFavicons: unstable__noFavicons , unstable__noNoScript: unstable__noNoScript , ...props })=>{
42
+ */ const $c8bf9e0a6313dcb9$var$NextStudioComponent = ({ children: children , config: config , unstable__noGlobalStyle: unstable__noGlobalStyle , unstable__noTailwindSvgFix: unstable__noTailwindSvgFix , unstable__head: unstable__head , unstable__document_title: unstable__document_title , unstable__bg: unstable__bg , unstable__fontFamily: unstable__fontFamily , unstable__noFavicons: unstable__noFavicons , unstable__noNoScript: unstable__noNoScript , ...props })=>{
43
43
  const theme = (0, $b07d91633f3d677b$export$93d4e7f90805808f)(config);
44
44
  const { themeColorLight: themeColorLight , themeColorDark: themeColorDark } = (0, $b07d91633f3d677b$export$d3a2146a441ec034)(theme);
45
+ const themeFontFamily = (0, $b07d91633f3d677b$export$1e8b2c0d4a692a9b)(theme);
45
46
  return /*#__PURE__*/ (0, $cerUD$reactjsxruntime.jsxs)((0, $cerUD$reactjsxruntime.Fragment), {
46
47
  children: [
47
48
  children || /*#__PURE__*/ (0, $cerUD$reactjsxruntime.jsx)((0, $cerUD$sanity.Studio), {
@@ -57,6 +58,7 @@ $parcel$export($c8bf9e0a6313dcb9$exports, "NextStudio", () => $c8bf9e0a6313dcb9$
57
58
  }),
58
59
  !unstable__noGlobalStyle && /*#__PURE__*/ (0, $cerUD$reactjsxruntime.jsx)((0, $1ac20522861d7f1e$export$c8fda7ee7699d07e), {
59
60
  bg: unstable__bg !== null && unstable__bg !== void 0 ? unstable__bg : themeColorLight,
61
+ fontFamily: unstable__fontFamily !== null && unstable__fontFamily !== void 0 ? unstable__fontFamily : themeFontFamily,
60
62
  unstable__tailwindSvgFix: !unstable__noTailwindSvgFix
61
63
  }),
62
64
  !unstable__noNoScript && /*#__PURE__*/ (0, $cerUD$reactjsxruntime.jsx)((0, $817646c15207d6a3$export$39af4e536de5c6ed), {})
@@ -70,8 +72,8 @@ var $1ac20522861d7f1e$exports = {};
70
72
 
71
73
  $parcel$export($1ac20522861d7f1e$exports, "NextStudioGlobalStyle", () => $1ac20522861d7f1e$export$c8fda7ee7699d07e);
72
74
 
73
- let $1ac20522861d7f1e$var$_ = (t)=>t, $1ac20522861d7f1e$var$t, $1ac20522861d7f1e$var$t1, $1ac20522861d7f1e$var$t2;
74
- const $1ac20522861d7f1e$export$c8fda7ee7699d07e = (0, $cerUD$styledcomponents.createGlobalStyle)($1ac20522861d7f1e$var$t2 || ($1ac20522861d7f1e$var$t2 = $1ac20522861d7f1e$var$_`
75
+ let $1ac20522861d7f1e$var$_ = (t)=>t, $1ac20522861d7f1e$var$t, $1ac20522861d7f1e$var$t1, $1ac20522861d7f1e$var$t2, $1ac20522861d7f1e$var$t3;
76
+ const $1ac20522861d7f1e$export$c8fda7ee7699d07e = (0, $cerUD$styledcomponents.createGlobalStyle)($1ac20522861d7f1e$var$t3 || ($1ac20522861d7f1e$var$t3 = $1ac20522861d7f1e$var$_`
75
77
  ${0}
76
78
  html,
77
79
  body,
@@ -83,11 +85,16 @@ body {
83
85
  overscroll-behavior: none;
84
86
  -webkit-font-smoothing: antialiased;
85
87
  }
88
+ ${0}
86
89
  ${0}`), ({ bg: bg })=>bg ? (0, $cerUD$styledcomponents.css)($1ac20522861d7f1e$var$t || ($1ac20522861d7f1e$var$t = $1ac20522861d7f1e$var$_`
87
90
  html {
88
91
  background-color: ${0};
89
92
  }
90
- `), bg) : "", ({ unstable__tailwindSvgFix: unstable__tailwindSvgFix })=>unstable__tailwindSvgFix ? (0, $cerUD$styledcomponents.css)($1ac20522861d7f1e$var$t1 || ($1ac20522861d7f1e$var$t1 = $1ac20522861d7f1e$var$_`
93
+ `), bg) : "", ({ fontFamily: fontFamily })=>fontFamily ? (0, $cerUD$styledcomponents.css)($1ac20522861d7f1e$var$t1 || ($1ac20522861d7f1e$var$t1 = $1ac20522861d7f1e$var$_`
94
+ #__next {
95
+ font-family: ${0};
96
+ }
97
+ `), fontFamily) : "", ({ unstable__tailwindSvgFix: unstable__tailwindSvgFix })=>unstable__tailwindSvgFix ? (0, $cerUD$styledcomponents.css)($1ac20522861d7f1e$var$t2 || ($1ac20522861d7f1e$var$t2 = $1ac20522861d7f1e$var$_`
91
98
  /* override tailwind reset */
92
99
  :root svg {
93
100
  display: inline;
@@ -290,6 +297,7 @@ $parcel$export($b07d91633f3d677b$exports, "isWorkspaces", () => $b07d91633f3d677
290
297
  $parcel$export($b07d91633f3d677b$exports, "isWorkspaceWithTheme", () => $b07d91633f3d677b$export$31236b9ee07dd150);
291
298
  $parcel$export($b07d91633f3d677b$exports, "useTheme", () => $b07d91633f3d677b$export$93d4e7f90805808f);
292
299
  $parcel$export($b07d91633f3d677b$exports, "useBackgroundColorsFromTheme", () => $b07d91633f3d677b$export$d3a2146a441ec034);
300
+ $parcel$export($b07d91633f3d677b$exports, "useTextFontFamilyFromTheme", () => $b07d91633f3d677b$export$1e8b2c0d4a692a9b);
293
301
  $parcel$export($b07d91633f3d677b$exports, "useBasePath", () => $b07d91633f3d677b$export$53bdd69a9f9bd75);
294
302
  $parcel$export($b07d91633f3d677b$exports, "useConfigWithBasePath", () => $b07d91633f3d677b$export$297ba38aa0562c6e);
295
303
 
@@ -317,6 +325,11 @@ const $b07d91633f3d677b$export$d3a2146a441ec034 = (theme)=>{
317
325
  theme
318
326
  ]);
319
327
  };
328
+ const $b07d91633f3d677b$export$1e8b2c0d4a692a9b = (theme)=>{
329
+ return (0, $cerUD$react.useMemo)(()=>theme.fonts.text.family, [
330
+ theme
331
+ ]);
332
+ };
320
333
  function $b07d91633f3d677b$export$53bdd69a9f9bd75() {
321
334
  const router = (0, $cerUD$nextrouter.useRouter)();
322
335
  return (0, $cerUD$react.useMemo)(()=>{
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/studio.ts","src/studio/index.ts","src/studio/NextStudio.tsx","src/studio/NextStudioGlobalStyle.ts","src/studio/NextStudioHead.tsx","node_modules/@parcel/runtime-js/lib/runtime-ef9b7f9202d9a806.js","node_modules/@parcel/runtime-js/lib/runtime-0bfed5d474c54129.js","node_modules/@parcel/runtime-js/lib/runtime-611c430ae589140e.js","node_modules/@parcel/runtime-js/lib/runtime-2afc5d6315990f14.js","node_modules/@parcel/runtime-js/lib/runtime-2f5b0c062978bd21.js","src/studio/webmanifest.json","src/studio/NextStudioNoScript.tsx","src/studio/ServerStyleSheetDocument.tsx","src/studio/utils.ts"],"sourcesContent":["export * from './studio/index'\n","export * from './NextStudio'\nexport * from './NextStudioGlobalStyle'\nexport * from './NextStudioHead'\nexport * from './NextStudioNoScript'\nexport * from './ServerStyleSheetDocument'\nexport * from './utils'\n","import {memo} from 'react'\nimport {type StudioProps, Studio} from 'sanity'\n\nimport {\n type NextStudioHeadProps,\n NextStudioGlobalStyle,\n NextStudioGlobalStyleProps,\n NextStudioHead,\n NextStudioNoScript,\n useBackgroundColorsFromTheme,\n useTheme,\n} from '.'\n\nexport interface NextStudioProps extends StudioProps {\n /**\n * Override how the Studio renders by passing children.\n * This is useful for advanced use cases where you're using StudioProvider and StudioLayout instead of Studio:\n * import {StudioProvider, StudioLayout} from 'sanity'\n * import {NextStudio} from 'next-sanity/studio'\n * <NextStudio config={config}>\n * <StudioProvider config={config}>\n * <CustomComponentThatUsesContextFromStudioProvider />\n * <StudioLayout />\n * </StudioProvider>\n * </NextStudio>\n */\n children?: React.ReactNode\n /**\n * Turns off the default global styling\n */\n unstable__noGlobalStyle?: boolean\n /**\n * Apply fix with SVG icon centering that happens if TailwindCSS is loaded, on by defautl\n */\n unstable__noTailwindSvgFix?: NextStudioGlobalStyleProps['unstable__tailwindSvgFix']\n /**\n * Add stuff to the head with next/head\n */\n unstable__head?: NextStudioHeadProps['children']\n /**\n * Sets the document title\n */\n unstable__document_title?: NextStudioHeadProps['title']\n /**\n * Sets the background color of <html>\n */\n unstable__bg?: NextStudioGlobalStyleProps['bg']\n /**\n * Don't load the favicon meta tags\n */\n unstable__noFavicons?: boolean\n /**\n * Don't render the <noscript> tag\n */\n unstable__noNoScript?: boolean\n}\n/**\n * Intended to render at the root of a page, letting the Studio own that page and render much like it would if you used `npx sanity start` to render\n * It's a drop-in replacement for `import {Studio} from 'sanity'`\n */\nconst NextStudioComponent = ({\n children,\n config,\n unstable__noGlobalStyle,\n unstable__noTailwindSvgFix,\n unstable__head,\n unstable__document_title,\n unstable__bg,\n unstable__noFavicons,\n unstable__noNoScript,\n ...props\n}: NextStudioProps) => {\n const theme = useTheme(config)\n const {themeColorLight, themeColorDark} = useBackgroundColorsFromTheme(theme)\n return (\n <>\n {children || <Studio config={config} {...props} />}\n <NextStudioHead\n themeColorLight={themeColorLight}\n themeColorDark={themeColorDark}\n title={unstable__document_title}\n favicons={!unstable__noFavicons}\n >\n {unstable__head}\n </NextStudioHead>\n {!unstable__noGlobalStyle && (\n <NextStudioGlobalStyle\n bg={unstable__bg ?? themeColorLight}\n unstable__tailwindSvgFix={!unstable__noTailwindSvgFix}\n />\n )}\n {!unstable__noNoScript && <NextStudioNoScript />}\n </>\n )\n}\nexport const NextStudio = memo(NextStudioComponent)\n","import {createGlobalStyle, css} from 'styled-components'\n\nexport interface NextStudioGlobalStyleProps {\n bg?: string\n unstable__tailwindSvgFix?: boolean\n}\nexport const NextStudioGlobalStyle = createGlobalStyle<NextStudioGlobalStyleProps>`\n${({bg}) =>\n bg\n ? css`\n html {\n background-color: ${bg};\n }\n `\n : ''}\nhtml,\nbody,\n#__next {\n height: 100%;\n}\nbody {\n margin: 0;\n overscroll-behavior: none;\n -webkit-font-smoothing: antialiased;\n}\n${({unstable__tailwindSvgFix}) =>\n unstable__tailwindSvgFix\n ? css`\n /* override tailwind reset */\n :root svg {\n display: inline;\n }\n `\n : ''}`\n","/* eslint-disable no-process-env */\nimport Head from 'next/head'\nimport {type ComponentProps, memo, useCallback} from 'react'\n\n// @ts-ignore\nimport iconApple from './apple-touch-icon.png'\n// @ts-ignore\nimport iconIco from './favicon.ico'\n// @ts-ignore\nimport iconSvg from './favicon.svg'\n// @ts-ignore\nimport icon192 from './favicon-192.png'\n// @ts-ignore\nimport icon512 from './favicon-512.png'\nimport type {MetaThemeColors} from './utils'\nimport webmanifest from './webmanifest.json'\n\n// Interop between how Parcel and Next deals with asset imports\nconst interop = (href: string | {src: string}): string =>\n typeof href === 'string' ? href : href.src\n\nexport interface NextStudioHeadProps extends Partial<MetaThemeColors> {\n children?: ComponentProps<typeof Head>['children']\n title?: string\n favicons?: boolean\n}\nconst NextStudioHeadComponent = ({\n children,\n themeColorDark,\n themeColorLight,\n title = 'Sanity Studio',\n favicons,\n}: NextStudioHeadProps) => {\n const inlineWebmanifest = useCallback(() => {\n const manifest = JSON.parse(JSON.stringify(webmanifest))\n const icons = manifest.icons.map((icon: any) => {\n // Inline manifests works best when URLs are absolute\n const src =\n // eslint-disable-next-line no-nested-ternary\n icon.src === './favicon-192.png'\n ? interop(icon192)\n : icon.src === './favicon-512.png'\n ? interop(icon512)\n : icon.src\n return {\n ...icon,\n src: process.env.NEXT_PUBLIC_VERCEL_URL\n ? new URL(src, `https://${process.env.NEXT_PUBLIC_VERCEL_URL}`).toString()\n : src,\n }\n })\n return `data:application/manifest+json,${encodeURIComponent(\n JSON.stringify({...manifest, icons})\n )}`\n }, [])\n\n return (\n <Head>\n <meta\n name=\"viewport\"\n // Studio implements display cutouts CSS (The iPhone Notch ™ ) and needs `viewport-fit=covered` for it to work correctly\n content=\"width=device-width, initial-scale=1, viewport-fit=cover\"\n />\n <meta name=\"robots\" content=\"noindex\" />\n <meta name=\"referrer\" content=\"same-origin\" />\n {title && <title>{title}</title>}\n {favicons && <link rel=\"icon\" href={interop(iconIco)} sizes=\"any\" />}\n {favicons && <link rel=\"icon\" href={interop(iconSvg)} type=\"image/svg+xml\" />}\n {favicons && <link rel=\"apple-touch-icon\" href={interop(iconApple)} />}\n {favicons && (\n <link\n rel=\"manifest\"\n // eslint-disable-next-line no-warning-comments\n // @TODO until parcel fixes https://github.com/parcel-bundler/parcel/issues/8025 and stops stripping process.env.NEXT_PUBLIC_VERCEL_URL from the compiled code, use the remove webmanifest\n href={\n process.env.NEXT_PUBLIC_VERCEL_URL\n ? inlineWebmanifest()\n : 'https://next.sanity.build/manifest.webmanifest'\n }\n />\n )}\n {/* These theme-color tags makes the Studio look really really good on devices like iPads as the browser chrome adopts the Studio background */}\n {themeColorLight && (\n <meta\n key=\"theme-color-light\"\n name=\"theme-color\"\n content={themeColorLight}\n media=\"(prefers-color-scheme: light)\"\n />\n )}\n {themeColorDark && (\n <meta\n key=\"theme-color-dark\"\n name=\"theme-color\"\n content={themeColorDark}\n media=\"(prefers-color-scheme: dark)\"\n />\n )}\n {children}\n </Head>\n )\n}\n\nexport const NextStudioHead = memo(NextStudioHeadComponent)\n","module.exports = new __parcel__URL__(\"apple-touch-icon.abc4aca2.png\").toString();","module.exports = new __parcel__URL__(\"favicon.648fc2f2.ico\").toString();","module.exports = new __parcel__URL__(\"favicon.8f76876f.svg\").toString();","module.exports = new __parcel__URL__(\"favicon-192.40c8bab4.png\").toString();","module.exports = new __parcel__URL__(\"favicon-512.5e08f951.png\").toString();","{\n \"icons\": [\n {\n \"src\": \"./favicon-192.png\",\n \"type\": \"image/png\",\n \"sizes\": \"192x192\"\n },\n {\n \"src\": \"./favicon-512.png\",\n \"type\": \"image/png\",\n \"sizes\": \"512x512\"\n }\n ]\n}\n","/* eslint-disable react/no-danger */\n\nconst style = {\n __html: `\n.sanity-app-no-js__root {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #fff;\n}\n\n.sanity-app-no-js__content {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n font-family: helvetica, arial, sans-serif;\n}\n`,\n} as const\n\nexport const NextStudioNoScript = () => (\n <noscript>\n <div className=\"sanity-app-no-js__root\">\n <div className=\"sanity-app-no-js__content\">\n <style type=\"text/css\" dangerouslySetInnerHTML={style} />\n <h1>JavaScript disabled</h1>\n <p>\n Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n browser and reload the page to proceed.\n </p>\n </div>\n </div>\n </noscript>\n)\n","// We can disable this rule safely as we're not trying to use it outside pages/document, we're shipping a wrapper\n// eslint-disable-next-line @next/next/no-document-import-in-page\nimport Document, {type DocumentContext} from 'next/document'\nimport {ServerStyleSheet} from 'styled-components'\n\n/**\n * Usage, from a pages/_document.tsx file:\n * import {ServerStyleSheetDocument} from 'next-sanity/studio'\n *\n * export default class MyDocument extends ServerStyleSheetDocument {}\n *\n * To do extra stuff in getInitialProps:\n * import {ServerStyleSheetDocument} from 'next-sanity/studio'\n * import { type DocumentContext } from 'next/document'\n *\n * export default class MyDocument extends ServerStyleSheetDocument {\n * static async getInitialProps(ctx: DocumentContext) {\n * // You can still override renderPage:\n * const originalRenderPage = ctx.renderPage\n * ctx.renderPage = () => originalRenderPage({\n * enhanceApp: (App) => (props) => <App {...props} />\n * })\n *\n * const initialProps = await ServerStyleSheetDocument.getInitialProps(ctx)\n * const extraStyles = await getStyles()\n * return {\n * ...initialProps,\n * styles: [initialProps.styles, extraStyles],\n * }\n * }\n * }\n */\n\nexport class ServerStyleSheetDocument extends Document {\n static async getInitialProps(ctx: DocumentContext) {\n const sheet = new ServerStyleSheet()\n const originalRenderPage = ctx.renderPage\n\n try {\n ctx.renderPage = () =>\n originalRenderPage({\n enhanceApp: (App) => (props) => sheet.collectStyles(<App {...props} />),\n })\n\n const initialProps = await Document.getInitialProps(ctx)\n return {\n ...initialProps,\n styles: [initialProps.styles, sheet.getStyleElement()],\n }\n } finally {\n sheet.seal()\n }\n }\n}\n","import {useRouter} from 'next/router'\nimport {useMemo} from 'react'\nimport {\n type Config,\n type SingleWorkspace,\n type StudioTheme,\n type WorkspaceOptions,\n defaultTheme,\n} from 'sanity'\n\nexport type WithTheme = {\n theme: StudioTheme\n}\nexport type SingleWorkspaceWithTheme = Omit<SingleWorkspace, 'theme'> & WithTheme\nexport type WorkspaceOptionsWithTheme = Omit<WorkspaceOptions, 'theme'> & WithTheme\nexport type ConfigWithTheme = SingleWorkspaceWithTheme | WorkspaceOptionsWithTheme[]\n\nexport function isWorkspaces(config: Config): config is WorkspaceOptions[] {\n return Array.isArray(config)\n}\n\nexport function isWorkspaceWithTheme(\n workspace: SingleWorkspace | WorkspaceOptions\n): workspace is SingleWorkspaceWithTheme | WorkspaceOptionsWithTheme {\n return Boolean(workspace.theme)\n}\n\nexport function useTheme(config: Config): StudioTheme {\n const workspace = useMemo<SingleWorkspace | WorkspaceOptions>(\n () => (isWorkspaces(config) ? config[0] : config),\n [config]\n )\n return useMemo<StudioTheme>(\n () => (isWorkspaceWithTheme(workspace) ? workspace.theme : defaultTheme),\n [workspace]\n )\n}\n\nexport type MetaThemeColors = {\n themeColorLight: string\n themeColorDark: string\n}\nexport const useBackgroundColorsFromTheme = (theme: StudioTheme): MetaThemeColors => {\n return useMemo<MetaThemeColors>(\n () => ({\n themeColorLight: theme.color.light.default.base.bg,\n themeColorDark: theme.color.dark.default.base.bg,\n }),\n [theme]\n )\n}\n\n/**\n * Parses the next route to determine the what the base path for Sanity Studio should be\n */\nexport function useBasePath(): string {\n const router = useRouter()\n return useMemo(() => {\n const [basePath = '/'] = router.route.split('/[')\n return basePath\n }, [router.route])\n}\n\nexport interface WorkspaceWithBasePath extends Omit<WorkspaceOptions, 'basePath'> {\n basePath: string\n}\nexport type SingleWorkspaceWithBasePath = Omit<SingleWorkspace, 'basePath'> & {basePath: string}\nexport type ConfigWithBasePath = SingleWorkspaceWithBasePath | WorkspaceOptions[]\n/**\n * Apply the base path from next to the config, prefixing any defined base path\n */\nexport function useConfigWithBasePath(config: Config): ConfigWithBasePath {\n const basePath = useBasePath()\n return useMemo(() => {\n if (isWorkspaces(config)) {\n return config.map((workspace) => ({\n ...workspace,\n basePath: workspace.basePath === '/' ? basePath : `${basePath}${workspace.basePath}`,\n }))\n }\n return {\n ...config,\n basePath: config.basePath === '/' ? basePath : `${basePath}${config.basePath || ''}`,\n }\n }, [config, basePath])\n}\n"],"names":[],"version":3,"file":"studio.js.map"}
1
+ {"mappings":"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","sources":["src/studio.ts","src/studio/index.ts","src/studio/NextStudio.tsx","src/studio/NextStudioGlobalStyle.ts","src/studio/NextStudioHead.tsx","node_modules/@parcel/runtime-js/lib/runtime-ef9b7f9202d9a806.js","node_modules/@parcel/runtime-js/lib/runtime-0bfed5d474c54129.js","node_modules/@parcel/runtime-js/lib/runtime-611c430ae589140e.js","node_modules/@parcel/runtime-js/lib/runtime-2afc5d6315990f14.js","node_modules/@parcel/runtime-js/lib/runtime-2f5b0c062978bd21.js","src/studio/webmanifest.json","src/studio/NextStudioNoScript.tsx","src/studio/ServerStyleSheetDocument.tsx","src/studio/utils.ts"],"sourcesContent":["export * from './studio/index'\n","export * from './NextStudio'\nexport * from './NextStudioGlobalStyle'\nexport * from './NextStudioHead'\nexport * from './NextStudioNoScript'\nexport * from './ServerStyleSheetDocument'\nexport * from './utils'\n","import {memo} from 'react'\nimport {type StudioProps, Studio} from 'sanity'\n\nimport {\n type NextStudioHeadProps,\n NextStudioGlobalStyle,\n NextStudioGlobalStyleProps,\n NextStudioHead,\n NextStudioNoScript,\n useBackgroundColorsFromTheme,\n useTextFontFamilyFromTheme,\n useTheme,\n} from '.'\n\nexport interface NextStudioProps extends StudioProps {\n /**\n * Override how the Studio renders by passing children.\n * This is useful for advanced use cases where you're using StudioProvider and StudioLayout instead of Studio:\n * import {StudioProvider, StudioLayout} from 'sanity'\n * import {NextStudio} from 'next-sanity/studio'\n * <NextStudio config={config}>\n * <StudioProvider config={config}>\n * <CustomComponentThatUsesContextFromStudioProvider />\n * <StudioLayout />\n * </StudioProvider>\n * </NextStudio>\n */\n children?: React.ReactNode\n /**\n * Turns off the default global styling\n */\n unstable__noGlobalStyle?: boolean\n /**\n * Apply fix with SVG icon centering that happens if TailwindCSS is loaded, on by defautl\n */\n unstable__noTailwindSvgFix?: NextStudioGlobalStyleProps['unstable__tailwindSvgFix']\n /**\n * Add stuff to the head with next/head\n */\n unstable__head?: NextStudioHeadProps['children']\n /**\n * Sets the document title\n */\n unstable__document_title?: NextStudioHeadProps['title']\n /**\n * Sets the background color of <html>\n */\n unstable__bg?: NextStudioGlobalStyleProps['bg']\n /**\n * Sets the font-family of #__next\n */\n unstable__fontFamily?: NextStudioGlobalStyleProps['fontFamily']\n /**\n * Don't load the favicon meta tags\n */\n unstable__noFavicons?: boolean\n /**\n * Don't render the <noscript> tag\n */\n unstable__noNoScript?: boolean\n}\n/**\n * Intended to render at the root of a page, letting the Studio own that page and render much like it would if you used `npx sanity start` to render\n * It's a drop-in replacement for `import {Studio} from 'sanity'`\n */\nconst NextStudioComponent = ({\n children,\n config,\n unstable__noGlobalStyle,\n unstable__noTailwindSvgFix,\n unstable__head,\n unstable__document_title,\n unstable__bg,\n unstable__fontFamily,\n unstable__noFavicons,\n unstable__noNoScript,\n ...props\n}: NextStudioProps) => {\n const theme = useTheme(config)\n const {themeColorLight, themeColorDark} = useBackgroundColorsFromTheme(theme)\n const themeFontFamily = useTextFontFamilyFromTheme(theme)\n return (\n <>\n {children || <Studio config={config} {...props} />}\n <NextStudioHead\n themeColorLight={themeColorLight}\n themeColorDark={themeColorDark}\n title={unstable__document_title}\n favicons={!unstable__noFavicons}\n >\n {unstable__head}\n </NextStudioHead>\n {!unstable__noGlobalStyle && (\n <NextStudioGlobalStyle\n bg={unstable__bg ?? themeColorLight}\n fontFamily={unstable__fontFamily ?? themeFontFamily}\n unstable__tailwindSvgFix={!unstable__noTailwindSvgFix}\n />\n )}\n {!unstable__noNoScript && <NextStudioNoScript />}\n </>\n )\n}\nexport const NextStudio = memo(NextStudioComponent)\n","import {createGlobalStyle, css} from 'styled-components'\n\nexport interface NextStudioGlobalStyleProps {\n fontFamily?: string\n bg?: string\n unstable__tailwindSvgFix?: boolean\n}\nexport const NextStudioGlobalStyle = createGlobalStyle<NextStudioGlobalStyleProps>`\n${({bg}) =>\n bg\n ? css`\n html {\n background-color: ${bg};\n }\n `\n : ''}\nhtml,\nbody,\n#__next {\n height: 100%;\n}\nbody {\n margin: 0;\n overscroll-behavior: none;\n -webkit-font-smoothing: antialiased;\n}\n${({fontFamily}) =>\n fontFamily\n ? css`\n #__next {\n font-family: ${fontFamily};\n }\n `\n : ''}\n${({unstable__tailwindSvgFix}) =>\n unstable__tailwindSvgFix\n ? css`\n /* override tailwind reset */\n :root svg {\n display: inline;\n }\n `\n : ''}`\n","/* eslint-disable no-process-env */\nimport Head from 'next/head'\nimport {type ComponentProps, memo, useCallback} from 'react'\n\n// @ts-ignore\nimport iconApple from './apple-touch-icon.png'\n// @ts-ignore\nimport iconIco from './favicon.ico'\n// @ts-ignore\nimport iconSvg from './favicon.svg'\n// @ts-ignore\nimport icon192 from './favicon-192.png'\n// @ts-ignore\nimport icon512 from './favicon-512.png'\nimport type {MetaThemeColors} from './utils'\nimport webmanifest from './webmanifest.json'\n\n// Interop between how Parcel and Next deals with asset imports\nconst interop = (href: string | {src: string}): string =>\n typeof href === 'string' ? href : href.src\n\nexport interface NextStudioHeadProps extends Partial<MetaThemeColors> {\n children?: ComponentProps<typeof Head>['children']\n title?: string\n favicons?: boolean\n}\nconst NextStudioHeadComponent = ({\n children,\n themeColorDark,\n themeColorLight,\n title = 'Sanity Studio',\n favicons,\n}: NextStudioHeadProps) => {\n const inlineWebmanifest = useCallback(() => {\n const manifest = JSON.parse(JSON.stringify(webmanifest))\n const icons = manifest.icons.map((icon: any) => {\n // Inline manifests works best when URLs are absolute\n const src =\n // eslint-disable-next-line no-nested-ternary\n icon.src === './favicon-192.png'\n ? interop(icon192)\n : icon.src === './favicon-512.png'\n ? interop(icon512)\n : icon.src\n return {\n ...icon,\n src: process.env.NEXT_PUBLIC_VERCEL_URL\n ? new URL(src, `https://${process.env.NEXT_PUBLIC_VERCEL_URL}`).toString()\n : src,\n }\n })\n return `data:application/manifest+json,${encodeURIComponent(\n JSON.stringify({...manifest, icons})\n )}`\n }, [])\n\n return (\n <Head>\n <meta\n name=\"viewport\"\n // Studio implements display cutouts CSS (The iPhone Notch ™ ) and needs `viewport-fit=covered` for it to work correctly\n content=\"width=device-width, initial-scale=1, viewport-fit=cover\"\n />\n <meta name=\"robots\" content=\"noindex\" />\n <meta name=\"referrer\" content=\"same-origin\" />\n {title && <title>{title}</title>}\n {favicons && <link rel=\"icon\" href={interop(iconIco)} sizes=\"any\" />}\n {favicons && <link rel=\"icon\" href={interop(iconSvg)} type=\"image/svg+xml\" />}\n {favicons && <link rel=\"apple-touch-icon\" href={interop(iconApple)} />}\n {favicons && (\n <link\n rel=\"manifest\"\n // eslint-disable-next-line no-warning-comments\n // @TODO until parcel fixes https://github.com/parcel-bundler/parcel/issues/8025 and stops stripping process.env.NEXT_PUBLIC_VERCEL_URL from the compiled code, use the remove webmanifest\n href={\n process.env.NEXT_PUBLIC_VERCEL_URL\n ? inlineWebmanifest()\n : 'https://next.sanity.build/manifest.webmanifest'\n }\n />\n )}\n {/* These theme-color tags makes the Studio look really really good on devices like iPads as the browser chrome adopts the Studio background */}\n {themeColorLight && (\n <meta\n key=\"theme-color-light\"\n name=\"theme-color\"\n content={themeColorLight}\n media=\"(prefers-color-scheme: light)\"\n />\n )}\n {themeColorDark && (\n <meta\n key=\"theme-color-dark\"\n name=\"theme-color\"\n content={themeColorDark}\n media=\"(prefers-color-scheme: dark)\"\n />\n )}\n {children}\n </Head>\n )\n}\n\nexport const NextStudioHead = memo(NextStudioHeadComponent)\n","module.exports = new __parcel__URL__(\"apple-touch-icon.abc4aca2.png\").toString();","module.exports = new __parcel__URL__(\"favicon.648fc2f2.ico\").toString();","module.exports = new __parcel__URL__(\"favicon.8f76876f.svg\").toString();","module.exports = new __parcel__URL__(\"favicon-192.40c8bab4.png\").toString();","module.exports = new __parcel__URL__(\"favicon-512.5e08f951.png\").toString();","{\n \"icons\": [\n {\n \"src\": \"./favicon-192.png\",\n \"type\": \"image/png\",\n \"sizes\": \"192x192\"\n },\n {\n \"src\": \"./favicon-512.png\",\n \"type\": \"image/png\",\n \"sizes\": \"512x512\"\n }\n ]\n}\n","/* eslint-disable react/no-danger */\n\nconst style = {\n __html: `\n.sanity-app-no-js__root {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #fff;\n}\n\n.sanity-app-no-js__content {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n font-family: helvetica, arial, sans-serif;\n}\n`,\n} as const\n\nexport const NextStudioNoScript = () => (\n <noscript>\n <div className=\"sanity-app-no-js__root\">\n <div className=\"sanity-app-no-js__content\">\n <style type=\"text/css\" dangerouslySetInnerHTML={style} />\n <h1>JavaScript disabled</h1>\n <p>\n Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n browser and reload the page to proceed.\n </p>\n </div>\n </div>\n </noscript>\n)\n","// We can disable this rule safely as we're not trying to use it outside pages/document, we're shipping a wrapper\n// eslint-disable-next-line @next/next/no-document-import-in-page\nimport Document, {type DocumentContext} from 'next/document'\nimport {ServerStyleSheet} from 'styled-components'\n\n/**\n * Usage, from a pages/_document.tsx file:\n * import {ServerStyleSheetDocument} from 'next-sanity/studio'\n *\n * export default class MyDocument extends ServerStyleSheetDocument {}\n *\n * To do extra stuff in getInitialProps:\n * import {ServerStyleSheetDocument} from 'next-sanity/studio'\n * import { type DocumentContext } from 'next/document'\n *\n * export default class MyDocument extends ServerStyleSheetDocument {\n * static async getInitialProps(ctx: DocumentContext) {\n * // You can still override renderPage:\n * const originalRenderPage = ctx.renderPage\n * ctx.renderPage = () => originalRenderPage({\n * enhanceApp: (App) => (props) => <App {...props} />\n * })\n *\n * const initialProps = await ServerStyleSheetDocument.getInitialProps(ctx)\n * const extraStyles = await getStyles()\n * return {\n * ...initialProps,\n * styles: [initialProps.styles, extraStyles],\n * }\n * }\n * }\n */\n\nexport class ServerStyleSheetDocument extends Document {\n static async getInitialProps(ctx: DocumentContext) {\n const sheet = new ServerStyleSheet()\n const originalRenderPage = ctx.renderPage\n\n try {\n ctx.renderPage = () =>\n originalRenderPage({\n enhanceApp: (App) => (props) => sheet.collectStyles(<App {...props} />),\n })\n\n const initialProps = await Document.getInitialProps(ctx)\n return {\n ...initialProps,\n styles: [initialProps.styles, sheet.getStyleElement()],\n }\n } finally {\n sheet.seal()\n }\n }\n}\n","import {useRouter} from 'next/router'\nimport {useMemo} from 'react'\nimport {\n type Config,\n type SingleWorkspace,\n type StudioTheme,\n type WorkspaceOptions,\n defaultTheme,\n} from 'sanity'\n\nexport type WithTheme = {\n theme: StudioTheme\n}\nexport type SingleWorkspaceWithTheme = Omit<SingleWorkspace, 'theme'> & WithTheme\nexport type WorkspaceOptionsWithTheme = Omit<WorkspaceOptions, 'theme'> & WithTheme\nexport type ConfigWithTheme = SingleWorkspaceWithTheme | WorkspaceOptionsWithTheme[]\n\nexport function isWorkspaces(config: Config): config is WorkspaceOptions[] {\n return Array.isArray(config)\n}\n\nexport function isWorkspaceWithTheme(\n workspace: SingleWorkspace | WorkspaceOptions\n): workspace is SingleWorkspaceWithTheme | WorkspaceOptionsWithTheme {\n return Boolean(workspace.theme)\n}\n\nexport function useTheme(config: Config): StudioTheme {\n const workspace = useMemo<SingleWorkspace | WorkspaceOptions>(\n () => (isWorkspaces(config) ? config[0] : config),\n [config]\n )\n return useMemo<StudioTheme>(\n () => (isWorkspaceWithTheme(workspace) ? workspace.theme : defaultTheme),\n [workspace]\n )\n}\n\nexport type MetaThemeColors = {\n themeColorLight: string\n themeColorDark: string\n}\nexport const useBackgroundColorsFromTheme = (theme: StudioTheme): MetaThemeColors => {\n return useMemo<MetaThemeColors>(\n () => ({\n themeColorLight: theme.color.light.default.base.bg,\n themeColorDark: theme.color.dark.default.base.bg,\n }),\n [theme]\n )\n}\n\nexport const useTextFontFamilyFromTheme = (theme: StudioTheme): string => {\n return useMemo<string>(() => theme.fonts.text.family, [theme])\n}\n\n/**\n * Parses the next route to determine the what the base path for Sanity Studio should be\n */\nexport function useBasePath(): string {\n const router = useRouter()\n return useMemo(() => {\n const [basePath = '/'] = router.route.split('/[')\n return basePath\n }, [router.route])\n}\n\nexport interface WorkspaceWithBasePath extends Omit<WorkspaceOptions, 'basePath'> {\n basePath: string\n}\nexport type SingleWorkspaceWithBasePath = Omit<SingleWorkspace, 'basePath'> & {basePath: string}\nexport type ConfigWithBasePath = SingleWorkspaceWithBasePath | WorkspaceOptions[]\n/**\n * Apply the base path from next to the config, prefixing any defined base path\n */\nexport function useConfigWithBasePath(config: Config): ConfigWithBasePath {\n const basePath = useBasePath()\n return useMemo(() => {\n if (isWorkspaces(config)) {\n return config.map((workspace) => ({\n ...workspace,\n basePath: workspace.basePath === '/' ? basePath : `${basePath}${workspace.basePath}`,\n }))\n }\n return {\n ...config,\n basePath: config.basePath === '/' ? basePath : `${basePath}${config.basePath || ''}`,\n }\n }, [config, basePath])\n}\n"],"names":[],"version":3,"file":"studio.js.map"}
@@ -35,6 +35,10 @@ export interface NextStudioProps extends StudioProps {
35
35
  * Sets the background color of <html>
36
36
  */
37
37
  unstable__bg?: NextStudioGlobalStyleProps['bg'];
38
+ /**
39
+ * Sets the font-family of #__next
40
+ */
41
+ unstable__fontFamily?: NextStudioGlobalStyleProps['fontFamily'];
38
42
  /**
39
43
  * Don't load the favicon meta tags
40
44
  */
@@ -44,4 +48,4 @@ export interface NextStudioProps extends StudioProps {
44
48
  */
45
49
  unstable__noNoScript?: boolean;
46
50
  }
47
- export declare const NextStudio: import("react").MemoExoticComponent<({ children, config, unstable__noGlobalStyle, unstable__noTailwindSvgFix, unstable__head, unstable__document_title, unstable__bg, unstable__noFavicons, unstable__noNoScript, ...props }: NextStudioProps) => JSX.Element>;
51
+ export declare const NextStudio: import("react").MemoExoticComponent<({ children, config, unstable__noGlobalStyle, unstable__noTailwindSvgFix, unstable__head, unstable__document_title, unstable__bg, unstable__fontFamily, unstable__noFavicons, unstable__noNoScript, ...props }: NextStudioProps) => JSX.Element>;
@@ -1,4 +1,5 @@
1
1
  export interface NextStudioGlobalStyleProps {
2
+ fontFamily?: string;
2
3
  bg?: string;
3
4
  unstable__tailwindSvgFix?: boolean;
4
5
  }
@@ -1,2 +1 @@
1
- /// <reference types="react" />
2
1
  export declare const NextStudioNoScript: () => JSX.Element;
@@ -29,7 +29,7 @@ import Document, { type DocumentContext } from 'next/document';
29
29
  */
30
30
  export declare class ServerStyleSheetDocument extends Document {
31
31
  static getInitialProps(ctx: DocumentContext): Promise<{
32
- styles: ({} | undefined)[];
32
+ styles: (import("react").ReactFragment | JSX.Element | undefined)[];
33
33
  html: string;
34
34
  head?: (JSX.Element | null)[] | undefined;
35
35
  }>;
@@ -13,6 +13,7 @@ export declare type MetaThemeColors = {
13
13
  themeColorDark: string;
14
14
  };
15
15
  export declare const useBackgroundColorsFromTheme: (theme: StudioTheme) => MetaThemeColors;
16
+ export declare const useTextFontFamilyFromTheme: (theme: StudioTheme) => string;
16
17
  /**
17
18
  * Parses the next route to determine the what the base path for Sanity Studio should be
18
19
  */
package/lib/esm/studio.js CHANGED
@@ -39,9 +39,10 @@ $parcel$export($1512e3a8033a35cc$exports, "NextStudio", () => $1512e3a8033a35cc$
39
39
  /**
40
40
  * Intended to render at the root of a page, letting the Studio own that page and render much like it would if you used `npx sanity start` to render
41
41
  * It's a drop-in replacement for `import {Studio} from 'sanity'`
42
- */ const $1512e3a8033a35cc$var$NextStudioComponent = ({ children: children , config: config , unstable__noGlobalStyle: unstable__noGlobalStyle , unstable__noTailwindSvgFix: unstable__noTailwindSvgFix , unstable__head: unstable__head , unstable__document_title: unstable__document_title , unstable__bg: unstable__bg , unstable__noFavicons: unstable__noFavicons , unstable__noNoScript: unstable__noNoScript , ...props })=>{
42
+ */ const $1512e3a8033a35cc$var$NextStudioComponent = ({ children: children , config: config , unstable__noGlobalStyle: unstable__noGlobalStyle , unstable__noTailwindSvgFix: unstable__noTailwindSvgFix , unstable__head: unstable__head , unstable__document_title: unstable__document_title , unstable__bg: unstable__bg , unstable__fontFamily: unstable__fontFamily , unstable__noFavicons: unstable__noFavicons , unstable__noNoScript: unstable__noNoScript , ...props })=>{
43
43
  const theme = (0, $47ea254c66a1f1fc$export$93d4e7f90805808f)(config);
44
44
  const { themeColorLight: themeColorLight , themeColorDark: themeColorDark } = (0, $47ea254c66a1f1fc$export$d3a2146a441ec034)(theme);
45
+ const themeFontFamily = (0, $47ea254c66a1f1fc$export$1e8b2c0d4a692a9b)(theme);
45
46
  return /*#__PURE__*/ (0, $4289s$jsxs)((0, $4289s$Fragment), {
46
47
  children: [
47
48
  children || /*#__PURE__*/ (0, $4289s$jsx)((0, $4289s$Studio), {
@@ -57,6 +58,7 @@ $parcel$export($1512e3a8033a35cc$exports, "NextStudio", () => $1512e3a8033a35cc$
57
58
  }),
58
59
  !unstable__noGlobalStyle && /*#__PURE__*/ (0, $4289s$jsx)((0, $96bfa0bd9b2d4d7b$export$c8fda7ee7699d07e), {
59
60
  bg: unstable__bg !== null && unstable__bg !== void 0 ? unstable__bg : themeColorLight,
61
+ fontFamily: unstable__fontFamily !== null && unstable__fontFamily !== void 0 ? unstable__fontFamily : themeFontFamily,
60
62
  unstable__tailwindSvgFix: !unstable__noTailwindSvgFix
61
63
  }),
62
64
  !unstable__noNoScript && /*#__PURE__*/ (0, $4289s$jsx)((0, $30581564ea022575$export$39af4e536de5c6ed), {})
@@ -70,8 +72,8 @@ var $96bfa0bd9b2d4d7b$exports = {};
70
72
 
71
73
  $parcel$export($96bfa0bd9b2d4d7b$exports, "NextStudioGlobalStyle", () => $96bfa0bd9b2d4d7b$export$c8fda7ee7699d07e);
72
74
 
73
- let $96bfa0bd9b2d4d7b$var$_ = (t)=>t, $96bfa0bd9b2d4d7b$var$t, $96bfa0bd9b2d4d7b$var$t1, $96bfa0bd9b2d4d7b$var$t2;
74
- const $96bfa0bd9b2d4d7b$export$c8fda7ee7699d07e = (0, $4289s$createGlobalStyle)($96bfa0bd9b2d4d7b$var$t2 || ($96bfa0bd9b2d4d7b$var$t2 = $96bfa0bd9b2d4d7b$var$_`
75
+ let $96bfa0bd9b2d4d7b$var$_ = (t)=>t, $96bfa0bd9b2d4d7b$var$t, $96bfa0bd9b2d4d7b$var$t1, $96bfa0bd9b2d4d7b$var$t2, $96bfa0bd9b2d4d7b$var$t3;
76
+ const $96bfa0bd9b2d4d7b$export$c8fda7ee7699d07e = (0, $4289s$createGlobalStyle)($96bfa0bd9b2d4d7b$var$t3 || ($96bfa0bd9b2d4d7b$var$t3 = $96bfa0bd9b2d4d7b$var$_`
75
77
  ${0}
76
78
  html,
77
79
  body,
@@ -83,11 +85,16 @@ body {
83
85
  overscroll-behavior: none;
84
86
  -webkit-font-smoothing: antialiased;
85
87
  }
88
+ ${0}
86
89
  ${0}`), ({ bg: bg })=>bg ? (0, $4289s$css)($96bfa0bd9b2d4d7b$var$t || ($96bfa0bd9b2d4d7b$var$t = $96bfa0bd9b2d4d7b$var$_`
87
90
  html {
88
91
  background-color: ${0};
89
92
  }
90
- `), bg) : "", ({ unstable__tailwindSvgFix: unstable__tailwindSvgFix })=>unstable__tailwindSvgFix ? (0, $4289s$css)($96bfa0bd9b2d4d7b$var$t1 || ($96bfa0bd9b2d4d7b$var$t1 = $96bfa0bd9b2d4d7b$var$_`
93
+ `), bg) : "", ({ fontFamily: fontFamily })=>fontFamily ? (0, $4289s$css)($96bfa0bd9b2d4d7b$var$t1 || ($96bfa0bd9b2d4d7b$var$t1 = $96bfa0bd9b2d4d7b$var$_`
94
+ #__next {
95
+ font-family: ${0};
96
+ }
97
+ `), fontFamily) : "", ({ unstable__tailwindSvgFix: unstable__tailwindSvgFix })=>unstable__tailwindSvgFix ? (0, $4289s$css)($96bfa0bd9b2d4d7b$var$t2 || ($96bfa0bd9b2d4d7b$var$t2 = $96bfa0bd9b2d4d7b$var$_`
91
98
  /* override tailwind reset */
92
99
  :root svg {
93
100
  display: inline;
@@ -290,6 +297,7 @@ $parcel$export($47ea254c66a1f1fc$exports, "isWorkspaces", () => $47ea254c66a1f1f
290
297
  $parcel$export($47ea254c66a1f1fc$exports, "isWorkspaceWithTheme", () => $47ea254c66a1f1fc$export$31236b9ee07dd150);
291
298
  $parcel$export($47ea254c66a1f1fc$exports, "useTheme", () => $47ea254c66a1f1fc$export$93d4e7f90805808f);
292
299
  $parcel$export($47ea254c66a1f1fc$exports, "useBackgroundColorsFromTheme", () => $47ea254c66a1f1fc$export$d3a2146a441ec034);
300
+ $parcel$export($47ea254c66a1f1fc$exports, "useTextFontFamilyFromTheme", () => $47ea254c66a1f1fc$export$1e8b2c0d4a692a9b);
293
301
  $parcel$export($47ea254c66a1f1fc$exports, "useBasePath", () => $47ea254c66a1f1fc$export$53bdd69a9f9bd75);
294
302
  $parcel$export($47ea254c66a1f1fc$exports, "useConfigWithBasePath", () => $47ea254c66a1f1fc$export$297ba38aa0562c6e);
295
303
 
@@ -317,6 +325,11 @@ const $47ea254c66a1f1fc$export$d3a2146a441ec034 = (theme)=>{
317
325
  theme
318
326
  ]);
319
327
  };
328
+ const $47ea254c66a1f1fc$export$1e8b2c0d4a692a9b = (theme)=>{
329
+ return (0, $4289s$useMemo)(()=>theme.fonts.text.family, [
330
+ theme
331
+ ]);
332
+ };
320
333
  function $47ea254c66a1f1fc$export$53bdd69a9f9bd75() {
321
334
  const router = (0, $4289s$useRouter)();
322
335
  return (0, $4289s$useMemo)(()=>{
@@ -354,5 +367,5 @@ $parcel$exportWildcard($2e0e6a6d8bb1bf3b$exports, $47ea254c66a1f1fc$exports);
354
367
 
355
368
 
356
369
 
357
- export {$1512e3a8033a35cc$export$eefb95cccd1bb6c5 as NextStudio, $96bfa0bd9b2d4d7b$export$c8fda7ee7699d07e as NextStudioGlobalStyle, $42e0ba93e8ca4228$export$79723eee2c1bf75e as NextStudioHead, $30581564ea022575$export$39af4e536de5c6ed as NextStudioNoScript, $056a6fa2cc4f79d2$export$f64e2f55a1dca172 as ServerStyleSheetDocument, $47ea254c66a1f1fc$export$b7c6924067135ce as isWorkspaces, $47ea254c66a1f1fc$export$31236b9ee07dd150 as isWorkspaceWithTheme, $47ea254c66a1f1fc$export$93d4e7f90805808f as useTheme, $47ea254c66a1f1fc$export$d3a2146a441ec034 as useBackgroundColorsFromTheme, $47ea254c66a1f1fc$export$53bdd69a9f9bd75 as useBasePath, $47ea254c66a1f1fc$export$297ba38aa0562c6e as useConfigWithBasePath};
370
+ export {$1512e3a8033a35cc$export$eefb95cccd1bb6c5 as NextStudio, $96bfa0bd9b2d4d7b$export$c8fda7ee7699d07e as NextStudioGlobalStyle, $42e0ba93e8ca4228$export$79723eee2c1bf75e as NextStudioHead, $30581564ea022575$export$39af4e536de5c6ed as NextStudioNoScript, $056a6fa2cc4f79d2$export$f64e2f55a1dca172 as ServerStyleSheetDocument, $47ea254c66a1f1fc$export$b7c6924067135ce as isWorkspaces, $47ea254c66a1f1fc$export$31236b9ee07dd150 as isWorkspaceWithTheme, $47ea254c66a1f1fc$export$93d4e7f90805808f as useTheme, $47ea254c66a1f1fc$export$d3a2146a441ec034 as useBackgroundColorsFromTheme, $47ea254c66a1f1fc$export$1e8b2c0d4a692a9b as useTextFontFamilyFromTheme, $47ea254c66a1f1fc$export$53bdd69a9f9bd75 as useBasePath, $47ea254c66a1f1fc$export$297ba38aa0562c6e as useConfigWithBasePath};
358
371
  //# sourceMappingURL=studio.js.map
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/studio.ts","src/studio/index.ts","src/studio/NextStudio.tsx","src/studio/NextStudioGlobalStyle.ts","src/studio/NextStudioHead.tsx","node_modules/@parcel/runtime-js/lib/runtime-9e593bd92a039f93.js","node_modules/@parcel/runtime-js/lib/runtime-1d6e60dacba8bf0c.js","node_modules/@parcel/runtime-js/lib/runtime-9e05f9434f6564ff.js","node_modules/@parcel/runtime-js/lib/runtime-2e048d2a541e2a65.js","node_modules/@parcel/runtime-js/lib/runtime-daf66243b4f37b18.js","src/studio/webmanifest.json","src/studio/NextStudioNoScript.tsx","src/studio/ServerStyleSheetDocument.tsx","src/studio/utils.ts"],"sourcesContent":["export * from './studio/index'\n","export * from './NextStudio'\nexport * from './NextStudioGlobalStyle'\nexport * from './NextStudioHead'\nexport * from './NextStudioNoScript'\nexport * from './ServerStyleSheetDocument'\nexport * from './utils'\n","import {memo} from 'react'\nimport {type StudioProps, Studio} from 'sanity'\n\nimport {\n type NextStudioHeadProps,\n NextStudioGlobalStyle,\n NextStudioGlobalStyleProps,\n NextStudioHead,\n NextStudioNoScript,\n useBackgroundColorsFromTheme,\n useTheme,\n} from '.'\n\nexport interface NextStudioProps extends StudioProps {\n /**\n * Override how the Studio renders by passing children.\n * This is useful for advanced use cases where you're using StudioProvider and StudioLayout instead of Studio:\n * import {StudioProvider, StudioLayout} from 'sanity'\n * import {NextStudio} from 'next-sanity/studio'\n * <NextStudio config={config}>\n * <StudioProvider config={config}>\n * <CustomComponentThatUsesContextFromStudioProvider />\n * <StudioLayout />\n * </StudioProvider>\n * </NextStudio>\n */\n children?: React.ReactNode\n /**\n * Turns off the default global styling\n */\n unstable__noGlobalStyle?: boolean\n /**\n * Apply fix with SVG icon centering that happens if TailwindCSS is loaded, on by defautl\n */\n unstable__noTailwindSvgFix?: NextStudioGlobalStyleProps['unstable__tailwindSvgFix']\n /**\n * Add stuff to the head with next/head\n */\n unstable__head?: NextStudioHeadProps['children']\n /**\n * Sets the document title\n */\n unstable__document_title?: NextStudioHeadProps['title']\n /**\n * Sets the background color of <html>\n */\n unstable__bg?: NextStudioGlobalStyleProps['bg']\n /**\n * Don't load the favicon meta tags\n */\n unstable__noFavicons?: boolean\n /**\n * Don't render the <noscript> tag\n */\n unstable__noNoScript?: boolean\n}\n/**\n * Intended to render at the root of a page, letting the Studio own that page and render much like it would if you used `npx sanity start` to render\n * It's a drop-in replacement for `import {Studio} from 'sanity'`\n */\nconst NextStudioComponent = ({\n children,\n config,\n unstable__noGlobalStyle,\n unstable__noTailwindSvgFix,\n unstable__head,\n unstable__document_title,\n unstable__bg,\n unstable__noFavicons,\n unstable__noNoScript,\n ...props\n}: NextStudioProps) => {\n const theme = useTheme(config)\n const {themeColorLight, themeColorDark} = useBackgroundColorsFromTheme(theme)\n return (\n <>\n {children || <Studio config={config} {...props} />}\n <NextStudioHead\n themeColorLight={themeColorLight}\n themeColorDark={themeColorDark}\n title={unstable__document_title}\n favicons={!unstable__noFavicons}\n >\n {unstable__head}\n </NextStudioHead>\n {!unstable__noGlobalStyle && (\n <NextStudioGlobalStyle\n bg={unstable__bg ?? themeColorLight}\n unstable__tailwindSvgFix={!unstable__noTailwindSvgFix}\n />\n )}\n {!unstable__noNoScript && <NextStudioNoScript />}\n </>\n )\n}\nexport const NextStudio = memo(NextStudioComponent)\n","import {createGlobalStyle, css} from 'styled-components'\n\nexport interface NextStudioGlobalStyleProps {\n bg?: string\n unstable__tailwindSvgFix?: boolean\n}\nexport const NextStudioGlobalStyle = createGlobalStyle<NextStudioGlobalStyleProps>`\n${({bg}) =>\n bg\n ? css`\n html {\n background-color: ${bg};\n }\n `\n : ''}\nhtml,\nbody,\n#__next {\n height: 100%;\n}\nbody {\n margin: 0;\n overscroll-behavior: none;\n -webkit-font-smoothing: antialiased;\n}\n${({unstable__tailwindSvgFix}) =>\n unstable__tailwindSvgFix\n ? css`\n /* override tailwind reset */\n :root svg {\n display: inline;\n }\n `\n : ''}`\n","/* eslint-disable no-process-env */\nimport Head from 'next/head'\nimport {type ComponentProps, memo, useCallback} from 'react'\n\n// @ts-ignore\nimport iconApple from './apple-touch-icon.png'\n// @ts-ignore\nimport iconIco from './favicon.ico'\n// @ts-ignore\nimport iconSvg from './favicon.svg'\n// @ts-ignore\nimport icon192 from './favicon-192.png'\n// @ts-ignore\nimport icon512 from './favicon-512.png'\nimport type {MetaThemeColors} from './utils'\nimport webmanifest from './webmanifest.json'\n\n// Interop between how Parcel and Next deals with asset imports\nconst interop = (href: string | {src: string}): string =>\n typeof href === 'string' ? href : href.src\n\nexport interface NextStudioHeadProps extends Partial<MetaThemeColors> {\n children?: ComponentProps<typeof Head>['children']\n title?: string\n favicons?: boolean\n}\nconst NextStudioHeadComponent = ({\n children,\n themeColorDark,\n themeColorLight,\n title = 'Sanity Studio',\n favicons,\n}: NextStudioHeadProps) => {\n const inlineWebmanifest = useCallback(() => {\n const manifest = JSON.parse(JSON.stringify(webmanifest))\n const icons = manifest.icons.map((icon: any) => {\n // Inline manifests works best when URLs are absolute\n const src =\n // eslint-disable-next-line no-nested-ternary\n icon.src === './favicon-192.png'\n ? interop(icon192)\n : icon.src === './favicon-512.png'\n ? interop(icon512)\n : icon.src\n return {\n ...icon,\n src: process.env.NEXT_PUBLIC_VERCEL_URL\n ? new URL(src, `https://${process.env.NEXT_PUBLIC_VERCEL_URL}`).toString()\n : src,\n }\n })\n return `data:application/manifest+json,${encodeURIComponent(\n JSON.stringify({...manifest, icons})\n )}`\n }, [])\n\n return (\n <Head>\n <meta\n name=\"viewport\"\n // Studio implements display cutouts CSS (The iPhone Notch ™ ) and needs `viewport-fit=covered` for it to work correctly\n content=\"width=device-width, initial-scale=1, viewport-fit=cover\"\n />\n <meta name=\"robots\" content=\"noindex\" />\n <meta name=\"referrer\" content=\"same-origin\" />\n {title && <title>{title}</title>}\n {favicons && <link rel=\"icon\" href={interop(iconIco)} sizes=\"any\" />}\n {favicons && <link rel=\"icon\" href={interop(iconSvg)} type=\"image/svg+xml\" />}\n {favicons && <link rel=\"apple-touch-icon\" href={interop(iconApple)} />}\n {favicons && (\n <link\n rel=\"manifest\"\n // eslint-disable-next-line no-warning-comments\n // @TODO until parcel fixes https://github.com/parcel-bundler/parcel/issues/8025 and stops stripping process.env.NEXT_PUBLIC_VERCEL_URL from the compiled code, use the remove webmanifest\n href={\n process.env.NEXT_PUBLIC_VERCEL_URL\n ? inlineWebmanifest()\n : 'https://next.sanity.build/manifest.webmanifest'\n }\n />\n )}\n {/* These theme-color tags makes the Studio look really really good on devices like iPads as the browser chrome adopts the Studio background */}\n {themeColorLight && (\n <meta\n key=\"theme-color-light\"\n name=\"theme-color\"\n content={themeColorLight}\n media=\"(prefers-color-scheme: light)\"\n />\n )}\n {themeColorDark && (\n <meta\n key=\"theme-color-dark\"\n name=\"theme-color\"\n content={themeColorDark}\n media=\"(prefers-color-scheme: dark)\"\n />\n )}\n {children}\n </Head>\n )\n}\n\nexport const NextStudioHead = memo(NextStudioHeadComponent)\n","module.exports = new __parcel__URL__(\"apple-touch-icon.abc4aca2.png\").toString();","module.exports = new __parcel__URL__(\"favicon.648fc2f2.ico\").toString();","module.exports = new __parcel__URL__(\"favicon.8f76876f.svg\").toString();","module.exports = new __parcel__URL__(\"favicon-192.40c8bab4.png\").toString();","module.exports = new __parcel__URL__(\"favicon-512.5e08f951.png\").toString();","{\n \"icons\": [\n {\n \"src\": \"./favicon-192.png\",\n \"type\": \"image/png\",\n \"sizes\": \"192x192\"\n },\n {\n \"src\": \"./favicon-512.png\",\n \"type\": \"image/png\",\n \"sizes\": \"512x512\"\n }\n ]\n}\n","/* eslint-disable react/no-danger */\n\nconst style = {\n __html: `\n.sanity-app-no-js__root {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #fff;\n}\n\n.sanity-app-no-js__content {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n font-family: helvetica, arial, sans-serif;\n}\n`,\n} as const\n\nexport const NextStudioNoScript = () => (\n <noscript>\n <div className=\"sanity-app-no-js__root\">\n <div className=\"sanity-app-no-js__content\">\n <style type=\"text/css\" dangerouslySetInnerHTML={style} />\n <h1>JavaScript disabled</h1>\n <p>\n Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n browser and reload the page to proceed.\n </p>\n </div>\n </div>\n </noscript>\n)\n","// We can disable this rule safely as we're not trying to use it outside pages/document, we're shipping a wrapper\n// eslint-disable-next-line @next/next/no-document-import-in-page\nimport Document, {type DocumentContext} from 'next/document'\nimport {ServerStyleSheet} from 'styled-components'\n\n/**\n * Usage, from a pages/_document.tsx file:\n * import {ServerStyleSheetDocument} from 'next-sanity/studio'\n *\n * export default class MyDocument extends ServerStyleSheetDocument {}\n *\n * To do extra stuff in getInitialProps:\n * import {ServerStyleSheetDocument} from 'next-sanity/studio'\n * import { type DocumentContext } from 'next/document'\n *\n * export default class MyDocument extends ServerStyleSheetDocument {\n * static async getInitialProps(ctx: DocumentContext) {\n * // You can still override renderPage:\n * const originalRenderPage = ctx.renderPage\n * ctx.renderPage = () => originalRenderPage({\n * enhanceApp: (App) => (props) => <App {...props} />\n * })\n *\n * const initialProps = await ServerStyleSheetDocument.getInitialProps(ctx)\n * const extraStyles = await getStyles()\n * return {\n * ...initialProps,\n * styles: [initialProps.styles, extraStyles],\n * }\n * }\n * }\n */\n\nexport class ServerStyleSheetDocument extends Document {\n static async getInitialProps(ctx: DocumentContext) {\n const sheet = new ServerStyleSheet()\n const originalRenderPage = ctx.renderPage\n\n try {\n ctx.renderPage = () =>\n originalRenderPage({\n enhanceApp: (App) => (props) => sheet.collectStyles(<App {...props} />),\n })\n\n const initialProps = await Document.getInitialProps(ctx)\n return {\n ...initialProps,\n styles: [initialProps.styles, sheet.getStyleElement()],\n }\n } finally {\n sheet.seal()\n }\n }\n}\n","import {useRouter} from 'next/router'\nimport {useMemo} from 'react'\nimport {\n type Config,\n type SingleWorkspace,\n type StudioTheme,\n type WorkspaceOptions,\n defaultTheme,\n} from 'sanity'\n\nexport type WithTheme = {\n theme: StudioTheme\n}\nexport type SingleWorkspaceWithTheme = Omit<SingleWorkspace, 'theme'> & WithTheme\nexport type WorkspaceOptionsWithTheme = Omit<WorkspaceOptions, 'theme'> & WithTheme\nexport type ConfigWithTheme = SingleWorkspaceWithTheme | WorkspaceOptionsWithTheme[]\n\nexport function isWorkspaces(config: Config): config is WorkspaceOptions[] {\n return Array.isArray(config)\n}\n\nexport function isWorkspaceWithTheme(\n workspace: SingleWorkspace | WorkspaceOptions\n): workspace is SingleWorkspaceWithTheme | WorkspaceOptionsWithTheme {\n return Boolean(workspace.theme)\n}\n\nexport function useTheme(config: Config): StudioTheme {\n const workspace = useMemo<SingleWorkspace | WorkspaceOptions>(\n () => (isWorkspaces(config) ? config[0] : config),\n [config]\n )\n return useMemo<StudioTheme>(\n () => (isWorkspaceWithTheme(workspace) ? workspace.theme : defaultTheme),\n [workspace]\n )\n}\n\nexport type MetaThemeColors = {\n themeColorLight: string\n themeColorDark: string\n}\nexport const useBackgroundColorsFromTheme = (theme: StudioTheme): MetaThemeColors => {\n return useMemo<MetaThemeColors>(\n () => ({\n themeColorLight: theme.color.light.default.base.bg,\n themeColorDark: theme.color.dark.default.base.bg,\n }),\n [theme]\n )\n}\n\n/**\n * Parses the next route to determine the what the base path for Sanity Studio should be\n */\nexport function useBasePath(): string {\n const router = useRouter()\n return useMemo(() => {\n const [basePath = '/'] = router.route.split('/[')\n return basePath\n }, [router.route])\n}\n\nexport interface WorkspaceWithBasePath extends Omit<WorkspaceOptions, 'basePath'> {\n basePath: string\n}\nexport type SingleWorkspaceWithBasePath = Omit<SingleWorkspace, 'basePath'> & {basePath: string}\nexport type ConfigWithBasePath = SingleWorkspaceWithBasePath | WorkspaceOptions[]\n/**\n * Apply the base path from next to the config, prefixing any defined base path\n */\nexport function useConfigWithBasePath(config: Config): ConfigWithBasePath {\n const basePath = useBasePath()\n return useMemo(() => {\n if (isWorkspaces(config)) {\n return config.map((workspace) => ({\n ...workspace,\n basePath: workspace.basePath === '/' ? basePath : `${basePath}${workspace.basePath}`,\n }))\n }\n return {\n ...config,\n basePath: config.basePath === '/' ? basePath : `${basePath}${config.basePath || ''}`,\n }\n }, [config, basePath])\n}\n"],"names":[],"version":3,"file":"studio.js.map"}
1
+ {"mappings":"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","sources":["src/studio.ts","src/studio/index.ts","src/studio/NextStudio.tsx","src/studio/NextStudioGlobalStyle.ts","src/studio/NextStudioHead.tsx","node_modules/@parcel/runtime-js/lib/runtime-9e593bd92a039f93.js","node_modules/@parcel/runtime-js/lib/runtime-1d6e60dacba8bf0c.js","node_modules/@parcel/runtime-js/lib/runtime-9e05f9434f6564ff.js","node_modules/@parcel/runtime-js/lib/runtime-2e048d2a541e2a65.js","node_modules/@parcel/runtime-js/lib/runtime-daf66243b4f37b18.js","src/studio/webmanifest.json","src/studio/NextStudioNoScript.tsx","src/studio/ServerStyleSheetDocument.tsx","src/studio/utils.ts"],"sourcesContent":["export * from './studio/index'\n","export * from './NextStudio'\nexport * from './NextStudioGlobalStyle'\nexport * from './NextStudioHead'\nexport * from './NextStudioNoScript'\nexport * from './ServerStyleSheetDocument'\nexport * from './utils'\n","import {memo} from 'react'\nimport {type StudioProps, Studio} from 'sanity'\n\nimport {\n type NextStudioHeadProps,\n NextStudioGlobalStyle,\n NextStudioGlobalStyleProps,\n NextStudioHead,\n NextStudioNoScript,\n useBackgroundColorsFromTheme,\n useTextFontFamilyFromTheme,\n useTheme,\n} from '.'\n\nexport interface NextStudioProps extends StudioProps {\n /**\n * Override how the Studio renders by passing children.\n * This is useful for advanced use cases where you're using StudioProvider and StudioLayout instead of Studio:\n * import {StudioProvider, StudioLayout} from 'sanity'\n * import {NextStudio} from 'next-sanity/studio'\n * <NextStudio config={config}>\n * <StudioProvider config={config}>\n * <CustomComponentThatUsesContextFromStudioProvider />\n * <StudioLayout />\n * </StudioProvider>\n * </NextStudio>\n */\n children?: React.ReactNode\n /**\n * Turns off the default global styling\n */\n unstable__noGlobalStyle?: boolean\n /**\n * Apply fix with SVG icon centering that happens if TailwindCSS is loaded, on by defautl\n */\n unstable__noTailwindSvgFix?: NextStudioGlobalStyleProps['unstable__tailwindSvgFix']\n /**\n * Add stuff to the head with next/head\n */\n unstable__head?: NextStudioHeadProps['children']\n /**\n * Sets the document title\n */\n unstable__document_title?: NextStudioHeadProps['title']\n /**\n * Sets the background color of <html>\n */\n unstable__bg?: NextStudioGlobalStyleProps['bg']\n /**\n * Sets the font-family of #__next\n */\n unstable__fontFamily?: NextStudioGlobalStyleProps['fontFamily']\n /**\n * Don't load the favicon meta tags\n */\n unstable__noFavicons?: boolean\n /**\n * Don't render the <noscript> tag\n */\n unstable__noNoScript?: boolean\n}\n/**\n * Intended to render at the root of a page, letting the Studio own that page and render much like it would if you used `npx sanity start` to render\n * It's a drop-in replacement for `import {Studio} from 'sanity'`\n */\nconst NextStudioComponent = ({\n children,\n config,\n unstable__noGlobalStyle,\n unstable__noTailwindSvgFix,\n unstable__head,\n unstable__document_title,\n unstable__bg,\n unstable__fontFamily,\n unstable__noFavicons,\n unstable__noNoScript,\n ...props\n}: NextStudioProps) => {\n const theme = useTheme(config)\n const {themeColorLight, themeColorDark} = useBackgroundColorsFromTheme(theme)\n const themeFontFamily = useTextFontFamilyFromTheme(theme)\n return (\n <>\n {children || <Studio config={config} {...props} />}\n <NextStudioHead\n themeColorLight={themeColorLight}\n themeColorDark={themeColorDark}\n title={unstable__document_title}\n favicons={!unstable__noFavicons}\n >\n {unstable__head}\n </NextStudioHead>\n {!unstable__noGlobalStyle && (\n <NextStudioGlobalStyle\n bg={unstable__bg ?? themeColorLight}\n fontFamily={unstable__fontFamily ?? themeFontFamily}\n unstable__tailwindSvgFix={!unstable__noTailwindSvgFix}\n />\n )}\n {!unstable__noNoScript && <NextStudioNoScript />}\n </>\n )\n}\nexport const NextStudio = memo(NextStudioComponent)\n","import {createGlobalStyle, css} from 'styled-components'\n\nexport interface NextStudioGlobalStyleProps {\n fontFamily?: string\n bg?: string\n unstable__tailwindSvgFix?: boolean\n}\nexport const NextStudioGlobalStyle = createGlobalStyle<NextStudioGlobalStyleProps>`\n${({bg}) =>\n bg\n ? css`\n html {\n background-color: ${bg};\n }\n `\n : ''}\nhtml,\nbody,\n#__next {\n height: 100%;\n}\nbody {\n margin: 0;\n overscroll-behavior: none;\n -webkit-font-smoothing: antialiased;\n}\n${({fontFamily}) =>\n fontFamily\n ? css`\n #__next {\n font-family: ${fontFamily};\n }\n `\n : ''}\n${({unstable__tailwindSvgFix}) =>\n unstable__tailwindSvgFix\n ? css`\n /* override tailwind reset */\n :root svg {\n display: inline;\n }\n `\n : ''}`\n","/* eslint-disable no-process-env */\nimport Head from 'next/head'\nimport {type ComponentProps, memo, useCallback} from 'react'\n\n// @ts-ignore\nimport iconApple from './apple-touch-icon.png'\n// @ts-ignore\nimport iconIco from './favicon.ico'\n// @ts-ignore\nimport iconSvg from './favicon.svg'\n// @ts-ignore\nimport icon192 from './favicon-192.png'\n// @ts-ignore\nimport icon512 from './favicon-512.png'\nimport type {MetaThemeColors} from './utils'\nimport webmanifest from './webmanifest.json'\n\n// Interop between how Parcel and Next deals with asset imports\nconst interop = (href: string | {src: string}): string =>\n typeof href === 'string' ? href : href.src\n\nexport interface NextStudioHeadProps extends Partial<MetaThemeColors> {\n children?: ComponentProps<typeof Head>['children']\n title?: string\n favicons?: boolean\n}\nconst NextStudioHeadComponent = ({\n children,\n themeColorDark,\n themeColorLight,\n title = 'Sanity Studio',\n favicons,\n}: NextStudioHeadProps) => {\n const inlineWebmanifest = useCallback(() => {\n const manifest = JSON.parse(JSON.stringify(webmanifest))\n const icons = manifest.icons.map((icon: any) => {\n // Inline manifests works best when URLs are absolute\n const src =\n // eslint-disable-next-line no-nested-ternary\n icon.src === './favicon-192.png'\n ? interop(icon192)\n : icon.src === './favicon-512.png'\n ? interop(icon512)\n : icon.src\n return {\n ...icon,\n src: process.env.NEXT_PUBLIC_VERCEL_URL\n ? new URL(src, `https://${process.env.NEXT_PUBLIC_VERCEL_URL}`).toString()\n : src,\n }\n })\n return `data:application/manifest+json,${encodeURIComponent(\n JSON.stringify({...manifest, icons})\n )}`\n }, [])\n\n return (\n <Head>\n <meta\n name=\"viewport\"\n // Studio implements display cutouts CSS (The iPhone Notch ™ ) and needs `viewport-fit=covered` for it to work correctly\n content=\"width=device-width, initial-scale=1, viewport-fit=cover\"\n />\n <meta name=\"robots\" content=\"noindex\" />\n <meta name=\"referrer\" content=\"same-origin\" />\n {title && <title>{title}</title>}\n {favicons && <link rel=\"icon\" href={interop(iconIco)} sizes=\"any\" />}\n {favicons && <link rel=\"icon\" href={interop(iconSvg)} type=\"image/svg+xml\" />}\n {favicons && <link rel=\"apple-touch-icon\" href={interop(iconApple)} />}\n {favicons && (\n <link\n rel=\"manifest\"\n // eslint-disable-next-line no-warning-comments\n // @TODO until parcel fixes https://github.com/parcel-bundler/parcel/issues/8025 and stops stripping process.env.NEXT_PUBLIC_VERCEL_URL from the compiled code, use the remove webmanifest\n href={\n process.env.NEXT_PUBLIC_VERCEL_URL\n ? inlineWebmanifest()\n : 'https://next.sanity.build/manifest.webmanifest'\n }\n />\n )}\n {/* These theme-color tags makes the Studio look really really good on devices like iPads as the browser chrome adopts the Studio background */}\n {themeColorLight && (\n <meta\n key=\"theme-color-light\"\n name=\"theme-color\"\n content={themeColorLight}\n media=\"(prefers-color-scheme: light)\"\n />\n )}\n {themeColorDark && (\n <meta\n key=\"theme-color-dark\"\n name=\"theme-color\"\n content={themeColorDark}\n media=\"(prefers-color-scheme: dark)\"\n />\n )}\n {children}\n </Head>\n )\n}\n\nexport const NextStudioHead = memo(NextStudioHeadComponent)\n","module.exports = new __parcel__URL__(\"apple-touch-icon.abc4aca2.png\").toString();","module.exports = new __parcel__URL__(\"favicon.648fc2f2.ico\").toString();","module.exports = new __parcel__URL__(\"favicon.8f76876f.svg\").toString();","module.exports = new __parcel__URL__(\"favicon-192.40c8bab4.png\").toString();","module.exports = new __parcel__URL__(\"favicon-512.5e08f951.png\").toString();","{\n \"icons\": [\n {\n \"src\": \"./favicon-192.png\",\n \"type\": \"image/png\",\n \"sizes\": \"192x192\"\n },\n {\n \"src\": \"./favicon-512.png\",\n \"type\": \"image/png\",\n \"sizes\": \"512x512\"\n }\n ]\n}\n","/* eslint-disable react/no-danger */\n\nconst style = {\n __html: `\n.sanity-app-no-js__root {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #fff;\n}\n\n.sanity-app-no-js__content {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n font-family: helvetica, arial, sans-serif;\n}\n`,\n} as const\n\nexport const NextStudioNoScript = () => (\n <noscript>\n <div className=\"sanity-app-no-js__root\">\n <div className=\"sanity-app-no-js__content\">\n <style type=\"text/css\" dangerouslySetInnerHTML={style} />\n <h1>JavaScript disabled</h1>\n <p>\n Please <a href=\"https://www.enable-javascript.com/\">enable JavaScript</a> in your\n browser and reload the page to proceed.\n </p>\n </div>\n </div>\n </noscript>\n)\n","// We can disable this rule safely as we're not trying to use it outside pages/document, we're shipping a wrapper\n// eslint-disable-next-line @next/next/no-document-import-in-page\nimport Document, {type DocumentContext} from 'next/document'\nimport {ServerStyleSheet} from 'styled-components'\n\n/**\n * Usage, from a pages/_document.tsx file:\n * import {ServerStyleSheetDocument} from 'next-sanity/studio'\n *\n * export default class MyDocument extends ServerStyleSheetDocument {}\n *\n * To do extra stuff in getInitialProps:\n * import {ServerStyleSheetDocument} from 'next-sanity/studio'\n * import { type DocumentContext } from 'next/document'\n *\n * export default class MyDocument extends ServerStyleSheetDocument {\n * static async getInitialProps(ctx: DocumentContext) {\n * // You can still override renderPage:\n * const originalRenderPage = ctx.renderPage\n * ctx.renderPage = () => originalRenderPage({\n * enhanceApp: (App) => (props) => <App {...props} />\n * })\n *\n * const initialProps = await ServerStyleSheetDocument.getInitialProps(ctx)\n * const extraStyles = await getStyles()\n * return {\n * ...initialProps,\n * styles: [initialProps.styles, extraStyles],\n * }\n * }\n * }\n */\n\nexport class ServerStyleSheetDocument extends Document {\n static async getInitialProps(ctx: DocumentContext) {\n const sheet = new ServerStyleSheet()\n const originalRenderPage = ctx.renderPage\n\n try {\n ctx.renderPage = () =>\n originalRenderPage({\n enhanceApp: (App) => (props) => sheet.collectStyles(<App {...props} />),\n })\n\n const initialProps = await Document.getInitialProps(ctx)\n return {\n ...initialProps,\n styles: [initialProps.styles, sheet.getStyleElement()],\n }\n } finally {\n sheet.seal()\n }\n }\n}\n","import {useRouter} from 'next/router'\nimport {useMemo} from 'react'\nimport {\n type Config,\n type SingleWorkspace,\n type StudioTheme,\n type WorkspaceOptions,\n defaultTheme,\n} from 'sanity'\n\nexport type WithTheme = {\n theme: StudioTheme\n}\nexport type SingleWorkspaceWithTheme = Omit<SingleWorkspace, 'theme'> & WithTheme\nexport type WorkspaceOptionsWithTheme = Omit<WorkspaceOptions, 'theme'> & WithTheme\nexport type ConfigWithTheme = SingleWorkspaceWithTheme | WorkspaceOptionsWithTheme[]\n\nexport function isWorkspaces(config: Config): config is WorkspaceOptions[] {\n return Array.isArray(config)\n}\n\nexport function isWorkspaceWithTheme(\n workspace: SingleWorkspace | WorkspaceOptions\n): workspace is SingleWorkspaceWithTheme | WorkspaceOptionsWithTheme {\n return Boolean(workspace.theme)\n}\n\nexport function useTheme(config: Config): StudioTheme {\n const workspace = useMemo<SingleWorkspace | WorkspaceOptions>(\n () => (isWorkspaces(config) ? config[0] : config),\n [config]\n )\n return useMemo<StudioTheme>(\n () => (isWorkspaceWithTheme(workspace) ? workspace.theme : defaultTheme),\n [workspace]\n )\n}\n\nexport type MetaThemeColors = {\n themeColorLight: string\n themeColorDark: string\n}\nexport const useBackgroundColorsFromTheme = (theme: StudioTheme): MetaThemeColors => {\n return useMemo<MetaThemeColors>(\n () => ({\n themeColorLight: theme.color.light.default.base.bg,\n themeColorDark: theme.color.dark.default.base.bg,\n }),\n [theme]\n )\n}\n\nexport const useTextFontFamilyFromTheme = (theme: StudioTheme): string => {\n return useMemo<string>(() => theme.fonts.text.family, [theme])\n}\n\n/**\n * Parses the next route to determine the what the base path for Sanity Studio should be\n */\nexport function useBasePath(): string {\n const router = useRouter()\n return useMemo(() => {\n const [basePath = '/'] = router.route.split('/[')\n return basePath\n }, [router.route])\n}\n\nexport interface WorkspaceWithBasePath extends Omit<WorkspaceOptions, 'basePath'> {\n basePath: string\n}\nexport type SingleWorkspaceWithBasePath = Omit<SingleWorkspace, 'basePath'> & {basePath: string}\nexport type ConfigWithBasePath = SingleWorkspaceWithBasePath | WorkspaceOptions[]\n/**\n * Apply the base path from next to the config, prefixing any defined base path\n */\nexport function useConfigWithBasePath(config: Config): ConfigWithBasePath {\n const basePath = useBasePath()\n return useMemo(() => {\n if (isWorkspaces(config)) {\n return config.map((workspace) => ({\n ...workspace,\n basePath: workspace.basePath === '/' ? basePath : `${basePath}${workspace.basePath}`,\n }))\n }\n return {\n ...config,\n basePath: config.basePath === '/' ? basePath : `${basePath}${config.basePath || ''}`,\n }\n }, [config, basePath])\n}\n"],"names":[],"version":3,"file":"studio.js.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-sanity",
3
- "version": "0.8.4",
3
+ "version": "0.8.5",
4
4
  "description": "Sanity.io toolkit for Next.js",
5
5
  "keywords": [
6
6
  "sanity",
@@ -71,41 +71,41 @@
71
71
  "singleQuote": true
72
72
  },
73
73
  "dependencies": {
74
- "@sanity/client": "^3.3.5",
74
+ "@sanity/client": "^3.4.1",
75
75
  "@sanity/groq-store": "^0.4.1",
76
- "groq": "^2.29.3"
76
+ "groq": "^2.33.2"
77
77
  },
78
78
  "devDependencies": {
79
79
  "@async-fn/jest": "^1.6.4",
80
80
  "@sanity/eslint-config-studio": "^2.0.0",
81
- "@sanity/semantic-release-preset": "^2.0.1",
81
+ "@sanity/semantic-release-preset": "^2.0.2",
82
82
  "@testing-library/react-hooks": "^8.0.1",
83
83
  "@types/eventsource": "^1.1.9",
84
- "@types/jest": "^28.1.8",
85
- "@types/react": "^17.0.48",
84
+ "@types/jest": "^29.1.2",
85
+ "@types/react": "^18.0.21",
86
86
  "@types/react-dom": "^18.0.6",
87
87
  "@types/styled-components": "^5.1.26",
88
- "@typescript-eslint/eslint-plugin": "^5.35.1",
89
- "eslint": "^8.23.0",
90
- "eslint-config-next": "^12.2.5",
88
+ "@typescript-eslint/eslint-plugin": "^5.39.0",
89
+ "eslint": "^8.25.0",
90
+ "eslint-config-next": "^12.3.1",
91
91
  "eslint-config-prettier": "^8.5.0",
92
92
  "eslint-config-sanity": "^6.0.0",
93
93
  "eslint-gitignore": "^0.1.0",
94
94
  "eslint-plugin-prettier": "^4.2.1",
95
- "eslint-plugin-simple-import-sort": "^7.0.0",
96
- "jest": "^29.0.1",
97
- "jest-environment-jsdom": "^29.0.1",
98
- "next": "^12.2.5",
95
+ "eslint-plugin-simple-import-sort": "^8.0.0",
96
+ "jest": "^29.1.2",
97
+ "jest-environment-jsdom": "^29.1.2",
98
+ "next": "^12.3.1",
99
99
  "parcel": "^2.7.0",
100
100
  "prettier": "^2.7.1",
101
- "prettier-plugin-packagejson": "^2.2.18",
102
- "react": "^17.0.2",
103
- "react-dom": "^17.0.2",
104
- "react-is": "^17.0.2",
105
- "sanity": "3.0.0-dev-preview.15",
106
- "styled-components": "^5.3.5",
101
+ "prettier-plugin-packagejson": "^2.3.0",
102
+ "react": "^18.2.0",
103
+ "react-dom": "^18.2.0",
104
+ "react-is": "^18.2.0",
105
+ "sanity": "3.0.0-purple-unicorn.6",
106
+ "styled-components": "^5.3.6",
107
107
  "tsdx": "^0.14.1",
108
- "typescript": "^4.8.2",
108
+ "typescript": "^4.8.4",
109
109
  "write-file-atomic": "^4.0.2"
110
110
  },
111
111
  "peerDependencies": {
@@ -8,6 +8,7 @@ import {
8
8
  NextStudioHead,
9
9
  NextStudioNoScript,
10
10
  useBackgroundColorsFromTheme,
11
+ useTextFontFamilyFromTheme,
11
12
  useTheme,
12
13
  } from '.'
13
14
 
@@ -45,6 +46,10 @@ export interface NextStudioProps extends StudioProps {
45
46
  * Sets the background color of <html>
46
47
  */
47
48
  unstable__bg?: NextStudioGlobalStyleProps['bg']
49
+ /**
50
+ * Sets the font-family of #__next
51
+ */
52
+ unstable__fontFamily?: NextStudioGlobalStyleProps['fontFamily']
48
53
  /**
49
54
  * Don't load the favicon meta tags
50
55
  */
@@ -66,12 +71,14 @@ const NextStudioComponent = ({
66
71
  unstable__head,
67
72
  unstable__document_title,
68
73
  unstable__bg,
74
+ unstable__fontFamily,
69
75
  unstable__noFavicons,
70
76
  unstable__noNoScript,
71
77
  ...props
72
78
  }: NextStudioProps) => {
73
79
  const theme = useTheme(config)
74
80
  const {themeColorLight, themeColorDark} = useBackgroundColorsFromTheme(theme)
81
+ const themeFontFamily = useTextFontFamilyFromTheme(theme)
75
82
  return (
76
83
  <>
77
84
  {children || <Studio config={config} {...props} />}
@@ -86,6 +93,7 @@ const NextStudioComponent = ({
86
93
  {!unstable__noGlobalStyle && (
87
94
  <NextStudioGlobalStyle
88
95
  bg={unstable__bg ?? themeColorLight}
96
+ fontFamily={unstable__fontFamily ?? themeFontFamily}
89
97
  unstable__tailwindSvgFix={!unstable__noTailwindSvgFix}
90
98
  />
91
99
  )}
@@ -1,6 +1,7 @@
1
1
  import {createGlobalStyle, css} from 'styled-components'
2
2
 
3
3
  export interface NextStudioGlobalStyleProps {
4
+ fontFamily?: string
4
5
  bg?: string
5
6
  unstable__tailwindSvgFix?: boolean
6
7
  }
@@ -23,6 +24,14 @@ body {
23
24
  overscroll-behavior: none;
24
25
  -webkit-font-smoothing: antialiased;
25
26
  }
27
+ ${({fontFamily}) =>
28
+ fontFamily
29
+ ? css`
30
+ #__next {
31
+ font-family: ${fontFamily};
32
+ }
33
+ `
34
+ : ''}
26
35
  ${({unstable__tailwindSvgFix}) =>
27
36
  unstable__tailwindSvgFix
28
37
  ? css`
@@ -50,6 +50,10 @@ export const useBackgroundColorsFromTheme = (theme: StudioTheme): MetaThemeColor
50
50
  )
51
51
  }
52
52
 
53
+ export const useTextFontFamilyFromTheme = (theme: StudioTheme): string => {
54
+ return useMemo<string>(() => theme.fonts.text.family, [theme])
55
+ }
56
+
53
57
  /**
54
58
  * Parses the next route to determine the what the base path for Sanity Studio should be
55
59
  */