@payloadcms/ui 4.0.0-internal.9726517 → 4.0.0-internal.add4c47

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.
@@ -1,11 +1,35 @@
1
- import type { ServerAdapter, ServerFunctionHandler } from 'payload';
1
+ import type { ImportMap, InitReqResult, SanitizedConfig, ServerFunction, ServerFunctionHandler } from 'payload';
2
+ type InitReq = (args: {
3
+ configPromise: Promise<SanitizedConfig> | SanitizedConfig;
4
+ importMap: ImportMap;
5
+ }) => Promise<InitReqResult>;
6
+ type CreateServerFunctionHandlerArgs = {
7
+ /**
8
+ * Framework-specific request initialization. The adapter closes over its own
9
+ * `ServerAdapter` / request source (Next.js: `initReq` + `nextServerAdapter`;
10
+ * TanStack Start: its `getRequest()`-based `initReq`).
11
+ */
12
+ initReq: InitReq;
13
+ /**
14
+ * Additional handlers registered alongside `sharedServerFunctions`. Reserved
15
+ * for adapter-specific functions; today both adapters run the shared set only.
16
+ */
17
+ serverFunctions?: Record<string, ServerFunction<any, any>>;
18
+ /**
19
+ * Post-processes each handler's return value before it goes over the wire.
20
+ * The TanStack Start adapter passes `serializeForRsc` to convert React
21
+ * elements into RSC handles; Next.js ships them natively and omits this.
22
+ */
23
+ transformResult?: (result: unknown) => Promise<unknown> | unknown;
24
+ };
2
25
  /**
3
- * Factory for the framework-agnostic `handleServerFunctions` entry point. The
4
- * caller (a framework adapter, e.g. `@payloadcms/next`) supplies the
5
- * `ServerAdapter` once, and the returned handler can be wired directly into
6
- * the framework's server-action dispatcher.
26
+ * Factory for the framework-agnostic `handleServerFunctions` entry point.
27
+ *
28
+ * All adapters dispatch from the shared registry (`sharedServerFunctions`) and
29
+ * differ only in the two injected hooks below — `initReq` and `transformResult`
30
+ * — so there is a single dispatch implementation and the handler sets cannot
31
+ * drift between frameworks.
7
32
  */
8
- export declare const createServerFunctionHandler: ({ serverAdapter, }: {
9
- serverAdapter: ServerAdapter;
10
- }) => ServerFunctionHandler;
33
+ export declare const createServerFunctionHandler: ({ initReq, serverFunctions, transformResult, }: CreateServerFunctionHandlerArgs) => ServerFunctionHandler;
34
+ export {};
11
35
  //# sourceMappingURL=handleServerFunctions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleServerFunctions.d.ts","sourceRoot":"","sources":["../../src/utilities/handleServerFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EAEb,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAgChB;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,uBAErC;IACD,aAAa,EAAE,aAAa,CAAA;CAC7B,KAAG,qBAkCH,CAAA"}
