sanity 6.4.0-next.21 → 6.4.0-next.22

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.
Files changed (73) hide show
  1. package/lib/_chunks-dts/ActiveWorkspaceMatcherContext.d.ts +1 -1
  2. package/lib/_chunks-es/CalendarFilter.js +3 -1
  3. package/lib/_chunks-es/CalendarFilter.js.map +1 -1
  4. package/lib/_chunks-es/CommentsInspector.js +58 -1
  5. package/lib/_chunks-es/CommentsInspector.js.map +1 -1
  6. package/lib/_chunks-es/PresentationToolGrantsCheck.js +9 -1
  7. package/lib/_chunks-es/PresentationToolGrantsCheck.js.map +1 -1
  8. package/lib/_chunks-es/ReleasesStudioLayout.js +58 -1
  9. package/lib/_chunks-es/ReleasesStudioLayout.js.map +1 -1
  10. package/lib/_chunks-es/ReleasesTool.js +68 -1
  11. package/lib/_chunks-es/ReleasesTool.js.map +1 -1
  12. package/lib/_chunks-es/StructureToolProvider.js +4 -1
  13. package/lib/_chunks-es/StructureToolProvider.js.map +1 -1
  14. package/lib/_chunks-es/Table.js +2 -1
  15. package/lib/_chunks-es/Table.js.map +1 -1
  16. package/lib/_chunks-es/TasksDocumentInputLayout.js +58 -1
  17. package/lib/_chunks-es/TasksDocumentInputLayout.js.map +1 -1
  18. package/lib/_chunks-es/TasksFooterOpenTasks.js +59 -1
  19. package/lib/_chunks-es/TasksFooterOpenTasks.js.map +1 -1
  20. package/lib/_chunks-es/TasksStudioActiveToolLayout.js +58 -1
  21. package/lib/_chunks-es/TasksStudioActiveToolLayout.js.map +1 -1
  22. package/lib/_chunks-es/TasksStudioLayout.js +58 -1
  23. package/lib/_chunks-es/TasksStudioLayout.js.map +1 -1
  24. package/lib/_chunks-es/TasksStudioNavbar.js +58 -1
  25. package/lib/_chunks-es/TasksStudioNavbar.js.map +1 -1
  26. package/lib/_chunks-es/Tool.js +7 -1
  27. package/lib/_chunks-es/Tool.js.map +1 -1
  28. package/lib/_chunks-es/VariantsStudioNavbar.js +58 -1
  29. package/lib/_chunks-es/VariantsStudioNavbar.js.map +1 -1
  30. package/lib/_chunks-es/VariantsTool.js +59 -1
  31. package/lib/_chunks-es/VariantsTool.js.map +1 -1
  32. package/lib/_chunks-es/index2.js +98 -1
  33. package/lib/_chunks-es/index2.js.map +1 -1
  34. package/lib/_chunks-es/index3.js +58 -1
  35. package/lib/_chunks-es/index3.js.map +1 -1
  36. package/lib/_chunks-es/index4.js +3 -1
  37. package/lib/_chunks-es/index4.js.map +1 -1
  38. package/lib/_chunks-es/index5.js +3 -1
  39. package/lib/_chunks-es/index5.js.map +1 -1
  40. package/lib/_chunks-es/index6.js +60 -1
  41. package/lib/_chunks-es/index6.js.map +1 -1
  42. package/lib/_chunks-es/index7.js +58 -1
  43. package/lib/_chunks-es/index7.js.map +1 -1
  44. package/lib/_chunks-es/index8.js +59 -1
  45. package/lib/_chunks-es/index8.js.map +1 -1
  46. package/lib/_chunks-es/index9.js +8 -1
  47. package/lib/_chunks-es/index9.js.map +1 -1
  48. package/lib/_chunks-es/inputResolver.js +2 -1
  49. package/lib/_chunks-es/inputResolver.js.map +1 -1
  50. package/lib/_chunks-es/presentation.js +7 -1
  51. package/lib/_chunks-es/presentation.js.map +1 -1
  52. package/lib/_chunks-es/resources2.js +58 -1
  53. package/lib/_chunks-es/resources2.js.map +1 -1
  54. package/lib/_chunks-es/resources3.js +58 -1
  55. package/lib/_chunks-es/resources3.js.map +1 -1
  56. package/lib/_chunks-es/resources4.js +58 -1
  57. package/lib/_chunks-es/resources4.js.map +1 -1
  58. package/lib/_chunks-es/resources5.js +58 -1
  59. package/lib/_chunks-es/resources5.js.map +1 -1
  60. package/lib/_chunks-es/resources6.js +58 -1
  61. package/lib/_chunks-es/resources6.js.map +1 -1
  62. package/lib/_chunks-es/resources7.js +58 -1
  63. package/lib/_chunks-es/resources7.js.map +1 -1
  64. package/lib/_chunks-es/structureTool.js +47 -1
  65. package/lib/_chunks-es/structureTool.js.map +1 -1
  66. package/lib/_chunks-es/version.js +2 -2
  67. package/lib/desk.js +4 -1
  68. package/lib/desk.js.map +1 -1
  69. package/lib/index.js +15 -1
  70. package/lib/index.js.map +1 -1
  71. package/lib/structure.js +3 -1
  72. package/lib/structure.js.map +1 -1
  73. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"index6.js","sources":["../../src/core/comments/hooks/useCommentsAuthoringPath.ts","../../src/core/comments/plugin/field/CommentsFieldButton.tsx","../../src/core/comments/plugin/field/CommentsField.tsx"],"sourcesContent":["import {useContext} from 'react'\nimport {CommentsAuthoringPathContext} from 'sanity/_singletons'\n\nimport {type CommentsAuthoringPathContextValue} from '../context'\n\n/**\n * @beta\n * @hidden\n */\nexport function useCommentsAuthoringPath(): CommentsAuthoringPathContextValue {\n const value = useContext(CommentsAuthoringPathContext)\n\n if (!value) {\n throw new Error('useCommentsAuthoringPath: missing context value')\n }\n\n return value\n}\n","import {AddCommentIcon, CommentIcon} from '@sanity/icons'\nimport {type CurrentUser, type PortableTextBlock} from '@sanity/types'\nimport {\n // oxlint-disable-next-line no-restricted-imports\n Button as SanityUIButton,\n Flex,\n Stack,\n Text,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, Popover, Tooltip} from '../../../../ui-components'\nimport {type UserListWithPermissionsHookValue} from '../../../hooks'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {useAddonDataset} from '../../../studio/addonDataset/useAddonDataset'\nimport {CommentInput, type CommentInputHandle} from '../../components'\nimport {hasCommentMessageValue} from '../../helpers'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentMessage} from '../../types'\n\nconst ContentStack = styled(Stack)`\n width: 320px;\n`\n\ninterface CommentsFieldButtonProps {\n count: number\n currentUser: CurrentUser\n fieldTitle: string\n isCreatingDataset: boolean\n mentionOptions: UserListWithPermissionsHookValue\n onChange: (value: PortableTextBlock[]) => void\n onClick?: () => void\n onClose: () => void\n onCommentAdd: (value: PortableTextBlock[]) => void\n onDiscard: () => void\n onInputKeyDown?: (event: React.KeyboardEvent) => void\n open: boolean\n value: CommentMessage\n}\n\nexport function CommentsFieldButton(props: CommentsFieldButtonProps) {\n const {\n count,\n currentUser,\n fieldTitle,\n isCreatingDataset,\n mentionOptions,\n onChange,\n onClick,\n onClose,\n onCommentAdd,\n onDiscard,\n onInputKeyDown,\n open,\n value,\n } = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const {error: addonDatasetError} = useAddonDataset()\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [addCommentButtonElement, setAddCommentButtonElement] = useState<HTMLButtonElement | null>(\n null,\n )\n const commentInputHandle = useRef<CommentInputHandle | null>(null)\n const hasComments = Boolean(count > 0)\n\n const closePopover = useCallback(() => {\n if (!open) return\n onClose()\n addCommentButtonElement?.focus()\n }, [addCommentButtonElement, open, onClose])\n\n const handleSubmit = useCallback(\n (nextValue: PortableTextBlock[]) => {\n onCommentAdd(nextValue)\n closePopover()\n },\n [closePopover, onCommentAdd],\n )\n\n const hasValue = useMemo(() => hasCommentMessageValue(value), [value])\n\n const startDiscard = useCallback(() => {\n if (!hasValue) {\n closePopover()\n return\n }\n\n commentInputHandle.current?.discardDialogController.open()\n }, [closePopover, hasValue])\n\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n // Don't act if the input already prevented this event\n if (event.isDefaultPrevented()) {\n return\n }\n\n // Call parent handler\n if (onInputKeyDown) onInputKeyDown(event)\n },\n [onInputKeyDown],\n )\n\n const handleDiscardCancel = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n }, [])\n\n const handleDiscardConfirm = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n closePopover()\n onDiscard()\n }, [closePopover, onDiscard])\n\n const handlePopoverKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n startDiscard()\n }\n },\n [startDiscard],\n )\n\n useClickOutsideEvent(!open && startDiscard, () => [popoverRef.current])\n\n if (!hasComments) {\n const placeholder = (\n <Translate\n t={t}\n i18nKey=\"compose.add-comment-input-placeholder\"\n values={{field: fieldTitle}}\n />\n )\n\n const content = (\n <ContentStack padding={2} space={4}>\n <CommentInput\n currentUser={currentUser}\n focusLock\n focusOnMount\n mentionOptions={mentionOptions}\n onChange={onChange}\n onDiscardCancel={handleDiscardCancel}\n onDiscardConfirm={handleDiscardConfirm}\n onKeyDown={handleInputKeyDown}\n onSubmit={handleSubmit}\n placeholder={placeholder}\n readOnly={isCreatingDataset}\n ref={commentInputHandle}\n value={value}\n />\n </ContentStack>\n )\n\n return (\n <Popover\n constrainSize\n content={content}\n fallbackPlacements={['bottom-end']}\n open={open}\n placement=\"right-start\"\n portal\n ref={popoverRef}\n onKeyDown={handlePopoverKeyDown}\n >\n <div>\n <Button\n aria-label={t('field-button.aria-label-add')}\n disabled={isCreatingDataset || Boolean(addonDatasetError)}\n icon={AddCommentIcon}\n mode=\"bleed\"\n onClick={onClick}\n ref={setAddCommentButtonElement}\n selected={open}\n tooltipProps={{\n content: t('field-button.title'),\n placement: 'top',\n }}\n />\n </div>\n </Popover>\n )\n }\n\n return (\n <Tooltip portal placement=\"top\" content={t('field-button.content', {count})}>\n <SanityUIButton\n aria-label={t('field-button.aria-label-open')}\n mode=\"bleed\"\n onClick={onClick}\n padding={2}\n space={2}\n >\n <Flex align=\"center\" gap={2}>\n <Text size={1}>\n <CommentIcon />\n </Text>\n <Text size={0}>{count > 9 ? '9+' : count}</Text>\n </Flex>\n </SanityUIButton>\n </Tooltip>\n )\n}\n","import {hues} from '@sanity/color'\nimport {type PortableTextBlock} from '@sanity/types'\nimport {Stack, useBoundaryElement} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {uuid} from '@sanity/uuid'\nimport {AnimatePresence, motion, type Variants} from 'motion/react'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type FieldProps} from '../../../form'\nimport {getSchemaTypeTitle} from '../../../schema'\nimport {useCurrentUser} from '../../../store'\nimport {COMMENTS_HIGHLIGHT_HUE_KEY} from '../../constants'\nimport {isTextSelectionComment} from '../../helpers'\nimport {\n applyCommentsFieldAttr,\n useComments,\n useCommentsAuthoringPath,\n useCommentsEnabled,\n useCommentsScroll,\n useCommentsSelectedPath,\n useCommentsUpsell,\n} from '../../hooks'\nimport {type CommentCreatePayload, type CommentMessage, type CommentsUIMode} from '../../types'\nimport {CommentsFieldButton} from './CommentsFieldButton'\n\n// When the form is temporarily set to `readOnly` while reconnecting, the form\n// will be re-rendered and any comment that is being authored will be lost.\n// To avoid this, we cache the comment message in a map and restore it when the\n// field is re-rendered.\nconst messageCache = new Map<string, CommentMessage>()\n\nconst EMPTY_ARRAY: [] = []\n\nconst HIGHLIGHT_BLOCK_VARIANTS: Variants = {\n initial: {\n opacity: 0,\n },\n animate: {\n opacity: 1,\n },\n exit: {\n opacity: 0,\n },\n}\n\nexport function CommentsField(props: FieldProps) {\n const {enabled, mode} = useCommentsEnabled()\n\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n return <CommentFieldInner {...props} mode={mode} />\n}\n\nconst HighlightDiv = styled(motion.div)(({theme}) => {\n const {radius, space, color} = theme.sanity\n const bg = hues[COMMENTS_HIGHLIGHT_HUE_KEY][color.dark ? 900 : 50].hex\n\n return css`\n mix-blend-mode: ${color.dark ? 'screen' : 'multiply'};\n border-radius: ${radius[3]}px;\n top: -${space[2]}px;\n left: -${space[2]}px;\n bottom: -${space[2]}px;\n right: -${space[2]}px;\n pointer-events: none;\n position: absolute;\n z-index: 1;\n width: calc(100% + ${space[2] * 2}px);\n height: calc(100% + ${space[2] * 2}px);\n background-color: ${bg};\n `\n})\n\nconst FieldStack = styled(Stack)`\n position: relative;\n\n // Hide when the field component renders nothing (e.g. a custom\n // field component that returns null) to avoid an empty wrapper\n // taking up space in the form.\n &:empty:not([hidden]) {\n display: none;\n }\n`\n\nfunction CommentFieldInner(\n props: FieldProps & {\n mode: CommentsUIMode\n },\n) {\n const {mode} = props\n\n const currentUser = useCurrentUser()\n const {element: boundaryElement} = useBoundaryElement()\n\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const {\n comments,\n isCommentsOpen,\n isCreatingDataset,\n mentionOptions,\n onCommentsOpen,\n operation,\n setStatus,\n status,\n } = useComments()\n const {upsellData, handleOpenDialog} = useCommentsUpsell()\n const {selectedPath, setSelectedPath} = useCommentsSelectedPath()\n const {authoringPath, setAuthoringPath} = useCommentsAuthoringPath()\n const {scrollToGroup} = useCommentsScroll({\n boundaryElement,\n })\n\n const fieldTitle = useMemo(() => getSchemaTypeTitle(props.schemaType), [props.schemaType])\n const stringPath = useMemo(() => PathUtils.toString(props.path), [props.path])\n\n // Use the cached value if it exists as the initial value\n const cachedValue = messageCache.get(stringPath) || null\n\n const [value, setValue] = useState<PortableTextBlock[] | null>(cachedValue)\n\n // If the path of the field matches the authoring path, the comment input should be open.\n const isOpen = useMemo(() => authoringPath === stringPath, [authoringPath, stringPath])\n\n // Determine if the current field is selected\n const isSelected = useMemo(() => {\n if (!isCommentsOpen) return false\n if (selectedPath?.origin === 'form' || selectedPath?.origin === 'url') return false\n return selectedPath?.fieldPath === stringPath\n }, [isCommentsOpen, selectedPath?.fieldPath, selectedPath?.origin, stringPath])\n\n const isInlineCommentThread = useMemo(() => {\n return comments.data.open\n .filter((c) => c.threadId === selectedPath?.threadId)\n .some((x) => isTextSelectionComment(x.parentComment))\n }, [comments.data.open, selectedPath?.threadId])\n\n // Total number of comments for the current field\n const count = useMemo(() => {\n const commentsCount = comments.data.open\n .map((c) => (c.fieldPath === stringPath ? c.commentsCount : 0))\n .reduce((acc, val) => acc + val, 0)\n\n return commentsCount || 0\n }, [comments.data.open, stringPath])\n\n const hasComments = Boolean(count > 0)\n\n const resetMessageValue = useCallback(() => {\n // Reset the value and remove the message from the cache\n setValue(null)\n messageCache.delete(stringPath)\n }, [stringPath])\n\n const handleClick = useCallback(() => {\n // When clicking a comment button when the field has comments, we want to:\n if (hasComments) {\n // 1. Change the status to 'open' if it's 'resolved'\n if (status === 'resolved') {\n setStatus('open')\n }\n\n // 2. Ensure that the authoring path is reset when clicking\n // the comment button when the field has comments.\n setAuthoringPath(null)\n\n // 3. Open the comments inspector\n onCommentsOpen?.()\n\n // 4. Find the latest comment thread ID for the current field\n const scrollToThreadId = comments.data.open.find(\n (c) => c.fieldPath === PathUtils.toString(props.path),\n )?.threadId\n\n // 5. Set the latest thread ID as the selected thread ID\n // and scroll to the it.\n if (scrollToThreadId) {\n // handleSetThreadToScrollTo(scrollToThreadId)\n setSelectedPath({\n threadId: scrollToThreadId,\n origin: 'form',\n fieldPath: PathUtils.toString(props.path),\n })\n\n scrollToGroup(scrollToThreadId)\n }\n\n return\n }\n\n if (mode === 'upsell') {\n if (upsellData) {\n handleOpenDialog('field_action')\n } else {\n // Open the comments inspector\n onCommentsOpen?.()\n }\n return\n }\n\n // If the field is open (i.e. the authoring path is set to the current field)\n // we close the field by resetting the authoring path. If the field is not open,\n // we set the authoring path to the current field so that the comment form is opened.\n setAuthoringPath(isOpen ? null : stringPath)\n }, [\n comments.data.open,\n handleOpenDialog,\n hasComments,\n isOpen,\n mode,\n onCommentsOpen,\n props.path,\n scrollToGroup,\n setAuthoringPath,\n setSelectedPath,\n setStatus,\n status,\n stringPath,\n upsellData,\n ])\n\n const handleCommentAdd = useCallback(\n (nextValue: PortableTextBlock[]) => {\n if (nextValue) {\n // Since this is a new comment, we generate a new thread ID\n const newThreadId = uuid()\n\n // Construct the comment payload\n const nextComment: CommentCreatePayload = {\n type: 'field',\n fieldPath: PathUtils.toString(props.path),\n message: nextValue,\n parentCommentId: undefined,\n status: 'open',\n threadId: newThreadId,\n // New comments have no reactions\n reactions: EMPTY_ARRAY,\n }\n\n // Execute the create mutation\n void operation.create(nextComment)\n\n // If a comment is added to a field when viewing resolved comments, we switch\n // to open comments and scroll to the comment that was just added\n // Open the inspector when a new comment is added\n onCommentsOpen?.()\n\n if (status === 'resolved') {\n // Set the status to 'open' so that the comment is visible\n setStatus('open')\n }\n\n resetMessageValue()\n\n // Scroll to the thread\n setSelectedPath({\n threadId: newThreadId,\n origin: 'form',\n fieldPath: PathUtils.toString(props.path),\n })\n\n scrollToGroup(newThreadId)\n }\n },\n [\n onCommentsOpen,\n operation,\n props.path,\n resetMessageValue,\n scrollToGroup,\n setSelectedPath,\n setStatus,\n status,\n ],\n )\n\n const handleClose = useCallback(() => setAuthoringPath(null), [setAuthoringPath])\n\n const handleOnChange = useCallback(\n (nextValue: CommentMessage) => {\n setValue(nextValue)\n messageCache.set(stringPath, nextValue)\n },\n [stringPath],\n )\n\n const internalComments: FieldProps['__internal_comments'] = useMemo(\n () => ({\n button: currentUser && (\n <CommentsFieldButton\n count={Number(count)}\n currentUser={currentUser}\n fieldTitle={fieldTitle}\n isCreatingDataset={isCreatingDataset}\n mentionOptions={mentionOptions}\n onChange={handleOnChange}\n onClick={handleClick}\n onClose={handleClose}\n onCommentAdd={handleCommentAdd}\n onDiscard={resetMessageValue}\n open={isOpen}\n value={value}\n />\n ),\n hasComments,\n isAddingComment: isOpen,\n }),\n [\n currentUser,\n count,\n fieldTitle,\n isCreatingDataset,\n mentionOptions,\n handleOnChange,\n handleClick,\n handleClose,\n handleCommentAdd,\n resetMessageValue,\n isOpen,\n value,\n hasComments,\n ],\n )\n\n return (\n <FieldStack {...applyCommentsFieldAttr(PathUtils.toString(props.path))} ref={rootRef}>\n {props.renderDefault({\n ...props,\n __internal_comments: internalComments,\n })}\n\n <AnimatePresence>\n {isSelected && !isInlineCommentThread && (\n <HighlightDiv\n animate=\"animate\"\n exit=\"exit\"\n initial=\"initial\"\n variants={HIGHLIGHT_BLOCK_VARIANTS}\n />\n )}\n </AnimatePresence>\n </FieldStack>\n )\n}\n"],"names":["useCommentsAuthoringPath","value","useContext","CommentsAuthoringPathContext","Error","ContentStack","styled","Stack","withConfig","displayName","componentId","CommentsFieldButton","props","$","_c","count","currentUser","fieldTitle","isCreatingDataset","mentionOptions","onChange","onClick","onClose","onCommentAdd","onDiscard","onInputKeyDown","open","t","useTranslation","commentsLocaleNamespace","error","addonDatasetError","useAddonDataset","popoverRef","useRef","addCommentButtonElement","setAddCommentButtonElement","useState","commentInputHandle","hasComments","t0","focus","closePopover","t1","nextValue","handleSubmit","t2","hasCommentMessageValue","hasValue","t3","current","discardDialogController","startDiscard","t4","event","isDefaultPrevented","handleInputKeyDown","t5","Symbol","for","close","handleDiscardCancel","t6","handleDiscardConfirm","t7","event_0","key","preventDefault","stopPropagation","handlePopoverKeyDown","t8","useClickOutsideEvent","t9","field","t10","placeholder","t11","content","t12","t13","t14","Boolean","t15","t16","placement","t17","AddCommentIcon","t18","SanityUIButton","messageCache","Map","EMPTY_ARRAY","HIGHLIGHT_BLOCK_VARIANTS","initial","opacity","animate","exit","CommentsField","enabled","mode","useCommentsEnabled","renderDefault","HighlightDiv","motion","div","theme","radius","space","color","sanity","bg","hues","COMMENTS_HIGHLIGHT_HUE_KEY","dark","hex","css","FieldStack","CommentFieldInner","useCurrentUser","element","boundaryElement","useBoundaryElement","rootRef","comments","isCommentsOpen","onCommentsOpen","operation","setStatus","status","useComments","upsellData","handleOpenDialog","useCommentsUpsell","selectedPath","setSelectedPath","useCommentsSelectedPath","authoringPath","setAuthoringPath","scrollToGroup","useCommentsScroll","schemaType","getSchemaTypeTitle","path","PathUtils","toString","stringPath","get","cachedValue","setValue","isOpen","fieldPath","origin","isSelected","data","threadId","c","filter","some","_temp","isInlineCommentThread","c_0","commentsCount","map","reduce","_temp2","delete","resetMessageValue","scrollToThreadId","find","c_1","handleClick","newThreadId","uuid","nextComment","type","message","parentCommentId","undefined","reactions","create","handleCommentAdd","handleClose","nextValue_0","set","handleOnChange","Number","button","isAddingComment","internalComments","applyCommentsFieldAttr","__internal_comments","acc","val","x","isTextSelectionComment","parentComment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASO,SAAAA,2BAAA;AACL,QAAAC,QAAcC,WAAWC,4BAA4B;AAErD,MAAI,CAACF;AACH,UAAM,IAAIG,MAAM,iDAAiD;AAClE,SAEMH;AAAK;ACMd,MAAMI,eAAeC,OAAOC,KAAK,EAACC,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA;AAoB3B,SAAAC,oBAAAC,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACL;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAzB;AAAAA,EAAAA,IAcIW,OACJ;AAAA,IAAAe;AAAAA,EAAAA,IAAYC,eAAeC,uBAAuB,GAClD;AAAA,IAAAC,OAAAC;AAAAA,EAAAA,IAAmCC,gBAAAA,GACnCC,aAAmBC,OAA8B,IAAI,GACrD,CAAAC,yBAAAC,0BAAA,IAA8DC,SAC5D,IACF,GACAC,qBAA2BJ,OAAkC,IAAI,GACjEK,cAA4BxB,QAAQ;AAAE,MAAAyB;AAAA3B,IAAA,CAAA,MAAAsB,2BAAAtB,SAAAS,WAAAT,EAAA,CAAA,MAAAa,QAELc,KAAAA,MAAA;AAC1Bd,aACLJ,QAAAA,GACAa,yBAAuBM,MAAAA;AAAAA,EAAS,GACjC5B,OAAAsB,yBAAAtB,OAAAS,SAAAT,OAAAa,MAAAb,OAAA2B,MAAAA,KAAA3B,EAAA,CAAA;AAJD,QAAA6B,eAAqBF;AAIuB,MAAAG;AAAA9B,IAAA,CAAA,MAAA6B,gBAAA7B,SAAAU,gBAG1CoB,KAAAC,CAAAA,cAAA;AACErB,iBAAaqB,SAAS,GACtBF,aAAAA;AAAAA,EAAc,GACf7B,OAAA6B,cAAA7B,OAAAU,cAAAV,OAAA8B,MAAAA,KAAA9B,EAAA,CAAA;AAJH,QAAAgC,eAAqBF;AAMpB,MAAAG;AAAAjC,WAAAZ,SAE8B6C,KAAAC,uBAAuB9C,KAAK,GAACY,OAAAZ,OAAAY,OAAAiC,MAAAA,KAAAjC,EAAA,CAAA;AAA5D,QAAAmC,WAA+BF;AAAuC,MAAAG;AAAApC,IAAA,CAAA,MAAA6B,gBAAA7B,UAAAmC,YAErCC,KAAAA,MAAA;AAC/B,QAAI,CAACD,UAAQ;AACXN,mBAAAA;AAAc;AAAA,IAAA;AAIhBJ,uBAAkBY,SAAiCC,wBAAKzB,KAAAA;AAAAA,EAAE,GAC3Db,OAAA6B,cAAA7B,QAAAmC,UAAAnC,QAAAoC,MAAAA,KAAApC,EAAA,EAAA;AAPD,QAAAuC,eAAqBH;AAOO,MAAAI;AAAAxC,YAAAY,kBAG1B4B,KAAAC,CAAAA,UAAA;AAEMA,UAAKC,mBAAAA,KAKL9B,kBAAgBA,eAAe6B,KAAK;AAAA,EAAC,GAC1CzC,QAAAY,gBAAAZ,QAAAwC,MAAAA,KAAAxC,EAAA,EAAA;AATH,QAAA2C,qBAA2BH;AAW1B,MAAAI;AAAA5C,IAAA,EAAA,MAAA6C,uBAAAC,IAAA,2BAAA,KAEuCF,KAAAA,MAAA;AACtCnB,uBAAkBY,SAAiCC,wBAAMS,MAAAA;AAAAA,EAAE,GAC5D/C,QAAA4C,MAAAA,KAAA5C,EAAA,EAAA;AAFD,QAAAgD,sBAA4BJ;AAEtB,MAAAK;AAAAjD,IAAA,EAAA,MAAA6B,gBAAA7B,UAAAW,aAEmCsC,KAAAA,MAAA;AACvCxB,uBAAkBY,SAAiCC,wBAAMS,MAAAA,GACzDlB,aAAAA,GACAlB,UAAAA;AAAAA,EAAW,GACZX,QAAA6B,cAAA7B,QAAAW,WAAAX,QAAAiD,MAAAA,KAAAjD,EAAA,EAAA;AAJD,QAAAkD,uBAA6BD;AAIA,MAAAE;AAAAnD,YAAAuC,gBAG3BY,KAAAC,CAAAA,YAAA;AACMX,YAAKY,QAAS,aAChBZ,QAAKa,kBACLb,QAAKc,mBACLhB;EACD,GACFvC,QAAAuC,cAAAvC,QAAAmD,MAAAA,KAAAnD,EAAA,EAAA;AAPH,QAAAwD,uBAA6BL;AAS5B,MAAAM;AAID,MAJCzD,EAAA,EAAA,MAAA6C,uBAAAC,IAAA,2BAAA,KAE2CW,KAAAA,MAAM,CAACrC,WAAUiB,OAAQ,GAACrC,QAAAyD,MAAAA,KAAAzD,EAAA,EAAA,GAAtE0D,qBAAqB,CAAC7C,QAAD0B,cAAuBkB,EAA0B,GAElE,CAAC/B,aAAW;AAAA,QAAAiC;AAAA3D,cAAAI,cAKFuD,MAAA;AAAA,MAAAC,OAAQxD;AAAAA,IAAAA,GAAWJ,QAAAI,YAAAJ,QAAA2D,OAAAA,MAAA3D,EAAA,EAAA;AAAA,QAAA6D;AAAA7D,MAAA,EAAA,MAAAc,KAAAd,UAAA2D,OAH7BE,2BAAC,WAAA,EACI/C,GACK,SAAA,yCACA,QAAA6C,IAAAA,CAAmB,GAC3B3D,QAAAc,GAAAd,QAAA2D,KAAA3D,QAAA6D,QAAAA,OAAA7D,EAAA,EAAA;AALJ,UAAA8D,cACED;AAKD,QAAAE;AAAA/D,MAAA,EAAA,MAAAG,eAAAH,EAAA,EAAA,MAAAkD,wBAAAlD,UAAA2C,sBAAA3C,EAAA,EAAA,MAAAgC,gBAAAhC,EAAA,EAAA,MAAAK,qBAAAL,EAAA,EAAA,MAAAM,kBAAAN,EAAA,EAAA,MAAAO,YAAAP,EAAA,EAAA,MAAA8D,eAAA9D,UAAAZ,SAGC2E,2BAAC,cAAA,EAAsB,YAAU,OAAA,GAC/B,UAAA,oBAAC,cAAA,EACc5D,aACb,eACA,kBACgBG,gBACNC,UACOyC,iBAAAA,qBACCE,kBAAAA,sBACPP,WAAAA,oBACDX,UAAAA,cACG8B,aACHzD,6BACLoB,KAAAA,oBACErC,MAAAA,CAAK,EAAA,CAEhB,GAAeY,QAAAG,aAAAH,QAAAkD,sBAAAlD,QAAA2C,oBAAA3C,QAAAgC,cAAAhC,QAAAK,mBAAAL,QAAAM,gBAAAN,QAAAO,UAAAP,QAAA8D,aAAA9D,QAAAZ,OAAAY,QAAA+D,QAAAA,OAAA/D,EAAA,EAAA;AAjBjB,UAAAgE,UACED;AAiBD,QAAAE;AAAAjE,MAAA,EAAA,MAAA6C,uBAAAC,IAAA,2BAAA,KAMuBmB,OAAA,CAAC,YAAY,GAACjE,QAAAiE,QAAAA,OAAAjE,EAAA,EAAA;AAAA,QAAAkE;AAAAlE,cAAAc,KASlBoD,OAAApD,EAAE,6BAA6B,GAACd,QAAAc,GAAAd,QAAAkE,QAAAA,OAAAlE,EAAA,EAAA;AAClC,UAAAmE,OAAA9D,qBAAqB+D,CAAAA,CAAQlD;AAAkB,QAAAmD;AAAArE,cAAAc,KAO9CuD,OAAAvD,EAAE,oBAAoB,GAACd,QAAAc,GAAAd,QAAAqE,QAAAA,OAAArE,EAAA,EAAA;AAAA,QAAAsE;AAAAtE,cAAAqE,QADpBC,MAAA;AAAA,MAAAN,SACHK;AAAAA,MAAuBE,WACrB;AAAA,IAAA,GACZvE,QAAAqE,MAAArE,QAAAsE,OAAAA,MAAAtE,EAAA,EAAA;AAAA,QAAAwE;AAAAxE,MAAA,EAAA,MAAAQ,WAAAR,EAAA,EAAA,MAAAa,QAAAb,EAAA,EAAA,MAAAkE,QAAAlE,EAAA,EAAA,MAAAmE,QAAAnE,UAAAsE,OAZLE,MAAA,oBAAA,SACE,UAAA,oBAAC,QAAA,EACa,cAAAN,MACF,UAAAC,MACJM,MAAAA,gBACD,MAAA,SACIjE,SACJe,KAAAA,4BACKV,UAAAA,MACI,cAAAyD,IAAAA,CAGb,GAEL,GAAMtE,QAAAQ,SAAAR,QAAAa,MAAAb,QAAAkE,MAAAlE,QAAAmE,MAAAnE,QAAAsE,KAAAtE,QAAAwE,OAAAA,MAAAxE,EAAA,EAAA;AAAA,QAAA0E;AAAA,WAAA1E,EAAA,EAAA,MAAAgE,WAAAhE,EAAA,EAAA,MAAAwD,wBAAAxD,EAAA,EAAA,MAAAa,QAAAb,UAAAwE,OAxBRE,MAAA,oBAAC,SAAA,EACC,eAAA,IACSV,SACW,oBAAAC,MACdpD,MACI,WAAA,eACV,YACKO,KAAAA,YACMoC,iCAEXgB,UAAAA,IAAAA,CAeF,GAAUxE,QAAAgE,SAAAhE,QAAAwD,sBAAAxD,QAAAa,MAAAb,QAAAwE,KAAAxE,QAAA0E,OAAAA,MAAA1E,EAAA,EAAA,GAzBV0E;AAAAA,EAyBU;AAEb,MAAAf;AAAA3D,IAAA,EAAA,MAAAE,SAAAF,UAAAc,KAG0C6C,KAAA7C,EAAE,wBAAwB;AAAA,IAAAZ;AAAAA,EAAAA,CAAO,GAACF,QAAAE,OAAAF,QAAAc,GAAAd,QAAA2D,MAAAA,KAAA3D,EAAA,EAAA;AAAA,MAAA6D;AAAA7D,YAAAc,KAE3D+C,MAAA/C,EAAE,8BAA8B,GAACd,QAAAc,GAAAd,QAAA6D,OAAAA,MAAA7D,EAAA,EAAA;AAAA,MAAA+D;AAAA/D,IAAA,EAAA,MAAA6C,uBAAAC,IAAA,2BAAA,KAO3CiB,MAAA,oBAAC,MAAA,EAAW,MAAA,GACV,UAAA,oBAAC,aAAA,EAAW,GACd,GAAO/D,QAAA+D,OAAAA,MAAA/D,EAAA,EAAA;AACS,QAAAiE,MAAA/D,QAAQ,IAAR,OAAAA;AAAwB,MAAAgE;AAAAlE,YAAAiE,OAJ1CC,2BAAC,MAAA,EAAW,OAAA,UAAc,KAAA,GACxBH,UAAAA;AAAAA,IAAAA;AAAAA,IAGA,oBAAC,MAAA,EAAW,MAAA,GAAIE,UAAAA,IAAAA,CAAyB;AAAA,EAAA,EAAA,CAC3C,GAAOjE,QAAAiE,KAAAjE,QAAAkE,OAAAA,MAAAlE,EAAA,EAAA;AAAA,MAAAmE;AAAAnE,IAAA,EAAA,MAAAQ,WAAAR,UAAA6D,OAAA7D,EAAA,EAAA,MAAAkE,OAZTC,0BAACQ,UAAA,EACa,cAAAd,KACP,MAAA,SACIrD,SACA,SAAA,GACF,OAAA,GAEP0D,UAAAA,IAAAA,CAMF,GAAiBlE,QAAAQ,SAAAR,QAAA6D,KAAA7D,QAAAkE,KAAAlE,QAAAmE,OAAAA,MAAAnE,EAAA,EAAA;AAAA,MAAAqE;AAAA,SAAArE,EAAA,EAAA,MAAAmE,OAAAnE,UAAA2D,MAdnBU,0BAAC,SAAA,EAAQ,QAAA,IAAiB,WAAA,OAAe,SAAAV,IACvCQ,UAAAA,IAAAA,CAcF,GAAUnE,QAAAmE,KAAAnE,QAAA2D,IAAA3D,QAAAqE,OAAAA,MAAArE,EAAA,EAAA,GAfVqE;AAeU;AC7Kd,MAAMO,eAAe,oBAAIC,IAAAA,GAEnBC,cAAkB,CAAA,GAElBC,2BAAqC;AAAA,EACzCC,SAAS;AAAA,IACPC,SAAS;AAAA,EAAA;AAAA,EAEXC,SAAS;AAAA,IACPD,SAAS;AAAA,EAAA;AAAA,EAEXE,MAAM;AAAA,IACJF,SAAS;AAAA,EAAA;AAEb;AAEO,SAAAG,cAAArF,OAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAoF;AAAAA,IAAAC;AAAAA,EAAAA,IAAwBC,mBAAAA;AAExB,MAAI,CAACF,SAAO;AAAA,QAAA1D;AAAA,WAAA3B,SAAAD,SACH4B,MAAA5B,MAAKyF,cAAezF,KAAK,GAACC,OAAAD,OAAAC,OAAA2B,OAAAA,MAAA3B,EAAA,CAAA,GAA1B2B;AAAAA,EAA0B;AAClC,MAAAA;AAAA,SAAA3B,EAAA,CAAA,MAAAsF,QAAAtF,SAAAD,SAEM4B,KAAA,oBAAC,mBAAA,EAAiB,GAAK5B,OAAauF,KAAAA,CAAI,GAAItF,OAAAsF,MAAAtF,OAAAD,OAAAC,OAAA2B,MAAAA,KAAA3B,EAAA,CAAA,GAA5C2B;AAA4C;AAGrD,MAAM8D,eAAehG,uBAAOiG,OAAOC,GAAG,EAAChG,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,EAAC,CAAC;AAAA,EAAC+F;AAAK,MAAM;AACnD,QAAM;AAAA,IAACC;AAAAA,IAAQC;AAAAA,IAAOC;AAAAA,EAAAA,IAASH,MAAMI,QAC/BC,KAAKC,KAAKC,0BAA0B,EAAEJ,MAAMK,OAAO,MAAM,EAAE,EAAEC;AAEnE,SAAOC;AAAAA,sBACaP,MAAMK,OAAO,WAAW,UAAU;AAAA,qBACnCP,OAAO,CAAC,CAAC;AAAA,YAClBC,MAAM,CAAC,CAAC;AAAA,aACPA,MAAM,CAAC,CAAC;AAAA,eACNA,MAAM,CAAC,CAAC;AAAA,cACTA,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,yBAIGA,MAAM,CAAC,IAAI,CAAC;AAAA,0BACXA,MAAM,CAAC,IAAI,CAAC;AAAA,wBACdG,EAAE;AAAA;AAE1B,CAAC,GAEKM,aAAa9G,OAAOC,KAAK,EAACC,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA;AAWhC,SAAA2G,kBAAAzG,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAKE;AAAA,IAAAqF;AAAAA,EAAAA,IAAevF,OAEfI,cAAoBsG,kBACpB;AAAA,IAAAC,SAAAC;AAAAA,EAAAA,IAAmCC,mBAAAA,GAEnCC,UAAgBxF,OAA8B,IAAI,GAElD;AAAA,IAAAyF;AAAAA,IAAAC;AAAAA,IAAA1G;AAAAA,IAAAC;AAAAA,IAAA0G;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IASIC,eACJ;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAuCC,qBACvC;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAwCC,2BACxC;AAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAA0CzI,yBAAAA;AAA0B,MAAAwC;AAAA3B,WAAA2G,mBAC1BhF,KAAA;AAAA,IAAAgF;AAAAA,EAAAA,GAEzC3G,OAAA2G,iBAAA3G,OAAA2B,MAAAA,KAAA3B,EAAA,CAAA;AAFD,QAAA;AAAA,IAAA6H;AAAAA,EAAAA,IAAwBC,kBAAkBnG,EAEzC;AAAC,MAAAG;AAAA9B,IAAA,CAAA,MAAAD,MAAAgI,cAE+BjG,KAAAkG,mBAAmBjI,MAAKgI,UAAW,GAAC/H,EAAA,CAAA,IAAAD,MAAAgI,YAAA/H,OAAA8B,MAAAA,KAAA9B,EAAA,CAAA;AAArE,QAAAI,aAAiC0B;AAAyD,MAAAG;AAAAjC,IAAA,CAAA,MAAAD,MAAAkI,QACzDhG,KAAAiG,UAASC,SAAUpI,MAAKkI,IAAK,GAACjI,EAAA,CAAA,IAAAD,MAAAkI,MAAAjI,OAAAiC,MAAAA,KAAAjC,EAAA,CAAA;AAA/D,QAAAoI,aAAiCnG;AAA6C,MAAAG;AAAApC,WAAAoI,cAG1DhG,KAAAwC,aAAYyD,IAAKD,UAAkB,KAAnC,MAAoCpI,OAAAoI,YAAApI,OAAAoC,MAAAA,KAAApC,EAAA,CAAA;AAAxD,QAAAsI,cAAoBlG,IAEpB,CAAAhD,OAAAmJ,QAAA,IAA0B/G,SAAqC8G,WAAW,GAG1EE,SAA6Bb,kBAAkBS;AAAwC,MAAA5F;AAAAxC,IAAA,CAAA,MAAA+G,kBAAA/G,EAAA,CAAA,MAAAwH,cAAAiB,aAAAzI,UAAAwH,cAAAkB,UAAA1I,UAAAoI,cAG5D5F,KAAAA,MACrB,CAACuE,kBACDS,cAAYkB,WAAa,UAAUlB,cAAYkB,WAAa,QAAc,KACvElB,cAAYiB,cAAgBL,YACpCpI,OAAA+G,gBAAA/G,EAAA,CAAA,IAAAwH,cAAAiB,WAAAzI,EAAA,EAAA,IAAAwH,cAAAkB,QAAA1I,QAAAoI,YAAApI,QAAAwC,MAAAA,KAAAxC,EAAA,EAAA;AAJD,QAAA2I,aAA2BnG,GAAAA;AAUmB,MAAAI;AAAA,MAAA5C,EAAA,EAAA,MAAA8G,SAAA8B,KAAA/H,QAAAb,EAAA,EAAA,MAAAwH,cAAAqB,UAAA;AAAA,QAAA5F;AAAAjD,MAAA,EAAA,MAAAwH,cAAAqB,YAFlC5F,MAAA6F,CAAAA,OAAOA,GAACD,aAAcrB,cAAYqB,UAAU7I,EAAA,EAAA,IAAAwH,cAAAqB,UAAA7I,QAAAiD,OAAAA,MAAAjD,EAAA,EAAA,GAD/C4C,KAAAkE,SAAQ8B,KAAK/H,KAAKkI,OACf9F,GAA4C,EAAC+F,KAC/CC,KAA8C,GAACjJ,EAAA,EAAA,IAAA8G,SAAA8B,KAAA/H,MAAAb,EAAA,EAAA,IAAAwH,cAAAqB,UAAA7I,QAAA4C;AAAAA,EAAA;AAAAA,SAAA5C,EAAA,EAAA;AAHzD,QAAAkJ,wBACEtG;AAG8C,MAAAK;AAAA,MAAAjD,EAAA,EAAA,MAAA8G,SAAA8B,KAAA/H,QAAAb,EAAA,EAAA,MAAAoI,YAAA;AAAA,QAAAjF;AAAAnD,cAAAoI,cAKvCjF,MAAAgG,CAAAA,QAAQL,IAACL,cAAeL,aAAaU,IAACM,gBAA9B,GAAiDpJ,QAAAoI,YAAApI,QAAAmD,OAAAA,MAAAnD,EAAA,EAAA,GAD1CiD,KAAA6D,SAAQ8B,KAAK/H,KAAKwI,IACjClG,GAAyD,EAACmG,OACvDC,QAAyB,CAAC,GAACvJ,EAAA,EAAA,IAAA8G,SAAA8B,KAAA/H,MAAAb,QAAAoI,YAAApI,QAAAiD;AAAAA,EAAA;AAAAA,SAAAjD,EAAA,EAAA;AAHvC,QAAAE,QACwB+C,MAIf,GAGTvB,cAA4BxB,QAAQ;AAAE,MAAAiD;AAAAnD,YAAAoI,cAEAjF,KAAAA,MAAA;AAEpCoF,aAAS,IAAI,GACb3D,aAAY4E,OAAQpB,UAAU;AAAA,EAAC,GAChCpI,QAAAoI,YAAApI,QAAAmD,MAAAA,KAAAnD,EAAA,EAAA;AAJD,QAAAyJ,oBAA0BtG;AAIV,MAAAM;AAAAzD,IAAA,EAAA,MAAA8G,SAAA8B,KAAA/H,QAAAb,EAAA,EAAA,MAAAsH,oBAAAtH,EAAA,EAAA,MAAA0B,eAAA1B,EAAA,EAAA,MAAAwI,UAAAxI,EAAA,EAAA,MAAAsF,QAAAtF,EAAA,EAAA,MAAAgH,kBAAAhH,EAAA,EAAA,MAAAD,MAAAkI,QAAAjI,EAAA,EAAA,MAAA6H,iBAAA7H,EAAA,EAAA,MAAA4H,oBAAA5H,EAAA,EAAA,MAAAyH,mBAAAzH,EAAA,EAAA,MAAAkH,aAAAlH,EAAA,EAAA,MAAAmH,UAAAnH,EAAA,EAAA,MAAAoI,cAAApI,EAAA,EAAA,MAAAqH,cAEgB5D,KAAAA,MAAA;AAE9B,QAAI/B,aAAW;AAETyF,iBAAW,cACbD,UAAU,MAAM,GAKlBU,iBAAiB,IAAI,GAGrBZ,iBAAAA;AAGA,YAAA0C,mBAAyB5C,SAAQ8B,KAAK/H,KAAK8I,KACzCC,CAAAA,QAAOd,IAACL,cAAeP,UAASC,SAAUpI,MAAKkI,IAAK,CAC5C,GAACY;AAIPa,2BAEFjC,gBAAgB;AAAA,QAAAoB,UACJa;AAAAA,QAAgBhB,QAClB;AAAA,QAAMD,WACHP,UAASC,SAAUpI,MAAKkI,IAAK;AAAA,MAAA,CACzC,GAEDJ,cAAc6B,gBAAgB;AAC/B;AAAA,IAAA;AAKH,QAAIpE,SAAS,UAAQ;AACf+B,mBACFC,iBAAiB,cAAc,IAG/BN,iBAAAA;AACD;AAAA,IAAA;AAOHY,qBAAiBY,SAAA,OAAAJ,UAA0B;AAAA,EAAC,GAC7CpI,EAAA,EAAA,IAAA8G,SAAA8B,KAAA/H,MAAAb,QAAAsH,kBAAAtH,QAAA0B,aAAA1B,QAAAwI,QAAAxI,QAAAsF,MAAAtF,QAAAgH,gBAAAhH,EAAA,EAAA,IAAAD,MAAAkI,MAAAjI,QAAA6H,eAAA7H,QAAA4H,kBAAA5H,QAAAyH,iBAAAzH,QAAAkH,WAAAlH,QAAAmH,QAAAnH,QAAAoI,YAAApI,QAAAqH,YAAArH,QAAAyD,MAAAA,KAAAzD,EAAA,EAAA;AAlDD,QAAA6J,cAAoBpG;AAiElB,MAAAE;AAAA3D,IAAA,EAAA,MAAAgH,kBAAAhH,EAAA,EAAA,MAAAiH,aAAAjH,EAAA,EAAA,MAAAD,MAAAkI,QAAAjI,EAAA,EAAA,MAAAyJ,qBAAAzJ,EAAA,EAAA,MAAA6H,iBAAA7H,EAAA,EAAA,MAAAyH,mBAAAzH,EAAA,EAAA,MAAAkH,aAAAlH,UAAAmH,UAGAxD,KAAA5B,CAAAA,cAAA;AACE,QAAIA,WAAS;AAEX,YAAA+H,cAAoBC,KAAAA,GAGpBC,cAA0C;AAAA,QAAAC,MAClC;AAAA,QAAOxB,WACFP,UAASC,SAAUpI,MAAKkI,IAAK;AAAA,QAACiC,SAChCnI;AAAAA,QAASoI,iBACDC;AAAAA,QAASjD,QAClB;AAAA,QAAM0B,UACJiB;AAAAA,QAAWO,WAEVvF;AAAAA,MAAAA;AAIRmC,gBAASqD,OAAQN,WAAW,GAKjChD,iBAAAA,GAEIG,WAAW,cAEbD,UAAU,MAAM,GAGlBuC,kBAAAA,GAGAhC,gBAAgB;AAAA,QAAAoB,UACJiB;AAAAA,QAAWpB,QACb;AAAA,QAAMD,WACHP,UAASC,SAAUpI,MAAKkI,IAAK;AAAA,MAAA,CACzC,GAEDJ,cAAciC,WAAW;AAAA,IAAC;AAAA,EAC3B,GACF9J,QAAAgH,gBAAAhH,QAAAiH,WAAAjH,EAAA,EAAA,IAAAD,MAAAkI,MAAAjI,QAAAyJ,mBAAAzJ,QAAA6H,eAAA7H,QAAAyH,iBAAAzH,QAAAkH,WAAAlH,QAAAmH,QAAAnH,QAAA2D,MAAAA,KAAA3D,EAAA,EAAA;AA1CH,QAAAuK,mBAAyB5G;AAqDxB,MAAAE;AAAA7D,YAAA4H,oBAE+B/D,MAAAA,MAAM+D,iBAAiB,IAAI,GAAC5H,QAAA4H,kBAAA5H,QAAA6D,OAAAA,MAAA7D,EAAA,EAAA;AAA5D,QAAAwK,cAAoB3G;AAA6D,MAAAE;AAAA/D,YAAAoI,cAG/ErE,MAAA0G,CAAAA,gBAAA;AACElC,aAASxG,WAAS,GAClB6C,aAAY8F,IAAKtC,YAAYrG,WAAS;AAAA,EAAC,GACxC/B,QAAAoI,YAAApI,QAAA+D,OAAAA,MAAA/D,EAAA,EAAA;AAJH,QAAA2K,iBAAuB5G;AAMtB,MAAAE;AAAAjE,YAAAE,SAAAF,EAAA,EAAA,MAAAG,eAAAH,EAAA,EAAA,MAAAI,cAAAJ,UAAA6J,eAAA7J,EAAA,EAAA,MAAAwK,eAAAxK,EAAA,EAAA,MAAAuK,oBAAAvK,EAAA,EAAA,MAAA2K,kBAAA3K,UAAAK,qBAAAL,EAAA,EAAA,MAAAwI,UAAAxI,EAAA,EAAA,MAAAM,kBAAAN,UAAAyJ,qBAAAzJ,EAAA,EAAA,MAAAZ,SAIW6E,MAAA9D,eACN,oBAAC,qBAAA,EACQ,OAAAyK,OAAO1K,KAAK,GACNC,aACDC,YACOC,mBACHC,gBACNqK,UAAAA,gBACDd,SAAAA,aACAW,SAAAA,aACKD,cAAAA,kBACHd,WAAAA,mBACLjB,MAAAA,QACCpJ,MAAAA,CAAK,GAEfY,QAAAE,OAAAF,QAAAG,aAAAH,QAAAI,YAAAJ,QAAA6J,aAAA7J,QAAAwK,aAAAxK,QAAAuK,kBAAAvK,QAAA2K,gBAAA3K,QAAAK,mBAAAL,QAAAwI,QAAAxI,QAAAM,gBAAAN,QAAAyJ,mBAAAzJ,QAAAZ,OAAAY,QAAAiE,OAAAA,MAAAjE,EAAA,EAAA;AAAA,MAAAkE;AAAAlE,IAAA,EAAA,MAAA0B,eAAA1B,UAAAwI,UAAAxI,EAAA,EAAA,MAAAiE,OAhBIC,MAAA;AAAA,IAAA2G,QACG5G;AAAAA,IAePvC;AAAAA,IAAAoJ,iBAEgBtC;AAAAA,EAAAA,GAClBxI,QAAA0B,aAAA1B,QAAAwI,QAAAxI,QAAAiE,KAAAjE,QAAAkE,OAAAA,MAAAlE,EAAA,EAAA;AApBH,QAAA+K,mBACS7G;AAmCR,MAAAC;AAAAnE,IAAA,EAAA,MAAAD,MAAAkI,QAGiB9D,MAAA6G,uBAAuB9C,UAASC,SAAUpI,MAAKkI,IAAK,CAAC,GAACjI,EAAA,EAAA,IAAAD,MAAAkI,MAAAjI,QAAAmE,OAAAA,MAAAnE,EAAA,EAAA;AAAA,MAAAqE;AAAArE,IAAA,EAAA,MAAA+K,oBAAA/K,UAAAD,SACnEsE,MAAAtE,MAAKyF,cAAe;AAAA,IAAA,GAChBzF;AAAAA,IAAKkL,qBACaF;AAAAA,EAAAA,CACtB,GAAC/K,QAAA+K,kBAAA/K,QAAAD,OAAAC,QAAAqE,OAAAA,MAAArE,EAAA,EAAA;AAAA,MAAAsE;AAAAtE,IAAA,EAAA,MAAAkJ,yBAAAlJ,UAAA2I,cAGCrE,MAAAqE,cAAA,CAAeO,yBACd,oBAAC,cAAA,EACS,SAAA,WACH,MAAA,QACG,SAAA,WACEnE,UAAAA,0BAAwB,GAErC/E,QAAAkJ,uBAAAlJ,QAAA2I,YAAA3I,QAAAsE,OAAAA,MAAAtE,EAAA,EAAA;AAAA,MAAAwE;AAAAxE,YAAAsE,OARHE,MAAA,oBAAC,mBACEF,UAAAA,IAAAA,CAQH,GAAkBtE,QAAAsE,KAAAtE,QAAAwE,OAAAA,MAAAxE,EAAA,EAAA;AAAA,MAAA0E;AAAA,SAAA1E,EAAA,EAAA,MAAAmE,OAAAnE,UAAAqE,OAAArE,EAAA,EAAA,MAAAwE,OAfpBE,2BAAC,cAAU,GAAKP,KAA6D0C,KAAAA,SAC1ExC,UAAAA;AAAAA,IAAAA;AAAAA,IAKDG;AAAAA,EAAAA,GAUF,GAAaxE,QAAAmE,KAAAnE,QAAAqE,KAAArE,QAAAwE,KAAAxE,QAAA0E,OAAAA,MAAA1E,EAAA,EAAA,GAhBb0E;AAgBa;AAjQjB,SAAA6E,OAAA2B,KAAAC,KAAA;AAAA,SAyD4BD,MAAMC;AAAG;AAzDrC,SAAAlC,MAAAmC,GAAA;AAAA,SAkDmBC,uBAAuBD,EAACE,aAAc;AAAC;"}
