@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];