1
+ {"version":3,"file":"handleServerFunctions.d.ts","sourceRoot":"","sources":["../../src/utilities/handleServerFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EACb,eAAe,EACf,cAAc,EACd,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAIhB,KAAK,OAAO,GAAG,CAAC,IAAI,EAAE;IACpB,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAA;IACzD,SAAS,EAAE,SAAS,CAAA;CACrB,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;AAE5B,KAAK,+BAA+B,GAAG;IACrC;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAC1D;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;CAClE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,mDAIrC,+BAA+B,KAAG,qBAmCpC,CAAA"}
@@ -1,40 +1,21 @@
1
- import { renderTabHandler } from '../elements/Nav/SidebarTabs/renderTabServerFn.js';
2
- import { _internal_renderFieldHandler } from '../forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js';
3
- import { getDefaultLayoutHandler, renderWidgetHandler } from '../views/Dashboard/serverFunctions.js';
4
- import { renderDocumentHandler } from '../views/Document/handleServerFunction.js';
5
- import { renderDocumentSlotsHandler } from '../views/Document/renderDocumentSlots.js';
6
- import { renderListHandler } from '../views/List/handleServerFunction.js';
7
- import { buildFormStateHandler } from './buildFormState.js';
8
- import { buildTableStateHandler } from './buildTableState.js';
9
- import { copyDataFromLocaleHandler } from './copyDataFromLocale.js';
10
- import { initReq } from './initReq.js';
11
- import { schedulePublishHandler } from './schedulePublishHandler.js';
12
- import { slugifyHandler } from './slugify.js';
13
- import { switchLanguageHandler } from './switchLanguageHandler.js';
14
- const baseServerFunctions = {
15
- 'copy-data-from-locale': copyDataFromLocaleHandler,
16
- 'form-state': buildFormStateHandler,
17
- 'get-default-layout': getDefaultLayoutHandler,
18
- 'render-document': renderDocumentHandler,
19
- 'render-document-slots': renderDocumentSlotsHandler,
20
- 'render-field': _internal_renderFieldHandler,
21
- 'render-list': renderListHandler,
22
- 'render-tab': renderTabHandler,
23
- 'render-widget': renderWidgetHandler,
24
- 'schedule-publish': schedulePublishHandler,
25
- slugify: slugifyHandler,
26
- 'switch-language': switchLanguageHandler,
27
- 'table-state': buildTableStateHandler
28
- };
1
+ import { sharedServerFunctions } from './serverFunctionRegistry.js';
29
2
  /**
30
- * Factory for the framework-agnostic `handleServerFunctions` entry point. The
31
- * caller (a framework adapter, e.g. `@payloadcms/next`) supplies the
32
- * `ServerAdapter` once, and the returned handler can be wired directly into
33
- * the framework's server-action dispatcher.
3
+ * Factory for the framework-agnostic `handleServerFunctions` entry point.
4
+ *
5
+ * All adapters dispatch from the shared registry (`sharedServerFunctions`) and
6
+ * differ only in the two injected hooks below — `initReq` and `transformResult`
7
+ * — so there is a single dispatch implementation and the handler sets cannot
8
+ * drift between frameworks.
34
9
  */
35
10
  export const createServerFunctionHandler = ({
36
- serverAdapter
11
+ initReq,
12
+ serverFunctions,
13
+ transformResult
37
14
  }) => {
15
+ const baseServerFunctions = serverFunctions ? {
16
+ ...sharedServerFunctions,
17
+ ...serverFunctions
18
+ } : sharedServerFunctions;
38
19
  return async args => {
39
20
  const {
40
21
  name: fnKey,
@@ -50,9 +31,7 @@ export const createServerFunctionHandler = ({
50
31
  req
51
32
  } = await initReq({
52
33
  configPromise,
53
- importMap,
54
- key: 'RootLayout',
55
- serverAdapter
34
+ importMap
56
35
  });
57
36
  const augmentedArgs = {
58
37
  ...fnArgs,
@@ -66,7 +45,8 @@ export const createServerFunctionHandler = ({
66
45
  if (!fn) {
67
46
  throw new Error(`Unknown Server Function: ${fnKey}`);
68
47
  }
69
- return fn(augmentedArgs);
48
+ const result = await fn(augmentedArgs);
49
+ return transformResult ? await transformResult(result) : result;
70
50
  };
71
51
  };
72
52
  //# sourceMappingURL=handleServerFunctions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleServerFunctions.js","names":["renderTabHandler","_internal_renderFieldHandler","getDefaultLayoutHandler","renderWidgetHandler","renderDocumentHandler","renderDocumentSlotsHandler","renderListHandler","buildFormStateHandler","buildTableStateHandler","copyDataFromLocaleHandler","initReq","schedulePublishHandler","slugifyHandler","switchLanguageHandler","baseServerFunctions","slugify","createServerFunctionHandler","serverAdapter","args","name","fnKey","fnArgs","config","configPromise","importMap","serverFunctions","extraServerFunctions","cookies","locale","permissions","req","key","augmentedArgs","fn","Error"],"sources":["../../src/utilities/handleServerFunctions.ts"],"sourcesContent":["import type {\n DefaultServerFunctionArgs,\n ServerAdapter,\n ServerFunction,\n ServerFunctionHandler,\n} from 'payload'\n\nimport { renderTabHandler } from '../elements/Nav/SidebarTabs/renderTabServerFn.js'\nimport { _internal_renderFieldHandler } from '../forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js'\nimport { getDefaultLayoutHandler, renderWidgetHandler } from '../views/Dashboard/serverFunctions.js'\nimport { renderDocumentHandler } from '../views/Document/handleServerFunction.js'\nimport { renderDocumentSlotsHandler } from '../views/Document/renderDocumentSlots.js'\nimport { renderListHandler } from '../views/List/handleServerFunction.js'\nimport { buildFormStateHandler } from './buildFormState.js'\nimport { buildTableStateHandler } from './buildTableState.js'\nimport { copyDataFromLocaleHandler } from './copyDataFromLocale.js'\nimport { initReq } from './initReq.js'\nimport { schedulePublishHandler } from './schedulePublishHandler.js'\nimport { slugifyHandler } from './slugify.js'\nimport { switchLanguageHandler } from './switchLanguageHandler.js'\n\nconst baseServerFunctions: Record<string, ServerFunction<any, any>> = {\n 'copy-data-from-locale': copyDataFromLocaleHandler,\n 'form-state': buildFormStateHandler,\n 'get-default-layout': getDefaultLayoutHandler,\n 'render-document': renderDocumentHandler,\n 'render-document-slots': renderDocumentSlotsHandler,\n 'render-field': _internal_renderFieldHandler,\n 'render-list': renderListHandler,\n 'render-tab': renderTabHandler,\n 'render-widget': renderWidgetHandler,\n 'schedule-publish': schedulePublishHandler,\n slugify: slugifyHandler,\n 'switch-language': switchLanguageHandler,\n 'table-state': buildTableStateHandler,\n}\n\n/**\n * Factory for the framework-agnostic `handleServerFunctions` entry point. The\n * caller (a framework adapter, e.g. `@payloadcms/next`) supplies the\n * `ServerAdapter` once, and the returned handler can be wired directly into\n * the framework's server-action dispatcher.\n */\nexport const createServerFunctionHandler = ({\n serverAdapter,\n}: {\n serverAdapter: ServerAdapter\n}): ServerFunctionHandler => {\n return async (args) => {\n const {\n name: fnKey,\n args: fnArgs,\n config: configPromise,\n importMap,\n serverFunctions: extraServerFunctions,\n } = args\n\n const { cookies, locale, permissions, req } = await initReq({\n configPromise,\n importMap,\n key: 'RootLayout',\n serverAdapter,\n })\n\n const augmentedArgs: DefaultServerFunctionArgs = {\n ...fnArgs,\n cookies,\n importMap,\n locale,\n permissions,\n req,\n }\n\n const fn = extraServerFunctions?.[fnKey] || baseServerFunctions[fnKey]\n\n if (!fn) {\n throw new Error(`Unknown Server Function: ${fnKey}`)\n }\n\n return fn(augmentedArgs)\n }\n}\n"],"mappings":"AAOA,SAASA,gBAAgB,QAAQ;AACjC,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,uBAAuB,EAAEC,mBAAmB,QAAQ;AAC7D,SAASC,qBAAqB,QAAQ;AACtC,SAASC,0BAA0B,QAAQ;AAC3C,SAASC,iBAAiB,QAAQ;AAClC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,sBAAsB,QAAQ;AACvC,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,OAAO,QAAQ;AACxB,SAASC,sBAAsB,QAAQ;AACvC,SAASC,cAAc,QAAQ;AAC/B,SAASC,qBAAqB,QAAQ;AAEtC,MAAMC,mBAAA,GAAgE;EACpE,yBAAyBL,yBAAA;EACzB,cAAcF,qBAAA;EACd,sBAAsBL,uBAAA;EACtB,mBAAmBE,qBAAA;EACnB,yBAAyBC,0BAAA;EACzB,gBAAgBJ,4BAAA;EAChB,eAAeK,iBAAA;EACf,cAAcN,gBAAA;EACd,iBAAiBG,mBAAA;EACjB,oBAAoBQ,sBAAA;EACpBI,OAAA,EAASH,cAAA;EACT,mBAAmBC,qBAAA;EACnB,eAAeL;AACjB;AAEA;;;;;;AAMA,OAAO,MAAMQ,2BAAA,GAA8BA,CAAC;EAC1CC;AAAa,CAGd;EACC,OAAO,MAAOC,IAAA;IACZ,MAAM;MACJC,IAAA,EAAMC,KAAK;MACXF,IAAA,EAAMG,MAAM;MACZC,MAAA,EAAQC,aAAa;MACrBC,SAAS;MACTC,eAAA,EAAiBC;IAAoB,CACtC,GAAGR,IAAA;IAEJ,MAAM;MAAES,OAAO;MAAEC,MAAM;MAAEC,WAAW;MAAEC;IAAG,CAAE,GAAG,MAAMpB,OAAA,CAAQ;MAC1Da,aAAA;MACAC,SAAA;MACAO,GAAA,EAAK;MACLd;IACF;IAEA,MAAMe,aAAA,GAA2C;MAC/C,GAAGX,MAAM;MACTM,OAAA;MACAH,SAAA;MACAI,MAAA;MACAC,WAAA;MACAC;IACF;IAEA,MAAMG,EAAA,GAAKP,oBAAA,GAAuBN,KAAA,CAAM,IAAIN,mBAAmB,CAACM,KAAA,CAAM;IAEtE,IAAI,CAACa,EAAA,EAAI;MACP,MAAM,IAAIC,KAAA,CAAM,4BAA4Bd,KAAA,EAAO;IACrD;IAEA,OAAOa,EAAA,CAAGD,aAAA;EACZ;AACF","ignoreList":[]}
1
+ {"version":3,"file":"handleServerFunctions.js","names":["sharedServerFunctions","createServerFunctionHandler","initReq","serverFunctions","transformResult","baseServerFunctions","args","name","fnKey","fnArgs","config","configPromise","importMap","extraServerFunctions","cookies","locale","permissions","req","augmentedArgs","fn","Error","result"],"sources":["../../src/utilities/handleServerFunctions.ts"],"sourcesContent":["import type {\n DefaultServerFunctionArgs,\n ImportMap,\n InitReqResult,\n SanitizedConfig,\n ServerFunction,\n ServerFunctionHandler,\n} from 'payload'\n\nimport { sharedServerFunctions } from './serverFunctionRegistry.js'\n\ntype InitReq = (args: {\n configPromise: Promise<SanitizedConfig> | SanitizedConfig\n importMap: ImportMap\n}) => Promise<InitReqResult>\n\ntype CreateServerFunctionHandlerArgs = {\n /**\n * Framework-specific request initialization. The adapter closes over its own\n * `ServerAdapter` / request source (Next.js: `initReq` + `nextServerAdapter`;\n * TanStack Start: its `getRequest()`-based `initReq`).\n */\n initReq: InitReq\n /**\n * Additional handlers registered alongside `sharedServerFunctions`. Reserved\n * for adapter-specific functions; today both adapters run the shared set only.\n */\n serverFunctions?: Record<string, ServerFunction<any, any>>\n /**\n * Post-processes each handler's return value before it goes over the wire.\n * The TanStack Start adapter passes `serializeForRsc` to convert React\n * elements into RSC handles; Next.js ships them natively and omits this.\n */\n transformResult?: (result: unknown) => Promise<unknown> | unknown\n}\n\n/**\n * Factory for the framework-agnostic `handleServerFunctions` entry point.\n *\n * All adapters dispatch from the shared registry (`sharedServerFunctions`) and\n * differ only in the two injected hooks below — `initReq` and `transformResult`\n * so there is a single dispatch implementation and the handler sets cannot\n * drift between frameworks.\n */\nexport const createServerFunctionHandler = ({\n initReq,\n serverFunctions,\n transformResult,\n}: CreateServerFunctionHandlerArgs): ServerFunctionHandler => {\n const baseServerFunctions: Record<string, ServerFunction<any, any>> = serverFunctions\n ? { ...sharedServerFunctions, ...serverFunctions }\n : sharedServerFunctions\n\n return async (args) => {\n const {\n name: fnKey,\n args: fnArgs,\n config: configPromise,\n importMap,\n serverFunctions: extraServerFunctions,\n } = args\n\n const { cookies, locale, permissions, req } = await initReq({ configPromise, importMap })\n\n const augmentedArgs: DefaultServerFunctionArgs = {\n ...fnArgs,\n cookies,\n importMap,\n locale,\n permissions,\n req,\n }\n\n const fn = extraServerFunctions?.[fnKey] || baseServerFunctions[fnKey]\n\n if (!fn) {\n throw new Error(`Unknown Server Function: ${fnKey}`)\n }\n\n const result = await fn(augmentedArgs)\n\n return transformResult ? await transformResult(result) : result\n }\n}\n"],"mappings":"AASA,SAASA,qBAAqB,QAAQ;AA2BtC;;;;;;;;AAQA,OAAO,MAAMC,2BAAA,GAA8BA,CAAC;EAC1CC,OAAO;EACPC,eAAe;EACfC;AAAe,CACiB;EAChC,MAAMC,mBAAA,GAAgEF,eAAA,GAClE;IAAE,GAAGH,qBAAqB;IAAE,GAAGG;EAAgB,IAC/CH,qBAAA;EAEJ,OAAO,MAAOM,IAAA;IACZ,MAAM;MACJC,IAAA,EAAMC,KAAK;MACXF,IAAA,EAAMG,MAAM;MACZC,MAAA,EAAQC,aAAa;MACrBC,SAAS;MACTT,eAAA,EAAiBU;IAAoB,CACtC,GAAGP,IAAA;IAEJ,MAAM;MAAEQ,OAAO;MAAEC,MAAM;MAAEC,WAAW;MAAEC;IAAG,CAAE,GAAG,MAAMf,OAAA,CAAQ;MAAES,aAAA;MAAeC;IAAU;IAEvF,MAAMM,aAAA,GAA2C;MAC/C,GAAGT,MAAM;MACTK,OAAA;MACAF,SAAA;MACAG,MAAA;MACAC,WAAA;MACAC;IACF;IAEA,MAAME,EAAA,GAAKN,oBAAA,GAAuBL,KAAA,CAAM,IAAIH,mBAAmB,CAACG,KAAA,CAAM;IAEtE,IAAI,CAACW,EAAA,EAAI;MACP,MAAM,IAAIC,KAAA,CAAM,4BAA4BZ,KAAA,EAAO;IACrD;IAEA,MAAMa,MAAA,GAAS,MAAMF,EAAA,CAAGD,aAAA;IAExB,OAAOd,eAAA,GAAkB,MAAMA,eAAA,CAAgBiB,MAAA,IAAUA,MAAA;EAC3D;AACF","ignoreList":[]}
@@ -1,13 +1,18 @@
1
1
  import type { ServerFunction } from 'payload';
2
2
  /**
3
- * Framework-agnostic server function handlers shared across all adapters.
3
+ * The complete, framework-agnostic set of Payload server functions.
4
4
  *
5
- * Each handler returns a value that may contain React elements (e.g.
6
- * `customComponents` inside form state, the `Document` / `List` nodes returned
7
- * by render-document / render-list). Adapters are expected to ship those over
8
- * the wire as RSC payloads — Next.js's runtime does this natively, while the
9
- * TanStack Start adapter pipes the result through `serializeForRsc` to convert
10
- * elements into `renderServerComponent` handles.
5
+ * Every adapter (`@payloadcms/next`, `@payloadcms/tanstack-start`) dispatches
6
+ * from this single registry via `createServerFunctionHandler`, so a handler
7
+ * added here reaches every framework and the adapter lists can't drift.
8
+ *
9
+ * Handlers may return values containing React elements (e.g. `customComponents`
10
+ * inside form state, the `Document` / `List` nodes from render-document /
11
+ * render-list, the render-field / render-widget output). Adapters ship those
12
+ * over the wire as RSC payloads: Next.js does this natively, while the TanStack
13
+ * Start adapter passes a `transformResult` (`serializeForRsc`) to
14
+ * `createServerFunctionHandler` that converts elements into
15
+ * `renderServerComponent` handles.
11
16
  */
12
17
  export declare const sharedServerFunctions: Record<string, ServerFunction<any, any>>;
13
18
  //# sourceMappingURL=serverFunctionRegistry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serverFunctionRegistry.d.ts","sourceRoot":"","sources":["../../src/utilities/serverFunctionRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAS7C;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAO1E,CAAA"}
1
+ {"version":3,"file":"serverFunctionRegistry.d.ts","sourceRoot":"","sources":["../../src/utilities/serverFunctionRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAe7C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAc1E,CAAA"}
@@ -1,25 +1,43 @@
1
+ import { renderTabHandler } from '../elements/Nav/SidebarTabs/renderTabServerFn.js';
2
+ import { _internal_renderFieldHandler } from '../forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js';
3
+ import { getDefaultLayoutHandler, renderWidgetHandler } from '../views/Dashboard/serverFunctions.js';
1
4
  import { renderDocumentHandler } from '../views/Document/handleServerFunction.js';
5
+ import { renderDocumentSlotsHandler } from '../views/Document/renderDocumentSlots.js';
2
6
  import { renderListHandler } from '../views/List/handleServerFunction.js';
3
7
  import { buildFormStateHandler } from './buildFormState.js';
4
8
  import { buildTableStateHandler } from './buildTableState.js';
5
9
  import { copyDataFromLocaleHandler } from './copyDataFromLocale.js';
6
10
  import { schedulePublishHandler } from './schedulePublishHandler.js';
11
+ import { slugifyHandler } from './slugify.js';
12
+ import { switchLanguageHandler } from './switchLanguageHandler.js';
7
13
  /**
8
- * Framework-agnostic server function handlers shared across all adapters.
14
+ * The complete, framework-agnostic set of Payload server functions.
9
15
  *
10
- * Each handler returns a value that may contain React elements (e.g.
11
- * `customComponents` inside form state, the `Document` / `List` nodes returned
12
- * by render-document / render-list). Adapters are expected to ship those over
13
- * the wire as RSC payloads — Next.js's runtime does this natively, while the
14
- * TanStack Start adapter pipes the result through `serializeForRsc` to convert
15
- * elements into `renderServerComponent` handles.
16
+ * Every adapter (`@payloadcms/next`, `@payloadcms/tanstack-start`) dispatches
17
+ * from this single registry via `createServerFunctionHandler`, so a handler
18
+ * added here reaches every framework and the adapter lists can't drift.
19
+ *
20
+ * Handlers may return values containing React elements (e.g. `customComponents`
21
+ * inside form state, the `Document` / `List` nodes from render-document /
22
+ * render-list, the render-field / render-widget output). Adapters ship those
23
+ * over the wire as RSC payloads: Next.js does this natively, while the TanStack
24
+ * Start adapter passes a `transformResult` (`serializeForRsc`) to
25
+ * `createServerFunctionHandler` that converts elements into
26
+ * `renderServerComponent` handles.
16
27
  */
17
28
  export const sharedServerFunctions = {
18
29
  'copy-data-from-locale': copyDataFromLocaleHandler,
19
30
  'form-state': buildFormStateHandler,
31
+ 'get-default-layout': getDefaultLayoutHandler,
20
32
  'render-document': renderDocumentHandler,
33
+ 'render-document-slots': renderDocumentSlotsHandler,
34
+ 'render-field': _internal_renderFieldHandler,
21
35
  'render-list': renderListHandler,
36
+ 'render-tab': renderTabHandler,
37
+ 'render-widget': renderWidgetHandler,
22
38
  'schedule-publish': schedulePublishHandler,
39
+ slugify: slugifyHandler,
40
+ 'switch-language': switchLanguageHandler,
23
41
  'table-state': buildTableStateHandler
24
42
  };
25
43
  //# sourceMappingURL=serverFunctionRegistry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serverFunctionRegistry.js","names":["renderDocumentHandler","renderListHandler","buildFormStateHandler","buildTableStateHandler","copyDataFromLocaleHandler","schedulePublishHandler","sharedServerFunctions"],"sources":["../../src/utilities/serverFunctionRegistry.ts"],"sourcesContent":["import type { ServerFunction } from 'payload'\n\nimport { renderDocumentHandler } from '../views/Document/handleServerFunction.js'\nimport { renderListHandler } from '../views/List/handleServerFunction.js'\nimport { buildFormStateHandler } from './buildFormState.js'\nimport { buildTableStateHandler } from './buildTableState.js'\nimport { copyDataFromLocaleHandler } from './copyDataFromLocale.js'\nimport { schedulePublishHandler } from './schedulePublishHandler.js'\n\n/**\n * Framework-agnostic server function handlers shared across all adapters.\n *\n * Each handler returns a value that may contain React elements (e.g.\n * `customComponents` inside form state, the `Document` / `List` nodes returned\n * by render-document / render-list). Adapters are expected to ship those over\n * the wire as RSC payloads Next.js's runtime does this natively, while the\n * TanStack Start adapter pipes the result through `serializeForRsc` to convert\n * elements into `renderServerComponent` handles.\n */\nexport const sharedServerFunctions: Record<string, ServerFunction<any, any>> = {\n 'copy-data-from-locale': copyDataFromLocaleHandler,\n 'form-state': buildFormStateHandler,\n 'render-document': renderDocumentHandler,\n 'render-list': renderListHandler,\n 'schedule-publish': schedulePublishHandler,\n 'table-state': buildTableStateHandler,\n}\n"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ;AACtC,SAASC,iBAAiB,QAAQ;AAClC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,sBAAsB,QAAQ;AACvC,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,sBAAsB,QAAQ;AAEvC;;;;;;;;;;AAUA,OAAO,MAAMC,qBAAA,GAAkE;EAC7E,yBAAyBF,yBAAA;EACzB,cAAcF,qBAAA;EACd,mBAAmBF,qBAAA;EACnB,eAAeC,iBAAA;EACf,oBAAoBI,sBAAA;EACpB,eAAeF;AACjB","ignoreList":[]}
1
+ {"version":3,"file":"serverFunctionRegistry.js","names":["renderTabHandler","_internal_renderFieldHandler","getDefaultLayoutHandler","renderWidgetHandler","renderDocumentHandler","renderDocumentSlotsHandler","renderListHandler","buildFormStateHandler","buildTableStateHandler","copyDataFromLocaleHandler","schedulePublishHandler","slugifyHandler","switchLanguageHandler","sharedServerFunctions","slugify"],"sources":["../../src/utilities/serverFunctionRegistry.ts"],"sourcesContent":["import type { ServerFunction } from 'payload'\n\nimport { renderTabHandler } from '../elements/Nav/SidebarTabs/renderTabServerFn.js'\nimport { _internal_renderFieldHandler } from '../forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js'\nimport { getDefaultLayoutHandler, renderWidgetHandler } from '../views/Dashboard/serverFunctions.js'\nimport { renderDocumentHandler } from '../views/Document/handleServerFunction.js'\nimport { renderDocumentSlotsHandler } from '../views/Document/renderDocumentSlots.js'\nimport { renderListHandler } from '../views/List/handleServerFunction.js'\nimport { buildFormStateHandler } from './buildFormState.js'\nimport { buildTableStateHandler } from './buildTableState.js'\nimport { copyDataFromLocaleHandler } from './copyDataFromLocale.js'\nimport { schedulePublishHandler } from './schedulePublishHandler.js'\nimport { slugifyHandler } from './slugify.js'\nimport { switchLanguageHandler } from './switchLanguageHandler.js'\n\n/**\n * The complete, framework-agnostic set of Payload server functions.\n *\n * Every adapter (`@payloadcms/next`, `@payloadcms/tanstack-start`) dispatches\n * from this single registry via `createServerFunctionHandler`, so a handler\n * added here reaches every framework and the adapter lists can't drift.\n *\n * Handlers may return values containing React elements (e.g. `customComponents`\n * inside form state, the `Document` / `List` nodes from render-document /\n * render-list, the render-field / render-widget output). Adapters ship those\n * over the wire as RSC payloads: Next.js does this natively, while the TanStack\n * Start adapter passes a `transformResult` (`serializeForRsc`) to\n * `createServerFunctionHandler` that converts elements into\n * `renderServerComponent` handles.\n */\nexport const sharedServerFunctions: Record<string, ServerFunction<any, any>> = {\n 'copy-data-from-locale': copyDataFromLocaleHandler,\n 'form-state': buildFormStateHandler,\n 'get-default-layout': getDefaultLayoutHandler,\n 'render-document': renderDocumentHandler,\n 'render-document-slots': renderDocumentSlotsHandler,\n 'render-field': _internal_renderFieldHandler,\n 'render-list': renderListHandler,\n 'render-tab': renderTabHandler,\n 'render-widget': renderWidgetHandler,\n 'schedule-publish': schedulePublishHandler,\n slugify: slugifyHandler,\n 'switch-language': switchLanguageHandler,\n 'table-state': buildTableStateHandler,\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ;AACjC,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,uBAAuB,EAAEC,mBAAmB,QAAQ;AAC7D,SAASC,qBAAqB,QAAQ;AACtC,SAASC,0BAA0B,QAAQ;AAC3C,SAASC,iBAAiB,QAAQ;AAClC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,sBAAsB,QAAQ;AACvC,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,sBAAsB,QAAQ;AACvC,SAASC,cAAc,QAAQ;AAC/B,SAASC,qBAAqB,QAAQ;AAEtC;;;;;;;;;;;;;;;AAeA,OAAO,MAAMC,qBAAA,GAAkE;EAC7E,yBAAyBJ,yBAAA;EACzB,cAAcF,qBAAA;EACd,sBAAsBL,uBAAA;EACtB,mBAAmBE,qBAAA;EACnB,yBAAyBC,0BAAA;EACzB,gBAAgBJ,4BAAA;EAChB,eAAeK,iBAAA;EACf,cAAcN,gBAAA;EACd,iBAAiBG,mBAAA;EACjB,oBAAoBO,sBAAA;EACpBI,OAAA,EAASH,cAAA;EACT,mBAAmBC,qBAAA;EACnB,eAAeJ;AACjB","ignoreList":[]}
@@ -12,35 +12,32 @@
12
12
  }
13
13
 
14
14
  .collection-edit__main-wrapper--scroll-fields-only {
15
- height: calc(
16
- 100dvh - var(--app-header-height, 0px) - var(--doc-controls-height, 0px) -
17
- var(--doc-header-height, 0px)
18
- );
19
- overflow: hidden;
15
+ height: auto;
16
+ overflow: visible;
20
17
 
21
18
  .collection-edit__main {
22
- min-height: 0;
23
- overflow: hidden;
19
+ min-height: initial;
20
+ overflow: visible;
24
21
  }
25
22
 
26
23
  .document-fields {
27
- height: 100%;
28
- min-height: 0;
24
+ height: auto;
25
+ min-height: initial;
29
26
  }
30
27
 
31
28
  .document-fields--force-sidebar-wrap {
32
- overflow-y: auto;
33
- overscroll-behavior: contain;
34
- scrollbar-width: thin;
35
- scrollbar-color: var(--scrollbar-color) transparent;
29
+ overflow-y: visible;
30
+ overscroll-behavior: auto;
31
+ scrollbar-width: auto;
32
+ scrollbar-color: auto;
36
33
  }
37
34
 
38
35
  .document-fields:not(.document-fields--force-sidebar-wrap) .document-fields__main {
39
- min-height: 0;
40
- overflow-y: auto;
41
- overscroll-behavior: contain;
42
- scrollbar-width: thin;
43
- scrollbar-color: var(--scrollbar-color) transparent;
36
+ min-height: initial;
37
+ overflow-y: visible;
38
+ overscroll-behavior: auto;
39
+ scrollbar-width: auto;
40
+ scrollbar-color: auto;
44
41
  }
45
42
 
46
43
  .document-fields--force-sidebar-wrap .document-fields__main {
@@ -51,9 +48,9 @@
51
48
  }
52
49
 
53
50
  .document-fields__sidebar {
54
- overscroll-behavior: contain;
55
- scrollbar-width: thin;
56
- scrollbar-color: var(--scrollbar-color) transparent;
51
+ overscroll-behavior: auto;
52
+ scrollbar-width: auto;
53
+ scrollbar-color: auto;
57
54
  }
58
55
 
59
56
  .document-fields__sidebar-wrap {
@@ -63,8 +60,8 @@
63
60
  }
64
61
 
65
62
  .template-default__wrap:has(.collection-edit__main-wrapper--scroll-fields-only) {
66
- height: 100dvh;
67
- overflow: hidden;
63
+ height: auto;
64
+ overflow: visible;
68
65
  }
69
66
 
70
67
  .collection-edit__main {
@@ -76,12 +73,22 @@
76
73
  }
77
74
 
78
75
  .collection-edit__main-wrapper--has-upload-panel {
76
+ flex-direction: column-reverse;
77
+ gap: var(--spacer-5);
78
+
79
79
  .collection-edit__main {
80
80
  flex: 1;
81
81
  }
82
+
82
83
  .file-manager {
83
- flex: 2;
84
- border-inline-start: var(--stroke-width-small) solid var(--color-border);
84
+ order: 0;
85
+ /* Stacked — no vertical divider; the file manager's own bottom border separates it. */
86
+ border-inline-start: 0;
87
+ }
88
+
89
+ .document-fields {
90
+ flex: 0 0 auto;
91
+ width: 100%;
85
92
  }
86
93
 
87
94
  .collection-edit__main:not(:has(.field-type)) {
@@ -95,61 +102,62 @@
95
102
 
96
103
  /* Container query (not viewport) so the layout stacks based on the space actually available
97
104
  to the edit view — e.g. inside a narrow document drawer it uses the stacked mobile layout. */
98
- @container edit-main (max-width: 1024px) {
105
+ @container edit-main (min-width: 1024px) {
99
106
  .collection-edit__main-wrapper--scroll-fields-only {
100
- height: auto;
101
- overflow: visible;
107
+ height: calc(
108
+ 100dvh - var(--app-header-height, 0px) - var(--doc-controls-height, 0px) -
109
+ var(--doc-header-height, 0px)
110
+ );
111
+ overflow: hidden;
102
112
 
103
113
  .collection-edit__main {
104
- min-height: initial;
105
- overflow: visible;
114
+ min-height: 0;
115
+ overflow: hidden;
106
116
  }
107
117
 
108
118
  .document-fields {
109
- height: auto;
110
- min-height: initial;
119
+ height: 100%;
120
+ min-height: 0;
111
121
  }
112
122
 
113
123
  .document-fields--force-sidebar-wrap {
114
- overflow-y: visible;
115
- overscroll-behavior: auto;
116
- scrollbar-width: auto;
117
- scrollbar-color: auto;
124
+ overflow-y: auto;
125
+ overscroll-behavior: contain;
126
+ scrollbar-width: thin;
127
+ scrollbar-color: var(--scrollbar-color) transparent;
118
128
  }
119
129
 
120
130
  .document-fields:not(.document-fields--force-sidebar-wrap) .document-fields__main {
121
- min-height: initial;
122
- overflow-y: visible;
123
- overscroll-behavior: auto;
124
- scrollbar-width: auto;
125
- scrollbar-color: auto;
131
+ min-height: 0;
132
+ overflow-y: auto;
133
+ overscroll-behavior: contain;
134
+ scrollbar-width: thin;
135
+ scrollbar-color: var(--scrollbar-color) transparent;
126
136
  }
127
137
 
128
138
  .document-fields__sidebar {
129
- overscroll-behavior: auto;
130
- scrollbar-width: auto;
131
- scrollbar-color: auto;
139
+ overscroll-behavior: contain;
140
+ scrollbar-width: thin;
141
+ scrollbar-color: var(--scrollbar-color) transparent;
132
142
  }
133
143
  }
134
144
 
135
145
  .template-default__wrap:has(.collection-edit__main-wrapper--scroll-fields-only) {
136
- height: auto;
137
- overflow: visible;
146
+ height: 100dvh;
147
+ overflow: hidden;
138
148
  }
139
149
 
140
150
  .collection-edit__main-wrapper--has-upload-panel {
141
- flex-direction: column-reverse;
142
- gap: var(--spacer-5);
151
+ flex-direction: row;
152
+ gap: 0;
143
153
 
144
154
  .file-manager {
145
- order: 0;
146
- flex: 1 0 0;
147
- /* Stacked — no vertical divider; the file manager's own bottom border separates it. */
148
- border-inline-start: 0;
155
+ flex: 2;
156
+ border-inline-start: var(--stroke-width-small) solid var(--color-border);
149
157
  }
150
158
 
151
159
  .document-fields {
152
- flex: 0 0 auto;
160
+ flex: initial;
153
161
  width: 100%;
154
162
  }
155
163
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/ui",
3
- "version": "4.0.0-internal.9726517",
3
+ "version": "4.0.0-internal.add4c47",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -294,7 +294,7 @@
294
294
  "ts-essentials": "10.0.3",
295
295
  "use-context-selector": "2.0.0",
296
296
  "uuid": "14.0.0",
297
- "@payloadcms/translations": "4.0.0-internal.9726517"
297
+ "@payloadcms/translations": "4.0.0-internal.add4c47"
298
298
  },
299
299
  "devDependencies": {
300
300
  "@babel/cli": "7.27.2",
@@ -308,13 +308,13 @@
308
308
  "babel-plugin-react-compiler": "19.1.0-rc.3",
309
309
  "esbuild": "0.27.1",
310
310
  "esbuild-sass-plugin": "3.3.1",
311
- "payload": "4.0.0-internal.9726517",
311
+ "payload": "4.0.0-internal.add4c47",
312
312
  "@payloadcms/eslint-config": "3.28.0"
313
313
  },
314
314
  "peerDependencies": {
315
315
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
316
316
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
317
- "payload": "4.0.0-internal.9726517"
317
+ "payload": "4.0.0-internal.add4c47"
318
318
  },
319
319
  "engines": {
320
320
  "node": ">=24.15.0"