@sanity/assist

6.1.176.1.18
dist/index.js
~dist/index.jsModified
+33−21
Index: package/dist/index.js
===================================================================
--- package/dist/index.js
+++ package/dist/index.js
@@ -1,10 +1,12 @@
+import "@sanity/ui/styles.css";
 import { FormBuilder, FormCallbacksProvider, FormFieldHeaderText, FormInput, MemberFieldError, ObjectInputMember, PatchEvent, PerspectiveProvider, PresenceOverlay, StatusButton, VirtualizerScrollInstanceProvider, createPatchChannel, defineArrayMember, defineField, definePlugin, defineType, fromMutationPatches, getDraftId, getPublishedId, getVersionFromId, getVersionId, insert, isArrayOfObjectsSchemaType, isArraySchemaType, isDocumentSchemaType, isKeySegment, isObjectSchemaType, isRecord, isVersionId, pathToString, set, setIfMissing, stringToPath, typed, unset, useClient, useColorSchemeValue, useCurrentUser, useDocumentPresence, useDocumentStore, useEditState, useFormCallbacks, usePerspective, useSchema, useSyncState, useWorkspaceSchemaId } from "sanity";
 import { c } from "react/compiler-runtime";
-import { Autocomplete, Box, Breadcrumbs, Button, Card, Checkbox, Container, Dialog, ErrorBoundary, Flex, Label, Menu, MenuButton, MenuItem, Popover, Radio, Spinner, Stack, Switch, Text, TextArea, ThemeProvider, Tooltip, focusFirstDescendant, rgba, useClickOutside, useGlobalKeyDown, useLayer, useTheme, useToast } from "@sanity/ui";
+import { Box, Button, Card, Checkbox, Container, Dialog, ErrorBoundary, Flex, Label, Radio, Spinner, Stack, Switch, Text, TextArea, ThemeProvider, focusFirstDescendant, rgba, useClickOutsideEvent, useGlobalKeyDown, useLayer, useTheme } from "@sanity/ui";
 import { createContext, isValidElement, useCallback, useContext, useEffect, useEffectEvent, useId, useMemo, useReducer, useRef, useState } from "react";
 import { DocumentInspectorHeader, DocumentPaneProvider, PaneRouterContext, useDocumentPane, usePaneRouter } from "sanity/structure";
 import { Fragment, jsx, jsxs } from "react/jsx-runtime";
+import { useToast } from "@sanity/ui/toast";
 import { addSeconds } from "date-fns/addSeconds";
 import { isAfter } from "date-fns/isAfter";
 import { minutesToMilliseconds } from "date-fns/minutesToMilliseconds";
 import { BlockContentIcon } from "@sanity/icons/BlockContent";
@@ -15,26 +17,31 @@
 import { OlistIcon } from "@sanity/icons/Olist";
 import { StringIcon } from "@sanity/icons/String";
 import { extractWithPath } from "@sanity/mutator";
 import { PlayIcon } from "@sanity/icons/Play";
+import { Tooltip } from "@sanity/ui/tooltip";
 import { keyframes, styled } from "styled-components";
 import { purple } from "@sanity/color";
 import { SparklesIcon } from "@sanity/icons/Sparkles";
 import { ArrowRightIcon } from "@sanity/icons/ArrowRight";
 import { CloseIcon } from "@sanity/icons/Close";
 import { RetryIcon } from "@sanity/icons/Retry";
 import { catchError, distinctUntilChanged, filter, mergeMap, share, take, tap } from "rxjs/operators";
 import { SearchIcon } from "@sanity/icons/Search";
+import { Autocomplete } from "@sanity/ui/autocomplete";
+import { Breadcrumbs } from "@sanity/ui/breadcrumbs";
 import { CheckmarkCircleIcon } from "@sanity/icons/CheckmarkCircle";
 import { ClockIcon } from "@sanity/icons/Clock";
 import { CloseCircleIcon } from "@sanity/icons/CloseCircle";
 import { ErrorOutlineIcon } from "@sanity/icons/ErrorOutline";
 import { SyncIcon } from "@sanity/icons/Sync";