1
+ {"version":3,"file":"index6.js","sources":["../../src/core/comments/hooks/useCommentsAuthoringPath.ts","../../src/core/comments/plugin/field/CommentsFieldButton.tsx","../../src/core/comments/plugin/field/CommentsField.tsx"],"sourcesContent":["import {useContext} from 'react'\nimport {CommentsAuthoringPathContext} from 'sanity/_singletons'\n\nimport {type CommentsAuthoringPathContextValue} from '../context'\n\n/**\n * @beta\n * @hidden\n */\nexport function useCommentsAuthoringPath(): CommentsAuthoringPathContextValue {\n const value = useContext(CommentsAuthoringPathContext)\n\n if (!value) {\n throw new Error('useCommentsAuthoringPath: missing context value')\n }\n\n return value\n}\n","import {AddCommentIcon} from '@sanity/icons/AddComment'\nimport {CommentIcon} from '@sanity/icons/Comment'\nimport {type CurrentUser, type PortableTextBlock} from '@sanity/types'\nimport {\n // oxlint-disable-next-line no-restricted-imports\n Button as SanityUIButton,\n Flex,\n Stack,\n Text,\n useClickOutsideEvent,\n} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {styled} from 'styled-components'\n\nimport {Button, Popover, Tooltip} from '../../../../ui-components'\nimport {type UserListWithPermissionsHookValue} from '../../../hooks'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {useAddonDataset} from '../../../studio/addonDataset/useAddonDataset'\nimport {CommentInput, type CommentInputHandle} from '../../components'\nimport {hasCommentMessageValue} from '../../helpers'\nimport {commentsLocaleNamespace} from '../../i18n'\nimport {type CommentMessage} from '../../types'\n\nconst ContentStack = styled(Stack)`\n width: 320px;\n`\n\ninterface CommentsFieldButtonProps {\n count: number\n currentUser: CurrentUser\n fieldTitle: string\n isCreatingDataset: boolean\n mentionOptions: UserListWithPermissionsHookValue\n onChange: (value: PortableTextBlock[]) => void\n onClick?: () => void\n onClose: () => void\n onCommentAdd: (value: PortableTextBlock[]) => void\n onDiscard: () => void\n onInputKeyDown?: (event: React.KeyboardEvent) => void\n open: boolean\n value: CommentMessage\n}\n\nexport function CommentsFieldButton(props: CommentsFieldButtonProps) {\n const {\n count,\n currentUser,\n fieldTitle,\n isCreatingDataset,\n mentionOptions,\n onChange,\n onClick,\n onClose,\n onCommentAdd,\n onDiscard,\n onInputKeyDown,\n open,\n value,\n } = props\n const {t} = useTranslation(commentsLocaleNamespace)\n const {error: addonDatasetError} = useAddonDataset()\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [addCommentButtonElement, setAddCommentButtonElement] = useState<HTMLButtonElement | null>(\n null,\n )\n const commentInputHandle = useRef<CommentInputHandle | null>(null)\n const hasComments = Boolean(count > 0)\n\n const closePopover = useCallback(() => {\n if (!open) return\n onClose()\n addCommentButtonElement?.focus()\n }, [addCommentButtonElement, open, onClose])\n\n const handleSubmit = useCallback(\n (nextValue: PortableTextBlock[]) => {\n onCommentAdd(nextValue)\n closePopover()\n },\n [closePopover, onCommentAdd],\n )\n\n const hasValue = useMemo(() => hasCommentMessageValue(value), [value])\n\n const startDiscard = useCallback(() => {\n if (!hasValue) {\n closePopover()\n return\n }\n\n commentInputHandle.current?.discardDialogController.open()\n }, [closePopover, hasValue])\n\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n // Don't act if the input already prevented this event\n if (event.isDefaultPrevented()) {\n return\n }\n\n // Call parent handler\n if (onInputKeyDown) onInputKeyDown(event)\n },\n [onInputKeyDown],\n )\n\n const handleDiscardCancel = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n }, [])\n\n const handleDiscardConfirm = useCallback(() => {\n commentInputHandle.current?.discardDialogController.close()\n closePopover()\n onDiscard()\n }, [closePopover, onDiscard])\n\n const handlePopoverKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n startDiscard()\n }\n },\n [startDiscard],\n )\n\n useClickOutsideEvent(!open && startDiscard, () => [popoverRef.current])\n\n if (!hasComments) {\n const placeholder = (\n <Translate\n t={t}\n i18nKey=\"compose.add-comment-input-placeholder\"\n values={{field: fieldTitle}}\n />\n )\n\n const content = (\n <ContentStack padding={2} space={4}>\n <CommentInput\n currentUser={currentUser}\n focusLock\n focusOnMount\n mentionOptions={mentionOptions}\n onChange={onChange}\n onDiscardCancel={handleDiscardCancel}\n onDiscardConfirm={handleDiscardConfirm}\n onKeyDown={handleInputKeyDown}\n onSubmit={handleSubmit}\n placeholder={placeholder}\n readOnly={isCreatingDataset}\n ref={commentInputHandle}\n value={value}\n />\n </ContentStack>\n )\n\n return (\n <Popover\n constrainSize\n content={content}\n fallbackPlacements={['bottom-end']}\n open={open}\n placement=\"right-start\"\n portal\n ref={popoverRef}\n onKeyDown={handlePopoverKeyDown}\n >\n <div>\n <Button\n aria-label={t('field-button.aria-label-add')}\n disabled={isCreatingDataset || Boolean(addonDatasetError)}\n icon={AddCommentIcon}\n mode=\"bleed\"\n onClick={onClick}\n ref={setAddCommentButtonElement}\n selected={open}\n tooltipProps={{\n content: t('field-button.title'),\n placement: 'top',\n }}\n />\n </div>\n </Popover>\n )\n }\n\n return (\n <Tooltip portal placement=\"top\" content={t('field-button.content', {count})}>\n <SanityUIButton\n aria-label={t('field-button.aria-label-open')}\n mode=\"bleed\"\n onClick={onClick}\n padding={2}\n space={2}\n >\n <Flex align=\"center\" gap={2}>\n <Text size={1}>\n <CommentIcon />\n </Text>\n <Text size={0}>{count > 9 ? '9+' : count}</Text>\n </Flex>\n </SanityUIButton>\n </Tooltip>\n )\n}\n","import {hues} from '@sanity/color'\nimport {type PortableTextBlock} from '@sanity/types'\nimport {Stack, useBoundaryElement} from '@sanity/ui'\nimport * as PathUtils from '@sanity/util/paths'\nimport {uuid} from '@sanity/uuid'\nimport {AnimatePresence, motion, type Variants} from 'motion/react'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {type FieldProps} from '../../../form'\nimport {getSchemaTypeTitle} from '../../../schema'\nimport {useCurrentUser} from '../../../store'\nimport {COMMENTS_HIGHLIGHT_HUE_KEY} from '../../constants'\nimport {isTextSelectionComment} from '../../helpers'\nimport {\n applyCommentsFieldAttr,\n useComments,\n useCommentsAuthoringPath,\n useCommentsEnabled,\n useCommentsScroll,\n useCommentsSelectedPath,\n useCommentsUpsell,\n} from '../../hooks'\nimport {type CommentCreatePayload, type CommentMessage, type CommentsUIMode} from '../../types'\nimport {CommentsFieldButton} from './CommentsFieldButton'\n\n// When the form is temporarily set to `readOnly` while reconnecting, the form\n// will be re-rendered and any comment that is being authored will be lost.\n// To avoid this, we cache the comment message in a map and restore it when the\n// field is re-rendered.\nconst messageCache = new Map<string, CommentMessage>()\n\nconst EMPTY_ARRAY: [] = []\n\nconst HIGHLIGHT_BLOCK_VARIANTS: Variants = {\n initial: {\n opacity: 0,\n },\n animate: {\n opacity: 1,\n },\n exit: {\n opacity: 0,\n },\n}\n\nexport function CommentsField(props: FieldProps) {\n const {enabled, mode} = useCommentsEnabled()\n\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n return <CommentFieldInner {...props} mode={mode} />\n}\n\nconst HighlightDiv = styled(motion.div)(({theme}) => {\n const {radius, space, color} = theme.sanity\n const bg = hues[COMMENTS_HIGHLIGHT_HUE_KEY][color.dark ? 900 : 50].hex\n\n return css`\n mix-blend-mode: ${color.dark ? 'screen' : 'multiply'};\n border-radius: ${radius[3]}px;\n top: -${space[2]}px;\n left: -${space[2]}px;\n bottom: -${space[2]}px;\n right: -${space[2]}px;\n pointer-events: none;\n position: absolute;\n z-index: 1;\n width: calc(100% + ${space[2] * 2}px);\n height: calc(100% + ${space[2] * 2}px);\n background-color: ${bg};\n `\n})\n\nconst FieldStack = styled(Stack)`\n position: relative;\n\n // Hide when the field component renders nothing (e.g. a custom\n // field component that returns null) to avoid an empty wrapper\n // taking up space in the form.\n &:empty:not([hidden]) {\n display: none;\n }\n`\n\nfunction CommentFieldInner(\n props: FieldProps & {\n mode: CommentsUIMode\n },\n) {\n const {mode} = props\n\n const currentUser = useCurrentUser()\n const {element: boundaryElement} = useBoundaryElement()\n\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const {\n comments,\n isCommentsOpen,\n isCreatingDataset,\n mentionOptions,\n onCommentsOpen,\n operation,\n setStatus,\n status,\n } = useComments()\n const {upsellData, handleOpenDialog} = useCommentsUpsell()\n const {selectedPath, setSelectedPath} = useCommentsSelectedPath()\n const {authoringPath, setAuthoringPath} = useCommentsAuthoringPath()\n const {scrollToGroup} = useCommentsScroll({\n boundaryElement,\n })\n\n const fieldTitle = useMemo(() => getSchemaTypeTitle(props.schemaType), [props.schemaType])\n const stringPath = useMemo(() => PathUtils.toString(props.path), [props.path])\n\n // Use the cached value if it exists as the initial value\n const cachedValue = messageCache.get(stringPath) || null\n\n const [value, setValue] = useState<PortableTextBlock[] | null>(cachedValue)\n\n // If the path of the field matches the authoring path, the comment input should be open.\n const isOpen = useMemo(() => authoringPath === stringPath, [authoringPath, stringPath])\n\n // Determine if the current field is selected\n const isSelected = useMemo(() => {\n if (!isCommentsOpen) return false\n if (selectedPath?.origin === 'form' || selectedPath?.origin === 'url') return false\n return selectedPath?.fieldPath === stringPath\n }, [isCommentsOpen, selectedPath?.fieldPath, selectedPath?.origin, stringPath])\n\n const isInlineCommentThread = useMemo(() => {\n return comments.data.open\n .filter((c) => c.threadId === selectedPath?.threadId)\n .some((x) => isTextSelectionComment(x.parentComment))\n }, [comments.data.open, selectedPath?.threadId])\n\n // Total number of comments for the current field\n const count = useMemo(() => {\n const commentsCount = comments.data.open\n .map((c) => (c.fieldPath === stringPath ? c.commentsCount : 0))\n .reduce((acc, val) => acc + val, 0)\n\n return commentsCount || 0\n }, [comments.data.open, stringPath])\n\n const hasComments = Boolean(count > 0)\n\n const resetMessageValue = useCallback(() => {\n // Reset the value and remove the message from the cache\n setValue(null)\n messageCache.delete(stringPath)\n }, [stringPath])\n\n const handleClick = useCallback(() => {\n // When clicking a comment button when the field has comments, we want to:\n if (hasComments) {\n // 1. Change the status to 'open' if it's 'resolved'\n if (status === 'resolved') {\n setStatus('open')\n }\n\n // 2. Ensure that the authoring path is reset when clicking\n // the comment button when the field has comments.\n setAuthoringPath(null)\n\n // 3. Open the comments inspector\n onCommentsOpen?.()\n\n // 4. Find the latest comment thread ID for the current field\n const scrollToThreadId = comments.data.open.find(\n (c) => c.fieldPath === PathUtils.toString(props.path),\n )?.threadId\n\n // 5. Set the latest thread ID as the selected thread ID\n // and scroll to the it.\n if (scrollToThreadId) {\n // handleSetThreadToScrollTo(scrollToThreadId)\n setSelectedPath({\n threadId: scrollToThreadId,\n origin: 'form',\n fieldPath: PathUtils.toString(props.path),\n })\n\n scrollToGroup(scrollToThreadId)\n }\n\n return\n }\n\n if (mode === 'upsell') {\n if (upsellData) {\n handleOpenDialog('field_action')\n } else {\n // Open the comments inspector\n onCommentsOpen?.()\n }\n return\n }\n\n // If the field is open (i.e. the authoring path is set to the current field)\n // we close the field by resetting the authoring path. If the field is not open,\n // we set the authoring path to the current field so that the comment form is opened.\n setAuthoringPath(isOpen ? null : stringPath)\n }, [\n comments.data.open,\n handleOpenDialog,\n hasComments,\n isOpen,\n mode,\n onCommentsOpen,\n props.path,\n scrollToGroup,\n setAuthoringPath,\n setSelectedPath,\n setStatus,\n status,\n stringPath,\n upsellData,\n ])\n\n const handleCommentAdd = useCallback(\n (nextValue: PortableTextBlock[]) => {\n if (nextValue) {\n // Since this is a new comment, we generate a new thread ID\n const newThreadId = uuid()\n\n // Construct the comment payload\n const nextComment: CommentCreatePayload = {\n type: 'field',\n fieldPath: PathUtils.toString(props.path),\n message: nextValue,\n parentCommentId: undefined,\n status: 'open',\n threadId: newThreadId,\n // New comments have no reactions\n reactions: EMPTY_ARRAY,\n }\n\n // Execute the create mutation\n void operation.create(nextComment)\n\n // If a comment is added to a field when viewing resolved comments, we switch\n // to open comments and scroll to the comment that was just added\n // Open the inspector when a new comment is added\n onCommentsOpen?.()\n\n if (status === 'resolved') {\n // Set the status to 'open' so that the comment is visible\n setStatus('open')\n }\n\n resetMessageValue()\n\n // Scroll to the thread\n setSelectedPath({\n threadId: newThreadId,\n origin: 'form',\n fieldPath: PathUtils.toString(props.path),\n })\n\n scrollToGroup(newThreadId)\n }\n },\n [\n onCommentsOpen,\n operation,\n props.path,\n resetMessageValue,\n scrollToGroup,\n setSelectedPath,\n setStatus,\n status,\n ],\n )\n\n const handleClose = useCallback(() => setAuthoringPath(null), [setAuthoringPath])\n\n const handleOnChange = useCallback(\n (nextValue: CommentMessage) => {\n setValue(nextValue)\n messageCache.set(stringPath, nextValue)\n },\n [stringPath],\n )\n\n const internalComments: FieldProps['__internal_comments'] = useMemo(\n () => ({\n button: currentUser && (\n <CommentsFieldButton\n count={Number(count)}\n currentUser={currentUser}\n fieldTitle={fieldTitle}\n isCreatingDataset={isCreatingDataset}\n mentionOptions={mentionOptions}\n onChange={handleOnChange}\n onClick={handleClick}\n onClose={handleClose}\n onCommentAdd={handleCommentAdd}\n onDiscard={resetMessageValue}\n open={isOpen}\n value={value}\n />\n ),\n hasComments,\n isAddingComment: isOpen,\n }),\n [\n currentUser,\n count,\n fieldTitle,\n isCreatingDataset,\n mentionOptions,\n handleOnChange,\n handleClick,\n handleClose,\n handleCommentAdd,\n resetMessageValue,\n isOpen,\n value,\n hasComments,\n ],\n )\n\n return (\n <FieldStack {...applyCommentsFieldAttr(PathUtils.toString(props.path))} ref={rootRef}>\n {props.renderDefault({\n ...props,\n __internal_comments: internalComments,\n })}\n\n <AnimatePresence>\n {isSelected && !isInlineCommentThread && (\n <HighlightDiv\n animate=\"animate\"\n exit=\"exit\"\n initial=\"initial\"\n variants={HIGHLIGHT_BLOCK_VARIANTS}\n />\n )}\n </AnimatePresence>\n </FieldStack>\n )\n}\n"],"names":["useCommentsAuthoringPath","value","useContext","CommentsAuthoringPathContext","Error","ContentStack","styled","Stack","withConfig","displayName","componentId","CommentsFieldButton","props","$","_c","count","currentUser","fieldTitle","isCreatingDataset","mentionOptions","onChange","onClick","onClose","onCommentAdd","onDiscard","onInputKeyDown","open","t","useTranslation","commentsLocaleNamespace","error","addonDatasetError","useAddonDataset","popoverRef","useRef","addCommentButtonElement","setAddCommentButtonElement","useState","commentInputHandle","hasComments","t0","focus","closePopover","t1","nextValue","handleSubmit","t2","hasCommentMessageValue","hasValue","t3","current","discardDialogController","startDiscard","t4","event","isDefaultPrevented","handleInputKeyDown","t5","Symbol","for","close","handleDiscardCancel","t6","handleDiscardConfirm","t7","event_0","key","preventDefault","stopPropagation","handlePopoverKeyDown","t8","useClickOutsideEvent","t9","field","t10","placeholder","t11","content","t12","t13","t14","Boolean","t15","t16","placement","t17","AddCommentIcon","t18","SanityUIButton","messageCache","Map","EMPTY_ARRAY","HIGHLIGHT_BLOCK_VARIANTS","initial","opacity","animate","exit","CommentsField","enabled","mode","useCommentsEnabled","renderDefault","HighlightDiv","motion","div","theme","radius","space","color","sanity","bg","hues","COMMENTS_HIGHLIGHT_HUE_KEY","dark","hex","css","FieldStack","CommentFieldInner","useCurrentUser","element","boundaryElement","useBoundaryElement","rootRef","comments","isCommentsOpen","onCommentsOpen","operation","setStatus","status","useComments","upsellData","handleOpenDialog","useCommentsUpsell","selectedPath","setSelectedPath","useCommentsSelectedPath","authoringPath","setAuthoringPath","scrollToGroup","useCommentsScroll","schemaType","getSchemaTypeTitle","path","PathUtils","toString","stringPath","get","cachedValue","setValue","isOpen","fieldPath","origin","isSelected","data","threadId","c","filter","some","_temp","isInlineCommentThread","c_0","commentsCount","map","reduce","_temp2","delete","resetMessageValue","scrollToThreadId","find","c_1","handleClick","newThreadId","uuid","nextComment","type","message","parentCommentId","undefined","reactions","create","handleCommentAdd","handleClose","nextValue_0","set","handleOnChange","Number","button","isAddingComment","internalComments","applyCommentsFieldAttr","__internal_comments","acc","val","x","isTextSelectionComment","parentComment"],"mappings":"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"}
@@ -11,20 +11,25 @@ import "@sanity/client/csm";
11
11
  import "quick-lru";
