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.
- package/dist/next-sanity.cjs.development.js +37 -60
- package/dist/next-sanity.cjs.development.js.map +1 -1
- package/dist/next-sanity.cjs.production.min.js.map +1 -1
- package/dist/next-sanity.esm.js +37 -60
- package/dist/next-sanity.esm.js.map +1 -1
- package/dist/studio/NextStudio.d.ts +5 -1
- package/dist/studio/NextStudioGlobalStyle.d.ts +1 -0
- package/dist/studio/NextStudioNoScript.d.ts +0 -1
- package/dist/studio/ServerStyleSheetDocument.d.ts +1 -1
- package/dist/studio/utils.d.ts +1 -0
- package/lib/cjs/studio.js +17 -4
- package/lib/cjs/studio.js.map +1 -1
- package/lib/dts/studio/NextStudio.d.ts +5 -1
- package/lib/dts/studio/NextStudioGlobalStyle.d.ts +1 -0
- package/lib/dts/studio/NextStudioNoScript.d.ts +0 -1
- package/lib/dts/studio/ServerStyleSheetDocument.d.ts +1 -1
- package/lib/dts/studio/utils.d.ts +1 -0
- package/lib/esm/studio.js +18 -5
- package/lib/esm/studio.js.map +1 -1
- package/package.json +20 -20
- package/src/studio/NextStudio.tsx +8 -0
- package/src/studio/NextStudioGlobalStyle.ts +9 -0
- package/src/studio/utils.ts +4 -0
|
@@ -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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
97
|
+
data = _useState[0],
|
|
98
|
+
setUser = _useState[1];
|
|
107
99
|
var _useState2 = react.useState(),
|
|
108
|
-
|
|
109
|
-
|
|
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 = {};
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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');
|
|
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
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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
|
-
|
|
200
|
-
|
|
201
|
-
|
|
183
|
+
error = _useState[0],
|
|
184
|
+
setError = _useState[1];
|
|
202
185
|
var _useState2 = react.useState(false),
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
186
|
+
loading = _useState2[0],
|
|
187
|
+
setLoading = _useState2[1];
|
|
206
188
|
var _useState3 = react.useState(),
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
}
|
|
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
|
-
});
|
|
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
|
-
}
|
|
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":"qNAKMA,aAAN,aACEC,aAAU,CAACC,SAAS,
|
|
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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"}
|
package/dist/next-sanity.esm.js
CHANGED
|
@@ -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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
data = _useState[0],
|
|
73
|
+
setUser = _useState[1];
|
|
82
74
|
var _useState2 = useState(),
|
|
83
|
-
|
|
84
|
-
|
|
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 = {};
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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');
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
|
|
175
|
-
|
|
176
|
-
|
|
158
|
+
error = _useState[0],
|
|
159
|
+
setError = _useState[1];
|
|
177
160
|
var _useState2 = useState(false),
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
161
|
+
loading = _useState2[0],
|
|
162
|
+
setLoading = _useState2[1];
|
|
181
163
|
var _useState3 = useState(),
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
}
|
|
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
|
-
});
|
|
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
|
-
}
|
|
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>;
|
|
@@ -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: (
|
|
32
|
+
styles: (import("react").ReactFragment | JSX.Element | undefined)[];
|
|
33
33
|
html: string;
|
|
34
34
|
head?: (JSX.Element | null)[] | undefined;
|
|
35
35
|
}>;
|
package/dist/studio/utils.d.ts
CHANGED
|
@@ -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$
|
|
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) : "", ({
|
|
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)(()=>{
|
package/lib/cjs/studio.js.map
CHANGED
|
@@ -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>;
|
|
@@ -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: (
|
|
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$
|
|
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) : "", ({
|
|
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
|
package/lib/esm/studio.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
74
|
+
"@sanity/client": "^3.4.1",
|
|
75
75
|
"@sanity/groq-store": "^0.4.1",
|
|
76
|
-
"groq": "^2.
|
|
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.
|
|
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": "^
|
|
85
|
-
"@types/react": "^
|
|
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.
|
|
89
|
-
"eslint": "^8.
|
|
90
|
-
"eslint-config-next": "^12.
|
|
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": "^
|
|
96
|
-
"jest": "^29.
|
|
97
|
-
"jest-environment-jsdom": "^29.
|
|
98
|
-
"next": "^12.
|
|
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.
|
|
102
|
-
"react": "^
|
|
103
|
-
"react-dom": "^
|
|
104
|
-
"react-is": "^
|
|
105
|
-
"sanity": "3.0.0-
|
|
106
|
-
"styled-components": "^5.3.
|
|
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.
|
|
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`
|
package/src/studio/utils.ts
CHANGED
|
@@ -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
|
*/
|