diff --git a/packages/next/package.json b/packages/next/package.json index 2e483fd5aac..cb88f652faa 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -65,6 +65,11 @@ "types": "./src/exports/views.ts", "default": "./src/exports/views.ts" }, + "./views/diff": { + "import": "./src/exports/views/diff.ts", + "types": "./src/exports/views/diff.ts", + "default": "./src/exports/views/diff.ts" + }, "./client": { "import": "./src/exports/client.ts", "types": "./src/exports/client.ts", @@ -191,6 +196,11 @@ "types": "./dist/exports/views.d.ts", "default": "./dist/exports/views.js" }, + "./views/diff": { + "import": "./dist/exports/views/diff.js", + "types": "./dist/exports/views/diff.d.ts", + "default": "./dist/exports/views/diff.js" + }, "./client": { "import": "./dist/exports/client.js", "types": "./dist/exports/client.d.ts", diff --git a/packages/next/src/exports/views/diff.ts b/packages/next/src/exports/views/diff.ts new file mode 100644 index 00000000000..553a24d4a2a --- /dev/null +++ b/packages/next/src/exports/views/diff.ts @@ -0,0 +1,32 @@ +/** + * Public re-exports of the Versions diff rendering surface. + * + * This subpath (`@payloadcms/next/views/diff`) gives plugin and integrator code + * access to the same field-by-field diff UI used by Payload's built-in Versions + * view, so consumers can build "review changes" / custom diff drawers without + * vendoring or deep-importing internal modules. + * + * The internal Versions view (`packages/next/src/views/Version/index.tsx`) + * imports from this same entry, so internal and external consumers share a + * single source of truth and the public surface cannot silently drift. + */ + +export { + buildVersionFields, + type BuildVersionFieldsArgs, +} from '../../views/Version/RenderFieldsToDiff/buildVersionFields.js' +export { DiffCollapser } from '../../views/Version/RenderFieldsToDiff/DiffCollapser/index.js' +// Re-export the keyed per-field diff component map under both the internal name +// and a clearer public alias, for `RenderDiff`'s `customDiffComponents` consumers. +export { diffComponents } from '../../views/Version/RenderFieldsToDiff/fields/index.js' +export { diffComponents as defaultDiffComponents } from '../../views/Version/RenderFieldsToDiff/fields/index.js' + +export { RenderDiff } from '../../views/Version/RenderFieldsToDiff/index.js' +export { RenderVersionFieldsToDiff } from '../../views/Version/RenderFieldsToDiff/RenderVersionFieldsToDiff.js' + +export { + countChangedFields, + countChangedFieldsInRows, +} from '../../views/Version/RenderFieldsToDiff/utilities/countChangedFields.js' +export { fieldHasChanges } from '../../views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.js' +export { getFieldsForRowComparison } from '../../views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js' diff --git a/test/_community/exports.test.ts b/test/_community/exports.test.ts new file mode 100644 index 00000000000..471e5ac83d9 --- /dev/null +++ b/test/_community/exports.test.ts @@ -0,0 +1,24 @@ +import { describe, expect, it } from 'vitest' + +describe('@payloadcms/next/views/diff exports', () => { + it('exposes all expected named exports', async () => { + const mod: Record = await import('@payloadcms/next/views/diff') + + const expected = [ + 'RenderDiff', + 'buildVersionFields', + 'RenderVersionFieldsToDiff', + 'DiffCollapser', + 'diffComponents', + 'defaultDiffComponents', + 'countChangedFields', + 'countChangedFieldsInRows', + 'fieldHasChanges', + 'getFieldsForRowComparison', + ] + + for (const name of expected) { + expect(mod[name], `Missing export: ${name}`).toBeDefined() + } + }) +})