12
12
  import "lodash-es/throttle.js";
13
13
  import "lodash-es/isEqual.js";
14
- import "@sanity/icons";
14
+ import "@sanity/icons/Document";
15
+ import "@sanity/icons/Image";
15
16
  import "@sanity/uuid";
16
17
  import "@sanity/ui";
17
18
  import "@sanity/color";
18
19
  import "color2k";
19
20
  import "styled-components";
20
21
  import "lodash-es/isString.js";
22
+ import "@sanity/icons/Copy";
21
23
  import "react-i18next";
24
+ import "@sanity/icons/Clipboard";
22
25
  import "./createAgentBundlesStore.js";
23
26
  import "@sanity/telemetry/react";
24
27
  import "@portabletext/editor";
25
28
  import "@sanity/util/paths";
26
29
  import "./index.js";
27
30
  import "@sanity/types";
31
+ import "@sanity/icons/ChevronRight";
32
+ import "@sanity/icons/Revert";
28
33
  import "@sanity/diff-match-patch";
29
34
  import "lodash-es/flatten.js";
30
35
  import "lodash-es/orderBy.js";
@@ -32,18 +37,29 @@ import "lodash-es/uniq.js";
32
37
  import "lodash-es/xor.js";
33
38
  import "@sanity/diff-patch";
