sanity-plugin-graph-view 3.0.0-v3-studio.1 → 3.0.0-v3-studio.2

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.
@@ -1 +1 @@
1
- {"mappings":"AKMA;IACE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,OAAO,MAAM,0DAmBX,CAAA","sources":["src/src/tool/hooks.ts","src/src/tool/utils.ts","src/src/tool/GraphViewStyle.tsx","src/src/tool/GraphView.tsx","src/src/tool/GraphViewIcon.tsx","src/src/index.tsx","src/index.tsx"],"sourcesContent":[null,null,null,null,null,null,"import {GraphView} from './tool/GraphView'\nimport {GraphViewIcon} from './tool/GraphViewIcon'\nimport {createPlugin} from 'sanity'\nimport {route} from 'sanity/_unstable'\nimport React from 'react'\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport const contentGraphView = createPlugin<GraphViewConfig>((config: GraphViewConfig = {}) => {\n return {\n name: '@sanity/content-graph-view',\n\n tools: (prev) => {\n return [\n ...prev,\n {\n name: 'graph-your-content',\n title: 'Graph',\n icon: GraphViewIcon,\n component: function component() {\n return <GraphView {...config} />\n },\n router: route.create('/:selectedDocumentId'),\n },\n ]\n },\n }\n})\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../"}
1
+ {"mappings":"AKKA;IACE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,OAAO,MAAM,0DAmBX,CAAA","sources":["src/src/tool/hooks.ts","src/src/tool/utils.ts","src/src/tool/GraphViewStyle.tsx","src/src/tool/GraphView.tsx","src/src/tool/GraphViewIcon.tsx","src/src/index.tsx","src/index.tsx"],"sourcesContent":[null,null,null,null,null,null,"import {GraphView} from './tool/GraphView'\nimport {GraphViewIcon} from './tool/GraphViewIcon'\nimport {createPlugin, route} from 'sanity'\nimport React from 'react'\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport const contentGraphView = createPlugin<GraphViewConfig>((config: GraphViewConfig = {}) => {\n return {\n name: '@sanity/content-graph-view',\n\n tools: (prev) => {\n return [\n ...prev,\n {\n name: 'graph-your-content',\n title: 'Graph',\n icon: GraphViewIcon,\n component: function component() {\n return <GraphView {...config} />\n },\n router: route.create('/:selectedDocumentId'),\n },\n ]\n },\n }\n})\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../"}
package/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  var $kbR6r$reactjsxruntime = require("react/jsx-runtime");
2
2
  var $kbR6r$sanity = require("sanity");
3
- var $kbR6r$sanity_unstable = require("sanity/_unstable");
4
3
  var $kbR6r$react = require("react");
4
+ var $kbR6r$sanity_unstable = require("sanity/_unstable");
5
5
  var $kbR6r$polished = require("polished");
6
6
  var $kbR6r$deepequal = require("deep-equal");
7
7
  var $kbR6r$reactforcegraph = require("react-force-graph");
@@ -90,7 +90,6 @@ function $6e34c00d870cf067$export$6a506b36fdea397d(s, limit) {
90
90
 
91
91
 
92
92
 
93
-
94
93
  const $4a8c3f9c5fc1d022$export$3865e82159b2890b = (0, ($parcel$interopDefault($kbR6r$styledcomponents))).div`
95
94
  font-family: ${({ theme: theme })=>theme.fonts.text.family};
96
95
  position: absolute;
@@ -282,7 +281,7 @@ function $c64ff3a0172967ed$export$6a7fe3ef90e8d566(props) {
282
281
  const [documents, setDocuments] = (0, $kbR6r$react.useState)([]);
283
282
  const [docTypes, setDocTypes] = (0, $kbR6r$react.useState)({});
284
283
  const [graph, setGraph] = (0, $kbR6r$react.useState)(()=>new $c64ff3a0172967ed$var$GraphData());
285
- const router = (0, $kbR6r$sanity_unstable.useRouter)();
284
+ const router = (0, $kbR6r$sanity.useRouter)();
286
285
  const client = (0, $kbR6r$sanity.useClient)();
287
286
  const fetchCallback = (0, $kbR6r$react.useCallback)((_docs)=>{
288
287
  const docs = $c64ff3a0172967ed$var$deduplicateDrafts(_docs);
@@ -556,7 +555,6 @@ const $b644a7c47dec28f9$export$401cc1e36cc18bf0 = ()=>/*#__PURE__*/ (0, $kbR6r$r
556
555
 
557
556
 
558
557
 
559
-
560
558
  const $329a1cedcedb1349$export$e3438defddc96622 = (0, $kbR6r$sanity.createPlugin)((config = {})=>{
561
559
  return {
562
560
  name: "@sanity/content-graph-view",
@@ -572,7 +570,7 @@ const $329a1cedcedb1349$export$e3438defddc96622 = (0, $kbR6r$sanity.createPlugin
572
570
  ...config
573
571
  });
574
572
  },
575
- router: (0, $kbR6r$sanity_unstable.route).create("/:selectedDocumentId")
573
+ router: (0, $kbR6r$sanity.route).create("/:selectedDocumentId")
576
574
  },
577
575
  ];
578
576
  }
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/index.tsx","src/tool/GraphView.tsx","src/tool/hooks.ts","src/tool/utils.ts","src/tool/GraphViewStyle.tsx","src/tool/GraphViewIcon.tsx"],"sourcesContent":["import {GraphView} from './tool/GraphView'\nimport {GraphViewIcon} from './tool/GraphViewIcon'\nimport {createPlugin} from 'sanity'\nimport {route} from 'sanity/_unstable'\nimport React from 'react'\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport const contentGraphView = createPlugin<GraphViewConfig>((config: GraphViewConfig = {}) => {\n return {\n name: '@sanity/content-graph-view',\n\n tools: (prev) => {\n return [\n ...prev,\n {\n name: 'graph-your-content',\n title: 'Graph',\n icon: GraphViewIcon,\n component: function component() {\n return <GraphView {...config} />\n },\n router: route.create('/:selectedDocumentId'),\n },\n ]\n },\n }\n})\n","import {SanityClient, useUserColorManager} from 'sanity/_unstable'\nimport {rgba} from 'polished'\nimport deepEqual from 'deep-equal'\nimport React, {useCallback, useEffect, useState} from 'react'\nimport {ForceGraph2D} from 'react-force-graph'\nimport {v4 as uuidv4} from 'uuid'\nimport BezierEasing from 'bezier-easing'\nimport {useFetchDocuments, useListen} from './hooks'\nimport {sortBy, loadImage, sizeOf, truncate} from './utils'\nimport {SanityDocument} from '@sanity/client'\nimport {useRouter} from 'sanity/_unstable'\nimport {useClient} from 'sanity'\nimport {GraphRoot, GraphWrapper, HoverNode, Legend, LegendBadge, LegendRow} from './GraphViewStyle'\nimport {useTheme} from '@sanity/ui'\nimport {black, COLOR_HUES, gray, white, hues} from '@sanity/color'\n\nconst DEFAULT_QUERY = `\n *[\n !(_id in path(\"_.*\")) &&\n !(_type match \"system.*\") &&\n !(_type match \"sanity.*\")\n ]\n`\n\nconst fadeEasing = BezierEasing(0, 0.9, 1, 1)\nconst softEasing = BezierEasing(0.25, 0.1, 0.0, 1.0)\nconst idleTimeout = 10000\nconst imageSize = 40\n\nfunction getTopDocTypes(counts: Record<string, number>) {\n return sortBy(Object.keys(counts), (docType) => counts[docType] || 0)\n .reverse()\n .slice(0, 10)\n}\n\nfunction formatDocType(docType: string) {\n return (docType.substring(0, 1).toUpperCase() + docType.substring(1))\n .replace(/\\./g, ' ')\n .replace(/[A-Z]/g, ' $&')\n .trim()\n}\n\nfunction getDocTypeCounts(docs: SanityDocument[]) {\n const types: Record<string, number> = {}\n for (const doc of docs) {\n types[doc._type] = (types[doc._type] || 0) + 1\n }\n return types\n}\n\nfunction labelFor(doc: SanityDocument) {\n return `${doc.title || doc.name || doc._id}`.trim()\n}\n\nfunction valueFor(doc: any, maxSize: number) {\n return 5 + 100 * (sizeOf(doc) / maxSize)\n}\n\nfunction findRefs(obj: any, dest: any[] = []) {\n if (obj !== null) {\n if (typeof obj === 'object') {\n for (const [k, v] of Object.entries(obj)) {\n if (k === '_ref' && typeof v === 'string' && v.length > 0) {\n dest.push(stripDraftId(v))\n }\n findRefs(v, dest)\n }\n } else if (Array.isArray(obj)) {\n for (const v of obj) {\n findRefs(v, dest)\n }\n }\n }\n return dest\n}\n\nfunction stripDraftId(id: string) {\n return id.replace(/^drafts\\./, '')\n}\n\nfunction deduplicateDrafts(docs: SanityDocument[]) {\n const deduped: Record<string, SanityDocument> = {}\n for (const doc of docs) {\n if (!/^drafts\\./.test(doc._id)) {\n deduped[doc._id] = doc\n }\n }\n for (const doc of docs) {\n if (/^drafts\\./.test(doc._id)) {\n const id = stripDraftId(doc._id)\n deduped[id] = Object.assign(doc, {_id: id})\n }\n }\n return Object.values(deduped)\n}\n\nclass Users {\n _users: any[] = []\n\n async getById(id: string, client: SanityClient) {\n let user = this._users.find((u) => u._id === id)\n if (!user) {\n user = await client.users.getById(id)\n this._users.push(user)\n user.image = await loadImage(\n user.imageUrl ||\n 'https://raw.githubusercontent.com/sanity-io/sanity-plugin-graph-view/main/assets/head-silhouette.jpg',\n imageSize,\n imageSize\n )\n }\n return user\n }\n}\n\nclass Session {\n id: string | null = null\n user: any = null\n doc: SanityDocument | null = null\n lastActive: number = 0\n startTime: number = 0\n angle: number = 0\n}\n\nclass GraphData {\n sessions: Session[] = []\n data: any\n\n constructor(docs: SanityDocument[] = []) {\n const docsById: Record<string, SanityDocument> = {}\n for (const doc of docs) {\n docsById[doc._id] = doc\n }\n\n this.data = {\n nodes: docs.map((d) => Object.assign({id: d._id, type: 'document', doc: d})),\n links: docs\n .flatMap((doc) => findRefs(doc).map((ref) => ({source: doc._id, target: ref})))\n .filter((link) => docsById[link.source] && docsById[link.target]),\n }\n }\n\n setSession(user, docNode) {\n let session = this.sessions.find((s) => s.user.id === user.id && s.doc?._id === docNode.doc._id)\n if (!session) {\n session = new Session()\n session.id = uuidv4()\n session.user = user\n session.startTime = Date.now()\n session.doc = docNode.doc\n session.angle = Math.random() * 2 * Math.PI\n this.sessions.push(session)\n }\n session.lastActive = Date.now()\n }\n\n reapSessions() {\n for (let i = 0; i < this.sessions.length; i++) {\n const session = this.sessions[i]\n if (Date.now() - session.lastActive > idleTimeout) {\n this.sessions = [...this.sessions.slice(0, i), ...this.sessions.slice(i + 1)]\n i--\n }\n }\n }\n\n clone() {\n const copy = new GraphData()\n Object.assign(copy, this)\n copy.data = {\n nodes: [...this.data.nodes],\n links: [...this.data.links],\n }\n return copy\n }\n}\n\nconst users = new Users()\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport function GraphView(props: GraphViewConfig) {\n const query = props.query || DEFAULT_QUERY\n\n const userColorManager = useUserColorManager()\n const [maxSize, setMaxSize] = useState(0)\n const [hoverNode, setHoverNode] = useState<any>(null)\n const [documents, setDocuments] = useState<SanityDocument[]>([])\n const [docTypes, setDocTypes] = useState<Record<string, number>>({})\n const [graph, setGraph] = useState(() => new GraphData())\n const router = useRouter()\n const client = useClient()\n\n const fetchCallback = useCallback((_docs) => {\n const docs = deduplicateDrafts(_docs)\n setMaxSize(Math.max(...docs.map(sizeOf)))\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setGraph(new GraphData(docs))\n }, [])\n\n const listenCallback = useCallback(\n async (update) => {\n const doc = update.result\n if (doc) {\n doc._id = stripDraftId(doc._id)\n\n const docsById: Record<string, SanityDocument> = {}\n for (const d of documents) {\n docsById[d._id] = d\n }\n\n let oldDoc\n const docs = [...documents]\n const idx = documents.findIndex((d) => d._id === doc._id)\n if (idx >= 0) {\n oldDoc = docs[idx]\n docs[idx] = doc\n } else {\n docs.push(doc)\n }\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setMaxSize(Math.max(...docs.map(sizeOf)))\n\n const newGraph = graph.clone()\n\n const oldRefs = findRefs(oldDoc || {}).filter(\n (id) => id === doc._id || docsById[id] !== null\n )\n const newRefs = findRefs(doc).filter((id) => id === doc._id || docsById[id] !== null)\n\n let graphChanged = !deepEqual(oldRefs, newRefs)\n if (graphChanged) {\n newGraph.data.links = newGraph.data.links\n .filter((l) => l.source.id !== doc._id)\n .concat(newRefs.map((ref) => ({source: doc._id, target: ref})))\n }\n\n let docNode\n const nodeIdx = graph.data.nodes.findIndex((n) => n.doc && n.doc._id === doc._id)\n if (nodeIdx >= 0) {\n docNode = graph.data.nodes[nodeIdx]\n docNode.doc = doc\n } else {\n docNode = {id: doc._id, type: 'document', doc: doc}\n newGraph.data.nodes.push(docNode)\n graphChanged = true\n }\n if (graphChanged) {\n setGraph(newGraph)\n }\n\n const user = await users.getById(update.identity, client)\n graph.setSession(user, docNode)\n } else if (update.transition === 'disappear') {\n const docId = stripDraftId(update.documentId)\n\n const docs = documents.filter((d) => d._id !== docId)\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setMaxSize(Math.max(...docs.map(sizeOf)))\n\n const newGraph = graph.clone()\n newGraph.data.links = newGraph.data.links.filter(\n (l) => l.source.id !== docId && l.target.id !== docId\n )\n newGraph.data.nodes = newGraph.data.nodes.filter((n) => n.id !== docId)\n setGraph(newGraph)\n }\n },\n [documents, graph, client]\n )\n useFetchDocuments(query, fetchCallback, [])\n useListen(query, {}, {}, listenCallback, [documents, graph])\n useEffect(() => {\n const interval = setInterval(() => graph.reapSessions(), 1000)\n return () => clearInterval(interval)\n }, [graph])\n\n const theme = useTheme().sanity\n\n return (\n <GraphWrapper theme={theme}>\n <GraphRoot theme={theme}>\n <Legend theme={theme}>\n {getTopDocTypes(docTypes).map((docType) => (\n <LegendRow\n className={'legend__row'}\n key={docType}\n style={{color: getDocTypeColor(docType).fill}}\n >\n <LegendBadge theme={theme} />\n <div>{formatDocType(docType)}</div>\n </LegendRow>\n ))}\n </Legend>\n {hoverNode && <HoverNode theme={theme}>{labelFor(hoverNode.doc)}</HoverNode>}\n\n <ForceGraph2D\n graphData={graph.data}\n nodeAutoColorBy=\"group\"\n enableNodeDrag={false}\n onNodeHover={(node: any) => setHoverNode(node)}\n onNodeClick={(node: any) => {\n router.navigateIntent('edit', {id: node.doc._id, documentType: node.doc._type})\n }}\n linkColor={() => rgba(gray[500].hex, 0.25)}\n nodeLabel={() => ''}\n nodeRelSize={1}\n nodeVal={(node: any) => valueFor(node.doc, maxSize)}\n onRenderFramePost={(ctx, globalScale) => {\n for (const session of graph.sessions) {\n const node = graph.data.nodes.find((n) => n.doc && n.doc._id === session?.doc?._id)\n if (node) {\n const idleFactorRange = idleTimeout\n const angle = session.angle\n const radius = Math.sqrt(valueFor(node.doc, maxSize))\n const image = session.user.image\n const userColor = userColorManager.get(session.user.displayName).tints[400].hex\n const distance = radius * globalScale + 40\n const imgW = image ? image.width : 0\n const imgH = image ? image.height : 0\n const x = node.x + (Math.sin(angle) * distance) / globalScale\n const y = node.y + (Math.cos(angle) * distance) / globalScale\n\n ctx.save()\n try {\n ctx.globalAlpha = fadeEasing(\n 1 - Math.min(idleFactorRange, Date.now() - session.lastActive) / idleFactorRange\n )\n ctx.font = `bold ${Math.round(12 / globalScale)}px sans-serif`\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(white.hex, 1.0)\n ctx.lineWidth = 2 / globalScale\n ctx.moveTo(\n node.x + (Math.sin(angle) * (distance - imgW / 2)) / globalScale,\n node.y + (Math.cos(angle) * (distance - imgH / 2)) / globalScale\n )\n ctx.lineTo(node.x + Math.sin(angle) * radius, node.y + Math.cos(angle) * radius)\n ctx.stroke()\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(white.hex, 1.0)\n ctx.lineWidth = 2 / globalScale\n ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false)\n ctx.stroke()\n\n if (image) {\n ctx.save()\n // eslint-disable-next-line max-depth\n try {\n const dur = 700\n const f = softEasing(\n Math.max(0, (dur - (Date.now() - session.startTime)) / dur)\n )\n // eslint-disable-next-line max-depth\n if (f > 0) {\n ctx.beginPath()\n ctx.fillStyle = rgba(userColor, f)\n ctx.arc(x, y, (imgW / 2 + 10) / globalScale, 0, 2 * Math.PI, false)\n ctx.fill()\n }\n\n ctx.beginPath()\n ctx.fillStyle = rgba(white.hex, 1.0)\n ctx.arc(x, y, imgW / globalScale / 2, 0, 2 * Math.PI, false)\n ctx.clip()\n\n ctx.drawImage(\n image,\n x - imgW / globalScale / 2,\n y - imgH / globalScale / 2,\n imgW / globalScale,\n imgH / globalScale\n )\n\n ctx.strokeStyle = black.hex\n ctx.lineWidth = 6 / globalScale\n ctx.stroke()\n\n ctx.strokeStyle = userColor\n ctx.lineWidth = 4 / globalScale\n ctx.stroke()\n } finally {\n ctx.restore()\n }\n }\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(black.hex, 1)\n ctx.lineWidth = 0.5 / globalScale\n ctx.arc(x, y, imgW / globalScale / 2, 0, 2 * Math.PI, false)\n ctx.stroke()\n\n const above = angle >= Math.PI / 2 && angle < Math.PI * 1.5\n const textY = above\n ? y - (imgH / 2 + 5) / globalScale\n : y + (imgH / 2 + 5) / globalScale\n ctx.fillStyle = rgba(white.hex, 1.0)\n ctx.textAlign = 'center'\n ctx.textBaseline = above ? 'bottom' : 'top'\n ctx.fillText(session.user.displayName, x, textY)\n } finally {\n ctx.restore()\n }\n }\n }\n }}\n nodeCanvasObject={(node: any, ctx, globalScale) => {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'document': {\n const nodeColor = getDocTypeColor(node.doc._type)\n const radius = Math.sqrt(valueFor(node.doc, maxSize))\n const fontSize = Math.min(100, 10.0 / globalScale)\n\n ctx.beginPath()\n ctx.fillStyle =\n hoverNode !== null && node.doc._id === hoverNode.doc._id\n ? rgba(gray[500].hex, 0.8)\n : nodeColor.fill\n ctx.strokeStyle = nodeColor.border\n ctx.lineWidth = 0.5\n ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false)\n ctx.stroke()\n ctx.fill()\n\n if (radius * globalScale > 10) {\n ctx.font = `${fontSize}px sans-serif`\n const w = radius * 2 + 30 / globalScale\n for (let len = 50; len >= 5; len /= 1.2) {\n const label = truncate(labelFor(node.doc), Math.round(len))\n const textMetrics = ctx.measureText(label)\n if (textMetrics.width < w) {\n // ctx.fillStyle = rgba(color.white.hex, 1.0)\n ctx.textAlign = 'center'\n ctx.textBaseline = 'top'\n\n ctx.strokeStyle = rgba(black.hex, 0.5)\n ctx.lineWidth = 2 / globalScale\n ctx.strokeText(label, node.x, node.y + radius + 5 / globalScale)\n\n ctx.fillText(label, node.x, node.y + radius + 5 / globalScale)\n break\n }\n }\n }\n }\n }\n }}\n linkCanvasObject={(link: any, ctx, globalScale) => {\n ctx.beginPath()\n ctx.strokeStyle = rgba(gray[500].hex, 0.125)\n ctx.lineWidth = 2 / globalScale\n ctx.moveTo(link.source.x, link.source.y)\n ctx.lineTo(link.target.x, link.target.y)\n ctx.stroke()\n }}\n />\n </GraphRoot>\n </GraphWrapper>\n )\n}\n\nconst colorCache = {}\nlet typeColorNum = 0\n\nfunction getDocTypeColor(docType) {\n if (colorCache[docType]) {\n return colorCache[docType]\n }\n\n const hue = COLOR_HUES[typeColorNum % COLOR_HUES.length]\n\n typeColorNum += 1\n\n colorCache[docType] = {\n fill: hues[hue][400].hex,\n border: rgba(black.hex, 0.5),\n }\n\n return colorCache[docType]\n}\n","import {useEffect} from 'react'\nimport {useClient} from 'sanity'\nimport {ListenEvent, ListenOptions} from '@sanity/client'\n\nexport function useListen(\n query: string,\n params: {[key: string]: any},\n options: ListenOptions,\n onUpdate: (event: ListenEvent<any>) => void,\n dependencies: unknown[]\n): void {\n const client = useClient()\n useEffect(() => {\n const subscription = client.listen(query, params, options).subscribe((update) => {\n onUpdate(update)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, dependencies)\n}\n\nexport function useFetchDocuments(\n query: string,\n onFetch: (event: ListenEvent<any>) => void,\n dependencies: unknown[]\n): void {\n const client = useClient()\n useEffect(() => {\n client.fetch(query).then((result) => {\n onFetch(result)\n })\n }, dependencies)\n}\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function sizeOf(value: any): number {\n if (value === null) {\n return 0\n }\n\n if (typeof value === 'object') {\n return Object.entries(value).reduce((total, [k, v]) => total + sizeOf(k) + sizeOf(v), 0)\n }\n\n if (Array.isArray(value)) {\n return Object.entries(value).reduce((total, v) => total + sizeOf(v), 0)\n }\n\n if (typeof value === 'string') {\n return value.length\n }\n\n return 1\n}\n\nexport function loadImage(url: string, w: number, h: number): Promise<HTMLImageElement | null> {\n return new Promise((resolve) => {\n const img = new Image(w, h)\n img.onload = () => {\n resolve(img)\n }\n img.onerror = (event) => {\n // eslint-disable-next-line no-console\n console.log('Image error', event)\n resolve(null)\n }\n img.src = url\n })\n}\n\nexport function sortBy<T>(array: T[], f: (t: T) => number): T[] {\n return array.sort((a, b) => {\n const va = f(a)\n const vb = f(b)\n // eslint-disable-next-line no-nested-ternary\n return va < vb ? -1 : va > vb ? 1 : 0\n })\n}\n\nexport function truncate(s: string, limit: number): string {\n if (s.length > limit) {\n return `${s.substring(0, limit)}…`\n }\n return s\n}\n","import styled from 'styled-components'\nimport {Theme} from '@sanity/ui'\nimport {black} from '@sanity/color'\nimport React, {PropsWithChildren} from 'react'\n\ntype Style = PropsWithChildren<{theme: SanityTheme}>\ntype SanityTheme = Theme['sanity']\n\nexport const GraphRoot: React.FC<Style> = styled.div`\n font-family: ${({theme}: Style) => theme.fonts.text.family};\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: ${black.hex};\n`\n\nexport const GraphWrapper: React.FC<Style> = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n` as React.FC<Style>\n\nexport const HoverNode: React.FC<Style> = styled.div`\n font-family: ${({theme}: Style) => theme.fonts.text.family};\n display: none;\n position: absolute;\n bottom: ${({theme}: Style) => theme.space[0]}px;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n background: var(--component-bg);\n border-radius: ${({theme}: Style) => theme.radius[2]}px;\n padding: ${({theme}: Style) => theme.space[2]}px;\n z-index: 1000;\n\n &:empty {\n display: none;\n }\n`\n\nexport const Legend: React.FC<Style> = styled.div`\n color: #ccc;\n position: absolute;\n top: ${({theme}: Style) => theme.space[4]}px;\n left: ${({theme}: Style) => theme.space[4]}px;\n\n & > div {\n margin: 5px 0;\n }\n`\n\nexport const LegendRow = styled.div`\n display: flex;\n`\n\nexport const LegendBadge: React.FC<Style> = styled.div`\n width: 1.25em;\n height: 1.25em;\n background: currentColor;\n border-radius: 50%;\n margin-right: ${({theme}: Style) => theme.space[2]}px;\n`\n","import React from 'react'\n\n/**\n * Couple of things to note:\n * - width and height is set to 1em\n * - fill is `currentColor` - this will ensure that the icon looks uniform and\n * that the hover/active state works. You can of course render anything you\n * would like here, but for plugins that are to be used in more than one\n * studio, we suggest these rules are followed\n **/\nexport const GraphViewIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 46.063 46.063\">\n <path\n fill=\"currentColor\"\n d=\"M18.022 38.676v2.813h-1.21q-4.864 0-6.525-1.447-1.64-1.445-1.64-5.762v-4.666q0-2.95-1.055-4.083-1.055-1.13-3.828-1.13h-1.19v-2.794h1.19q2.793 0 3.828-1.114 1.055-1.132 1.055-4.043V11.76q0-4.316 1.64-5.742 1.66-1.446 6.524-1.446h1.212v2.793h-1.328q-2.754 0-3.594.86-.84.86-.84 3.613v4.844q0 3.066-.898 4.453-.88 1.387-3.028 1.875 2.168.527 3.047 1.914.88 1.387.88 4.434v4.843q0 2.754.84 3.614.84.86 3.594.86h1.328zM28.04 38.676h1.368q2.735 0 3.555-.84.84-.84.84-3.633V29.36q0-3.047.88-4.434.878-1.387 3.046-1.914-2.17-.488-3.048-1.875-.88-1.387-.88-4.453V11.84q0-2.773-.84-3.613-.82-.86-3.554-.86H28.04V4.574h1.232q4.863 0 6.484 1.446 1.64 1.426 1.64 5.742v4.687q0 2.91 1.055 4.042 1.056 1.114 3.83 1.114h1.21V24.4h-1.21q-2.774 0-3.83 1.13-1.053 1.134-1.053 4.084v4.667q0 4.318-1.64 5.763-1.622 1.446-6.485 1.446h-1.23v-2.814z\"\n />\n </svg>\n)\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../"}
1
+ {"mappings":"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","sources":["src/index.tsx","src/tool/GraphView.tsx","src/tool/hooks.ts","src/tool/utils.ts","src/tool/GraphViewStyle.tsx","src/tool/GraphViewIcon.tsx"],"sourcesContent":["import {GraphView} from './tool/GraphView'\nimport {GraphViewIcon} from './tool/GraphViewIcon'\nimport {createPlugin, route} from 'sanity'\nimport React from 'react'\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport const contentGraphView = createPlugin<GraphViewConfig>((config: GraphViewConfig = {}) => {\n return {\n name: '@sanity/content-graph-view',\n\n tools: (prev) => {\n return [\n ...prev,\n {\n name: 'graph-your-content',\n title: 'Graph',\n icon: GraphViewIcon,\n component: function component() {\n return <GraphView {...config} />\n },\n router: route.create('/:selectedDocumentId'),\n },\n ]\n },\n }\n})\n","import {SanityClient, useUserColorManager} from 'sanity/_unstable'\nimport {rgba} from 'polished'\nimport deepEqual from 'deep-equal'\nimport React, {useCallback, useEffect, useState} from 'react'\nimport {ForceGraph2D} from 'react-force-graph'\nimport {v4 as uuidv4} from 'uuid'\nimport BezierEasing from 'bezier-easing'\nimport {useFetchDocuments, useListen} from './hooks'\nimport {sortBy, loadImage, sizeOf, truncate} from './utils'\nimport {SanityDocument} from '@sanity/client'\nimport {useClient, useRouter} from 'sanity'\nimport {GraphRoot, GraphWrapper, HoverNode, Legend, LegendBadge, LegendRow} from './GraphViewStyle'\nimport {useTheme} from '@sanity/ui'\nimport {black, COLOR_HUES, gray, white, hues} from '@sanity/color'\n\nconst DEFAULT_QUERY = `\n *[\n !(_id in path(\"_.*\")) &&\n !(_type match \"system.*\") &&\n !(_type match \"sanity.*\")\n ]\n`\n\nconst fadeEasing = BezierEasing(0, 0.9, 1, 1)\nconst softEasing = BezierEasing(0.25, 0.1, 0.0, 1.0)\nconst idleTimeout = 10000\nconst imageSize = 40\n\nfunction getTopDocTypes(counts: Record<string, number>) {\n return sortBy(Object.keys(counts), (docType) => counts[docType] || 0)\n .reverse()\n .slice(0, 10)\n}\n\nfunction formatDocType(docType: string) {\n return (docType.substring(0, 1).toUpperCase() + docType.substring(1))\n .replace(/\\./g, ' ')\n .replace(/[A-Z]/g, ' $&')\n .trim()\n}\n\nfunction getDocTypeCounts(docs: SanityDocument[]) {\n const types: Record<string, number> = {}\n for (const doc of docs) {\n types[doc._type] = (types[doc._type] || 0) + 1\n }\n return types\n}\n\nfunction labelFor(doc: SanityDocument) {\n return `${doc.title || doc.name || doc._id}`.trim()\n}\n\nfunction valueFor(doc: any, maxSize: number) {\n return 5 + 100 * (sizeOf(doc) / maxSize)\n}\n\nfunction findRefs(obj: any, dest: any[] = []) {\n if (obj !== null) {\n if (typeof obj === 'object') {\n for (const [k, v] of Object.entries(obj)) {\n if (k === '_ref' && typeof v === 'string' && v.length > 0) {\n dest.push(stripDraftId(v))\n }\n findRefs(v, dest)\n }\n } else if (Array.isArray(obj)) {\n for (const v of obj) {\n findRefs(v, dest)\n }\n }\n }\n return dest\n}\n\nfunction stripDraftId(id: string) {\n return id.replace(/^drafts\\./, '')\n}\n\nfunction deduplicateDrafts(docs: SanityDocument[]) {\n const deduped: Record<string, SanityDocument> = {}\n for (const doc of docs) {\n if (!/^drafts\\./.test(doc._id)) {\n deduped[doc._id] = doc\n }\n }\n for (const doc of docs) {\n if (/^drafts\\./.test(doc._id)) {\n const id = stripDraftId(doc._id)\n deduped[id] = Object.assign(doc, {_id: id})\n }\n }\n return Object.values(deduped)\n}\n\nclass Users {\n _users: any[] = []\n\n async getById(id: string, client: SanityClient) {\n let user = this._users.find((u) => u._id === id)\n if (!user) {\n user = await client.users.getById(id)\n this._users.push(user)\n user.image = await loadImage(\n user.imageUrl ||\n 'https://raw.githubusercontent.com/sanity-io/sanity-plugin-graph-view/main/assets/head-silhouette.jpg',\n imageSize,\n imageSize\n )\n }\n return user\n }\n}\n\nclass Session {\n id: string | null = null\n user: any = null\n doc: SanityDocument | null = null\n lastActive: number = 0\n startTime: number = 0\n angle: number = 0\n}\n\nclass GraphData {\n sessions: Session[] = []\n data: any\n\n constructor(docs: SanityDocument[] = []) {\n const docsById: Record<string, SanityDocument> = {}\n for (const doc of docs) {\n docsById[doc._id] = doc\n }\n\n this.data = {\n nodes: docs.map((d) => Object.assign({id: d._id, type: 'document', doc: d})),\n links: docs\n .flatMap((doc) => findRefs(doc).map((ref) => ({source: doc._id, target: ref})))\n .filter((link) => docsById[link.source] && docsById[link.target]),\n }\n }\n\n setSession(user, docNode) {\n let session = this.sessions.find((s) => s.user.id === user.id && s.doc?._id === docNode.doc._id)\n if (!session) {\n session = new Session()\n session.id = uuidv4()\n session.user = user\n session.startTime = Date.now()\n session.doc = docNode.doc\n session.angle = Math.random() * 2 * Math.PI\n this.sessions.push(session)\n }\n session.lastActive = Date.now()\n }\n\n reapSessions() {\n for (let i = 0; i < this.sessions.length; i++) {\n const session = this.sessions[i]\n if (Date.now() - session.lastActive > idleTimeout) {\n this.sessions = [...this.sessions.slice(0, i), ...this.sessions.slice(i + 1)]\n i--\n }\n }\n }\n\n clone() {\n const copy = new GraphData()\n Object.assign(copy, this)\n copy.data = {\n nodes: [...this.data.nodes],\n links: [...this.data.links],\n }\n return copy\n }\n}\n\nconst users = new Users()\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport function GraphView(props: GraphViewConfig) {\n const query = props.query || DEFAULT_QUERY\n\n const userColorManager = useUserColorManager()\n const [maxSize, setMaxSize] = useState(0)\n const [hoverNode, setHoverNode] = useState<any>(null)\n const [documents, setDocuments] = useState<SanityDocument[]>([])\n const [docTypes, setDocTypes] = useState<Record<string, number>>({})\n const [graph, setGraph] = useState(() => new GraphData())\n const router = useRouter()\n const client = useClient()\n\n const fetchCallback = useCallback((_docs) => {\n const docs = deduplicateDrafts(_docs)\n setMaxSize(Math.max(...docs.map(sizeOf)))\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setGraph(new GraphData(docs))\n }, [])\n\n const listenCallback = useCallback(\n async (update) => {\n const doc = update.result\n if (doc) {\n doc._id = stripDraftId(doc._id)\n\n const docsById: Record<string, SanityDocument> = {}\n for (const d of documents) {\n docsById[d._id] = d\n }\n\n let oldDoc\n const docs = [...documents]\n const idx = documents.findIndex((d) => d._id === doc._id)\n if (idx >= 0) {\n oldDoc = docs[idx]\n docs[idx] = doc\n } else {\n docs.push(doc)\n }\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setMaxSize(Math.max(...docs.map(sizeOf)))\n\n const newGraph = graph.clone()\n\n const oldRefs = findRefs(oldDoc || {}).filter(\n (id) => id === doc._id || docsById[id] !== null\n )\n const newRefs = findRefs(doc).filter((id) => id === doc._id || docsById[id] !== null)\n\n let graphChanged = !deepEqual(oldRefs, newRefs)\n if (graphChanged) {\n newGraph.data.links = newGraph.data.links\n .filter((l) => l.source.id !== doc._id)\n .concat(newRefs.map((ref) => ({source: doc._id, target: ref})))\n }\n\n let docNode\n const nodeIdx = graph.data.nodes.findIndex((n) => n.doc && n.doc._id === doc._id)\n if (nodeIdx >= 0) {\n docNode = graph.data.nodes[nodeIdx]\n docNode.doc = doc\n } else {\n docNode = {id: doc._id, type: 'document', doc: doc}\n newGraph.data.nodes.push(docNode)\n graphChanged = true\n }\n if (graphChanged) {\n setGraph(newGraph)\n }\n\n const user = await users.getById(update.identity, client)\n graph.setSession(user, docNode)\n } else if (update.transition === 'disappear') {\n const docId = stripDraftId(update.documentId)\n\n const docs = documents.filter((d) => d._id !== docId)\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setMaxSize(Math.max(...docs.map(sizeOf)))\n\n const newGraph = graph.clone()\n newGraph.data.links = newGraph.data.links.filter(\n (l) => l.source.id !== docId && l.target.id !== docId\n )\n newGraph.data.nodes = newGraph.data.nodes.filter((n) => n.id !== docId)\n setGraph(newGraph)\n }\n },\n [documents, graph, client]\n )\n useFetchDocuments(query, fetchCallback, [])\n useListen(query, {}, {}, listenCallback, [documents, graph])\n useEffect(() => {\n const interval = setInterval(() => graph.reapSessions(), 1000)\n return () => clearInterval(interval)\n }, [graph])\n\n const theme = useTheme().sanity\n\n return (\n <GraphWrapper theme={theme}>\n <GraphRoot theme={theme}>\n <Legend theme={theme}>\n {getTopDocTypes(docTypes).map((docType) => (\n <LegendRow\n className={'legend__row'}\n key={docType}\n style={{color: getDocTypeColor(docType).fill}}\n >\n <LegendBadge theme={theme} />\n <div>{formatDocType(docType)}</div>\n </LegendRow>\n ))}\n </Legend>\n {hoverNode && <HoverNode theme={theme}>{labelFor(hoverNode.doc)}</HoverNode>}\n\n <ForceGraph2D\n graphData={graph.data}\n nodeAutoColorBy=\"group\"\n enableNodeDrag={false}\n onNodeHover={(node: any) => setHoverNode(node)}\n onNodeClick={(node: any) => {\n router.navigateIntent('edit', {id: node.doc._id, documentType: node.doc._type})\n }}\n linkColor={() => rgba(gray[500].hex, 0.25)}\n nodeLabel={() => ''}\n nodeRelSize={1}\n nodeVal={(node: any) => valueFor(node.doc, maxSize)}\n onRenderFramePost={(ctx, globalScale) => {\n for (const session of graph.sessions) {\n const node = graph.data.nodes.find((n) => n.doc && n.doc._id === session?.doc?._id)\n if (node) {\n const idleFactorRange = idleTimeout\n const angle = session.angle\n const radius = Math.sqrt(valueFor(node.doc, maxSize))\n const image = session.user.image\n const userColor = userColorManager.get(session.user.displayName).tints[400].hex\n const distance = radius * globalScale + 40\n const imgW = image ? image.width : 0\n const imgH = image ? image.height : 0\n const x = node.x + (Math.sin(angle) * distance) / globalScale\n const y = node.y + (Math.cos(angle) * distance) / globalScale\n\n ctx.save()\n try {\n ctx.globalAlpha = fadeEasing(\n 1 - Math.min(idleFactorRange, Date.now() - session.lastActive) / idleFactorRange\n )\n ctx.font = `bold ${Math.round(12 / globalScale)}px sans-serif`\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(white.hex, 1.0)\n ctx.lineWidth = 2 / globalScale\n ctx.moveTo(\n node.x + (Math.sin(angle) * (distance - imgW / 2)) / globalScale,\n node.y + (Math.cos(angle) * (distance - imgH / 2)) / globalScale\n )\n ctx.lineTo(node.x + Math.sin(angle) * radius, node.y + Math.cos(angle) * radius)\n ctx.stroke()\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(white.hex, 1.0)\n ctx.lineWidth = 2 / globalScale\n ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false)\n ctx.stroke()\n\n if (image) {\n ctx.save()\n // eslint-disable-next-line max-depth\n try {\n const dur = 700\n const f = softEasing(\n Math.max(0, (dur - (Date.now() - session.startTime)) / dur)\n )\n // eslint-disable-next-line max-depth\n if (f > 0) {\n ctx.beginPath()\n ctx.fillStyle = rgba(userColor, f)\n ctx.arc(x, y, (imgW / 2 + 10) / globalScale, 0, 2 * Math.PI, false)\n ctx.fill()\n }\n\n ctx.beginPath()\n ctx.fillStyle = rgba(white.hex, 1.0)\n ctx.arc(x, y, imgW / globalScale / 2, 0, 2 * Math.PI, false)\n ctx.clip()\n\n ctx.drawImage(\n image,\n x - imgW / globalScale / 2,\n y - imgH / globalScale / 2,\n imgW / globalScale,\n imgH / globalScale\n )\n\n ctx.strokeStyle = black.hex\n ctx.lineWidth = 6 / globalScale\n ctx.stroke()\n\n ctx.strokeStyle = userColor\n ctx.lineWidth = 4 / globalScale\n ctx.stroke()\n } finally {\n ctx.restore()\n }\n }\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(black.hex, 1)\n ctx.lineWidth = 0.5 / globalScale\n ctx.arc(x, y, imgW / globalScale / 2, 0, 2 * Math.PI, false)\n ctx.stroke()\n\n const above = angle >= Math.PI / 2 && angle < Math.PI * 1.5\n const textY = above\n ? y - (imgH / 2 + 5) / globalScale\n : y + (imgH / 2 + 5) / globalScale\n ctx.fillStyle = rgba(white.hex, 1.0)\n ctx.textAlign = 'center'\n ctx.textBaseline = above ? 'bottom' : 'top'\n ctx.fillText(session.user.displayName, x, textY)\n } finally {\n ctx.restore()\n }\n }\n }\n }}\n nodeCanvasObject={(node: any, ctx, globalScale) => {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'document': {\n const nodeColor = getDocTypeColor(node.doc._type)\n const radius = Math.sqrt(valueFor(node.doc, maxSize))\n const fontSize = Math.min(100, 10.0 / globalScale)\n\n ctx.beginPath()\n ctx.fillStyle =\n hoverNode !== null && node.doc._id === hoverNode.doc._id\n ? rgba(gray[500].hex, 0.8)\n : nodeColor.fill\n ctx.strokeStyle = nodeColor.border\n ctx.lineWidth = 0.5\n ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false)\n ctx.stroke()\n ctx.fill()\n\n if (radius * globalScale > 10) {\n ctx.font = `${fontSize}px sans-serif`\n const w = radius * 2 + 30 / globalScale\n for (let len = 50; len >= 5; len /= 1.2) {\n const label = truncate(labelFor(node.doc), Math.round(len))\n const textMetrics = ctx.measureText(label)\n if (textMetrics.width < w) {\n // ctx.fillStyle = rgba(color.white.hex, 1.0)\n ctx.textAlign = 'center'\n ctx.textBaseline = 'top'\n\n ctx.strokeStyle = rgba(black.hex, 0.5)\n ctx.lineWidth = 2 / globalScale\n ctx.strokeText(label, node.x, node.y + radius + 5 / globalScale)\n\n ctx.fillText(label, node.x, node.y + radius + 5 / globalScale)\n break\n }\n }\n }\n }\n }\n }}\n linkCanvasObject={(link: any, ctx, globalScale) => {\n ctx.beginPath()\n ctx.strokeStyle = rgba(gray[500].hex, 0.125)\n ctx.lineWidth = 2 / globalScale\n ctx.moveTo(link.source.x, link.source.y)\n ctx.lineTo(link.target.x, link.target.y)\n ctx.stroke()\n }}\n />\n </GraphRoot>\n </GraphWrapper>\n )\n}\n\nconst colorCache = {}\nlet typeColorNum = 0\n\nfunction getDocTypeColor(docType) {\n if (colorCache[docType]) {\n return colorCache[docType]\n }\n\n const hue = COLOR_HUES[typeColorNum % COLOR_HUES.length]\n\n typeColorNum += 1\n\n colorCache[docType] = {\n fill: hues[hue][400].hex,\n border: rgba(black.hex, 0.5),\n }\n\n return colorCache[docType]\n}\n","import {useEffect} from 'react'\nimport {useClient} from 'sanity'\nimport {ListenEvent, ListenOptions} from '@sanity/client'\n\nexport function useListen(\n query: string,\n params: {[key: string]: any},\n options: ListenOptions,\n onUpdate: (event: ListenEvent<any>) => void,\n dependencies: unknown[]\n): void {\n const client = useClient()\n useEffect(() => {\n const subscription = client.listen(query, params, options).subscribe((update) => {\n onUpdate(update)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, dependencies)\n}\n\nexport function useFetchDocuments(\n query: string,\n onFetch: (event: ListenEvent<any>) => void,\n dependencies: unknown[]\n): void {\n const client = useClient()\n useEffect(() => {\n client.fetch(query).then((result) => {\n onFetch(result)\n })\n }, dependencies)\n}\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function sizeOf(value: any): number {\n if (value === null) {\n return 0\n }\n\n if (typeof value === 'object') {\n return Object.entries(value).reduce((total, [k, v]) => total + sizeOf(k) + sizeOf(v), 0)\n }\n\n if (Array.isArray(value)) {\n return Object.entries(value).reduce((total, v) => total + sizeOf(v), 0)\n }\n\n if (typeof value === 'string') {\n return value.length\n }\n\n return 1\n}\n\nexport function loadImage(url: string, w: number, h: number): Promise<HTMLImageElement | null> {\n return new Promise((resolve) => {\n const img = new Image(w, h)\n img.onload = () => {\n resolve(img)\n }\n img.onerror = (event) => {\n // eslint-disable-next-line no-console\n console.log('Image error', event)\n resolve(null)\n }\n img.src = url\n })\n}\n\nexport function sortBy<T>(array: T[], f: (t: T) => number): T[] {\n return array.sort((a, b) => {\n const va = f(a)\n const vb = f(b)\n // eslint-disable-next-line no-nested-ternary\n return va < vb ? -1 : va > vb ? 1 : 0\n })\n}\n\nexport function truncate(s: string, limit: number): string {\n if (s.length > limit) {\n return `${s.substring(0, limit)}…`\n }\n return s\n}\n","import styled from 'styled-components'\nimport {Theme} from '@sanity/ui'\nimport {black} from '@sanity/color'\nimport React, {PropsWithChildren} from 'react'\n\ntype Style = PropsWithChildren<{theme: SanityTheme}>\ntype SanityTheme = Theme['sanity']\n\nexport const GraphRoot: React.FC<Style> = styled.div`\n font-family: ${({theme}: Style) => theme.fonts.text.family};\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: ${black.hex};\n`\n\nexport const GraphWrapper: React.FC<Style> = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n` as React.FC<Style>\n\nexport const HoverNode: React.FC<Style> = styled.div`\n font-family: ${({theme}: Style) => theme.fonts.text.family};\n display: none;\n position: absolute;\n bottom: ${({theme}: Style) => theme.space[0]}px;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n background: var(--component-bg);\n border-radius: ${({theme}: Style) => theme.radius[2]}px;\n padding: ${({theme}: Style) => theme.space[2]}px;\n z-index: 1000;\n\n &:empty {\n display: none;\n }\n`\n\nexport const Legend: React.FC<Style> = styled.div`\n color: #ccc;\n position: absolute;\n top: ${({theme}: Style) => theme.space[4]}px;\n left: ${({theme}: Style) => theme.space[4]}px;\n\n & > div {\n margin: 5px 0;\n }\n`\n\nexport const LegendRow = styled.div`\n display: flex;\n`\n\nexport const LegendBadge: React.FC<Style> = styled.div`\n width: 1.25em;\n height: 1.25em;\n background: currentColor;\n border-radius: 50%;\n margin-right: ${({theme}: Style) => theme.space[2]}px;\n`\n","import React from 'react'\n\n/**\n * Couple of things to note:\n * - width and height is set to 1em\n * - fill is `currentColor` - this will ensure that the icon looks uniform and\n * that the hover/active state works. You can of course render anything you\n * would like here, but for plugins that are to be used in more than one\n * studio, we suggest these rules are followed\n **/\nexport const GraphViewIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 46.063 46.063\">\n <path\n fill=\"currentColor\"\n d=\"M18.022 38.676v2.813h-1.21q-4.864 0-6.525-1.447-1.64-1.445-1.64-5.762v-4.666q0-2.95-1.055-4.083-1.055-1.13-3.828-1.13h-1.19v-2.794h1.19q2.793 0 3.828-1.114 1.055-1.132 1.055-4.043V11.76q0-4.316 1.64-5.742 1.66-1.446 6.524-1.446h1.212v2.793h-1.328q-2.754 0-3.594.86-.84.86-.84 3.613v4.844q0 3.066-.898 4.453-.88 1.387-3.028 1.875 2.168.527 3.047 1.914.88 1.387.88 4.434v4.843q0 2.754.84 3.614.84.86 3.594.86h1.328zM28.04 38.676h1.368q2.735 0 3.555-.84.84-.84.84-3.633V29.36q0-3.047.88-4.434.878-1.387 3.046-1.914-2.17-.488-3.048-1.875-.88-1.387-.88-4.453V11.84q0-2.773-.84-3.613-.82-.86-3.554-.86H28.04V4.574h1.232q4.863 0 6.484 1.446 1.64 1.426 1.64 5.742v4.687q0 2.91 1.055 4.042 1.056 1.114 3.83 1.114h1.21V24.4h-1.21q-2.774 0-3.83 1.13-1.053 1.134-1.053 4.084v4.667q0 4.318-1.64 5.763-1.622 1.446-6.485 1.446h-1.23v-2.814z\"\n />\n </svg>\n)\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../"}
@@ -1,7 +1,7 @@
1
1
  import {jsx as $38ruT$jsx, jsxs as $38ruT$jsxs} from "react/jsx-runtime";
2
- import {createPlugin as $38ruT$createPlugin, useClient as $38ruT$useClient} from "sanity";
3
- import {route as $38ruT$route, useUserColorManager as $38ruT$useUserColorManager, useRouter as $38ruT$useRouter} from "sanity/_unstable";
2
+ import {createPlugin as $38ruT$createPlugin, route as $38ruT$route, useRouter as $38ruT$useRouter, useClient as $38ruT$useClient} from "sanity";
4
3
  import {useState as $38ruT$useState, useCallback as $38ruT$useCallback, useEffect as $38ruT$useEffect} from "react";
4
+ import {useUserColorManager as $38ruT$useUserColorManager} from "sanity/_unstable";
5
5
  import {rgba as $38ruT$rgba} from "polished";
6
6
  import $38ruT$deepequal from "deep-equal";
7
7
  import {ForceGraph2D as $38ruT$ForceGraph2D} from "react-force-graph";
@@ -82,7 +82,6 @@ function $0e0509fca240c89b$export$6a506b36fdea397d(s, limit) {
82
82
 
83
83
 
84
84
 
85
-
86
85
  const $731697e829485ef7$export$3865e82159b2890b = (0, $38ruT$styledcomponents).div`
87
86
  font-family: ${({ theme: theme })=>theme.fonts.text.family};
88
87
  position: absolute;
@@ -548,7 +547,6 @@ const $a81f96f9ef706251$export$401cc1e36cc18bf0 = ()=>/*#__PURE__*/ (0, $38ruT$j
548
547
 
549
548
 
550
549
 
551
-
552
550
  const $357f50a17451fe9f$export$e3438defddc96622 = (0, $38ruT$createPlugin)((config = {})=>{
553
551
  return {
554
552
  name: "@sanity/content-graph-view",
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/index.tsx","src/tool/GraphView.tsx","src/tool/hooks.ts","src/tool/utils.ts","src/tool/GraphViewStyle.tsx","src/tool/GraphViewIcon.tsx"],"sourcesContent":["import {GraphView} from './tool/GraphView'\nimport {GraphViewIcon} from './tool/GraphViewIcon'\nimport {createPlugin} from 'sanity'\nimport {route} from 'sanity/_unstable'\nimport React from 'react'\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport const contentGraphView = createPlugin<GraphViewConfig>((config: GraphViewConfig = {}) => {\n return {\n name: '@sanity/content-graph-view',\n\n tools: (prev) => {\n return [\n ...prev,\n {\n name: 'graph-your-content',\n title: 'Graph',\n icon: GraphViewIcon,\n component: function component() {\n return <GraphView {...config} />\n },\n router: route.create('/:selectedDocumentId'),\n },\n ]\n },\n }\n})\n","import {SanityClient, useUserColorManager} from 'sanity/_unstable'\nimport {rgba} from 'polished'\nimport deepEqual from 'deep-equal'\nimport React, {useCallback, useEffect, useState} from 'react'\nimport {ForceGraph2D} from 'react-force-graph'\nimport {v4 as uuidv4} from 'uuid'\nimport BezierEasing from 'bezier-easing'\nimport {useFetchDocuments, useListen} from './hooks'\nimport {sortBy, loadImage, sizeOf, truncate} from './utils'\nimport {SanityDocument} from '@sanity/client'\nimport {useRouter} from 'sanity/_unstable'\nimport {useClient} from 'sanity'\nimport {GraphRoot, GraphWrapper, HoverNode, Legend, LegendBadge, LegendRow} from './GraphViewStyle'\nimport {useTheme} from '@sanity/ui'\nimport {black, COLOR_HUES, gray, white, hues} from '@sanity/color'\n\nconst DEFAULT_QUERY = `\n *[\n !(_id in path(\"_.*\")) &&\n !(_type match \"system.*\") &&\n !(_type match \"sanity.*\")\n ]\n`\n\nconst fadeEasing = BezierEasing(0, 0.9, 1, 1)\nconst softEasing = BezierEasing(0.25, 0.1, 0.0, 1.0)\nconst idleTimeout = 10000\nconst imageSize = 40\n\nfunction getTopDocTypes(counts: Record<string, number>) {\n return sortBy(Object.keys(counts), (docType) => counts[docType] || 0)\n .reverse()\n .slice(0, 10)\n}\n\nfunction formatDocType(docType: string) {\n return (docType.substring(0, 1).toUpperCase() + docType.substring(1))\n .replace(/\\./g, ' ')\n .replace(/[A-Z]/g, ' $&')\n .trim()\n}\n\nfunction getDocTypeCounts(docs: SanityDocument[]) {\n const types: Record<string, number> = {}\n for (const doc of docs) {\n types[doc._type] = (types[doc._type] || 0) + 1\n }\n return types\n}\n\nfunction labelFor(doc: SanityDocument) {\n return `${doc.title || doc.name || doc._id}`.trim()\n}\n\nfunction valueFor(doc: any, maxSize: number) {\n return 5 + 100 * (sizeOf(doc) / maxSize)\n}\n\nfunction findRefs(obj: any, dest: any[] = []) {\n if (obj !== null) {\n if (typeof obj === 'object') {\n for (const [k, v] of Object.entries(obj)) {\n if (k === '_ref' && typeof v === 'string' && v.length > 0) {\n dest.push(stripDraftId(v))\n }\n findRefs(v, dest)\n }\n } else if (Array.isArray(obj)) {\n for (const v of obj) {\n findRefs(v, dest)\n }\n }\n }\n return dest\n}\n\nfunction stripDraftId(id: string) {\n return id.replace(/^drafts\\./, '')\n}\n\nfunction deduplicateDrafts(docs: SanityDocument[]) {\n const deduped: Record<string, SanityDocument> = {}\n for (const doc of docs) {\n if (!/^drafts\\./.test(doc._id)) {\n deduped[doc._id] = doc\n }\n }\n for (const doc of docs) {\n if (/^drafts\\./.test(doc._id)) {\n const id = stripDraftId(doc._id)\n deduped[id] = Object.assign(doc, {_id: id})\n }\n }\n return Object.values(deduped)\n}\n\nclass Users {\n _users: any[] = []\n\n async getById(id: string, client: SanityClient) {\n let user = this._users.find((u) => u._id === id)\n if (!user) {\n user = await client.users.getById(id)\n this._users.push(user)\n user.image = await loadImage(\n user.imageUrl ||\n 'https://raw.githubusercontent.com/sanity-io/sanity-plugin-graph-view/main/assets/head-silhouette.jpg',\n imageSize,\n imageSize\n )\n }\n return user\n }\n}\n\nclass Session {\n id: string | null = null\n user: any = null\n doc: SanityDocument | null = null\n lastActive: number = 0\n startTime: number = 0\n angle: number = 0\n}\n\nclass GraphData {\n sessions: Session[] = []\n data: any\n\n constructor(docs: SanityDocument[] = []) {\n const docsById: Record<string, SanityDocument> = {}\n for (const doc of docs) {\n docsById[doc._id] = doc\n }\n\n this.data = {\n nodes: docs.map((d) => Object.assign({id: d._id, type: 'document', doc: d})),\n links: docs\n .flatMap((doc) => findRefs(doc).map((ref) => ({source: doc._id, target: ref})))\n .filter((link) => docsById[link.source] && docsById[link.target]),\n }\n }\n\n setSession(user, docNode) {\n let session = this.sessions.find((s) => s.user.id === user.id && s.doc?._id === docNode.doc._id)\n if (!session) {\n session = new Session()\n session.id = uuidv4()\n session.user = user\n session.startTime = Date.now()\n session.doc = docNode.doc\n session.angle = Math.random() * 2 * Math.PI\n this.sessions.push(session)\n }\n session.lastActive = Date.now()\n }\n\n reapSessions() {\n for (let i = 0; i < this.sessions.length; i++) {\n const session = this.sessions[i]\n if (Date.now() - session.lastActive > idleTimeout) {\n this.sessions = [...this.sessions.slice(0, i), ...this.sessions.slice(i + 1)]\n i--\n }\n }\n }\n\n clone() {\n const copy = new GraphData()\n Object.assign(copy, this)\n copy.data = {\n nodes: [...this.data.nodes],\n links: [...this.data.links],\n }\n return copy\n }\n}\n\nconst users = new Users()\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport function GraphView(props: GraphViewConfig) {\n const query = props.query || DEFAULT_QUERY\n\n const userColorManager = useUserColorManager()\n const [maxSize, setMaxSize] = useState(0)\n const [hoverNode, setHoverNode] = useState<any>(null)\n const [documents, setDocuments] = useState<SanityDocument[]>([])\n const [docTypes, setDocTypes] = useState<Record<string, number>>({})\n const [graph, setGraph] = useState(() => new GraphData())\n const router = useRouter()\n const client = useClient()\n\n const fetchCallback = useCallback((_docs) => {\n const docs = deduplicateDrafts(_docs)\n setMaxSize(Math.max(...docs.map(sizeOf)))\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setGraph(new GraphData(docs))\n }, [])\n\n const listenCallback = useCallback(\n async (update) => {\n const doc = update.result\n if (doc) {\n doc._id = stripDraftId(doc._id)\n\n const docsById: Record<string, SanityDocument> = {}\n for (const d of documents) {\n docsById[d._id] = d\n }\n\n let oldDoc\n const docs = [...documents]\n const idx = documents.findIndex((d) => d._id === doc._id)\n if (idx >= 0) {\n oldDoc = docs[idx]\n docs[idx] = doc\n } else {\n docs.push(doc)\n }\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setMaxSize(Math.max(...docs.map(sizeOf)))\n\n const newGraph = graph.clone()\n\n const oldRefs = findRefs(oldDoc || {}).filter(\n (id) => id === doc._id || docsById[id] !== null\n )\n const newRefs = findRefs(doc).filter((id) => id === doc._id || docsById[id] !== null)\n\n let graphChanged = !deepEqual(oldRefs, newRefs)\n if (graphChanged) {\n newGraph.data.links = newGraph.data.links\n .filter((l) => l.source.id !== doc._id)\n .concat(newRefs.map((ref) => ({source: doc._id, target: ref})))\n }\n\n let docNode\n const nodeIdx = graph.data.nodes.findIndex((n) => n.doc && n.doc._id === doc._id)\n if (nodeIdx >= 0) {\n docNode = graph.data.nodes[nodeIdx]\n docNode.doc = doc\n } else {\n docNode = {id: doc._id, type: 'document', doc: doc}\n newGraph.data.nodes.push(docNode)\n graphChanged = true\n }\n if (graphChanged) {\n setGraph(newGraph)\n }\n\n const user = await users.getById(update.identity, client)\n graph.setSession(user, docNode)\n } else if (update.transition === 'disappear') {\n const docId = stripDraftId(update.documentId)\n\n const docs = documents.filter((d) => d._id !== docId)\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setMaxSize(Math.max(...docs.map(sizeOf)))\n\n const newGraph = graph.clone()\n newGraph.data.links = newGraph.data.links.filter(\n (l) => l.source.id !== docId && l.target.id !== docId\n )\n newGraph.data.nodes = newGraph.data.nodes.filter((n) => n.id !== docId)\n setGraph(newGraph)\n }\n },\n [documents, graph, client]\n )\n useFetchDocuments(query, fetchCallback, [])\n useListen(query, {}, {}, listenCallback, [documents, graph])\n useEffect(() => {\n const interval = setInterval(() => graph.reapSessions(), 1000)\n return () => clearInterval(interval)\n }, [graph])\n\n const theme = useTheme().sanity\n\n return (\n <GraphWrapper theme={theme}>\n <GraphRoot theme={theme}>\n <Legend theme={theme}>\n {getTopDocTypes(docTypes).map((docType) => (\n <LegendRow\n className={'legend__row'}\n key={docType}\n style={{color: getDocTypeColor(docType).fill}}\n >\n <LegendBadge theme={theme} />\n <div>{formatDocType(docType)}</div>\n </LegendRow>\n ))}\n </Legend>\n {hoverNode && <HoverNode theme={theme}>{labelFor(hoverNode.doc)}</HoverNode>}\n\n <ForceGraph2D\n graphData={graph.data}\n nodeAutoColorBy=\"group\"\n enableNodeDrag={false}\n onNodeHover={(node: any) => setHoverNode(node)}\n onNodeClick={(node: any) => {\n router.navigateIntent('edit', {id: node.doc._id, documentType: node.doc._type})\n }}\n linkColor={() => rgba(gray[500].hex, 0.25)}\n nodeLabel={() => ''}\n nodeRelSize={1}\n nodeVal={(node: any) => valueFor(node.doc, maxSize)}\n onRenderFramePost={(ctx, globalScale) => {\n for (const session of graph.sessions) {\n const node = graph.data.nodes.find((n) => n.doc && n.doc._id === session?.doc?._id)\n if (node) {\n const idleFactorRange = idleTimeout\n const angle = session.angle\n const radius = Math.sqrt(valueFor(node.doc, maxSize))\n const image = session.user.image\n const userColor = userColorManager.get(session.user.displayName).tints[400].hex\n const distance = radius * globalScale + 40\n const imgW = image ? image.width : 0\n const imgH = image ? image.height : 0\n const x = node.x + (Math.sin(angle) * distance) / globalScale\n const y = node.y + (Math.cos(angle) * distance) / globalScale\n\n ctx.save()\n try {\n ctx.globalAlpha = fadeEasing(\n 1 - Math.min(idleFactorRange, Date.now() - session.lastActive) / idleFactorRange\n )\n ctx.font = `bold ${Math.round(12 / globalScale)}px sans-serif`\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(white.hex, 1.0)\n ctx.lineWidth = 2 / globalScale\n ctx.moveTo(\n node.x + (Math.sin(angle) * (distance - imgW / 2)) / globalScale,\n node.y + (Math.cos(angle) * (distance - imgH / 2)) / globalScale\n )\n ctx.lineTo(node.x + Math.sin(angle) * radius, node.y + Math.cos(angle) * radius)\n ctx.stroke()\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(white.hex, 1.0)\n ctx.lineWidth = 2 / globalScale\n ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false)\n ctx.stroke()\n\n if (image) {\n ctx.save()\n // eslint-disable-next-line max-depth\n try {\n const dur = 700\n const f = softEasing(\n Math.max(0, (dur - (Date.now() - session.startTime)) / dur)\n )\n // eslint-disable-next-line max-depth\n if (f > 0) {\n ctx.beginPath()\n ctx.fillStyle = rgba(userColor, f)\n ctx.arc(x, y, (imgW / 2 + 10) / globalScale, 0, 2 * Math.PI, false)\n ctx.fill()\n }\n\n ctx.beginPath()\n ctx.fillStyle = rgba(white.hex, 1.0)\n ctx.arc(x, y, imgW / globalScale / 2, 0, 2 * Math.PI, false)\n ctx.clip()\n\n ctx.drawImage(\n image,\n x - imgW / globalScale / 2,\n y - imgH / globalScale / 2,\n imgW / globalScale,\n imgH / globalScale\n )\n\n ctx.strokeStyle = black.hex\n ctx.lineWidth = 6 / globalScale\n ctx.stroke()\n\n ctx.strokeStyle = userColor\n ctx.lineWidth = 4 / globalScale\n ctx.stroke()\n } finally {\n ctx.restore()\n }\n }\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(black.hex, 1)\n ctx.lineWidth = 0.5 / globalScale\n ctx.arc(x, y, imgW / globalScale / 2, 0, 2 * Math.PI, false)\n ctx.stroke()\n\n const above = angle >= Math.PI / 2 && angle < Math.PI * 1.5\n const textY = above\n ? y - (imgH / 2 + 5) / globalScale\n : y + (imgH / 2 + 5) / globalScale\n ctx.fillStyle = rgba(white.hex, 1.0)\n ctx.textAlign = 'center'\n ctx.textBaseline = above ? 'bottom' : 'top'\n ctx.fillText(session.user.displayName, x, textY)\n } finally {\n ctx.restore()\n }\n }\n }\n }}\n nodeCanvasObject={(node: any, ctx, globalScale) => {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'document': {\n const nodeColor = getDocTypeColor(node.doc._type)\n const radius = Math.sqrt(valueFor(node.doc, maxSize))\n const fontSize = Math.min(100, 10.0 / globalScale)\n\n ctx.beginPath()\n ctx.fillStyle =\n hoverNode !== null && node.doc._id === hoverNode.doc._id\n ? rgba(gray[500].hex, 0.8)\n : nodeColor.fill\n ctx.strokeStyle = nodeColor.border\n ctx.lineWidth = 0.5\n ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false)\n ctx.stroke()\n ctx.fill()\n\n if (radius * globalScale > 10) {\n ctx.font = `${fontSize}px sans-serif`\n const w = radius * 2 + 30 / globalScale\n for (let len = 50; len >= 5; len /= 1.2) {\n const label = truncate(labelFor(node.doc), Math.round(len))\n const textMetrics = ctx.measureText(label)\n if (textMetrics.width < w) {\n // ctx.fillStyle = rgba(color.white.hex, 1.0)\n ctx.textAlign = 'center'\n ctx.textBaseline = 'top'\n\n ctx.strokeStyle = rgba(black.hex, 0.5)\n ctx.lineWidth = 2 / globalScale\n ctx.strokeText(label, node.x, node.y + radius + 5 / globalScale)\n\n ctx.fillText(label, node.x, node.y + radius + 5 / globalScale)\n break\n }\n }\n }\n }\n }\n }}\n linkCanvasObject={(link: any, ctx, globalScale) => {\n ctx.beginPath()\n ctx.strokeStyle = rgba(gray[500].hex, 0.125)\n ctx.lineWidth = 2 / globalScale\n ctx.moveTo(link.source.x, link.source.y)\n ctx.lineTo(link.target.x, link.target.y)\n ctx.stroke()\n }}\n />\n </GraphRoot>\n </GraphWrapper>\n )\n}\n\nconst colorCache = {}\nlet typeColorNum = 0\n\nfunction getDocTypeColor(docType) {\n if (colorCache[docType]) {\n return colorCache[docType]\n }\n\n const hue = COLOR_HUES[typeColorNum % COLOR_HUES.length]\n\n typeColorNum += 1\n\n colorCache[docType] = {\n fill: hues[hue][400].hex,\n border: rgba(black.hex, 0.5),\n }\n\n return colorCache[docType]\n}\n","import {useEffect} from 'react'\nimport {useClient} from 'sanity'\nimport {ListenEvent, ListenOptions} from '@sanity/client'\n\nexport function useListen(\n query: string,\n params: {[key: string]: any},\n options: ListenOptions,\n onUpdate: (event: ListenEvent<any>) => void,\n dependencies: unknown[]\n): void {\n const client = useClient()\n useEffect(() => {\n const subscription = client.listen(query, params, options).subscribe((update) => {\n onUpdate(update)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, dependencies)\n}\n\nexport function useFetchDocuments(\n query: string,\n onFetch: (event: ListenEvent<any>) => void,\n dependencies: unknown[]\n): void {\n const client = useClient()\n useEffect(() => {\n client.fetch(query).then((result) => {\n onFetch(result)\n })\n }, dependencies)\n}\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function sizeOf(value: any): number {\n if (value === null) {\n return 0\n }\n\n if (typeof value === 'object') {\n return Object.entries(value).reduce((total, [k, v]) => total + sizeOf(k) + sizeOf(v), 0)\n }\n\n if (Array.isArray(value)) {\n return Object.entries(value).reduce((total, v) => total + sizeOf(v), 0)\n }\n\n if (typeof value === 'string') {\n return value.length\n }\n\n return 1\n}\n\nexport function loadImage(url: string, w: number, h: number): Promise<HTMLImageElement | null> {\n return new Promise((resolve) => {\n const img = new Image(w, h)\n img.onload = () => {\n resolve(img)\n }\n img.onerror = (event) => {\n // eslint-disable-next-line no-console\n console.log('Image error', event)\n resolve(null)\n }\n img.src = url\n })\n}\n\nexport function sortBy<T>(array: T[], f: (t: T) => number): T[] {\n return array.sort((a, b) => {\n const va = f(a)\n const vb = f(b)\n // eslint-disable-next-line no-nested-ternary\n return va < vb ? -1 : va > vb ? 1 : 0\n })\n}\n\nexport function truncate(s: string, limit: number): string {\n if (s.length > limit) {\n return `${s.substring(0, limit)}…`\n }\n return s\n}\n","import styled from 'styled-components'\nimport {Theme} from '@sanity/ui'\nimport {black} from '@sanity/color'\nimport React, {PropsWithChildren} from 'react'\n\ntype Style = PropsWithChildren<{theme: SanityTheme}>\ntype SanityTheme = Theme['sanity']\n\nexport const GraphRoot: React.FC<Style> = styled.div`\n font-family: ${({theme}: Style) => theme.fonts.text.family};\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: ${black.hex};\n`\n\nexport const GraphWrapper: React.FC<Style> = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n` as React.FC<Style>\n\nexport const HoverNode: React.FC<Style> = styled.div`\n font-family: ${({theme}: Style) => theme.fonts.text.family};\n display: none;\n position: absolute;\n bottom: ${({theme}: Style) => theme.space[0]}px;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n background: var(--component-bg);\n border-radius: ${({theme}: Style) => theme.radius[2]}px;\n padding: ${({theme}: Style) => theme.space[2]}px;\n z-index: 1000;\n\n &:empty {\n display: none;\n }\n`\n\nexport const Legend: React.FC<Style> = styled.div`\n color: #ccc;\n position: absolute;\n top: ${({theme}: Style) => theme.space[4]}px;\n left: ${({theme}: Style) => theme.space[4]}px;\n\n & > div {\n margin: 5px 0;\n }\n`\n\nexport const LegendRow = styled.div`\n display: flex;\n`\n\nexport const LegendBadge: React.FC<Style> = styled.div`\n width: 1.25em;\n height: 1.25em;\n background: currentColor;\n border-radius: 50%;\n margin-right: ${({theme}: Style) => theme.space[2]}px;\n`\n","import React from 'react'\n\n/**\n * Couple of things to note:\n * - width and height is set to 1em\n * - fill is `currentColor` - this will ensure that the icon looks uniform and\n * that the hover/active state works. You can of course render anything you\n * would like here, but for plugins that are to be used in more than one\n * studio, we suggest these rules are followed\n **/\nexport const GraphViewIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 46.063 46.063\">\n <path\n fill=\"currentColor\"\n d=\"M18.022 38.676v2.813h-1.21q-4.864 0-6.525-1.447-1.64-1.445-1.64-5.762v-4.666q0-2.95-1.055-4.083-1.055-1.13-3.828-1.13h-1.19v-2.794h1.19q2.793 0 3.828-1.114 1.055-1.132 1.055-4.043V11.76q0-4.316 1.64-5.742 1.66-1.446 6.524-1.446h1.212v2.793h-1.328q-2.754 0-3.594.86-.84.86-.84 3.613v4.844q0 3.066-.898 4.453-.88 1.387-3.028 1.875 2.168.527 3.047 1.914.88 1.387.88 4.434v4.843q0 2.754.84 3.614.84.86 3.594.86h1.328zM28.04 38.676h1.368q2.735 0 3.555-.84.84-.84.84-3.633V29.36q0-3.047.88-4.434.878-1.387 3.046-1.914-2.17-.488-3.048-1.875-.88-1.387-.88-4.453V11.84q0-2.773-.84-3.613-.82-.86-3.554-.86H28.04V4.574h1.232q4.863 0 6.484 1.446 1.64 1.426 1.64 5.742v4.687q0 2.91 1.055 4.042 1.056 1.114 3.83 1.114h1.21V24.4h-1.21q-2.774 0-3.83 1.13-1.053 1.134-1.053 4.084v4.667q0 4.318-1.64 5.763-1.622 1.446-6.485 1.446h-1.23v-2.814z\"\n />\n </svg>\n)\n"],"names":[],"version":3,"file":"index.modern.js.map","sourceRoot":"../"}
1
+ {"mappings":"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","sources":["src/index.tsx","src/tool/GraphView.tsx","src/tool/hooks.ts","src/tool/utils.ts","src/tool/GraphViewStyle.tsx","src/tool/GraphViewIcon.tsx"],"sourcesContent":["import {GraphView} from './tool/GraphView'\nimport {GraphViewIcon} from './tool/GraphViewIcon'\nimport {createPlugin, route} from 'sanity'\nimport React from 'react'\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport const contentGraphView = createPlugin<GraphViewConfig>((config: GraphViewConfig = {}) => {\n return {\n name: '@sanity/content-graph-view',\n\n tools: (prev) => {\n return [\n ...prev,\n {\n name: 'graph-your-content',\n title: 'Graph',\n icon: GraphViewIcon,\n component: function component() {\n return <GraphView {...config} />\n },\n router: route.create('/:selectedDocumentId'),\n },\n ]\n },\n }\n})\n","import {SanityClient, useUserColorManager} from 'sanity/_unstable'\nimport {rgba} from 'polished'\nimport deepEqual from 'deep-equal'\nimport React, {useCallback, useEffect, useState} from 'react'\nimport {ForceGraph2D} from 'react-force-graph'\nimport {v4 as uuidv4} from 'uuid'\nimport BezierEasing from 'bezier-easing'\nimport {useFetchDocuments, useListen} from './hooks'\nimport {sortBy, loadImage, sizeOf, truncate} from './utils'\nimport {SanityDocument} from '@sanity/client'\nimport {useClient, useRouter} from 'sanity'\nimport {GraphRoot, GraphWrapper, HoverNode, Legend, LegendBadge, LegendRow} from './GraphViewStyle'\nimport {useTheme} from '@sanity/ui'\nimport {black, COLOR_HUES, gray, white, hues} from '@sanity/color'\n\nconst DEFAULT_QUERY = `\n *[\n !(_id in path(\"_.*\")) &&\n !(_type match \"system.*\") &&\n !(_type match \"sanity.*\")\n ]\n`\n\nconst fadeEasing = BezierEasing(0, 0.9, 1, 1)\nconst softEasing = BezierEasing(0.25, 0.1, 0.0, 1.0)\nconst idleTimeout = 10000\nconst imageSize = 40\n\nfunction getTopDocTypes(counts: Record<string, number>) {\n return sortBy(Object.keys(counts), (docType) => counts[docType] || 0)\n .reverse()\n .slice(0, 10)\n}\n\nfunction formatDocType(docType: string) {\n return (docType.substring(0, 1).toUpperCase() + docType.substring(1))\n .replace(/\\./g, ' ')\n .replace(/[A-Z]/g, ' $&')\n .trim()\n}\n\nfunction getDocTypeCounts(docs: SanityDocument[]) {\n const types: Record<string, number> = {}\n for (const doc of docs) {\n types[doc._type] = (types[doc._type] || 0) + 1\n }\n return types\n}\n\nfunction labelFor(doc: SanityDocument) {\n return `${doc.title || doc.name || doc._id}`.trim()\n}\n\nfunction valueFor(doc: any, maxSize: number) {\n return 5 + 100 * (sizeOf(doc) / maxSize)\n}\n\nfunction findRefs(obj: any, dest: any[] = []) {\n if (obj !== null) {\n if (typeof obj === 'object') {\n for (const [k, v] of Object.entries(obj)) {\n if (k === '_ref' && typeof v === 'string' && v.length > 0) {\n dest.push(stripDraftId(v))\n }\n findRefs(v, dest)\n }\n } else if (Array.isArray(obj)) {\n for (const v of obj) {\n findRefs(v, dest)\n }\n }\n }\n return dest\n}\n\nfunction stripDraftId(id: string) {\n return id.replace(/^drafts\\./, '')\n}\n\nfunction deduplicateDrafts(docs: SanityDocument[]) {\n const deduped: Record<string, SanityDocument> = {}\n for (const doc of docs) {\n if (!/^drafts\\./.test(doc._id)) {\n deduped[doc._id] = doc\n }\n }\n for (const doc of docs) {\n if (/^drafts\\./.test(doc._id)) {\n const id = stripDraftId(doc._id)\n deduped[id] = Object.assign(doc, {_id: id})\n }\n }\n return Object.values(deduped)\n}\n\nclass Users {\n _users: any[] = []\n\n async getById(id: string, client: SanityClient) {\n let user = this._users.find((u) => u._id === id)\n if (!user) {\n user = await client.users.getById(id)\n this._users.push(user)\n user.image = await loadImage(\n user.imageUrl ||\n 'https://raw.githubusercontent.com/sanity-io/sanity-plugin-graph-view/main/assets/head-silhouette.jpg',\n imageSize,\n imageSize\n )\n }\n return user\n }\n}\n\nclass Session {\n id: string | null = null\n user: any = null\n doc: SanityDocument | null = null\n lastActive: number = 0\n startTime: number = 0\n angle: number = 0\n}\n\nclass GraphData {\n sessions: Session[] = []\n data: any\n\n constructor(docs: SanityDocument[] = []) {\n const docsById: Record<string, SanityDocument> = {}\n for (const doc of docs) {\n docsById[doc._id] = doc\n }\n\n this.data = {\n nodes: docs.map((d) => Object.assign({id: d._id, type: 'document', doc: d})),\n links: docs\n .flatMap((doc) => findRefs(doc).map((ref) => ({source: doc._id, target: ref})))\n .filter((link) => docsById[link.source] && docsById[link.target]),\n }\n }\n\n setSession(user, docNode) {\n let session = this.sessions.find((s) => s.user.id === user.id && s.doc?._id === docNode.doc._id)\n if (!session) {\n session = new Session()\n session.id = uuidv4()\n session.user = user\n session.startTime = Date.now()\n session.doc = docNode.doc\n session.angle = Math.random() * 2 * Math.PI\n this.sessions.push(session)\n }\n session.lastActive = Date.now()\n }\n\n reapSessions() {\n for (let i = 0; i < this.sessions.length; i++) {\n const session = this.sessions[i]\n if (Date.now() - session.lastActive > idleTimeout) {\n this.sessions = [...this.sessions.slice(0, i), ...this.sessions.slice(i + 1)]\n i--\n }\n }\n }\n\n clone() {\n const copy = new GraphData()\n Object.assign(copy, this)\n copy.data = {\n nodes: [...this.data.nodes],\n links: [...this.data.links],\n }\n return copy\n }\n}\n\nconst users = new Users()\n\ninterface GraphViewConfig {\n query?: string\n}\n\nexport function GraphView(props: GraphViewConfig) {\n const query = props.query || DEFAULT_QUERY\n\n const userColorManager = useUserColorManager()\n const [maxSize, setMaxSize] = useState(0)\n const [hoverNode, setHoverNode] = useState<any>(null)\n const [documents, setDocuments] = useState<SanityDocument[]>([])\n const [docTypes, setDocTypes] = useState<Record<string, number>>({})\n const [graph, setGraph] = useState(() => new GraphData())\n const router = useRouter()\n const client = useClient()\n\n const fetchCallback = useCallback((_docs) => {\n const docs = deduplicateDrafts(_docs)\n setMaxSize(Math.max(...docs.map(sizeOf)))\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setGraph(new GraphData(docs))\n }, [])\n\n const listenCallback = useCallback(\n async (update) => {\n const doc = update.result\n if (doc) {\n doc._id = stripDraftId(doc._id)\n\n const docsById: Record<string, SanityDocument> = {}\n for (const d of documents) {\n docsById[d._id] = d\n }\n\n let oldDoc\n const docs = [...documents]\n const idx = documents.findIndex((d) => d._id === doc._id)\n if (idx >= 0) {\n oldDoc = docs[idx]\n docs[idx] = doc\n } else {\n docs.push(doc)\n }\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setMaxSize(Math.max(...docs.map(sizeOf)))\n\n const newGraph = graph.clone()\n\n const oldRefs = findRefs(oldDoc || {}).filter(\n (id) => id === doc._id || docsById[id] !== null\n )\n const newRefs = findRefs(doc).filter((id) => id === doc._id || docsById[id] !== null)\n\n let graphChanged = !deepEqual(oldRefs, newRefs)\n if (graphChanged) {\n newGraph.data.links = newGraph.data.links\n .filter((l) => l.source.id !== doc._id)\n .concat(newRefs.map((ref) => ({source: doc._id, target: ref})))\n }\n\n let docNode\n const nodeIdx = graph.data.nodes.findIndex((n) => n.doc && n.doc._id === doc._id)\n if (nodeIdx >= 0) {\n docNode = graph.data.nodes[nodeIdx]\n docNode.doc = doc\n } else {\n docNode = {id: doc._id, type: 'document', doc: doc}\n newGraph.data.nodes.push(docNode)\n graphChanged = true\n }\n if (graphChanged) {\n setGraph(newGraph)\n }\n\n const user = await users.getById(update.identity, client)\n graph.setSession(user, docNode)\n } else if (update.transition === 'disappear') {\n const docId = stripDraftId(update.documentId)\n\n const docs = documents.filter((d) => d._id !== docId)\n setDocuments(docs)\n setDocTypes(getDocTypeCounts(docs))\n setMaxSize(Math.max(...docs.map(sizeOf)))\n\n const newGraph = graph.clone()\n newGraph.data.links = newGraph.data.links.filter(\n (l) => l.source.id !== docId && l.target.id !== docId\n )\n newGraph.data.nodes = newGraph.data.nodes.filter((n) => n.id !== docId)\n setGraph(newGraph)\n }\n },\n [documents, graph, client]\n )\n useFetchDocuments(query, fetchCallback, [])\n useListen(query, {}, {}, listenCallback, [documents, graph])\n useEffect(() => {\n const interval = setInterval(() => graph.reapSessions(), 1000)\n return () => clearInterval(interval)\n }, [graph])\n\n const theme = useTheme().sanity\n\n return (\n <GraphWrapper theme={theme}>\n <GraphRoot theme={theme}>\n <Legend theme={theme}>\n {getTopDocTypes(docTypes).map((docType) => (\n <LegendRow\n className={'legend__row'}\n key={docType}\n style={{color: getDocTypeColor(docType).fill}}\n >\n <LegendBadge theme={theme} />\n <div>{formatDocType(docType)}</div>\n </LegendRow>\n ))}\n </Legend>\n {hoverNode && <HoverNode theme={theme}>{labelFor(hoverNode.doc)}</HoverNode>}\n\n <ForceGraph2D\n graphData={graph.data}\n nodeAutoColorBy=\"group\"\n enableNodeDrag={false}\n onNodeHover={(node: any) => setHoverNode(node)}\n onNodeClick={(node: any) => {\n router.navigateIntent('edit', {id: node.doc._id, documentType: node.doc._type})\n }}\n linkColor={() => rgba(gray[500].hex, 0.25)}\n nodeLabel={() => ''}\n nodeRelSize={1}\n nodeVal={(node: any) => valueFor(node.doc, maxSize)}\n onRenderFramePost={(ctx, globalScale) => {\n for (const session of graph.sessions) {\n const node = graph.data.nodes.find((n) => n.doc && n.doc._id === session?.doc?._id)\n if (node) {\n const idleFactorRange = idleTimeout\n const angle = session.angle\n const radius = Math.sqrt(valueFor(node.doc, maxSize))\n const image = session.user.image\n const userColor = userColorManager.get(session.user.displayName).tints[400].hex\n const distance = radius * globalScale + 40\n const imgW = image ? image.width : 0\n const imgH = image ? image.height : 0\n const x = node.x + (Math.sin(angle) * distance) / globalScale\n const y = node.y + (Math.cos(angle) * distance) / globalScale\n\n ctx.save()\n try {\n ctx.globalAlpha = fadeEasing(\n 1 - Math.min(idleFactorRange, Date.now() - session.lastActive) / idleFactorRange\n )\n ctx.font = `bold ${Math.round(12 / globalScale)}px sans-serif`\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(white.hex, 1.0)\n ctx.lineWidth = 2 / globalScale\n ctx.moveTo(\n node.x + (Math.sin(angle) * (distance - imgW / 2)) / globalScale,\n node.y + (Math.cos(angle) * (distance - imgH / 2)) / globalScale\n )\n ctx.lineTo(node.x + Math.sin(angle) * radius, node.y + Math.cos(angle) * radius)\n ctx.stroke()\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(white.hex, 1.0)\n ctx.lineWidth = 2 / globalScale\n ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false)\n ctx.stroke()\n\n if (image) {\n ctx.save()\n // eslint-disable-next-line max-depth\n try {\n const dur = 700\n const f = softEasing(\n Math.max(0, (dur - (Date.now() - session.startTime)) / dur)\n )\n // eslint-disable-next-line max-depth\n if (f > 0) {\n ctx.beginPath()\n ctx.fillStyle = rgba(userColor, f)\n ctx.arc(x, y, (imgW / 2 + 10) / globalScale, 0, 2 * Math.PI, false)\n ctx.fill()\n }\n\n ctx.beginPath()\n ctx.fillStyle = rgba(white.hex, 1.0)\n ctx.arc(x, y, imgW / globalScale / 2, 0, 2 * Math.PI, false)\n ctx.clip()\n\n ctx.drawImage(\n image,\n x - imgW / globalScale / 2,\n y - imgH / globalScale / 2,\n imgW / globalScale,\n imgH / globalScale\n )\n\n ctx.strokeStyle = black.hex\n ctx.lineWidth = 6 / globalScale\n ctx.stroke()\n\n ctx.strokeStyle = userColor\n ctx.lineWidth = 4 / globalScale\n ctx.stroke()\n } finally {\n ctx.restore()\n }\n }\n\n ctx.beginPath()\n ctx.strokeStyle = rgba(black.hex, 1)\n ctx.lineWidth = 0.5 / globalScale\n ctx.arc(x, y, imgW / globalScale / 2, 0, 2 * Math.PI, false)\n ctx.stroke()\n\n const above = angle >= Math.PI / 2 && angle < Math.PI * 1.5\n const textY = above\n ? y - (imgH / 2 + 5) / globalScale\n : y + (imgH / 2 + 5) / globalScale\n ctx.fillStyle = rgba(white.hex, 1.0)\n ctx.textAlign = 'center'\n ctx.textBaseline = above ? 'bottom' : 'top'\n ctx.fillText(session.user.displayName, x, textY)\n } finally {\n ctx.restore()\n }\n }\n }\n }}\n nodeCanvasObject={(node: any, ctx, globalScale) => {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'document': {\n const nodeColor = getDocTypeColor(node.doc._type)\n const radius = Math.sqrt(valueFor(node.doc, maxSize))\n const fontSize = Math.min(100, 10.0 / globalScale)\n\n ctx.beginPath()\n ctx.fillStyle =\n hoverNode !== null && node.doc._id === hoverNode.doc._id\n ? rgba(gray[500].hex, 0.8)\n : nodeColor.fill\n ctx.strokeStyle = nodeColor.border\n ctx.lineWidth = 0.5\n ctx.arc(node.x, node.y, radius, 0, 2 * Math.PI, false)\n ctx.stroke()\n ctx.fill()\n\n if (radius * globalScale > 10) {\n ctx.font = `${fontSize}px sans-serif`\n const w = radius * 2 + 30 / globalScale\n for (let len = 50; len >= 5; len /= 1.2) {\n const label = truncate(labelFor(node.doc), Math.round(len))\n const textMetrics = ctx.measureText(label)\n if (textMetrics.width < w) {\n // ctx.fillStyle = rgba(color.white.hex, 1.0)\n ctx.textAlign = 'center'\n ctx.textBaseline = 'top'\n\n ctx.strokeStyle = rgba(black.hex, 0.5)\n ctx.lineWidth = 2 / globalScale\n ctx.strokeText(label, node.x, node.y + radius + 5 / globalScale)\n\n ctx.fillText(label, node.x, node.y + radius + 5 / globalScale)\n break\n }\n }\n }\n }\n }\n }}\n linkCanvasObject={(link: any, ctx, globalScale) => {\n ctx.beginPath()\n ctx.strokeStyle = rgba(gray[500].hex, 0.125)\n ctx.lineWidth = 2 / globalScale\n ctx.moveTo(link.source.x, link.source.y)\n ctx.lineTo(link.target.x, link.target.y)\n ctx.stroke()\n }}\n />\n </GraphRoot>\n </GraphWrapper>\n )\n}\n\nconst colorCache = {}\nlet typeColorNum = 0\n\nfunction getDocTypeColor(docType) {\n if (colorCache[docType]) {\n return colorCache[docType]\n }\n\n const hue = COLOR_HUES[typeColorNum % COLOR_HUES.length]\n\n typeColorNum += 1\n\n colorCache[docType] = {\n fill: hues[hue][400].hex,\n border: rgba(black.hex, 0.5),\n }\n\n return colorCache[docType]\n}\n","import {useEffect} from 'react'\nimport {useClient} from 'sanity'\nimport {ListenEvent, ListenOptions} from '@sanity/client'\n\nexport function useListen(\n query: string,\n params: {[key: string]: any},\n options: ListenOptions,\n onUpdate: (event: ListenEvent<any>) => void,\n dependencies: unknown[]\n): void {\n const client = useClient()\n useEffect(() => {\n const subscription = client.listen(query, params, options).subscribe((update) => {\n onUpdate(update)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, dependencies)\n}\n\nexport function useFetchDocuments(\n query: string,\n onFetch: (event: ListenEvent<any>) => void,\n dependencies: unknown[]\n): void {\n const client = useClient()\n useEffect(() => {\n client.fetch(query).then((result) => {\n onFetch(result)\n })\n }, dependencies)\n}\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function sizeOf(value: any): number {\n if (value === null) {\n return 0\n }\n\n if (typeof value === 'object') {\n return Object.entries(value).reduce((total, [k, v]) => total + sizeOf(k) + sizeOf(v), 0)\n }\n\n if (Array.isArray(value)) {\n return Object.entries(value).reduce((total, v) => total + sizeOf(v), 0)\n }\n\n if (typeof value === 'string') {\n return value.length\n }\n\n return 1\n}\n\nexport function loadImage(url: string, w: number, h: number): Promise<HTMLImageElement | null> {\n return new Promise((resolve) => {\n const img = new Image(w, h)\n img.onload = () => {\n resolve(img)\n }\n img.onerror = (event) => {\n // eslint-disable-next-line no-console\n console.log('Image error', event)\n resolve(null)\n }\n img.src = url\n })\n}\n\nexport function sortBy<T>(array: T[], f: (t: T) => number): T[] {\n return array.sort((a, b) => {\n const va = f(a)\n const vb = f(b)\n // eslint-disable-next-line no-nested-ternary\n return va < vb ? -1 : va > vb ? 1 : 0\n })\n}\n\nexport function truncate(s: string, limit: number): string {\n if (s.length > limit) {\n return `${s.substring(0, limit)}…`\n }\n return s\n}\n","import styled from 'styled-components'\nimport {Theme} from '@sanity/ui'\nimport {black} from '@sanity/color'\nimport React, {PropsWithChildren} from 'react'\n\ntype Style = PropsWithChildren<{theme: SanityTheme}>\ntype SanityTheme = Theme['sanity']\n\nexport const GraphRoot: React.FC<Style> = styled.div`\n font-family: ${({theme}: Style) => theme.fonts.text.family};\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: ${black.hex};\n`\n\nexport const GraphWrapper: React.FC<Style> = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n` as React.FC<Style>\n\nexport const HoverNode: React.FC<Style> = styled.div`\n font-family: ${({theme}: Style) => theme.fonts.text.family};\n display: none;\n position: absolute;\n bottom: ${({theme}: Style) => theme.space[0]}px;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n background: var(--component-bg);\n border-radius: ${({theme}: Style) => theme.radius[2]}px;\n padding: ${({theme}: Style) => theme.space[2]}px;\n z-index: 1000;\n\n &:empty {\n display: none;\n }\n`\n\nexport const Legend: React.FC<Style> = styled.div`\n color: #ccc;\n position: absolute;\n top: ${({theme}: Style) => theme.space[4]}px;\n left: ${({theme}: Style) => theme.space[4]}px;\n\n & > div {\n margin: 5px 0;\n }\n`\n\nexport const LegendRow = styled.div`\n display: flex;\n`\n\nexport const LegendBadge: React.FC<Style> = styled.div`\n width: 1.25em;\n height: 1.25em;\n background: currentColor;\n border-radius: 50%;\n margin-right: ${({theme}: Style) => theme.space[2]}px;\n`\n","import React from 'react'\n\n/**\n * Couple of things to note:\n * - width and height is set to 1em\n * - fill is `currentColor` - this will ensure that the icon looks uniform and\n * that the hover/active state works. You can of course render anything you\n * would like here, but for plugins that are to be used in more than one\n * studio, we suggest these rules are followed\n **/\nexport const GraphViewIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 46.063 46.063\">\n <path\n fill=\"currentColor\"\n d=\"M18.022 38.676v2.813h-1.21q-4.864 0-6.525-1.447-1.64-1.445-1.64-5.762v-4.666q0-2.95-1.055-4.083-1.055-1.13-3.828-1.13h-1.19v-2.794h1.19q2.793 0 3.828-1.114 1.055-1.132 1.055-4.043V11.76q0-4.316 1.64-5.742 1.66-1.446 6.524-1.446h1.212v2.793h-1.328q-2.754 0-3.594.86-.84.86-.84 3.613v4.844q0 3.066-.898 4.453-.88 1.387-3.028 1.875 2.168.527 3.047 1.914.88 1.387.88 4.434v4.843q0 2.754.84 3.614.84.86 3.594.86h1.328zM28.04 38.676h1.368q2.735 0 3.555-.84.84-.84.84-3.633V29.36q0-3.047.88-4.434.878-1.387 3.046-1.914-2.17-.488-3.048-1.875-.88-1.387-.88-4.453V11.84q0-2.773-.84-3.613-.82-.86-3.554-.86H28.04V4.574h1.232q4.863 0 6.484 1.446 1.64 1.426 1.64 5.742v4.687q0 2.91 1.055 4.042 1.056 1.114 3.83 1.114h1.21V24.4h-1.21q-2.774 0-3.83 1.13-1.053 1.134-1.053 4.084v4.667q0 4.318-1.64 5.763-1.622 1.446-6.485 1.446h-1.23v-2.814z\"\n />\n </svg>\n)\n"],"names":[],"version":3,"file":"index.modern.js.map","sourceRoot":"../"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sanity-plugin-graph-view",
3
- "version": "3.0.0-v3-studio.1",
3
+ "version": "3.0.0-v3-studio.2",
4
4
  "author": "Sanity.io <hello@sanity.io>",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -66,7 +66,7 @@
66
66
  "prettier": "^2.6.2",
67
67
  "react": "^17.0.0 || ^18.0.0",
68
68
  "rimraf": "^3.0.2",
69
- "sanity": "3.0.0-dev-preview.15",
69
+ "sanity": "3.0.0-dev-preview.17",
70
70
  "typescript": "4.7.4"
71
71
  },
72
72
  "peerDependencies": {
package/src/index.tsx CHANGED
@@ -1,7 +1,6 @@
1
1
  import {GraphView} from './tool/GraphView'
2
2
  import {GraphViewIcon} from './tool/GraphViewIcon'
3
- import {createPlugin} from 'sanity'
4
- import {route} from 'sanity/_unstable'
3
+ import {createPlugin, route} from 'sanity'
5
4
  import React from 'react'
6
5
 
7
6
  interface GraphViewConfig {
@@ -8,8 +8,7 @@ import BezierEasing from 'bezier-easing'
8
8
  import {useFetchDocuments, useListen} from './hooks'
9
9
  import {sortBy, loadImage, sizeOf, truncate} from './utils'
10
10
  import {SanityDocument} from '@sanity/client'
11
- import {useRouter} from 'sanity/_unstable'
12
- import {useClient} from 'sanity'
11
+ import {useClient, useRouter} from 'sanity'
13
12
  import {GraphRoot, GraphWrapper, HoverNode, Legend, LegendBadge, LegendRow} from './GraphViewStyle'
14
13
  import {useTheme} from '@sanity/ui'
15
14
  import {black, COLOR_HUES, gray, white, hues} from '@sanity/color'