@payloadcms/ui 3.47.0-canary.0 → 3.47.0-canary.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/elements/ArrayAction/index.d.ts +2 -0
  2. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  3. package/dist/elements/ArrayAction/index.js +37 -13
  4. package/dist/elements/ArrayAction/index.js.map +1 -1
  5. package/dist/elements/ClipboardAction/ClipboardActionLabel.d.ts +5 -0
  6. package/dist/elements/ClipboardAction/ClipboardActionLabel.d.ts.map +1 -0
  7. package/dist/elements/ClipboardAction/ClipboardActionLabel.js +44 -0
  8. package/dist/elements/ClipboardAction/ClipboardActionLabel.js.map +1 -0
  9. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts +10 -0
  10. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts.map +1 -0
  11. package/dist/elements/ClipboardAction/clipboardUtilities.js +53 -0
  12. package/dist/elements/ClipboardAction/clipboardUtilities.js.map +1 -0
  13. package/dist/elements/ClipboardAction/index.d.ts +20 -0
  14. package/dist/elements/ClipboardAction/index.d.ts.map +1 -0
  15. package/dist/elements/ClipboardAction/index.js +188 -0
  16. package/dist/elements/ClipboardAction/index.js.map +1 -0
  17. package/dist/elements/ClipboardAction/isClipboardDataValid.d.ts +10 -0
  18. package/dist/elements/ClipboardAction/isClipboardDataValid.d.ts.map +1 -0
  19. package/dist/elements/ClipboardAction/isClipboardDataValid.js +86 -0
  20. package/dist/elements/ClipboardAction/isClipboardDataValid.js.map +1 -0
  21. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts +14 -0
  22. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -0
  23. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +100 -0
  24. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -0
  25. package/dist/elements/ClipboardAction/types.d.ts +45 -0
  26. package/dist/elements/ClipboardAction/types.d.ts.map +1 -0
  27. package/dist/elements/ClipboardAction/types.js +2 -0
  28. package/dist/elements/ClipboardAction/types.js.map +1 -0
  29. package/dist/elements/DatePicker/index.scss +1 -0
  30. package/dist/elements/ReactSelect/ClearIndicator/index.scss +1 -0
  31. package/dist/elements/ReactSelect/DropdownIndicator/index.scss +1 -0
  32. package/dist/exports/client/index.js +22 -22
  33. package/dist/exports/client/index.js.map +4 -4
  34. package/dist/exports/shared/index.js +2 -2
  35. package/dist/exports/shared/index.js.map +4 -4
  36. package/dist/fields/Array/ArrayRow.d.ts +2 -0
  37. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  38. package/dist/fields/Array/ArrayRow.js +49 -43
  39. package/dist/fields/Array/ArrayRow.js.map +1 -1
  40. package/dist/fields/Array/index.d.ts.map +1 -1
  41. package/dist/fields/Array/index.js +175 -44
  42. package/dist/fields/Array/index.js.map +1 -1
  43. package/dist/fields/Blocks/BlockRow.d.ts +2 -0
  44. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  45. package/dist/fields/Blocks/BlockRow.js +41 -35
  46. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  47. package/dist/fields/Blocks/RowActions.d.ts +2 -0
  48. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  49. package/dist/fields/Blocks/RowActions.js +32 -26
  50. package/dist/fields/Blocks/RowActions.js.map +1 -1
  51. package/dist/fields/Blocks/index.d.ts.map +1 -1
  52. package/dist/fields/Blocks/index.js +294 -348
  53. package/dist/fields/Blocks/index.js.map +1 -1
  54. package/dist/providers/LivePreview/index.d.ts +1 -1
  55. package/dist/providers/LivePreview/index.d.ts.map +1 -1
  56. package/dist/providers/LivePreview/index.js +1 -2
  57. package/dist/providers/LivePreview/index.js.map +1 -1
  58. package/dist/styles.css +1 -1
  59. package/dist/utilities/formatDocTitle/formatRelationshipTitle.d.ts +2 -0
  60. package/dist/utilities/formatDocTitle/formatRelationshipTitle.d.ts.map +1 -0
  61. package/dist/utilities/formatDocTitle/formatRelationshipTitle.js +15 -0
  62. package/dist/utilities/formatDocTitle/formatRelationshipTitle.js.map +1 -0
  63. package/dist/utilities/formatDocTitle/index.d.ts.map +1 -1
  64. package/dist/utilities/formatDocTitle/index.js +6 -0
  65. package/dist/utilities/formatDocTitle/index.js.map +1 -1
  66. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","getTranslation","React","Fragment","useCallback","Banner","Button","DraggableSortableItem","DraggableSortable","DrawerToggler","useDrawerSlug","ErrorPill","RenderCustomComponent","useForm","useFormSubmitted","extractRowsAndCollapsedIDs","toggleAllRows","NullifyLocaleField","useField","withCondition","useConfig","useDocumentInfo","useLocale","useTranslation","scrollToID","FieldDescription","FieldError","FieldLabel","fieldBaseClass","BlockRow","BlocksDrawer","baseClass","BlocksFieldComponent","props","$","i18n","t","field","t0","path","pathFromProps","permissions","readOnly","schemaPath","schemaPathFromProps","validate","name","admin","t1","blockReferences","blocks","label","labels","labelsFromProps","localized","maxRows","minRows","minRowsProp","required","t2","undefined","className","description","isSortable","t3","setDocFieldPreferences","addFieldRow","dispatchFields","moveFieldRow","removeFieldRow","setModified","code","locale","config","t4","localization","drawerSlug","submitted","plural","singular","t5","bb0","fallback","defaultLocale","editingDefaultLocale","t6","value","options","memoizedValidate","t7","hasRows","potentiallyStalePath","customComponents","t8","disabled","errorPaths","rows","t9","showError","valid","value_0","t10","AfterInput","BeforeInput","Description","Error","Label","t11","t12","rowIndex","blockType","setTimeout","addRow","t13","rowIndex_0","type","duplicateRow","t14","rowIndex_1","removeRow","t15","moveFromIndex","moveToIndex","moveRow","t16","collapsed","collapsedIDs","updatedRows","toggleCollapseAll","t17","rowID","collapsed_0","collapsedIDs_0","updatedRows_0","setCollapse","hasMaxRows","length","fieldErrorCount","fieldHasErrors","showMinRows","showRequired","t18","t19","filter","Boolean","t20","_jsx","CustomComponent","Fallback","t21","count","withMessage","_jsxs","join","id","replace","children","onClick","fieldValue","ids","map","_temp","onDragEnd","t22","moveFromIndex_0","moveToIndex_0","row_0","i","blockType_0","isLoading","row","blockConfig","blocksMap","find","block","slug","rowPath","rowErrorCount","errorPath","startsWith","draggableSortableItemProps","errorCount","fields","RowLabel","parentPath","rowCount","buttonStyle","el","icon","iconPosition","iconStyle","addRowIndex","BlocksField"],"sources":["../../../src/fields/Blocks/index.tsx"],"sourcesContent":["'use client'\nimport type { BlocksFieldClientComponent, ClientBlock } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useCallback } from 'react'\n\nimport { Banner } from '../../elements/Banner/index.js'\nimport { Button } from '../../elements/Button/index.js'\nimport { DraggableSortableItem } from '../../elements/DraggableSortable/DraggableSortableItem/index.js'\nimport { DraggableSortable } from '../../elements/DraggableSortable/index.js'\nimport { DrawerToggler } from '../../elements/Drawer/index.js'\nimport { useDrawerSlug } from '../../elements/Drawer/useDrawerSlug.js'\nimport { ErrorPill } from '../../elements/ErrorPill/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useForm, useFormSubmitted } from '../../forms/Form/context.js'\nimport { extractRowsAndCollapsedIDs, toggleAllRows } from '../../forms/Form/rowHelpers.js'\nimport { NullifyLocaleField } from '../../forms/NullifyField/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { scrollToID } from '../../utilities/scrollToID.js'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { BlockRow } from './BlockRow.js'\nimport { BlocksDrawer } from './BlocksDrawer/index.js'\nimport './index.scss'\n\nconst baseClass = 'blocks-field'\n\nconst BlocksFieldComponent: BlocksFieldClientComponent = (props) => {\n const { i18n, t } = useTranslation()\n\n const {\n field: {\n name,\n admin: { className, description, isSortable = true } = {},\n blockReferences,\n blocks,\n label,\n labels: labelsFromProps,\n localized,\n maxRows,\n minRows: minRowsProp,\n required,\n },\n path: pathFromProps,\n permissions,\n readOnly,\n schemaPath: schemaPathFromProps,\n validate,\n } = props\n\n const schemaPath = schemaPathFromProps ?? name\n\n const minRows = (minRowsProp ?? required) ? 1 : 0\n\n const { setDocFieldPreferences } = useDocumentInfo()\n const { addFieldRow, dispatchFields, moveFieldRow, removeFieldRow, setModified } = useForm()\n const { code: locale } = useLocale()\n const {\n config: { localization },\n config,\n } = useConfig()\n const drawerSlug = useDrawerSlug('blocks-drawer')\n const submitted = useFormSubmitted()\n\n const labels = {\n plural: t('fields:blocks'),\n singular: t('fields:block'),\n ...labelsFromProps,\n }\n\n const editingDefaultLocale = (() => {\n if (localization && localization.fallback) {\n const defaultLocale = localization.defaultLocale\n return locale === defaultLocale\n }\n\n return true\n })()\n\n const memoizedValidate = useCallback(\n (value, options) => {\n // alternative locales can be null\n if (!editingDefaultLocale && value === null) {\n return true\n }\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxRows, minRows, required })\n }\n },\n [maxRows, minRows, required, validate, editingDefaultLocale],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n errorPaths,\n path,\n rows = [],\n showError,\n valid,\n value,\n } = useField<number>({\n hasRows: true,\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const addRow = useCallback(\n (rowIndex: number, blockType: string) => {\n addFieldRow({\n blockType,\n path,\n rowIndex,\n schemaPath,\n })\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [addFieldRow, path, schemaPath],\n )\n\n const duplicateRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'DUPLICATE_ROW', path, rowIndex })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [dispatchFields, path, setModified],\n )\n\n const removeRow = useCallback(\n (rowIndex: number) => {\n removeFieldRow({\n path,\n rowIndex,\n })\n },\n [path, removeFieldRow],\n )\n\n const moveRow = useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n moveFieldRow({ moveFromIndex, moveToIndex, path })\n },\n [moveFieldRow, path],\n )\n\n const toggleCollapseAll = useCallback(\n (collapsed: boolean) => {\n const { collapsedIDs, updatedRows } = toggleAllRows({\n collapsed,\n rows,\n })\n\n dispatchFields({ type: 'SET_ALL_ROWS_COLLAPSED', path, updatedRows })\n setDocFieldPreferences(path, { collapsed: collapsedIDs })\n },\n [dispatchFields, path, rows, setDocFieldPreferences],\n )\n\n const setCollapse = useCallback(\n (rowID: string, collapsed: boolean) => {\n const { collapsedIDs, updatedRows } = extractRowsAndCollapsedIDs({\n collapsed,\n rowID,\n rows,\n })\n\n dispatchFields({ type: 'SET_ROW_COLLAPSED', path, updatedRows })\n setDocFieldPreferences(path, { collapsed: collapsedIDs })\n },\n [dispatchFields, path, rows, setDocFieldPreferences],\n )\n\n const hasMaxRows = maxRows && rows.length >= maxRows\n\n const fieldErrorCount = errorPaths.length\n const fieldHasErrors = submitted && fieldErrorCount + (valid ? 0 : 1) > 0\n\n const showMinRows = rows.length < minRows || (required && rows.length === 0)\n const showRequired = readOnly && rows.length === 0\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n fieldHasErrors ? `${baseClass}--has-error` : `${baseClass}--has-no-error`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path?.replace(/\\./g, '__')}`}\n >\n {showError && (\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n )}\n <header className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-wrap`}>\n <div className={`${baseClass}__heading-with-error`}>\n <h3>\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n </h3>\n {fieldHasErrors && fieldErrorCount > 0 && (\n <ErrorPill count={fieldErrorCount} i18n={i18n} withMessage />\n )}\n </div>\n {rows.length > 0 && (\n <ul className={`${baseClass}__header-actions`}>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(true)}\n type=\"button\"\n >\n {t('fields:collapseAll')}\n </button>\n </li>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(false)}\n type=\"button\"\n >\n {t('fields:showAll')}\n </button>\n </li>\n </ul>\n )}\n </div>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </header>\n {BeforeInput}\n <NullifyLocaleField fieldValue={value} localized={localized} path={path} />\n {(rows.length > 0 || (!valid && (showRequired || showMinRows))) && (\n <DraggableSortable\n className={`${baseClass}__rows`}\n ids={rows.map((row) => row.id)}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {rows.map((row, i) => {\n const { blockType, isLoading } = row\n const blockConfig: ClientBlock =\n config.blocksMap[blockType] ??\n ((blockReferences ?? blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockType,\n ) as ClientBlock)\n\n if (blockConfig) {\n const rowPath = `${path}.${i}`\n\n const rowErrorCount = errorPaths.filter((errorPath) =>\n errorPath.startsWith(rowPath + '.'),\n ).length\n\n return (\n <DraggableSortableItem\n disabled={readOnly || disabled || !isSortable}\n id={row.id}\n key={row.id}\n >\n {(draggableSortableItemProps) => (\n <BlockRow\n {...draggableSortableItemProps}\n addRow={addRow}\n block={blockConfig}\n blocks={blockReferences ?? blocks}\n duplicateRow={duplicateRow}\n errorCount={rowErrorCount}\n fields={blockConfig.fields}\n hasMaxRows={hasMaxRows}\n isLoading={isLoading}\n isSortable={isSortable}\n Label={rows?.[i]?.customComponents?.RowLabel}\n labels={labels}\n moveRow={moveRow}\n parentPath={path}\n path={rowPath}\n permissions={permissions}\n readOnly={readOnly || disabled}\n removeRow={removeRow}\n row={row}\n rowCount={rows.length}\n rowIndex={i}\n schemaPath={schemaPath + blockConfig.slug}\n setCollapse={setCollapse}\n />\n )}\n </DraggableSortableItem>\n )\n }\n\n return null\n })}\n {!editingDefaultLocale && (\n <React.Fragment>\n {showMinRows && (\n <Banner type=\"error\">\n {t('validation:requiresAtLeast', {\n count: minRows,\n label:\n getTranslation(minRows > 1 ? labels.plural : labels.singular, i18n) ||\n t(minRows > 1 ? 'general:row' : 'general:rows'),\n })}\n </Banner>\n )}\n {showRequired && (\n <Banner>\n {t('validation:fieldHasNo', { label: getTranslation(labels.plural, i18n) })}\n </Banner>\n )}\n </React.Fragment>\n )}\n </DraggableSortable>\n )}\n {!hasMaxRows && (\n <Fragment>\n <DrawerToggler\n className={`${baseClass}__drawer-toggler`}\n disabled={readOnly || disabled}\n slug={drawerSlug}\n >\n <Button\n buttonStyle=\"icon-label\"\n disabled={readOnly || disabled}\n el=\"span\"\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n >\n {t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n </Button>\n </DrawerToggler>\n <BlocksDrawer\n addRow={addRow}\n addRowIndex={rows?.length || 0}\n blocks={blockReferences ?? blocks}\n drawerSlug={drawerSlug}\n labels={labels}\n />\n </Fragment>\n )}\n {AfterInput}\n </div>\n )\n}\n\nexport const BlocksField = withCondition(BlocksFieldComponent)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","React","Fragment","useCallback","useMemo","toast","Banner","Button","clipboardCopy","clipboardPaste","ClipboardAction","mergeFormStateFromClipboard","reduceFormStateByPath","DraggableSortableItem","DraggableSortable","DrawerToggler","useDrawerSlug","ErrorPill","RenderCustomComponent","useForm","useFormSubmitted","extractRowsAndCollapsedIDs","toggleAllRows","NullifyLocaleField","useField","withCondition","useConfig","useDocumentInfo","useLocale","useTranslation","scrollToID","FieldDescription","FieldError","FieldLabel","fieldBaseClass","BlockRow","BlocksDrawer","baseClass","BlocksFieldComponent","props","i18n","t","field","name","type","admin","className","description","isSortable","blockReferences","blocks","label","labels","labelsFromProps","localized","maxRows","minRows","minRowsProp","required","path","pathFromProps","permissions","readOnly","schemaPath","schemaPathFromProps","validate","setDocFieldPreferences","addFieldRow","dispatchFields","getFields","moveFieldRow","removeFieldRow","replaceState","setModified","code","locale","config","localization","drawerSlug","submitted","plural","singular","editingDefaultLocale","fallback","defaultLocale","clientBlocks","resolvedBlocks","blockReference","block","blocksMap","push","memoizedValidate","value","options","customComponents","AfterInput","BeforeInput","Description","Error","Label","disabled","errorPaths","rows","showError","valid","hasRows","potentiallyStalePath","addRow","rowIndex","blockType","setTimeout","duplicateRow","removeRow","moveRow","moveFromIndex","moveToIndex","toggleCollapseAll","collapsed","collapsedIDs","updatedRows","setCollapse","rowID","copyRow","clipboardResult","getDataToCopy","formState","error","success","pasteRow","pasteArgs","onPaste","dataFromClipboard","newState","schemaBlocks","pasteBlocks","hasMaxRows","length","fieldErrorCount","fieldHasErrors","showMinRows","showRequired","_jsxs","filter","Boolean","join","id","replace","_jsx","CustomComponent","Fallback","count","withMessage","onClick","disableCopy","disablePaste","fieldValue","ids","map","row","onDragEnd","i","isLoading","blockConfig","find","slug","rowPath","rowErrorCount","errorPath","startsWith","draggableSortableItemProps","errorCount","fields","RowLabel","parentPath","rowCount","buttonStyle","el","icon","iconPosition","iconStyle","addRowIndex","BlocksField"],"sources":["../../../src/fields/Blocks/index.tsx"],"sourcesContent":["'use client'\nimport type { BlocksFieldClientComponent, ClientBlock } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useCallback, useMemo } from 'react'\nimport { toast } from 'sonner'\n\nimport type { ClipboardPasteData } from '../../elements/ClipboardAction/types.js'\n\nimport { Banner } from '../../elements/Banner/index.js'\nimport { Button } from '../../elements/Button/index.js'\nimport { clipboardCopy, clipboardPaste } from '../../elements/ClipboardAction/clipboardUtilities.js'\nimport { ClipboardAction } from '../../elements/ClipboardAction/index.js'\nimport {\n mergeFormStateFromClipboard,\n reduceFormStateByPath,\n} from '../../elements/ClipboardAction/mergeFormStateFromClipboard.js'\nimport { DraggableSortableItem } from '../../elements/DraggableSortable/DraggableSortableItem/index.js'\nimport { DraggableSortable } from '../../elements/DraggableSortable/index.js'\nimport { DrawerToggler } from '../../elements/Drawer/index.js'\nimport { useDrawerSlug } from '../../elements/Drawer/useDrawerSlug.js'\nimport { ErrorPill } from '../../elements/ErrorPill/index.js'\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { useForm, useFormSubmitted } from '../../forms/Form/context.js'\nimport { extractRowsAndCollapsedIDs, toggleAllRows } from '../../forms/Form/rowHelpers.js'\nimport { NullifyLocaleField } from '../../forms/NullifyField/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { scrollToID } from '../../utilities/scrollToID.js'\nimport './index.scss'\nimport { FieldDescription } from '../FieldDescription/index.js'\nimport { FieldError } from '../FieldError/index.js'\nimport { FieldLabel } from '../FieldLabel/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { BlockRow } from './BlockRow.js'\nimport { BlocksDrawer } from './BlocksDrawer/index.js'\n\nconst baseClass = 'blocks-field'\n\nconst BlocksFieldComponent: BlocksFieldClientComponent = (props) => {\n const { i18n, t } = useTranslation()\n\n const {\n field: {\n name,\n type,\n admin: { className, description, isSortable = true } = {},\n blockReferences,\n blocks,\n label,\n labels: labelsFromProps,\n localized,\n maxRows,\n minRows: minRowsProp,\n required,\n },\n path: pathFromProps,\n permissions,\n readOnly,\n schemaPath: schemaPathFromProps,\n validate,\n } = props\n\n const schemaPath = schemaPathFromProps ?? name\n\n const minRows = (minRowsProp ?? required) ? 1 : 0\n\n const { setDocFieldPreferences } = useDocumentInfo()\n const {\n addFieldRow,\n dispatchFields,\n getFields,\n moveFieldRow,\n removeFieldRow,\n replaceState,\n setModified,\n } = useForm()\n const { code: locale } = useLocale()\n const {\n config: { localization },\n config,\n } = useConfig()\n const drawerSlug = useDrawerSlug('blocks-drawer')\n const submitted = useFormSubmitted()\n\n const labels = {\n plural: t('fields:blocks'),\n singular: t('fields:block'),\n ...labelsFromProps,\n }\n\n const editingDefaultLocale = (() => {\n if (localization && localization.fallback) {\n const defaultLocale = localization.defaultLocale\n return locale === defaultLocale\n }\n\n return true\n })()\n\n const clientBlocks = useMemo(() => {\n if (!blockReferences) {\n return blocks\n }\n\n const resolvedBlocks: ClientBlock[] = []\n for (const blockReference of blockReferences) {\n const block =\n typeof blockReference === 'string' ? config.blocksMap[blockReference] : blockReference\n if (block) {\n resolvedBlocks.push(block)\n }\n }\n\n return resolvedBlocks\n }, [blockReferences, blocks, config.blocksMap])\n\n const memoizedValidate = useCallback(\n (value, options) => {\n // alternative locales can be null\n if (!editingDefaultLocale && value === null) {\n return true\n }\n if (typeof validate === 'function') {\n return validate(value, { ...options, maxRows, minRows, required })\n }\n },\n [maxRows, minRows, required, validate, editingDefaultLocale],\n )\n\n const {\n customComponents: { AfterInput, BeforeInput, Description, Error, Label } = {},\n disabled,\n errorPaths,\n path,\n rows = [],\n showError,\n valid,\n value,\n } = useField<number>({\n hasRows: true,\n potentiallyStalePath: pathFromProps,\n validate: memoizedValidate,\n })\n\n const addRow = useCallback(\n (rowIndex: number, blockType: string) => {\n addFieldRow({\n blockType,\n path,\n rowIndex,\n schemaPath,\n })\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [addFieldRow, path, schemaPath],\n )\n\n const duplicateRow = useCallback(\n (rowIndex: number) => {\n dispatchFields({ type: 'DUPLICATE_ROW', path, rowIndex })\n setModified(true)\n\n setTimeout(() => {\n scrollToID(`${path}-row-${rowIndex + 1}`)\n }, 0)\n },\n [dispatchFields, path, setModified],\n )\n\n const removeRow = useCallback(\n (rowIndex: number) => {\n removeFieldRow({\n path,\n rowIndex,\n })\n },\n [path, removeFieldRow],\n )\n\n const moveRow = useCallback(\n (moveFromIndex: number, moveToIndex: number) => {\n moveFieldRow({ moveFromIndex, moveToIndex, path })\n },\n [moveFieldRow, path],\n )\n\n const toggleCollapseAll = useCallback(\n (collapsed: boolean) => {\n const { collapsedIDs, updatedRows } = toggleAllRows({\n collapsed,\n rows,\n })\n\n dispatchFields({ type: 'SET_ALL_ROWS_COLLAPSED', path, updatedRows })\n setDocFieldPreferences(path, { collapsed: collapsedIDs })\n },\n [dispatchFields, path, rows, setDocFieldPreferences],\n )\n\n const setCollapse = useCallback(\n (rowID: string, collapsed: boolean) => {\n const { collapsedIDs, updatedRows } = extractRowsAndCollapsedIDs({\n collapsed,\n rowID,\n rows,\n })\n\n dispatchFields({ type: 'SET_ROW_COLLAPSED', path, updatedRows })\n setDocFieldPreferences(path, { collapsed: collapsedIDs })\n },\n [dispatchFields, path, rows, setDocFieldPreferences],\n )\n\n const copyRow = useCallback(\n (rowIndex: number) => {\n const clipboardResult = clipboardCopy({\n type,\n blocks: clientBlocks,\n getDataToCopy: () =>\n reduceFormStateByPath({\n formState: { ...getFields() },\n path,\n rowIndex,\n }),\n path,\n rowIndex,\n t,\n })\n\n if (typeof clipboardResult === 'string') {\n toast.error(clipboardResult)\n } else {\n toast.success(t('general:copied'))\n }\n },\n [clientBlocks, path, t, type, getFields],\n )\n\n const pasteRow = useCallback(\n (rowIndex: number) => {\n const pasteArgs = {\n onPaste: (dataFromClipboard: ClipboardPasteData) => {\n const formState = { ...getFields() }\n const newState = mergeFormStateFromClipboard({\n dataFromClipboard,\n formState,\n path,\n rowIndex,\n })\n replaceState(newState)\n setModified(true)\n },\n path,\n schemaBlocks: clientBlocks,\n t,\n }\n\n const clipboardResult = clipboardPaste(pasteArgs)\n\n if (typeof clipboardResult === 'string') {\n toast.error(clipboardResult)\n }\n },\n [clientBlocks, getFields, path, replaceState, setModified, t],\n )\n\n const pasteBlocks = useCallback(\n (dataFromClipboard: ClipboardPasteData) => {\n const formState = { ...getFields() }\n const newState = mergeFormStateFromClipboard({\n dataFromClipboard,\n formState,\n path,\n })\n replaceState(newState)\n setModified(true)\n },\n [getFields, path, replaceState, setModified],\n )\n\n const hasMaxRows = maxRows && rows.length >= maxRows\n\n const fieldErrorCount = errorPaths.length\n const fieldHasErrors = submitted && fieldErrorCount + (valid ? 0 : 1) > 0\n\n const showMinRows = rows.length < minRows || (required && rows.length === 0)\n const showRequired = readOnly && rows.length === 0\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n fieldHasErrors ? `${baseClass}--has-error` : `${baseClass}--has-no-error`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path?.replace(/\\./g, '__')}`}\n >\n {showError && (\n <RenderCustomComponent\n CustomComponent={Error}\n Fallback={<FieldError path={path} showError={showError} />}\n />\n )}\n <header className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-wrap`}>\n <div className={`${baseClass}__heading-with-error`}>\n <h3>\n <RenderCustomComponent\n CustomComponent={Label}\n Fallback={\n <FieldLabel label={label} localized={localized} path={path} required={required} />\n }\n />\n </h3>\n {fieldHasErrors && fieldErrorCount > 0 && (\n <ErrorPill count={fieldErrorCount} i18n={i18n} withMessage />\n )}\n </div>\n <ul className={`${baseClass}__header-actions`}>\n {rows.length > 0 && (\n <Fragment>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(true)}\n type=\"button\"\n >\n {t('fields:collapseAll')}\n </button>\n </li>\n <li>\n <button\n className={`${baseClass}__header-action`}\n onClick={() => toggleCollapseAll(false)}\n type=\"button\"\n >\n {t('fields:showAll')}\n </button>\n </li>\n </Fragment>\n )}\n <li>\n <ClipboardAction\n blocks={clientBlocks}\n className={`${baseClass}__header-action`}\n disableCopy={!(rows?.length > 0)}\n disablePaste={readOnly}\n getDataToCopy={() =>\n reduceFormStateByPath({\n formState: { ...getFields() },\n path,\n })\n }\n onPaste={pasteBlocks}\n path={path}\n type={type}\n />\n </li>\n </ul>\n </div>\n <RenderCustomComponent\n CustomComponent={Description}\n Fallback={<FieldDescription description={description} path={path} />}\n />\n </header>\n {BeforeInput}\n <NullifyLocaleField fieldValue={value} localized={localized} path={path} />\n {(rows.length > 0 || (!valid && (showRequired || showMinRows))) && (\n <DraggableSortable\n className={`${baseClass}__rows`}\n ids={rows.map((row) => row.id)}\n onDragEnd={({ moveFromIndex, moveToIndex }) => moveRow(moveFromIndex, moveToIndex)}\n >\n {rows.map((row, i) => {\n const { blockType, isLoading } = row\n const blockConfig: ClientBlock =\n config.blocksMap[blockType] ??\n ((blockReferences ?? blocks).find(\n (block) => typeof block !== 'string' && block.slug === blockType,\n ) as ClientBlock)\n\n if (blockConfig) {\n const rowPath = `${path}.${i}`\n\n const rowErrorCount = errorPaths.filter((errorPath) =>\n errorPath.startsWith(rowPath + '.'),\n ).length\n\n return (\n <DraggableSortableItem\n disabled={readOnly || disabled || !isSortable}\n id={row.id}\n key={row.id}\n >\n {(draggableSortableItemProps) => (\n <BlockRow\n {...draggableSortableItemProps}\n addRow={addRow}\n block={blockConfig}\n blocks={blockReferences ?? blocks}\n copyRow={copyRow}\n duplicateRow={duplicateRow}\n errorCount={rowErrorCount}\n fields={blockConfig.fields}\n hasMaxRows={hasMaxRows}\n isLoading={isLoading}\n isSortable={isSortable}\n Label={rows?.[i]?.customComponents?.RowLabel}\n labels={labels}\n moveRow={moveRow}\n parentPath={path}\n pasteRow={pasteRow}\n path={rowPath}\n permissions={permissions}\n readOnly={readOnly || disabled}\n removeRow={removeRow}\n row={row}\n rowCount={rows.length}\n rowIndex={i}\n schemaPath={schemaPath + blockConfig.slug}\n setCollapse={setCollapse}\n />\n )}\n </DraggableSortableItem>\n )\n }\n\n return null\n })}\n {!editingDefaultLocale && (\n <React.Fragment>\n {showMinRows && (\n <Banner type=\"error\">\n {t('validation:requiresAtLeast', {\n count: minRows,\n label:\n getTranslation(minRows > 1 ? labels.plural : labels.singular, i18n) ||\n t(minRows > 1 ? 'general:row' : 'general:rows'),\n })}\n </Banner>\n )}\n {showRequired && (\n <Banner>\n {t('validation:fieldHasNo', { label: getTranslation(labels.plural, i18n) })}\n </Banner>\n )}\n </React.Fragment>\n )}\n </DraggableSortable>\n )}\n {!hasMaxRows && (\n <Fragment>\n <DrawerToggler\n className={`${baseClass}__drawer-toggler`}\n disabled={readOnly || disabled}\n slug={drawerSlug}\n >\n <Button\n buttonStyle=\"icon-label\"\n disabled={readOnly || disabled}\n el=\"span\"\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n >\n {t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n </Button>\n </DrawerToggler>\n <BlocksDrawer\n addRow={addRow}\n addRowIndex={rows?.length || 0}\n blocks={blockReferences ?? blocks}\n drawerSlug={drawerSlug}\n labels={labels}\n />\n </Fragment>\n )}\n {AfterInput}\n </div>\n )\n}\n\nexport const BlocksField = withCondition(BlocksFieldComponent)\n"],"mappings":"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","ignoreList":[]}
@@ -8,8 +8,8 @@ export type LivePreviewProviderProps = {
8
8
  height: number;
9
9
  width: number;
10
10
  };
11
+ isLivePreviewEnabled?: boolean;
11
12
  isLivePreviewing: boolean;
12
- operation?: 'create' | 'update';
13
13
  url: string;
14
14
  };
15
15
  export declare const LivePreviewProvider: React.FC<LivePreviewProviderProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAIvE,OAAO,KAA4D,MAAM,OAAO,CAAA;AAUhF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC9C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,gBAAgB,EAAE,OAAO,CAAA;IACzB,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC/B,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAUD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA8OlE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/LivePreview/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAIvE,OAAO,KAA4D,MAAM,OAAO,CAAA;AAUhF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC9C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,gBAAgB,EAAE,OAAO,CAAA;IACzB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAUD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAuOlE,CAAA"}
@@ -21,8 +21,8 @@ const getAbsoluteUrl = url => {
21
21
  export const LivePreviewProvider = ({
22
22
  breakpoints: incomingBreakpoints,
23
23
  children,
24
+ isLivePreviewEnabled,
24
25
  isLivePreviewing: incomingIsLivePreviewing,
25
- operation,
26
26
  url: incomingUrl
27
27
  }) => {
28
28
  const [previewWindowType, setPreviewWindowType] = useState('iframe');
@@ -164,7 +164,6 @@ export const LivePreviewProvider = ({
164
164
  editViewType: isLivePreviewing ? 'live-preview' : 'default'
165
165
  }, true);
166
166
  }, [isLivePreviewing, setPreference, collectionSlug, globalSlug]);
167
- const isLivePreviewEnabled = Boolean(operation !== 'create' && (collectionSlug && config?.admin?.livePreview?.collections?.includes(collectionSlug) || globalSlug && config.admin?.livePreview?.globals?.includes(globalSlug) || entityConfig?.admin?.livePreview));
168
167
  return /*#__PURE__*/_jsx(LivePreviewContext, {
169
168
  value: {
170
169
  appIsReady,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["DndContext","fieldSchemaToJSON","React","useCallback","useEffect","useMemo","useRef","useState","usePopupWindow","useDocumentInfo","usePreferences","useConfig","customCollisionDetection","LivePreviewContext","sizeReducer","getAbsoluteUrl","url","URL","window","location","origin","href","LivePreviewProvider","breakpoints","incomingBreakpoints","children","isLivePreviewing","incomingIsLivePreviewing","operation","incomingUrl","previewWindowType","setPreviewWindowType","setIsLivePreviewing","name","height","label","width","setURL","startsWith","isPopupOpen","openPopupWindow","popupRef","eventType","appIsReady","setAppIsReady","listeningForMessages","setListeningForMessages","collectionSlug","globalSlug","isFirstRender","setPreference","iframeRef","iframeHasLoaded","setIframeHasLoaded","config","getEntityConfig","zoom","setZoom","position","setPosition","x","y","size","setSize","useReducer","measuredDeviceSize","setMeasuredDeviceSize","entityConfig","breakpoint","setBreakpoint","fieldSchemaJSON","fields","handleDragEnd","ev","over","id","newPos","delta","setWidth","type","value","setHeight","foundBreakpoint","find","bp","handleMessage","event","data","ready","addEventListener","removeEventListener","handleWindowChange","newPreviewWindowType","current","editViewType","isLivePreviewEnabled","Boolean","admin","livePreview","collections","includes","globals","_jsx","setToolbarPosition","toolbarPosition","collisionDetection","onDragEnd"],"sources":["../../../src/providers/LivePreview/index.tsx"],"sourcesContent":["'use client'\nimport type { CollectionPreferences, LivePreviewConfig } from 'payload'\n\nimport { DndContext } from '@dnd-kit/core'\nimport { fieldSchemaToJSON } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { usePopupWindow } from '../../hooks/usePopupWindow.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { customCollisionDetection } from './collisionDetection.js'\nimport { LivePreviewContext } from './context.js'\nimport { sizeReducer } from './sizeReducer.js'\n\nexport type LivePreviewProviderProps = {\n appIsReady?: boolean\n breakpoints?: LivePreviewConfig['breakpoints']\n children: React.ReactNode\n deviceSize?: {\n height: number\n width: number\n }\n isLivePreviewing: boolean\n operation?: 'create' | 'update'\n url: string\n}\n\nconst getAbsoluteUrl = (url) => {\n try {\n return new URL(url, window.location.origin).href\n } catch {\n return url\n }\n}\n\nexport const LivePreviewProvider: React.FC<LivePreviewProviderProps> = ({\n breakpoints: incomingBreakpoints,\n children,\n isLivePreviewing: incomingIsLivePreviewing,\n operation,\n url: incomingUrl,\n}) => {\n const [previewWindowType, setPreviewWindowType] = useState<'iframe' | 'popup'>('iframe')\n const [isLivePreviewing, setIsLivePreviewing] = useState(incomingIsLivePreviewing)\n\n const breakpoints: LivePreviewConfig['breakpoints'] = useMemo(\n () => [\n ...(incomingBreakpoints || []),\n {\n name: 'responsive',\n height: '100%',\n label: 'Responsive',\n width: '100%',\n },\n ],\n [incomingBreakpoints],\n )\n\n const [url, setURL] = useState<string>('')\n\n // This needs to be done in a useEffect to prevent hydration issues\n // as the URL may not be absolute when passed in as a prop,\n // and getAbsoluteUrl requires the window object to be available\n useEffect(\n () =>\n setURL(\n incomingUrl?.startsWith('http://') || incomingUrl?.startsWith('https://')\n ? incomingUrl\n : getAbsoluteUrl(incomingUrl),\n ),\n [incomingUrl],\n )\n\n const { isPopupOpen, openPopupWindow, popupRef } = usePopupWindow({\n eventType: 'payload-live-preview',\n url,\n })\n\n const [appIsReady, setAppIsReady] = useState(false)\n const [listeningForMessages, setListeningForMessages] = useState(false)\n\n const { collectionSlug, globalSlug } = useDocumentInfo()\n\n const isFirstRender = useRef(true)\n\n const { setPreference } = usePreferences()\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null)\n\n const [iframeHasLoaded, setIframeHasLoaded] = useState(false)\n\n const { config, getEntityConfig } = useConfig()\n\n const [zoom, setZoom] = useState(1)\n\n const [position, setPosition] = useState({ x: 0, y: 0 })\n\n const [size, setSize] = React.useReducer(sizeReducer, { height: 0, width: 0 })\n\n const [measuredDeviceSize, setMeasuredDeviceSize] = useState({\n height: 0,\n width: 0,\n })\n\n const entityConfig = getEntityConfig({ collectionSlug, globalSlug })\n\n const [breakpoint, setBreakpoint] =\n React.useState<LivePreviewConfig['breakpoints'][0]['name']>('responsive')\n\n const [fieldSchemaJSON] = useState(() => fieldSchemaToJSON(entityConfig?.fields || [], config))\n\n // The toolbar needs to freely drag and drop around the page\n const handleDragEnd = (ev) => {\n // only update position if the toolbar is completely within the preview area\n // otherwise reset it back to the previous position\n // TODO: reset to the nearest edge of the preview area\n if (ev.over && ev.over.id === 'live-preview-area') {\n const newPos = {\n x: position.x + ev.delta.x,\n y: position.y + ev.delta.y,\n }\n\n setPosition(newPos)\n } else {\n // reset\n }\n }\n\n const setWidth = useCallback(\n (width) => {\n setSize({ type: 'width', value: width })\n },\n [setSize],\n )\n\n const setHeight = useCallback(\n (height) => {\n setSize({ type: 'height', value: height })\n },\n [setSize],\n )\n\n // explicitly set new width and height when as new breakpoints are selected\n // exclude `custom` breakpoint as it is handled by the `setWidth` and `setHeight` directly\n useEffect(() => {\n const foundBreakpoint = breakpoints?.find((bp) => bp.name === breakpoint)\n\n if (\n foundBreakpoint &&\n breakpoint !== 'responsive' &&\n breakpoint !== 'custom' &&\n typeof foundBreakpoint?.width === 'number' &&\n typeof foundBreakpoint?.height === 'number'\n ) {\n setSize({\n type: 'reset',\n value: {\n height: foundBreakpoint.height,\n width: foundBreakpoint.width,\n },\n })\n }\n }, [breakpoint, breakpoints])\n\n // Receive the `ready` message from the popup window\n // This indicates that the app is ready to receive `window.postMessage` events\n // This is also the only cross-origin way of detecting when a popup window has loaded\n // Unlike iframe elements which have an `onLoad` handler, there is no way to access `window.open` on popups\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (\n url?.startsWith(event.origin) &&\n event.data &&\n typeof event.data === 'object' &&\n event.data.type === 'payload-live-preview'\n ) {\n if (event.data.ready) {\n setAppIsReady(true)\n }\n }\n }\n\n window.addEventListener('message', handleMessage)\n\n setListeningForMessages(true)\n\n return () => {\n window.removeEventListener('message', handleMessage)\n }\n }, [url, listeningForMessages])\n\n const handleWindowChange = useCallback(\n (type: 'iframe' | 'popup') => {\n setAppIsReady(false)\n setPreviewWindowType(type)\n if (type === 'popup') {\n openPopupWindow()\n }\n },\n [openPopupWindow],\n )\n\n // when the user closes the popup window, switch back to the iframe\n // the `usePopupWindow` reports the `isPopupOpen` state for us to use here\n useEffect(() => {\n const newPreviewWindowType = isPopupOpen ? 'popup' : 'iframe'\n\n if (newPreviewWindowType !== previewWindowType) {\n handleWindowChange('iframe')\n }\n }, [previewWindowType, isPopupOpen, handleWindowChange])\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false\n return\n }\n\n void setPreference<CollectionPreferences>(\n collectionSlug ? `collection-${collectionSlug}` : `global-${globalSlug}`,\n {\n editViewType: isLivePreviewing ? 'live-preview' : 'default',\n },\n true,\n )\n }, [isLivePreviewing, setPreference, collectionSlug, globalSlug])\n\n const isLivePreviewEnabled = Boolean(\n operation !== 'create' &&\n ((collectionSlug && config?.admin?.livePreview?.collections?.includes(collectionSlug)) ||\n (globalSlug && config.admin?.livePreview?.globals?.includes(globalSlug)) ||\n entityConfig?.admin?.livePreview),\n )\n\n return (\n <LivePreviewContext\n value={{\n appIsReady,\n breakpoint,\n breakpoints,\n fieldSchemaJSON,\n iframeHasLoaded,\n iframeRef,\n isLivePreviewEnabled,\n isLivePreviewing,\n isPopupOpen,\n listeningForMessages,\n measuredDeviceSize,\n openPopupWindow,\n popupRef,\n previewWindowType,\n setAppIsReady,\n setBreakpoint,\n setHeight,\n setIframeHasLoaded,\n setIsLivePreviewing,\n setMeasuredDeviceSize,\n setPreviewWindowType: handleWindowChange,\n setSize,\n setToolbarPosition: setPosition,\n setWidth,\n setZoom,\n size,\n toolbarPosition: position,\n url,\n zoom,\n }}\n >\n <DndContext collisionDetection={customCollisionDetection} onDragEnd={handleDragEnd}>\n {children}\n </DndContext>\n </LivePreviewContext>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["DndContext","fieldSchemaToJSON","React","useCallback","useEffect","useMemo","useRef","useState","usePopupWindow","useDocumentInfo","usePreferences","useConfig","customCollisionDetection","LivePreviewContext","sizeReducer","getAbsoluteUrl","url","URL","window","location","origin","href","LivePreviewProvider","breakpoints","incomingBreakpoints","children","isLivePreviewEnabled","isLivePreviewing","incomingIsLivePreviewing","incomingUrl","previewWindowType","setPreviewWindowType","setIsLivePreviewing","name","height","label","width","setURL","startsWith","isPopupOpen","openPopupWindow","popupRef","eventType","appIsReady","setAppIsReady","listeningForMessages","setListeningForMessages","collectionSlug","globalSlug","isFirstRender","setPreference","iframeRef","iframeHasLoaded","setIframeHasLoaded","config","getEntityConfig","zoom","setZoom","position","setPosition","x","y","size","setSize","useReducer","measuredDeviceSize","setMeasuredDeviceSize","entityConfig","breakpoint","setBreakpoint","fieldSchemaJSON","fields","handleDragEnd","ev","over","id","newPos","delta","setWidth","type","value","setHeight","foundBreakpoint","find","bp","handleMessage","event","data","ready","addEventListener","removeEventListener","handleWindowChange","newPreviewWindowType","current","editViewType","_jsx","setToolbarPosition","toolbarPosition","collisionDetection","onDragEnd"],"sources":["../../../src/providers/LivePreview/index.tsx"],"sourcesContent":["'use client'\nimport type { CollectionPreferences, LivePreviewConfig } from 'payload'\n\nimport { DndContext } from '@dnd-kit/core'\nimport { fieldSchemaToJSON } from 'payload/shared'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { usePopupWindow } from '../../hooks/usePopupWindow.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { usePreferences } from '../../providers/Preferences/index.js'\nimport { useConfig } from '../Config/index.js'\nimport { customCollisionDetection } from './collisionDetection.js'\nimport { LivePreviewContext } from './context.js'\nimport { sizeReducer } from './sizeReducer.js'\n\nexport type LivePreviewProviderProps = {\n appIsReady?: boolean\n breakpoints?: LivePreviewConfig['breakpoints']\n children: React.ReactNode\n deviceSize?: {\n height: number\n width: number\n }\n isLivePreviewEnabled?: boolean\n isLivePreviewing: boolean\n url: string\n}\n\nconst getAbsoluteUrl = (url) => {\n try {\n return new URL(url, window.location.origin).href\n } catch {\n return url\n }\n}\n\nexport const LivePreviewProvider: React.FC<LivePreviewProviderProps> = ({\n breakpoints: incomingBreakpoints,\n children,\n isLivePreviewEnabled,\n isLivePreviewing: incomingIsLivePreviewing,\n url: incomingUrl,\n}) => {\n const [previewWindowType, setPreviewWindowType] = useState<'iframe' | 'popup'>('iframe')\n const [isLivePreviewing, setIsLivePreviewing] = useState(incomingIsLivePreviewing)\n\n const breakpoints: LivePreviewConfig['breakpoints'] = useMemo(\n () => [\n ...(incomingBreakpoints || []),\n {\n name: 'responsive',\n height: '100%',\n label: 'Responsive',\n width: '100%',\n },\n ],\n [incomingBreakpoints],\n )\n\n const [url, setURL] = useState<string>('')\n\n // This needs to be done in a useEffect to prevent hydration issues\n // as the URL may not be absolute when passed in as a prop,\n // and getAbsoluteUrl requires the window object to be available\n useEffect(\n () =>\n setURL(\n incomingUrl?.startsWith('http://') || incomingUrl?.startsWith('https://')\n ? incomingUrl\n : getAbsoluteUrl(incomingUrl),\n ),\n [incomingUrl],\n )\n\n const { isPopupOpen, openPopupWindow, popupRef } = usePopupWindow({\n eventType: 'payload-live-preview',\n url,\n })\n\n const [appIsReady, setAppIsReady] = useState(false)\n const [listeningForMessages, setListeningForMessages] = useState(false)\n\n const { collectionSlug, globalSlug } = useDocumentInfo()\n\n const isFirstRender = useRef(true)\n\n const { setPreference } = usePreferences()\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null)\n\n const [iframeHasLoaded, setIframeHasLoaded] = useState(false)\n\n const { config, getEntityConfig } = useConfig()\n\n const [zoom, setZoom] = useState(1)\n\n const [position, setPosition] = useState({ x: 0, y: 0 })\n\n const [size, setSize] = React.useReducer(sizeReducer, { height: 0, width: 0 })\n\n const [measuredDeviceSize, setMeasuredDeviceSize] = useState({\n height: 0,\n width: 0,\n })\n\n const entityConfig = getEntityConfig({ collectionSlug, globalSlug })\n\n const [breakpoint, setBreakpoint] =\n React.useState<LivePreviewConfig['breakpoints'][0]['name']>('responsive')\n\n const [fieldSchemaJSON] = useState(() => fieldSchemaToJSON(entityConfig?.fields || [], config))\n\n // The toolbar needs to freely drag and drop around the page\n const handleDragEnd = (ev) => {\n // only update position if the toolbar is completely within the preview area\n // otherwise reset it back to the previous position\n // TODO: reset to the nearest edge of the preview area\n if (ev.over && ev.over.id === 'live-preview-area') {\n const newPos = {\n x: position.x + ev.delta.x,\n y: position.y + ev.delta.y,\n }\n\n setPosition(newPos)\n } else {\n // reset\n }\n }\n\n const setWidth = useCallback(\n (width) => {\n setSize({ type: 'width', value: width })\n },\n [setSize],\n )\n\n const setHeight = useCallback(\n (height) => {\n setSize({ type: 'height', value: height })\n },\n [setSize],\n )\n\n // explicitly set new width and height when as new breakpoints are selected\n // exclude `custom` breakpoint as it is handled by the `setWidth` and `setHeight` directly\n useEffect(() => {\n const foundBreakpoint = breakpoints?.find((bp) => bp.name === breakpoint)\n\n if (\n foundBreakpoint &&\n breakpoint !== 'responsive' &&\n breakpoint !== 'custom' &&\n typeof foundBreakpoint?.width === 'number' &&\n typeof foundBreakpoint?.height === 'number'\n ) {\n setSize({\n type: 'reset',\n value: {\n height: foundBreakpoint.height,\n width: foundBreakpoint.width,\n },\n })\n }\n }, [breakpoint, breakpoints])\n\n // Receive the `ready` message from the popup window\n // This indicates that the app is ready to receive `window.postMessage` events\n // This is also the only cross-origin way of detecting when a popup window has loaded\n // Unlike iframe elements which have an `onLoad` handler, there is no way to access `window.open` on popups\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (\n url?.startsWith(event.origin) &&\n event.data &&\n typeof event.data === 'object' &&\n event.data.type === 'payload-live-preview'\n ) {\n if (event.data.ready) {\n setAppIsReady(true)\n }\n }\n }\n\n window.addEventListener('message', handleMessage)\n\n setListeningForMessages(true)\n\n return () => {\n window.removeEventListener('message', handleMessage)\n }\n }, [url, listeningForMessages])\n\n const handleWindowChange = useCallback(\n (type: 'iframe' | 'popup') => {\n setAppIsReady(false)\n setPreviewWindowType(type)\n if (type === 'popup') {\n openPopupWindow()\n }\n },\n [openPopupWindow],\n )\n\n // when the user closes the popup window, switch back to the iframe\n // the `usePopupWindow` reports the `isPopupOpen` state for us to use here\n useEffect(() => {\n const newPreviewWindowType = isPopupOpen ? 'popup' : 'iframe'\n\n if (newPreviewWindowType !== previewWindowType) {\n handleWindowChange('iframe')\n }\n }, [previewWindowType, isPopupOpen, handleWindowChange])\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false\n return\n }\n\n void setPreference<CollectionPreferences>(\n collectionSlug ? `collection-${collectionSlug}` : `global-${globalSlug}`,\n {\n editViewType: isLivePreviewing ? 'live-preview' : 'default',\n },\n true,\n )\n }, [isLivePreviewing, setPreference, collectionSlug, globalSlug])\n\n return (\n <LivePreviewContext\n value={{\n appIsReady,\n breakpoint,\n breakpoints,\n fieldSchemaJSON,\n iframeHasLoaded,\n iframeRef,\n isLivePreviewEnabled,\n isLivePreviewing,\n isPopupOpen,\n listeningForMessages,\n measuredDeviceSize,\n openPopupWindow,\n popupRef,\n previewWindowType,\n setAppIsReady,\n setBreakpoint,\n setHeight,\n setIframeHasLoaded,\n setIsLivePreviewing,\n setMeasuredDeviceSize,\n setPreviewWindowType: handleWindowChange,\n setSize,\n setToolbarPosition: setPosition,\n setWidth,\n setZoom,\n size,\n toolbarPosition: position,\n url,\n zoom,\n }}\n >\n <DndContext collisionDetection={customCollisionDetection} onDragEnd={handleDragEnd}>\n {children}\n </DndContext>\n </LivePreviewContext>\n )\n}\n"],"mappings":"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","ignoreList":[]}