34
39
  import "./version.js";
40
+ import "@sanity/icons/ErrorOutline";
35
41
  import "@sanity/id-utils";
36
42
  import "sanity/router";
43
+ import "@sanity/icons/ChevronDown";
44
+ import "@sanity/icons/InfoOutline";
37
45
  import "date-fns/addHours";
38
46
  import "date-fns/startOfHour";
47
+ import "@sanity/icons/Bolt";
48
+ import "@sanity/icons/Clock";
49
+ import "@sanity/icons/Dot";
50
+ import "@sanity/icons/EarthGlobe";
39
51
  import "date-fns/format";
40
52
  import "date-fns/isValid";
41
53
  import "date-fns/parse";
42
54
  import "@sanity/util/legacyDateFormat";
55
+ import "@sanity/icons/Search";
43
56
  import "@sanity/ui/theme";
57
+ import "@sanity/icons/Sync";
44
58
  import "lodash-es/pick.js";
45
59
  import "react-fast-compare";
60
+ import "@sanity/icons/AccessDenied";
46
61
  import "lodash-es/startCase.js";
62
+ import "@sanity/icons/Close";
47
63
  import "react-focus-lock";
48
64
  import "lodash-es/debounce.js";
49
65
  import "date-fns/differenceInDays";
@@ -53,8 +69,19 @@ import "date-fns/differenceInMonths";
53
69
  import "date-fns/differenceInSeconds";