+import { Popover } from "@sanity/ui/popover";
 import { formatDistanceToNow } from "date-fns/formatDistanceToNow";
 import isEqual from "react-fast-compare";
 import get from "lodash-es/get.js";
 import { Icon, icons } from "@sanity/icons";
 import { ControlsIcon } from "@sanity/icons/Controls";
+import { Menu, MenuButton, MenuItem } from "@sanity/ui/menu";
 import { TranslateIcon } from "@sanity/icons/Translate";
 import { LockIcon } from "@sanity/icons/Lock";
 import { CodeIcon } from "@sanity/icons/Code";
 import { ComposeIcon } from "@sanity/icons/Compose";
@@ -64,9 +71,9 @@
 		let el = ref.current;
 		if (!el) return;
 		let scrollParents = [], parent = el.parentElement;
 		for (; parent && parent !== document.body;) hasOverflowScroll(parent) && scrollParents.push(parent), parent = parent.parentElement;
-		let handleResize = function() {
+		let handleResize = function handleResize() {
 			let boundsRect = scrollParents[0]?.getBoundingClientRect() || {
 				x: 0,
 				y: 0,
 				width: window.innerWidth,
@@ -82,9 +89,9 @@
 				y: domRect.y + elementScrollYRef.current,
 				w: domRect.width,
 				h: domRect.height
 			});
-		}, handleScroll = function() {
+		}, handleScroll = function handleScroll() {
 			let scrollX = window.scrollX, scrollY = window.scrollY;
 			for (let scrollParent_0 of scrollParents) scrollX += scrollParent_0.scrollLeft, scrollY += scrollParent_0.scrollTop;
 			let scrollParent_1 = scrollParents[0];
 			boundsScrollXRef.current = scrollX - (scrollParent_1?.scrollLeft || window.scrollX), boundsScrollYRef.current = scrollY - (scrollParent_1?.scrollTop || window.scrollY), setBoundsScroll({
@@ -663,9 +670,9 @@
 function useTranslate(apiClient) {
 	let $ = c(8), [loading, setLoading] = useState(!1), user = useCurrentUser(), types = useSerializedTypes(), toast = useToast(), t0;
 	$[0] !== apiClient || $[1] !== toast || $[2] !== types || $[3] !== user?.id ? (t0 = (t1) => {
 		let { documentId, languagePath, styleguide, translatePath, fieldLanguageMap, conditionalMembers } = t1;
-		return setLoading(!0), async function() {
+		return setLoading(!0), async function run() {
 			return apiClient.request({
 				method: "POST",
 				url: `/assist/tasks/translate/${apiClient.config().dataset}?projectId=${apiClient.config().projectId}`,
 				body: {
@@ -1651,9 +1658,10 @@
 					...acc,
 					conditionalState(member.field),
 					...innerFields
 				];
-			} else if (schemaType.jsonType === "array") {
+			}
+			if (schemaType.jsonType === "array") {
 				let array = member.field, arrayPaths = [], isObjectsArray = array.members.some((m) => m.kind === "item" && isObjectSchemaType(m.item.schemaType));
 				if (!array.readOnly) for (let arrayMember of array.members) {
 					if (arrayMember.kind === "error") continue;
 					let innerFields = isObjectsArray && !arrayMember.item.readOnly ? extractConditionalPaths(arrayMember.item, maxDepth) : [];
@@ -1669,9 +1677,10 @@
 					...arrayPaths
 				];
 			}
 			return [...acc, conditionalState(member.field)];
-		} else if (member.kind === "fieldSet") {
+		}
+		if (member.kind === "fieldSet") {
 			let conditionalFieldset = !!node.schemaType?.fieldsets?.some((f) => !f.single && f.name === member.fieldSet.name && typeof f.hidden == "function"), innerFields = extractConditionalPaths(member.fieldSet, maxDepth).map((f) => ({
 				...f,
 				conditional: conditionalFieldset || f.conditional
 			}));
@@ -1912,9 +1921,9 @@
 	}), $[2] = timeSince, $[3] = t2), t2;
 }
 const rotate = keyframes`0%{transform:rotate(0);}100%{transform:rotate(360deg);}`, SyncSpinningIcon = styled(SyncIcon).withConfig({
 	displayName: "SyncSpinningIcon",
-	componentId: "sc-40npdt-0"
+	componentId: "sc-mtdfu7-0"
 })`animation:${rotate} 1s linear infinite;`, TASK_CONFIG = {
 	aborted: {
 		title: "Canceled",
 		icon: CloseCircleIcon,
@@ -1958,17 +1967,19 @@
 		tasks,
 		instructions,
 		cancelRun,
 		showTitles
-	]), isRunning = useMemo(() => titledTasks.some((r) => !r.ended), [titledTasks]), hasErrors = useMemo(() => titledTasks.some((r_0) => r_0.reason === "error" || r_0.reason === "timeout"), [titledTasks]), [open, setOpen] = useState(!1), toggleOpen = useCallback(() => setOpen((v) => !v), []), [button, setButton] = useState(null), [popover, setPopover] = useState(null);
-	return useClickOutside(useCallback(() => {
+	]), isRunning = useMemo(() => titledTasks.some((r) => !r.ended), [titledTasks]), hasErrors = useMemo(() => titledTasks.some((r_0) => r_0.reason === "error" || r_0.reason === "timeout"), [titledTasks]), [open, setOpen] = useState(!1), toggleOpen = useCallback(() => setOpen((v) => !v), []), [button, setButton] = useState(null), [popover, setPopover] = useState(null), handleClickOutside = useCallback(() => {
 		setOpen(!1);
-	}, []), [button, popover]), /* @__PURE__ */ jsx(Popover, {
+	}, []);
+	useClickOutsideEvent(handleClickOutside, () => [button, popover]);
+	let handleEscape = useCallback(() => {
+		setOpen(!1), button?.focus();
+	}, [button]);
+	return /* @__PURE__ */ jsx(Popover, {
 		constrainSize: !0,
 		content: /* @__PURE__ */ jsx(TaskList, {
-			onEscape: useCallback(() => {
-				setOpen(!1), button?.focus();
-			}, [button]),
+			onEscape: handleEscape,
 			tasks: titledTasks
 		}),
 		open: open && !!titledTasks?.length,
 		placement: "top",
@@ -2730,9 +2741,10 @@
 				...acc,
 				thisFieldWithPath,
 				...innerFields
 			];
-		} else if (fieldSchema.jsonType === "array" && fieldSchema.of.length && fieldSchema.of.some((item) => "fields" in item) && path.length + 1 < maxDepth) {
+		}
+		if (fieldSchema.jsonType === "array" && fieldSchema.of.length && fieldSchema.of.some((item) => "fields" in item) && path.length + 1 < maxDepth) {
 			let { value: arrayValue } = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}, arrayPaths = [];
 			if (arrayValue?.length) for (let item of arrayValue) {
 				let itemPath = [...fieldPath, { _key: item._key }], itemSchema = fieldSchema.of.find((t) => t.name === item._type);
 				if (item._type || (itemSchema = fieldSchema.of[0], console.warn("Array item is missing _type - using the first defined type in the array.of schema", {
@@ -3175,9 +3187,9 @@
 function useFieldRefGetters(schema) {
 	let $ = c(5), t0;
 	$[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = createFieldRefCache(), $[0] = t0) : t0 = $[0];
 	let getForSchemaType = t0, t1;
-	$[1] === schema ? t1 = $[2] : (t1 = function(documentType) {
+	$[1] === schema ? t1 = $[2] : (t1 = function getRefsForType(documentType) {
 		let schemaType = schema.get(documentType);
 		if (!schemaType) throw Error(`Schema type "${documentType}" not found`);
 		return getForSchemaType(schemaType);
 	}, $[1] = schema, $[2] = t1);
@@ -3759,9 +3771,9 @@
 		hidden
 	});
 }
 function createAssistDocumentPresence(documentId) {
-	return function() {
+	return function AssistDocumentPresenceWrapper() {
 		return documentId ? /* @__PURE__ */ jsx(AssistDocumentPresence, {}) : null;
 	};
 }
 function AssistDocumentPresence() {
@@ -4677,9 +4689,9 @@
 		to: [{ type: contextDocumentSchema.name }],
 		title: "Context",
 		description: "The referenced context will be inserted into the instruction",
 		validation: (rule) => rule.required(),
-		components: { input: function(props) {
+		components: { input: function Fix(props) {
 			return /* @__PURE__ */ jsx(Box, {
 				style: { maxWidth: 300 },
 				children: props.renderDefault(props)
 			});
@@ -5008,9 +5020,9 @@
 				return docSchema && isObjectSchemaType(docSchema) && isSchemaAssistEnabled(docSchema) ? [...prev, createAssistDocumentPresence(documentId)] : prev;
 			},
 			components: { unstable_layout: AssistDocumentLayout }
 		},
-		studio: { components: { layout: function(props) {
+		studio: { components: { layout: function Layout(props) {
 			return /* @__PURE__ */ jsx(AssistLayout, {
 				...props,
 				config: configWithDefaults
 			});
@@ -5050,10 +5062,10 @@
 	return event.type === "welcome";
 }
 /** @internal */
 const listenQuery = (client, query, params = {}, options = {}) => {
-	let fetchQuery = typeof query == "string" ? query : query.fetch, listenerQuery = typeof query == "string" ? query : query.listen, fetchOnce$ = fetch(client, fetchQuery, params, options), [welcome$, mutationAndReconnect$] = partition(listen(client, listenerQuery, params, options).pipe(mergeMap((ev, i) => i === 0 && !isWelcomeEvent(ev) ? throwError(/* @__PURE__ */ Error(ev.type === "reconnect" ? "Could not establish EventSource connection" : `Received unexpected type of first event "${ev.type}"`)) : of(ev)), share()), isWelcomeEvent);
-	return merge(welcome$.pipe(take(1)), mutationAndReconnect$.pipe(filter((event) => !options.transitions || event.type !== "mutation" || options.transitions.includes(event.transition)), switchMap((event) => merge(of(event), of(event).pipe(delay(options.throttleTime || 1e3)))))).pipe(exhaustMapToWithTrailing(fetchOnce$));
+	let fetchQuery = typeof query == "string" ? query : query.fetch, listenerQuery = typeof query == "string" ? query : query.listen, fetchOnce$ = fetch(client, fetchQuery, params, options), events$ = listen(client, listenerQuery, params, options).pipe(mergeMap((ev, i) => i === 0 && !isWelcomeEvent(ev) ? throwError(/* @__PURE__ */ Error(ev.type === "reconnect" ? "Could not establish EventSource connection" : `Received unexpected type of first event "${ev.type}"`)) : of(ev)), share()), [welcome$, mutationAndReconnect$] = partition(events$, isWelcomeEvent), isRelevantEvent = (event) => !options.transitions || event.type !== "mutation" || options.transitions.includes(event.transition);
+	return merge(welcome$.pipe(take(1)), mutationAndReconnect$.pipe(filter(isRelevantEvent), switchMap((event) => merge(of(event), of(event).pipe(delay(options.throttleTime || 1e3)))))).pipe(exhaustMapToWithTrailing(fetchOnce$));
 }, DEFAULT_PARAMS = {}, DEFAULT_OPTIONS = { apiVersion: "v2022-05-09" };
 function useListeningQuery(query, t0, t1) {
 	let $ = c(11), params = t0 === void 0 ? DEFAULT_PARAMS : t0, options = t1 === void 0 ? DEFAULT_OPTIONS : t1, [loading, setLoading] = useState(!0), [error, setError] = useState(!1), [data, setData] = useState(null), subscription = useRef(null), t2;
 	$[0] === Symbol.for("react.memo_cache_sentinel") ? (t2 = { apiVersion: "v2022-05-09" }, $[0] = t2) : t2 = $[0];
@@ -5084,9 +5096,9 @@
 	let types = t2, t3;
 	$[4] !== client || $[5] !== types ? (t3 = () => {
 		setSaving(!0);
 		let canSave = !0;
-		return (async function() {
+		return (async function store() {
 			setSyncTitle(`Syncing 0/${types.length}`);
 			let transaction = client.transaction();
 			for (let i = 0; i < types.length && canSave; i++) {
 				let type = types[i];