sanity-plugin-utils 1.6.8 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -8,19 +8,14 @@ import isEqual from "react-fast-compare";
8
8
  import { distinctUntilChanged, catchError } from "rxjs/operators";
9
9
  import { RouterContext } from "sanity/router";
10
10
  import { usePaneRouter } from "sanity/structure";
11
- var __defProp$3 = Object.defineProperty, __getOwnPropSymbols$3 = Object.getOwnPropertySymbols, __hasOwnProp$3 = Object.prototype.hasOwnProperty, __propIsEnum$3 = Object.prototype.propertyIsEnumerable, __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$3 = (a, b) => {
12
- for (var prop in b || (b = {}))
13
- __hasOwnProp$3.call(b, prop) && __defNormalProp$3(a, prop, b[prop]);
14
- if (__getOwnPropSymbols$3)
15
- for (var prop of __getOwnPropSymbols$3(b))
16
- __propIsEnum$3.call(b, prop) && __defNormalProp$3(a, prop, b[prop]);
17
- return a;
18
- };
19
11
  const DEFAULT_PROPS = {
20
12
  tone: "primary"
21
13
  };
22
14
  function Feedback(props) {
23
- const { title, description, icon, tone, children } = __spreadValues$3(__spreadValues$3({}, DEFAULT_PROPS), props);
15
+ const { title, description, icon, tone, children } = {
16
+ ...DEFAULT_PROPS,
17
+ ...props
18
+ };
24
19
  return /* @__PURE__ */ jsx(Card, { tone, padding: 4, radius: 3, border: !0, children: /* @__PURE__ */ jsxs(Flex, { children: [
25
20
  icon ? "display icon" : null,
26
21
  children || /* @__PURE__ */ jsx(Box, { flex: 1, children: /* @__PURE__ */ jsxs(Stack, { space: 4, children: [
@@ -29,23 +24,7 @@ function Feedback(props) {
29
24
  ] }) })
30
25
  ] }) });
31
26
  }
32
- var __defProp$2 = Object.defineProperty, __defProps$1 = Object.defineProperties, __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors, __getOwnPropSymbols$2 = Object.getOwnPropertySymbols, __hasOwnProp$2 = Object.prototype.hasOwnProperty, __propIsEnum$2 = Object.prototype.propertyIsEnumerable, __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$2 = (a, b) => {
33
- for (var prop in b || (b = {}))
34
- __hasOwnProp$2.call(b, prop) && __defNormalProp$2(a, prop, b[prop]);
35
- if (__getOwnPropSymbols$2)
36
- for (var prop of __getOwnPropSymbols$2(b))
37
- __propIsEnum$2.call(b, prop) && __defNormalProp$2(a, prop, b[prop]);
38
- return a;
39
- }, __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b)), __objRest = (source, exclude) => {
40
- var target = {};
41
- for (var prop in source)
42
- __hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0 && (target[prop] = source[prop]);
43
- if (source != null && __getOwnPropSymbols$2)
44
- for (var prop of __getOwnPropSymbols$2(source))
45
- exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop) && (target[prop] = source[prop]);
46
- return target;
47
- };
48
- const TableWrapper = (props = {}) => /* @__PURE__ */ jsx(Card, __spreadValues$2({ as: "table" }, props)), StyledTable = styled(TableWrapper)(
27
+ const TableWrapper = (props = {}) => /* @__PURE__ */ jsx(Card, { as: "table", ...props }), StyledTable = styled(TableWrapper)(
49
28
  () => css`
50
29
  display: table;
51
30
  width: 100%;
@@ -58,10 +37,10 @@ const TableWrapper = (props = {}) => /* @__PURE__ */ jsx(Card, __spreadValues$2(
58
37
  `
59
38
  );
60
39
  function Table(props) {
61
- const _a = props, { children } = _a, rest = __objRest(_a, ["children"]);
62
- return /* @__PURE__ */ jsx(StyledTable, __spreadProps$1(__spreadValues$2({}, rest), { children }));
40
+ const { children, ...rest } = props;
41
+ return /* @__PURE__ */ jsx(StyledTable, { ...rest, children });
63
42
  }
64
- const RowWrapper = (props = {}) => /* @__PURE__ */ jsx(Card, __spreadValues$2({ as: "tr" }, props)), StyledRow = styled(RowWrapper)(
43
+ const RowWrapper = (props = {}) => /* @__PURE__ */ jsx(Card, { as: "tr", ...props }), StyledRow = styled(RowWrapper)(
65
44
  () => css`
66
45
  display: table-row;
67
46
 
@@ -71,10 +50,10 @@ const RowWrapper = (props = {}) => /* @__PURE__ */ jsx(Card, __spreadValues$2({
71
50
  `
72
51
  );
73
52
  function Row(props) {
74
- const _a = props, { children } = _a, rest = __objRest(_a, ["children"]);
75
- return /* @__PURE__ */ jsx(StyledRow, __spreadProps$1(__spreadValues$2({}, rest), { children }));
53
+ const { children, ...rest } = props;
54
+ return /* @__PURE__ */ jsx(StyledRow, { ...rest, children });
76
55
  }
77
- const CellWrapper = (props = {}) => /* @__PURE__ */ jsx(Card, __spreadValues$2({ as: "td" }, props)), StyledCell = styled(CellWrapper)(
56
+ const CellWrapper = (props = {}) => /* @__PURE__ */ jsx(Card, { as: "td", ...props }), StyledCell = styled(CellWrapper)(
78
57
  () => css`
79
58
  display: table-cell;
80
59
 
@@ -84,17 +63,9 @@ const CellWrapper = (props = {}) => /* @__PURE__ */ jsx(Card, __spreadValues$2({
84
63
  `
85
64
  );
86
65
  function Cell(props) {
87
- const _a = props, { children } = _a, rest = __objRest(_a, ["children"]);
88
- return /* @__PURE__ */ jsx(StyledCell, __spreadProps$1(__spreadValues$2({}, rest), { children }));
66
+ const { children, ...rest } = props;
67
+ return /* @__PURE__ */ jsx(StyledCell, { ...rest, children });
89
68
  }
90
- var __defProp$1 = Object.defineProperty, __getOwnPropSymbols$1 = Object.getOwnPropertySymbols, __hasOwnProp$1 = Object.prototype.hasOwnProperty, __propIsEnum$1 = Object.prototype.propertyIsEnumerable, __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$1 = (a, b) => {
91
- for (var prop in b || (b = {}))
92
- __hasOwnProp$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);
93
- if (__getOwnPropSymbols$1)
94
- for (var prop of __getOwnPropSymbols$1(b))
95
- __propIsEnum$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);
96
- return a;
97
- };
98
69
  function searchUsers(users, searchString) {
99
70
  return users.filter((user) => !!((user.displayName || "").toLowerCase().startsWith(searchString) || (user.givenName || "").toLowerCase().startsWith(searchString) || (user.middleName || "").toLowerCase().startsWith(searchString) || (user.familyName || "").toLowerCase().startsWith(searchString)));
100
71
  }
@@ -113,7 +84,7 @@ function UserSelectMenu(props) {
113
84
  onRemove,
114
85
  onClear,
115
86
  style = {}
116
- } = props, labels = props != null && props.labels ? __spreadValues$1(__spreadValues$1({}, LABELS), props.labels) : LABELS, [searchString, setSearchString] = useState(""), searchResults = searchUsers(userList || [], searchString), me = userList.find((u) => u.isCurrentUser), meAssigned = me && value.includes(me.id), input = useRef(null), handleSearchChange = (event) => {
87
+ } = props, labels = props?.labels ? { ...LABELS, ...props.labels } : LABELS, [searchString, setSearchString] = useState(""), searchResults = searchUsers(userList || [], searchString), me = userList.find((u) => u.isCurrentUser), meAssigned = me && value.includes(me.id), input = useRef(null), handleSearchChange = (event) => {
117
88
  setSearchString(event.target.value);
118
89
  }, handleSelect = (isChecked, user) => {
119
90
  isChecked ? onRemove && onRemove(user.id) : onAdd && onAdd(user.id);
@@ -162,7 +133,7 @@ function UserSelectMenu(props) {
162
133
  value: searchString
163
134
  }
164
135
  ) }),