54
70
  import "date-fns/differenceInWeeks";
55
71
  import "date-fns/differenceInYears";
72
+ import "@sanity/icons/AddCircle";
73
+ import "@sanity/icons/Calendar";
74
+ import "@sanity/icons/Circle";
75
+ import "@sanity/icons/Edit";
76
+ import "@sanity/icons/Publish";
77
+ import "@sanity/icons/Timeline";
78
+ import "@sanity/icons/Trash";
79
+ import "@sanity/icons/Unpublish";
56
80
  import "@sanity/diff";
57
81
  import "mendoza";
82
+ import "@sanity/icons/ArrowDown";
83
+ import "@sanity/icons/ArrowRight";
84
+ import "@sanity/icons/WarningOutline";
58
85
  import "@portabletext/sanity-bridge";
59
86
  import "motion/react";
60
87
  import "lodash-es/get.js";
@@ -73,6 +100,7 @@ import "lodash-es/toLower.js";
73
100
  import "lodash-es/union.js";
74
101
  import "lodash-es/words.js";
75
102
  import "lodash-es/isFinite.js";
103
+ import "@sanity/icons/Add";
76
104
  import "observable-callback";
77
105
  import "@sanity/util/content";
78
106
  import "lodash-es/isPlainObject.js";
@@ -80,6 +108,8 @@ import "@sanity/insert-menu";
80
108
  import "@tanstack/react-virtual";
