@payloadcms/ui 3.44.0 → 3.45.0-canary.0

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 (113) hide show
  1. package/dist/elements/Button/index.d.ts.map +1 -1
  2. package/dist/elements/Button/index.js +2 -1
  3. package/dist/elements/Button/index.js.map +1 -1
  4. package/dist/elements/Button/index.scss +2 -2
  5. package/dist/elements/DocumentControls/index.d.ts +1 -0
  6. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  7. package/dist/elements/DocumentControls/index.js +26 -11
  8. package/dist/elements/DocumentControls/index.js.map +1 -1
  9. package/dist/elements/DocumentFields/index.d.ts.map +1 -1
  10. package/dist/elements/DocumentFields/index.js.map +1 -1
  11. package/dist/elements/LivePreview/Device/index.d.ts +5 -0
  12. package/dist/elements/LivePreview/Device/index.d.ts.map +1 -0
  13. package/dist/elements/LivePreview/Device/index.js +92 -0
  14. package/dist/elements/LivePreview/Device/index.js.map +1 -0
  15. package/dist/elements/LivePreview/DeviceContainer/index.d.ts +5 -0
  16. package/dist/elements/LivePreview/DeviceContainer/index.d.ts.map +1 -0
  17. package/dist/elements/LivePreview/DeviceContainer/index.js +55 -0
  18. package/dist/elements/LivePreview/DeviceContainer/index.js.map +1 -0
  19. package/dist/elements/LivePreview/IFrame/index.d.ts +10 -0
  20. package/dist/elements/LivePreview/IFrame/index.d.ts.map +1 -0
  21. package/dist/elements/LivePreview/IFrame/index.js +30 -0
  22. package/dist/elements/LivePreview/IFrame/index.js.map +1 -0
  23. package/dist/elements/LivePreview/IFrame/index.scss +9 -0
  24. package/dist/elements/LivePreview/Toggler/index.d.ts +4 -0
  25. package/dist/elements/LivePreview/Toggler/index.d.ts.map +1 -0
  26. package/dist/elements/LivePreview/Toggler/index.js +30 -0
  27. package/dist/elements/LivePreview/Toggler/index.js.map +1 -0
  28. package/dist/elements/LivePreview/Toggler/index.scss +48 -0
  29. package/dist/elements/LivePreview/Toolbar/Controls/index.d.ts +5 -0
  30. package/dist/elements/LivePreview/Toolbar/Controls/index.d.ts.map +1 -0
  31. package/dist/elements/LivePreview/Toolbar/Controls/index.js +157 -0
  32. package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -0
  33. package/dist/elements/LivePreview/Toolbar/Controls/index.scss +61 -0
  34. package/dist/elements/LivePreview/Toolbar/SizeInput/index.d.ts +6 -0
  35. package/dist/elements/LivePreview/Toolbar/SizeInput/index.d.ts.map +1 -0
  36. package/dist/elements/LivePreview/Toolbar/SizeInput/index.js +101 -0
  37. package/dist/elements/LivePreview/Toolbar/SizeInput/index.js.map +1 -0
  38. package/dist/elements/LivePreview/Toolbar/SizeInput/index.scss +12 -0
  39. package/dist/elements/LivePreview/Toolbar/index.d.ts +7 -0
  40. package/dist/elements/LivePreview/Toolbar/index.d.ts.map +1 -0
  41. package/dist/elements/LivePreview/Toolbar/index.js +97 -0
  42. package/dist/elements/LivePreview/Toolbar/index.js.map +1 -0
  43. package/dist/elements/LivePreview/Toolbar/index.scss +43 -0
  44. package/dist/elements/LivePreview/ToolbarArea/index.d.ts +6 -0
  45. package/dist/elements/LivePreview/ToolbarArea/index.d.ts.map +1 -0
  46. package/dist/elements/LivePreview/ToolbarArea/index.js +41 -0
  47. package/dist/elements/LivePreview/ToolbarArea/index.js.map +1 -0
  48. package/dist/elements/LivePreview/ToolbarArea/index.scss +6 -0
  49. package/dist/elements/LivePreview/Window/index.d.ts +5 -0
  50. package/dist/elements/LivePreview/Window/index.d.ts.map +1 -0
  51. package/dist/elements/LivePreview/Window/index.js +182 -0
  52. package/dist/elements/LivePreview/Window/index.js.map +1 -0
  53. package/dist/elements/LivePreview/Window/index.scss +48 -0
  54. package/dist/elements/PreviewButton/index.d.ts +1 -0
  55. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  56. package/dist/elements/PreviewButton/index.js +13 -10
  57. package/dist/elements/PreviewButton/index.js.map +1 -1
  58. package/dist/elements/PreviewButton/index.scss +39 -0
  59. package/dist/elements/PreviewButton/usePreviewURL.d.ts.map +1 -1
  60. package/dist/elements/PreviewButton/usePreviewURL.js +1 -1
  61. package/dist/elements/PreviewButton/usePreviewURL.js.map +1 -1
  62. package/dist/exports/client/index.d.ts +2 -1
  63. package/dist/exports/client/index.d.ts.map +1 -1
  64. package/dist/exports/client/index.js +22 -22
  65. package/dist/exports/client/index.js.map +4 -4
  66. package/dist/exports/shared/index.js +1 -1
  67. package/dist/exports/shared/index.js.map +2 -2
  68. package/dist/forms/Form/index.d.ts.map +1 -1
  69. package/dist/forms/Form/index.js +1 -1
  70. package/dist/forms/Form/index.js.map +1 -1
  71. package/dist/forms/Form/mergeServerFormState.js +1 -1
  72. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  73. package/dist/hooks/usePopupWindow.d.ts +20 -0
  74. package/dist/hooks/usePopupWindow.d.ts.map +1 -0
  75. package/dist/hooks/usePopupWindow.js +144 -0
  76. package/dist/hooks/usePopupWindow.js.map +1 -0
  77. package/dist/icons/ExternalLink/index.d.ts.map +1 -0
  78. package/dist/icons/ExternalLink/index.js.map +1 -0
  79. package/dist/icons/Eye/index.d.ts +7 -0
  80. package/dist/icons/Eye/index.d.ts.map +1 -0
  81. package/dist/icons/Eye/index.js +28 -0
  82. package/dist/icons/Eye/index.js.map +1 -0
  83. package/dist/icons/Eye/index.scss +20 -0
  84. package/dist/providers/LivePreview/collisionDetection.d.ts +3 -0
  85. package/dist/providers/LivePreview/collisionDetection.d.ts.map +1 -0
  86. package/dist/providers/LivePreview/collisionDetection.js +29 -0
  87. package/dist/providers/LivePreview/collisionDetection.js.map +1 -0
  88. package/dist/providers/LivePreview/context.d.ts +55 -0
  89. package/dist/providers/LivePreview/context.d.ts.map +1 -0
  90. package/dist/providers/LivePreview/context.js +44 -0
  91. package/dist/providers/LivePreview/context.js.map +1 -0
  92. package/dist/providers/LivePreview/index.d.ts +16 -0
  93. package/dist/providers/LivePreview/index.d.ts.map +1 -0
  94. package/dist/providers/LivePreview/index.js +206 -0
  95. package/dist/providers/LivePreview/index.js.map +1 -0
  96. package/dist/providers/LivePreview/index.scss +68 -0
  97. package/dist/providers/LivePreview/sizeReducer.d.ts +20 -0
  98. package/dist/providers/LivePreview/sizeReducer.d.ts.map +1 -0
  99. package/dist/providers/LivePreview/sizeReducer.js +30 -0
  100. package/dist/providers/LivePreview/sizeReducer.js.map +1 -0
  101. package/dist/styles.css +1 -1
  102. package/dist/utilities/formatDocTitle/index.js +2 -2
  103. package/dist/utilities/formatDocTitle/index.js.map +1 -1
  104. package/dist/views/Edit/index.d.ts.map +1 -1
  105. package/dist/views/Edit/index.js +52 -41
  106. package/dist/views/Edit/index.js.map +1 -1
  107. package/dist/views/Edit/index.scss +39 -1
  108. package/package.json +5 -5
  109. package/dist/graphics/ExternalLink/index.d.ts.map +0 -1
  110. package/dist/graphics/ExternalLink/index.js.map +0 -1
  111. /package/dist/{graphics → icons}/ExternalLink/index.d.ts +0 -0
  112. /package/dist/{graphics → icons}/ExternalLink/index.js +0 -0
  113. /package/dist/{graphics → icons}/ExternalLink/index.scss +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["dequal","useRouter","serialize","deepCopyObjectSimpleWithoutReactComponents","getDataByPath","getDataByPathFunc","getSiblingData","getSiblingDataFunc","reduceFieldsToValues","wait","React","useCallback","useEffect","useReducer","useRef","useState","toast","FieldErrorsToast","useDebouncedEffect","useEffectEvent","useQueues","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useRouteTransition","useServerFunctions","useTranslation","useUploadHandlers","abortAndIgnore","handleAbortRef","requests","BackgroundProcessingContext","DocumentFormContext","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","useDocumentForm","errorMessages","fieldReducer","initContextState","baseClass","Form","props","id","collectionSlug","docConfig","docPermissions","getDocPreferences","globalSlug","action","beforeSubmit","children","className","disabled","disabledFromProps","disableSuccessStatus","disableValidationOnSubmit","el","handleResponse","initialState","isDocumentForm","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","documentForm","code","locale","i18n","t","refreshCookie","user","operation","queueTask","getFormState","startRouteTransition","getUploadHandler","config","setDisabled","isMounted","setIsMounted","modified","setModified","isValid","setIsValid","initializing","setInitializing","processing","setProcessing","backgroundProcessing","setBackgroundProcessing","setSubmitted","formRef","contextRef","abortResetFormRef","isFirstRenderRef","fieldsReducer","formState","dispatchFields","current","fields","prevFormState","validateForm","validatedFieldState","data","getData","validationPromises","Object","entries","map","path","field","validatedField","pathSegments","split","passesCondition","validationResult","valid","validate","valueToValidate","value","rows","Array","isArray","blockData","event","preferences","req","payload","siblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","overridesFromArgs","skipValidation","preventDefault","errorToast","successToast","promise","resolve","reject","hasFormSubmitAction","success","error","loading","stopPropagation","revalidatedFormState","serializableFields","reduce","priorOnChange","beforeSubmitFn","result","every","key","formData","createFormData","mergeOverrideData","Boolean","res","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","newFormState","acceptValues","prevStateRef","serverState","push","message","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","_jsx","statusText","console","getFields","getField","file","upload","handler","filename","name","clientUploadContext","updateFilename","JSON","stringify","mimeType","size","dataToSerialize","_payload","indices","nullsAsUndefineds","reset","controller","docPreferences","newState","renderAllFields","schemaPath","signal","replaceState","addFieldRow","blockType","rowIndex","rowIndexArg","subFieldState","newRows","length","moveFieldRow","moveFromIndex","moveToIndex","removeFieldRow","replaceFieldRow","currentRows","abortOnChange","optimize","sanitize","classes","filter","join","executeOnChange","onChangeFn","DocumentFormContextComponent","Fragment","documentFormContextProps","El","noValidate","ref","Provider","useAllFormFields","useForm","useFormFields","useFormModified","useFormProcessing","useFormSubmitted","useWatchForm"],"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["/* eslint-disable react-compiler/react-compiler -- TODO: fix */\n'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { type FormState, type PayloadRequest } from 'payload'\nimport {\n deepCopyObjectSimpleWithoutReactComponents,\n getDataByPath as getDataByPathFunc,\n getSiblingData as getSiblingDataFunc,\n reduceFieldsToValues,\n wait,\n} from 'payload/shared'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type {\n CreateFormData,\n Context as FormContextType,\n FormProps,\n GetDataByPath,\n SubmitOptions,\n} from './types.js'\n\nimport { FieldErrorsToast } from '../../elements/Toasts/fieldErrors.js'\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueues } from '../../hooks/useQueues.js'\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadHandlers } from '../../providers/UploadHandlers/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { requests } from '../../utilities/api.js'\nimport {\n BackgroundProcessingContext,\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useDocumentForm,\n} from './context.js'\nimport { errorMessages } from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport { initContextState } from './initContextState.js'\n\nconst baseClass = 'form'\n\nexport const Form: React.FC<FormProps> = (props) => {\n const { id, collectionSlug, docConfig, docPermissions, getDocPreferences, globalSlug } =\n useDocumentInfo()\n\n const {\n action,\n beforeSubmit,\n children,\n className,\n disabled: disabledFromProps,\n disableSuccessStatus,\n disableValidationOnSubmit,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n el,\n handleResponse,\n initialState, // fully formed initial field state\n isDocumentForm,\n isInitializing: initializingFromProps,\n onChange,\n onSubmit,\n onSuccess,\n redirect,\n submitted: submittedFromProps,\n uuid,\n waitForAutocomplete,\n } = props\n\n const method = 'method' in props ? props?.method : undefined\n\n const router = useRouter()\n\n const documentForm = useDocumentForm()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n const { queueTask } = useQueues()\n\n const { getFormState } = useServerFunctions()\n const { startRouteTransition } = useRouteTransition()\n const { getUploadHandler } = useUploadHandlers()\n\n const { config } = useConfig()\n\n const [disabled, setDisabled] = useState(disabledFromProps || false)\n const [isMounted, setIsMounted] = useState(false)\n const [modified, setModified] = useState(false)\n\n /**\n * Tracks wether the form state passes validation.\n * For example the state could be submitted but invalid as field errors have been returned.\n */\n const [isValid, setIsValid] = useState(true)\n const [initializing, setInitializing] = useState(initializingFromProps)\n const [processing, setProcessing] = useState(false)\n const [backgroundProcessing, setBackgroundProcessing] = useState(false)\n\n const [submitted, setSubmitted] = useState(false)\n const formRef = useRef<HTMLFormElement>(null)\n const contextRef = useRef({} as FormContextType)\n const abortResetFormRef = useRef<AbortController>(null)\n const isFirstRenderRef = useRef(true)\n\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n\n const [formState, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = formState\n\n const prevFormState = useRef(formState)\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const data = contextRef.current.getData()\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = field\n const pathSegments = path ? path.split('.') : []\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = validatedField.valid\n\n if ('validate' in field && typeof field.validate === 'function') {\n let valueToValidate = field.value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = contextRef.current.getDataByPath(path)\n }\n\n validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n collectionSlug,\n // If there is a parent document form, we can get the data from that form\n blockData: undefined, // Will be expensive to get - not worth to pass to client-side validation, as this can be obtained by the user using `useFormFields()`\n data: documentForm?.getData ? documentForm.getData() : data,\n event: 'submit',\n operation,\n path: pathSegments,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: contextRef.current.getSiblingData(path),\n })\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n } else {\n validatedField.valid = true\n validatedField.errorMessage = undefined\n }\n }\n\n if (validatedField.valid === false) {\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!dequal(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n setIsValid(isValid)\n\n return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user, documentForm])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg = action,\n method: methodToUse = method,\n overrides: overridesFromArgs = {},\n skipValidation,\n } = options\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n // create new toast promise which will resolve manually later\n let errorToast, successToast\n const promise = new Promise((resolve, reject) => {\n successToast = resolve\n errorToast = reject\n })\n\n const hasFormSubmitAction =\n actionArg || typeof action === 'string' || typeof action === 'function'\n\n if (redirect || disableSuccessStatus || !hasFormSubmitAction) {\n // Do not show submitting toast, as the promise toast may never disappear under these conditions.\n // Instead, make successToast() or errorToast() throw toast.success / toast.error\n successToast = (data) => toast.success(data)\n errorToast = (data) => toast.error(data)\n } else {\n toast.promise(promise, {\n error: (data) => {\n return data as string\n },\n loading: t('general:submitting'),\n success: (data) => {\n return data as string\n },\n })\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setDisabled(true)\n\n if (waitForAutocomplete) {\n await wait(100)\n }\n\n // Execute server side validations\n if (Array.isArray(beforeSubmit)) {\n let revalidatedFormState: FormState\n\n const serializableFields = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn) => {\n await priorOnChange\n\n const result = await beforeSubmitFn({\n formState: serializableFields,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const isValid = Object.entries(revalidatedFormState).every(\n ([, field]) => field.valid !== false,\n )\n\n setIsValid(isValid)\n\n if (!isValid) {\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid =\n skipValidation || disableValidationOnSubmit ? true : await contextRef.current.validateForm()\n\n setIsValid(isValid)\n // If not valid, prevent submission\n if (!isValid) {\n errorToast(t('error:correctInvalidFields'))\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n let overrides = {}\n\n if (typeof overridesFromArgs === 'function') {\n overrides = overridesFromArgs(contextRef.current.fields)\n } else if (typeof overridesFromArgs === 'object') {\n overrides = overridesFromArgs\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n const serializableFields = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n const data = reduceFieldsToValues(serializableFields, true)\n\n for (const [key, value] of Object.entries(overrides)) {\n data[key] = value\n }\n\n onSubmit(serializableFields, data)\n }\n\n if (!hasFormSubmitAction) {\n // No action provided, so we should return. An example where this happens are lexical link drawers. Upon submitting the drawer, we\n // want to close it without submitting the form. Stuff like validation would be handled by lexical before this, through beforeSubmit\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n const formData = await contextRef.current.createFormData(overrides, {\n mergeOverrideData: Boolean(typeof overridesFromArgs !== 'function'),\n })\n\n try {\n let res\n\n if (typeof actionArg === 'string') {\n res = await requests[methodToUse.toLowerCase()](actionArg, {\n body: formData,\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n } else if (typeof action === 'function') {\n res = await action(formData)\n }\n\n setModified(false)\n setDisabled(false)\n\n if (typeof handleResponse === 'function') {\n handleResponse(res, successToast, errorToast)\n return\n }\n\n const contentType = res.headers.get('content-type')\n const isJSON = contentType && contentType.indexOf('application/json') !== -1\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let json: Record<string, any> = {}\n\n if (isJSON) {\n json = await res.json()\n }\n if (res.status < 400) {\n if (typeof onSuccess === 'function') {\n const newFormState = await onSuccess(json)\n\n if (newFormState) {\n dispatchFields({\n type: 'MERGE_SERVER_STATE',\n acceptValues: true,\n prevStateRef: prevFormState,\n serverState: newFormState,\n })\n }\n }\n setSubmitted(false)\n setProcessing(false)\n\n if (redirect) {\n startRouteTransition(() => router.push(redirect))\n } else if (!disableSuccessStatus) {\n successToast(json.message || t('general:submissionSuccessful'))\n }\n } else {\n setProcessing(false)\n setSubmitted(true)\n\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n errorToast(json.message)\n return\n }\n\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data?.errors)) {\n err.data?.errors.forEach((dataError) => {\n if (dataError?.path) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n setIsValid(false)\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(<FieldErrorsToast errorMessage={err.message || t('error:unknown')} />)\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n errorToast(message)\n }\n } catch (err) {\n console.error('Error submitting form', err) // eslint-disable-line no-console\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n errorToast(err.message)\n }\n },\n [\n beforeSubmit,\n startRouteTransition,\n action,\n disableSuccessStatus,\n disableValidationOnSubmit,\n disabled,\n dispatchFields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n ],\n )\n\n const getFields = useCallback(() => contextRef.current.fields, [])\n\n const getField = useCallback((path: string) => contextRef.current.fields[path], [])\n\n const getData = useCallback(() => reduceFieldsToValues(contextRef.current.fields, true), [])\n\n const getSiblingData = useCallback(\n (path: string) => getSiblingDataFunc(contextRef.current.fields, path),\n [],\n )\n\n const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n const createFormData = useCallback<CreateFormData>(\n async (overrides, { mergeOverrideData = true }) => {\n let data = reduceFieldsToValues(contextRef.current.fields, true)\n\n let file = data?.file\n\n if (docConfig && 'upload' in docConfig && docConfig.upload && file) {\n delete data.file\n\n const handler = getUploadHandler({ collectionSlug })\n\n if (typeof handler === 'function') {\n let filename = file.name\n const clientUploadContext = await handler({\n file,\n updateFilename: (value) => {\n filename = value\n },\n })\n\n file = JSON.stringify({\n clientUploadContext,\n collectionSlug,\n filename,\n mimeType: file.type,\n size: file.size,\n })\n }\n }\n\n if (mergeOverrideData) {\n data = {\n ...data,\n ...overrides,\n }\n } else {\n data = overrides\n }\n\n const dataToSerialize: Record<string, unknown> = {\n _payload: JSON.stringify(data),\n }\n\n if (docConfig && 'upload' in docConfig && docConfig.upload && file) {\n dataToSerialize.file = file\n }\n\n // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves\n const formData = serialize(dataToSerialize, {\n indices: true,\n nullsAsUndefineds: false,\n })\n\n return formData\n },\n [collectionSlug, docConfig, getUploadHandler],\n )\n\n const reset = useCallback(\n async (data: unknown) => {\n const controller = handleAbortRef(abortResetFormRef)\n\n const docPreferences = await getDocPreferences()\n\n const { state: newState } = await getFormState({\n id,\n collectionSlug,\n data,\n docPermissions,\n docPreferences,\n globalSlug,\n locale,\n operation,\n renderAllFields: true,\n schemaPath: collectionSlug ? collectionSlug : globalSlug,\n signal: controller.signal,\n skipValidation: true,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n\n abortResetFormRef.current = null\n },\n [\n collectionSlug,\n dispatchFields,\n globalSlug,\n id,\n operation,\n getFormState,\n docPermissions,\n getDocPreferences,\n locale,\n ],\n )\n\n const replaceState = useCallback(\n (state: FormState) => {\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state })\n },\n [dispatchFields],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const newRows: unknown[] = getDataByPath(path) || []\n const rowIndex = rowIndexArg === undefined ? newRows.length : rowIndexArg\n\n // dispatch ADD_ROW adds a blank row to local form state.\n // This performs no form state request, as the debounced onChange effect will do that for us.\n dispatchFields({\n type: 'ADD_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n const moveFieldRow: FormContextType['moveFieldRow'] = useCallback(\n ({ moveFromIndex, moveToIndex, path }) => {\n dispatchFields({\n type: 'MOVE_ROW',\n moveFromIndex,\n moveToIndex,\n path,\n })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const removeFieldRow: FormContextType['removeFieldRow'] = useCallback(\n ({ path, rowIndex }) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const replaceFieldRow: FormContextType['replaceFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const currentRows: unknown[] = getDataByPath(path)\n const rowIndex = rowIndexArg === undefined ? currentRows.length : rowIndexArg\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n useEffect(() => {\n const abortOnChange = abortResetFormRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n }\n }, [])\n\n useEffect(() => {\n if (initializingFromProps !== undefined) {\n setInitializing(initializingFromProps)\n }\n }, [initializingFromProps])\n\n contextRef.current.submit = submit\n contextRef.current.getFields = getFields\n contextRef.current.getField = getField\n contextRef.current.getData = getData\n contextRef.current.getSiblingData = getSiblingData\n contextRef.current.getDataByPath = getDataByPath\n contextRef.current.validateForm = validateForm\n contextRef.current.createFormData = createFormData\n contextRef.current.setModified = setModified\n contextRef.current.setProcessing = setProcessing\n contextRef.current.setBackgroundProcessing = setBackgroundProcessing\n\n contextRef.current.setSubmitted = setSubmitted\n contextRef.current.setIsValid = setIsValid\n contextRef.current.disabled = disabled\n contextRef.current.setDisabled = setDisabled\n contextRef.current.formRef = formRef\n contextRef.current.reset = reset\n contextRef.current.replaceState = replaceState\n contextRef.current.dispatchFields = dispatchFields\n contextRef.current.addFieldRow = addFieldRow\n contextRef.current.removeFieldRow = removeFieldRow\n contextRef.current.moveFieldRow = moveFieldRow\n contextRef.current.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n contextRef.current.initializing = initializing\n contextRef.current.isValid = isValid\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n useEffect(() => {\n if (typeof disabledFromProps === 'boolean') {\n setDisabled(disabledFromProps)\n }\n }, [disabledFromProps])\n\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') {\n setSubmitted(submittedFromProps)\n }\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n sanitize: true,\n state: initialState,\n })\n }\n }, [initialState, dispatchFields])\n\n useThrottledEffect(\n () => {\n refreshCookie()\n },\n 15000,\n [formState],\n )\n\n useEffect(() => {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n setModified(false)\n }, [locale])\n\n const classes = [className, baseClass].filter(Boolean).join(' ')\n\n const executeOnChange = useEffectEvent((submitted: boolean) => {\n queueTask(async () => {\n if (Array.isArray(onChange)) {\n let serverState: FormState\n\n for (const onChangeFn of onChange) {\n // Edit view default onChange is in packages/ui/src/views/Edit/index.tsx. This onChange usually sends a form state request\n serverState = await onChangeFn({\n formState: deepCopyObjectSimpleWithoutReactComponents(formState),\n submitted,\n })\n }\n\n dispatchFields({\n type: 'MERGE_SERVER_STATE',\n prevStateRef: prevFormState,\n serverState,\n })\n }\n })\n })\n\n useDebouncedEffect(\n () => {\n if ((isFirstRenderRef.current || !dequal(formState, prevFormState.current)) && modified) {\n executeOnChange(submitted)\n }\n\n prevFormState.current = formState\n isFirstRenderRef.current = false\n },\n [modified, submitted, formState],\n 250,\n )\n\n const DocumentFormContextComponent: React.FC<any> = isDocumentForm\n ? DocumentFormContext\n : React.Fragment\n\n const documentFormContextProps = isDocumentForm\n ? {\n value: contextRef.current,\n }\n : {}\n\n const El: 'form' = (el as unknown as 'form') || 'form'\n\n return (\n <El\n action={typeof action === 'function' ? void action : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => void contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <DocumentFormContextComponent {...documentFormContextProps}>\n <FormContext value={contextRef.current}>\n <FormWatchContext\n value={{\n fields: formState,\n ...contextRef.current,\n }}\n >\n <SubmittedContext value={submitted}>\n <InitializingContext value={!isMounted || (isMounted && initializing)}>\n <ProcessingContext value={processing}>\n <BackgroundProcessingContext value={backgroundProcessing}>\n <ModifiedContext value={modified}>\n {/* eslint-disable-next-line @eslint-react/no-context-provider */}\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext>\n </BackgroundProcessingContext>\n </ProcessingContext>\n </InitializingContext>\n </SubmittedContext>\n </FormWatchContext>\n </FormContext>\n </DocumentFormContextComponent>\n </El>\n )\n}\n\nexport {\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\n useDocumentForm,\n useForm,\n useFormFields,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useWatchForm,\n} from './context.js'\n\nexport { FormProps }\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["dequal","useRouter","serialize","deepCopyObjectSimpleWithoutReactComponents","getDataByPath","getDataByPathFunc","getSiblingData","getSiblingDataFunc","reduceFieldsToValues","wait","React","useCallback","useEffect","useReducer","useRef","useState","toast","FieldErrorsToast","useDebouncedEffect","useEffectEvent","useQueues","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useLocale","useOperation","useRouteTransition","useServerFunctions","useTranslation","useUploadHandlers","abortAndIgnore","handleAbortRef","requests","BackgroundProcessingContext","DocumentFormContext","FormContext","FormFieldsContext","FormWatchContext","InitializingContext","ModifiedContext","ProcessingContext","SubmittedContext","useDocumentForm","errorMessages","fieldReducer","initContextState","baseClass","Form","props","id","collectionSlug","docConfig","docPermissions","getDocPreferences","globalSlug","action","beforeSubmit","children","className","disabled","disabledFromProps","disableSuccessStatus","disableValidationOnSubmit","el","handleResponse","initialState","isDocumentForm","isInitializing","initializingFromProps","onChange","onSubmit","onSuccess","redirect","submitted","submittedFromProps","uuid","waitForAutocomplete","method","undefined","router","documentForm","code","locale","i18n","t","refreshCookie","user","operation","queueTask","getFormState","startRouteTransition","getUploadHandler","config","setDisabled","isMounted","setIsMounted","modified","setModified","isValid","setIsValid","initializing","setInitializing","processing","setProcessing","backgroundProcessing","setBackgroundProcessing","setSubmitted","formRef","contextRef","abortResetFormRef","isFirstRenderRef","fieldsReducer","formState","dispatchFields","current","fields","prevFormState","validateForm","validatedFieldState","data","getData","validationPromises","Object","entries","map","path","field","validatedField","pathSegments","split","passesCondition","validationResult","valid","validate","valueToValidate","value","rows","Array","isArray","blockData","event","preferences","req","payload","siblingData","errorMessage","Promise","all","type","state","submit","options","e","actionArg","methodToUse","overrides","overridesFromArgs","skipValidation","preventDefault","errorToast","successToast","promise","resolve","reject","hasFormSubmitAction","success","error","loading","stopPropagation","revalidatedFormState","serializableFields","reduce","priorOnChange","beforeSubmitFn","result","every","key","formData","createFormData","mergeOverrideData","Boolean","res","toLowerCase","body","headers","language","contentType","get","isJSON","indexOf","json","status","newFormState","acceptValues","prevStateRef","serverState","push","message","errors","fieldErrors","nonFieldErrors","fieldErrs","nonFieldErrs","err","newFieldErrs","newNonFieldErrs","forEach","dataError","_jsx","statusText","console","getFields","getField","file","upload","handler","filename","name","clientUploadContext","updateFilename","JSON","stringify","mimeType","size","dataToSerialize","_payload","indices","nullsAsUndefineds","reset","controller","docPreferences","newState","renderAllFields","schemaPath","signal","replaceState","addFieldRow","blockType","rowIndex","rowIndexArg","subFieldState","newRows","length","moveFieldRow","moveFromIndex","moveToIndex","removeFieldRow","replaceFieldRow","currentRows","abortOnChange","optimize","sanitize","classes","filter","join","executeOnChange","onChangeFn","DocumentFormContextComponent","Fragment","documentFormContextProps","El","noValidate","ref","Provider","useAllFormFields","useForm","useFormFields","useFormModified","useFormProcessing","useFormSubmitted","useWatchForm"],"sources":["../../../src/forms/Form/index.tsx"],"sourcesContent":["'use client'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { useRouter } from 'next/navigation.js'\nimport { serialize } from 'object-to-formdata'\nimport { type FormState, type PayloadRequest } from 'payload'\nimport {\n deepCopyObjectSimpleWithoutReactComponents,\n getDataByPath as getDataByPathFunc,\n getSiblingData as getSiblingDataFunc,\n reduceFieldsToValues,\n wait,\n} from 'payload/shared'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type {\n CreateFormData,\n Context as FormContextType,\n FormProps,\n GetDataByPath,\n SubmitOptions,\n} from './types.js'\n\nimport { FieldErrorsToast } from '../../elements/Toasts/fieldErrors.js'\nimport { useDebouncedEffect } from '../../hooks/useDebouncedEffect.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useQueues } from '../../hooks/useQueues.js'\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadHandlers } from '../../providers/UploadHandlers/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { requests } from '../../utilities/api.js'\nimport {\n BackgroundProcessingContext,\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n InitializingContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useDocumentForm,\n} from './context.js'\nimport { errorMessages } from './errorMessages.js'\nimport { fieldReducer } from './fieldReducer.js'\nimport { initContextState } from './initContextState.js'\n\nconst baseClass = 'form'\n\nexport const Form: React.FC<FormProps> = (props) => {\n const { id, collectionSlug, docConfig, docPermissions, getDocPreferences, globalSlug } =\n useDocumentInfo()\n\n const {\n action,\n beforeSubmit,\n children,\n className,\n disabled: disabledFromProps,\n disableSuccessStatus,\n disableValidationOnSubmit,\n // fields: fieldsFromProps = collection?.fields || global?.fields,\n el,\n handleResponse,\n initialState, // fully formed initial field state\n isDocumentForm,\n isInitializing: initializingFromProps,\n onChange,\n onSubmit,\n onSuccess,\n redirect,\n submitted: submittedFromProps,\n uuid,\n waitForAutocomplete,\n } = props\n\n const method = 'method' in props ? props?.method : undefined\n\n const router = useRouter()\n\n const documentForm = useDocumentForm()\n\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n const { refreshCookie, user } = useAuth()\n const operation = useOperation()\n const { queueTask } = useQueues()\n\n const { getFormState } = useServerFunctions()\n const { startRouteTransition } = useRouteTransition()\n const { getUploadHandler } = useUploadHandlers()\n\n const { config } = useConfig()\n\n const [disabled, setDisabled] = useState(disabledFromProps || false)\n const [isMounted, setIsMounted] = useState(false)\n const [modified, setModified] = useState(false)\n\n /**\n * Tracks wether the form state passes validation.\n * For example the state could be submitted but invalid as field errors have been returned.\n */\n const [isValid, setIsValid] = useState(true)\n const [initializing, setInitializing] = useState(initializingFromProps)\n\n const [processing, setProcessing] = useState(false)\n const [backgroundProcessing, setBackgroundProcessing] = useState(false)\n\n const [submitted, setSubmitted] = useState(false)\n const formRef = useRef<HTMLFormElement>(null)\n const contextRef = useRef({} as FormContextType)\n const abortResetFormRef = useRef<AbortController>(null)\n const isFirstRenderRef = useRef(true)\n\n const fieldsReducer = useReducer(fieldReducer, {}, () => initialState)\n\n const [formState, dispatchFields] = fieldsReducer\n\n contextRef.current.fields = formState\n\n const prevFormState = useRef(formState)\n\n const validateForm = useCallback(async () => {\n const validatedFieldState = {}\n let isValid = true\n\n const data = contextRef.current.getData()\n\n const validationPromises = Object.entries(contextRef.current.fields).map(\n async ([path, field]) => {\n const validatedField = field\n const pathSegments = path ? path.split('.') : []\n\n if (field.passesCondition !== false) {\n let validationResult: boolean | string = validatedField.valid\n\n if ('validate' in field && typeof field.validate === 'function') {\n let valueToValidate = field.value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = contextRef.current.getDataByPath(path)\n }\n\n validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n collectionSlug,\n // If there is a parent document form, we can get the data from that form\n blockData: undefined, // Will be expensive to get - not worth to pass to client-side validation, as this can be obtained by the user using `useFormFields()`\n data: documentForm?.getData ? documentForm.getData() : data,\n event: 'submit',\n operation,\n path: pathSegments,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: contextRef.current.getSiblingData(path),\n })\n\n if (typeof validationResult === 'string') {\n validatedField.errorMessage = validationResult\n validatedField.valid = false\n } else {\n validatedField.valid = true\n validatedField.errorMessage = undefined\n }\n }\n\n if (validatedField.valid === false) {\n isValid = false\n }\n }\n\n validatedFieldState[path] = validatedField\n },\n )\n\n await Promise.all(validationPromises)\n\n if (!dequal(contextRef.current.fields, validatedFieldState)) {\n dispatchFields({ type: 'REPLACE_STATE', state: validatedFieldState })\n }\n\n setIsValid(isValid)\n\n return isValid\n }, [collectionSlug, config, dispatchFields, id, operation, t, user, documentForm])\n\n const submit = useCallback(\n async (options: SubmitOptions = {}, e): Promise<void> => {\n const {\n action: actionArg = action,\n method: methodToUse = method,\n overrides: overridesFromArgs = {},\n skipValidation,\n } = options\n\n if (disabled) {\n if (e) {\n e.preventDefault()\n }\n return\n }\n\n // create new toast promise which will resolve manually later\n let errorToast, successToast\n const promise = new Promise((resolve, reject) => {\n successToast = resolve\n errorToast = reject\n })\n\n const hasFormSubmitAction =\n actionArg || typeof action === 'string' || typeof action === 'function'\n\n if (redirect || disableSuccessStatus || !hasFormSubmitAction) {\n // Do not show submitting toast, as the promise toast may never disappear under these conditions.\n // Instead, make successToast() or errorToast() throw toast.success / toast.error\n successToast = (data) => toast.success(data)\n errorToast = (data) => toast.error(data)\n } else {\n toast.promise(promise, {\n error: (data) => {\n return data as string\n },\n loading: t('general:submitting'),\n success: (data) => {\n return data as string\n },\n })\n }\n\n if (e) {\n e.stopPropagation()\n e.preventDefault()\n }\n\n setProcessing(true)\n setDisabled(true)\n\n if (waitForAutocomplete) {\n await wait(100)\n }\n\n // Execute server side validations\n if (Array.isArray(beforeSubmit)) {\n let revalidatedFormState: FormState\n\n const serializableFields = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn) => {\n await priorOnChange\n\n const result = await beforeSubmitFn({\n formState: serializableFields,\n })\n\n revalidatedFormState = result\n }, Promise.resolve())\n\n const isValid = Object.entries(revalidatedFormState).every(\n ([, field]) => field.valid !== false,\n )\n\n setIsValid(isValid)\n\n if (!isValid) {\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return dispatchFields({ type: 'REPLACE_STATE', state: revalidatedFormState })\n }\n }\n\n const isValid =\n skipValidation || disableValidationOnSubmit ? true : await contextRef.current.validateForm()\n\n setIsValid(isValid)\n // If not valid, prevent submission\n if (!isValid) {\n errorToast(t('error:correctInvalidFields'))\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n let overrides = {}\n\n if (typeof overridesFromArgs === 'function') {\n overrides = overridesFromArgs(contextRef.current.fields)\n } else if (typeof overridesFromArgs === 'object') {\n overrides = overridesFromArgs\n }\n\n // If submit handler comes through via props, run that\n if (onSubmit) {\n const serializableFields = deepCopyObjectSimpleWithoutReactComponents(\n contextRef.current.fields,\n )\n\n const data = reduceFieldsToValues(serializableFields, true)\n\n for (const [key, value] of Object.entries(overrides)) {\n data[key] = value\n }\n\n onSubmit(serializableFields, data)\n }\n\n if (!hasFormSubmitAction) {\n // No action provided, so we should return. An example where this happens are lexical link drawers. Upon submitting the drawer, we\n // want to close it without submitting the form. Stuff like validation would be handled by lexical before this, through beforeSubmit\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n return\n }\n\n const formData = await contextRef.current.createFormData(overrides, {\n mergeOverrideData: Boolean(typeof overridesFromArgs !== 'function'),\n })\n\n try {\n let res\n\n if (typeof actionArg === 'string') {\n res = await requests[methodToUse.toLowerCase()](actionArg, {\n body: formData,\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n } else if (typeof action === 'function') {\n res = await action(formData)\n }\n\n setModified(false)\n setDisabled(false)\n\n if (typeof handleResponse === 'function') {\n handleResponse(res, successToast, errorToast)\n return\n }\n\n const contentType = res.headers.get('content-type')\n const isJSON = contentType && contentType.indexOf('application/json') !== -1\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let json: Record<string, any> = {}\n\n if (isJSON) {\n json = await res.json()\n }\n if (res.status < 400) {\n if (typeof onSuccess === 'function') {\n const newFormState = await onSuccess(json)\n\n if (newFormState) {\n dispatchFields({\n type: 'MERGE_SERVER_STATE',\n acceptValues: true,\n prevStateRef: prevFormState,\n serverState: newFormState,\n })\n }\n }\n setSubmitted(false)\n setProcessing(false)\n\n if (redirect) {\n startRouteTransition(() => router.push(redirect))\n } else if (!disableSuccessStatus) {\n successToast(json.message || t('general:submissionSuccessful'))\n }\n } else {\n setProcessing(false)\n setSubmitted(true)\n\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n if (json.message) {\n errorToast(json.message)\n return\n }\n\n if (Array.isArray(json.errors)) {\n const [fieldErrors, nonFieldErrors] = json.errors.reduce(\n ([fieldErrs, nonFieldErrs], err) => {\n const newFieldErrs = []\n const newNonFieldErrs = []\n\n if (err?.message) {\n newNonFieldErrs.push(err)\n }\n\n if (Array.isArray(err?.data?.errors)) {\n err.data?.errors.forEach((dataError) => {\n if (dataError?.path) {\n newFieldErrs.push(dataError)\n } else {\n newNonFieldErrs.push(dataError)\n }\n })\n }\n\n return [\n [...fieldErrs, ...newFieldErrs],\n [...nonFieldErrs, ...newNonFieldErrs],\n ]\n },\n [[], []],\n )\n\n setIsValid(false)\n\n dispatchFields({\n type: 'ADD_SERVER_ERRORS',\n errors: fieldErrors,\n })\n\n nonFieldErrors.forEach((err) => {\n errorToast(<FieldErrorsToast errorMessage={err.message || t('error:unknown')} />)\n })\n\n return\n }\n\n const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown')\n\n errorToast(message)\n }\n } catch (err) {\n console.error('Error submitting form', err) // eslint-disable-line no-console\n setProcessing(false)\n setSubmitted(true)\n setDisabled(false)\n errorToast(err.message)\n }\n },\n [\n beforeSubmit,\n startRouteTransition,\n action,\n disableSuccessStatus,\n disableValidationOnSubmit,\n disabled,\n dispatchFields,\n handleResponse,\n method,\n onSubmit,\n onSuccess,\n redirect,\n router,\n t,\n i18n,\n waitForAutocomplete,\n ],\n )\n\n const getFields = useCallback(() => contextRef.current.fields, [])\n\n const getField = useCallback((path: string) => contextRef.current.fields[path], [])\n\n const getData = useCallback(() => reduceFieldsToValues(contextRef.current.fields, true), [])\n\n const getSiblingData = useCallback(\n (path: string) => getSiblingDataFunc(contextRef.current.fields, path),\n [],\n )\n\n const getDataByPath = useCallback<GetDataByPath>(\n (path: string) => getDataByPathFunc(contextRef.current.fields, path),\n [],\n )\n\n const createFormData = useCallback<CreateFormData>(\n async (overrides, { mergeOverrideData = true }) => {\n let data = reduceFieldsToValues(contextRef.current.fields, true)\n\n let file = data?.file\n\n if (docConfig && 'upload' in docConfig && docConfig.upload && file) {\n delete data.file\n\n const handler = getUploadHandler({ collectionSlug })\n\n if (typeof handler === 'function') {\n let filename = file.name\n const clientUploadContext = await handler({\n file,\n updateFilename: (value) => {\n filename = value\n },\n })\n\n file = JSON.stringify({\n clientUploadContext,\n collectionSlug,\n filename,\n mimeType: file.type,\n size: file.size,\n })\n }\n }\n\n if (mergeOverrideData) {\n data = {\n ...data,\n ...overrides,\n }\n } else {\n data = overrides\n }\n\n const dataToSerialize: Record<string, unknown> = {\n _payload: JSON.stringify(data),\n }\n\n if (docConfig && 'upload' in docConfig && docConfig.upload && file) {\n dataToSerialize.file = file\n }\n\n // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves\n const formData = serialize(dataToSerialize, {\n indices: true,\n nullsAsUndefineds: false,\n })\n\n return formData\n },\n [collectionSlug, docConfig, getUploadHandler],\n )\n\n const reset = useCallback(\n async (data: unknown) => {\n const controller = handleAbortRef(abortResetFormRef)\n\n const docPreferences = await getDocPreferences()\n\n const { state: newState } = await getFormState({\n id,\n collectionSlug,\n data,\n docPermissions,\n docPreferences,\n globalSlug,\n locale,\n operation,\n renderAllFields: true,\n schemaPath: collectionSlug ? collectionSlug : globalSlug,\n signal: controller.signal,\n skipValidation: true,\n })\n\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state: newState })\n\n abortResetFormRef.current = null\n },\n [\n collectionSlug,\n dispatchFields,\n globalSlug,\n id,\n operation,\n getFormState,\n docPermissions,\n getDocPreferences,\n locale,\n ],\n )\n\n const replaceState = useCallback(\n (state: FormState) => {\n contextRef.current = { ...initContextState } as FormContextType\n setModified(false)\n dispatchFields({ type: 'REPLACE_STATE', state })\n },\n [dispatchFields],\n )\n\n const addFieldRow: FormContextType['addFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const newRows: unknown[] = getDataByPath(path) || []\n const rowIndex = rowIndexArg === undefined ? newRows.length : rowIndexArg\n\n // dispatch ADD_ROW adds a blank row to local form state.\n // This performs no form state request, as the debounced onChange effect will do that for us.\n dispatchFields({\n type: 'ADD_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n const moveFieldRow: FormContextType['moveFieldRow'] = useCallback(\n ({ moveFromIndex, moveToIndex, path }) => {\n dispatchFields({\n type: 'MOVE_ROW',\n moveFromIndex,\n moveToIndex,\n path,\n })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const removeFieldRow: FormContextType['removeFieldRow'] = useCallback(\n ({ path, rowIndex }) => {\n dispatchFields({ type: 'REMOVE_ROW', path, rowIndex })\n\n setModified(true)\n },\n [dispatchFields],\n )\n\n const replaceFieldRow: FormContextType['replaceFieldRow'] = useCallback(\n ({ blockType, path, rowIndex: rowIndexArg, subFieldState }) => {\n const currentRows: unknown[] = getDataByPath(path)\n const rowIndex = rowIndexArg === undefined ? currentRows.length : rowIndexArg\n\n dispatchFields({\n type: 'REPLACE_ROW',\n blockType,\n path,\n rowIndex,\n subFieldState,\n })\n\n setModified(true)\n },\n [dispatchFields, getDataByPath],\n )\n\n useEffect(() => {\n const abortOnChange = abortResetFormRef.current\n\n return () => {\n abortAndIgnore(abortOnChange)\n }\n }, [])\n\n useEffect(() => {\n if (initializingFromProps !== undefined) {\n setInitializing(initializingFromProps)\n }\n }, [initializingFromProps])\n\n contextRef.current.submit = submit\n contextRef.current.getFields = getFields\n contextRef.current.getField = getField\n contextRef.current.getData = getData\n contextRef.current.getSiblingData = getSiblingData\n contextRef.current.getDataByPath = getDataByPath\n contextRef.current.validateForm = validateForm\n contextRef.current.createFormData = createFormData\n contextRef.current.setModified = setModified\n contextRef.current.setProcessing = setProcessing\n contextRef.current.setBackgroundProcessing = setBackgroundProcessing\n\n contextRef.current.setSubmitted = setSubmitted\n contextRef.current.setIsValid = setIsValid\n contextRef.current.disabled = disabled\n contextRef.current.setDisabled = setDisabled\n contextRef.current.formRef = formRef\n contextRef.current.reset = reset\n contextRef.current.replaceState = replaceState\n contextRef.current.dispatchFields = dispatchFields\n contextRef.current.addFieldRow = addFieldRow\n contextRef.current.removeFieldRow = removeFieldRow\n contextRef.current.moveFieldRow = moveFieldRow\n contextRef.current.replaceFieldRow = replaceFieldRow\n contextRef.current.uuid = uuid\n contextRef.current.initializing = initializing\n contextRef.current.isValid = isValid\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n useEffect(() => {\n if (typeof disabledFromProps === 'boolean') {\n setDisabled(disabledFromProps)\n }\n }, [disabledFromProps])\n\n useEffect(() => {\n if (typeof submittedFromProps === 'boolean') {\n setSubmitted(submittedFromProps)\n }\n }, [submittedFromProps])\n\n useEffect(() => {\n if (initialState) {\n contextRef.current = { ...initContextState } as FormContextType\n dispatchFields({\n type: 'REPLACE_STATE',\n optimize: false,\n sanitize: true,\n state: initialState,\n })\n }\n }, [initialState, dispatchFields])\n\n useThrottledEffect(\n () => {\n refreshCookie()\n },\n 15000,\n [formState],\n )\n\n useEffect(() => {\n contextRef.current = { ...contextRef.current } // triggers rerender of all components that subscribe to form\n setModified(false)\n }, [locale])\n\n const classes = [className, baseClass].filter(Boolean).join(' ')\n\n const executeOnChange = useEffectEvent((submitted: boolean) => {\n queueTask(async () => {\n if (Array.isArray(onChange)) {\n let serverState: FormState\n\n for (const onChangeFn of onChange) {\n // Edit view default onChange is in packages/ui/src/views/Edit/index.tsx. This onChange usually sends a form state request\n serverState = await onChangeFn({\n formState: deepCopyObjectSimpleWithoutReactComponents(formState),\n submitted,\n })\n }\n\n dispatchFields({\n type: 'MERGE_SERVER_STATE',\n prevStateRef: prevFormState,\n serverState,\n })\n }\n })\n })\n\n useDebouncedEffect(\n () => {\n if ((isFirstRenderRef.current || !dequal(formState, prevFormState.current)) && modified) {\n executeOnChange(submitted)\n }\n\n prevFormState.current = formState\n isFirstRenderRef.current = false\n },\n [modified, submitted, formState],\n 250,\n )\n\n const DocumentFormContextComponent: React.FC<any> = isDocumentForm\n ? DocumentFormContext\n : React.Fragment\n\n const documentFormContextProps = isDocumentForm\n ? {\n value: contextRef.current,\n }\n : {}\n\n const El: 'form' = (el as unknown as 'form') || 'form'\n\n return (\n <El\n action={typeof action === 'function' ? void action : action}\n className={classes}\n method={method}\n noValidate\n onSubmit={(e) => void contextRef.current.submit({}, e)}\n ref={formRef}\n >\n <DocumentFormContextComponent {...documentFormContextProps}>\n <FormContext value={contextRef.current}>\n <FormWatchContext\n value={{\n fields: formState,\n ...contextRef.current,\n }}\n >\n <SubmittedContext value={submitted}>\n <InitializingContext value={!isMounted || (isMounted && initializing)}>\n <ProcessingContext value={processing}>\n <BackgroundProcessingContext value={backgroundProcessing}>\n <ModifiedContext value={modified}>\n {/* eslint-disable-next-line @eslint-react/no-context-provider */}\n <FormFieldsContext.Provider value={fieldsReducer}>\n {children}\n </FormFieldsContext.Provider>\n </ModifiedContext>\n </BackgroundProcessingContext>\n </ProcessingContext>\n </InitializingContext>\n </SubmittedContext>\n </FormWatchContext>\n </FormContext>\n </DocumentFormContextComponent>\n </El>\n )\n}\n\nexport {\n DocumentFormContext,\n FormContext,\n FormFieldsContext,\n FormWatchContext,\n ModifiedContext,\n ProcessingContext,\n SubmittedContext,\n useAllFormFields,\n useDocumentForm,\n useForm,\n useFormFields,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n useWatchForm,\n} from './context.js'\n\nexport { FormProps }\n"],"mappings":"AAAA;;;AACA,SAASA,MAAM,QAAQ,cAAa,CAAC;AACrC,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAE1B,SACEC,0CAA0C,EAC1CC,aAAA,IAAiBC,iBAAiB,EAClCC,cAAA,IAAkBC,kBAAkB,EACpCC,oBAAoB,EACpBC,IAAI,QACC;AACP,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,UAAU,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAC5E,SAASC,KAAK,QAAQ;AAUtB,SAASC,gBAAgB,QAAQ;AACjC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAC1B,SAASC,kBAAkB,QAAQ;AACnC,SAASC,OAAO,QAAQ;AACxB,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,SAAS,QAAQ;AAC1B,SAASC,YAAY,QAAQ;AAC7B,SAASC,kBAAkB,QAAQ;AACnC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,iBAAiB,QAAQ;AAClC,SAASC,cAAc,EAAEC,cAAc,QAAQ;AAC/C,SAASC,QAAQ,QAAQ;AACzB,SACEC,2BAA2B,EAC3BC,mBAAmB,EACnBC,WAAW,EACXC,iBAAiB,EACjBC,gBAAgB,EAChBC,mBAAmB,EACnBC,eAAe,EACfC,iBAAiB,EACjBC,gBAAgB,EAChBC,eAAe,QACV;AACP,SAASC,aAAa,QAAQ;AAC9B,SAASC,YAAY,QAAQ;AAC7B,SAASC,gBAAgB,QAAQ;AAEjC,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,IAAA,GAA6BC,KAAA;EACxC,MAAM;IAAEC,EAAE;IAAEC,cAAc;IAAEC,SAAS;IAAEC,cAAc;IAAEC,iBAAiB;IAAEC;EAAU,CAAE,GACpF/B,eAAA;EAEF,MAAM;IACJgC,MAAM;IACNC,YAAY;IACZC,QAAQ;IACRC,SAAS;IACTC,QAAA,EAAUC,iBAAiB;IAC3BC,oBAAoB;IACpBC,yBAAyB;IACzB;IACAC,EAAE;IACFC,cAAc;IACdC,YAAY;IACZC,cAAc;IACdC,cAAA,EAAgBC,qBAAqB;IACrCC,QAAQ;IACRC,QAAQ;IACRC,SAAS;IACTC,QAAQ;IACRC,SAAA,EAAWC,kBAAkB;IAC7BC,IAAI;IACJC;EAAmB,CACpB,GAAG5B,KAAA;EAEJ,MAAM6B,MAAA,GAAS,YAAY7B,KAAA,GAAQA,KAAA,EAAO6B,MAAA,GAASC,SAAA;EAEnD,MAAMC,MAAA,GAAS/E,SAAA;EAEf,MAAMgF,YAAA,GAAetC,eAAA;EAErB,MAAM;IAAEuC,IAAA,EAAMC;EAAM,CAAE,GAAG1D,SAAA;EACzB,MAAM;IAAE2D,IAAI;IAAEC;EAAC,CAAE,GAAGxD,cAAA;EACpB,MAAM;IAAEyD,aAAa;IAAEC;EAAI,CAAE,GAAGjE,OAAA;EAChC,MAAMkE,SAAA,GAAY9D,YAAA;EAClB,MAAM;IAAE+D;EAAS,CAAE,GAAGrE,SAAA;EAEtB,MAAM;IAAEsE;EAAY,CAAE,GAAG9D,kBAAA;EACzB,MAAM;IAAE+D;EAAoB,CAAE,GAAGhE,kBAAA;EACjC,MAAM;IAAEiE;EAAgB,CAAE,GAAG9D,iBAAA;EAE7B,MAAM;IAAE+D;EAAM,CAAE,GAAGtE,SAAA;EAEnB,MAAM,CAACqC,QAAA,EAAUkC,WAAA,CAAY,GAAG/E,QAAA,CAAS8C,iBAAA,IAAqB;EAC9D,MAAM,CAACkC,SAAA,EAAWC,YAAA,CAAa,GAAGjF,QAAA,CAAS;EAC3C,MAAM,CAACkF,QAAA,EAAUC,WAAA,CAAY,GAAGnF,QAAA,CAAS;EAEzC;;;;EAIA,MAAM,CAACoF,OAAA,EAASC,UAAA,CAAW,GAAGrF,QAAA,CAAS;EACvC,MAAM,CAACsF,YAAA,EAAcC,eAAA,CAAgB,GAAGvF,QAAA,CAASsD,qBAAA;EAEjD,MAAM,CAACkC,UAAA,EAAYC,aAAA,CAAc,GAAGzF,QAAA,CAAS;EAC7C,MAAM,CAAC0F,oBAAA,EAAsBC,uBAAA,CAAwB,GAAG3F,QAAA,CAAS;EAEjE,MAAM,CAAC2D,SAAA,EAAWiC,YAAA,CAAa,GAAG5F,QAAA,CAAS;EAC3C,MAAM6F,OAAA,GAAU9F,MAAA,CAAwB;EACxC,MAAM+F,UAAA,GAAa/F,MAAA,CAAO,CAAC;EAC3B,MAAMgG,iBAAA,GAAoBhG,MAAA,CAAwB;EAClD,MAAMiG,gBAAA,GAAmBjG,MAAA,CAAO;EAEhC,MAAMkG,aAAA,GAAgBnG,UAAA,CAAWgC,YAAA,EAAc,CAAC,GAAG,MAAMqB,YAAA;EAEzD,MAAM,CAAC+C,SAAA,EAAWC,cAAA,CAAe,GAAGF,aAAA;EAEpCH,UAAA,CAAWM,OAAO,CAACC,MAAM,GAAGH,SAAA;EAE5B,MAAMI,aAAA,GAAgBvG,MAAA,CAAOmG,SAAA;EAE7B,MAAMK,YAAA,GAAe3G,WAAA,CAAY;IAC/B,MAAM4G,mBAAA,GAAsB,CAAC;IAC7B,IAAIpB,SAAA,GAAU;IAEd,MAAMqB,IAAA,GAAOX,UAAA,CAAWM,OAAO,CAACM,OAAO;IAEvC,MAAMC,kBAAA,GAAqBC,MAAA,CAAOC,OAAO,CAACf,UAAA,CAAWM,OAAO,CAACC,MAAM,EAAES,GAAG,CACtE,OAAO,CAACC,IAAA,EAAMC,KAAA,CAAM;MAClB,MAAMC,cAAA,GAAiBD,KAAA;MACvB,MAAME,YAAA,GAAeH,IAAA,GAAOA,IAAA,CAAKI,KAAK,CAAC,OAAO,EAAE;MAEhD,IAAIH,KAAA,CAAMI,eAAe,KAAK,OAAO;QACnC,IAAIC,gBAAA,GAAqCJ,cAAA,CAAeK,KAAK;QAE7D,IAAI,cAAcN,KAAA,IAAS,OAAOA,KAAA,CAAMO,QAAQ,KAAK,YAAY;UAC/D,IAAIC,eAAA,GAAkBR,KAAA,CAAMS,KAAK;UAEjC,IAAIT,KAAA,EAAOU,IAAA,IAAQC,KAAA,CAAMC,OAAO,CAACZ,KAAA,CAAMU,IAAI,GAAG;YAC5CF,eAAA,GAAkB1B,UAAA,CAAWM,OAAO,CAAC/G,aAAa,CAAC0H,IAAA;UACrD;UAEAM,gBAAA,GAAmB,MAAML,KAAA,CAAMO,QAAQ,CAACC,eAAA,EAAiB;YACvD,GAAGR,KAAK;YACR7E,EAAA;YACAC,cAAA;YACA;YACAyF,SAAA,EAAW7D,SAAA;YACXyC,IAAA,EAAMvC,YAAA,EAAcwC,OAAA,GAAUxC,YAAA,CAAawC,OAAO,KAAKD,IAAA;YACvDqB,KAAA,EAAO;YACPrD,SAAA;YACAsC,IAAA,EAAMG,YAAA;YACNa,WAAA,EAAa,CAAC;YACdC,GAAA,EAAK;cACHC,OAAA,EAAS;gBACPnD;cACF;cACAR,CAAA;cACAE;YACF;YACA0D,WAAA,EAAapC,UAAA,CAAWM,OAAO,CAAC7G,cAAc,CAACwH,IAAA;UACjD;UAEA,IAAI,OAAOM,gBAAA,KAAqB,UAAU;YACxCJ,cAAA,CAAekB,YAAY,GAAGd,gBAAA;YAC9BJ,cAAA,CAAeK,KAAK,GAAG;UACzB,OAAO;YACLL,cAAA,CAAeK,KAAK,GAAG;YACvBL,cAAA,CAAekB,YAAY,GAAGnE,SAAA;UAChC;QACF;QAEA,IAAIiD,cAAA,CAAeK,KAAK,KAAK,OAAO;UAClClC,SAAA,GAAU;QACZ;MACF;MAEAoB,mBAAmB,CAACO,IAAA,CAAK,GAAGE,cAAA;IAC9B;IAGF,MAAMmB,OAAA,CAAQC,GAAG,CAAC1B,kBAAA;IAElB,IAAI,CAAC1H,MAAA,CAAO6G,UAAA,CAAWM,OAAO,CAACC,MAAM,EAAEG,mBAAA,GAAsB;MAC3DL,cAAA,CAAe;QAAEmC,IAAA,EAAM;QAAiBC,KAAA,EAAO/B;MAAoB;IACrE;IAEAnB,UAAA,CAAWD,SAAA;IAEX,OAAOA,SAAA;EACT,GAAG,CAAChD,cAAA,EAAgB0C,MAAA,EAAQqB,cAAA,EAAgBhE,EAAA,EAAIsC,SAAA,EAAWH,CAAA,EAAGE,IAAA,EAAMN,YAAA,CAAa;EAEjF,MAAMsE,MAAA,GAAS5I,WAAA,CACb,OAAO6I,OAAA,GAAyB,CAAC,CAAC,EAAEC,CAAA;IAClC,MAAM;MACJjG,MAAA,EAAQkG,SAAA,GAAYlG,MAAM;MAC1BsB,MAAA,EAAQ6E,WAAA,GAAc7E,MAAM;MAC5B8E,SAAA,EAAWC,iBAAA,GAAoB,CAAC,CAAC;MACjCC;IAAc,CACf,GAAGN,OAAA;IAEJ,IAAI5F,QAAA,EAAU;MACZ,IAAI6F,CAAA,EAAG;QACLA,CAAA,CAAEM,cAAc;MAClB;MACA;IACF;IAEA;IACA,IAAIC,UAAA,EAAYC,YAAA;IAChB,MAAMC,OAAA,GAAU,IAAIf,OAAA,CAAQ,CAACgB,OAAA,EAASC,MAAA;MACpCH,YAAA,GAAeE,OAAA;MACfH,UAAA,GAAaI,MAAA;IACf;IAEA,MAAMC,mBAAA,GACJX,SAAA,IAAa,OAAOlG,MAAA,KAAW,YAAY,OAAOA,MAAA,KAAW;IAE/D,IAAIiB,QAAA,IAAYX,oBAAA,IAAwB,CAACuG,mBAAA,EAAqB;MAC5D;MACA;MACAJ,YAAA,GAAgBzC,MAAA,IAASxG,KAAA,CAAMsJ,OAAO,CAAC9C,MAAA;MACvCwC,UAAA,GAAcxC,MAAA,IAASxG,KAAA,CAAMuJ,KAAK,CAAC/C,MAAA;IACrC,OAAO;MACLxG,KAAA,CAAMkJ,OAAO,CAACA,OAAA,EAAS;QACrBK,KAAA,EAAQ/C,MAAA;UACN,OAAOA,MAAA;QACT;QACAgD,OAAA,EAASnF,CAAA,CAAE;QACXiF,OAAA,EAAU9C,MAAA;UACR,OAAOA,MAAA;QACT;MACF;IACF;IAEA,IAAIiC,CAAA,EAAG;MACLA,CAAA,CAAEgB,eAAe;MACjBhB,CAAA,CAAEM,cAAc;IAClB;IAEAvD,aAAA,CAAc;IACdV,WAAA,CAAY;IAEZ,IAAIjB,mBAAA,EAAqB;MACvB,MAAMpE,IAAA,CAAK;IACb;IAEA;IACA,IAAIiI,KAAA,CAAMC,OAAO,CAAClF,YAAA,GAAe;MAC/B,IAAIiH,oBAAA;MAEJ,MAAMC,kBAAA,GAAqBxK,0CAAA,CACzB0G,UAAA,CAAWM,OAAO,CAACC,MAAM;MAG3B,MAAM3D,YAAA,CAAamH,MAAM,CAAC,OAAOC,aAAA,EAAeC,cAAA;QAC9C,MAAMD,aAAA;QAEN,MAAME,MAAA,GAAS,MAAMD,cAAA,CAAe;UAClC7D,SAAA,EAAW0D;QACb;QAEAD,oBAAA,GAAuBK,MAAA;MACzB,GAAG5B,OAAA,CAAQgB,OAAO;MAElB,MAAMhE,SAAA,GAAUwB,MAAA,CAAOC,OAAO,CAAC8C,oBAAA,EAAsBM,KAAK,CACxD,CAAC,GAAGjD,OAAA,CAAM,KAAKA,OAAA,CAAMM,KAAK,KAAK;MAGjCjC,UAAA,CAAWD,SAAA;MAEX,IAAI,CAACA,SAAA,EAAS;QACZK,aAAA,CAAc;QACdG,YAAA,CAAa;QACbb,WAAA,CAAY;QACZ,OAAOoB,cAAA,CAAe;UAAEmC,IAAA,EAAM;UAAiBC,KAAA,EAAOoB;QAAqB;MAC7E;IACF;IAEA,MAAMvE,SAAA,GACJ2D,cAAA,IAAkB/F,yBAAA,GAA4B,OAAO,MAAM8C,UAAA,CAAWM,OAAO,CAACG,YAAY;IAE5FlB,UAAA,CAAWD,SAAA;IACX;IACA,IAAI,CAACA,SAAA,EAAS;MACZ6D,UAAA,CAAW3E,CAAA,CAAE;MACbmB,aAAA,CAAc;MACdG,YAAA,CAAa;MACbb,WAAA,CAAY;MACZ;IACF;IAEA,IAAI8D,SAAA,GAAY,CAAC;IAEjB,IAAI,OAAOC,iBAAA,KAAsB,YAAY;MAC3CD,SAAA,GAAYC,iBAAA,CAAkBhD,UAAA,CAAWM,OAAO,CAACC,MAAM;IACzD,OAAO,IAAI,OAAOyC,iBAAA,KAAsB,UAAU;MAChDD,SAAA,GAAYC,iBAAA;IACd;IAEA;IACA,IAAItF,QAAA,EAAU;MACZ,MAAMoG,oBAAA,GAAqBxK,0CAAA,CACzB0G,UAAA,CAAWM,OAAO,CAACC,MAAM;MAG3B,MAAMI,MAAA,GAAOhH,oBAAA,CAAqBmK,oBAAA,EAAoB;MAEtD,KAAK,MAAM,CAACM,GAAA,EAAKzC,KAAA,CAAM,IAAIb,MAAA,CAAOC,OAAO,CAACgC,SAAA,GAAY;QACpDpC,MAAI,CAACyD,GAAA,CAAI,GAAGzC,KAAA;MACd;MAEAjE,QAAA,CAASoG,oBAAA,EAAoBnD,MAAA;IAC/B;IAEA,IAAI,CAAC6C,mBAAA,EAAqB;MACxB;MACA;MACA7D,aAAA,CAAc;MACdG,YAAA,CAAa;MACbb,WAAA,CAAY;MACZ;IACF;IAEA,MAAMoF,QAAA,GAAW,MAAMrE,UAAA,CAAWM,OAAO,CAACgE,cAAc,CAACvB,SAAA,EAAW;MAClEwB,iBAAA,EAAmBC,OAAA,CAAQ,OAAOxB,iBAAA,KAAsB;IAC1D;IAEA,IAAI;MACF,IAAIyB,GAAA;MAEJ,IAAI,OAAO5B,SAAA,KAAc,UAAU;QACjC4B,GAAA,GAAM,MAAMrJ,QAAQ,CAAC0H,WAAA,CAAY4B,WAAW,GAAG,CAAC7B,SAAA,EAAW;UACzD8B,IAAA,EAAMN,QAAA;UACNO,OAAA,EAAS;YACP,mBAAmBrG,IAAA,CAAKsG;UAC1B;QACF;MACF,OAAO,IAAI,OAAOlI,MAAA,KAAW,YAAY;QACvC8H,GAAA,GAAM,MAAM9H,MAAA,CAAO0H,QAAA;MACrB;MAEAhF,WAAA,CAAY;MACZJ,WAAA,CAAY;MAEZ,IAAI,OAAO7B,cAAA,KAAmB,YAAY;QACxCA,cAAA,CAAeqH,GAAA,EAAKrB,YAAA,EAAcD,UAAA;QAClC;MACF;MAEA,MAAM2B,WAAA,GAAcL,GAAA,CAAIG,OAAO,CAACG,GAAG,CAAC;MACpC,MAAMC,MAAA,GAASF,WAAA,IAAeA,WAAA,CAAYG,OAAO,CAAC,wBAAwB,CAAC;MAE3E;MACA,IAAIC,IAAA,GAA4B,CAAC;MAEjC,IAAIF,MAAA,EAAQ;QACVE,IAAA,GAAO,MAAMT,GAAA,CAAIS,IAAI;MACvB;MACA,IAAIT,GAAA,CAAIU,MAAM,GAAG,KAAK;QACpB,IAAI,OAAOxH,SAAA,KAAc,YAAY;UACnC,MAAMyH,YAAA,GAAe,MAAMzH,SAAA,CAAUuH,IAAA;UAErC,IAAIE,YAAA,EAAc;YAChB/E,cAAA,CAAe;cACbmC,IAAA,EAAM;cACN6C,YAAA,EAAc;cACdC,YAAA,EAAc9E,aAAA;cACd+E,WAAA,EAAaH;YACf;UACF;QACF;QACAtF,YAAA,CAAa;QACbH,aAAA,CAAc;QAEd,IAAI/B,QAAA,EAAU;UACZkB,oBAAA,CAAqB,MAAMX,MAAA,CAAOqH,IAAI,CAAC5H,QAAA;QACzC,OAAO,IAAI,CAACX,oBAAA,EAAsB;UAChCmG,YAAA,CAAa8B,IAAA,CAAKO,OAAO,IAAIjH,CAAA,CAAE;QACjC;MACF,OAAO;QACLmB,aAAA,CAAc;QACdG,YAAA,CAAa;QAEbE,UAAA,CAAWM,OAAO,GAAG;UAAE,GAAGN,UAAA,CAAWM;QAAQ,EAAE;QAAA;QAC/C,IAAI4E,IAAA,CAAKO,OAAO,EAAE;UAChBtC,UAAA,CAAW+B,IAAA,CAAKO,OAAO;UACvB;QACF;QAEA,IAAI5D,KAAA,CAAMC,OAAO,CAACoD,IAAA,CAAKQ,MAAM,GAAG;UAC9B,MAAM,CAACC,WAAA,EAAaC,cAAA,CAAe,GAAGV,IAAA,CAAKQ,MAAM,CAAC3B,MAAM,CACtD,CAAC,CAAC8B,SAAA,EAAWC,YAAA,CAAa,EAAEC,KAAA;YAC1B,MAAMC,YAAA,GAAe,EAAE;YACvB,MAAMC,eAAA,GAAkB,EAAE;YAE1B,IAAIF,KAAA,EAAKN,OAAA,EAAS;cAChBQ,eAAA,CAAgBT,IAAI,CAACO,KAAA;YACvB;YAEA,IAAIlE,KAAA,CAAMC,OAAO,CAACiE,KAAA,EAAKpF,IAAA,EAAM+E,MAAA,GAAS;cACpCK,KAAA,CAAIpF,IAAI,EAAE+E,MAAA,CAAOQ,OAAA,CAASC,SAAA;gBACxB,IAAIA,SAAA,EAAWlF,IAAA,EAAM;kBACnB+E,YAAA,CAAaR,IAAI,CAACW,SAAA;gBACpB,OAAO;kBACLF,eAAA,CAAgBT,IAAI,CAACW,SAAA;gBACvB;cACF;YACF;YAEA,OAAO,CACL,C,GAAIN,SAAA,E,GAAcG,YAAA,CAAa,EAC/B,C,GAAIF,YAAA,E,GAAiBG,eAAA,CAAgB,CACtC;UACH,GACA,CAAC,EAAE,EAAE,EAAE,CAAC;UAGV1G,UAAA,CAAW;UAEXc,cAAA,CAAe;YACbmC,IAAA,EAAM;YACNkD,MAAA,EAAQC;UACV;UAEAC,cAAA,CAAeM,OAAO,CAAEH,KAAA;YACtB5C,UAAA,cAAWiD,IAAA,CAAChM,gBAAA;cAAiBiI,YAAA,EAAc0D,KAAA,CAAIN,OAAO,IAAIjH,CAAA,CAAE;;UAC9D;UAEA;QACF;QAEA,MAAMiH,OAAA,GAAU1J,aAAA,GAAgB0I,GAAA,CAAIU,MAAM,CAAC,IAAIV,GAAA,EAAK4B,UAAA,IAAc7H,CAAA,CAAE;QAEpE2E,UAAA,CAAWsC,OAAA;MACb;IACF,EAAE,OAAOM,GAAA,EAAK;MACZO,OAAA,CAAQ5C,KAAK,CAAC,yBAAyBqC,GAAA,EAAK;MAAA;MAC5CpG,aAAA,CAAc;MACdG,YAAA,CAAa;MACbb,WAAA,CAAY;MACZkE,UAAA,CAAW4C,GAAA,CAAIN,OAAO;IACxB;EACF,GACA,CACE7I,YAAA,EACAkC,oBAAA,EACAnC,MAAA,EACAM,oBAAA,EACAC,yBAAA,EACAH,QAAA,EACAsD,cAAA,EACAjD,cAAA,EACAa,MAAA,EACAP,QAAA,EACAC,SAAA,EACAC,QAAA,EACAO,MAAA,EACAK,CAAA,EACAD,IAAA,EACAP,mBAAA,CACD;EAGH,MAAMuI,SAAA,GAAYzM,WAAA,CAAY,MAAMkG,UAAA,CAAWM,OAAO,CAACC,MAAM,EAAE,EAAE;EAEjE,MAAMiG,QAAA,GAAW1M,WAAA,CAAamH,MAAA,IAAiBjB,UAAA,CAAWM,OAAO,CAACC,MAAM,CAACU,MAAA,CAAK,EAAE,EAAE;EAElF,MAAML,OAAA,GAAU9G,WAAA,CAAY,MAAMH,oBAAA,CAAqBqG,UAAA,CAAWM,OAAO,CAACC,MAAM,EAAE,OAAO,EAAE;EAE3F,MAAM9G,cAAA,GAAiBK,WAAA,CACpBmH,MAAA,IAAiBvH,kBAAA,CAAmBsG,UAAA,CAAWM,OAAO,CAACC,MAAM,EAAEU,MAAA,GAChE,EAAE;EAGJ,MAAM1H,aAAA,GAAgBO,WAAA,CACnBmH,MAAA,IAAiBzH,iBAAA,CAAkBwG,UAAA,CAAWM,OAAO,CAACC,MAAM,EAAEU,MAAA,GAC/D,EAAE;EAGJ,MAAMqD,cAAA,GAAiBxK,WAAA,CACrB,OAAOiJ,WAAA,EAAW;IAAEwB,iBAAA,GAAoB;EAAI,CAAE;IAC5C,IAAI5D,MAAA,GAAOhH,oBAAA,CAAqBqG,UAAA,CAAWM,OAAO,CAACC,MAAM,EAAE;IAE3D,IAAIkG,IAAA,GAAO9F,MAAA,EAAM8F,IAAA;IAEjB,IAAIlK,SAAA,IAAa,YAAYA,SAAA,IAAaA,SAAA,CAAUmK,MAAM,IAAID,IAAA,EAAM;MAClE,OAAO9F,MAAA,CAAK8F,IAAI;MAEhB,MAAME,OAAA,GAAU5H,gBAAA,CAAiB;QAAEzC;MAAe;MAElD,IAAI,OAAOqK,OAAA,KAAY,YAAY;QACjC,IAAIC,QAAA,GAAWH,IAAA,CAAKI,IAAI;QACxB,MAAMC,mBAAA,GAAsB,MAAMH,OAAA,CAAQ;UACxCF,IAAA;UACAM,cAAA,EAAiBpF,OAAA;YACfiF,QAAA,GAAWjF,OAAA;UACb;QACF;QAEA8E,IAAA,GAAOO,IAAA,CAAKC,SAAS,CAAC;UACpBH,mBAAA;UACAxK,cAAA;UACAsK,QAAA;UACAM,QAAA,EAAUT,IAAA,CAAKjE,IAAI;UACnB2E,IAAA,EAAMV,IAAA,CAAKU;QACb;MACF;IACF;IAEA,IAAI5C,iBAAA,EAAmB;MACrB5D,MAAA,GAAO;QACL,GAAGA,MAAI;QACP,GAAGoC;MACL;IACF,OAAO;MACLpC,MAAA,GAAOoC,WAAA;IACT;IAEA,MAAMqE,eAAA,GAA2C;MAC/CC,QAAA,EAAUL,IAAA,CAAKC,SAAS,CAACtG,MAAA;IAC3B;IAEA,IAAIpE,SAAA,IAAa,YAAYA,SAAA,IAAaA,SAAA,CAAUmK,MAAM,IAAID,IAAA,EAAM;MAClEW,eAAA,CAAgBX,IAAI,GAAGA,IAAA;IACzB;IAEA;IACA,MAAMpC,UAAA,GAAWhL,SAAA,CAAU+N,eAAA,EAAiB;MAC1CE,OAAA,EAAS;MACTC,iBAAA,EAAmB;IACrB;IAEA,OAAOlD,UAAA;EACT,GACA,CAAC/H,cAAA,EAAgBC,SAAA,EAAWwC,gBAAA,CAAiB;EAG/C,MAAMyI,KAAA,GAAQ1N,WAAA,CACZ,MAAO6G,MAAA;IACL,MAAM8G,UAAA,GAAatM,cAAA,CAAe8E,iBAAA;IAElC,MAAMyH,cAAA,GAAiB,MAAMjL,iBAAA;IAE7B,MAAM;MAAEgG,KAAA,EAAOkF;IAAQ,CAAE,GAAG,MAAM9I,YAAA,CAAa;MAC7CxC,EAAA;MACAC,cAAA;MACAqE,IAAA,EAAAA,MAAA;MACAnE,cAAA;MACAkL,cAAA;MACAhL,UAAA;MACA4B,MAAA;MACAK,SAAA;MACAiJ,eAAA,EAAiB;MACjBC,UAAA,EAAYvL,cAAA,GAAiBA,cAAA,GAAiBI,UAAA;MAC9CoL,MAAA,EAAQL,UAAA,CAAWK,MAAM;MACzB7E,cAAA,EAAgB;IAClB;IAEAjD,UAAA,CAAWM,OAAO,GAAG;MAAE,GAAGrE;IAAiB;IAC3CoD,WAAA,CAAY;IACZgB,cAAA,CAAe;MAAEmC,IAAA,EAAM;MAAiBC,KAAA,EAAOkF;IAAS;IAExD1H,iBAAA,CAAkBK,OAAO,GAAG;EAC9B,GACA,CACEhE,cAAA,EACA+D,cAAA,EACA3D,UAAA,EACAL,EAAA,EACAsC,SAAA,EACAE,YAAA,EACArC,cAAA,EACAC,iBAAA,EACA6B,MAAA,CACD;EAGH,MAAMyJ,YAAA,GAAejO,WAAA,CAClB2I,KAAA;IACCzC,UAAA,CAAWM,OAAO,GAAG;MAAE,GAAGrE;IAAiB;IAC3CoD,WAAA,CAAY;IACZgB,cAAA,CAAe;MAAEmC,IAAA,EAAM;MAAiBC;IAAM;EAChD,GACA,CAACpC,cAAA,CAAe;EAGlB,MAAM2H,WAAA,GAA8ClO,WAAA,CAClD,CAAC;IAAEmO,SAAS;IAAEhH,IAAI,EAAJA,MAAI;IAAEiH,QAAA,EAAUC,WAAW;IAAEC;EAAa,CAAE;IACxD,MAAMC,OAAA,GAAqB9O,aAAA,CAAc0H,MAAA,KAAS,EAAE;IACpD,MAAMiH,QAAA,GAAWC,WAAA,KAAgBjK,SAAA,GAAYmK,OAAA,CAAQC,MAAM,GAAGH,WAAA;IAE9D;IACA;IACA9H,cAAA,CAAe;MACbmC,IAAA,EAAM;MACNyF,SAAA;MACAhH,IAAA,EAAAA,MAAA;MACAiH,QAAA;MACAE;IACF;IAEA/I,WAAA,CAAY;EACd,GACA,CAACgB,cAAA,EAAgB9G,aAAA,CAAc;EAGjC,MAAMgP,YAAA,GAAgDzO,WAAA,CACpD,CAAC;IAAE0O,aAAa;IAAEC,WAAW;IAAExH,IAAI,EAAJA;EAAI,CAAE;IACnCZ,cAAA,CAAe;MACbmC,IAAA,EAAM;MACNgG,aAAA;MACAC,WAAA;MACAxH,IAAA,EAAAA;IACF;IAEA5B,WAAA,CAAY;EACd,GACA,CAACgB,cAAA,CAAe;EAGlB,MAAMqI,cAAA,GAAoD5O,WAAA,CACxD,CAAC;IAAEmH,IAAI,EAAJA,MAAI;IAAEiH,QAAQ,EAARA;EAAQ,CAAE;IACjB7H,cAAA,CAAe;MAAEmC,IAAA,EAAM;MAAcvB,IAAA,EAAAA,MAAA;MAAMiH,QAAA,EAAAA;IAAS;IAEpD7I,WAAA,CAAY;EACd,GACA,CAACgB,cAAA,CAAe;EAGlB,MAAMsI,eAAA,GAAsD7O,WAAA,CAC1D,CAAC;IAAEmO,SAAS,EAATA,WAAS;IAAEhH,IAAI,EAAJA,MAAI;IAAEiH,QAAA,EAAUC,aAAW;IAAEC,aAAa,EAAbA;EAAa,CAAE;IACxD,MAAMQ,WAAA,GAAyBrP,aAAA,CAAc0H,MAAA;IAC7C,MAAMiH,UAAA,GAAWC,aAAA,KAAgBjK,SAAA,GAAY0K,WAAA,CAAYN,MAAM,GAAGH,aAAA;IAElE9H,cAAA,CAAe;MACbmC,IAAA,EAAM;MACNyF,SAAA,EAAAA,WAAA;MACAhH,IAAA,EAAAA,MAAA;MACAiH,QAAA,EAAAA,UAAA;MACAE,aAAA,EAAAA;IACF;IAEA/I,WAAA,CAAY;EACd,GACA,CAACgB,cAAA,EAAgB9G,aAAA,CAAc;EAGjCQ,SAAA,CAAU;IACR,MAAM8O,aAAA,GAAgB5I,iBAAA,CAAkBK,OAAO;IAE/C,OAAO;MACLpF,cAAA,CAAe2N,aAAA;IACjB;EACF,GAAG,EAAE;EAEL9O,SAAA,CAAU;IACR,IAAIyD,qBAAA,KAA0BU,SAAA,EAAW;MACvCuB,eAAA,CAAgBjC,qBAAA;IAClB;EACF,GAAG,CAACA,qBAAA,CAAsB;EAE1BwC,UAAA,CAAWM,OAAO,CAACoC,MAAM,GAAGA,MAAA;EAC5B1C,UAAA,CAAWM,OAAO,CAACiG,SAAS,GAAGA,SAAA;EAC/BvG,UAAA,CAAWM,OAAO,CAACkG,QAAQ,GAAGA,QAAA;EAC9BxG,UAAA,CAAWM,OAAO,CAACM,OAAO,GAAGA,OAAA;EAC7BZ,UAAA,CAAWM,OAAO,CAAC7G,cAAc,GAAGA,cAAA;EACpCuG,UAAA,CAAWM,OAAO,CAAC/G,aAAa,GAAGA,aAAA;EACnCyG,UAAA,CAAWM,OAAO,CAACG,YAAY,GAAGA,YAAA;EAClCT,UAAA,CAAWM,OAAO,CAACgE,cAAc,GAAGA,cAAA;EACpCtE,UAAA,CAAWM,OAAO,CAACjB,WAAW,GAAGA,WAAA;EACjCW,UAAA,CAAWM,OAAO,CAACX,aAAa,GAAGA,aAAA;EACnCK,UAAA,CAAWM,OAAO,CAACT,uBAAuB,GAAGA,uBAAA;EAE7CG,UAAA,CAAWM,OAAO,CAACR,YAAY,GAAGA,YAAA;EAClCE,UAAA,CAAWM,OAAO,CAACf,UAAU,GAAGA,UAAA;EAChCS,UAAA,CAAWM,OAAO,CAACvD,QAAQ,GAAGA,QAAA;EAC9BiD,UAAA,CAAWM,OAAO,CAACrB,WAAW,GAAGA,WAAA;EACjCe,UAAA,CAAWM,OAAO,CAACP,OAAO,GAAGA,OAAA;EAC7BC,UAAA,CAAWM,OAAO,CAACkH,KAAK,GAAGA,KAAA;EAC3BxH,UAAA,CAAWM,OAAO,CAACyH,YAAY,GAAGA,YAAA;EAClC/H,UAAA,CAAWM,OAAO,CAACD,cAAc,GAAGA,cAAA;EACpCL,UAAA,CAAWM,OAAO,CAAC0H,WAAW,GAAGA,WAAA;EACjChI,UAAA,CAAWM,OAAO,CAACoI,cAAc,GAAGA,cAAA;EACpC1I,UAAA,CAAWM,OAAO,CAACiI,YAAY,GAAGA,YAAA;EAClCvI,UAAA,CAAWM,OAAO,CAACqI,eAAe,GAAGA,eAAA;EACrC3I,UAAA,CAAWM,OAAO,CAACvC,IAAI,GAAGA,IAAA;EAC1BiC,UAAA,CAAWM,OAAO,CAACd,YAAY,GAAGA,YAAA;EAClCQ,UAAA,CAAWM,OAAO,CAAChB,OAAO,GAAGA,OAAA;EAE7BvF,SAAA,CAAU;IACRoF,YAAA,CAAa;EACf,GAAG,EAAE;EAELpF,SAAA,CAAU;IACR,IAAI,OAAOiD,iBAAA,KAAsB,WAAW;MAC1CiC,WAAA,CAAYjC,iBAAA;IACd;EACF,GAAG,CAACA,iBAAA,CAAkB;EAEtBjD,SAAA,CAAU;IACR,IAAI,OAAO+D,kBAAA,KAAuB,WAAW;MAC3CgC,YAAA,CAAahC,kBAAA;IACf;EACF,GAAG,CAACA,kBAAA,CAAmB;EAEvB/D,SAAA,CAAU;IACR,IAAIsD,YAAA,EAAc;MAChB2C,UAAA,CAAWM,OAAO,GAAG;QAAE,GAAGrE;MAAiB;MAC3CoE,cAAA,CAAe;QACbmC,IAAA,EAAM;QACNsG,QAAA,EAAU;QACVC,QAAA,EAAU;QACVtG,KAAA,EAAOpF;MACT;IACF;EACF,GAAG,CAACA,YAAA,EAAcgD,cAAA,CAAe;EAEjC7F,kBAAA,CACE;IACEiE,aAAA;EACF,GACA,OACA,CAAC2B,SAAA,CAAU;EAGbrG,SAAA,CAAU;IACRiG,UAAA,CAAWM,OAAO,GAAG;MAAE,GAAGN,UAAA,CAAWM;IAAQ,EAAE;IAAA;IAC/CjB,WAAA,CAAY;EACd,GAAG,CAACf,MAAA,CAAO;EAEX,MAAM0K,OAAA,GAAU,CAAClM,SAAA,EAAWZ,SAAA,CAAU,CAAC+M,MAAM,CAACzE,OAAA,EAAS0E,IAAI,CAAC;EAE5D,MAAMC,eAAA,GAAkB7O,cAAA,CAAgBuD,WAAA;IACtCe,SAAA,CAAU;MACR,IAAIiD,KAAA,CAAMC,OAAO,CAACrE,QAAA,GAAW;QAC3B,IAAI8H,WAAA;QAEJ,KAAK,MAAM6D,UAAA,IAAc3L,QAAA,EAAU;UACjC;UACA8H,WAAA,GAAc,MAAM6D,UAAA,CAAW;YAC7BhJ,SAAA,EAAW9G,0CAAA,CAA2C8G,SAAA;YACtDvC,SAAA,EAAAA;UACF;QACF;QAEAwC,cAAA,CAAe;UACbmC,IAAA,EAAM;UACN8C,YAAA,EAAc9E,aAAA;UACd+E;QACF;MACF;IACF;EACF;EAEAlL,kBAAA,CACE;IACE,IAAI,CAAC6F,gBAAA,CAAiBI,OAAO,IAAI,CAACnH,MAAA,CAAOiH,SAAA,EAAWI,aAAA,CAAcF,OAAO,MAAMlB,QAAA,EAAU;MACvF+J,eAAA,CAAgBtL,SAAA;IAClB;IAEA2C,aAAA,CAAcF,OAAO,GAAGF,SAAA;IACxBF,gBAAA,CAAiBI,OAAO,GAAG;EAC7B,GACA,CAAClB,QAAA,EAAUvB,SAAA,EAAWuC,SAAA,CAAU,EAChC;EAGF,MAAMiJ,4BAAA,GAA8C/L,cAAA,GAChDhC,mBAAA,GACAzB,KAAA,CAAMyP,QAAQ;EAElB,MAAMC,wBAAA,GAA2BjM,cAAA,GAC7B;IACEqE,KAAA,EAAO3B,UAAA,CAAWM;EACpB,IACA,CAAC;EAEL,MAAMkJ,EAAA,GAAarM,EAAC,IAA4B;EAEhD,oBACEiJ,IAAA,CAACoD,EAAA;IACC7M,MAAA,EAAQ,OAAOA,MAAA,KAAW,aAAa,KAAKA,MAAA,GAASA,MAAA;IACrDG,SAAA,EAAWkM,OAAA;IACX/K,MAAA,EAAQA,MAAA;IACRwL,UAAU;IACV/L,QAAA,EAAWkF,GAAA,IAAM,KAAK5C,UAAA,CAAWM,OAAO,CAACoC,MAAM,CAAC,CAAC,GAAGE,GAAA;IACpD8G,GAAA,EAAK3J,OAAA;cAEL,aAAAqG,IAAA,CAACiD,4BAAA;MAA8B,GAAGE,wBAAwB;gBACxD,aAAAnD,IAAA,CAAC7K,WAAA;QAAYoG,KAAA,EAAO3B,UAAA,CAAWM,OAAO;kBACpC,aAAA8F,IAAA,CAAC3K,gBAAA;UACCkG,KAAA,EAAO;YACLpB,MAAA,EAAQH,SAAA;YACR,GAAGJ,UAAA,CAAWM;UAChB;oBAEA,aAAA8F,IAAA,CAACvK,gBAAA;YAAiB8F,KAAA,EAAO9D,SAAA;sBACvB,aAAAuI,IAAA,CAAC1K,mBAAA;cAAoBiG,KAAA,EAAO,CAACzC,SAAA,IAAcA,SAAA,IAAaM,YAAA;wBACtD,aAAA4G,IAAA,CAACxK,iBAAA;gBAAkB+F,KAAA,EAAOjC,UAAA;0BACxB,aAAA0G,IAAA,CAAC/K,2BAAA;kBAA4BsG,KAAA,EAAO/B,oBAAA;4BAClC,aAAAwG,IAAA,CAACzK,eAAA;oBAAgBgG,KAAA,EAAOvC,QAAA;8BAEtB,aAAAgH,IAAA,CAAC5K,iBAAA,CAAkBmO,QAAQ;sBAAChI,KAAA,EAAOxB,aAAA;gCAChCtD;;;;;;;;;;;AAYzB;AAEA,SACEvB,mBAAmB,EACnBC,WAAW,EACXC,iBAAiB,EACjBC,gBAAgB,EAChBE,eAAe,EACfC,iBAAiB,EACjBC,gBAAgB,EAChB+N,gBAAgB,EAChB9N,eAAe,EACf+N,OAAO,EACPC,aAAa,EACbC,eAAe,EACfC,iBAAiB,EACjBC,gBAAgB,EAChBC,YAAY,QACP","ignoreList":[]}
@@ -40,7 +40,7 @@ export const mergeServerFormState = ({
40
40
  newState[path].rows = [...(currentState[path]?.rows || [])] // shallow copy to avoid mutating the original array
41
41
  ;
42
42
  incomingField.rows.forEach(row => {
43
- const indexInCurrentState = currentState[path].rows.findIndex(existingRow => existingRow.id === row.id);
43
+ const indexInCurrentState = currentState[path].rows?.findIndex(existingRow => existingRow.id === row.id);
44
44
  if (indexInCurrentState > -1) {
45
45
  newState[path].rows[indexInCurrentState] = {
46
46
  ...currentState[path].rows[indexInCurrentState],
@@ -1 +1 @@
1
- {"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeServerFormState","acceptValues","currentState","incomingState","newState","path","incomingField","Object","entries","addedByServer","value","initialValue","Array","isArray","rows","forEach","row","indexInCurrentState","findIndex","existingRow","id","valid","passesCondition"],"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\n\ntype Args = {\n acceptValues?: boolean\n currentState?: FormState\n incomingState: FormState\n}\n\n/**\n * This function receives form state from the server and intelligently merges it into the client state.\n * The server contains extra properties that the client may not have, e.g. custom components and error states.\n * We typically do not want to merge properties that rely on user input, however, such as values, unless explicitly requested.\n * Doing this would cause the client to lose any local changes to those fields.\n *\n * This function will also a few defaults, as well as clean up the server response in preparation for the client.\n * e.g. it will set `valid` and `passesCondition` to true if undefined, and remove `addedByServer` from the response.\n */\nexport const mergeServerFormState = ({\n acceptValues,\n currentState = {},\n incomingState,\n}: Args): FormState => {\n const newState = { ...currentState }\n\n for (const [path, incomingField] of Object.entries(incomingState || {})) {\n if (!(path in currentState) && !incomingField.addedByServer) {\n continue\n }\n\n if (!acceptValues && !incomingField.addedByServer) {\n delete incomingField.value\n delete incomingField.initialValue\n }\n\n newState[path] = {\n ...currentState[path],\n ...incomingField,\n }\n\n /**\n * Intelligently merge the rows array to ensure changes to local state are not lost while the request was pending\n * For example, the server response could come back with a row which has been deleted on the client\n * Loop over the incoming rows, if it exists in client side form state, merge in any new properties from the server\n * Note: read `currentState` and not `newState` here, as the `rows` property have already been merged above\n */\n if (Array.isArray(incomingField.rows) && path in currentState) {\n newState[path].rows = [...(currentState[path]?.rows || [])] // shallow copy to avoid mutating the original array\n\n incomingField.rows.forEach((row) => {\n const indexInCurrentState = currentState[path].rows.findIndex(\n (existingRow) => existingRow.id === row.id,\n )\n\n if (indexInCurrentState > -1) {\n newState[path].rows[indexInCurrentState] = {\n ...currentState[path].rows[indexInCurrentState],\n ...row,\n }\n }\n })\n }\n\n // If `valid` is `undefined`, mark it as `true`\n if (incomingField.valid !== false) {\n newState[path].valid = true\n }\n\n // If `passesCondition` is `undefined`, mark it as `true`\n if (incomingField.passesCondition !== false) {\n newState[path].passesCondition = true\n }\n\n // Strip away the `addedByServer` property from the client\n // This will prevent it from being passed back to the server\n delete newState[path].addedByServer\n }\n\n // Return the original object reference if the state is unchanged\n // This will avoid unnecessary re-renders and dependency updates\n return dequal(newState, currentState) ? currentState : newState\n}\n"],"mappings":"AAAA;;AAGA,SAASA,MAAM,QAAQ,cAAa,CAAC;AAQrC;;;;;;;;;AASA,OAAO,MAAMC,oBAAA,GAAuBA,CAAC;EACnCC,YAAY;EACZC,YAAA,GAAe,CAAC,CAAC;EACjBC;AAAa,CACR;EACL,MAAMC,QAAA,GAAW;IAAE,GAAGF;EAAa;EAEnC,KAAK,MAAM,CAACG,IAAA,EAAMC,aAAA,CAAc,IAAIC,MAAA,CAAOC,OAAO,CAACL,aAAA,IAAiB,CAAC,IAAI;IACvE,IAAI,EAAEE,IAAA,IAAQH,YAAW,KAAM,CAACI,aAAA,CAAcG,aAAa,EAAE;MAC3D;IACF;IAEA,IAAI,CAACR,YAAA,IAAgB,CAACK,aAAA,CAAcG,aAAa,EAAE;MACjD,OAAOH,aAAA,CAAcI,KAAK;MAC1B,OAAOJ,aAAA,CAAcK,YAAY;IACnC;IAEAP,QAAQ,CAACC,IAAA,CAAK,GAAG;MACf,GAAGH,YAAY,CAACG,IAAA,CAAK;MACrB,GAAGC;IACL;IAEA;;;;;;IAMA,IAAIM,KAAA,CAAMC,OAAO,CAACP,aAAA,CAAcQ,IAAI,KAAKT,IAAA,IAAQH,YAAA,EAAc;MAC7DE,QAAQ,CAACC,IAAA,CAAK,CAACS,IAAI,GAAG,C,IAAKZ,YAAY,CAACG,IAAA,CAAK,EAAES,IAAA,IAAQ,EAAE,EAAE,CAAC;MAAA;MAE5DR,aAAA,CAAcQ,IAAI,CAACC,OAAO,CAAEC,GAAA;QAC1B,MAAMC,mBAAA,GAAsBf,YAAY,CAACG,IAAA,CAAK,CAACS,IAAI,CAACI,SAAS,CAC1DC,WAAA,IAAgBA,WAAA,CAAYC,EAAE,KAAKJ,GAAA,CAAII,EAAE;QAG5C,IAAIH,mBAAA,GAAsB,CAAC,GAAG;UAC5Bb,QAAQ,CAACC,IAAA,CAAK,CAACS,IAAI,CAACG,mBAAA,CAAoB,GAAG;YACzC,GAAGf,YAAY,CAACG,IAAA,CAAK,CAACS,IAAI,CAACG,mBAAA,CAAoB;YAC/C,GAAGD;UACL;QACF;MACF;IACF;IAEA;IACA,IAAIV,aAAA,CAAce,KAAK,KAAK,OAAO;MACjCjB,QAAQ,CAACC,IAAA,CAAK,CAACgB,KAAK,GAAG;IACzB;IAEA;IACA,IAAIf,aAAA,CAAcgB,eAAe,KAAK,OAAO;MAC3ClB,QAAQ,CAACC,IAAA,CAAK,CAACiB,eAAe,GAAG;IACnC;IAEA;IACA;IACA,OAAOlB,QAAQ,CAACC,IAAA,CAAK,CAACI,aAAa;EACrC;EAEA;EACA;EACA,OAAOV,MAAA,CAAOK,QAAA,EAAUF,YAAA,IAAgBA,YAAA,GAAeE,QAAA;AACzD","ignoreList":[]}
1
+ {"version":3,"file":"mergeServerFormState.js","names":["dequal","mergeServerFormState","acceptValues","currentState","incomingState","newState","path","incomingField","Object","entries","addedByServer","value","initialValue","Array","isArray","rows","forEach","row","indexInCurrentState","findIndex","existingRow","id","valid","passesCondition"],"sources":["../../../src/forms/Form/mergeServerFormState.ts"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\n\ntype Args = {\n acceptValues?: boolean\n currentState?: FormState\n incomingState: FormState\n}\n\n/**\n * This function receives form state from the server and intelligently merges it into the client state.\n * The server contains extra properties that the client may not have, e.g. custom components and error states.\n * We typically do not want to merge properties that rely on user input, however, such as values, unless explicitly requested.\n * Doing this would cause the client to lose any local changes to those fields.\n *\n * This function will also a few defaults, as well as clean up the server response in preparation for the client.\n * e.g. it will set `valid` and `passesCondition` to true if undefined, and remove `addedByServer` from the response.\n */\nexport const mergeServerFormState = ({\n acceptValues,\n currentState = {},\n incomingState,\n}: Args): FormState => {\n const newState = { ...currentState }\n\n for (const [path, incomingField] of Object.entries(incomingState || {})) {\n if (!(path in currentState) && !incomingField.addedByServer) {\n continue\n }\n\n if (!acceptValues && !incomingField.addedByServer) {\n delete incomingField.value\n delete incomingField.initialValue\n }\n\n newState[path] = {\n ...currentState[path],\n ...incomingField,\n }\n\n /**\n * Intelligently merge the rows array to ensure changes to local state are not lost while the request was pending\n * For example, the server response could come back with a row which has been deleted on the client\n * Loop over the incoming rows, if it exists in client side form state, merge in any new properties from the server\n * Note: read `currentState` and not `newState` here, as the `rows` property have already been merged above\n */\n if (Array.isArray(incomingField.rows) && path in currentState) {\n newState[path].rows = [...(currentState[path]?.rows || [])] // shallow copy to avoid mutating the original array\n\n incomingField.rows.forEach((row) => {\n const indexInCurrentState = currentState[path].rows?.findIndex(\n (existingRow) => existingRow.id === row.id,\n )\n\n if (indexInCurrentState > -1) {\n newState[path].rows[indexInCurrentState] = {\n ...currentState[path].rows[indexInCurrentState],\n ...row,\n }\n }\n })\n }\n\n // If `valid` is `undefined`, mark it as `true`\n if (incomingField.valid !== false) {\n newState[path].valid = true\n }\n\n // If `passesCondition` is `undefined`, mark it as `true`\n if (incomingField.passesCondition !== false) {\n newState[path].passesCondition = true\n }\n\n // Strip away the `addedByServer` property from the client\n // This will prevent it from being passed back to the server\n delete newState[path].addedByServer\n }\n\n // Return the original object reference if the state is unchanged\n // This will avoid unnecessary re-renders and dependency updates\n return dequal(newState, currentState) ? currentState : newState\n}\n"],"mappings":"AAAA;;AAGA,SAASA,MAAM,QAAQ,cAAa,CAAC;AAQrC;;;;;;;;;AASA,OAAO,MAAMC,oBAAA,GAAuBA,CAAC;EACnCC,YAAY;EACZC,YAAA,GAAe,CAAC,CAAC;EACjBC;AAAa,CACR;EACL,MAAMC,QAAA,GAAW;IAAE,GAAGF;EAAa;EAEnC,KAAK,MAAM,CAACG,IAAA,EAAMC,aAAA,CAAc,IAAIC,MAAA,CAAOC,OAAO,CAACL,aAAA,IAAiB,CAAC,IAAI;IACvE,IAAI,EAAEE,IAAA,IAAQH,YAAW,KAAM,CAACI,aAAA,CAAcG,aAAa,EAAE;MAC3D;IACF;IAEA,IAAI,CAACR,YAAA,IAAgB,CAACK,aAAA,CAAcG,aAAa,EAAE;MACjD,OAAOH,aAAA,CAAcI,KAAK;MAC1B,OAAOJ,aAAA,CAAcK,YAAY;IACnC;IAEAP,QAAQ,CAACC,IAAA,CAAK,GAAG;MACf,GAAGH,YAAY,CAACG,IAAA,CAAK;MACrB,GAAGC;IACL;IAEA;;;;;;IAMA,IAAIM,KAAA,CAAMC,OAAO,CAACP,aAAA,CAAcQ,IAAI,KAAKT,IAAA,IAAQH,YAAA,EAAc;MAC7DE,QAAQ,CAACC,IAAA,CAAK,CAACS,IAAI,GAAG,C,IAAKZ,YAAY,CAACG,IAAA,CAAK,EAAES,IAAA,IAAQ,EAAE,EAAE,CAAC;MAAA;MAE5DR,aAAA,CAAcQ,IAAI,CAACC,OAAO,CAAEC,GAAA;QAC1B,MAAMC,mBAAA,GAAsBf,YAAY,CAACG,IAAA,CAAK,CAACS,IAAI,EAAEI,SAAA,CAClDC,WAAA,IAAgBA,WAAA,CAAYC,EAAE,KAAKJ,GAAA,CAAII,EAAE;QAG5C,IAAIH,mBAAA,GAAsB,CAAC,GAAG;UAC5Bb,QAAQ,CAACC,IAAA,CAAK,CAACS,IAAI,CAACG,mBAAA,CAAoB,GAAG;YACzC,GAAGf,YAAY,CAACG,IAAA,CAAK,CAACS,IAAI,CAACG,mBAAA,CAAoB;YAC/C,GAAGD;UACL;QACF;MACF;IACF;IAEA;IACA,IAAIV,aAAA,CAAce,KAAK,KAAK,OAAO;MACjCjB,QAAQ,CAACC,IAAA,CAAK,CAACgB,KAAK,GAAG;IACzB;IAEA;IACA,IAAIf,aAAA,CAAcgB,eAAe,KAAK,OAAO;MAC3ClB,QAAQ,CAACC,IAAA,CAAK,CAACiB,eAAe,GAAG;IACnC;IAEA;IACA;IACA,OAAOlB,QAAQ,CAACC,IAAA,CAAK,CAACI,aAAa;EACrC;EAEA;EACA;EACA,OAAOV,MAAA,CAAOK,QAAA,EAAUF,YAAA,IAAgBA,YAAA,GAAeE,QAAA;AACzD","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ import type React from 'react';
2
+ export interface PopupMessage {
3
+ searchParams: {
4
+ [key: string]: string | undefined;
5
+ code: string;
6
+ installation_id: string;
7
+ state: string;
8
+ };
9
+ type: string;
10
+ }
11
+ export declare const usePopupWindow: (props: {
12
+ eventType?: string;
13
+ onMessage?: (searchParams: PopupMessage["searchParams"]) => Promise<void>;
14
+ url: string;
15
+ }) => {
16
+ isPopupOpen: boolean;
17
+ openPopupWindow: () => void;
18
+ popupRef?: React.RefObject<null | Window>;
19
+ };
20
+ //# sourceMappingURL=usePopupWindow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePopupWindow.d.ts","sourceRoot":"","sources":["../../src/hooks/usePopupWindow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;QACjC,IAAI,EAAE,MAAM,CAAA;QACZ,eAAe,EAAE,MAAM,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,cAAc,UAAW;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,GAAG,EAAE,MAAM,CAAA;CACZ,KAAG;IACF,WAAW,EAAE,OAAO,CAAA;IACpB,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;CAqH1C,CAAA"}
@@ -0,0 +1,144 @@
1
+ 'use client';
2
+
3
+ import { c as _c } from "react/compiler-runtime";
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
+ import { useConfig } from '../providers/Config/index.js';
6
+ export const usePopupWindow = props => {
7
+ const $ = _c(15);
8
+ const {
9
+ eventType,
10
+ onMessage,
11
+ url
12
+ } = props;
13
+ const isReceivingMessage = useRef(false);
14
+ const [isOpen, setIsOpen] = useState(false);
15
+ const {
16
+ config: t0
17
+ } = useConfig();
18
+ const {
19
+ serverURL
20
+ } = t0;
21
+ const popupRef = useRef(null);
22
+ let t1;
23
+ let t2;
24
+ if ($[0] !== eventType || $[1] !== isOpen || $[2] !== onMessage || $[3] !== serverURL || $[4] !== url) {
25
+ t1 = () => {
26
+ const receiveMessage = async event => {
27
+ if (event.origin !== window.location.origin || event.origin !== url || event.origin !== serverURL) {
28
+ return;
29
+ }
30
+ if (typeof onMessage === "function" && event.data?.type === eventType && !isReceivingMessage.current) {
31
+ isReceivingMessage.current = true;
32
+ await onMessage(event.data?.searchParams);
33
+ isReceivingMessage.current = false;
34
+ }
35
+ };
36
+ if (isOpen && popupRef.current) {
37
+ window.addEventListener("message", receiveMessage, false);
38
+ }
39
+ return () => {
40
+ window.removeEventListener("message", receiveMessage);
41
+ };
42
+ };
43
+ t2 = [onMessage, eventType, url, serverURL, isOpen];
44
+ $[0] = eventType;
45
+ $[1] = isOpen;
46
+ $[2] = onMessage;
47
+ $[3] = serverURL;
48
+ $[4] = url;
49
+ $[5] = t1;
50
+ $[6] = t2;
51
+ } else {
52
+ t1 = $[5];
53
+ t2 = $[6];
54
+ }
55
+ useEffect(t1, t2);
56
+ let t3;
57
+ if ($[7] !== url) {
58
+ t3 = e => {
59
+ if (e) {
60
+ e.preventDefault();
61
+ }
62
+ const features = {
63
+ height: 700,
64
+ left: "auto",
65
+ menubar: "no",
66
+ popup: "yes",
67
+ toolbar: "no",
68
+ top: "auto",
69
+ width: 800
70
+ };
71
+ const popupOptions = Object.entries(features).reduce((str, t4) => {
72
+ const [key, value] = t4;
73
+ let strCopy = str;
74
+ if (value === "auto") {
75
+ if (key === "top") {
76
+ const v = Math.round(window.innerHeight / 2 - features.height / 2);
77
+ strCopy = strCopy + `top=${v},`;
78
+ } else {
79
+ if (key === "left") {
80
+ const v_0 = Math.round(window.innerWidth / 2 - features.width / 2);
81
+ strCopy = strCopy + `left=${v_0},`;
82
+ }
83
+ }
84
+ return strCopy;
85
+ }
86
+ strCopy = strCopy + `${key}=${value},`;
87
+ return strCopy;
88
+ }, "").slice(0, -1);
89
+ const newWindow = window.open(url, "_blank", popupOptions);
90
+ popupRef.current = newWindow;
91
+ setIsOpen(true);
92
+ };
93
+ $[7] = url;
94
+ $[8] = t3;
95
+ } else {
96
+ t3 = $[8];
97
+ }
98
+ const openPopupWindow = t3;
99
+ let t4;
100
+ let t5;
101
+ if ($[9] !== isOpen) {
102
+ t4 = () => {
103
+ let timer;
104
+ if (isOpen) {
105
+ timer = setInterval(function () {
106
+ if (popupRef.current.closed) {
107
+ clearInterval(timer);
108
+ setIsOpen(false);
109
+ }
110
+ }, 1000);
111
+ } else {
112
+ clearInterval(timer);
113
+ }
114
+ return () => {
115
+ if (timer) {
116
+ clearInterval(timer);
117
+ }
118
+ };
119
+ };
120
+ t5 = [isOpen, popupRef];
121
+ $[9] = isOpen;
122
+ $[10] = t4;
123
+ $[11] = t5;
124
+ } else {
125
+ t4 = $[10];
126
+ t5 = $[11];
127
+ }
128
+ useEffect(t4, t5);
129
+ let t6;
130
+ if ($[12] !== isOpen || $[13] !== openPopupWindow) {
131
+ t6 = {
132
+ isPopupOpen: isOpen,
133
+ openPopupWindow,
134
+ popupRef
135
+ };
136
+ $[12] = isOpen;
137
+ $[13] = openPopupWindow;
138
+ $[14] = t6;
139
+ } else {
140
+ t6 = $[14];
141
+ }
142
+ return t6;
143
+ };
144
+ //# sourceMappingURL=usePopupWindow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePopupWindow.js","names":["c","_c","useCallback","useEffect","useRef","useState","useConfig","usePopupWindow","props","$","eventType","onMessage","url","isReceivingMessage","isOpen","setIsOpen","config","t0","serverURL","popupRef","t1","t2","receiveMessage","event","origin","window","location","data","type","current","searchParams","addEventListener","removeEventListener","t3","e","preventDefault","features","height","left","menubar","popup","toolbar","top","width","popupOptions","Object","entries","reduce","str","t4","key","value","strCopy","v","Math","round","innerHeight","v_0","innerWidth","slice","newWindow","open","openPopupWindow","t5","timer","closed","clearInterval","t6","isPopupOpen"],"sources":["../../src/hooks/usePopupWindow.ts"],"sourcesContent":["'use client'\nimport type React from 'react'\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { useConfig } from '../providers/Config/index.js'\n\nexport interface PopupMessage {\n searchParams: {\n [key: string]: string | undefined\n code: string\n installation_id: string\n state: string\n }\n type: string\n}\n\nexport const usePopupWindow = (props: {\n eventType?: string\n\n onMessage?: (searchParams: PopupMessage['searchParams']) => Promise<void>\n url: string\n}): {\n isPopupOpen: boolean\n openPopupWindow: () => void\n popupRef?: React.RefObject<null | Window>\n} => {\n const { eventType, onMessage, url } = props\n const isReceivingMessage = useRef(false)\n const [isOpen, setIsOpen] = useState(false)\n\n const {\n config: { serverURL },\n } = useConfig()\n\n const popupRef = useRef<null | Window>(null)\n\n // Optionally broadcast messages back out to the parent component\n useEffect(() => {\n const receiveMessage = async (event: MessageEvent): Promise<void> => {\n if (\n event.origin !== window.location.origin ||\n event.origin !== url ||\n event.origin !== serverURL\n ) {\n // console.warn(`Message received by ${event.origin}; IGNORED.`) // eslint-disable-line no-console\n return\n }\n\n if (\n typeof onMessage === 'function' &&\n event.data?.type === eventType &&\n !isReceivingMessage.current\n ) {\n isReceivingMessage.current = true\n await onMessage(event.data?.searchParams)\n isReceivingMessage.current = false\n }\n }\n\n if (isOpen && popupRef.current) {\n window.addEventListener('message', receiveMessage, false)\n }\n\n return () => {\n window.removeEventListener('message', receiveMessage)\n }\n }, [onMessage, eventType, url, serverURL, isOpen])\n\n // Customize the size, position, and style of the popup window\n const openPopupWindow = useCallback(\n (e?: MouseEvent) => {\n if (e) {\n e.preventDefault()\n }\n\n const features = {\n height: 700,\n left: 'auto',\n menubar: 'no',\n popup: 'yes',\n toolbar: 'no',\n top: 'auto',\n width: 800,\n }\n\n const popupOptions = Object.entries(features)\n .reduce((str, [key, value]) => {\n let strCopy = str\n if (value === 'auto') {\n if (key === 'top') {\n const v = Math.round(window.innerHeight / 2 - features.height / 2)\n strCopy += `top=${v},`\n } else if (key === 'left') {\n const v = Math.round(window.innerWidth / 2 - features.width / 2)\n strCopy += `left=${v},`\n }\n return strCopy\n }\n\n strCopy += `${key}=${value},`\n return strCopy\n }, '')\n .slice(0, -1) // remove last ',' (comma)\n\n const newWindow = window.open(url, '_blank', popupOptions)\n\n popupRef.current = newWindow\n\n setIsOpen(true)\n },\n [url],\n )\n\n // this is the most stable and widely supported way to check if a popup window is no longer open\n // we poll its ref every x ms and use the popup window's `closed` property\n useEffect(() => {\n let timer: NodeJS.Timeout\n\n if (isOpen) {\n timer = setInterval(function () {\n if (popupRef.current.closed) {\n clearInterval(timer)\n setIsOpen(false)\n }\n }, 1000)\n } else {\n clearInterval(timer)\n }\n\n return () => {\n if (timer) {\n clearInterval(timer)\n }\n }\n }, [isOpen, popupRef])\n\n return {\n isPopupOpen: isOpen,\n openPopupWindow,\n popupRef,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/icons/ExternalLink/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAeA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["React","ExternalLinkIcon","props","className","_jsx","filter","Boolean","join","viewBox","xmlns","d","strokeLinecap"],"sources":["../../../src/icons/ExternalLink/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport './index.scss'\n\nexport const ExternalLinkIcon: React.FC<{\n className?: string\n}> = (props) => {\n const { className } = props\n return (\n <svg\n className={[className, 'icon icon--externalLink'].filter(Boolean).join(' ')}\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n className=\"stroke\"\n d=\"M16 10.6667V14.6667C16 15.0203 15.8595 15.3594 15.6095 15.6095C15.3594 15.8595 15.0203 16 14.6667 16H5.33333C4.97971 16 4.64057 15.8595 4.39052 15.6095C4.14048 15.3594 4 15.0203 4 14.6667V5.33333C4 4.97971 4.14048 4.64057 4.39052 4.39052C4.64057 4.14048 4.97971 4 5.33333 4H9.33333M16 4L10 10M16 4H12M16 4V8\"\n strokeLinecap=\"square\"\n />\n </svg>\n )\n}\n"],"mappings":";AAAA,OAAOA,KAAA,MAAW;AAElB,OAAO;AAEP,OAAO,MAAMC,gBAAA,GAEPC,KAAA;EACJ,MAAM;IAAEC;EAAS,CAAE,GAAGD,KAAA;EACtB,oBACEE,IAAA,CAAC;IACCD,SAAA,EAAW,CAACA,SAAA,EAAW,0BAA0B,CAACE,MAAM,CAACC,OAAA,EAASC,IAAI,CAAC;IACvEC,OAAA,EAAQ;IACRC,KAAA,EAAM;cAEN,aAAAL,IAAA,CAAC;MACCD,SAAA,EAAU;MACVO,CAAA,EAAE;MACFC,aAAA,EAAc;;;AAItB","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ export declare const EyeIcon: React.FC<{
4
+ active?: boolean;
5
+ className?: string;
6
+ }>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/icons/Eye/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CA0BtE,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { Fragment } from 'react';
3
+ import './index.scss';
4
+ export const EyeIcon = ({
5
+ active = true,
6
+ className
7
+ }) => /*#__PURE__*/_jsx("svg", {
8
+ className: [className, 'icon icon--eye'].filter(Boolean).join(' '),
9
+ viewBox: "0 0 16 12",
10
+ xmlns: "http://www.w3.org/2000/svg",
11
+ children: !active ? /*#__PURE__*/_jsxs(Fragment, {
12
+ children: [/*#__PURE__*/_jsx("circle", {
13
+ className: "stroke",
14
+ cx: "8.5",
15
+ cy: "6",
16
+ r: "2.5"
17
+ }), /*#__PURE__*/_jsx("path", {
18
+ className: "stroke",
19
+ d: "M8.5 1C3.83333 1 1.5 6 1.5 6C1.5 6 3.83333 11 8.5 11C13.1667 11 15.5 6 15.5 6C15.5 6 13.1667 1 8.5 1Z"
20
+ })]
21
+ }) : /*#__PURE__*/_jsx(Fragment, {
22
+ children: /*#__PURE__*/_jsx("path", {
23
+ className: "stroke",
24
+ d: "M2 11.5L4.35141 9.51035M15 0.5L12.6486 2.48965M10.915 6.64887C10.6493 7.64011 9.78959 8.38832 8.7408 8.48855M10.4085 4.38511C9.94992 3.84369 9.2651 3.5 8.5 3.5C7.11929 3.5 6 4.61929 6 6C6 6.61561 6.22251 7.17926 6.59149 7.61489M10.4085 4.38511L6.59149 7.61489M10.4085 4.38511L12.6486 2.48965M6.59149 7.61489L4.35141 9.51035M14.1292 3.92915C15.0431 5.02085 15.5 6 15.5 6C15.5 6 13.1667 11 8.5 11C7.67995 11 6.93195 10.8456 6.256 10.5911M4.35141 9.51035C2.45047 8.03672 1.5 6 1.5 6C1.5 6 3.83333 1 8.5 1C10.1882 1 11.5711 1.65437 12.6486 2.48965"
25
+ })
26
+ })
27
+ });
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["React","Fragment","EyeIcon","active","className","_jsx","filter","Boolean","join","viewBox","xmlns","_jsxs","cx","cy","r","d"],"sources":["../../../src/icons/Eye/index.tsx"],"sourcesContent":["import React, { Fragment } from 'react'\n\nimport './index.scss'\n\nexport const EyeIcon: React.FC<{ active?: boolean; className?: string }> = ({\n active = true,\n className,\n}) => (\n <svg\n className={[className, 'icon icon--eye'].filter(Boolean).join(' ')}\n viewBox=\"0 0 16 12\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {!active ? (\n <Fragment>\n <circle className=\"stroke\" cx=\"8.5\" cy=\"6\" r=\"2.5\" />\n <path\n className=\"stroke\"\n d=\"M8.5 1C3.83333 1 1.5 6 1.5 6C1.5 6 3.83333 11 8.5 11C13.1667 11 15.5 6 15.5 6C15.5 6 13.1667 1 8.5 1Z\"\n />\n </Fragment>\n ) : (\n <Fragment>\n <path\n className=\"stroke\"\n d=\"M2 11.5L4.35141 9.51035M15 0.5L12.6486 2.48965M10.915 6.64887C10.6493 7.64011 9.78959 8.38832 8.7408 8.48855M10.4085 4.38511C9.94992 3.84369 9.2651 3.5 8.5 3.5C7.11929 3.5 6 4.61929 6 6C6 6.61561 6.22251 7.17926 6.59149 7.61489M10.4085 4.38511L6.59149 7.61489M10.4085 4.38511L12.6486 2.48965M6.59149 7.61489L4.35141 9.51035M14.1292 3.92915C15.0431 5.02085 15.5 6 15.5 6C15.5 6 13.1667 11 8.5 11C7.67995 11 6.93195 10.8456 6.256 10.5911M4.35141 9.51035C2.45047 8.03672 1.5 6 1.5 6C1.5 6 3.83333 1 8.5 1C10.1882 1 11.5711 1.65437 12.6486 2.48965\"\n />\n </Fragment>\n )}\n </svg>\n)\n"],"mappings":";AAAA,OAAOA,KAAA,IAASC,QAAQ,QAAQ;AAEhC,OAAO;AAEP,OAAO,MAAMC,OAAA,GAA8DA,CAAC;EAC1EC,MAAA,GAAS,IAAI;EACbC;AAAS,CACV,kBACCC,IAAA,CAAC;EACCD,SAAA,EAAW,CAACA,SAAA,EAAW,iBAAiB,CAACE,MAAM,CAACC,OAAA,EAASC,IAAI,CAAC;EAC9DC,OAAA,EAAQ;EACRC,KAAA,EAAM;YAEL,CAACP,MAAA,gBACAQ,KAAA,CAACV,QAAA;4BACCI,IAAA,CAAC;MAAOD,SAAA,EAAU;MAASQ,EAAA,EAAG;MAAMC,EAAA,EAAG;MAAIC,CAAA,EAAE;qBAC7CT,IAAA,CAAC;MACCD,SAAA,EAAU;MACVW,CAAA,EAAE;;oBAINV,IAAA,CAACJ,QAAA;cACC,aAAAI,IAAA,CAAC;MACCD,SAAA,EAAU;MACVW,CAAA,EAAE","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ @import '../../scss/styles';
2
+
3
+ @layer payload-default {
4
+ .icon--eye {
5
+ height: $baseline;
6
+ width: $baseline;
7
+ shape-rendering: auto;
8
+ vector-effect: non-scaling-stroke;
9
+
10
+ .stroke {
11
+ fill: none;
12
+ stroke: currentColor;
13
+ stroke-width: 0.75;
14
+ }
15
+
16
+ .fill {
17
+ fill: currentColor;
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,3 @@
1
+ import type { CollisionDetection } from '@dnd-kit/core';
2
+ export declare const customCollisionDetection: CollisionDetection;
3
+ //# sourceMappingURL=collisionDetection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collisionDetection.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/collisionDetection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAMvD,eAAO,MAAM,wBAAwB,EAAE,kBA+BtC,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { rectIntersection } from '@dnd-kit/core';
2
+ // If the toolbar exits the preview area, we need to reset its position
3
+ // This will prevent the toolbar from getting stuck outside the preview area
4
+ export const customCollisionDetection = ({
5
+ collisionRect,
6
+ droppableContainers,
7
+ ...args
8
+ }) => {
9
+ const droppableContainer = droppableContainers.find(({
10
+ id
11
+ }) => id === 'live-preview-area');
12
+ const rectIntersectionCollisions = rectIntersection({
13
+ ...args,
14
+ collisionRect,
15
+ droppableContainers: [droppableContainer]
16
+ });
17
+ // Collision detection algorithms return an array of collisions
18
+ if (rectIntersectionCollisions.length === 0) {
19
+ // The preview area is not intersecting, return early
20
+ return rectIntersectionCollisions;
21
+ }
22
+ // Compute whether the draggable element is completely contained within the preview area
23
+ const previewAreaRect = droppableContainer?.rect?.current;
24
+ const isContained = collisionRect.top >= previewAreaRect.top && collisionRect.left >= previewAreaRect.left && collisionRect.bottom <= previewAreaRect.bottom && collisionRect.right <= previewAreaRect.right;
25
+ if (isContained) {
26
+ return rectIntersectionCollisions;
27
+ }
28
+ };
29
+ //# sourceMappingURL=collisionDetection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collisionDetection.js","names":["rectIntersection","customCollisionDetection","collisionRect","droppableContainers","args","droppableContainer","find","id","rectIntersectionCollisions","length","previewAreaRect","rect","current","isContained","top","left","bottom","right"],"sources":["../../../src/providers/LivePreview/collisionDetection.ts"],"sourcesContent":["import type { CollisionDetection } from '@dnd-kit/core'\n\nimport { rectIntersection } from '@dnd-kit/core'\n\n// If the toolbar exits the preview area, we need to reset its position\n// This will prevent the toolbar from getting stuck outside the preview area\nexport const customCollisionDetection: CollisionDetection = ({\n collisionRect,\n droppableContainers,\n ...args\n}) => {\n const droppableContainer = droppableContainers.find(({ id }) => id === 'live-preview-area')\n\n const rectIntersectionCollisions = rectIntersection({\n ...args,\n collisionRect,\n droppableContainers: [droppableContainer],\n })\n\n // Collision detection algorithms return an array of collisions\n if (rectIntersectionCollisions.length === 0) {\n // The preview area is not intersecting, return early\n return rectIntersectionCollisions\n }\n\n // Compute whether the draggable element is completely contained within the preview area\n const previewAreaRect = droppableContainer?.rect?.current\n\n const isContained =\n collisionRect.top >= previewAreaRect.top &&\n collisionRect.left >= previewAreaRect.left &&\n collisionRect.bottom <= previewAreaRect.bottom &&\n collisionRect.right <= previewAreaRect.right\n\n if (isContained) {\n return rectIntersectionCollisions\n }\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ;AAEjC;AACA;AACA,OAAO,MAAMC,wBAAA,GAA+CA,CAAC;EAC3DC,aAAa;EACbC,mBAAmB;EACnB,GAAGC;AAAA,CACJ;EACC,MAAMC,kBAAA,GAAqBF,mBAAA,CAAoBG,IAAI,CAAC,CAAC;IAAEC;EAAE,CAAE,KAAKA,EAAA,KAAO;EAEvE,MAAMC,0BAAA,GAA6BR,gBAAA,CAAiB;IAClD,GAAGI,IAAI;IACPF,aAAA;IACAC,mBAAA,EAAqB,CAACE,kBAAA;EACxB;EAEA;EACA,IAAIG,0BAAA,CAA2BC,MAAM,KAAK,GAAG;IAC3C;IACA,OAAOD,0BAAA;EACT;EAEA;EACA,MAAME,eAAA,GAAkBL,kBAAA,EAAoBM,IAAA,EAAMC,OAAA;EAElD,MAAMC,WAAA,GACJX,aAAA,CAAcY,GAAG,IAAIJ,eAAA,CAAgBI,GAAG,IACxCZ,aAAA,CAAca,IAAI,IAAIL,eAAA,CAAgBK,IAAI,IAC1Cb,aAAA,CAAcc,MAAM,IAAIN,eAAA,CAAgBM,MAAM,IAC9Cd,aAAA,CAAce,KAAK,IAAIP,eAAA,CAAgBO,KAAK;EAE9C,IAAIJ,WAAA,EAAa;IACf,OAAOL,0BAAA;EACT;AACF","ignoreList":[]}