165
- searchString && (searchResults == null ? void 0 : searchResults.length) === 0 && /* @__PURE__ */ jsx(MenuItem, { disabled: !0, text: labels.notFound }),
136
+ searchString && searchResults?.length === 0 && /* @__PURE__ */ jsx(MenuItem, { disabled: !0, text: labels.notFound }),
166
137
  searchResults && searchResults.map((user) => /* @__PURE__ */ jsx(
167
138
  MenuItem,
168
139
  {
@@ -210,7 +181,7 @@ function requireParseSource() {
210
181
  return t;
211
182
  }, __assign.apply(this, arguments);
212
183
  };
213
- Object.defineProperty(parseSource, "__esModule", { value: !0 });
184
+ Object.defineProperty(parseSource, "__esModule", { value: !0 }), parseSource.isInProgressUpload = void 0;
214
185
  var isRef = function(src) {
215
186
  var source = src;
216
187
  return source ? typeof source._ref == "string" : !1;
@@ -220,7 +191,14 @@ function requireParseSource() {
220
191
  }, isAssetStub = function(src) {
221
192
  var source = src;
222
193
  return source && source.asset ? typeof source.asset.url == "string" : !1;
194
+ }, isInProgressUpload = function(src) {
195
+ if (typeof src == "object" && src !== null) {
196
+ var obj = src;
197
+ return obj._upload && (!obj.asset || !obj.asset._ref);
198
+ }
199
+ return !1;
223
200
  };
201
+ parseSource.isInProgressUpload = isInProgressUpload;
224
202
  function parseSource$1(source) {
225
203
  if (!source)
226
204
  return null;
@@ -284,7 +262,7 @@ function requireParseSource() {
284
262
  }
285
263
  var hasRequiredUrlForImage;
286
264
  function requireUrlForImage() {
287
- return hasRequiredUrlForImage || (hasRequiredUrlForImage = 1, function(exports) {
265
+ return hasRequiredUrlForImage || (hasRequiredUrlForImage = 1, function(exports$1) {
288
266
  var __assign = urlForImage && urlForImage.__assign || function() {
289
267
  return __assign = Object.assign || function(t) {
290
268
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -293,12 +271,29 @@ function requireUrlForImage() {
293
271
  }
294
272
  return t;
295
273
  }, __assign.apply(this, arguments);
274
+ }, __createBinding = urlForImage && urlForImage.__createBinding || (Object.create ? function(o, m, k, k2) {
275
+ k2 === void 0 && (k2 = k);
276
+ var desc = Object.getOwnPropertyDescriptor(m, k);
277
+ (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) && (desc = { enumerable: !0, get: function() {
278
+ return m[k];
279
+ } }), Object.defineProperty(o, k2, desc);
280
+ } : function(o, m, k, k2) {
281
+ k2 === void 0 && (k2 = k), o[k2] = m[k];
282
+ }), __setModuleDefault = urlForImage && urlForImage.__setModuleDefault || (Object.create ? function(o, v) {
283
+ Object.defineProperty(o, "default", { enumerable: !0, value: v });
284
+ } : function(o, v) {
285
+ o.default = v;
286
+ }), __importStar = urlForImage && urlForImage.__importStar || function(mod) {
287
+ if (mod && mod.__esModule) return mod;
288
+ var result = {};
289
+ if (mod != null) for (var k in mod) k !== "default" && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k);
290
+ return __setModuleDefault(result, mod), result;
296
291
  }, __importDefault = urlForImage && urlForImage.__importDefault || function(mod) {
297
292
  return mod && mod.__esModule ? mod : { default: mod };
298
293
  };
299
- Object.defineProperty(exports, "__esModule", { value: !0 }), exports.parseSource = exports.SPEC_NAME_TO_URL_NAME_MAPPINGS = void 0;
300
- var parseAssetId_1 = __importDefault(requireParseAssetId()), parseSource_1 = __importDefault(requireParseSource());
301
- exports.parseSource = parseSource_1.default, exports.SPEC_NAME_TO_URL_NAME_MAPPINGS = [
294
+ Object.defineProperty(exports$1, "__esModule", { value: !0 }), exports$1.parseSource = exports$1.SPEC_NAME_TO_URL_NAME_MAPPINGS = void 0;
295
+ var parseAssetId_1 = __importDefault(requireParseAssetId()), parseSource_1 = __importStar(requireParseSource());
296
+ exports$1.parseSource = parseSource_1.default, exports$1.SPEC_NAME_TO_URL_NAME_MAPPINGS = [
302
297
  ["width", "w"],
303
298
  ["height", "h"],
304
299
  ["format", "fm"],
@@ -317,14 +312,18 @@ function requireUrlForImage() {
317
312
  ["saturation", "sat"],
318
313
  ["auto", "auto"],
319
314
  ["dpr", "dpr"],
320
- ["pad", "pad"]
315
+ ["pad", "pad"],
316
+ ["frame", "frame"]
321
317
  ];
322
318
  function urlForImage$1(options) {
323
319
  var spec = __assign({}, options || {}), source = spec.source;
324
320
  delete spec.source;
325
321
  var image = (0, parseSource_1.default)(source);
326
- if (!image)
322
+ if (!image) {
323
+ if (source && (0, parseSource_1.isInProgressUpload)(source))
324
+ return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8HwQACfsD/QNViZkAAAAASUVORK5CYII=";
327
325
  throw new Error("Unable to resolve image URL from source (".concat(JSON.stringify(source), ")"));
326
+ }
328
327
  var id = image.asset._ref || image.asset._id || "", asset = (0, parseAssetId_1.default)(id), cropLeft = Math.round(image.crop.left * asset.width), cropTop = Math.round(image.crop.top * asset.height), crop = {
329
328
  left: cropLeft,
330
329
  top: cropTop,
@@ -338,16 +337,16 @@ function requireUrlForImage() {
338
337
  };
339
338
  return spec.rect || spec.focalPoint || spec.ignoreImageParams || spec.crop || (spec = __assign(__assign({}, spec), fit({ crop, hotspot }, spec))), specToImageUrl(__assign(__assign({}, spec), { asset }));
340
339
  }
341
- exports.default = urlForImage$1;
340
+ exports$1.default = urlForImage$1;
342
341
  function specToImageUrl(spec) {
343
- var cdnUrl = (spec.baseUrl || "https://cdn.sanity.io").replace(/\/+$/, ""), filename = "".concat(spec.asset.id, "-").concat(spec.asset.width, "x").concat(spec.asset.height, ".").concat(spec.asset.format), baseUrl = "".concat(cdnUrl, "/images/").concat(spec.projectId, "/").concat(spec.dataset, "/").concat(filename), params = [];
342
+ var cdnUrl = (spec.baseUrl || "https://cdn.sanity.io").replace(/\/+$/, ""), vanityStub = spec.vanityName ? "/".concat(spec.vanityName) : "", filename = "".concat(spec.asset.id, "-").concat(spec.asset.width, "x").concat(spec.asset.height, ".").concat(spec.asset.format).concat(vanityStub), baseUrl = "".concat(cdnUrl, "/images/").concat(spec.projectId, "/").concat(spec.dataset, "/").concat(filename), params = [];
344
343
  if (spec.rect) {
345
344
  var _a = spec.rect, left = _a.left, top_1 = _a.top, width = _a.width, height = _a.height, isEffectiveCrop = left !== 0 || top_1 !== 0 || height !== spec.asset.height || width !== spec.asset.width;
346
345
  isEffectiveCrop && params.push("rect=".concat(left, ",").concat(top_1, ",").concat(width, ",").concat(height));
347
346
  }
348
347
  spec.bg && params.push("bg=".concat(spec.bg)), spec.focalPoint && (params.push("fp-x=".concat(spec.focalPoint.x)), params.push("fp-y=".concat(spec.focalPoint.y)));
349
348
  var flip = [spec.flipHorizontal && "h", spec.flipVertical && "v"].filter(Boolean).join("");
350
- return flip && params.push("flip=".concat(flip)), exports.SPEC_NAME_TO_URL_NAME_MAPPINGS.forEach(function(mapping) {
349
+ return flip && params.push("flip=".concat(flip)), exports$1.SPEC_NAME_TO_URL_NAME_MAPPINGS.forEach(function(mapping) {
351
350
  var specName = mapping[0], param = mapping[1];
352
351
  typeof spec[specName] < "u" ? params.push("".concat(param, "=").concat(encodeURIComponent(spec[specName]))) : typeof spec[param] < "u" && params.push("".concat(param, "=").concat(encodeURIComponent(spec[param])));
353
352
  }), params.length === 0 ? baseUrl : "".concat(baseUrl, "?").concat(params.join("&"));
@@ -385,9 +384,11 @@ function requireBuilder() {
385
384
  return t;
386
385
  }, __assign.apply(this, arguments);
387
386
  }, __createBinding = builder && builder.__createBinding || (Object.create ? function(o, m, k, k2) {
388
- k2 === void 0 && (k2 = k), Object.defineProperty(o, k2, { enumerable: !0, get: function() {
387
+ k2 === void 0 && (k2 = k);
388
+ var desc = Object.getOwnPropertyDescriptor(m, k);
389
+ (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) && (desc = { enumerable: !0, get: function() {
389
390
  return m[k];
390
- } });
391
+ } }), Object.defineProperty(o, k2, desc);
391
392
  } : function(o, m, k, k2) {
392
393
  k2 === void 0 && (k2 = k), o[k2] = m[k];
393
394
  }), __setModuleDefault = builder && builder.__setModuleDefault || (Object.create ? function(o, v) {
@@ -425,16 +426,15 @@ function requireBuilder() {
425
426
  dataset
426
427
  });
427
428
  }
428
- var client = options;
429
- if (isSanityClientLike(client)) {
430
- var _b = client.clientConfig, apiUrl = _b.apiHost, projectId = _b.projectId, dataset = _b.dataset, apiHost = apiUrl || "https://api.sanity.io";
429
+ if (isSanityClientLike(options)) {
430
+ var _b = options.clientConfig, apiUrl = _b.apiHost, projectId = _b.projectId, dataset = _b.dataset, apiHost = apiUrl || "https://api.sanity.io";
431
431
  return new ImageUrlBuilder(null, {
432
432
  baseUrl: apiHost.replace(/^https:\/\/api\./, "https://cdn."),
433
433
  projectId,
434
434
  dataset
435
435
  });
436
436
  }
437
- return new ImageUrlBuilder(null, options);
437
+ return new ImageUrlBuilder(null, options || {});
438
438
  }
439
439
  builder.default = urlBuilder;
440
440
  var ImageUrlBuilder = (
@@ -515,6 +515,12 @@ function requireBuilder() {
515
515
  return this.withOptions({ auto: value });
516
516
  }, ImageUrlBuilder2.prototype.pad = function(pad) {
517
517
  return this.withOptions({ pad });
518
+ }, ImageUrlBuilder2.prototype.vanityName = function(value) {
519
+ return this.withOptions({ vanityName: value });
520
+ }, ImageUrlBuilder2.prototype.frame = function(frame) {
521
+ if (frame !== 1)
522
+ throw new Error('Invalid frame value "'.concat(frame, '"'));
523
+ return this.withOptions({ frame });
518
524
  }, ImageUrlBuilder2.prototype.url = function() {
519
525
  return (0, urlForImage_1.default)(this.options);
520
526
  }, ImageUrlBuilder2.prototype.toString = function() {
@@ -574,8 +580,7 @@ function useListeningQuery(query, {
574
580
  console.error(err), setLoading(!1), setError(err);
575
581
  }
576
582
  return error && subscription.current && subscription.current.unsubscribe(), () => {
577
- var _a;
578
- subscription.current && ((_a = subscription == null ? void 0 : subscription.current) == null || _a.unsubscribe(), subscription.current = null);
583
+ subscription.current && (subscription?.current?.unsubscribe(), subscription.current = null);
579
584
  };
580
585
  }, [query, error, memoParams, memoOptions, documentStore]), { data, loading, error };
581
586
  }
@@ -595,14 +600,6 @@ function useOpenInNewPane(id, type) {
595
600
  routerContext.navigateUrl({ path: href });
596
601
  }, [id, type, routerContext, routerPanesState, groupIndex]);
597
602
  }
598
- var __defProp = Object.defineProperty, __defProps = Object.defineProperties, __getOwnPropDescs = Object.getOwnPropertyDescriptors, __getOwnPropSymbols = Object.getOwnPropertySymbols, __hasOwnProp = Object.prototype.hasOwnProperty, __propIsEnum = Object.prototype.propertyIsEnumerable, __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues = (a, b) => {
599
- for (var prop in b || (b = {}))
600
- __hasOwnProp.call(b, prop) && __defNormalProp(a, prop, b[prop]);
601
- if (__getOwnPropSymbols)
602
- for (var prop of __getOwnPropSymbols(b))
603
- __propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);
604
- return a;
605
- }, __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
606
603
  function chunkArray(array, size) {
607
604
  const chunks = [];
608
605
  for (let i = 0; i < array.length; i += size)
@@ -610,7 +607,7 @@ function chunkArray(array, size) {
610
607
  return chunks;
611
608
  }
612
609
  function useProjectUsers({ apiVersion }) {
613
- const { currentUser } = useWorkspace(), client = useClient({ apiVersion: apiVersion != null ? apiVersion : "2023-01-01" }), [users, setUsers] = useState([]);
610
+ const { currentUser } = useWorkspace(), client = useClient({ apiVersion: apiVersion ?? "2023-01-01" }), [users, setUsers] = useState([]);
614
611
  return useEffect(() => {
615
612
  const { projectId } = client.config();
616
613
  async function getUsersWithRoles() {
@@ -626,14 +623,14 @@ function useProjectUsers({ apiVersion }) {
626
623
  usersData = [...usersData, ...response];
627
624
  }
628
625
  const usersWithRoles = usersData.map((user) => {
629
- var _a;
630
- const userRoles = ((_a = aclData.find(
626
+ const userRoles = aclData.find(
631
627
  (aclUser) => aclUser.projectUserId === user.id
632
- )) == null ? void 0 : _a.roles) || [];
633
- return __spreadProps(__spreadValues({}, user), {
634
- isCurrentUser: user.id === (currentUser == null ? void 0 : currentUser.id),
628
+ )?.roles || [];
629
+ return {
630
+ ...user,
631
+ isCurrentUser: user.id === currentUser?.id,
635
632
  roles: userRoles
636
- });
633
+ };
637
634
  });
638
635
  setUsers(usersWithRoles);
639
636
  } catch (err) {
@@ -641,7 +638,7 @@ function useProjectUsers({ apiVersion }) {
641
638
  }
642
639
  }
643
640
  users.length || getUsersWithRoles();
644
- }, [client, currentUser == null ? void 0 : currentUser.id, users.length]), users;
641
+ }, [client, currentUser?.id, users.length]), users;
645
642
  }
646
643
  export {
647
644
  Cell,
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/Feedback.tsx","../src/components/Table.tsx","../src/components/UserSelectMenu/index.tsx","../node_modules/@sanity/image-url/lib/node/parseAssetId.js","../node_modules/@sanity/image-url/lib/node/parseSource.js","../node_modules/@sanity/image-url/lib/node/urlForImage.js","../node_modules/@sanity/image-url/lib/node/builder.js","../node_modules/@sanity/image-url/lib/node/index.js","../src/hooks/useImageUrlBuilder.tsx","../src/hooks/useImageUrlBuilderImage.tsx","../src/hooks/useListeningQuery.tsx","../src/hooks/useOpenInNewPane.tsx","../src/hooks/useProjectUsers.tsx"],"sourcesContent":["import {Box, Card, CardTone, Flex, Stack, Text} from '@sanity/ui'\nimport type {ReactNode} from 'react'\n\ntype FeedbackChildren = {\n children?: ReactNode\n title?: never\n description?: never\n}\n\ntype FeedbackTextProps = {\n title?: string\n description?: ReactNode\n children?: never\n}\n\ntype FeedbackProps = (FeedbackChildren | FeedbackTextProps) & {\n tone?: CardTone\n icon?: ReactNode\n}\n\nconst DEFAULT_PROPS: FeedbackProps = {\n tone: 'primary',\n}\n\nexport function Feedback(props: FeedbackProps) {\n const {title, description, icon, tone, children} = {\n ...DEFAULT_PROPS,\n ...props,\n }\n\n return (\n <Card tone={tone} padding={4} radius={3} border>\n <Flex>\n {icon ? `display icon` : null}\n {children ? (\n children\n ) : (\n <Box flex={1}>\n <Stack space={4}>\n {title ? <Text weight=\"semibold\">{title}</Text> : null}\n {description ? <Text size={2}>{description}</Text> : null}\n </Stack>\n </Box>\n )}\n </Flex>\n </Card>\n )\n}\n","import {Card, type CardProps} from '@sanity/ui'\nimport type {PropsWithChildren} from 'react'\nimport {css, styled} from 'styled-components'\n\n// Wrappers required because of bug with passing down \"as\" prop\n// https://github.com/styled-components/styled-components/issues/2449\n\n// Table\nconst TableWrapper = (props: CardProps = {}) => {\n return <Card as=\"table\" {...props} />\n}\n\nconst StyledTable = styled(TableWrapper)(\n () => css`\n display: table;\n width: 100%;\n border-collapse: collapse;\n\n &:not([hidden]) {\n display: table;\n border-collapse: collapse;\n }\n `\n)\n\ntype TableProps = PropsWithChildren<CardProps>\n\nexport function Table(props: TableProps) {\n const {children, ...rest} = props\n\n return <StyledTable {...rest}>{children}</StyledTable>\n}\n\n// Row\nconst RowWrapper = (props: CardProps = {}) => {\n return <Card as=\"tr\" {...props} />\n}\n\nconst StyledRow = styled(RowWrapper)(\n () => css`\n display: table-row;\n\n &:not([hidden]) {\n display: table-row;\n }\n `\n)\n\ntype TableRowProps = PropsWithChildren<CardProps>\n\nexport function Row(props: TableRowProps) {\n const {children, ...rest} = props\n\n return <StyledRow {...rest}>{children}</StyledRow>\n}\n\n// Cell\nconst CellWrapper = (props = {}) => {\n return <Card as=\"td\" {...props} />\n}\n\nconst StyledCell = styled(CellWrapper)(\n () => css`\n display: table-cell;\n\n &:not([hidden]) {\n display: table-cell;\n }\n `\n)\n\ntype TableCellProps = PropsWithChildren<\n CardProps & {\n colSpan?: number\n rowSpan?: number\n }\n>\n\nexport function Cell(props: TableCellProps) {\n const {children, ...rest} = props\n\n return <StyledCell {...rest}>{children}</StyledCell>\n}\n","import {AddCircleIcon, RemoveCircleIcon, RestoreIcon} from '@sanity/icons'\nimport {Badge, Box, Flex, Menu, MenuItem, Text, TextInput} from '@sanity/ui'\nimport {type ChangeEvent, useRef, useState} from 'react'\nimport {UserAvatar} from 'sanity'\n\nimport {UserExtended} from '../../hooks/useProjectUsers'\n\nfunction searchUsers(\n users: UserExtended[],\n searchString: string\n): UserExtended[] {\n return users.filter((user) => {\n const displayName = (user.displayName || '').toLowerCase()\n if (displayName.startsWith(searchString)) return true\n const givenName = (user.givenName || '').toLowerCase()\n if (givenName.startsWith(searchString)) return true\n const middleName = (user.middleName || '').toLowerCase()\n if (middleName.startsWith(searchString)) return true\n const familyName = (user.familyName || '').toLowerCase()\n if (familyName.startsWith(searchString)) return true\n\n return false\n })\n}\n\ntype Labels = {\n addMe?: string\n removeMe?: string\n clear?: string\n searchPlaceholder?: string\n notFound?: string\n}\n\ntype UserSelectMenuProps = {\n value: string[]\n userList: UserExtended[]\n onAdd: (userId: string) => void\n onRemove: (userId: string) => void\n onClear: () => void\n labels?: Labels\n style?: React.CSSProperties\n}\n\nconst LABELS: Labels = {\n addMe: 'Assign myself',\n removeMe: 'Unassign myself',\n clear: 'Clear assignees',\n searchPlaceholder: 'Search users',\n notFound: 'No users found',\n}\n\nexport function UserSelectMenu(props: UserSelectMenuProps) {\n const {\n value = [],\n userList = [],\n onAdd,\n onRemove,\n onClear,\n style = {},\n } = props\n const labels = props?.labels ? {...LABELS, ...props.labels} : LABELS\n\n const [searchString, setSearchString] = useState('')\n const searchResults = searchUsers(userList || [], searchString)\n\n const me = userList.find((u) => u.isCurrentUser)\n const meAssigned = me && value.includes(me.id)\n\n // Focus input on open\n // TODO: Fix focus, it gets immediately taken away\n const input = useRef<HTMLInputElement>(null)\n // useEffect(() => {\n // if (open && input?.current) {\n // input.current.focus()\n // }\n // }, [open])\n\n const handleSearchChange = (event: ChangeEvent<HTMLInputElement>) => {\n setSearchString(event.target.value)\n }\n\n const handleSelect = (isChecked: boolean, user: UserExtended) => {\n if (!isChecked) {\n if (onAdd) onAdd(user.id)\n } else if (onRemove) onRemove(user.id)\n }\n\n const handleAssignMyself = () => {\n if (me && onAdd) onAdd(me.id)\n }\n\n const handleUnassignMyself = () => {\n if (me && onRemove) onRemove(me.id)\n }\n\n const handleClearAssigneesClick = () => {\n if (onClear) onClear()\n }\n\n return (\n <Menu style={style}>\n {meAssigned ? (\n <MenuItem\n tone=\"caution\"\n disabled={!me}\n onClick={handleUnassignMyself}\n icon={RemoveCircleIcon}\n text={labels.removeMe}\n />\n ) : (\n <MenuItem\n tone=\"positive\"\n onClick={handleAssignMyself}\n icon={AddCircleIcon}\n text={labels.addMe}\n />\n )}\n\n <MenuItem\n tone=\"critical\"\n disabled={value.length === 0}\n onClick={handleClearAssigneesClick}\n icon={RestoreIcon}\n text={labels.clear}\n />\n\n <Box padding={1}>\n <TextInput\n ref={input}\n onChange={handleSearchChange}\n placeholder={labels.searchPlaceholder}\n value={searchString}\n />\n </Box>\n\n {searchString && searchResults?.length === 0 && (\n <MenuItem disabled text={labels.notFound} />\n )}\n\n {searchResults &&\n searchResults.map((user) => (\n <MenuItem\n key={user.id}\n pressed={value.includes(user.id)}\n onClick={() => handleSelect(value.indexOf(user.id) > -1, user)}\n >\n <Flex align=\"center\">\n <UserAvatar user={user} size={1} />\n <Box paddingX={2} flex={1}>\n <Text>{user.displayName}</Text>\n </Box>\n {user.isCurrentUser && (\n <Badge fontSize={1} tone=\"positive\" mode=\"outline\">\n Me\n </Badge>\n )}\n </Flex>\n </MenuItem>\n ))}\n </Menu>\n )\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar example = 'image-Tb9Ew8CXIwaY6R1kjMvI0uRR-2000x3000-jpg';\nfunction parseAssetId(ref) {\n var _a = ref.split('-'), id = _a[1], dimensionString = _a[2], format = _a[3];\n if (!id || !dimensionString || !format) {\n throw new Error(\"Malformed asset _ref '\".concat(ref, \"'. Expected an id like \\\"\").concat(example, \"\\\".\"));\n }\n var _b = dimensionString.split('x'), imgWidthStr = _b[0], imgHeightStr = _b[1];\n var width = +imgWidthStr;\n var height = +imgHeightStr;\n var isValidAssetId = isFinite(width) && isFinite(height);\n if (!isValidAssetId) {\n throw new Error(\"Malformed asset _ref '\".concat(ref, \"'. Expected an id like \\\"\").concat(example, \"\\\".\"));\n }\n return { id: id, width: width, height: height, format: format };\n}\nexports.default = parseAssetId;\n//# sourceMappingURL=parseAssetId.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar isRef = function (src) {\n var source = src;\n return source ? typeof source._ref === 'string' : false;\n};\nvar isAsset = function (src) {\n var source = src;\n return source ? typeof source._id === 'string' : false;\n};\nvar isAssetStub = function (src) {\n var source = src;\n return source && source.asset ? typeof source.asset.url === 'string' : false;\n};\n// Convert an asset-id, asset or image to an image record suitable for processing\n// eslint-disable-next-line complexity\nfunction parseSource(source) {\n if (!source) {\n return null;\n }\n var image;\n if (typeof source === 'string' && isUrl(source)) {\n // Someone passed an existing image url?\n image = {\n asset: { _ref: urlToId(source) },\n };\n }\n else if (typeof source === 'string') {\n // Just an asset id\n image = {\n asset: { _ref: source },\n };\n }\n else if (isRef(source)) {\n // We just got passed an asset directly\n image = {\n asset: source,\n };\n }\n else if (isAsset(source)) {\n // If we were passed an image asset document\n image = {\n asset: {\n _ref: source._id || '',\n },\n };\n }\n else if (isAssetStub(source)) {\n // If we were passed a partial asset (`url`, but no `_id`)\n image = {\n asset: {\n _ref: urlToId(source.asset.url),\n },\n };\n }\n else if (typeof source.asset === 'object') {\n // Probably an actual image with materialized asset\n image = __assign({}, source);\n }\n else {\n // We got something that does not look like an image, or it is an image\n // that currently isn't sporting an asset.\n return null;\n }\n var img = source;\n if (img.crop) {\n image.crop = img.crop;\n }\n if (img.hotspot) {\n image.hotspot = img.hotspot;\n }\n return applyDefaults(image);\n}\nexports.default = parseSource;\nfunction isUrl(url) {\n return /^https?:\\/\\//.test(\"\".concat(url));\n}\nfunction urlToId(url) {\n var parts = url.split('/').slice(-1);\n return \"image-\".concat(parts[0]).replace(/\\.([a-z]+)$/, '-$1');\n}\n// Mock crop and hotspot if image lacks it\nfunction applyDefaults(image) {\n if (image.crop && image.hotspot) {\n return image;\n }\n // We need to pad in default values for crop or hotspot\n var result = __assign({}, image);\n if (!result.crop) {\n result.crop = {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n };\n }\n if (!result.hotspot) {\n result.hotspot = {\n x: 0.5,\n y: 0.5,\n height: 1.0,\n width: 1.0,\n };\n }\n return result;\n}\n//# sourceMappingURL=parseSource.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseSource = exports.SPEC_NAME_TO_URL_NAME_MAPPINGS = void 0;\nvar parseAssetId_1 = __importDefault(require(\"./parseAssetId\"));\nvar parseSource_1 = __importDefault(require(\"./parseSource\"));\nexports.parseSource = parseSource_1.default;\nexports.SPEC_NAME_TO_URL_NAME_MAPPINGS = [\n ['width', 'w'],\n ['height', 'h'],\n ['format', 'fm'],\n ['download', 'dl'],\n ['blur', 'blur'],\n ['sharpen', 'sharp'],\n ['invert', 'invert'],\n ['orientation', 'or'],\n ['minHeight', 'min-h'],\n ['maxHeight', 'max-h'],\n ['minWidth', 'min-w'],\n ['maxWidth', 'max-w'],\n ['quality', 'q'],\n ['fit', 'fit'],\n ['crop', 'crop'],\n ['saturation', 'sat'],\n ['auto', 'auto'],\n ['dpr', 'dpr'],\n ['pad', 'pad'],\n];\nfunction urlForImage(options) {\n var spec = __assign({}, (options || {}));\n var source = spec.source;\n delete spec.source;\n var image = (0, parseSource_1.default)(source);\n if (!image) {\n throw new Error(\"Unable to resolve image URL from source (\".concat(JSON.stringify(source), \")\"));\n }\n var id = image.asset._ref || image.asset._id || '';\n var asset = (0, parseAssetId_1.default)(id);\n // Compute crop rect in terms of pixel coordinates in the raw source image\n var cropLeft = Math.round(image.crop.left * asset.width);\n var cropTop = Math.round(image.crop.top * asset.height);\n var crop = {\n left: cropLeft,\n top: cropTop,\n width: Math.round(asset.width - image.crop.right * asset.width - cropLeft),\n height: Math.round(asset.height - image.crop.bottom * asset.height - cropTop),\n };\n // Compute hot spot rect in terms of pixel coordinates\n var hotSpotVerticalRadius = (image.hotspot.height * asset.height) / 2;\n var hotSpotHorizontalRadius = (image.hotspot.width * asset.width) / 2;\n var hotSpotCenterX = image.hotspot.x * asset.width;\n var hotSpotCenterY = image.hotspot.y * asset.height;\n var hotspot = {\n left: hotSpotCenterX - hotSpotHorizontalRadius,\n top: hotSpotCenterY - hotSpotVerticalRadius,\n right: hotSpotCenterX + hotSpotHorizontalRadius,\n bottom: hotSpotCenterY + hotSpotVerticalRadius,\n };\n // If irrelevant, or if we are requested to: don't perform crop/fit based on\n // the crop/hotspot.\n if (!(spec.rect || spec.focalPoint || spec.ignoreImageParams || spec.crop)) {\n spec = __assign(__assign({}, spec), fit({ crop: crop, hotspot: hotspot }, spec));\n }\n return specToImageUrl(__assign(__assign({}, spec), { asset: asset }));\n}\nexports.default = urlForImage;\n// eslint-disable-next-line complexity\nfunction specToImageUrl(spec) {\n var cdnUrl = (spec.baseUrl || 'https://cdn.sanity.io').replace(/\\/+$/, '');\n var filename = \"\".concat(spec.asset.id, \"-\").concat(spec.asset.width, \"x\").concat(spec.asset.height, \".\").concat(spec.asset.format);\n var baseUrl = \"\".concat(cdnUrl, \"/images/\").concat(spec.projectId, \"/\").concat(spec.dataset, \"/\").concat(filename);\n var params = [];\n if (spec.rect) {\n // Only bother url with a crop if it actually crops anything\n var _a = spec.rect, left = _a.left, top_1 = _a.top, width = _a.width, height = _a.height;\n var isEffectiveCrop = left !== 0 || top_1 !== 0 || height !== spec.asset.height || width !== spec.asset.width;\n if (isEffectiveCrop) {\n params.push(\"rect=\".concat(left, \",\").concat(top_1, \",\").concat(width, \",\").concat(height));\n }\n }\n if (spec.bg) {\n params.push(\"bg=\".concat(spec.bg));\n }\n if (spec.focalPoint) {\n params.push(\"fp-x=\".concat(spec.focalPoint.x));\n params.push(\"fp-y=\".concat(spec.focalPoint.y));\n }\n var flip = [spec.flipHorizontal && 'h', spec.flipVertical && 'v'].filter(Boolean).join('');\n if (flip) {\n params.push(\"flip=\".concat(flip));\n }\n // Map from spec name to url param name, and allow using the actual param name as an alternative\n exports.SPEC_NAME_TO_URL_NAME_MAPPINGS.forEach(function (mapping) {\n var specName = mapping[0], param = mapping[1];\n if (typeof spec[specName] !== 'undefined') {\n params.push(\"\".concat(param, \"=\").concat(encodeURIComponent(spec[specName])));\n }\n else if (typeof spec[param] !== 'undefined') {\n params.push(\"\".concat(param, \"=\").concat(encodeURIComponent(spec[param])));\n }\n });\n if (params.length === 0) {\n return baseUrl;\n }\n return \"\".concat(baseUrl, \"?\").concat(params.join('&'));\n}\nfunction fit(source, spec) {\n var cropRect;\n var imgWidth = spec.width;\n var imgHeight = spec.height;\n // If we are not constraining the aspect ratio, we'll just use the whole crop\n if (!(imgWidth && imgHeight)) {\n return { width: imgWidth, height: imgHeight, rect: source.crop };\n }\n var crop = source.crop;\n var hotspot = source.hotspot;\n // If we are here, that means aspect ratio is locked and fitting will be a bit harder\n var desiredAspectRatio = imgWidth / imgHeight;\n var cropAspectRatio = crop.width / crop.height;\n if (cropAspectRatio > desiredAspectRatio) {\n // The crop is wider than the desired aspect ratio. That means we are cutting from the sides\n var height = Math.round(crop.height);\n var width = Math.round(height * desiredAspectRatio);\n var top_2 = Math.max(0, Math.round(crop.top));\n // Center output horizontally over hotspot\n var hotspotXCenter = Math.round((hotspot.right - hotspot.left) / 2 + hotspot.left);\n var left = Math.max(0, Math.round(hotspotXCenter - width / 2));\n // Keep output within crop\n if (left < crop.left) {\n left = crop.left;\n }\n else if (left + width > crop.left + crop.width) {\n left = crop.left + crop.width - width;\n }\n cropRect = { left: left, top: top_2, width: width, height: height };\n }\n else {\n // The crop is taller than the desired ratio, we are cutting from top and bottom\n var width = crop.width;\n var height = Math.round(width / desiredAspectRatio);\n var left = Math.max(0, Math.round(crop.left));\n // Center output vertically over hotspot\n var hotspotYCenter = Math.round((hotspot.bottom - hotspot.top) / 2 + hotspot.top);\n var top_3 = Math.max(0, Math.round(hotspotYCenter - height / 2));\n // Keep output rect within crop\n if (top_3 < crop.top) {\n top_3 = crop.top;\n }\n else if (top_3 + height > crop.top + crop.height) {\n top_3 = crop.top + crop.height - height;\n }\n cropRect = { left: left, top: top_3, width: width, height: height };\n }\n return {\n width: imgWidth,\n height: imgHeight,\n rect: cropRect,\n };\n}\n//# sourceMappingURL=urlForImage.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImageUrlBuilder = void 0;\nvar urlForImage_1 = __importStar(require(\"./urlForImage\"));\nvar validFits = ['clip', 'crop', 'fill', 'fillmax', 'max', 'scale', 'min'];\nvar validCrops = ['top', 'bottom', 'left', 'right', 'center', 'focalpoint', 'entropy'];\nvar validAutoModes = ['format'];\nfunction isSanityModernClientLike(client) {\n return client && 'config' in client ? typeof client.config === 'function' : false;\n}\nfunction isSanityClientLike(client) {\n return client && 'clientConfig' in client ? typeof client.clientConfig === 'object' : false;\n}\nfunction rewriteSpecName(key) {\n var specs = urlForImage_1.SPEC_NAME_TO_URL_NAME_MAPPINGS;\n for (var _i = 0, specs_1 = specs; _i < specs_1.length; _i++) {\n var entry = specs_1[_i];\n var specName = entry[0], param = entry[1];\n if (key === specName || key === param) {\n return specName;\n }\n }\n return key;\n}\nfunction urlBuilder(options) {\n // Did we get a modernish client?\n if (isSanityModernClientLike(options)) {\n // Inherit config from client\n var _a = options.config(), apiUrl = _a.apiHost, projectId = _a.projectId, dataset = _a.dataset;\n var apiHost = apiUrl || 'https://api.sanity.io';\n return new ImageUrlBuilder(null, {\n baseUrl: apiHost.replace(/^https:\\/\\/api\\./, 'https://cdn.'),\n projectId: projectId,\n dataset: dataset,\n });\n }\n // Did we get a SanityClient?\n var client = options;\n if (isSanityClientLike(client)) {\n // Inherit config from client\n var _b = client.clientConfig, apiUrl = _b.apiHost, projectId = _b.projectId, dataset = _b.dataset;\n var apiHost = apiUrl || 'https://api.sanity.io';\n return new ImageUrlBuilder(null, {\n baseUrl: apiHost.replace(/^https:\\/\\/api\\./, 'https://cdn.'),\n projectId: projectId,\n dataset: dataset,\n });\n }\n // Or just accept the options as given\n return new ImageUrlBuilder(null, options);\n}\nexports.default = urlBuilder;\nvar ImageUrlBuilder = /** @class */ (function () {\n function ImageUrlBuilder(parent, options) {\n this.options = parent\n ? __assign(__assign({}, (parent.options || {})), (options || {})) : __assign({}, (options || {})); // Copy options\n }\n ImageUrlBuilder.prototype.withOptions = function (options) {\n var baseUrl = options.baseUrl || this.options.baseUrl;\n var newOptions = { baseUrl: baseUrl };\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n var specKey = rewriteSpecName(key);\n newOptions[specKey] = options[key];\n }\n }\n return new ImageUrlBuilder(this, __assign({ baseUrl: baseUrl }, newOptions));\n };\n // The image to be represented. Accepts a Sanity 'image'-document, 'asset'-document or\n // _id of asset. To get the benefit of automatic hot-spot/crop integration with the content\n // studio, the 'image'-document must be provided.\n ImageUrlBuilder.prototype.image = function (source) {\n return this.withOptions({ source: source });\n };\n // Specify the dataset\n ImageUrlBuilder.prototype.dataset = function (dataset) {\n return this.withOptions({ dataset: dataset });\n };\n // Specify the projectId\n ImageUrlBuilder.prototype.projectId = function (projectId) {\n return this.withOptions({ projectId: projectId });\n };\n // Specify background color\n ImageUrlBuilder.prototype.bg = function (bg) {\n return this.withOptions({ bg: bg });\n };\n // Set DPR scaling factor\n ImageUrlBuilder.prototype.dpr = function (dpr) {\n // A DPR of 1 is the default - so only include it if we have a different value\n return this.withOptions(dpr && dpr !== 1 ? { dpr: dpr } : {});\n };\n // Specify the width of the image in pixels\n ImageUrlBuilder.prototype.width = function (width) {\n return this.withOptions({ width: width });\n };\n // Specify the height of the image in pixels\n ImageUrlBuilder.prototype.height = function (height) {\n return this.withOptions({ height: height });\n };\n // Specify focal point in fraction of image dimensions. Each component 0.0-1.0\n ImageUrlBuilder.prototype.focalPoint = function (x, y) {\n return this.withOptions({ focalPoint: { x: x, y: y } });\n };\n ImageUrlBuilder.prototype.maxWidth = function (maxWidth) {\n return this.withOptions({ maxWidth: maxWidth });\n };\n ImageUrlBuilder.prototype.minWidth = function (minWidth) {\n return this.withOptions({ minWidth: minWidth });\n };\n ImageUrlBuilder.prototype.maxHeight = function (maxHeight) {\n return this.withOptions({ maxHeight: maxHeight });\n };\n ImageUrlBuilder.prototype.minHeight = function (minHeight) {\n return this.withOptions({ minHeight: minHeight });\n };\n // Specify width and height in pixels\n ImageUrlBuilder.prototype.size = function (width, height) {\n return this.withOptions({ width: width, height: height });\n };\n // Specify blur between 0 and 100\n ImageUrlBuilder.prototype.blur = function (blur) {\n return this.withOptions({ blur: blur });\n };\n ImageUrlBuilder.prototype.sharpen = function (sharpen) {\n return this.withOptions({ sharpen: sharpen });\n };\n // Specify the desired rectangle of the image\n ImageUrlBuilder.prototype.rect = function (left, top, width, height) {\n return this.withOptions({ rect: { left: left, top: top, width: width, height: height } });\n };\n // Specify the image format of the image. 'jpg', 'pjpg', 'png', 'webp'\n ImageUrlBuilder.prototype.format = function (format) {\n return this.withOptions({ format: format });\n };\n ImageUrlBuilder.prototype.invert = function (invert) {\n return this.withOptions({ invert: invert });\n };\n // Rotation in degrees 0, 90, 180, 270\n ImageUrlBuilder.prototype.orientation = function (orientation) {\n return this.withOptions({ orientation: orientation });\n };\n // Compression quality 0-100\n ImageUrlBuilder.prototype.quality = function (quality) {\n return this.withOptions({ quality: quality });\n };\n // Make it a download link. Parameter is default filename.\n ImageUrlBuilder.prototype.forceDownload = function (download) {\n return this.withOptions({ download: download });\n };\n // Flip image horizontally\n ImageUrlBuilder.prototype.flipHorizontal = function () {\n return this.withOptions({ flipHorizontal: true });\n };\n // Flip image vertically\n ImageUrlBuilder.prototype.flipVertical = function () {\n return this.withOptions({ flipVertical: true });\n };\n // Ignore crop/hotspot from image record, even when present\n ImageUrlBuilder.prototype.ignoreImageParams = function () {\n return this.withOptions({ ignoreImageParams: true });\n };\n ImageUrlBuilder.prototype.fit = function (value) {\n if (validFits.indexOf(value) === -1) {\n throw new Error(\"Invalid fit mode \\\"\".concat(value, \"\\\"\"));\n }\n return this.withOptions({ fit: value });\n };\n ImageUrlBuilder.prototype.crop = function (value) {\n if (validCrops.indexOf(value) === -1) {\n throw new Error(\"Invalid crop mode \\\"\".concat(value, \"\\\"\"));\n }\n return this.withOptions({ crop: value });\n };\n // Saturation\n ImageUrlBuilder.prototype.saturation = function (saturation) {\n return this.withOptions({ saturation: saturation });\n };\n ImageUrlBuilder.prototype.auto = function (value) {\n if (validAutoModes.indexOf(value) === -1) {\n throw new Error(\"Invalid auto mode \\\"\".concat(value, \"\\\"\"));\n }\n return this.withOptions({ auto: value });\n };\n // Specify the number of pixels to pad the image\n ImageUrlBuilder.prototype.pad = function (pad) {\n return this.withOptions({ pad: pad });\n };\n // Gets the url based on the submitted parameters\n ImageUrlBuilder.prototype.url = function () {\n return (0, urlForImage_1.default)(this.options);\n };\n // Alias for url()\n ImageUrlBuilder.prototype.toString = function () {\n return this.url();\n };\n return ImageUrlBuilder;\n}());\nexports.ImageUrlBuilder = ImageUrlBuilder;\n//# sourceMappingURL=builder.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar builder_1 = __importDefault(require(\"./builder\"));\nmodule.exports = builder_1.default;\n//# sourceMappingURL=index.js.map","import createImageUrlBuilder from '@sanity/image-url'\nimport {useMemo} from 'react'\nimport type {ImageUrlBuilder, SourceClientOptions} from 'sanity'\nimport {useClient} from 'sanity'\n\nexport function useImageUrlBuilder(\n clientOptions?: SourceClientOptions\n): ImageUrlBuilder | null {\n const client = useClient(clientOptions)\n const builder = useMemo(() => createImageUrlBuilder(client), [client])\n\n return builder\n}\n","import type {SanityImageSource} from '@sanity/asset-utils'\nimport {useMemo} from 'react'\nimport type {ImageUrlBuilder, SourceClientOptions} from 'sanity'\n\nimport {useImageUrlBuilder} from './useImageUrlBuilder'\n\nexport function useImageUrlBuilderImage(\n source: SanityImageSource,\n clientOptions?: SourceClientOptions\n): ImageUrlBuilder | null {\n const builder = useImageUrlBuilder(clientOptions)\n const image = useMemo(\n () => (source && builder ? builder.image(source) : null),\n [builder, source]\n )\n\n return image\n}\n","import {useEffect, useMemo, useRef, useState} from 'react'\nimport isEqual from 'react-fast-compare'\nimport {Subscription} from 'rxjs'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport {ListenQueryOptions, ListenQueryParams, useDocumentStore} from 'sanity'\n\ntype Value = unknown\n\ninterface Config<V> {\n params?: ListenQueryParams\n options?: ListenQueryOptions\n initialValue?: null | V\n}\n\n// make generic optional\ninterface Return<V = Value> {\n loading: boolean\n error: boolean | unknown | ProgressEvent\n data: unknown | V\n initialValue?: Value\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2023-05-01`}\nconst DEFAULT_INITIAL_VALUE = null\n\nfunction useParams(\n params?: undefined | null | ListenQueryParams | ListenQueryOptions\n): ListenQueryParams {\n const stringifiedParams = useMemo(\n () => JSON.stringify(params || {}),\n [params]\n )\n return useMemo(() => JSON.parse(stringifiedParams), [stringifiedParams])\n}\n\nexport function useListeningQuery<V>(\n query: string | {fetch: string; listen: string},\n {\n params = DEFAULT_PARAMS,\n options = DEFAULT_OPTIONS,\n initialValue = DEFAULT_INITIAL_VALUE,\n }: Config<V>\n): Return<V> {\n const [loading, setLoading] = useState<Return['loading']>(true)\n const [error, setError] = useState<Return['error']>(false)\n const [data, setData] = useState<Return['data']>(initialValue)\n const memoParams = useParams(params)\n const memoOptions = useParams(options)\n\n const subscription = useRef<null | Subscription>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query && !error && !subscription.current) {\n try {\n subscription.current = documentStore\n .listenQuery(query, memoParams, memoOptions)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents) => {\n setData((current: Value) =>\n isEqual(current, documents) ? current : documents\n )\n setLoading(false)\n setError(false)\n })\n } catch (err) {\n console.error(err)\n setLoading(false)\n setError(err)\n }\n }\n\n // Unsubscribe when an error occurs\n if (error && subscription.current) {\n subscription.current.unsubscribe()\n }\n\n return () => {\n if (subscription.current) {\n subscription?.current?.unsubscribe()\n subscription.current = null\n }\n }\n }, [query, error, memoParams, memoOptions, documentStore])\n\n return {data, loading, error}\n}\n","import {useCallback, useContext} from 'react'\nimport {RouterContext} from 'sanity/router'\nimport {usePaneRouter} from 'sanity/structure'\n\nexport function useOpenInNewPane(id?: string, type?: string) {\n const routerContext = useContext(RouterContext)\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = useCallback(() => {\n if (!routerContext || !id || !type) {\n return\n }\n\n const panes = [...routerPanesState]\n panes.splice(groupIndex + 1, 0, [\n {\n id: id,\n params: {type},\n },\n ])\n\n const href = routerContext.resolvePathFromState({panes})\n routerContext.navigateUrl({path: href})\n }, [id, type, routerContext, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import {useEffect, useState} from 'react'\nimport {useClient, useWorkspace} from 'sanity'\n\nexport type UserExtended = {\n createdAt: string\n displayName: string\n email: string\n familyName: string\n givenName: string\n id: string\n imageUrl: string\n isCurrentUser: boolean\n middleName: string\n projectId: string\n provider: string\n sanityUserId: string\n updatedAt: string\n}\n\ntype UserRole = {\n name: string\n title: string\n}\n\ntype UserResponse = {\n isRobot: boolean\n projectUserId: string\n roles: UserRole[]\n}\n\ntype HookConfig = {\n apiVersion?: string\n}\n\nfunction chunkArray<T>(array: T[], size: number): T[][] {\n const chunks: T[][] = []\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size))\n }\n return chunks\n}\n\n// Custom hook to fetch user details and roles in batches\nexport function useProjectUsers({apiVersion}: HookConfig): UserExtended[] {\n const {currentUser} = useWorkspace()\n const client = useClient({apiVersion: apiVersion ?? '2023-01-01'})\n const [users, setUsers] = useState<UserExtended[]>([])\n\n useEffect(() => {\n const {projectId} = client.config()\n\n async function getUsersWithRoles() {\n try {\n const aclData = await client.request({\n url: `/projects/${projectId}/acl`,\n })\n\n const userIds = aclData.map((user: UserResponse) => user.projectUserId)\n\n const userIdChunks = chunkArray(userIds, 200)\n\n let usersData: UserExtended[] = []\n\n // Fetch users in batches of 200\n for (const chunk of userIdChunks) {\n const chunkedUserIds = chunk.join(',')\n const response = await client.request({\n url: `/projects/${projectId}/users/${chunkedUserIds}`,\n })\n usersData = [...usersData, ...response]\n }\n\n // Combine user details with roles\n const usersWithRoles = usersData.map((user: UserExtended) => {\n const userRoles =\n aclData.find(\n (aclUser: UserResponse) => aclUser.projectUserId === user.id\n )?.roles || []\n\n return {\n ...user,\n isCurrentUser: user.id === currentUser?.id,\n roles: userRoles,\n }\n })\n\n setUsers(usersWithRoles)\n } catch (err) {\n console.error('Failed to fetch users:', err)\n }\n }\n\n if (!users.length) {\n getUsersWithRoles()\n }\n }, [client, currentUser?.id, users.length])\n\n return users\n}\n"],"names":["__spreadValues","__spreadProps","parseAssetId_1","parseAssetId","this","parseSource_1","parseSource","require$$0","require$$1","urlForImage","ImageUrlBuilder","builder"],"mappings":"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","x_google_ignoreList":[3,4,5,6,7]}
1
+ {"version":3,"file":"index.js","sources":["../src/components/Feedback.tsx","../src/components/Table.tsx","../src/components/UserSelectMenu/index.tsx","../node_modules/@sanity/image-url/lib/node/parseAssetId.js","../node_modules/@sanity/image-url/lib/node/parseSource.js","../node_modules/@sanity/image-url/lib/node/urlForImage.js","../node_modules/@sanity/image-url/lib/node/builder.js","../node_modules/@sanity/image-url/lib/node/index.js","../src/hooks/useImageUrlBuilder.tsx","../src/hooks/useImageUrlBuilderImage.tsx","../src/hooks/useListeningQuery.tsx","../src/hooks/useOpenInNewPane.tsx","../src/hooks/useProjectUsers.tsx"],"sourcesContent":["import {Box, Card, CardTone, Flex, Stack, Text} from '@sanity/ui'\nimport type {ReactNode} from 'react'\n\ntype FeedbackChildren = {\n children?: ReactNode\n title?: never\n description?: never\n}\n\ntype FeedbackTextProps = {\n title?: string\n description?: ReactNode\n children?: never\n}\n\ntype FeedbackProps = (FeedbackChildren | FeedbackTextProps) & {\n tone?: CardTone\n icon?: ReactNode\n}\n\nconst DEFAULT_PROPS: FeedbackProps = {\n tone: 'primary',\n}\n\nexport function Feedback(props: FeedbackProps) {\n const {title, description, icon, tone, children} = {\n ...DEFAULT_PROPS,\n ...props,\n }\n\n return (\n <Card tone={tone} padding={4} radius={3} border>\n <Flex>\n {icon ? `display icon` : null}\n {children ? (\n children\n ) : (\n <Box flex={1}>\n <Stack space={4}>\n {title ? <Text weight=\"semibold\">{title}</Text> : null}\n {description ? <Text size={2}>{description}</Text> : null}\n </Stack>\n </Box>\n )}\n </Flex>\n </Card>\n )\n}\n","import {Card, type CardProps} from '@sanity/ui'\nimport type {PropsWithChildren} from 'react'\nimport {css, styled} from 'styled-components'\n\n// Wrappers required because of bug with passing down \"as\" prop\n// https://github.com/styled-components/styled-components/issues/2449\n\n// Table\nconst TableWrapper = (props: CardProps = {}) => {\n return <Card as=\"table\" {...props} />\n}\n\nconst StyledTable = styled(TableWrapper)(\n () => css`\n display: table;\n width: 100%;\n border-collapse: collapse;\n\n &:not([hidden]) {\n display: table;\n border-collapse: collapse;\n }\n `\n)\n\ntype TableProps = PropsWithChildren<CardProps>\n\nexport function Table(props: TableProps) {\n const {children, ...rest} = props\n\n return <StyledTable {...rest}>{children}</StyledTable>\n}\n\n// Row\nconst RowWrapper = (props: CardProps = {}) => {\n return <Card as=\"tr\" {...props} />\n}\n\nconst StyledRow = styled(RowWrapper)(\n () => css`\n display: table-row;\n\n &:not([hidden]) {\n display: table-row;\n }\n `\n)\n\ntype TableRowProps = PropsWithChildren<CardProps>\n\nexport function Row(props: TableRowProps) {\n const {children, ...rest} = props\n\n return <StyledRow {...rest}>{children}</StyledRow>\n}\n\n// Cell\nconst CellWrapper = (props = {}) => {\n return <Card as=\"td\" {...props} />\n}\n\nconst StyledCell = styled(CellWrapper)(\n () => css`\n display: table-cell;\n\n &:not([hidden]) {\n display: table-cell;\n }\n `\n)\n\ntype TableCellProps = PropsWithChildren<\n CardProps & {\n colSpan?: number\n rowSpan?: number\n }\n>\n\nexport function Cell(props: TableCellProps) {\n const {children, ...rest} = props\n\n return <StyledCell {...rest}>{children}</StyledCell>\n}\n","import {AddCircleIcon, RemoveCircleIcon, RestoreIcon} from '@sanity/icons'\nimport {Badge, Box, Flex, Menu, MenuItem, Text, TextInput} from '@sanity/ui'\nimport {type ChangeEvent, useRef, useState} from 'react'\nimport {UserAvatar} from 'sanity'\n\nimport {UserExtended} from '../../hooks/useProjectUsers'\n\nfunction searchUsers(\n users: UserExtended[],\n searchString: string\n): UserExtended[] {\n return users.filter((user) => {\n const displayName = (user.displayName || '').toLowerCase()\n if (displayName.startsWith(searchString)) return true\n const givenName = (user.givenName || '').toLowerCase()\n if (givenName.startsWith(searchString)) return true\n const middleName = (user.middleName || '').toLowerCase()\n if (middleName.startsWith(searchString)) return true\n const familyName = (user.familyName || '').toLowerCase()\n if (familyName.startsWith(searchString)) return true\n\n return false\n })\n}\n\ntype Labels = {\n addMe?: string\n removeMe?: string\n clear?: string\n searchPlaceholder?: string\n notFound?: string\n}\n\ntype UserSelectMenuProps = {\n value: string[]\n userList: UserExtended[]\n onAdd: (userId: string) => void\n onRemove: (userId: string) => void\n onClear: () => void\n labels?: Labels\n style?: React.CSSProperties\n}\n\nconst LABELS: Labels = {\n addMe: 'Assign myself',\n removeMe: 'Unassign myself',\n clear: 'Clear assignees',\n searchPlaceholder: 'Search users',\n notFound: 'No users found',\n}\n\nexport function UserSelectMenu(props: UserSelectMenuProps) {\n const {\n value = [],\n userList = [],\n onAdd,\n onRemove,\n onClear,\n style = {},\n } = props\n const labels = props?.labels ? {...LABELS, ...props.labels} : LABELS\n\n const [searchString, setSearchString] = useState('')\n const searchResults = searchUsers(userList || [], searchString)\n\n const me = userList.find((u) => u.isCurrentUser)\n const meAssigned = me && value.includes(me.id)\n\n // Focus input on open\n // TODO: Fix focus, it gets immediately taken away\n const input = useRef<HTMLInputElement>(null)\n // useEffect(() => {\n // if (open && input?.current) {\n // input.current.focus()\n // }\n // }, [open])\n\n const handleSearchChange = (event: ChangeEvent<HTMLInputElement>) => {\n setSearchString(event.target.value)\n }\n\n const handleSelect = (isChecked: boolean, user: UserExtended) => {\n if (!isChecked) {\n if (onAdd) onAdd(user.id)\n } else if (onRemove) onRemove(user.id)\n }\n\n const handleAssignMyself = () => {\n if (me && onAdd) onAdd(me.id)\n }\n\n const handleUnassignMyself = () => {\n if (me && onRemove) onRemove(me.id)\n }\n\n const handleClearAssigneesClick = () => {\n if (onClear) onClear()\n }\n\n return (\n <Menu style={style}>\n {meAssigned ? (\n <MenuItem\n tone=\"caution\"\n disabled={!me}\n onClick={handleUnassignMyself}\n icon={RemoveCircleIcon}\n text={labels.removeMe}\n />\n ) : (\n <MenuItem\n tone=\"positive\"\n onClick={handleAssignMyself}\n icon={AddCircleIcon}\n text={labels.addMe}\n />\n )}\n\n <MenuItem\n tone=\"critical\"\n disabled={value.length === 0}\n onClick={handleClearAssigneesClick}\n icon={RestoreIcon}\n text={labels.clear}\n />\n\n <Box padding={1}>\n <TextInput\n ref={input}\n onChange={handleSearchChange}\n placeholder={labels.searchPlaceholder}\n value={searchString}\n />\n </Box>\n\n {searchString && searchResults?.length === 0 && (\n <MenuItem disabled text={labels.notFound} />\n )}\n\n {searchResults &&\n searchResults.map((user) => (\n <MenuItem\n key={user.id}\n pressed={value.includes(user.id)}\n onClick={() => handleSelect(value.indexOf(user.id) > -1, user)}\n >\n <Flex align=\"center\">\n <UserAvatar user={user} size={1} />\n <Box paddingX={2} flex={1}>\n <Text>{user.displayName}</Text>\n </Box>\n {user.isCurrentUser && (\n <Badge fontSize={1} tone=\"positive\" mode=\"outline\">\n Me\n </Badge>\n )}\n </Flex>\n </MenuItem>\n ))}\n </Menu>\n )\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar example = 'image-Tb9Ew8CXIwaY6R1kjMvI0uRR-2000x3000-jpg';\nfunction parseAssetId(ref) {\n var _a = ref.split('-'), id = _a[1], dimensionString = _a[2], format = _a[3];\n if (!id || !dimensionString || !format) {\n throw new Error(\"Malformed asset _ref '\".concat(ref, \"'. Expected an id like \\\"\").concat(example, \"\\\".\"));\n }\n var _b = dimensionString.split('x'), imgWidthStr = _b[0], imgHeightStr = _b[1];\n var width = +imgWidthStr;\n var height = +imgHeightStr;\n var isValidAssetId = isFinite(width) && isFinite(height);\n if (!isValidAssetId) {\n throw new Error(\"Malformed asset _ref '\".concat(ref, \"'. Expected an id like \\\"\").concat(example, \"\\\".\"));\n }\n return { id: id, width: width, height: height, format: format };\n}\nexports.default = parseAssetId;\n//# sourceMappingURL=parseAssetId.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isInProgressUpload = void 0;\nvar isRef = function (src) {\n var source = src;\n return source ? typeof source._ref === 'string' : false;\n};\nvar isAsset = function (src) {\n var source = src;\n return source ? typeof source._id === 'string' : false;\n};\nvar isAssetStub = function (src) {\n var source = src;\n return source && source.asset ? typeof source.asset.url === 'string' : false;\n};\n// Detect in-progress uploads (has upload key but no complete asset reference)\nvar isInProgressUpload = function (src) {\n if (typeof src === 'object' && src !== null) {\n var obj = src;\n // Check if it has an upload key (indicating in-progress upload)\n return obj._upload && (!obj.asset || !obj.asset._ref);\n }\n return false;\n};\nexports.isInProgressUpload = isInProgressUpload;\n// Convert an asset-id, asset or image to an image record suitable for processing\n// eslint-disable-next-line complexity\nfunction parseSource(source) {\n if (!source) {\n return null;\n }\n var image;\n if (typeof source === 'string' && isUrl(source)) {\n // Someone passed an existing image url?\n image = {\n asset: { _ref: urlToId(source) },\n };\n }\n else if (typeof source === 'string') {\n // Just an asset id\n image = {\n asset: { _ref: source },\n };\n }\n else if (isRef(source)) {\n // We just got passed an asset directly\n image = {\n asset: source,\n };\n }\n else if (isAsset(source)) {\n // If we were passed an image asset document\n image = {\n asset: {\n _ref: source._id || '',\n },\n };\n }\n else if (isAssetStub(source)) {\n // If we were passed a partial asset (`url`, but no `_id`)\n image = {\n asset: {\n _ref: urlToId(source.asset.url),\n },\n };\n }\n else if (typeof source.asset === 'object') {\n // Probably an actual image with materialized asset\n image = __assign({}, source);\n }\n else {\n // We got something that does not look like an image, or it is an image\n // that currently isn't sporting an asset.\n return null;\n }\n var img = source;\n if (img.crop) {\n image.crop = img.crop;\n }\n if (img.hotspot) {\n image.hotspot = img.hotspot;\n }\n return applyDefaults(image);\n}\nexports.default = parseSource;\nfunction isUrl(url) {\n return /^https?:\\/\\//.test(\"\".concat(url));\n}\nfunction urlToId(url) {\n var parts = url.split('/').slice(-1);\n return \"image-\".concat(parts[0]).replace(/\\.([a-z]+)$/, '-$1');\n}\n// Mock crop and hotspot if image lacks it\nfunction applyDefaults(image) {\n if (image.crop && image.hotspot) {\n return image;\n }\n // We need to pad in default values for crop or hotspot\n var result = __assign({}, image);\n if (!result.crop) {\n result.crop = {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n };\n }\n if (!result.hotspot) {\n result.hotspot = {\n x: 0.5,\n y: 0.5,\n height: 1.0,\n width: 1.0,\n };\n }\n return result;\n}\n//# sourceMappingURL=parseSource.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseSource = exports.SPEC_NAME_TO_URL_NAME_MAPPINGS = void 0;\nvar parseAssetId_1 = __importDefault(require(\"./parseAssetId\"));\nvar parseSource_1 = __importStar(require(\"./parseSource\"));\nexports.parseSource = parseSource_1.default;\nexports.SPEC_NAME_TO_URL_NAME_MAPPINGS = [\n ['width', 'w'],\n ['height', 'h'],\n ['format', 'fm'],\n ['download', 'dl'],\n ['blur', 'blur'],\n ['sharpen', 'sharp'],\n ['invert', 'invert'],\n ['orientation', 'or'],\n ['minHeight', 'min-h'],\n ['maxHeight', 'max-h'],\n ['minWidth', 'min-w'],\n ['maxWidth', 'max-w'],\n ['quality', 'q'],\n ['fit', 'fit'],\n ['crop', 'crop'],\n ['saturation', 'sat'],\n ['auto', 'auto'],\n ['dpr', 'dpr'],\n ['pad', 'pad'],\n ['frame', 'frame'],\n];\nfunction urlForImage(options) {\n var spec = __assign({}, (options || {}));\n var source = spec.source;\n delete spec.source;\n var image = (0, parseSource_1.default)(source);\n if (!image) {\n if (source && (0, parseSource_1.isInProgressUpload)(source)) {\n // This is a placeholder image that will be replaced with the actual image when the upload is complete\n // This is a 0x0 transparent PNG image\n return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8HwQACfsD/QNViZkAAAAASUVORK5CYII=';\n }\n throw new Error(\"Unable to resolve image URL from source (\".concat(JSON.stringify(source), \")\"));\n }\n var id = image.asset._ref || image.asset._id || '';\n var asset = (0, parseAssetId_1.default)(id);\n // Compute crop rect in terms of pixel coordinates in the raw source image\n var cropLeft = Math.round(image.crop.left * asset.width);\n var cropTop = Math.round(image.crop.top * asset.height);\n var crop = {\n left: cropLeft,\n top: cropTop,\n width: Math.round(asset.width - image.crop.right * asset.width - cropLeft),\n height: Math.round(asset.height - image.crop.bottom * asset.height - cropTop),\n };\n // Compute hot spot rect in terms of pixel coordinates\n var hotSpotVerticalRadius = (image.hotspot.height * asset.height) / 2;\n var hotSpotHorizontalRadius = (image.hotspot.width * asset.width) / 2;\n var hotSpotCenterX = image.hotspot.x * asset.width;\n var hotSpotCenterY = image.hotspot.y * asset.height;\n var hotspot = {\n left: hotSpotCenterX - hotSpotHorizontalRadius,\n top: hotSpotCenterY - hotSpotVerticalRadius,\n right: hotSpotCenterX + hotSpotHorizontalRadius,\n bottom: hotSpotCenterY + hotSpotVerticalRadius,\n };\n // If irrelevant, or if we are requested to: don't perform crop/fit based on\n // the crop/hotspot.\n if (!(spec.rect || spec.focalPoint || spec.ignoreImageParams || spec.crop)) {\n spec = __assign(__assign({}, spec), fit({ crop: crop, hotspot: hotspot }, spec));\n }\n return specToImageUrl(__assign(__assign({}, spec), { asset: asset }));\n}\nexports.default = urlForImage;\n// eslint-disable-next-line complexity\nfunction specToImageUrl(spec) {\n var cdnUrl = (spec.baseUrl || 'https://cdn.sanity.io').replace(/\\/+$/, '');\n var vanityStub = spec.vanityName ? \"/\".concat(spec.vanityName) : '';\n var filename = \"\".concat(spec.asset.id, \"-\").concat(spec.asset.width, \"x\").concat(spec.asset.height, \".\").concat(spec.asset.format).concat(vanityStub);\n var baseUrl = \"\".concat(cdnUrl, \"/images/\").concat(spec.projectId, \"/\").concat(spec.dataset, \"/\").concat(filename);\n var params = [];\n if (spec.rect) {\n // Only bother url with a crop if it actually crops anything\n var _a = spec.rect, left = _a.left, top_1 = _a.top, width = _a.width, height = _a.height;\n var isEffectiveCrop = left !== 0 || top_1 !== 0 || height !== spec.asset.height || width !== spec.asset.width;\n if (isEffectiveCrop) {\n params.push(\"rect=\".concat(left, \",\").concat(top_1, \",\").concat(width, \",\").concat(height));\n }\n }\n if (spec.bg) {\n params.push(\"bg=\".concat(spec.bg));\n }\n if (spec.focalPoint) {\n params.push(\"fp-x=\".concat(spec.focalPoint.x));\n params.push(\"fp-y=\".concat(spec.focalPoint.y));\n }\n var flip = [spec.flipHorizontal && 'h', spec.flipVertical && 'v'].filter(Boolean).join('');\n if (flip) {\n params.push(\"flip=\".concat(flip));\n }\n // Map from spec name to url param name, and allow using the actual param name as an alternative\n exports.SPEC_NAME_TO_URL_NAME_MAPPINGS.forEach(function (mapping) {\n var specName = mapping[0], param = mapping[1];\n if (typeof spec[specName] !== 'undefined') {\n params.push(\"\".concat(param, \"=\").concat(encodeURIComponent(spec[specName])));\n }\n else if (typeof spec[param] !== 'undefined') {\n params.push(\"\".concat(param, \"=\").concat(encodeURIComponent(spec[param])));\n }\n });\n if (params.length === 0) {\n return baseUrl;\n }\n return \"\".concat(baseUrl, \"?\").concat(params.join('&'));\n}\nfunction fit(source, spec) {\n var cropRect;\n var imgWidth = spec.width;\n var imgHeight = spec.height;\n // If we are not constraining the aspect ratio, we'll just use the whole crop\n if (!(imgWidth && imgHeight)) {\n return { width: imgWidth, height: imgHeight, rect: source.crop };\n }\n var crop = source.crop;\n var hotspot = source.hotspot;\n // If we are here, that means aspect ratio is locked and fitting will be a bit harder\n var desiredAspectRatio = imgWidth / imgHeight;\n var cropAspectRatio = crop.width / crop.height;\n if (cropAspectRatio > desiredAspectRatio) {\n // The crop is wider than the desired aspect ratio. That means we are cutting from the sides\n var height = Math.round(crop.height);\n var width = Math.round(height * desiredAspectRatio);\n var top_2 = Math.max(0, Math.round(crop.top));\n // Center output horizontally over hotspot\n var hotspotXCenter = Math.round((hotspot.right - hotspot.left) / 2 + hotspot.left);\n var left = Math.max(0, Math.round(hotspotXCenter - width / 2));\n // Keep output within crop\n if (left < crop.left) {\n left = crop.left;\n }\n else if (left + width > crop.left + crop.width) {\n left = crop.left + crop.width - width;\n }\n cropRect = { left: left, top: top_2, width: width, height: height };\n }\n else {\n // The crop is taller than the desired ratio, we are cutting from top and bottom\n var width = crop.width;\n var height = Math.round(width / desiredAspectRatio);\n var left = Math.max(0, Math.round(crop.left));\n // Center output vertically over hotspot\n var hotspotYCenter = Math.round((hotspot.bottom - hotspot.top) / 2 + hotspot.top);\n var top_3 = Math.max(0, Math.round(hotspotYCenter - height / 2));\n // Keep output rect within crop\n if (top_3 < crop.top) {\n top_3 = crop.top;\n }\n else if (top_3 + height > crop.top + crop.height) {\n top_3 = crop.top + crop.height - height;\n }\n cropRect = { left: left, top: top_3, width: width, height: height };\n }\n return {\n width: imgWidth,\n height: imgHeight,\n rect: cropRect,\n };\n}\n//# sourceMappingURL=urlForImage.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImageUrlBuilder = void 0;\nvar urlForImage_1 = __importStar(require(\"./urlForImage\"));\nvar validFits = ['clip', 'crop', 'fill', 'fillmax', 'max', 'scale', 'min'];\nvar validCrops = ['top', 'bottom', 'left', 'right', 'center', 'focalpoint', 'entropy'];\nvar validAutoModes = ['format'];\nfunction isSanityModernClientLike(client) {\n return client && 'config' in client ? typeof client.config === 'function' : false;\n}\nfunction isSanityClientLike(client) {\n return client && 'clientConfig' in client ? typeof client.clientConfig === 'object' : false;\n}\nfunction rewriteSpecName(key) {\n var specs = urlForImage_1.SPEC_NAME_TO_URL_NAME_MAPPINGS;\n for (var _i = 0, specs_1 = specs; _i < specs_1.length; _i++) {\n var entry = specs_1[_i];\n var specName = entry[0], param = entry[1];\n if (key === specName || key === param) {\n return specName;\n }\n }\n return key;\n}\nfunction urlBuilder(options) {\n // Did we get a modernish client?\n if (isSanityModernClientLike(options)) {\n // Inherit config from client\n var _a = options.config(), apiUrl = _a.apiHost, projectId = _a.projectId, dataset = _a.dataset;\n var apiHost = apiUrl || 'https://api.sanity.io';\n return new ImageUrlBuilder(null, {\n baseUrl: apiHost.replace(/^https:\\/\\/api\\./, 'https://cdn.'),\n projectId: projectId,\n dataset: dataset,\n });\n }\n // Did we get a SanityClient?\n if (isSanityClientLike(options)) {\n // Inherit config from client\n var _b = options.clientConfig, apiUrl = _b.apiHost, projectId = _b.projectId, dataset = _b.dataset;\n var apiHost = apiUrl || 'https://api.sanity.io';\n return new ImageUrlBuilder(null, {\n baseUrl: apiHost.replace(/^https:\\/\\/api\\./, 'https://cdn.'),\n projectId: projectId,\n dataset: dataset,\n });\n }\n // Or just accept the options as given\n return new ImageUrlBuilder(null, options || {});\n}\nexports.default = urlBuilder;\nvar ImageUrlBuilder = /** @class */ (function () {\n function ImageUrlBuilder(parent, options) {\n this.options = parent\n ? __assign(__assign({}, (parent.options || {})), (options || {})) : __assign({}, (options || {})); // Copy options\n }\n ImageUrlBuilder.prototype.withOptions = function (options) {\n var baseUrl = options.baseUrl || this.options.baseUrl;\n var newOptions = { baseUrl: baseUrl };\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n var specKey = rewriteSpecName(key);\n newOptions[specKey] = options[key];\n }\n }\n return new ImageUrlBuilder(this, __assign({ baseUrl: baseUrl }, newOptions));\n };\n // The image to be represented. Accepts a Sanity 'image'-document, 'asset'-document or\n // _id of asset. To get the benefit of automatic hot-spot/crop integration with the content\n // studio, the 'image'-document must be provided.\n ImageUrlBuilder.prototype.image = function (source) {\n return this.withOptions({ source: source });\n };\n // Specify the dataset\n ImageUrlBuilder.prototype.dataset = function (dataset) {\n return this.withOptions({ dataset: dataset });\n };\n // Specify the projectId\n ImageUrlBuilder.prototype.projectId = function (projectId) {\n return this.withOptions({ projectId: projectId });\n };\n // Specify background color\n ImageUrlBuilder.prototype.bg = function (bg) {\n return this.withOptions({ bg: bg });\n };\n // Set DPR scaling factor\n ImageUrlBuilder.prototype.dpr = function (dpr) {\n // A DPR of 1 is the default - so only include it if we have a different value\n return this.withOptions(dpr && dpr !== 1 ? { dpr: dpr } : {});\n };\n // Specify the width of the image in pixels\n ImageUrlBuilder.prototype.width = function (width) {\n return this.withOptions({ width: width });\n };\n // Specify the height of the image in pixels\n ImageUrlBuilder.prototype.height = function (height) {\n return this.withOptions({ height: height });\n };\n // Specify focal point in fraction of image dimensions. Each component 0.0-1.0\n ImageUrlBuilder.prototype.focalPoint = function (x, y) {\n return this.withOptions({ focalPoint: { x: x, y: y } });\n };\n ImageUrlBuilder.prototype.maxWidth = function (maxWidth) {\n return this.withOptions({ maxWidth: maxWidth });\n };\n ImageUrlBuilder.prototype.minWidth = function (minWidth) {\n return this.withOptions({ minWidth: minWidth });\n };\n ImageUrlBuilder.prototype.maxHeight = function (maxHeight) {\n return this.withOptions({ maxHeight: maxHeight });\n };\n ImageUrlBuilder.prototype.minHeight = function (minHeight) {\n return this.withOptions({ minHeight: minHeight });\n };\n // Specify width and height in pixels\n ImageUrlBuilder.prototype.size = function (width, height) {\n return this.withOptions({ width: width, height: height });\n };\n // Specify blur between 0 and 100\n ImageUrlBuilder.prototype.blur = function (blur) {\n return this.withOptions({ blur: blur });\n };\n ImageUrlBuilder.prototype.sharpen = function (sharpen) {\n return this.withOptions({ sharpen: sharpen });\n };\n // Specify the desired rectangle of the image\n ImageUrlBuilder.prototype.rect = function (left, top, width, height) {\n return this.withOptions({ rect: { left: left, top: top, width: width, height: height } });\n };\n // Specify the image format of the image. 'jpg', 'pjpg', 'png', 'webp'\n ImageUrlBuilder.prototype.format = function (format) {\n return this.withOptions({ format: format });\n };\n ImageUrlBuilder.prototype.invert = function (invert) {\n return this.withOptions({ invert: invert });\n };\n // Rotation in degrees 0, 90, 180, 270\n ImageUrlBuilder.prototype.orientation = function (orientation) {\n return this.withOptions({ orientation: orientation });\n };\n // Compression quality 0-100\n ImageUrlBuilder.prototype.quality = function (quality) {\n return this.withOptions({ quality: quality });\n };\n // Make it a download link. Parameter is default filename.\n ImageUrlBuilder.prototype.forceDownload = function (download) {\n return this.withOptions({ download: download });\n };\n // Flip image horizontally\n ImageUrlBuilder.prototype.flipHorizontal = function () {\n return this.withOptions({ flipHorizontal: true });\n };\n // Flip image vertically\n ImageUrlBuilder.prototype.flipVertical = function () {\n return this.withOptions({ flipVertical: true });\n };\n // Ignore crop/hotspot from image record, even when present\n ImageUrlBuilder.prototype.ignoreImageParams = function () {\n return this.withOptions({ ignoreImageParams: true });\n };\n ImageUrlBuilder.prototype.fit = function (value) {\n if (validFits.indexOf(value) === -1) {\n throw new Error(\"Invalid fit mode \\\"\".concat(value, \"\\\"\"));\n }\n return this.withOptions({ fit: value });\n };\n ImageUrlBuilder.prototype.crop = function (value) {\n if (validCrops.indexOf(value) === -1) {\n throw new Error(\"Invalid crop mode \\\"\".concat(value, \"\\\"\"));\n }\n return this.withOptions({ crop: value });\n };\n // Saturation\n ImageUrlBuilder.prototype.saturation = function (saturation) {\n return this.withOptions({ saturation: saturation });\n };\n ImageUrlBuilder.prototype.auto = function (value) {\n if (validAutoModes.indexOf(value) === -1) {\n throw new Error(\"Invalid auto mode \\\"\".concat(value, \"\\\"\"));\n }\n return this.withOptions({ auto: value });\n };\n // Specify the number of pixels to pad the image\n ImageUrlBuilder.prototype.pad = function (pad) {\n return this.withOptions({ pad: pad });\n };\n // Vanity URL for more SEO friendly URLs\n ImageUrlBuilder.prototype.vanityName = function (value) {\n return this.withOptions({ vanityName: value });\n };\n ImageUrlBuilder.prototype.frame = function (frame) {\n if (frame !== 1) {\n throw new Error(\"Invalid frame value \\\"\".concat(frame, \"\\\"\"));\n }\n return this.withOptions({ frame: frame });\n };\n // Gets the url based on the submitted parameters\n ImageUrlBuilder.prototype.url = function () {\n return (0, urlForImage_1.default)(this.options);\n };\n // Alias for url()\n ImageUrlBuilder.prototype.toString = function () {\n return this.url();\n };\n return ImageUrlBuilder;\n}());\nexports.ImageUrlBuilder = ImageUrlBuilder;\n//# sourceMappingURL=builder.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar builder_1 = __importDefault(require(\"./builder\"));\nmodule.exports = builder_1.default;\n//# sourceMappingURL=index.js.map","import createImageUrlBuilder from '@sanity/image-url'\nimport {useMemo} from 'react'\nimport type {ImageUrlBuilder, SourceClientOptions} from 'sanity'\nimport {useClient} from 'sanity'\n\nexport function useImageUrlBuilder(\n clientOptions: SourceClientOptions\n): ImageUrlBuilder | null {\n const client = useClient(clientOptions)\n const builder = useMemo(() => createImageUrlBuilder(client), [client])\n\n return builder\n}\n","import type {SanityImageSource} from '@sanity/asset-utils'\nimport {useMemo} from 'react'\nimport type {ImageUrlBuilder, SourceClientOptions} from 'sanity'\n\nimport {useImageUrlBuilder} from './useImageUrlBuilder'\n\nexport function useImageUrlBuilderImage(\n source: SanityImageSource,\n clientOptions: SourceClientOptions\n): ImageUrlBuilder | null {\n const builder = useImageUrlBuilder(clientOptions)\n const image = useMemo(\n () => (source && builder ? builder.image(source) : null),\n [builder, source]\n )\n\n return image\n}\n","import {useEffect, useMemo, useRef, useState} from 'react'\nimport isEqual from 'react-fast-compare'\nimport {Subscription} from 'rxjs'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport {ListenQueryOptions, ListenQueryParams, useDocumentStore} from 'sanity'\n\ntype Value = unknown\n\ninterface Config<V> {\n params?: ListenQueryParams\n options?: ListenQueryOptions\n initialValue?: null | V\n}\n\n// make generic optional\ninterface Return<V = Value> {\n loading: boolean\n error: boolean | unknown | ProgressEvent\n data: unknown | V\n initialValue?: Value\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2023-05-01`}\nconst DEFAULT_INITIAL_VALUE = null\n\nfunction useParams(\n params?: undefined | null | ListenQueryParams | ListenQueryOptions\n): ListenQueryParams {\n const stringifiedParams = useMemo(\n () => JSON.stringify(params || {}),\n [params]\n )\n return useMemo(() => JSON.parse(stringifiedParams), [stringifiedParams])\n}\n\nexport function useListeningQuery<V>(\n query: string | {fetch: string; listen: string},\n {\n params = DEFAULT_PARAMS,\n options = DEFAULT_OPTIONS,\n initialValue = DEFAULT_INITIAL_VALUE,\n }: Config<V>\n): Return<V> {\n const [loading, setLoading] = useState<Return['loading']>(true)\n const [error, setError] = useState<Return['error']>(false)\n const [data, setData] = useState<Return['data']>(initialValue)\n const memoParams = useParams(params)\n const memoOptions = useParams(options)\n\n const subscription = useRef<null | Subscription>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query && !error && !subscription.current) {\n try {\n subscription.current = documentStore\n .listenQuery(query, memoParams, memoOptions)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents) => {\n setData((current: Value) =>\n isEqual(current, documents) ? current : documents\n )\n setLoading(false)\n setError(false)\n })\n } catch (err) {\n console.error(err)\n setLoading(false)\n setError(err)\n }\n }\n\n // Unsubscribe when an error occurs\n if (error && subscription.current) {\n subscription.current.unsubscribe()\n }\n\n return () => {\n if (subscription.current) {\n subscription?.current?.unsubscribe()\n subscription.current = null\n }\n }\n }, [query, error, memoParams, memoOptions, documentStore])\n\n return {data, loading, error}\n}\n","import {useCallback, useContext} from 'react'\nimport {RouterContext} from 'sanity/router'\nimport {usePaneRouter} from 'sanity/structure'\n\nexport function useOpenInNewPane(id?: string, type?: string) {\n const routerContext = useContext(RouterContext)\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = useCallback(() => {\n if (!routerContext || !id || !type) {\n return\n }\n\n const panes = [...routerPanesState]\n panes.splice(groupIndex + 1, 0, [\n {\n id: id,\n params: {type},\n },\n ])\n\n const href = routerContext.resolvePathFromState({panes})\n routerContext.navigateUrl({path: href})\n }, [id, type, routerContext, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import {useEffect, useState} from 'react'\nimport {useClient, useWorkspace} from 'sanity'\n\nexport type UserExtended = {\n createdAt: string\n displayName: string\n email: string\n familyName: string\n givenName: string\n id: string\n imageUrl: string\n isCurrentUser: boolean\n middleName: string\n projectId: string\n provider: string\n sanityUserId: string\n updatedAt: string\n}\n\ntype UserRole = {\n name: string\n title: string\n}\n\ntype UserResponse = {\n isRobot: boolean\n projectUserId: string\n roles: UserRole[]\n}\n\ntype HookConfig = {\n apiVersion?: string\n}\n\nfunction chunkArray<T>(array: T[], size: number): T[][] {\n const chunks: T[][] = []\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size))\n }\n return chunks\n}\n\n// Custom hook to fetch user details and roles in batches\nexport function useProjectUsers({apiVersion}: HookConfig): UserExtended[] {\n const {currentUser} = useWorkspace()\n const client = useClient({apiVersion: apiVersion ?? '2023-01-01'})\n const [users, setUsers] = useState<UserExtended[]>([])\n\n useEffect(() => {\n const {projectId} = client.config()\n\n async function getUsersWithRoles() {\n try {\n const aclData = await client.request({\n url: `/projects/${projectId}/acl`,\n })\n\n const userIds = aclData.map((user: UserResponse) => user.projectUserId)\n\n const userIdChunks = chunkArray(userIds, 200)\n\n let usersData: UserExtended[] = []\n\n // Fetch users in batches of 200\n for (const chunk of userIdChunks) {\n const chunkedUserIds = chunk.join(',')\n const response = await client.request({\n url: `/projects/${projectId}/users/${chunkedUserIds}`,\n })\n usersData = [...usersData, ...response]\n }\n\n // Combine user details with roles\n const usersWithRoles = usersData.map((user: UserExtended) => {\n const userRoles =\n aclData.find(\n (aclUser: UserResponse) => aclUser.projectUserId === user.id\n )?.roles || []\n\n return {\n ...user,\n isCurrentUser: user.id === currentUser?.id,\n roles: userRoles,\n }\n })\n\n setUsers(usersWithRoles)\n } catch (err) {\n console.error('Failed to fetch users:', err)\n }\n }\n\n if (!users.length) {\n getUsersWithRoles()\n }\n }, [client, currentUser?.id, users.length])\n\n return users\n}\n"],"names":["parseAssetId_1","parseAssetId","this","parseSource_1","parseSource","exports","require$$0","require$$1","urlForImage","ImageUrlBuilder","builder"],"mappings":"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","x_google_ignoreList":[3,4,5,6,7]}