81
109
  import "speakingurl";
82
110
  import "@sanity/asset-utils";
111
+ import "@sanity/icons/HelpCircle";
112
+ import "@sanity/icons/Launch";
83
113
  import "@sanity/image-url";
84
114
  import "nanoid";
85
115
  import "lodash-es/castArray.js";
@@ -87,8 +117,13 @@ import "rxjs-mergemap-array";
87
117
  import "@sanity/mutator";
88
118
  import "@portabletext/react";
89
119
  import "lodash-es/findIndex.js";
120
+ import "@sanity/icons/EyeOpen";
121
+ import "@sanity/icons/Feedback";
90
122
  import "@xstate/react";
91
123
  import "xstate";
124
+ import "@sanity/icons/FaceHappy";
125
+ import "@sanity/icons/FaceIndifferent";
126
+ import "@sanity/icons/FaceSad";
92
127
  import "@sentry/react";
93
128
  import "@sanity/schema";
94
129
  import "@sanity/util/client";
@@ -98,14 +133,29 @@ import "json-reduce";
98
133
  import "rxjs-exhaustmap-with-trailing";
99
134
  import "date-fns/isBefore";
100
135
  import "date-fns/startOfMinute";
136
+ import "@sanity/icons/Documents";
137
+ import "@sanity/icons/Unknown";
101
138
  import "@portabletext/toolkit";
