@sanity/dashboard 3.1.3 → 3.1.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/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  Sanity Dashboard
2
2
 
3
3
  > This is a **Sanity Studio v3** plugin.
4
- > For the v2 version, please refer to the [v2-branch](https://github.com/sanity-io/sanity/tree/next/packages/%40sanity/dashboard).
4
+ > For the v2 version, please refer to the [v2-branch](https://github.com/sanity-io/dashboard/tree/studio-v2).
5
5
 
6
6
  ## What is it?
7
7
 
package/lib/index.esm.js CHANGED
@@ -1,10 +1,3 @@
1
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20;
2
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
6
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
8
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
9
2
  import { forwardRef, createContext, useContext, useMemo, createElement, useState, useEffect, useCallback } from 'react';
10
3
  import { Card, Box, Heading, Button, Stack, Label, Grid, Text, Code, Spinner, Flex, Container } from '@sanity/ui';
@@ -14,10 +7,16 @@ import { from } from 'rxjs';
14
7
  import { switchMap, map } from 'rxjs/operators';
15
8
  import { RobotIcon, PlayIcon } from '@sanity/icons';
16
9
  import imageUrlBuilder from '@sanity/image-url';
17
- const Root$2 = styled(Card)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n box-sizing: border-box;\n position: relative;\n"])));
18
- const Header = styled(Card)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: sticky;\n top: 0;\n z-index: 2;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n"])));
19
- const Footer = styled(Card)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n position: sticky;\n overflow: hidden;\n bottom: 0;\n z-index: 2;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n margin-top: auto;\n"])));
20
- const Content = styled(Box)(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: relative;\n z-index: 1;\n height: stretch;\n min-height: 21.5em;\n\n @media (min-width: ", "px) {\n overflow-y: auto;\n outline: none;\n }\n"])), _ref => {
10
+ var __freeze$3 = Object.freeze;
11
+ var __defProp$3 = Object.defineProperty;
12
+ var __template$3 = (cooked, raw) => __freeze$3(__defProp$3(cooked, "raw", {
13
+ value: __freeze$3(raw || cooked.slice())
14
+ }));
15
+ var _a$3, _b$2, _c$2, _d$2;
16
+ const Root$2 = styled(Card)(_a$3 || (_a$3 = __template$3(["\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n box-sizing: border-box;\n position: relative;\n"])));
17
+ const Header = styled(Card)(_b$2 || (_b$2 = __template$3(["\n position: sticky;\n top: 0;\n z-index: 2;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n"])));
18
+ const Footer = styled(Card)(_c$2 || (_c$2 = __template$3(["\n position: sticky;\n overflow: hidden;\n bottom: 0;\n z-index: 2;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n margin-top: auto;\n"])));
19
+ const Content = styled(Box)(_d$2 || (_d$2 = __template$3(["\n position: relative;\n z-index: 1;\n height: stretch;\n min-height: 21.5em;\n\n @media (min-width: ", "px) {\n overflow-y: auto;\n outline: none;\n }\n"])), _ref => {
21
20
  let {
22
21
  theme
23
22
  } = _ref;
@@ -63,7 +62,10 @@ function useDashboardConfig() {
63
62
  }
64
63
  function WidgetContainer(props) {
65
64
  const config = useDashboardConfig();
66
- const layout = useMemo(() => _objectSpread(_objectSpread({}, props.layout || {}), config.layout || {}), [props.layout, config.layout]);
65
+ const layout = useMemo(() => ({
66
+ ...(props.layout || {}),
67
+ ...(config.layout || {})
68
+ }), [props.layout, config.layout]);
67
69
  return /* @__PURE__ */jsx(Card, {
68
70
  shadow: 1,
69
71
  "data-width": layout.width,
@@ -185,7 +187,9 @@ function ProjectInfo(props) {
185
187
  return result;
186
188
  }, [graphqlApi, studioHost, projectId, dataset, data]);
187
189
  return /* @__PURE__ */jsxs(Fragment, {
188
- children: [__experimental_before.map((widgetConfig, idx) => /* @__PURE__ */jsx(WidgetContainer, _objectSpread({}, widgetConfig), idx)), /* @__PURE__ */jsx(Box, {
190
+ children: [__experimental_before.map((widgetConfig, idx) => /* @__PURE__ */jsx(WidgetContainer, {
191
+ ...widgetConfig
192
+ }, idx)), /* @__PURE__ */jsx(Box, {
189
193
  height: "fill",
190
194
  marginTop: (__experimental_before == null ? void 0 : __experimental_before.length) > 0 ? 4 : 0,
191
195
  children: /* @__PURE__ */jsx(DashboardWidgetContainer, {
@@ -290,7 +294,13 @@ function projectInfoWidget(config) {
290
294
  }
291
295
  };
292
296
  }
293
- const AvatarWrapper = styled(Card)(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n"])));
297
+ var __freeze$2 = Object.freeze;
298
+ var __defProp$2 = Object.defineProperty;
299
+ var __template$2 = (cooked, raw) => __freeze$2(__defProp$2(cooked, "raw", {
300
+ value: __freeze$2(raw || cooked.slice())
301
+ }));
302
+ var _a$2;
303
+ const AvatarWrapper = styled(Card)(_a$2 || (_a$2 = __template$2(["\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n"])));
294
304
  function getInviteUrl(projectId) {
295
305
  return "https://manage.sanity.io/projects/".concat(projectId, "/team/invite");
296
306
  }
@@ -422,15 +432,21 @@ function projectUsersWidget(config) {
422
432
  layout: config == null ? void 0 : config.layout
423
433
  };
424
434
  }
425
- const PlayIconBox = styled(Box)(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2.75em;\n height: 2.75em;\n border-radius: 50%;\n background: ", ";\n opacity: 0.75;\n }\n"])), _ref3 => {
435
+ var __freeze$1 = Object.freeze;
436
+ var __defProp$1 = Object.defineProperty;
437
+ var __template$1 = (cooked, raw) => __freeze$1(__defProp$1(cooked, "raw", {
438
+ value: __freeze$1(raw || cooked.slice())
439
+ }));
440
+ var _a$1, _b$1, _c$1, _d$1;
441
+ const PlayIconBox = styled(Box)(_a$1 || (_a$1 = __template$1(["\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2.75em;\n height: 2.75em;\n border-radius: 50%;\n background: ", ";\n opacity: 0.75;\n }\n"])), _ref3 => {
426
442
  let {
427
443
  theme
428
444
  } = _ref3;
429
445
  return theme.sanity.color.card.enabled.bg;
430
446
  });
431
- const Root$1 = styled(Flex)(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n &:hover {\n ", " {\n &:before {\n opacity: 1;\n }\n }\n }\n"])), PlayIconBox);
432
- const PosterCard = styled(Card)(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n width: 100%;\n padding-bottom: calc(9 / 16 * 100%);\n position: relative;\n"])));
433
- const Poster = styled.img(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n\n &:not([src]) {\n display: none;\n }\n"])));
447
+ const Root$1 = styled(Flex)(_b$1 || (_b$1 = __template$1(["\n &:hover {\n ", " {\n &:before {\n opacity: 1;\n }\n }\n }\n"])), PlayIconBox);
448
+ const PosterCard = styled(Card)(_c$1 || (_c$1 = __template$1(["\n width: 100%;\n padding-bottom: calc(9 / 16 * 100%);\n position: relative;\n"])));
449
+ const Poster = styled.img(_d$1 || (_d$1 = __template$1(["\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n\n &:not([src]) {\n display: none;\n }\n"])));
434
450
  function Tutorial(props) {
435
451
  const {
436
452
  title,
@@ -606,9 +622,15 @@ function DashboardLayout(props) {
606
622
  children: props.children
607
623
  });
608
624
  }
625
+ var __freeze = Object.freeze;
626
+ var __defProp = Object.defineProperty;
627
+ var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", {
628
+ value: __freeze(raw || cooked.slice())
629
+ }));
630
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
609
631
  const media = {
610
632
  small: function () {
611
- return css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n @media (min-width: ", "px) {\n ", "\n }\n "])), _ref4 => {
633
+ return css(_a || (_a = __template(["\n @media (min-width: ", "px) {\n ", "\n }\n "])), _ref4 => {
612
634
  let {
613
635
  theme
614
636
  } = _ref4;
@@ -616,7 +638,7 @@ const media = {
616
638
  }, css(...arguments));
617
639
  },
618
640
  medium: function () {
619
- return css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n @media (min-width: ", "px) {\n ", "\n }\n "])), _ref5 => {
641
+ return css(_b || (_b = __template(["\n @media (min-width: ", "px) {\n ", "\n }\n "])), _ref5 => {
620
642
  let {
621
643
  theme
622
644
  } = _ref5;
@@ -624,7 +646,7 @@ const media = {
624
646
  }, css(...arguments));
625
647
  }
626
648
  };
627
- const Root = styled(Grid)(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n & > div {\n overflow: hidden;\n }\n\n & > div[data-width='medium'] {\n ", "\n }\n\n & > div[data-width='large'] {\n ", "\n\n ", "\n }\n\n & > div[data-width='full'] {\n ", "\n }\n\n & > div[data-height='medium'] {\n ", "\n }\n\n & > div[data-height='large'] {\n ", "\n\n ", "\n }\n\n & > div[data-height='full'] {\n ", "\n }\n"])), media.small(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n grid-column: span 2;\n "]))), media.small(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n grid-column: span 2;\n "]))), media.medium(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n grid-column: span 3;\n "]))), media.small(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n grid-column: 1 / -1;\n "]))), media.small(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n grid-row: span 2;\n "]))), media.small(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n grid-row: span 2;\n "]))), media.medium(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n grid-row: span 3;\n "]))), media.medium(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n grid-row: 1 / -1;\n "]))));
649
+ const Root = styled(Grid)(_k || (_k = __template(["\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n & > div {\n overflow: hidden;\n }\n\n & > div[data-width='medium'] {\n ", "\n }\n\n & > div[data-width='large'] {\n ", "\n\n ", "\n }\n\n & > div[data-width='full'] {\n ", "\n }\n\n & > div[data-height='medium'] {\n ", "\n }\n\n & > div[data-height='large'] {\n ", "\n\n ", "\n }\n\n & > div[data-height='full'] {\n ", "\n }\n"])), media.small(_c || (_c = __template(["\n grid-column: span 2;\n "]))), media.small(_d || (_d = __template(["\n grid-column: span 2;\n "]))), media.medium(_e || (_e = __template(["\n grid-column: span 3;\n "]))), media.small(_f || (_f = __template(["\n grid-column: 1 / -1;\n "]))), media.small(_g || (_g = __template(["\n grid-row: span 2;\n "]))), media.small(_h || (_h = __template(["\n grid-row: span 2;\n "]))), media.medium(_i || (_i = __template(["\n grid-row: span 3;\n "]))), media.medium(_j || (_j = __template(["\n grid-row: 1 / -1;\n "]))));
628
650
  const NO_WIDGETS = [];
629
651
  const NO_LAYOUT = {};
630
652
  function WidgetGroup(props) {
@@ -654,7 +676,9 @@ function WidgetGroup(props) {
654
676
  }, index);
655
677
  }
656
678
  if (widgetConfig.component) {
657
- return /* @__PURE__ */jsx(WidgetContainer, _objectSpread({}, widgetConfig), index);
679
+ return /* @__PURE__ */jsx(WidgetContainer, {
680
+ ...widgetConfig
681
+ }, index);
658
682
  }
659
683
  return /* @__PURE__ */jsxs(Box, {
660
684
  children: [widgetConfig.name, " is missing widget component"]
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/components/DashboardWidgetContainer.tsx","../src/versionedClient.ts","../src/containers/DashboardContext.tsx","../src/containers/WidgetContainer.tsx","../src/widgets/projectInfo/ProjectInfo.tsx","../src/widgets/projectInfo/index.ts","../src/widgets/projectUsers/ProjectUsers.tsx","../src/widgets/projectUsers/index.ts","../src/widgets/sanityTutorials/Tutorial.tsx","../src/widgets/sanityTutorials/dataAdapter.ts","../src/widgets/sanityTutorials/SanityTutorials.tsx","../src/widgets/sanityTutorials/index.ts","../src/components/DashboardLayout.tsx","../src/components/WidgetGroup.tsx","../src/containers/Dashboard.tsx","../src/plugin.tsx"],"sourcesContent":["import React, {forwardRef} from 'react'\nimport {Card, Box, Heading} from '@sanity/ui'\nimport styled from 'styled-components'\n\nconst Root = styled(Card)`\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n box-sizing: border-box;\n position: relative;\n`\n\nconst Header = styled(Card)`\n position: sticky;\n top: 0;\n z-index: 2;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n`\n\nconst Footer = styled(Card)`\n position: sticky;\n overflow: hidden;\n bottom: 0;\n z-index: 2;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n margin-top: auto;\n`\n\nconst Content = styled(Box)`\n position: relative;\n z-index: 1;\n height: stretch;\n min-height: 21.5em;\n\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n overflow-y: auto;\n outline: none;\n }\n`\n\ninterface DashboardWidgetProps {\n header?: string\n children: React.ReactNode\n footer?: React.ReactNode\n}\n\nexport const DashboardWidgetContainer = forwardRef(function DashboardWidgetContainer(\n props: DashboardWidgetProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const {header, children, footer} = props\n\n return (\n <Root radius={3} display=\"flex\" ref={ref}>\n {header && (\n <Header borderBottom paddingX={3} paddingY={4}>\n <Heading size={1} textOverflow=\"ellipsis\">\n {header}\n </Heading>\n </Header>\n )}\n {children && <Content>{children}</Content>}\n {footer && <Footer borderTop>{footer}</Footer>}\n </Root>\n )\n})\n","import {useClient} from 'sanity'\n\nexport function useVersionedClient() {\n return useClient({apiVersion: '1'})\n}\n","import {createContext, useContext} from 'react'\nimport {DashboardConfig} from '../types'\n\nexport const DashboardContext = createContext<DashboardConfig>({widgets: []})\n\nexport function useDashboardConfig(): DashboardConfig {\n return useContext(DashboardContext)\n}\n","import React, {createElement, useMemo} from 'react'\nimport {useDashboardConfig} from './DashboardContext'\nimport {Card} from '@sanity/ui'\nimport {DashboardWidget} from '../types'\n\nexport function WidgetContainer(props: DashboardWidget) {\n const config = useDashboardConfig()\n const layout = useMemo(\n () => ({\n ...(props.layout || {}),\n ...(config.layout || {}),\n }),\n [props.layout, config.layout]\n )\n\n return (\n <Card shadow={1} data-width={layout.width} data-height={layout.height}>\n {createElement(props.component, {})}\n </Card>\n )\n}\n","import React, {useEffect, useMemo, useState} from 'react'\nimport {Box, Card, Stack, Heading, Grid, Label, Text, Code, Button} from '@sanity/ui'\nimport {useVersionedClient} from '../../versionedClient'\nimport {Subscription} from 'rxjs'\nimport {WidgetContainer} from '../../containers/WidgetContainer'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {DashboardWidget} from '../../types'\n\nexport interface ProjectInfoProps {\n __experimental_before?: DashboardWidget[]\n data: ProjectData[]\n}\n\ninterface App {\n title: string\n rows?: App[]\n value?: string | {error: string}\n}\n\ninterface ProjectData {\n title: string\n category?: string\n}\n\nfunction isUrl(url?: string) {\n return url && /^https?:\\/\\//.test(`${url}`)\n}\n\nfunction getGraphQlUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/graphql/${dataset}/default`\n}\n\nfunction getGroqUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/groq/${dataset}`\n}\n\nfunction getManageUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}`\n}\n\nconst NO_EXPERIMENTAL: DashboardWidget[] = []\nconst NO_DATA: ProjectData[] = []\n\nexport function ProjectInfo(props: ProjectInfoProps) {\n const {__experimental_before = NO_EXPERIMENTAL, data = NO_DATA} = props\n const [studioHost, setStudioHost] = useState<string | {error: string} | undefined>()\n const [graphqlApi, setGraphQlApi] = useState<string | {error: string} | undefined>()\n const versionedClient = useVersionedClient()\n const {projectId = 'unknown', dataset = 'unknown'} = versionedClient.config()\n\n useEffect(() => {\n const subscriptions: Subscription[] = []\n\n subscriptions.push(\n versionedClient.observable\n .request<{studioHost: string}>({uri: `/projects/${projectId}`})\n .subscribe({\n next: (result) => {\n const {studioHost: host} = result\n setStudioHost(host ? `https://${host}.sanity.studio` : undefined)\n },\n error: (error) => {\n console.error('Error while looking for studioHost', error)\n setStudioHost({\n error: 'Something went wrong while looking up studioHost. See console.',\n })\n },\n })\n )\n\n // ping assumed graphql endpoint\n subscriptions.push(\n versionedClient.observable\n .request({\n method: 'HEAD',\n uri: `/graphql/${dataset}/default`,\n })\n .subscribe({\n next: () => setGraphQlApi(getGraphQlUrl(projectId, dataset)),\n error: (error) => {\n if (error.statusCode === 404) {\n setGraphQlApi(undefined)\n } else {\n console.error('Error while looking for graphqlApi', error)\n setGraphQlApi({\n error: 'Something went wrong while looking up graphqlApi. See console.',\n })\n }\n },\n })\n )\n\n return () => {\n subscriptions.forEach((s) => s.unsubscribe())\n }\n }, [dataset, projectId, versionedClient, setGraphQlApi, setStudioHost])\n\n const assembleTableRows = useMemo(() => {\n let result: App[] = [\n {\n title: 'Sanity project',\n rows: [\n {title: 'Project ID', value: projectId},\n {title: 'Dataset', value: dataset},\n ],\n },\n ]\n\n // Handle any apps\n const apps: App[] = [\n studioHost ? {title: 'Studio', value: studioHost} : null,\n ...data.filter((item) => item.category === 'apps'),\n ].filter((a): a is App => !!a)\n if (apps.length > 0) {\n result = result.concat([{title: 'Apps', rows: apps}])\n }\n\n // Handle APIs\n result = result.concat(\n [\n {\n title: 'APIs',\n rows: [\n {title: 'GROQ', value: getGroqUrl(projectId, dataset)},\n {\n title: 'GraphQL',\n value: (typeof graphqlApi === 'object' ? 'Error' : graphqlApi) ?? 'Not deployed',\n },\n ],\n },\n ],\n data.filter((item) => item.category === 'apis')\n )\n\n // Handle whatever else there might be\n const otherStuff: Record<string, ProjectData[]> = {}\n data.forEach((item) => {\n if (item.category && item.category !== 'apps' && item.category !== 'apis') {\n if (!otherStuff[item.category]) {\n otherStuff[item.category] = []\n }\n otherStuff[item.category].push(item)\n }\n })\n Object.keys(otherStuff).forEach((category) => {\n result.push({title: category, rows: otherStuff[category]})\n })\n\n return result\n }, [graphqlApi, studioHost, projectId, dataset, data])\n\n return (\n <>\n {__experimental_before.map((widgetConfig, idx) => (\n <WidgetContainer key={idx} {...widgetConfig} />\n ))}\n <Box height=\"fill\" marginTop={__experimental_before?.length > 0 ? 4 : 0}>\n <DashboardWidgetContainer\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Manage project\"\n as=\"a\"\n href={getManageUrl(projectId)}\n />\n }\n >\n <Card\n paddingY={4}\n radius={2}\n role=\"table\"\n aria-label=\"Project info\"\n aria-describedby=\"project_info_table\"\n >\n <Stack space={4}>\n <Box paddingX={3} as=\"header\">\n <Heading size={1} as=\"h2\" id=\"project_info_table\">\n Project info\n </Heading>\n </Box>\n {assembleTableRows.map((item) => {\n if (!item || !item.rows) {\n return null\n }\n\n return (\n <Stack key={item.title} space={3}>\n <Card borderBottom padding={3}>\n <Label size={0} muted role=\"columnheader\">\n {item.title}\n </Label>\n </Card>\n <Stack space={4} paddingX={3} role=\"rowgroup\">\n {item.rows.map((row) => {\n return (\n <Grid key={row.title} columns={2} role=\"row\">\n <Text weight=\"medium\" role=\"rowheader\">\n {row.title}\n </Text>\n {typeof row.value === 'object' && (\n <Text size={1}>{row.value?.error}</Text>\n )}\n {typeof row.value === 'string' && (\n <>\n {isUrl(row.value) ? (\n <Text size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n <a href={row.value}>{row.value}</a>\n </Text>\n ) : (\n <Code size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n {row.value}\n </Code>\n )}\n </>\n )}\n </Grid>\n )\n })}\n </Stack>\n </Stack>\n )\n })}\n </Stack>\n </Card>\n </DashboardWidgetContainer>\n </Box>\n </>\n )\n}\n","import {ProjectInfo} from './ProjectInfo'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function projectInfoWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectInfo,\n layout: config?.layout ?? {width: 'medium'},\n }\n}\n","import React, {useCallback, useEffect, useState} from 'react'\nimport {from} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\nimport {Stack, Spinner, Card, Box, Text, Button} from '@sanity/ui'\nimport {RobotIcon} from '@sanity/icons'\nimport styled from 'styled-components'\nimport {DefaultPreview, useUserStore} from 'sanity'\nimport {useVersionedClient} from '../../versionedClient'\nimport {User} from 'sanity'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\n\nconst AvatarWrapper = styled(Card)`\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n`\n\nfunction getInviteUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}/team/invite`\n}\n\ninterface Member {\n id: string\n role: string\n isRobot: boolean\n}\n\ninterface Project {\n id: string\n members: Member[]\n}\n\nexport function ProjectUsers() {\n const [project, setProject] = useState<Project | undefined>()\n const [users, setUsers] = useState<User[] | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const userStore = useUserStore()\n const versionedClient = useVersionedClient()\n\n const fetchData = useCallback(() => {\n const {projectId} = versionedClient.config()\n const subscription = versionedClient.observable\n .request<Project>({\n uri: `/projects/${projectId}`,\n })\n .pipe(\n switchMap((_project) =>\n from(userStore.getUsers(_project.members.map((mem) => mem.id))).pipe(\n map((_users) => ({project: _project, users: _users}))\n )\n )\n )\n .subscribe({\n next: ({users: _users, project: _project}) => {\n setProject(_project)\n setUsers(\n (Array.isArray(_users) ? _users : [_users]).sort((userA, userB) =>\n sortUsersByRobotStatus(userA, userB, _project)\n )\n )\n },\n error: (e: Error) => setError(e),\n })\n\n return () => subscription.unsubscribe()\n }, [userStore, versionedClient])\n\n useEffect(() => fetchData(), [fetchData])\n\n const handleRetryFetch = useCallback(() => fetchData(), [fetchData])\n\n const isLoading = !users || !project\n\n if (error) {\n return (\n <DashboardWidgetContainer header=\"Project users\">\n <Box padding={4}>\n <Text>\n Something went wrong while fetching data. You could{' '}\n <a onClick={handleRetryFetch} title=\"Retry users fetch\" style={{cursor: 'pointer'}}>\n retry\n </a>\n ..?\n </Text>\n </Box>\n </DashboardWidgetContainer>\n )\n }\n\n return (\n <DashboardWidgetContainer\n header=\"Project users\"\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Invite members\"\n as=\"a\"\n loading={isLoading}\n href={isLoading ? undefined : getInviteUrl(project.id)}\n />\n }\n >\n {isLoading && (\n <Box paddingY={5} paddingX={2}>\n <Stack space={4}>\n <Text align=\"center\" muted size={1}>\n <Spinner />\n </Text>\n <Text align=\"center\" size={1} muted>\n Loading items...\n </Text>\n </Stack>\n </Box>\n )}\n\n {!isLoading && (\n <Stack space={3} padding={3}>\n {users?.map((user) => {\n const membership = project.members.find((member) => member.id === user.id)\n const media = membership?.isRobot ? (\n <Text size={3}>\n <RobotIcon />\n </Text>\n ) : (\n <AvatarWrapper tone=\"transparent\">\n {user?.imageUrl && <img src={user.imageUrl} alt={user?.displayName} />}\n </AvatarWrapper>\n )\n return (\n <Box key={user.id}>\n <DefaultPreview\n title={user.displayName}\n subtitle={membership?.role}\n media={media}\n />\n </Box>\n )\n })}\n </Stack>\n )}\n </DashboardWidgetContainer>\n )\n}\n\nfunction sortUsersByRobotStatus(userA: User, userB: User, project: Project) {\n const {members} = project\n const membershipA = members.find((member) => member.id === userA?.id)\n const membershipB = members.find((member) => member.id === userB?.id)\n if (membershipA?.isRobot) {\n return 1\n }\n if (membershipB?.isRobot) {\n return -1\n }\n return 0\n}\n","import {ProjectUsers} from './ProjectUsers'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function projectUsersWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectUsers,\n layout: config?.layout,\n }\n}\n","import React from 'react'\nimport {Card, Box, Heading, Flex, Text, Stack} from '@sanity/ui'\nimport {PlayIcon} from '@sanity/icons'\nimport styled from 'styled-components'\n\nconst PlayIconBox = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2.75em;\n height: 2.75em;\n border-radius: 50%;\n background: ${({theme}) => theme.sanity.color.card.enabled.bg};\n opacity: 0.75;\n }\n`\n\nconst Root = styled(Flex)`\n &:hover {\n ${PlayIconBox} {\n &:before {\n opacity: 1;\n }\n }\n }\n`\n\nconst PosterCard = styled(Card)`\n width: 100%;\n padding-bottom: calc(9 / 16 * 100%);\n position: relative;\n`\n\nconst Poster = styled.img`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n\n &:not([src]) {\n display: none;\n }\n`\n\nexport interface TutorialProps {\n title: string\n posterURL?: string\n href: string\n showPlayIcon?: boolean\n presenterName?: string\n presenterSubtitle?: string\n}\n\nexport function Tutorial(props: TutorialProps) {\n const {title, posterURL, showPlayIcon, href, presenterName, presenterSubtitle} = props\n\n return (\n <Root flex={1}>\n <Card\n sizing=\"border\"\n flex={1}\n padding={2}\n radius={2}\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{position: 'relative'}}\n >\n <Flex direction=\"column\" style={{height: '100%'}}>\n {posterURL && (\n <PosterCard marginBottom={1}>\n <Poster src={posterURL} />\n {showPlayIcon && (\n <PlayIconBox display=\"flex\">\n <Text align=\"center\">\n <PlayIcon />\n </Text>\n </PlayIconBox>\n )}\n </PosterCard>\n )}\n <Flex direction=\"column\" justify=\"space-between\" paddingY={2} flex={1}>\n <Heading as=\"h3\" size={1}>\n {title}\n </Heading>\n <Box marginTop={4}>\n <Stack space={2} flex={1}>\n <Text size={1}>{presenterName}</Text>\n <Text size={0} style={{opacity: 0.7}}>\n {presenterSubtitle}\n </Text>\n </Stack>\n </Box>\n </Flex>\n </Flex>\n </Card>\n </Root>\n )\n}\n","import {useMemo} from 'react'\nimport {useVersionedClient} from '../../versionedClient'\nimport imageUrlBuilder from '@sanity/image-url'\n\nconst tutorialsProjectConfig = {\n projectId: '3do82whm',\n dataset: 'next',\n}\n\nexport interface Guide {\n _type?: string\n slug?: {current: string}\n presenter?: {\n name?: string\n }\n}\n\nexport interface FeedItem {\n _id: string\n title?: string\n poster?: string\n category?: string\n guideOrTutorial?: Guide\n externalLink?: string\n presenter?: {\n name?: string\n }\n hasVideo?: boolean\n}\n\nexport function useDataAdapter() {\n const versionedClient = useVersionedClient()\n return useMemo(\n () => ({\n getFeed: (templateRepoId: string) => {\n const uri = templateRepoId\n ? `/addons/dashboard?templateRepoId=${templateRepoId}`\n : '/addons/dashboard'\n return versionedClient.observable.request<{items: FeedItem[]}>({\n uri,\n withCredentials: false,\n })\n },\n urlBuilder: imageUrlBuilder(tutorialsProjectConfig),\n }),\n [versionedClient]\n )\n}\n","import React, {useEffect, useState} from 'react'\nimport {Flex} from '@sanity/ui'\nimport {Tutorial} from './Tutorial'\nimport {FeedItem, Guide, useDataAdapter} from './dataAdapter'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\n\nfunction createUrl(slug: {current: string}, type?: string) {\n if (type === 'tutorial') {\n return `https://www.sanity.io/docs/tutorials/${slug.current}`\n } else if (type === 'guide') {\n return `https://www.sanity.io/docs/guides/${slug.current}`\n }\n return false\n}\n\nexport interface SanityTutorialsProps {\n templateRepoId: string\n}\n\nexport function SanityTutorials(props: SanityTutorialsProps) {\n const {templateRepoId} = props\n const [feedItems, setFeedItems] = useState<FeedItem[]>([])\n\n const {getFeed, urlBuilder} = useDataAdapter()\n\n useEffect(() => {\n const subscription = getFeed(templateRepoId).subscribe((response) => {\n setFeedItems(response.items)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, [setFeedItems, getFeed, templateRepoId])\n\n const title = 'Learn about Sanity'\n\n return (\n <DashboardWidgetContainer header={title}>\n <Flex as=\"ul\" overflow=\"auto\" align=\"stretch\" paddingY={2}>\n {feedItems?.map((feedItem, index) => {\n if (!feedItem.title || (!feedItem.guideOrTutorial && !feedItem.externalLink)) {\n return null\n }\n const presenter = feedItem.presenter || feedItem.guideOrTutorial?.presenter || {}\n const subtitle = feedItem.category\n const {guideOrTutorial = {} as Guide} = feedItem\n const href =\n (guideOrTutorial.slug\n ? createUrl(guideOrTutorial.slug, guideOrTutorial._type)\n : feedItem.externalLink) || feedItem.externalLink\n\n return (\n <Flex\n as=\"li\"\n key={feedItem._id}\n paddingRight={index < feedItems?.length - 1 ? 1 : 3}\n paddingLeft={index === 0 ? 3 : 0}\n align=\"stretch\"\n style={{minWidth: 272, width: '30%'}}\n >\n <Tutorial\n title={feedItem.title}\n href={href ?? ''}\n presenterName={presenter.name}\n presenterSubtitle={subtitle}\n showPlayIcon={feedItem.hasVideo}\n posterURL={\n feedItem.poster ? urlBuilder.image(feedItem.poster).height(360).url() : undefined\n }\n />\n </Flex>\n )\n })}\n </Flex>\n </DashboardWidgetContainer>\n )\n}\n","import {SanityTutorials} from './SanityTutorials'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function sanityTutorialsWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'sanity-tutorials',\n component: SanityTutorials,\n layout: config?.layout ?? {width: 'full'},\n }\n}\n","import React, {PropsWithChildren} from 'react'\nimport {Container} from '@sanity/ui'\n\nexport function DashboardLayout(props: PropsWithChildren<{}>) {\n return (\n <Container width={4} padding={4} sizing=\"border\" style={{height: '100%', overflowY: 'auto'}}>\n {props.children}\n </Container>\n )\n}\n","import React from 'react'\nimport styled, {css} from 'styled-components'\nimport {Box, Card, Grid, Text} from '@sanity/ui'\nimport {WidgetContainer} from '../containers/WidgetContainer'\nimport {DashboardConfig, LayoutConfig, DashboardWidget} from '../types'\n\nconst media = {\n small: (...args: Parameters<typeof css>) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n ${css(...args)}\n }\n `,\n medium: (...args: Parameters<typeof css>) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[2]}px) {\n ${css(...args)}\n }\n `,\n}\n\nconst Root = styled(Grid)`\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n & > div {\n overflow: hidden;\n }\n\n & > div[data-width='medium'] {\n ${media.small`\n grid-column: span 2;\n `}\n }\n\n & > div[data-width='large'] {\n ${media.small`\n grid-column: span 2;\n `}\n\n ${media.medium`\n grid-column: span 3;\n `}\n }\n\n & > div[data-width='full'] {\n ${media.small`\n grid-column: 1 / -1;\n `}\n }\n\n & > div[data-height='medium'] {\n ${media.small`\n grid-row: span 2;\n `}\n }\n\n & > div[data-height='large'] {\n ${media.small`\n grid-row: span 2;\n `}\n\n ${media.medium`\n grid-row: span 3;\n `}\n }\n\n & > div[data-height='full'] {\n ${media.medium`\n grid-row: 1 / -1;\n `}\n }\n`\n\nexport interface WidgetGroupProps {\n config: Partial<DashboardConfig>\n}\n\nconst NO_WIDGETS: DashboardWidget[] = []\nconst NO_LAYOUT: LayoutConfig = {}\n\nexport function WidgetGroup(props: WidgetGroupProps) {\n const {\n config: {layout = NO_LAYOUT, widgets = NO_WIDGETS},\n } = props\n return (\n <Root\n autoFlow=\"row dense\"\n data-width={layout.width || 'auto'}\n data-height={layout.height || 'auto'}\n gap={4}\n >\n {widgets.length ? null : (\n <Card padding={4} shadow={1} tone=\"primary\">\n <Text align=\"center\">Add some widgets to populate this space.</Text>\n </Card>\n )}\n {widgets.map((widgetConfig, index) => {\n if (widgetConfig.type === '__experimental_group') {\n return <WidgetGroup key={index} config={widgetConfig} />\n }\n if (widgetConfig.component) {\n return <WidgetContainer key={index} {...widgetConfig} />\n }\n return <Box key={index}>{widgetConfig.name} is missing widget component</Box>\n })}\n </Root>\n )\n}\n","import React from 'react'\nimport {DashboardLayout} from '../components/DashboardLayout'\nimport {WidgetGroup} from '../components/WidgetGroup'\nimport {DashboardContext} from './DashboardContext'\nimport {DashboardConfig} from '../types'\n\nexport function Dashboard({config}: {config: DashboardConfig}) {\n if (!config) {\n return null\n }\n\n return (\n <DashboardContext.Provider value={config}>\n <DashboardLayout>\n <WidgetGroup config={config} />\n </DashboardLayout>\n </DashboardContext.Provider>\n )\n}\n","import React, {ComponentType, CSSProperties} from 'react'\nimport {Dashboard} from './containers/Dashboard'\nimport {definePlugin} from 'sanity'\nimport {DashboardConfig, DashboardWidget, LayoutConfig} from './types'\n\nconst strokeStyle: CSSProperties = {\n stroke: 'currentColor',\n strokeWidth: 1.2,\n}\n\nconst DashboardIcon = () => (\n <svg\n data-sanity-icon\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"xMidYMid\"\n width=\"1em\"\n height=\"1em\"\n >\n <path d=\"M19.5 19.5H5.5V5.5H19.5V19.5Z\" style={strokeStyle} />\n <path d=\"M5.5 12.5H19.5\" style={strokeStyle} />\n <path d=\"M14.5 19.5V12.5M10.5 12.5V5.5\" style={strokeStyle} />\n </svg>\n)\n\nexport interface DashboardPluginConfig {\n /**\n * Dashboard tool title\n */\n title?: string\n /**\n * Dashboard tool name (used in url path)\n */\n name?: string\n /**\n * Dashboard tool icon\n */\n icon?: ComponentType\n widgets?: DashboardWidget[]\n\n /**\n * Will be used for widgets that do not define a layout directly.\n */\n defaultLayout?: LayoutConfig\n}\n\nexport const dashboardTool = definePlugin<DashboardPluginConfig>((config = {}) => {\n const pluginConfig: DashboardConfig = {\n layout: config.defaultLayout ?? {},\n widgets: config.widgets ?? [],\n }\n\n const title = config.title ?? 'Dashboard'\n const name = config.name ?? 'dashboard'\n const icon = config.icon ?? DashboardIcon\n\n return {\n name: 'dashboard',\n tools: (prev, context) => {\n return [\n ...prev,\n {\n title,\n name,\n icon,\n component: () => <Dashboard config={pluginConfig} />,\n },\n ]\n },\n }\n})\n"],"names":["Root","styled","Card","Header","Footer","Content","Box","theme","sanity","media","DashboardWidgetContainer","forwardRef","props","ref","header","children","footer","jsxs","radius","display","jsx","borderBottom","paddingX","paddingY","Heading","size","textOverflow","borderTop","useVersionedClient","useClient","apiVersion","DashboardContext","createContext","widgets","useDashboardConfig","useContext","WidgetContainer","config","layout","useMemo","shadow","width","height","createElement","component","isUrl","url","test","getGraphQlUrl","projectId","dataset","getGroqUrl","getManageUrl","NO_EXPERIMENTAL","NO_DATA","ProjectInfo","__experimental_before","data","studioHost","setStudioHost","useState","graphqlApi","setGraphQlApi","versionedClient","useEffect","subscriptions","push","observable","request","uri","subscribe","next","result","host","error","console","method","statusCode","forEach","s","unsubscribe","assembleTableRows","_a","title","rows","value","apps","filter","item","category","a","length","concat","otherStuff","Object","keys","Fragment","map","widgetConfig","idx","marginTop","Button","style","mode","tone","text","as","href","role","Stack","space","id","padding","Label","muted","row","Grid","columns","Text","weight","wordBreak","Code","projectInfoWidget","name","AvatarWrapper","getInviteUrl","ProjectUsers","project","setProject","users","setUsers","setError","userStore","useUserStore","fetchData","useCallback","subscription","pipe","switchMap","_project","from","getUsers","members","mem","_users","Array","isArray","sort","userA","userB","sortUsersByRobotStatus","e","handleRetryFetch","isLoading","onClick","cursor","loading","align","Spinner","user","membership","find","member","isRobot","RobotIcon","imageUrl","src","alt","displayName","DefaultPreview","subtitle","membershipA","membershipB","projectUsersWidget","PlayIconBox","color","card","enabled","bg","Flex","PosterCard","Poster","img","Tutorial","posterURL","showPlayIcon","presenterName","presenterSubtitle","flex","sizing","target","rel","position","direction","marginBottom","PlayIcon","justify","opacity","tutorialsProjectConfig","useDataAdapter","getFeed","templateRepoId","withCredentials","urlBuilder","imageUrlBuilder","createUrl","slug","type","current","SanityTutorials","feedItems","setFeedItems","response","items","overflow","feedItem","index","guideOrTutorial","externalLink","presenter","_type","paddingRight","paddingLeft","minWidth","hasVideo","poster","image","_id","sanityTutorialsWidget","DashboardLayout","Container","overflowY","small","css","medium","NO_WIDGETS","NO_LAYOUT","WidgetGroup","autoFlow","gap","Dashboard","Provider","strokeStyle","stroke","strokeWidth","DashboardIcon","viewBox","fill","xmlns","preserveAspectRatio","d","dashboardTool","definePlugin","_b","_c","_d","_e","pluginConfig","defaultLayout","icon","tools","prev","context"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/components/DashboardWidgetContainer.tsx","../src/versionedClient.ts","../src/containers/DashboardContext.tsx","../src/containers/WidgetContainer.tsx","../src/widgets/projectInfo/ProjectInfo.tsx","../src/widgets/projectInfo/index.ts","../src/widgets/projectUsers/ProjectUsers.tsx","../src/widgets/projectUsers/index.ts","../src/widgets/sanityTutorials/Tutorial.tsx","../src/widgets/sanityTutorials/dataAdapter.ts","../src/widgets/sanityTutorials/SanityTutorials.tsx","../src/widgets/sanityTutorials/index.ts","../src/components/DashboardLayout.tsx","../src/components/WidgetGroup.tsx","../src/containers/Dashboard.tsx","../src/plugin.tsx"],"sourcesContent":["import React, {forwardRef} from 'react'\nimport {Card, Box, Heading} from '@sanity/ui'\nimport styled from 'styled-components'\n\nconst Root = styled(Card)`\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n box-sizing: border-box;\n position: relative;\n`\n\nconst Header = styled(Card)`\n position: sticky;\n top: 0;\n z-index: 2;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n`\n\nconst Footer = styled(Card)`\n position: sticky;\n overflow: hidden;\n bottom: 0;\n z-index: 2;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n margin-top: auto;\n`\n\nconst Content = styled(Box)`\n position: relative;\n z-index: 1;\n height: stretch;\n min-height: 21.5em;\n\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n overflow-y: auto;\n outline: none;\n }\n`\n\ninterface DashboardWidgetProps {\n header?: string\n children: React.ReactNode\n footer?: React.ReactNode\n}\n\nexport const DashboardWidgetContainer = forwardRef(function DashboardWidgetContainer(\n props: DashboardWidgetProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const {header, children, footer} = props\n\n return (\n <Root radius={3} display=\"flex\" ref={ref}>\n {header && (\n <Header borderBottom paddingX={3} paddingY={4}>\n <Heading size={1} textOverflow=\"ellipsis\">\n {header}\n </Heading>\n </Header>\n )}\n {children && <Content>{children}</Content>}\n {footer && <Footer borderTop>{footer}</Footer>}\n </Root>\n )\n})\n","import {useClient} from 'sanity'\n\nexport function useVersionedClient() {\n return useClient({apiVersion: '1'})\n}\n","import {createContext, useContext} from 'react'\nimport {DashboardConfig} from '../types'\n\nexport const DashboardContext = createContext<DashboardConfig>({widgets: []})\n\nexport function useDashboardConfig(): DashboardConfig {\n return useContext(DashboardContext)\n}\n","import React, {createElement, useMemo} from 'react'\nimport {useDashboardConfig} from './DashboardContext'\nimport {Card} from '@sanity/ui'\nimport {DashboardWidget} from '../types'\n\nexport function WidgetContainer(props: DashboardWidget) {\n const config = useDashboardConfig()\n const layout = useMemo(\n () => ({\n ...(props.layout || {}),\n ...(config.layout || {}),\n }),\n [props.layout, config.layout]\n )\n\n return (\n <Card shadow={1} data-width={layout.width} data-height={layout.height}>\n {createElement(props.component, {})}\n </Card>\n )\n}\n","import React, {useEffect, useMemo, useState} from 'react'\nimport {Box, Card, Stack, Heading, Grid, Label, Text, Code, Button} from '@sanity/ui'\nimport {useVersionedClient} from '../../versionedClient'\nimport {Subscription} from 'rxjs'\nimport {WidgetContainer} from '../../containers/WidgetContainer'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {DashboardWidget} from '../../types'\n\nexport interface ProjectInfoProps {\n __experimental_before?: DashboardWidget[]\n data: ProjectData[]\n}\n\ninterface App {\n title: string\n rows?: App[]\n value?: string | {error: string}\n}\n\ninterface ProjectData {\n title: string\n category?: string\n}\n\nfunction isUrl(url?: string) {\n return url && /^https?:\\/\\//.test(`${url}`)\n}\n\nfunction getGraphQlUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/graphql/${dataset}/default`\n}\n\nfunction getGroqUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/groq/${dataset}`\n}\n\nfunction getManageUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}`\n}\n\nconst NO_EXPERIMENTAL: DashboardWidget[] = []\nconst NO_DATA: ProjectData[] = []\n\nexport function ProjectInfo(props: ProjectInfoProps) {\n const {__experimental_before = NO_EXPERIMENTAL, data = NO_DATA} = props\n const [studioHost, setStudioHost] = useState<string | {error: string} | undefined>()\n const [graphqlApi, setGraphQlApi] = useState<string | {error: string} | undefined>()\n const versionedClient = useVersionedClient()\n const {projectId = 'unknown', dataset = 'unknown'} = versionedClient.config()\n\n useEffect(() => {\n const subscriptions: Subscription[] = []\n\n subscriptions.push(\n versionedClient.observable\n .request<{studioHost: string}>({uri: `/projects/${projectId}`})\n .subscribe({\n next: (result) => {\n const {studioHost: host} = result\n setStudioHost(host ? `https://${host}.sanity.studio` : undefined)\n },\n error: (error) => {\n console.error('Error while looking for studioHost', error)\n setStudioHost({\n error: 'Something went wrong while looking up studioHost. See console.',\n })\n },\n })\n )\n\n // ping assumed graphql endpoint\n subscriptions.push(\n versionedClient.observable\n .request({\n method: 'HEAD',\n uri: `/graphql/${dataset}/default`,\n })\n .subscribe({\n next: () => setGraphQlApi(getGraphQlUrl(projectId, dataset)),\n error: (error) => {\n if (error.statusCode === 404) {\n setGraphQlApi(undefined)\n } else {\n console.error('Error while looking for graphqlApi', error)\n setGraphQlApi({\n error: 'Something went wrong while looking up graphqlApi. See console.',\n })\n }\n },\n })\n )\n\n return () => {\n subscriptions.forEach((s) => s.unsubscribe())\n }\n }, [dataset, projectId, versionedClient, setGraphQlApi, setStudioHost])\n\n const assembleTableRows = useMemo(() => {\n let result: App[] = [\n {\n title: 'Sanity project',\n rows: [\n {title: 'Project ID', value: projectId},\n {title: 'Dataset', value: dataset},\n ],\n },\n ]\n\n // Handle any apps\n const apps: App[] = [\n studioHost ? {title: 'Studio', value: studioHost} : null,\n ...data.filter((item) => item.category === 'apps'),\n ].filter((a): a is App => !!a)\n if (apps.length > 0) {\n result = result.concat([{title: 'Apps', rows: apps}])\n }\n\n // Handle APIs\n result = result.concat(\n [\n {\n title: 'APIs',\n rows: [\n {title: 'GROQ', value: getGroqUrl(projectId, dataset)},\n {\n title: 'GraphQL',\n value: (typeof graphqlApi === 'object' ? 'Error' : graphqlApi) ?? 'Not deployed',\n },\n ],\n },\n ],\n data.filter((item) => item.category === 'apis')\n )\n\n // Handle whatever else there might be\n const otherStuff: Record<string, ProjectData[]> = {}\n data.forEach((item) => {\n if (item.category && item.category !== 'apps' && item.category !== 'apis') {\n if (!otherStuff[item.category]) {\n otherStuff[item.category] = []\n }\n otherStuff[item.category].push(item)\n }\n })\n Object.keys(otherStuff).forEach((category) => {\n result.push({title: category, rows: otherStuff[category]})\n })\n\n return result\n }, [graphqlApi, studioHost, projectId, dataset, data])\n\n return (\n <>\n {__experimental_before.map((widgetConfig, idx) => (\n <WidgetContainer key={idx} {...widgetConfig} />\n ))}\n <Box height=\"fill\" marginTop={__experimental_before?.length > 0 ? 4 : 0}>\n <DashboardWidgetContainer\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Manage project\"\n as=\"a\"\n href={getManageUrl(projectId)}\n />\n }\n >\n <Card\n paddingY={4}\n radius={2}\n role=\"table\"\n aria-label=\"Project info\"\n aria-describedby=\"project_info_table\"\n >\n <Stack space={4}>\n <Box paddingX={3} as=\"header\">\n <Heading size={1} as=\"h2\" id=\"project_info_table\">\n Project info\n </Heading>\n </Box>\n {assembleTableRows.map((item) => {\n if (!item || !item.rows) {\n return null\n }\n\n return (\n <Stack key={item.title} space={3}>\n <Card borderBottom padding={3}>\n <Label size={0} muted role=\"columnheader\">\n {item.title}\n </Label>\n </Card>\n <Stack space={4} paddingX={3} role=\"rowgroup\">\n {item.rows.map((row) => {\n return (\n <Grid key={row.title} columns={2} role=\"row\">\n <Text weight=\"medium\" role=\"rowheader\">\n {row.title}\n </Text>\n {typeof row.value === 'object' && (\n <Text size={1}>{row.value?.error}</Text>\n )}\n {typeof row.value === 'string' && (\n <>\n {isUrl(row.value) ? (\n <Text size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n <a href={row.value}>{row.value}</a>\n </Text>\n ) : (\n <Code size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n {row.value}\n </Code>\n )}\n </>\n )}\n </Grid>\n )\n })}\n </Stack>\n </Stack>\n )\n })}\n </Stack>\n </Card>\n </DashboardWidgetContainer>\n </Box>\n </>\n )\n}\n","import {ProjectInfo} from './ProjectInfo'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function projectInfoWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectInfo,\n layout: config?.layout ?? {width: 'medium'},\n }\n}\n","import React, {useCallback, useEffect, useState} from 'react'\nimport {from} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\nimport {Stack, Spinner, Card, Box, Text, Button} from '@sanity/ui'\nimport {RobotIcon} from '@sanity/icons'\nimport styled from 'styled-components'\nimport {DefaultPreview, useUserStore} from 'sanity'\nimport {useVersionedClient} from '../../versionedClient'\nimport {User} from 'sanity'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\n\nconst AvatarWrapper = styled(Card)`\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n`\n\nfunction getInviteUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}/team/invite`\n}\n\ninterface Member {\n id: string\n role: string\n isRobot: boolean\n}\n\ninterface Project {\n id: string\n members: Member[]\n}\n\nexport function ProjectUsers() {\n const [project, setProject] = useState<Project | undefined>()\n const [users, setUsers] = useState<User[] | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const userStore = useUserStore()\n const versionedClient = useVersionedClient()\n\n const fetchData = useCallback(() => {\n const {projectId} = versionedClient.config()\n const subscription = versionedClient.observable\n .request<Project>({\n uri: `/projects/${projectId}`,\n })\n .pipe(\n switchMap((_project) =>\n from(userStore.getUsers(_project.members.map((mem) => mem.id))).pipe(\n map((_users) => ({project: _project, users: _users}))\n )\n )\n )\n .subscribe({\n next: ({users: _users, project: _project}) => {\n setProject(_project)\n setUsers(\n (Array.isArray(_users) ? _users : [_users]).sort((userA, userB) =>\n sortUsersByRobotStatus(userA, userB, _project)\n )\n )\n },\n error: (e: Error) => setError(e),\n })\n\n return () => subscription.unsubscribe()\n }, [userStore, versionedClient])\n\n useEffect(() => fetchData(), [fetchData])\n\n const handleRetryFetch = useCallback(() => fetchData(), [fetchData])\n\n const isLoading = !users || !project\n\n if (error) {\n return (\n <DashboardWidgetContainer header=\"Project users\">\n <Box padding={4}>\n <Text>\n Something went wrong while fetching data. You could{' '}\n <a onClick={handleRetryFetch} title=\"Retry users fetch\" style={{cursor: 'pointer'}}>\n retry\n </a>\n ..?\n </Text>\n </Box>\n </DashboardWidgetContainer>\n )\n }\n\n return (\n <DashboardWidgetContainer\n header=\"Project users\"\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Invite members\"\n as=\"a\"\n loading={isLoading}\n href={isLoading ? undefined : getInviteUrl(project.id)}\n />\n }\n >\n {isLoading && (\n <Box paddingY={5} paddingX={2}>\n <Stack space={4}>\n <Text align=\"center\" muted size={1}>\n <Spinner />\n </Text>\n <Text align=\"center\" size={1} muted>\n Loading items...\n </Text>\n </Stack>\n </Box>\n )}\n\n {!isLoading && (\n <Stack space={3} padding={3}>\n {users?.map((user) => {\n const membership = project.members.find((member) => member.id === user.id)\n const media = membership?.isRobot ? (\n <Text size={3}>\n <RobotIcon />\n </Text>\n ) : (\n <AvatarWrapper tone=\"transparent\">\n {user?.imageUrl && <img src={user.imageUrl} alt={user?.displayName} />}\n </AvatarWrapper>\n )\n return (\n <Box key={user.id}>\n <DefaultPreview\n title={user.displayName}\n subtitle={membership?.role}\n media={media}\n />\n </Box>\n )\n })}\n </Stack>\n )}\n </DashboardWidgetContainer>\n )\n}\n\nfunction sortUsersByRobotStatus(userA: User, userB: User, project: Project) {\n const {members} = project\n const membershipA = members.find((member) => member.id === userA?.id)\n const membershipB = members.find((member) => member.id === userB?.id)\n if (membershipA?.isRobot) {\n return 1\n }\n if (membershipB?.isRobot) {\n return -1\n }\n return 0\n}\n","import {ProjectUsers} from './ProjectUsers'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function projectUsersWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectUsers,\n layout: config?.layout,\n }\n}\n","import React from 'react'\nimport {Card, Box, Heading, Flex, Text, Stack} from '@sanity/ui'\nimport {PlayIcon} from '@sanity/icons'\nimport styled from 'styled-components'\n\nconst PlayIconBox = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2.75em;\n height: 2.75em;\n border-radius: 50%;\n background: ${({theme}) => theme.sanity.color.card.enabled.bg};\n opacity: 0.75;\n }\n`\n\nconst Root = styled(Flex)`\n &:hover {\n ${PlayIconBox} {\n &:before {\n opacity: 1;\n }\n }\n }\n`\n\nconst PosterCard = styled(Card)`\n width: 100%;\n padding-bottom: calc(9 / 16 * 100%);\n position: relative;\n`\n\nconst Poster = styled.img`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n\n &:not([src]) {\n display: none;\n }\n`\n\nexport interface TutorialProps {\n title: string\n posterURL?: string\n href: string\n showPlayIcon?: boolean\n presenterName?: string\n presenterSubtitle?: string\n}\n\nexport function Tutorial(props: TutorialProps) {\n const {title, posterURL, showPlayIcon, href, presenterName, presenterSubtitle} = props\n\n return (\n <Root flex={1}>\n <Card\n sizing=\"border\"\n flex={1}\n padding={2}\n radius={2}\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{position: 'relative'}}\n >\n <Flex direction=\"column\" style={{height: '100%'}}>\n {posterURL && (\n <PosterCard marginBottom={1}>\n <Poster src={posterURL} />\n {showPlayIcon && (\n <PlayIconBox display=\"flex\">\n <Text align=\"center\">\n <PlayIcon />\n </Text>\n </PlayIconBox>\n )}\n </PosterCard>\n )}\n <Flex direction=\"column\" justify=\"space-between\" paddingY={2} flex={1}>\n <Heading as=\"h3\" size={1}>\n {title}\n </Heading>\n <Box marginTop={4}>\n <Stack space={2} flex={1}>\n <Text size={1}>{presenterName}</Text>\n <Text size={0} style={{opacity: 0.7}}>\n {presenterSubtitle}\n </Text>\n </Stack>\n </Box>\n </Flex>\n </Flex>\n </Card>\n </Root>\n )\n}\n","import {useMemo} from 'react'\nimport {useVersionedClient} from '../../versionedClient'\nimport imageUrlBuilder from '@sanity/image-url'\n\nconst tutorialsProjectConfig = {\n projectId: '3do82whm',\n dataset: 'next',\n}\n\nexport interface Guide {\n _type?: string\n slug?: {current: string}\n presenter?: {\n name?: string\n }\n}\n\nexport interface FeedItem {\n _id: string\n title?: string\n poster?: string\n category?: string\n guideOrTutorial?: Guide\n externalLink?: string\n presenter?: {\n name?: string\n }\n hasVideo?: boolean\n}\n\nexport function useDataAdapter() {\n const versionedClient = useVersionedClient()\n return useMemo(\n () => ({\n getFeed: (templateRepoId: string) => {\n const uri = templateRepoId\n ? `/addons/dashboard?templateRepoId=${templateRepoId}`\n : '/addons/dashboard'\n return versionedClient.observable.request<{items: FeedItem[]}>({\n uri,\n withCredentials: false,\n })\n },\n urlBuilder: imageUrlBuilder(tutorialsProjectConfig),\n }),\n [versionedClient]\n )\n}\n","import React, {useEffect, useState} from 'react'\nimport {Flex} from '@sanity/ui'\nimport {Tutorial} from './Tutorial'\nimport {FeedItem, Guide, useDataAdapter} from './dataAdapter'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\n\nfunction createUrl(slug: {current: string}, type?: string) {\n if (type === 'tutorial') {\n return `https://www.sanity.io/docs/tutorials/${slug.current}`\n } else if (type === 'guide') {\n return `https://www.sanity.io/docs/guides/${slug.current}`\n }\n return false\n}\n\nexport interface SanityTutorialsProps {\n templateRepoId: string\n}\n\nexport function SanityTutorials(props: SanityTutorialsProps) {\n const {templateRepoId} = props\n const [feedItems, setFeedItems] = useState<FeedItem[]>([])\n\n const {getFeed, urlBuilder} = useDataAdapter()\n\n useEffect(() => {\n const subscription = getFeed(templateRepoId).subscribe((response) => {\n setFeedItems(response.items)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, [setFeedItems, getFeed, templateRepoId])\n\n const title = 'Learn about Sanity'\n\n return (\n <DashboardWidgetContainer header={title}>\n <Flex as=\"ul\" overflow=\"auto\" align=\"stretch\" paddingY={2}>\n {feedItems?.map((feedItem, index) => {\n if (!feedItem.title || (!feedItem.guideOrTutorial && !feedItem.externalLink)) {\n return null\n }\n const presenter = feedItem.presenter || feedItem.guideOrTutorial?.presenter || {}\n const subtitle = feedItem.category\n const {guideOrTutorial = {} as Guide} = feedItem\n const href =\n (guideOrTutorial.slug\n ? createUrl(guideOrTutorial.slug, guideOrTutorial._type)\n : feedItem.externalLink) || feedItem.externalLink\n\n return (\n <Flex\n as=\"li\"\n key={feedItem._id}\n paddingRight={index < feedItems?.length - 1 ? 1 : 3}\n paddingLeft={index === 0 ? 3 : 0}\n align=\"stretch\"\n style={{minWidth: 272, width: '30%'}}\n >\n <Tutorial\n title={feedItem.title}\n href={href ?? ''}\n presenterName={presenter.name}\n presenterSubtitle={subtitle}\n showPlayIcon={feedItem.hasVideo}\n posterURL={\n feedItem.poster ? urlBuilder.image(feedItem.poster).height(360).url() : undefined\n }\n />\n </Flex>\n )\n })}\n </Flex>\n </DashboardWidgetContainer>\n )\n}\n","import {SanityTutorials} from './SanityTutorials'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function sanityTutorialsWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'sanity-tutorials',\n component: SanityTutorials,\n layout: config?.layout ?? {width: 'full'},\n }\n}\n","import React, {PropsWithChildren} from 'react'\nimport {Container} from '@sanity/ui'\n\nexport function DashboardLayout(props: PropsWithChildren<{}>) {\n return (\n <Container width={4} padding={4} sizing=\"border\" style={{height: '100%', overflowY: 'auto'}}>\n {props.children}\n </Container>\n )\n}\n","import React from 'react'\nimport styled, {css} from 'styled-components'\nimport {Box, Card, Grid, Text} from '@sanity/ui'\nimport {WidgetContainer} from '../containers/WidgetContainer'\nimport {DashboardConfig, LayoutConfig, DashboardWidget} from '../types'\n\nconst media = {\n small: (...args: Parameters<typeof css>) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n ${css(...args)}\n }\n `,\n medium: (...args: Parameters<typeof css>) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[2]}px) {\n ${css(...args)}\n }\n `,\n}\n\nconst Root = styled(Grid)`\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n & > div {\n overflow: hidden;\n }\n\n & > div[data-width='medium'] {\n ${media.small`\n grid-column: span 2;\n `}\n }\n\n & > div[data-width='large'] {\n ${media.small`\n grid-column: span 2;\n `}\n\n ${media.medium`\n grid-column: span 3;\n `}\n }\n\n & > div[data-width='full'] {\n ${media.small`\n grid-column: 1 / -1;\n `}\n }\n\n & > div[data-height='medium'] {\n ${media.small`\n grid-row: span 2;\n `}\n }\n\n & > div[data-height='large'] {\n ${media.small`\n grid-row: span 2;\n `}\n\n ${media.medium`\n grid-row: span 3;\n `}\n }\n\n & > div[data-height='full'] {\n ${media.medium`\n grid-row: 1 / -1;\n `}\n }\n`\n\nexport interface WidgetGroupProps {\n config: Partial<DashboardConfig>\n}\n\nconst NO_WIDGETS: DashboardWidget[] = []\nconst NO_LAYOUT: LayoutConfig = {}\n\nexport function WidgetGroup(props: WidgetGroupProps) {\n const {\n config: {layout = NO_LAYOUT, widgets = NO_WIDGETS},\n } = props\n return (\n <Root\n autoFlow=\"row dense\"\n data-width={layout.width || 'auto'}\n data-height={layout.height || 'auto'}\n gap={4}\n >\n {widgets.length ? null : (\n <Card padding={4} shadow={1} tone=\"primary\">\n <Text align=\"center\">Add some widgets to populate this space.</Text>\n </Card>\n )}\n {widgets.map((widgetConfig, index) => {\n if (widgetConfig.type === '__experimental_group') {\n return <WidgetGroup key={index} config={widgetConfig} />\n }\n if (widgetConfig.component) {\n return <WidgetContainer key={index} {...widgetConfig} />\n }\n return <Box key={index}>{widgetConfig.name} is missing widget component</Box>\n })}\n </Root>\n )\n}\n","import React from 'react'\nimport {DashboardLayout} from '../components/DashboardLayout'\nimport {WidgetGroup} from '../components/WidgetGroup'\nimport {DashboardContext} from './DashboardContext'\nimport {DashboardConfig} from '../types'\n\nexport function Dashboard({config}: {config: DashboardConfig}) {\n if (!config) {\n return null\n }\n\n return (\n <DashboardContext.Provider value={config}>\n <DashboardLayout>\n <WidgetGroup config={config} />\n </DashboardLayout>\n </DashboardContext.Provider>\n )\n}\n","import React, {ComponentType, CSSProperties} from 'react'\nimport {Dashboard} from './containers/Dashboard'\nimport {definePlugin} from 'sanity'\nimport {DashboardConfig, DashboardWidget, LayoutConfig} from './types'\n\nconst strokeStyle: CSSProperties = {\n stroke: 'currentColor',\n strokeWidth: 1.2,\n}\n\nconst DashboardIcon = () => (\n <svg\n data-sanity-icon\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"xMidYMid\"\n width=\"1em\"\n height=\"1em\"\n >\n <path d=\"M19.5 19.5H5.5V5.5H19.5V19.5Z\" style={strokeStyle} />\n <path d=\"M5.5 12.5H19.5\" style={strokeStyle} />\n <path d=\"M14.5 19.5V12.5M10.5 12.5V5.5\" style={strokeStyle} />\n </svg>\n)\n\nexport interface DashboardPluginConfig {\n /**\n * Dashboard tool title\n */\n title?: string\n /**\n * Dashboard tool name (used in url path)\n */\n name?: string\n /**\n * Dashboard tool icon\n */\n icon?: ComponentType\n widgets?: DashboardWidget[]\n\n /**\n * Will be used for widgets that do not define a layout directly.\n */\n defaultLayout?: LayoutConfig\n}\n\nexport const dashboardTool = definePlugin<DashboardPluginConfig>((config = {}) => {\n const pluginConfig: DashboardConfig = {\n layout: config.defaultLayout ?? {},\n widgets: config.widgets ?? [],\n }\n\n const title = config.title ?? 'Dashboard'\n const name = config.name ?? 'dashboard'\n const icon = config.icon ?? DashboardIcon\n\n return {\n name: 'dashboard',\n tools: (prev, context) => {\n return [\n ...prev,\n {\n title,\n name,\n icon,\n component: () => <Dashboard config={pluginConfig} />,\n },\n ]\n },\n }\n})\n"],"names":["_a","_b","_c","_d","Root","styled","Card","__template","Header","Footer","Content","Box","_ref","theme","sanity","media","DashboardWidgetContainer","forwardRef","props","ref","header","children","footer","radius","display","jsx","borderBottom","paddingX","paddingY","Heading","size","textOverflow","borderTop","useVersionedClient","useClient","apiVersion","DashboardContext","createContext","widgets","useDashboardConfig","useContext","WidgetContainer","config","layout","useMemo","shadow","width","height","createElement","component","isUrl","url","test","concat","getGraphQlUrl","projectId","dataset","getGroqUrl","getManageUrl","NO_EXPERIMENTAL","NO_DATA","ProjectInfo","__experimental_before","data","studioHost","setStudioHost","useState","graphqlApi","setGraphQlApi","versionedClient","useEffect","subscriptions","push","observable","request","uri","subscribe","next","result","host","error","console","method","statusCode","forEach","s","unsubscribe","assembleTableRows","title","rows","value","apps","filter","item","category","a","length","otherStuff","Object","keys","jsxs","Fragment","map","widgetConfig","idx","marginTop","Button","style","mode","tone","text","as","href","role","Stack","space","id","padding","Label","muted","row","Grid","columns","Text","weight","wordBreak","Code","projectInfoWidget","name","AvatarWrapper","getInviteUrl","ProjectUsers","project","setProject","users","setUsers","setError","userStore","useUserStore","fetchData","useCallback","subscription","pipe","switchMap","_project","from","getUsers","members","mem","_users","_ref2","Array","isArray","sort","userA","userB","sortUsersByRobotStatus","e","handleRetryFetch","isLoading","onClick","cursor","loading","align","Spinner","user","membership","find","member","isRobot","RobotIcon","imageUrl","src","alt","displayName","DefaultPreview","subtitle","membershipA","membershipB","projectUsersWidget","PlayIconBox","_ref3","color","card","enabled","bg","Flex","PosterCard","Poster","img","Tutorial","posterURL","showPlayIcon","presenterName","presenterSubtitle","flex","sizing","target","rel","position","direction","marginBottom","PlayIcon","justify","opacity","tutorialsProjectConfig","useDataAdapter","getFeed","templateRepoId","withCredentials","urlBuilder","imageUrlBuilder","createUrl","slug","type","current","SanityTutorials","feedItems","setFeedItems","response","items","overflow","feedItem","index","guideOrTutorial","externalLink","presenter","_type","paddingRight","paddingLeft","minWidth","hasVideo","poster","image","_id","sanityTutorialsWidget","DashboardLayout","Container","overflowY","_e","_f","_g","_h","_i","_j","_k","small","css","_ref4","arguments","medium","_ref5","NO_WIDGETS","NO_LAYOUT","WidgetGroup","autoFlow","gap","Dashboard","_ref6","Provider","strokeStyle","stroke","strokeWidth","DashboardIcon","viewBox","fill","xmlns","preserveAspectRatio","d","dashboardTool","definePlugin","undefined","pluginConfig","defaultLayout","icon","tools","prev","context"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -1,12 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20;
4
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
8
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
10
3
  Object.defineProperty(exports, '__esModule', {
11
4
  value: true
12
5
  });
@@ -26,10 +19,16 @@ function _interopDefaultCompat(e) {
26
19
  }
27
20
  var styled__default = /*#__PURE__*/_interopDefaultCompat(styled);
28
21
  var imageUrlBuilder__default = /*#__PURE__*/_interopDefaultCompat(imageUrlBuilder);
29
- const Root$2 = styled__default.default(ui.Card)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n box-sizing: border-box;\n position: relative;\n"])));
30
- const Header = styled__default.default(ui.Card)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: sticky;\n top: 0;\n z-index: 2;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n"])));
31
- const Footer = styled__default.default(ui.Card)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n position: sticky;\n overflow: hidden;\n bottom: 0;\n z-index: 2;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n margin-top: auto;\n"])));
32
- const Content = styled__default.default(ui.Box)(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: relative;\n z-index: 1;\n height: stretch;\n min-height: 21.5em;\n\n @media (min-width: ", "px) {\n overflow-y: auto;\n outline: none;\n }\n"])), _ref => {
22
+ var __freeze$3 = Object.freeze;
23
+ var __defProp$3 = Object.defineProperty;
24
+ var __template$3 = (cooked, raw) => __freeze$3(__defProp$3(cooked, "raw", {
25
+ value: __freeze$3(raw || cooked.slice())
26
+ }));
27
+ var _a$3, _b$2, _c$2, _d$2;
28
+ const Root$2 = styled__default.default(ui.Card)(_a$3 || (_a$3 = __template$3(["\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n box-sizing: border-box;\n position: relative;\n"])));
29
+ const Header = styled__default.default(ui.Card)(_b$2 || (_b$2 = __template$3(["\n position: sticky;\n top: 0;\n z-index: 2;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n"])));
30
+ const Footer = styled__default.default(ui.Card)(_c$2 || (_c$2 = __template$3(["\n position: sticky;\n overflow: hidden;\n bottom: 0;\n z-index: 2;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n margin-top: auto;\n"])));
31
+ const Content = styled__default.default(ui.Box)(_d$2 || (_d$2 = __template$3(["\n position: relative;\n z-index: 1;\n height: stretch;\n min-height: 21.5em;\n\n @media (min-width: ", "px) {\n overflow-y: auto;\n outline: none;\n }\n"])), _ref => {
33
32
  let {
34
33
  theme
35
34
  } = _ref;
@@ -75,7 +74,10 @@ function useDashboardConfig() {
75
74
  }
76
75
  function WidgetContainer(props) {
77
76
  const config = useDashboardConfig();
78
- const layout = react.useMemo(() => _objectSpread(_objectSpread({}, props.layout || {}), config.layout || {}), [props.layout, config.layout]);
77
+ const layout = react.useMemo(() => ({
78
+ ...(props.layout || {}),
79
+ ...(config.layout || {})
80
+ }), [props.layout, config.layout]);
79
81
  return /* @__PURE__ */jsxRuntime.jsx(ui.Card, {
80
82
  shadow: 1,
81
83
  "data-width": layout.width,
@@ -197,7 +199,9 @@ function ProjectInfo(props) {
197
199
  return result;
198
200
  }, [graphqlApi, studioHost, projectId, dataset, data]);
199
201
  return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, {
200
- children: [__experimental_before.map((widgetConfig, idx) => /* @__PURE__ */jsxRuntime.jsx(WidgetContainer, _objectSpread({}, widgetConfig), idx)), /* @__PURE__ */jsxRuntime.jsx(ui.Box, {
202
+ children: [__experimental_before.map((widgetConfig, idx) => /* @__PURE__ */jsxRuntime.jsx(WidgetContainer, {
203
+ ...widgetConfig
204
+ }, idx)), /* @__PURE__ */jsxRuntime.jsx(ui.Box, {
201
205
  height: "fill",
202
206
  marginTop: (__experimental_before == null ? void 0 : __experimental_before.length) > 0 ? 4 : 0,
203
207
  children: /* @__PURE__ */jsxRuntime.jsx(DashboardWidgetContainer, {
@@ -302,7 +306,13 @@ function projectInfoWidget(config) {
302
306
  }
303
307
  };
304
308
  }
305
- const AvatarWrapper = styled__default.default(ui.Card)(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n"])));
309
+ var __freeze$2 = Object.freeze;
310
+ var __defProp$2 = Object.defineProperty;
311
+ var __template$2 = (cooked, raw) => __freeze$2(__defProp$2(cooked, "raw", {
312
+ value: __freeze$2(raw || cooked.slice())
313
+ }));
314
+ var _a$2;
315
+ const AvatarWrapper = styled__default.default(ui.Card)(_a$2 || (_a$2 = __template$2(["\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n"])));
306
316
  function getInviteUrl(projectId) {
307
317
  return "https://manage.sanity.io/projects/".concat(projectId, "/team/invite");
308
318
  }
@@ -434,15 +444,21 @@ function projectUsersWidget(config) {
434
444
  layout: config == null ? void 0 : config.layout
435
445
  };
436
446
  }
437
- const PlayIconBox = styled__default.default(ui.Box)(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2.75em;\n height: 2.75em;\n border-radius: 50%;\n background: ", ";\n opacity: 0.75;\n }\n"])), _ref3 => {
447
+ var __freeze$1 = Object.freeze;
448
+ var __defProp$1 = Object.defineProperty;
449
+ var __template$1 = (cooked, raw) => __freeze$1(__defProp$1(cooked, "raw", {
450
+ value: __freeze$1(raw || cooked.slice())
451
+ }));
452
+ var _a$1, _b$1, _c$1, _d$1;
453
+ const PlayIconBox = styled__default.default(ui.Box)(_a$1 || (_a$1 = __template$1(["\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2.75em;\n height: 2.75em;\n border-radius: 50%;\n background: ", ";\n opacity: 0.75;\n }\n"])), _ref3 => {
438
454
  let {
439
455
  theme
440
456
  } = _ref3;
441
457
  return theme.sanity.color.card.enabled.bg;
442
458
  });
443
- const Root$1 = styled__default.default(ui.Flex)(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n &:hover {\n ", " {\n &:before {\n opacity: 1;\n }\n }\n }\n"])), PlayIconBox);
444
- const PosterCard = styled__default.default(ui.Card)(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n width: 100%;\n padding-bottom: calc(9 / 16 * 100%);\n position: relative;\n"])));
445
- const Poster = styled__default.default.img(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n\n &:not([src]) {\n display: none;\n }\n"])));
459
+ const Root$1 = styled__default.default(ui.Flex)(_b$1 || (_b$1 = __template$1(["\n &:hover {\n ", " {\n &:before {\n opacity: 1;\n }\n }\n }\n"])), PlayIconBox);
460
+ const PosterCard = styled__default.default(ui.Card)(_c$1 || (_c$1 = __template$1(["\n width: 100%;\n padding-bottom: calc(9 / 16 * 100%);\n position: relative;\n"])));
461
+ const Poster = styled__default.default.img(_d$1 || (_d$1 = __template$1(["\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n\n &:not([src]) {\n display: none;\n }\n"])));
446
462
  function Tutorial(props) {
447
463
  const {
448
464
  title,
@@ -618,9 +634,15 @@ function DashboardLayout(props) {
618
634
  children: props.children
619
635
  });
620
636
  }
637
+ var __freeze = Object.freeze;
638
+ var __defProp = Object.defineProperty;
639
+ var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", {
640
+ value: __freeze(raw || cooked.slice())
641
+ }));
642
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
621
643
  const media = {
622
644
  small: function () {
623
- return styled.css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n @media (min-width: ", "px) {\n ", "\n }\n "])), _ref4 => {
645
+ return styled.css(_a || (_a = __template(["\n @media (min-width: ", "px) {\n ", "\n }\n "])), _ref4 => {
624
646
  let {
625
647
  theme
626
648
  } = _ref4;
@@ -628,7 +650,7 @@ const media = {
628
650
  }, styled.css(...arguments));
629
651
  },
630
652
  medium: function () {
631
- return styled.css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n @media (min-width: ", "px) {\n ", "\n }\n "])), _ref5 => {
653
+ return styled.css(_b || (_b = __template(["\n @media (min-width: ", "px) {\n ", "\n }\n "])), _ref5 => {
632
654
  let {
633
655
  theme
634
656
  } = _ref5;
@@ -636,7 +658,7 @@ const media = {
636
658
  }, styled.css(...arguments));
637
659
  }
638
660
  };
639
- const Root = styled__default.default(ui.Grid)(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n & > div {\n overflow: hidden;\n }\n\n & > div[data-width='medium'] {\n ", "\n }\n\n & > div[data-width='large'] {\n ", "\n\n ", "\n }\n\n & > div[data-width='full'] {\n ", "\n }\n\n & > div[data-height='medium'] {\n ", "\n }\n\n & > div[data-height='large'] {\n ", "\n\n ", "\n }\n\n & > div[data-height='full'] {\n ", "\n }\n"])), media.small(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n grid-column: span 2;\n "]))), media.small(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n grid-column: span 2;\n "]))), media.medium(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n grid-column: span 3;\n "]))), media.small(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n grid-column: 1 / -1;\n "]))), media.small(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n grid-row: span 2;\n "]))), media.small(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n grid-row: span 2;\n "]))), media.medium(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n grid-row: span 3;\n "]))), media.medium(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n grid-row: 1 / -1;\n "]))));
661
+ const Root = styled__default.default(ui.Grid)(_k || (_k = __template(["\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n & > div {\n overflow: hidden;\n }\n\n & > div[data-width='medium'] {\n ", "\n }\n\n & > div[data-width='large'] {\n ", "\n\n ", "\n }\n\n & > div[data-width='full'] {\n ", "\n }\n\n & > div[data-height='medium'] {\n ", "\n }\n\n & > div[data-height='large'] {\n ", "\n\n ", "\n }\n\n & > div[data-height='full'] {\n ", "\n }\n"])), media.small(_c || (_c = __template(["\n grid-column: span 2;\n "]))), media.small(_d || (_d = __template(["\n grid-column: span 2;\n "]))), media.medium(_e || (_e = __template(["\n grid-column: span 3;\n "]))), media.small(_f || (_f = __template(["\n grid-column: 1 / -1;\n "]))), media.small(_g || (_g = __template(["\n grid-row: span 2;\n "]))), media.small(_h || (_h = __template(["\n grid-row: span 2;\n "]))), media.medium(_i || (_i = __template(["\n grid-row: span 3;\n "]))), media.medium(_j || (_j = __template(["\n grid-row: 1 / -1;\n "]))));
640
662
  const NO_WIDGETS = [];
641
663
  const NO_LAYOUT = {};
642
664
  function WidgetGroup(props) {
@@ -666,7 +688,9 @@ function WidgetGroup(props) {
666
688
  }, index);
667
689
  }
668
690
  if (widgetConfig.component) {
669
- return /* @__PURE__ */jsxRuntime.jsx(WidgetContainer, _objectSpread({}, widgetConfig), index);
691
+ return /* @__PURE__ */jsxRuntime.jsx(WidgetContainer, {
692
+ ...widgetConfig
693
+ }, index);
670
694
  }
671
695
  return /* @__PURE__ */jsxRuntime.jsxs(ui.Box, {
672
696
  children: [widgetConfig.name, " is missing widget component"]
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/DashboardWidgetContainer.tsx","../src/versionedClient.ts","../src/containers/DashboardContext.tsx","../src/containers/WidgetContainer.tsx","../src/widgets/projectInfo/ProjectInfo.tsx","../src/widgets/projectInfo/index.ts","../src/widgets/projectUsers/ProjectUsers.tsx","../src/widgets/projectUsers/index.ts","../src/widgets/sanityTutorials/Tutorial.tsx","../src/widgets/sanityTutorials/dataAdapter.ts","../src/widgets/sanityTutorials/SanityTutorials.tsx","../src/widgets/sanityTutorials/index.ts","../src/components/DashboardLayout.tsx","../src/components/WidgetGroup.tsx","../src/containers/Dashboard.tsx","../src/plugin.tsx"],"sourcesContent":["import React, {forwardRef} from 'react'\nimport {Card, Box, Heading} from '@sanity/ui'\nimport styled from 'styled-components'\n\nconst Root = styled(Card)`\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n box-sizing: border-box;\n position: relative;\n`\n\nconst Header = styled(Card)`\n position: sticky;\n top: 0;\n z-index: 2;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n`\n\nconst Footer = styled(Card)`\n position: sticky;\n overflow: hidden;\n bottom: 0;\n z-index: 2;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n margin-top: auto;\n`\n\nconst Content = styled(Box)`\n position: relative;\n z-index: 1;\n height: stretch;\n min-height: 21.5em;\n\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n overflow-y: auto;\n outline: none;\n }\n`\n\ninterface DashboardWidgetProps {\n header?: string\n children: React.ReactNode\n footer?: React.ReactNode\n}\n\nexport const DashboardWidgetContainer = forwardRef(function DashboardWidgetContainer(\n props: DashboardWidgetProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const {header, children, footer} = props\n\n return (\n <Root radius={3} display=\"flex\" ref={ref}>\n {header && (\n <Header borderBottom paddingX={3} paddingY={4}>\n <Heading size={1} textOverflow=\"ellipsis\">\n {header}\n </Heading>\n </Header>\n )}\n {children && <Content>{children}</Content>}\n {footer && <Footer borderTop>{footer}</Footer>}\n </Root>\n )\n})\n","import {useClient} from 'sanity'\n\nexport function useVersionedClient() {\n return useClient({apiVersion: '1'})\n}\n","import {createContext, useContext} from 'react'\nimport {DashboardConfig} from '../types'\n\nexport const DashboardContext = createContext<DashboardConfig>({widgets: []})\n\nexport function useDashboardConfig(): DashboardConfig {\n return useContext(DashboardContext)\n}\n","import React, {createElement, useMemo} from 'react'\nimport {useDashboardConfig} from './DashboardContext'\nimport {Card} from '@sanity/ui'\nimport {DashboardWidget} from '../types'\n\nexport function WidgetContainer(props: DashboardWidget) {\n const config = useDashboardConfig()\n const layout = useMemo(\n () => ({\n ...(props.layout || {}),\n ...(config.layout || {}),\n }),\n [props.layout, config.layout]\n )\n\n return (\n <Card shadow={1} data-width={layout.width} data-height={layout.height}>\n {createElement(props.component, {})}\n </Card>\n )\n}\n","import React, {useEffect, useMemo, useState} from 'react'\nimport {Box, Card, Stack, Heading, Grid, Label, Text, Code, Button} from '@sanity/ui'\nimport {useVersionedClient} from '../../versionedClient'\nimport {Subscription} from 'rxjs'\nimport {WidgetContainer} from '../../containers/WidgetContainer'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {DashboardWidget} from '../../types'\n\nexport interface ProjectInfoProps {\n __experimental_before?: DashboardWidget[]\n data: ProjectData[]\n}\n\ninterface App {\n title: string\n rows?: App[]\n value?: string | {error: string}\n}\n\ninterface ProjectData {\n title: string\n category?: string\n}\n\nfunction isUrl(url?: string) {\n return url && /^https?:\\/\\//.test(`${url}`)\n}\n\nfunction getGraphQlUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/graphql/${dataset}/default`\n}\n\nfunction getGroqUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/groq/${dataset}`\n}\n\nfunction getManageUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}`\n}\n\nconst NO_EXPERIMENTAL: DashboardWidget[] = []\nconst NO_DATA: ProjectData[] = []\n\nexport function ProjectInfo(props: ProjectInfoProps) {\n const {__experimental_before = NO_EXPERIMENTAL, data = NO_DATA} = props\n const [studioHost, setStudioHost] = useState<string | {error: string} | undefined>()\n const [graphqlApi, setGraphQlApi] = useState<string | {error: string} | undefined>()\n const versionedClient = useVersionedClient()\n const {projectId = 'unknown', dataset = 'unknown'} = versionedClient.config()\n\n useEffect(() => {\n const subscriptions: Subscription[] = []\n\n subscriptions.push(\n versionedClient.observable\n .request<{studioHost: string}>({uri: `/projects/${projectId}`})\n .subscribe({\n next: (result) => {\n const {studioHost: host} = result\n setStudioHost(host ? `https://${host}.sanity.studio` : undefined)\n },\n error: (error) => {\n console.error('Error while looking for studioHost', error)\n setStudioHost({\n error: 'Something went wrong while looking up studioHost. See console.',\n })\n },\n })\n )\n\n // ping assumed graphql endpoint\n subscriptions.push(\n versionedClient.observable\n .request({\n method: 'HEAD',\n uri: `/graphql/${dataset}/default`,\n })\n .subscribe({\n next: () => setGraphQlApi(getGraphQlUrl(projectId, dataset)),\n error: (error) => {\n if (error.statusCode === 404) {\n setGraphQlApi(undefined)\n } else {\n console.error('Error while looking for graphqlApi', error)\n setGraphQlApi({\n error: 'Something went wrong while looking up graphqlApi. See console.',\n })\n }\n },\n })\n )\n\n return () => {\n subscriptions.forEach((s) => s.unsubscribe())\n }\n }, [dataset, projectId, versionedClient, setGraphQlApi, setStudioHost])\n\n const assembleTableRows = useMemo(() => {\n let result: App[] = [\n {\n title: 'Sanity project',\n rows: [\n {title: 'Project ID', value: projectId},\n {title: 'Dataset', value: dataset},\n ],\n },\n ]\n\n // Handle any apps\n const apps: App[] = [\n studioHost ? {title: 'Studio', value: studioHost} : null,\n ...data.filter((item) => item.category === 'apps'),\n ].filter((a): a is App => !!a)\n if (apps.length > 0) {\n result = result.concat([{title: 'Apps', rows: apps}])\n }\n\n // Handle APIs\n result = result.concat(\n [\n {\n title: 'APIs',\n rows: [\n {title: 'GROQ', value: getGroqUrl(projectId, dataset)},\n {\n title: 'GraphQL',\n value: (typeof graphqlApi === 'object' ? 'Error' : graphqlApi) ?? 'Not deployed',\n },\n ],\n },\n ],\n data.filter((item) => item.category === 'apis')\n )\n\n // Handle whatever else there might be\n const otherStuff: Record<string, ProjectData[]> = {}\n data.forEach((item) => {\n if (item.category && item.category !== 'apps' && item.category !== 'apis') {\n if (!otherStuff[item.category]) {\n otherStuff[item.category] = []\n }\n otherStuff[item.category].push(item)\n }\n })\n Object.keys(otherStuff).forEach((category) => {\n result.push({title: category, rows: otherStuff[category]})\n })\n\n return result\n }, [graphqlApi, studioHost, projectId, dataset, data])\n\n return (\n <>\n {__experimental_before.map((widgetConfig, idx) => (\n <WidgetContainer key={idx} {...widgetConfig} />\n ))}\n <Box height=\"fill\" marginTop={__experimental_before?.length > 0 ? 4 : 0}>\n <DashboardWidgetContainer\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Manage project\"\n as=\"a\"\n href={getManageUrl(projectId)}\n />\n }\n >\n <Card\n paddingY={4}\n radius={2}\n role=\"table\"\n aria-label=\"Project info\"\n aria-describedby=\"project_info_table\"\n >\n <Stack space={4}>\n <Box paddingX={3} as=\"header\">\n <Heading size={1} as=\"h2\" id=\"project_info_table\">\n Project info\n </Heading>\n </Box>\n {assembleTableRows.map((item) => {\n if (!item || !item.rows) {\n return null\n }\n\n return (\n <Stack key={item.title} space={3}>\n <Card borderBottom padding={3}>\n <Label size={0} muted role=\"columnheader\">\n {item.title}\n </Label>\n </Card>\n <Stack space={4} paddingX={3} role=\"rowgroup\">\n {item.rows.map((row) => {\n return (\n <Grid key={row.title} columns={2} role=\"row\">\n <Text weight=\"medium\" role=\"rowheader\">\n {row.title}\n </Text>\n {typeof row.value === 'object' && (\n <Text size={1}>{row.value?.error}</Text>\n )}\n {typeof row.value === 'string' && (\n <>\n {isUrl(row.value) ? (\n <Text size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n <a href={row.value}>{row.value}</a>\n </Text>\n ) : (\n <Code size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n {row.value}\n </Code>\n )}\n </>\n )}\n </Grid>\n )\n })}\n </Stack>\n </Stack>\n )\n })}\n </Stack>\n </Card>\n </DashboardWidgetContainer>\n </Box>\n </>\n )\n}\n","import {ProjectInfo} from './ProjectInfo'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function projectInfoWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectInfo,\n layout: config?.layout ?? {width: 'medium'},\n }\n}\n","import React, {useCallback, useEffect, useState} from 'react'\nimport {from} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\nimport {Stack, Spinner, Card, Box, Text, Button} from '@sanity/ui'\nimport {RobotIcon} from '@sanity/icons'\nimport styled from 'styled-components'\nimport {DefaultPreview, useUserStore} from 'sanity'\nimport {useVersionedClient} from '../../versionedClient'\nimport {User} from 'sanity'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\n\nconst AvatarWrapper = styled(Card)`\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n`\n\nfunction getInviteUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}/team/invite`\n}\n\ninterface Member {\n id: string\n role: string\n isRobot: boolean\n}\n\ninterface Project {\n id: string\n members: Member[]\n}\n\nexport function ProjectUsers() {\n const [project, setProject] = useState<Project | undefined>()\n const [users, setUsers] = useState<User[] | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const userStore = useUserStore()\n const versionedClient = useVersionedClient()\n\n const fetchData = useCallback(() => {\n const {projectId} = versionedClient.config()\n const subscription = versionedClient.observable\n .request<Project>({\n uri: `/projects/${projectId}`,\n })\n .pipe(\n switchMap((_project) =>\n from(userStore.getUsers(_project.members.map((mem) => mem.id))).pipe(\n map((_users) => ({project: _project, users: _users}))\n )\n )\n )\n .subscribe({\n next: ({users: _users, project: _project}) => {\n setProject(_project)\n setUsers(\n (Array.isArray(_users) ? _users : [_users]).sort((userA, userB) =>\n sortUsersByRobotStatus(userA, userB, _project)\n )\n )\n },\n error: (e: Error) => setError(e),\n })\n\n return () => subscription.unsubscribe()\n }, [userStore, versionedClient])\n\n useEffect(() => fetchData(), [fetchData])\n\n const handleRetryFetch = useCallback(() => fetchData(), [fetchData])\n\n const isLoading = !users || !project\n\n if (error) {\n return (\n <DashboardWidgetContainer header=\"Project users\">\n <Box padding={4}>\n <Text>\n Something went wrong while fetching data. You could{' '}\n <a onClick={handleRetryFetch} title=\"Retry users fetch\" style={{cursor: 'pointer'}}>\n retry\n </a>\n ..?\n </Text>\n </Box>\n </DashboardWidgetContainer>\n )\n }\n\n return (\n <DashboardWidgetContainer\n header=\"Project users\"\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Invite members\"\n as=\"a\"\n loading={isLoading}\n href={isLoading ? undefined : getInviteUrl(project.id)}\n />\n }\n >\n {isLoading && (\n <Box paddingY={5} paddingX={2}>\n <Stack space={4}>\n <Text align=\"center\" muted size={1}>\n <Spinner />\n </Text>\n <Text align=\"center\" size={1} muted>\n Loading items...\n </Text>\n </Stack>\n </Box>\n )}\n\n {!isLoading && (\n <Stack space={3} padding={3}>\n {users?.map((user) => {\n const membership = project.members.find((member) => member.id === user.id)\n const media = membership?.isRobot ? (\n <Text size={3}>\n <RobotIcon />\n </Text>\n ) : (\n <AvatarWrapper tone=\"transparent\">\n {user?.imageUrl && <img src={user.imageUrl} alt={user?.displayName} />}\n </AvatarWrapper>\n )\n return (\n <Box key={user.id}>\n <DefaultPreview\n title={user.displayName}\n subtitle={membership?.role}\n media={media}\n />\n </Box>\n )\n })}\n </Stack>\n )}\n </DashboardWidgetContainer>\n )\n}\n\nfunction sortUsersByRobotStatus(userA: User, userB: User, project: Project) {\n const {members} = project\n const membershipA = members.find((member) => member.id === userA?.id)\n const membershipB = members.find((member) => member.id === userB?.id)\n if (membershipA?.isRobot) {\n return 1\n }\n if (membershipB?.isRobot) {\n return -1\n }\n return 0\n}\n","import {ProjectUsers} from './ProjectUsers'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function projectUsersWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectUsers,\n layout: config?.layout,\n }\n}\n","import React from 'react'\nimport {Card, Box, Heading, Flex, Text, Stack} from '@sanity/ui'\nimport {PlayIcon} from '@sanity/icons'\nimport styled from 'styled-components'\n\nconst PlayIconBox = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2.75em;\n height: 2.75em;\n border-radius: 50%;\n background: ${({theme}) => theme.sanity.color.card.enabled.bg};\n opacity: 0.75;\n }\n`\n\nconst Root = styled(Flex)`\n &:hover {\n ${PlayIconBox} {\n &:before {\n opacity: 1;\n }\n }\n }\n`\n\nconst PosterCard = styled(Card)`\n width: 100%;\n padding-bottom: calc(9 / 16 * 100%);\n position: relative;\n`\n\nconst Poster = styled.img`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n\n &:not([src]) {\n display: none;\n }\n`\n\nexport interface TutorialProps {\n title: string\n posterURL?: string\n href: string\n showPlayIcon?: boolean\n presenterName?: string\n presenterSubtitle?: string\n}\n\nexport function Tutorial(props: TutorialProps) {\n const {title, posterURL, showPlayIcon, href, presenterName, presenterSubtitle} = props\n\n return (\n <Root flex={1}>\n <Card\n sizing=\"border\"\n flex={1}\n padding={2}\n radius={2}\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{position: 'relative'}}\n >\n <Flex direction=\"column\" style={{height: '100%'}}>\n {posterURL && (\n <PosterCard marginBottom={1}>\n <Poster src={posterURL} />\n {showPlayIcon && (\n <PlayIconBox display=\"flex\">\n <Text align=\"center\">\n <PlayIcon />\n </Text>\n </PlayIconBox>\n )}\n </PosterCard>\n )}\n <Flex direction=\"column\" justify=\"space-between\" paddingY={2} flex={1}>\n <Heading as=\"h3\" size={1}>\n {title}\n </Heading>\n <Box marginTop={4}>\n <Stack space={2} flex={1}>\n <Text size={1}>{presenterName}</Text>\n <Text size={0} style={{opacity: 0.7}}>\n {presenterSubtitle}\n </Text>\n </Stack>\n </Box>\n </Flex>\n </Flex>\n </Card>\n </Root>\n )\n}\n","import {useMemo} from 'react'\nimport {useVersionedClient} from '../../versionedClient'\nimport imageUrlBuilder from '@sanity/image-url'\n\nconst tutorialsProjectConfig = {\n projectId: '3do82whm',\n dataset: 'next',\n}\n\nexport interface Guide {\n _type?: string\n slug?: {current: string}\n presenter?: {\n name?: string\n }\n}\n\nexport interface FeedItem {\n _id: string\n title?: string\n poster?: string\n category?: string\n guideOrTutorial?: Guide\n externalLink?: string\n presenter?: {\n name?: string\n }\n hasVideo?: boolean\n}\n\nexport function useDataAdapter() {\n const versionedClient = useVersionedClient()\n return useMemo(\n () => ({\n getFeed: (templateRepoId: string) => {\n const uri = templateRepoId\n ? `/addons/dashboard?templateRepoId=${templateRepoId}`\n : '/addons/dashboard'\n return versionedClient.observable.request<{items: FeedItem[]}>({\n uri,\n withCredentials: false,\n })\n },\n urlBuilder: imageUrlBuilder(tutorialsProjectConfig),\n }),\n [versionedClient]\n )\n}\n","import React, {useEffect, useState} from 'react'\nimport {Flex} from '@sanity/ui'\nimport {Tutorial} from './Tutorial'\nimport {FeedItem, Guide, useDataAdapter} from './dataAdapter'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\n\nfunction createUrl(slug: {current: string}, type?: string) {\n if (type === 'tutorial') {\n return `https://www.sanity.io/docs/tutorials/${slug.current}`\n } else if (type === 'guide') {\n return `https://www.sanity.io/docs/guides/${slug.current}`\n }\n return false\n}\n\nexport interface SanityTutorialsProps {\n templateRepoId: string\n}\n\nexport function SanityTutorials(props: SanityTutorialsProps) {\n const {templateRepoId} = props\n const [feedItems, setFeedItems] = useState<FeedItem[]>([])\n\n const {getFeed, urlBuilder} = useDataAdapter()\n\n useEffect(() => {\n const subscription = getFeed(templateRepoId).subscribe((response) => {\n setFeedItems(response.items)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, [setFeedItems, getFeed, templateRepoId])\n\n const title = 'Learn about Sanity'\n\n return (\n <DashboardWidgetContainer header={title}>\n <Flex as=\"ul\" overflow=\"auto\" align=\"stretch\" paddingY={2}>\n {feedItems?.map((feedItem, index) => {\n if (!feedItem.title || (!feedItem.guideOrTutorial && !feedItem.externalLink)) {\n return null\n }\n const presenter = feedItem.presenter || feedItem.guideOrTutorial?.presenter || {}\n const subtitle = feedItem.category\n const {guideOrTutorial = {} as Guide} = feedItem\n const href =\n (guideOrTutorial.slug\n ? createUrl(guideOrTutorial.slug, guideOrTutorial._type)\n : feedItem.externalLink) || feedItem.externalLink\n\n return (\n <Flex\n as=\"li\"\n key={feedItem._id}\n paddingRight={index < feedItems?.length - 1 ? 1 : 3}\n paddingLeft={index === 0 ? 3 : 0}\n align=\"stretch\"\n style={{minWidth: 272, width: '30%'}}\n >\n <Tutorial\n title={feedItem.title}\n href={href ?? ''}\n presenterName={presenter.name}\n presenterSubtitle={subtitle}\n showPlayIcon={feedItem.hasVideo}\n posterURL={\n feedItem.poster ? urlBuilder.image(feedItem.poster).height(360).url() : undefined\n }\n />\n </Flex>\n )\n })}\n </Flex>\n </DashboardWidgetContainer>\n )\n}\n","import {SanityTutorials} from './SanityTutorials'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function sanityTutorialsWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'sanity-tutorials',\n component: SanityTutorials,\n layout: config?.layout ?? {width: 'full'},\n }\n}\n","import React, {PropsWithChildren} from 'react'\nimport {Container} from '@sanity/ui'\n\nexport function DashboardLayout(props: PropsWithChildren<{}>) {\n return (\n <Container width={4} padding={4} sizing=\"border\" style={{height: '100%', overflowY: 'auto'}}>\n {props.children}\n </Container>\n )\n}\n","import React from 'react'\nimport styled, {css} from 'styled-components'\nimport {Box, Card, Grid, Text} from '@sanity/ui'\nimport {WidgetContainer} from '../containers/WidgetContainer'\nimport {DashboardConfig, LayoutConfig, DashboardWidget} from '../types'\n\nconst media = {\n small: (...args: Parameters<typeof css>) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n ${css(...args)}\n }\n `,\n medium: (...args: Parameters<typeof css>) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[2]}px) {\n ${css(...args)}\n }\n `,\n}\n\nconst Root = styled(Grid)`\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n & > div {\n overflow: hidden;\n }\n\n & > div[data-width='medium'] {\n ${media.small`\n grid-column: span 2;\n `}\n }\n\n & > div[data-width='large'] {\n ${media.small`\n grid-column: span 2;\n `}\n\n ${media.medium`\n grid-column: span 3;\n `}\n }\n\n & > div[data-width='full'] {\n ${media.small`\n grid-column: 1 / -1;\n `}\n }\n\n & > div[data-height='medium'] {\n ${media.small`\n grid-row: span 2;\n `}\n }\n\n & > div[data-height='large'] {\n ${media.small`\n grid-row: span 2;\n `}\n\n ${media.medium`\n grid-row: span 3;\n `}\n }\n\n & > div[data-height='full'] {\n ${media.medium`\n grid-row: 1 / -1;\n `}\n }\n`\n\nexport interface WidgetGroupProps {\n config: Partial<DashboardConfig>\n}\n\nconst NO_WIDGETS: DashboardWidget[] = []\nconst NO_LAYOUT: LayoutConfig = {}\n\nexport function WidgetGroup(props: WidgetGroupProps) {\n const {\n config: {layout = NO_LAYOUT, widgets = NO_WIDGETS},\n } = props\n return (\n <Root\n autoFlow=\"row dense\"\n data-width={layout.width || 'auto'}\n data-height={layout.height || 'auto'}\n gap={4}\n >\n {widgets.length ? null : (\n <Card padding={4} shadow={1} tone=\"primary\">\n <Text align=\"center\">Add some widgets to populate this space.</Text>\n </Card>\n )}\n {widgets.map((widgetConfig, index) => {\n if (widgetConfig.type === '__experimental_group') {\n return <WidgetGroup key={index} config={widgetConfig} />\n }\n if (widgetConfig.component) {\n return <WidgetContainer key={index} {...widgetConfig} />\n }\n return <Box key={index}>{widgetConfig.name} is missing widget component</Box>\n })}\n </Root>\n )\n}\n","import React from 'react'\nimport {DashboardLayout} from '../components/DashboardLayout'\nimport {WidgetGroup} from '../components/WidgetGroup'\nimport {DashboardContext} from './DashboardContext'\nimport {DashboardConfig} from '../types'\n\nexport function Dashboard({config}: {config: DashboardConfig}) {\n if (!config) {\n return null\n }\n\n return (\n <DashboardContext.Provider value={config}>\n <DashboardLayout>\n <WidgetGroup config={config} />\n </DashboardLayout>\n </DashboardContext.Provider>\n )\n}\n","import React, {ComponentType, CSSProperties} from 'react'\nimport {Dashboard} from './containers/Dashboard'\nimport {definePlugin} from 'sanity'\nimport {DashboardConfig, DashboardWidget, LayoutConfig} from './types'\n\nconst strokeStyle: CSSProperties = {\n stroke: 'currentColor',\n strokeWidth: 1.2,\n}\n\nconst DashboardIcon = () => (\n <svg\n data-sanity-icon\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"xMidYMid\"\n width=\"1em\"\n height=\"1em\"\n >\n <path d=\"M19.5 19.5H5.5V5.5H19.5V19.5Z\" style={strokeStyle} />\n <path d=\"M5.5 12.5H19.5\" style={strokeStyle} />\n <path d=\"M14.5 19.5V12.5M10.5 12.5V5.5\" style={strokeStyle} />\n </svg>\n)\n\nexport interface DashboardPluginConfig {\n /**\n * Dashboard tool title\n */\n title?: string\n /**\n * Dashboard tool name (used in url path)\n */\n name?: string\n /**\n * Dashboard tool icon\n */\n icon?: ComponentType\n widgets?: DashboardWidget[]\n\n /**\n * Will be used for widgets that do not define a layout directly.\n */\n defaultLayout?: LayoutConfig\n}\n\nexport const dashboardTool = definePlugin<DashboardPluginConfig>((config = {}) => {\n const pluginConfig: DashboardConfig = {\n layout: config.defaultLayout ?? {},\n widgets: config.widgets ?? [],\n }\n\n const title = config.title ?? 'Dashboard'\n const name = config.name ?? 'dashboard'\n const icon = config.icon ?? DashboardIcon\n\n return {\n name: 'dashboard',\n tools: (prev, context) => {\n return [\n ...prev,\n {\n title,\n name,\n icon,\n component: () => <Dashboard config={pluginConfig} />,\n },\n ]\n },\n }\n})\n"],"names":["Root","styled","Card","Header","Footer","Content","Box","theme","sanity","media","DashboardWidgetContainer","forwardRef","props","ref","header","children","footer","jsxs","radius","display","jsx","borderBottom","paddingX","paddingY","Heading","size","textOverflow","borderTop","useVersionedClient","useClient","apiVersion","DashboardContext","createContext","widgets","useDashboardConfig","useContext","WidgetContainer","config","layout","useMemo","shadow","width","height","createElement","component","isUrl","url","test","getGraphQlUrl","projectId","dataset","getGroqUrl","getManageUrl","NO_EXPERIMENTAL","NO_DATA","ProjectInfo","__experimental_before","data","studioHost","setStudioHost","useState","graphqlApi","setGraphQlApi","versionedClient","useEffect","subscriptions","push","observable","request","uri","subscribe","next","result","host","error","console","method","statusCode","forEach","s","unsubscribe","assembleTableRows","_a","title","rows","value","apps","filter","item","category","a","length","concat","otherStuff","Object","keys","Fragment","map","widgetConfig","idx","marginTop","Button","style","mode","tone","text","as","href","role","Stack","space","id","padding","Label","muted","row","Grid","columns","Text","weight","wordBreak","Code","projectInfoWidget","name","AvatarWrapper","getInviteUrl","ProjectUsers","project","setProject","users","setUsers","setError","userStore","useUserStore","fetchData","useCallback","subscription","pipe","switchMap","_project","from","getUsers","members","mem","_users","Array","isArray","sort","userA","userB","sortUsersByRobotStatus","e","handleRetryFetch","isLoading","onClick","cursor","loading","align","Spinner","user","membership","find","member","isRobot","RobotIcon","imageUrl","src","alt","displayName","DefaultPreview","subtitle","membershipA","membershipB","projectUsersWidget","PlayIconBox","color","card","enabled","bg","Flex","PosterCard","Poster","default","img","Tutorial","posterURL","showPlayIcon","presenterName","presenterSubtitle","flex","sizing","target","rel","position","direction","marginBottom","PlayIcon","justify","opacity","tutorialsProjectConfig","useDataAdapter","getFeed","templateRepoId","withCredentials","urlBuilder","imageUrlBuilder","createUrl","slug","type","current","SanityTutorials","feedItems","setFeedItems","response","items","overflow","feedItem","index","guideOrTutorial","externalLink","presenter","_type","paddingRight","paddingLeft","minWidth","hasVideo","poster","image","_id","sanityTutorialsWidget","DashboardLayout","Container","overflowY","small","css","medium","NO_WIDGETS","NO_LAYOUT","WidgetGroup","autoFlow","gap","Dashboard","Provider","strokeStyle","stroke","strokeWidth","DashboardIcon","viewBox","fill","xmlns","preserveAspectRatio","d","dashboardTool","definePlugin","_b","_c","_d","_e","pluginConfig","defaultLayout","icon","tools","prev","context"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/DashboardWidgetContainer.tsx","../src/versionedClient.ts","../src/containers/DashboardContext.tsx","../src/containers/WidgetContainer.tsx","../src/widgets/projectInfo/ProjectInfo.tsx","../src/widgets/projectInfo/index.ts","../src/widgets/projectUsers/ProjectUsers.tsx","../src/widgets/projectUsers/index.ts","../src/widgets/sanityTutorials/Tutorial.tsx","../src/widgets/sanityTutorials/dataAdapter.ts","../src/widgets/sanityTutorials/SanityTutorials.tsx","../src/widgets/sanityTutorials/index.ts","../src/components/DashboardLayout.tsx","../src/components/WidgetGroup.tsx","../src/containers/Dashboard.tsx","../src/plugin.tsx"],"sourcesContent":["import React, {forwardRef} from 'react'\nimport {Card, Box, Heading} from '@sanity/ui'\nimport styled from 'styled-components'\n\nconst Root = styled(Card)`\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n box-sizing: border-box;\n position: relative;\n`\n\nconst Header = styled(Card)`\n position: sticky;\n top: 0;\n z-index: 2;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n`\n\nconst Footer = styled(Card)`\n position: sticky;\n overflow: hidden;\n bottom: 0;\n z-index: 2;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n margin-top: auto;\n`\n\nconst Content = styled(Box)`\n position: relative;\n z-index: 1;\n height: stretch;\n min-height: 21.5em;\n\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n overflow-y: auto;\n outline: none;\n }\n`\n\ninterface DashboardWidgetProps {\n header?: string\n children: React.ReactNode\n footer?: React.ReactNode\n}\n\nexport const DashboardWidgetContainer = forwardRef(function DashboardWidgetContainer(\n props: DashboardWidgetProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const {header, children, footer} = props\n\n return (\n <Root radius={3} display=\"flex\" ref={ref}>\n {header && (\n <Header borderBottom paddingX={3} paddingY={4}>\n <Heading size={1} textOverflow=\"ellipsis\">\n {header}\n </Heading>\n </Header>\n )}\n {children && <Content>{children}</Content>}\n {footer && <Footer borderTop>{footer}</Footer>}\n </Root>\n )\n})\n","import {useClient} from 'sanity'\n\nexport function useVersionedClient() {\n return useClient({apiVersion: '1'})\n}\n","import {createContext, useContext} from 'react'\nimport {DashboardConfig} from '../types'\n\nexport const DashboardContext = createContext<DashboardConfig>({widgets: []})\n\nexport function useDashboardConfig(): DashboardConfig {\n return useContext(DashboardContext)\n}\n","import React, {createElement, useMemo} from 'react'\nimport {useDashboardConfig} from './DashboardContext'\nimport {Card} from '@sanity/ui'\nimport {DashboardWidget} from '../types'\n\nexport function WidgetContainer(props: DashboardWidget) {\n const config = useDashboardConfig()\n const layout = useMemo(\n () => ({\n ...(props.layout || {}),\n ...(config.layout || {}),\n }),\n [props.layout, config.layout]\n )\n\n return (\n <Card shadow={1} data-width={layout.width} data-height={layout.height}>\n {createElement(props.component, {})}\n </Card>\n )\n}\n","import React, {useEffect, useMemo, useState} from 'react'\nimport {Box, Card, Stack, Heading, Grid, Label, Text, Code, Button} from '@sanity/ui'\nimport {useVersionedClient} from '../../versionedClient'\nimport {Subscription} from 'rxjs'\nimport {WidgetContainer} from '../../containers/WidgetContainer'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {DashboardWidget} from '../../types'\n\nexport interface ProjectInfoProps {\n __experimental_before?: DashboardWidget[]\n data: ProjectData[]\n}\n\ninterface App {\n title: string\n rows?: App[]\n value?: string | {error: string}\n}\n\ninterface ProjectData {\n title: string\n category?: string\n}\n\nfunction isUrl(url?: string) {\n return url && /^https?:\\/\\//.test(`${url}`)\n}\n\nfunction getGraphQlUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/graphql/${dataset}/default`\n}\n\nfunction getGroqUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/groq/${dataset}`\n}\n\nfunction getManageUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}`\n}\n\nconst NO_EXPERIMENTAL: DashboardWidget[] = []\nconst NO_DATA: ProjectData[] = []\n\nexport function ProjectInfo(props: ProjectInfoProps) {\n const {__experimental_before = NO_EXPERIMENTAL, data = NO_DATA} = props\n const [studioHost, setStudioHost] = useState<string | {error: string} | undefined>()\n const [graphqlApi, setGraphQlApi] = useState<string | {error: string} | undefined>()\n const versionedClient = useVersionedClient()\n const {projectId = 'unknown', dataset = 'unknown'} = versionedClient.config()\n\n useEffect(() => {\n const subscriptions: Subscription[] = []\n\n subscriptions.push(\n versionedClient.observable\n .request<{studioHost: string}>({uri: `/projects/${projectId}`})\n .subscribe({\n next: (result) => {\n const {studioHost: host} = result\n setStudioHost(host ? `https://${host}.sanity.studio` : undefined)\n },\n error: (error) => {\n console.error('Error while looking for studioHost', error)\n setStudioHost({\n error: 'Something went wrong while looking up studioHost. See console.',\n })\n },\n })\n )\n\n // ping assumed graphql endpoint\n subscriptions.push(\n versionedClient.observable\n .request({\n method: 'HEAD',\n uri: `/graphql/${dataset}/default`,\n })\n .subscribe({\n next: () => setGraphQlApi(getGraphQlUrl(projectId, dataset)),\n error: (error) => {\n if (error.statusCode === 404) {\n setGraphQlApi(undefined)\n } else {\n console.error('Error while looking for graphqlApi', error)\n setGraphQlApi({\n error: 'Something went wrong while looking up graphqlApi. See console.',\n })\n }\n },\n })\n )\n\n return () => {\n subscriptions.forEach((s) => s.unsubscribe())\n }\n }, [dataset, projectId, versionedClient, setGraphQlApi, setStudioHost])\n\n const assembleTableRows = useMemo(() => {\n let result: App[] = [\n {\n title: 'Sanity project',\n rows: [\n {title: 'Project ID', value: projectId},\n {title: 'Dataset', value: dataset},\n ],\n },\n ]\n\n // Handle any apps\n const apps: App[] = [\n studioHost ? {title: 'Studio', value: studioHost} : null,\n ...data.filter((item) => item.category === 'apps'),\n ].filter((a): a is App => !!a)\n if (apps.length > 0) {\n result = result.concat([{title: 'Apps', rows: apps}])\n }\n\n // Handle APIs\n result = result.concat(\n [\n {\n title: 'APIs',\n rows: [\n {title: 'GROQ', value: getGroqUrl(projectId, dataset)},\n {\n title: 'GraphQL',\n value: (typeof graphqlApi === 'object' ? 'Error' : graphqlApi) ?? 'Not deployed',\n },\n ],\n },\n ],\n data.filter((item) => item.category === 'apis')\n )\n\n // Handle whatever else there might be\n const otherStuff: Record<string, ProjectData[]> = {}\n data.forEach((item) => {\n if (item.category && item.category !== 'apps' && item.category !== 'apis') {\n if (!otherStuff[item.category]) {\n otherStuff[item.category] = []\n }\n otherStuff[item.category].push(item)\n }\n })\n Object.keys(otherStuff).forEach((category) => {\n result.push({title: category, rows: otherStuff[category]})\n })\n\n return result\n }, [graphqlApi, studioHost, projectId, dataset, data])\n\n return (\n <>\n {__experimental_before.map((widgetConfig, idx) => (\n <WidgetContainer key={idx} {...widgetConfig} />\n ))}\n <Box height=\"fill\" marginTop={__experimental_before?.length > 0 ? 4 : 0}>\n <DashboardWidgetContainer\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Manage project\"\n as=\"a\"\n href={getManageUrl(projectId)}\n />\n }\n >\n <Card\n paddingY={4}\n radius={2}\n role=\"table\"\n aria-label=\"Project info\"\n aria-describedby=\"project_info_table\"\n >\n <Stack space={4}>\n <Box paddingX={3} as=\"header\">\n <Heading size={1} as=\"h2\" id=\"project_info_table\">\n Project info\n </Heading>\n </Box>\n {assembleTableRows.map((item) => {\n if (!item || !item.rows) {\n return null\n }\n\n return (\n <Stack key={item.title} space={3}>\n <Card borderBottom padding={3}>\n <Label size={0} muted role=\"columnheader\">\n {item.title}\n </Label>\n </Card>\n <Stack space={4} paddingX={3} role=\"rowgroup\">\n {item.rows.map((row) => {\n return (\n <Grid key={row.title} columns={2} role=\"row\">\n <Text weight=\"medium\" role=\"rowheader\">\n {row.title}\n </Text>\n {typeof row.value === 'object' && (\n <Text size={1}>{row.value?.error}</Text>\n )}\n {typeof row.value === 'string' && (\n <>\n {isUrl(row.value) ? (\n <Text size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n <a href={row.value}>{row.value}</a>\n </Text>\n ) : (\n <Code size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n {row.value}\n </Code>\n )}\n </>\n )}\n </Grid>\n )\n })}\n </Stack>\n </Stack>\n )\n })}\n </Stack>\n </Card>\n </DashboardWidgetContainer>\n </Box>\n </>\n )\n}\n","import {ProjectInfo} from './ProjectInfo'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function projectInfoWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectInfo,\n layout: config?.layout ?? {width: 'medium'},\n }\n}\n","import React, {useCallback, useEffect, useState} from 'react'\nimport {from} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\nimport {Stack, Spinner, Card, Box, Text, Button} from '@sanity/ui'\nimport {RobotIcon} from '@sanity/icons'\nimport styled from 'styled-components'\nimport {DefaultPreview, useUserStore} from 'sanity'\nimport {useVersionedClient} from '../../versionedClient'\nimport {User} from 'sanity'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\n\nconst AvatarWrapper = styled(Card)`\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n`\n\nfunction getInviteUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}/team/invite`\n}\n\ninterface Member {\n id: string\n role: string\n isRobot: boolean\n}\n\ninterface Project {\n id: string\n members: Member[]\n}\n\nexport function ProjectUsers() {\n const [project, setProject] = useState<Project | undefined>()\n const [users, setUsers] = useState<User[] | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const userStore = useUserStore()\n const versionedClient = useVersionedClient()\n\n const fetchData = useCallback(() => {\n const {projectId} = versionedClient.config()\n const subscription = versionedClient.observable\n .request<Project>({\n uri: `/projects/${projectId}`,\n })\n .pipe(\n switchMap((_project) =>\n from(userStore.getUsers(_project.members.map((mem) => mem.id))).pipe(\n map((_users) => ({project: _project, users: _users}))\n )\n )\n )\n .subscribe({\n next: ({users: _users, project: _project}) => {\n setProject(_project)\n setUsers(\n (Array.isArray(_users) ? _users : [_users]).sort((userA, userB) =>\n sortUsersByRobotStatus(userA, userB, _project)\n )\n )\n },\n error: (e: Error) => setError(e),\n })\n\n return () => subscription.unsubscribe()\n }, [userStore, versionedClient])\n\n useEffect(() => fetchData(), [fetchData])\n\n const handleRetryFetch = useCallback(() => fetchData(), [fetchData])\n\n const isLoading = !users || !project\n\n if (error) {\n return (\n <DashboardWidgetContainer header=\"Project users\">\n <Box padding={4}>\n <Text>\n Something went wrong while fetching data. You could{' '}\n <a onClick={handleRetryFetch} title=\"Retry users fetch\" style={{cursor: 'pointer'}}>\n retry\n </a>\n ..?\n </Text>\n </Box>\n </DashboardWidgetContainer>\n )\n }\n\n return (\n <DashboardWidgetContainer\n header=\"Project users\"\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Invite members\"\n as=\"a\"\n loading={isLoading}\n href={isLoading ? undefined : getInviteUrl(project.id)}\n />\n }\n >\n {isLoading && (\n <Box paddingY={5} paddingX={2}>\n <Stack space={4}>\n <Text align=\"center\" muted size={1}>\n <Spinner />\n </Text>\n <Text align=\"center\" size={1} muted>\n Loading items...\n </Text>\n </Stack>\n </Box>\n )}\n\n {!isLoading && (\n <Stack space={3} padding={3}>\n {users?.map((user) => {\n const membership = project.members.find((member) => member.id === user.id)\n const media = membership?.isRobot ? (\n <Text size={3}>\n <RobotIcon />\n </Text>\n ) : (\n <AvatarWrapper tone=\"transparent\">\n {user?.imageUrl && <img src={user.imageUrl} alt={user?.displayName} />}\n </AvatarWrapper>\n )\n return (\n <Box key={user.id}>\n <DefaultPreview\n title={user.displayName}\n subtitle={membership?.role}\n media={media}\n />\n </Box>\n )\n })}\n </Stack>\n )}\n </DashboardWidgetContainer>\n )\n}\n\nfunction sortUsersByRobotStatus(userA: User, userB: User, project: Project) {\n const {members} = project\n const membershipA = members.find((member) => member.id === userA?.id)\n const membershipB = members.find((member) => member.id === userB?.id)\n if (membershipA?.isRobot) {\n return 1\n }\n if (membershipB?.isRobot) {\n return -1\n }\n return 0\n}\n","import {ProjectUsers} from './ProjectUsers'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function projectUsersWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectUsers,\n layout: config?.layout,\n }\n}\n","import React from 'react'\nimport {Card, Box, Heading, Flex, Text, Stack} from '@sanity/ui'\nimport {PlayIcon} from '@sanity/icons'\nimport styled from 'styled-components'\n\nconst PlayIconBox = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2.75em;\n height: 2.75em;\n border-radius: 50%;\n background: ${({theme}) => theme.sanity.color.card.enabled.bg};\n opacity: 0.75;\n }\n`\n\nconst Root = styled(Flex)`\n &:hover {\n ${PlayIconBox} {\n &:before {\n opacity: 1;\n }\n }\n }\n`\n\nconst PosterCard = styled(Card)`\n width: 100%;\n padding-bottom: calc(9 / 16 * 100%);\n position: relative;\n`\n\nconst Poster = styled.img`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n\n &:not([src]) {\n display: none;\n }\n`\n\nexport interface TutorialProps {\n title: string\n posterURL?: string\n href: string\n showPlayIcon?: boolean\n presenterName?: string\n presenterSubtitle?: string\n}\n\nexport function Tutorial(props: TutorialProps) {\n const {title, posterURL, showPlayIcon, href, presenterName, presenterSubtitle} = props\n\n return (\n <Root flex={1}>\n <Card\n sizing=\"border\"\n flex={1}\n padding={2}\n radius={2}\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{position: 'relative'}}\n >\n <Flex direction=\"column\" style={{height: '100%'}}>\n {posterURL && (\n <PosterCard marginBottom={1}>\n <Poster src={posterURL} />\n {showPlayIcon && (\n <PlayIconBox display=\"flex\">\n <Text align=\"center\">\n <PlayIcon />\n </Text>\n </PlayIconBox>\n )}\n </PosterCard>\n )}\n <Flex direction=\"column\" justify=\"space-between\" paddingY={2} flex={1}>\n <Heading as=\"h3\" size={1}>\n {title}\n </Heading>\n <Box marginTop={4}>\n <Stack space={2} flex={1}>\n <Text size={1}>{presenterName}</Text>\n <Text size={0} style={{opacity: 0.7}}>\n {presenterSubtitle}\n </Text>\n </Stack>\n </Box>\n </Flex>\n </Flex>\n </Card>\n </Root>\n )\n}\n","import {useMemo} from 'react'\nimport {useVersionedClient} from '../../versionedClient'\nimport imageUrlBuilder from '@sanity/image-url'\n\nconst tutorialsProjectConfig = {\n projectId: '3do82whm',\n dataset: 'next',\n}\n\nexport interface Guide {\n _type?: string\n slug?: {current: string}\n presenter?: {\n name?: string\n }\n}\n\nexport interface FeedItem {\n _id: string\n title?: string\n poster?: string\n category?: string\n guideOrTutorial?: Guide\n externalLink?: string\n presenter?: {\n name?: string\n }\n hasVideo?: boolean\n}\n\nexport function useDataAdapter() {\n const versionedClient = useVersionedClient()\n return useMemo(\n () => ({\n getFeed: (templateRepoId: string) => {\n const uri = templateRepoId\n ? `/addons/dashboard?templateRepoId=${templateRepoId}`\n : '/addons/dashboard'\n return versionedClient.observable.request<{items: FeedItem[]}>({\n uri,\n withCredentials: false,\n })\n },\n urlBuilder: imageUrlBuilder(tutorialsProjectConfig),\n }),\n [versionedClient]\n )\n}\n","import React, {useEffect, useState} from 'react'\nimport {Flex} from '@sanity/ui'\nimport {Tutorial} from './Tutorial'\nimport {FeedItem, Guide, useDataAdapter} from './dataAdapter'\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\n\nfunction createUrl(slug: {current: string}, type?: string) {\n if (type === 'tutorial') {\n return `https://www.sanity.io/docs/tutorials/${slug.current}`\n } else if (type === 'guide') {\n return `https://www.sanity.io/docs/guides/${slug.current}`\n }\n return false\n}\n\nexport interface SanityTutorialsProps {\n templateRepoId: string\n}\n\nexport function SanityTutorials(props: SanityTutorialsProps) {\n const {templateRepoId} = props\n const [feedItems, setFeedItems] = useState<FeedItem[]>([])\n\n const {getFeed, urlBuilder} = useDataAdapter()\n\n useEffect(() => {\n const subscription = getFeed(templateRepoId).subscribe((response) => {\n setFeedItems(response.items)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, [setFeedItems, getFeed, templateRepoId])\n\n const title = 'Learn about Sanity'\n\n return (\n <DashboardWidgetContainer header={title}>\n <Flex as=\"ul\" overflow=\"auto\" align=\"stretch\" paddingY={2}>\n {feedItems?.map((feedItem, index) => {\n if (!feedItem.title || (!feedItem.guideOrTutorial && !feedItem.externalLink)) {\n return null\n }\n const presenter = feedItem.presenter || feedItem.guideOrTutorial?.presenter || {}\n const subtitle = feedItem.category\n const {guideOrTutorial = {} as Guide} = feedItem\n const href =\n (guideOrTutorial.slug\n ? createUrl(guideOrTutorial.slug, guideOrTutorial._type)\n : feedItem.externalLink) || feedItem.externalLink\n\n return (\n <Flex\n as=\"li\"\n key={feedItem._id}\n paddingRight={index < feedItems?.length - 1 ? 1 : 3}\n paddingLeft={index === 0 ? 3 : 0}\n align=\"stretch\"\n style={{minWidth: 272, width: '30%'}}\n >\n <Tutorial\n title={feedItem.title}\n href={href ?? ''}\n presenterName={presenter.name}\n presenterSubtitle={subtitle}\n showPlayIcon={feedItem.hasVideo}\n posterURL={\n feedItem.poster ? urlBuilder.image(feedItem.poster).height(360).url() : undefined\n }\n />\n </Flex>\n )\n })}\n </Flex>\n </DashboardWidgetContainer>\n )\n}\n","import {SanityTutorials} from './SanityTutorials'\nimport {LayoutConfig, DashboardWidget} from '../../types'\n\nexport function sanityTutorialsWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'sanity-tutorials',\n component: SanityTutorials,\n layout: config?.layout ?? {width: 'full'},\n }\n}\n","import React, {PropsWithChildren} from 'react'\nimport {Container} from '@sanity/ui'\n\nexport function DashboardLayout(props: PropsWithChildren<{}>) {\n return (\n <Container width={4} padding={4} sizing=\"border\" style={{height: '100%', overflowY: 'auto'}}>\n {props.children}\n </Container>\n )\n}\n","import React from 'react'\nimport styled, {css} from 'styled-components'\nimport {Box, Card, Grid, Text} from '@sanity/ui'\nimport {WidgetContainer} from '../containers/WidgetContainer'\nimport {DashboardConfig, LayoutConfig, DashboardWidget} from '../types'\n\nconst media = {\n small: (...args: Parameters<typeof css>) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n ${css(...args)}\n }\n `,\n medium: (...args: Parameters<typeof css>) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[2]}px) {\n ${css(...args)}\n }\n `,\n}\n\nconst Root = styled(Grid)`\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n & > div {\n overflow: hidden;\n }\n\n & > div[data-width='medium'] {\n ${media.small`\n grid-column: span 2;\n `}\n }\n\n & > div[data-width='large'] {\n ${media.small`\n grid-column: span 2;\n `}\n\n ${media.medium`\n grid-column: span 3;\n `}\n }\n\n & > div[data-width='full'] {\n ${media.small`\n grid-column: 1 / -1;\n `}\n }\n\n & > div[data-height='medium'] {\n ${media.small`\n grid-row: span 2;\n `}\n }\n\n & > div[data-height='large'] {\n ${media.small`\n grid-row: span 2;\n `}\n\n ${media.medium`\n grid-row: span 3;\n `}\n }\n\n & > div[data-height='full'] {\n ${media.medium`\n grid-row: 1 / -1;\n `}\n }\n`\n\nexport interface WidgetGroupProps {\n config: Partial<DashboardConfig>\n}\n\nconst NO_WIDGETS: DashboardWidget[] = []\nconst NO_LAYOUT: LayoutConfig = {}\n\nexport function WidgetGroup(props: WidgetGroupProps) {\n const {\n config: {layout = NO_LAYOUT, widgets = NO_WIDGETS},\n } = props\n return (\n <Root\n autoFlow=\"row dense\"\n data-width={layout.width || 'auto'}\n data-height={layout.height || 'auto'}\n gap={4}\n >\n {widgets.length ? null : (\n <Card padding={4} shadow={1} tone=\"primary\">\n <Text align=\"center\">Add some widgets to populate this space.</Text>\n </Card>\n )}\n {widgets.map((widgetConfig, index) => {\n if (widgetConfig.type === '__experimental_group') {\n return <WidgetGroup key={index} config={widgetConfig} />\n }\n if (widgetConfig.component) {\n return <WidgetContainer key={index} {...widgetConfig} />\n }\n return <Box key={index}>{widgetConfig.name} is missing widget component</Box>\n })}\n </Root>\n )\n}\n","import React from 'react'\nimport {DashboardLayout} from '../components/DashboardLayout'\nimport {WidgetGroup} from '../components/WidgetGroup'\nimport {DashboardContext} from './DashboardContext'\nimport {DashboardConfig} from '../types'\n\nexport function Dashboard({config}: {config: DashboardConfig}) {\n if (!config) {\n return null\n }\n\n return (\n <DashboardContext.Provider value={config}>\n <DashboardLayout>\n <WidgetGroup config={config} />\n </DashboardLayout>\n </DashboardContext.Provider>\n )\n}\n","import React, {ComponentType, CSSProperties} from 'react'\nimport {Dashboard} from './containers/Dashboard'\nimport {definePlugin} from 'sanity'\nimport {DashboardConfig, DashboardWidget, LayoutConfig} from './types'\n\nconst strokeStyle: CSSProperties = {\n stroke: 'currentColor',\n strokeWidth: 1.2,\n}\n\nconst DashboardIcon = () => (\n <svg\n data-sanity-icon\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"xMidYMid\"\n width=\"1em\"\n height=\"1em\"\n >\n <path d=\"M19.5 19.5H5.5V5.5H19.5V19.5Z\" style={strokeStyle} />\n <path d=\"M5.5 12.5H19.5\" style={strokeStyle} />\n <path d=\"M14.5 19.5V12.5M10.5 12.5V5.5\" style={strokeStyle} />\n </svg>\n)\n\nexport interface DashboardPluginConfig {\n /**\n * Dashboard tool title\n */\n title?: string\n /**\n * Dashboard tool name (used in url path)\n */\n name?: string\n /**\n * Dashboard tool icon\n */\n icon?: ComponentType\n widgets?: DashboardWidget[]\n\n /**\n * Will be used for widgets that do not define a layout directly.\n */\n defaultLayout?: LayoutConfig\n}\n\nexport const dashboardTool = definePlugin<DashboardPluginConfig>((config = {}) => {\n const pluginConfig: DashboardConfig = {\n layout: config.defaultLayout ?? {},\n widgets: config.widgets ?? [],\n }\n\n const title = config.title ?? 'Dashboard'\n const name = config.name ?? 'dashboard'\n const icon = config.icon ?? DashboardIcon\n\n return {\n name: 'dashboard',\n tools: (prev, context) => {\n return [\n ...prev,\n {\n title,\n name,\n icon,\n component: () => <Dashboard config={pluginConfig} />,\n },\n ]\n },\n }\n})\n"],"names":["_a","_b","_c","_d","Root","styled","Card","__template","Header","Footer","Content","default","Box","_ref","theme","sanity","media","DashboardWidgetContainer","forwardRef","props","ref","header","children","footer","radius","display","jsx","borderBottom","paddingX","paddingY","Heading","size","textOverflow","borderTop","useVersionedClient","useClient","apiVersion","DashboardContext","createContext","widgets","useDashboardConfig","useContext","WidgetContainer","config","layout","useMemo","shadow","width","height","createElement","component","isUrl","url","test","concat","getGraphQlUrl","projectId","dataset","getGroqUrl","getManageUrl","NO_EXPERIMENTAL","NO_DATA","ProjectInfo","__experimental_before","data","studioHost","setStudioHost","useState","graphqlApi","setGraphQlApi","versionedClient","useEffect","subscriptions","push","observable","request","uri","subscribe","next","result","host","error","console","method","statusCode","forEach","s","unsubscribe","assembleTableRows","title","rows","value","apps","filter","item","category","a","length","otherStuff","Object","keys","jsxs","Fragment","map","widgetConfig","idx","marginTop","Button","style","mode","tone","text","as","href","role","Stack","space","id","padding","Label","muted","row","Grid","columns","Text","weight","wordBreak","Code","projectInfoWidget","name","AvatarWrapper","getInviteUrl","ProjectUsers","project","setProject","users","setUsers","setError","userStore","useUserStore","fetchData","useCallback","subscription","pipe","switchMap","_project","from","getUsers","members","mem","_users","_ref2","Array","isArray","sort","userA","userB","sortUsersByRobotStatus","e","handleRetryFetch","isLoading","onClick","cursor","loading","align","Spinner","user","membership","find","member","isRobot","RobotIcon","imageUrl","src","alt","displayName","DefaultPreview","subtitle","membershipA","membershipB","projectUsersWidget","PlayIconBox","_ref3","color","card","enabled","bg","Flex","PosterCard","Poster","img","Tutorial","posterURL","showPlayIcon","presenterName","presenterSubtitle","flex","sizing","target","rel","position","direction","marginBottom","PlayIcon","justify","opacity","tutorialsProjectConfig","useDataAdapter","getFeed","templateRepoId","withCredentials","urlBuilder","imageUrlBuilder","createUrl","slug","type","current","SanityTutorials","feedItems","setFeedItems","response","items","overflow","feedItem","index","guideOrTutorial","externalLink","presenter","_type","paddingRight","paddingLeft","minWidth","hasVideo","poster","image","_id","sanityTutorialsWidget","DashboardLayout","Container","overflowY","_e","_f","_g","_h","_i","_j","_k","small","css","_ref4","arguments","medium","_ref5","NO_WIDGETS","NO_LAYOUT","WidgetGroup","autoFlow","gap","Dashboard","_ref6","Provider","strokeStyle","stroke","strokeWidth","DashboardIcon","viewBox","fill","xmlns","preserveAspectRatio","d","dashboardTool","definePlugin","undefined","pluginConfig","defaultLayout","icon","tools","prev","context"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/dashboard",
3
- "version": "3.1.3",
3
+ "version": "3.1.5",
4
4
  "description": "Tool for rendering dashboard widgets",
5
5
  "keywords": [
6
6
  "sanity",
@@ -60,7 +60,7 @@
60
60
  "@sanity/incompatible-plugin": "^1.0.4",
61
61
  "@sanity/ui": "^1.0.0",
62
62
  "lodash": "^4.17.21",
63
- "rxjs": "^6.6.7"
63
+ "rxjs": "^7.0.0"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@commitlint/cli": "^17.2.0",
@@ -87,7 +87,7 @@
87
87
  "react-dom": "^18.2.0",
88
88
  "react-is": "^18.2.0",
89
89
  "rimraf": "^3.0.2",
90
- "sanity": "^3.1.4",
90
+ "sanity": "^3.14.4",
91
91
  "styled-components": "^5.3.6",
92
92
  "typescript": "^4.9.4"
93
93
  },