139
+ import "@sanity/icons/CheckmarkCircle";
140
+ import "@sanity/icons/User";
141
+ import "@sanity/icons/Link";
142
+ import "@sanity/icons/ChevronLeft";
102
143
  import "polished";
103
144
  import "@sanity/client";
145
+ import "@sanity/icons/Reset";
104
146
  import "react-is";
105
147
  import "exif-component";
106
148
  import "lodash-es/pickBy.js";
107
149
  import "swr";
150
+ import "@sanity/icons/Download";
151
+ import "@sanity/icons/Upload";
152
+ import "@sanity/icons/BinaryDocument";
153
+ import "@sanity/icons/Lock";
154
+ import "@sanity/icons/AddDocument";
155
+ import "@sanity/icons/InsertAbove";
156
+ import "@sanity/icons/InsertBelow";
108
157
  import "use-hot-module-reload";
158
+ import "@sanity/icons/EllipsisHorizontal";
109
159
  import "lodash-es/memoize.js";
110
160
  import "lodash-es/sortedIndex.js";
111
161
  import "lodash-es/difference.js";
@@ -120,11 +170,18 @@ import "groq-js";
120
170
  import "use-sync-external-store/with-selector";
121
171
  import "is-network-error";
122
172
  import "lodash-es/escapeRegExp.js";
173
+ import "@sanity/icons/Desktop";
174
+ import "@sanity/icons/Moon";
175
+ import "@sanity/icons/Sun";
123
176
  import "lodash-es/isEmpty.js";
124
177
  import "react-dom/server";
125
178
  import "lodash-es/capitalize.js";
126
179
  import "lodash-es/last.js";
127
180
  import "react-dom/client";
181
+ import "@sanity/icons/ArrowLeft";
182
+ import "@sanity/icons/AddUser";
183
+ import "@sanity/icons/Cog";
184
+ import "@sanity/icons/Checkmark";
128
185
  import "date-fns/addWeeks";
129
186
  import "date-fns/isAfter";
130
187
  import "semver";
@@ -1 +1 @@
1
- {"version":3,"file":"index7.js","sources":["../../src/core/comments/context/onboarding/CommentsOnboardingProvider.tsx","../../src/core/comments/context/upsell/CommentsUpsellProvider.tsx","../../src/core/comments/plugin/studio-layout/CommentsStudioLayout.tsx"],"sourcesContent":["import {type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentsOnboardingContext} from 'sanity/_singletons'\n\nimport {type CommentsOnboardingContextValue} from './types'\n\nconst VERSION = 1\nconst LOCAL_STORAGE_KEY = `sanityStudio:comments:inspector:onboarding:dismissed:v${VERSION}`\n\nconst setLocalStorage = (value: boolean) => {\n try {\n window.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(value))\n } catch {\n // Fail silently\n }\n}\n\nconst getLocalStorage = (): boolean => {\n try {\n const value = window.localStorage.getItem(LOCAL_STORAGE_KEY)\n return value ? JSON.parse(value) : false\n } catch {\n return false\n }\n}\n\ninterface CommentsOnboardingProviderProps {\n children: ReactNode\n}\n\nexport function CommentsOnboardingProvider(props: CommentsOnboardingProviderProps) {\n const {children} = props\n const [dismissed, setDismissed] = useState<boolean>(getLocalStorage())\n\n const handleDismiss = useCallback(() => {\n setDismissed(true)\n setLocalStorage(true)\n }, [setDismissed])\n\n const ctxValue = useMemo(\n (): CommentsOnboardingContextValue => ({\n setDismissed: handleDismiss,\n isDismissed: dismissed,\n }),\n [handleDismiss, dismissed],\n )\n\n return (\n <CommentsOnboardingContext.Provider value={ctxValue}>\n {children}\n </CommentsOnboardingContext.Provider>\n )\n}\n","import {CommentsUpsellContext} from 'sanity/_singletons'\n\nimport {getDialogPropsFromContext, useUpsellContext} from '../../../hooks/useUpsellContext'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\n\n/**\n * @beta\n * @hidden\n */\nexport function CommentsUpsellProvider(props: {children: React.ReactNode}) {\n const contextValue = useUpsellContext({\n dataUri: '/journey/comments',\n feature: 'comments',\n })\n\n return (\n <CommentsUpsellContext.Provider value={contextValue}>\n {props.children}\n <UpsellDialog {...getDialogPropsFromContext(contextValue)} />\n </CommentsUpsellContext.Provider>\n )\n}\n","import {type LayoutProps} from '../../../config'\nimport {useFeatureEnabled} from '../../../hooks'\nimport {FEATURES} from '../../../hooks/useFeatureEnabled'\nimport {AddonDatasetProvider} from '../../../studio'\nimport {CommentsOnboardingProvider, CommentsUpsellProvider} from '../../context'\n\nexport function CommentsStudioLayout(props: LayoutProps) {\n const {enabled, isLoading} = useFeatureEnabled(FEATURES.studioComments)\n const children = props.renderDefault(props)\n\n return (\n <AddonDatasetProvider>\n <CommentsOnboardingProvider>\n {!enabled && !isLoading ? (\n <CommentsUpsellProvider>{children}</CommentsUpsellProvider>\n ) : (\n children\n )}\n </CommentsOnboardingProvider>\n </AddonDatasetProvider>\n )\n}\n"],"names":["VERSION","LOCAL_STORAGE_KEY","setLocalStorage","value","window","localStorage","setItem","JSON","stringify","getLocalStorage","getItem","parse","CommentsOnboardingProvider","props","$","_c","children","t0","Symbol","for","dismissed","setDismissed","useState","t1","handleDismiss","t2","isDismissed","ctxValue","t3","CommentsUpsellProvider","dataUri","feature","contextValue","useUpsellContext","getDialogPropsFromContext","t4","CommentsStudioLayout","enabled","isLoading","useFeatureEnabled","FEATURES","studioComments","renderDefault"],"mappings":"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"}
1
+ {"version":3,"file":"index7.js","sources":["../../src/core/comments/context/onboarding/CommentsOnboardingProvider.tsx","../../src/core/comments/context/upsell/CommentsUpsellProvider.tsx","../../src/core/comments/plugin/studio-layout/CommentsStudioLayout.tsx"],"sourcesContent":["import {type ReactNode, useCallback, useMemo, useState} from 'react'\nimport {CommentsOnboardingContext} from 'sanity/_singletons'\n\nimport {type CommentsOnboardingContextValue} from './types'\n\nconst VERSION = 1\nconst LOCAL_STORAGE_KEY = `sanityStudio:comments:inspector:onboarding:dismissed:v${VERSION}`\n\nconst setLocalStorage = (value: boolean) => {\n try {\n window.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(value))\n } catch {\n // Fail silently\n }\n}\n\nconst getLocalStorage = (): boolean => {\n try {\n const value = window.localStorage.getItem(LOCAL_STORAGE_KEY)\n return value ? JSON.parse(value) : false\n } catch {\n return false\n }\n}\n\ninterface CommentsOnboardingProviderProps {\n children: ReactNode\n}\n\nexport function CommentsOnboardingProvider(props: CommentsOnboardingProviderProps) {\n const {children} = props\n const [dismissed, setDismissed] = useState<boolean>(getLocalStorage())\n\n const handleDismiss = useCallback(() => {\n setDismissed(true)\n setLocalStorage(true)\n }, [setDismissed])\n\n const ctxValue = useMemo(\n (): CommentsOnboardingContextValue => ({\n setDismissed: handleDismiss,\n isDismissed: dismissed,\n }),\n [handleDismiss, dismissed],\n )\n\n return (\n <CommentsOnboardingContext.Provider value={ctxValue}>\n {children}\n </CommentsOnboardingContext.Provider>\n )\n}\n","import {CommentsUpsellContext} from 'sanity/_singletons'\n\nimport {getDialogPropsFromContext, useUpsellContext} from '../../../hooks/useUpsellContext'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\n\n/**\n * @beta\n * @hidden\n */\nexport function CommentsUpsellProvider(props: {children: React.ReactNode}) {\n const contextValue = useUpsellContext({\n dataUri: '/journey/comments',\n feature: 'comments',\n })\n\n return (\n <CommentsUpsellContext.Provider value={contextValue}>\n {props.children}\n <UpsellDialog {...getDialogPropsFromContext(contextValue)} />\n </CommentsUpsellContext.Provider>\n )\n}\n","import {type LayoutProps} from '../../../config'\nimport {useFeatureEnabled} from '../../../hooks'\nimport {FEATURES} from '../../../hooks/useFeatureEnabled'\nimport {AddonDatasetProvider} from '../../../studio'\nimport {CommentsOnboardingProvider, CommentsUpsellProvider} from '../../context'\n\nexport function CommentsStudioLayout(props: LayoutProps) {\n const {enabled, isLoading} = useFeatureEnabled(FEATURES.studioComments)\n const children = props.renderDefault(props)\n\n return (\n <AddonDatasetProvider>\n <CommentsOnboardingProvider>\n {!enabled && !isLoading ? (\n <CommentsUpsellProvider>{children}</CommentsUpsellProvider>\n ) : (\n children\n )}\n </CommentsOnboardingProvider>\n </AddonDatasetProvider>\n )\n}\n"],"names":["VERSION","LOCAL_STORAGE_KEY","setLocalStorage","value","window","localStorage","setItem","JSON","stringify","getLocalStorage","getItem","parse","CommentsOnboardingProvider","props","$","_c","children","t0","Symbol","for","dismissed","setDismissed","useState","t1","handleDismiss","t2","isDismissed","ctxValue","t3","CommentsUpsellProvider","dataUri","feature","contextValue","useUpsellContext","getDialogPropsFromContext","t4","CommentsStudioLayout","enabled","isLoading","useFeatureEnabled","FEATURES","studioComments","renderDefault"],"mappings":"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"}
@@ -20,13 +20,18 @@ import "react-rx";
20
20
  import "@sanity/client/csm";
21
21
  import "quick-lru";
22
22
  import "lodash-es/throttle.js";
23
- import { AddCommentIcon } from "@sanity/icons";
23
+ import "@sanity/icons/Document";
24
+ import "@sanity/icons/Image";
24
25
  import "@sanity/color";
25
26
  import "color2k";
26
27
  import { styled } from "styled-components";
27
28
  import "lodash-es/isString.js";
29
+ import "@sanity/icons/Copy";
30
+ import "@sanity/icons/Clipboard";
28
31
  import "./createAgentBundlesStore.js";
29
32
  import "@sanity/telemetry/react";
33
+ import "@sanity/icons/ChevronRight";
34
+ import "@sanity/icons/Revert";
30
35
  import "@sanity/diff-match-patch";
31
36
  import "lodash-es/flatten.js";
32
37
  import "lodash-es/orderBy.js";
@@ -34,6 +39,7 @@ import "lodash-es/uniq.js";
34
39
  import "lodash-es/xor.js";
35
40
  import "@sanity/diff-patch";
36
41
  import "./version.js";
42
+ import "@sanity/icons/ErrorOutline";
37
43
  import "@sanity/ui/theme";
38
44
  import "date-fns/differenceInDays";
39
45
  import "date-fns/differenceInHours";
@@ -42,8 +48,21 @@ import "date-fns/differenceInMonths";
42
48
  import "date-fns/differenceInSeconds";
43
49
  import "date-fns/differenceInWeeks";
44
50
  import "date-fns/differenceInYears";
51
+ import "@sanity/icons/AddCircle";
52
+ import "@sanity/icons/Calendar";
53
+ import "@sanity/icons/Circle";
54
+ import "@sanity/icons/Close";
55
+ import "@sanity/icons/Edit";
56
+ import "@sanity/icons/Publish";
57
+ import "@sanity/icons/Timeline";
58
+ import "@sanity/icons/Trash";
59
+ import "@sanity/icons/Unpublish";
45
60
  import "@sanity/diff";
46
61
  import "mendoza";
62
+ import "@sanity/icons/ArrowDown";
63
+ import "@sanity/icons/ArrowRight";
64
+ import "@sanity/icons/InfoOutline";
65
+ import "@sanity/icons/WarningOutline";
47
66
  import "@portabletext/sanity-bridge";
48
67
  import "react-fast-compare";
49
68
  import "lodash-es/pick.js";
@@ -63,14 +82,21 @@ import "lodash-es/toLower.js";
63
82
  import "lodash-es/union.js";
64
83
  import "lodash-es/words.js";
65
84
  import "lodash-es/isFinite.js";
85
+ import "@sanity/icons/Add";
66
86
  import "@sanity/id-utils";
67
87
  import "sanity/router";
88
+ import "@sanity/icons/ChevronDown";
68
89
  import "date-fns/addHours";
69
90
  import "date-fns/startOfHour";
91
+ import "@sanity/icons/Bolt";
92
+ import "@sanity/icons/Clock";
93
+ import "@sanity/icons/Dot";
94
+ import "@sanity/icons/EarthGlobe";
70
95
  import "date-fns/format";
71
96
  import "date-fns/isValid";
72
97
  import "date-fns/parse";
73
98
  import "@sanity/util/legacyDateFormat";
99
+ import "@sanity/icons/Search";
74
100
  import "observable-callback";
75
101
  import "@sanity/util/content";
76
102
  import "lodash-es/isPlainObject.js";
@@ -81,8 +107,13 @@ import "speakingurl";
81
107
  import "@portabletext/react";
82
108
  import "lodash-es/findIndex.js";
83
109
  import { useCommentsUpsell } from "./useCommentsUpsell.js";
110
+ import "@sanity/icons/EyeOpen";
111
+ import "@sanity/icons/Feedback";
84
112
  import "@xstate/react";
85
113
  import "xstate";
114
+ import "@sanity/icons/FaceHappy";
115
+ import "@sanity/icons/FaceIndifferent";
116
+ import "@sanity/icons/FaceSad";
86
117
  import "@sentry/react";
87
118
  import "rxjs-mergemap-array";
88
119
  import "@sanity/schema";
@@ -93,19 +124,38 @@ import "json-reduce";
93
124
  import "rxjs-exhaustmap-with-trailing";
94
125
  import "date-fns/isBefore";
95
126
  import "date-fns/startOfMinute";
127
+ import "@sanity/icons/Documents";
128
+ import "@sanity/icons/Unknown";
96
129
  import "@portabletext/toolkit";
130
+ import "@sanity/icons/CheckmarkCircle";
131
+ import "@sanity/icons/User";
97
132
  import "react-focus-lock";
133
+ import "@sanity/icons/Link";
98
134
  import "@sanity/asset-utils";
99
135
  import "@sanity/image-url";
136
+ import "@sanity/icons/ChevronLeft";
100
137
  import "polished";
101
138
  import "@sanity/client";
139
+ import "@sanity/icons/Reset";
140
+ import "@sanity/icons/Sync";
141
+ import "@sanity/icons/AccessDenied";
142
+ import "@sanity/icons/HelpCircle";
143
+ import "@sanity/icons/Launch";
102
144
  import "react-is";
103
145
  import "exif-component";
104
146
  import "lodash-es/pickBy.js";
105
147
  import "swr";
148
+ import "@sanity/icons/Download";
149
+ import "@sanity/icons/Upload";
150
+ import "@sanity/icons/BinaryDocument";
151
+ import "@sanity/icons/Lock";
152
+ import "@sanity/icons/AddDocument";
153
+ import "@sanity/icons/InsertAbove";
154
+ import "@sanity/icons/InsertBelow";
106
155
  import "lodash-es/castArray.js";
107
156
  import "nanoid";
108
157
  import "use-hot-module-reload";
158
+ import "@sanity/icons/EllipsisHorizontal";
109
159
  import "lodash-es/memoize.js";
110
160
  import "lodash-es/sortedIndex.js";
111
161
  import "lodash-es/difference.js";
@@ -121,15 +171,23 @@ import "groq-js";
121
171
  import "use-sync-external-store/with-selector";
122
172
  import "is-network-error";
123
173
  import "lodash-es/escapeRegExp.js";
174
+ import "@sanity/icons/Desktop";
175
+ import "@sanity/icons/Moon";
176
+ import "@sanity/icons/Sun";
124
177
  import "lodash-es/isEmpty.js";
125
178
  import "react-dom/server";
126
179
  import "lodash-es/capitalize.js";
127
180
  import "lodash-es/last.js";
128
181
  import "react-dom/client";
182
+ import "@sanity/icons/ArrowLeft";
183
+ import "@sanity/icons/AddUser";
184
+ import "@sanity/icons/Cog";
185
+ import "@sanity/icons/Checkmark";
129
186
  import "date-fns/addWeeks";
130
187
  import "date-fns/isAfter";
131
188
  import "semver";
132
189
  import "lodash-es/isObject.js";
190
+ import { AddCommentIcon } from "@sanity/icons/AddComment";
133
191
  function createDomRectFromElements(elements) {
134
192
  if (!elements || !elements.length) return null;
135
193
  const rects = elements.map((el) => el.getBoundingClientRect()), minX = Math.min(...rects.map((r) => r.x)) || 0, minY = Math.min(...rects.map((r) => r.y)) || 0, maxRight = Math.max(...rects.map((r) => r.right)) || 0, maxBottom = Math.max(...rects.map((r) => r.bottom)) || 0;