@payloadcms/ui 3.21.0-canary.db74962 → 3.22.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 (95) hide show
  1. package/dist/elements/Autosave/index.d.ts.map +1 -1
  2. package/dist/elements/Autosave/index.js +20 -10
  3. package/dist/elements/Autosave/index.js.map +1 -1
  4. package/dist/elements/Button/index.d.ts.map +1 -1
  5. package/dist/elements/Button/index.js +3 -2
  6. package/dist/elements/Button/index.js.map +1 -1
  7. package/dist/elements/Button/types.d.ts +4 -0
  8. package/dist/elements/Button/types.d.ts.map +1 -1
  9. package/dist/elements/Button/types.js.map +1 -1
  10. package/dist/elements/ListControls/index.d.ts.map +1 -1
  11. package/dist/elements/ListControls/index.js +0 -1
  12. package/dist/elements/ListControls/index.js.map +1 -1
  13. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  14. package/dist/elements/ListDrawer/DrawerContent.js +9 -6
  15. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  16. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  17. package/dist/elements/PublishButton/index.js +2 -1
  18. package/dist/elements/PublishButton/index.js.map +1 -1
  19. package/dist/elements/ReactSelect/MultiValueLabel/index.d.ts.map +1 -1
  20. package/dist/elements/ReactSelect/MultiValueLabel/index.js +6 -2
  21. package/dist/elements/ReactSelect/MultiValueLabel/index.js.map +1 -1
  22. package/dist/elements/ReactSelect/MultiValueLabel/index.scss +5 -0
  23. package/dist/elements/ReactSelect/types.d.ts +6 -1
  24. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  25. package/dist/elements/ReactSelect/types.js.map +1 -1
  26. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  27. package/dist/elements/RelationshipTable/index.js +9 -6
  28. package/dist/elements/RelationshipTable/index.js.map +1 -1
  29. package/dist/elements/Upload/index.d.ts.map +1 -1
  30. package/dist/elements/Upload/index.js +4 -3
  31. package/dist/elements/Upload/index.js.map +1 -1
  32. package/dist/elements/WhereBuilder/Condition/Date/index.d.ts +1 -1
  33. package/dist/elements/WhereBuilder/Condition/Date/index.d.ts.map +1 -1
  34. package/dist/elements/WhereBuilder/Condition/Date/index.js +1 -1
  35. package/dist/elements/WhereBuilder/Condition/Date/index.js.map +1 -1
  36. package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js +6 -6
  37. package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js.map +1 -1
  38. package/dist/elements/WhereBuilder/Condition/Number/index.d.ts +1 -1
  39. package/dist/elements/WhereBuilder/Condition/Number/index.d.ts.map +1 -1
  40. package/dist/elements/WhereBuilder/Condition/Number/index.js +1 -1
  41. package/dist/elements/WhereBuilder/Condition/Number/index.js.map +1 -1
  42. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts +1 -1
  43. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  44. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +12 -10
  45. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  46. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  47. package/dist/elements/WhereBuilder/Condition/index.js +100 -88
  48. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  49. package/dist/exports/client/index.d.ts +3 -3
  50. package/dist/exports/client/index.d.ts.map +1 -1
  51. package/dist/exports/client/index.js +23 -22
  52. package/dist/exports/client/index.js.map +4 -4
  53. package/dist/fields/Password/index.d.ts.map +1 -1
  54. package/dist/fields/Password/index.js +1 -0
  55. package/dist/fields/Password/index.js.map +1 -1
  56. package/dist/fields/Relationship/index.d.ts.map +1 -1
  57. package/dist/fields/Relationship/index.js +41 -28
  58. package/dist/fields/Relationship/index.js.map +1 -1
  59. package/dist/fields/Text/Input.d.ts.map +1 -1
  60. package/dist/fields/Text/Input.js +47 -1
  61. package/dist/fields/Text/Input.js.map +1 -1
  62. package/dist/forms/Form/index.d.ts.map +1 -1
  63. package/dist/forms/Form/index.js +46 -39
  64. package/dist/forms/Form/index.js.map +1 -1
  65. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts +4 -0
  66. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  67. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +9 -0
  68. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  69. package/dist/forms/fieldSchemasToFormState/index.d.ts +22 -10
  70. package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
  71. package/dist/forms/fieldSchemasToFormState/index.js +9 -2
  72. package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
  73. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts +5 -1
  74. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
  75. package/dist/forms/fieldSchemasToFormState/iterateFields.js +3 -0
  76. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  77. package/dist/forms/useField/index.d.ts.map +1 -1
  78. package/dist/forms/useField/index.js +38 -34
  79. package/dist/forms/useField/index.js.map +1 -1
  80. package/dist/hooks/useEffectEvent.d.ts +2 -0
  81. package/dist/hooks/useEffectEvent.d.ts.map +1 -0
  82. package/dist/hooks/useEffectEvent.js +57 -0
  83. package/dist/hooks/useEffectEvent.js.map +1 -0
  84. package/dist/styles.css +1 -1
  85. package/dist/utilities/buildFormState.d.ts.map +1 -1
  86. package/dist/utilities/buildFormState.js +12 -5
  87. package/dist/utilities/buildFormState.js.map +1 -1
  88. package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
  89. package/dist/views/Edit/Auth/APIKey.js +1 -0
  90. package/dist/views/Edit/Auth/APIKey.js.map +1 -1
  91. package/package.json +5 -5
  92. package/dist/hooks/useIgnoredEffect.d.ts +0 -21
  93. package/dist/hooks/useIgnoredEffect.d.ts.map +0 -1
  94. package/dist/hooks/useIgnoredEffect.js +0 -41
  95. package/dist/hooks/useIgnoredEffect.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAYnG,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;CACnC,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,CACA;IACE,OAAO,EAAE,MAAM,CAAA;CAChB,GACD,WAAW,CACd,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,2BAA2B,CAAA;AAE1F,eAAO,MAAM,qBAAqB,SAC1B,kBAAkB,KACvB,OAAO,CAAC,oBAAoB,CAqD9B,CAAA;AAED,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC,2BAA2B,CAqIrC,CAAA"}
1
+ {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAYnG,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;CACnC,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,CACA;IACE,OAAO,EAAE,MAAM,CAAA;CAChB,GACD,WAAW,CACd,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,2BAA2B,CAAA;AAE1F,eAAO,MAAM,qBAAqB,SAC1B,kBAAkB,KACvB,OAAO,CAAC,oBAAoB,CAqD9B,CAAA;AAED,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC,2BAA2B,CA6IrC,CAAA"}
@@ -65,9 +65,11 @@ export const buildFormState = async args => {
65
65
  data: incomingData,
66
66
  docPermissions,
67
67
  docPreferences,
68
+ documentFormState,
68
69
  formState,
69
- fullFormStateOverride,
70
70
  globalSlug,
71
+ initialBlockData,
72
+ initialBlockFormState,
71
73
  operation,
72
74
  renderAllFields,
73
75
  req,
@@ -118,9 +120,13 @@ export const buildFormState = async args => {
118
120
  if (formState) {
119
121
  data = reduceFieldsToValues(formState, true);
120
122
  }
121
- let fullDataOverride = undefined;
122
- if (fullFormStateOverride) {
123
- fullDataOverride = reduceFieldsToValues(fullFormStateOverride, true);
123
+ let documentData = undefined;
124
+ if (documentFormState) {
125
+ documentData = reduceFieldsToValues(documentFormState, true);
126
+ }
127
+ let blockData = initialBlockData;
128
+ if (initialBlockFormState) {
129
+ blockData = reduceFieldsToValues(initialBlockFormState, true);
124
130
  }
125
131
  /**
126
132
  * When building state for sub schemas we need to adjust:
@@ -137,9 +143,10 @@ export const buildFormState = async args => {
137
143
  clientFieldSchemaMap: clientSchemaMap,
138
144
  collectionSlug,
139
145
  data,
146
+ documentData,
140
147
  fields,
141
148
  fieldSchemaMap: schemaMap,
142
- fullDataOverride,
149
+ initialBlockData: blockData,
143
150
  operation,
144
151
  permissions: docPermissions?.fields || {},
145
152
  preferences: docPreferences || {
@@ -1 +1 @@
1
- {"version":3,"file":"buildFormState.js","names":["formatErrors","reduceFieldsToValues","fieldSchemasToFormState","renderField","getClientConfig","getClientSchemaMap","getSchemaMap","handleFormStateLocking","buildFormStateHandler","args","req","incomingUserSlug","user","collection","adminUserSlug","payload","config","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","docs","length","res","buildFormState","err","logger","error","msg","message","id","idFromArgs","collectionSlug","data","incomingData","docPermissions","docPreferences","formState","fullFormStateOverride","globalSlug","operation","renderAllFields","i18n","returnLockStatus","schemaPath","skipValidation","updateLastEdited","schemaMap","clientSchemaMap","importMap","undefined","fieldOrEntityConfig","get","fields","type","fullDataOverride","Array","isArray","formStateResult","clientFieldSchemaMap","fieldSchemaMap","permissions","preferences","previousFormState","renderFieldFn","upload","file","lockedStateResult","lockedState","state"],"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type { BuildFormStateArgs, ClientConfig, ClientUser, ErrorResult, FormState } from 'payload'\n\nimport { formatErrors } from 'payload'\nimport { reduceFieldsToValues } from 'payload/shared'\n\nimport { fieldSchemasToFormState } from '../forms/fieldSchemasToFormState/index.js'\nimport { renderField } from '../forms/fieldSchemasToFormState/renderField.js'\nimport { getClientConfig } from './getClientConfig.js'\nimport { getClientSchemaMap } from './getClientSchemaMap.js'\nimport { getSchemaMap } from './getSchemaMap.js'\nimport { handleFormStateLocking } from './handleFormStateLocking.js'\n\nexport type LockedState = {\n isLocked: boolean\n lastEditedAt: string\n user: ClientUser | number | string\n}\n\ntype BuildFormStateSuccessResult = {\n clientConfig?: ClientConfig\n errors?: never\n indexPath?: string\n lockedState?: LockedState\n state: FormState\n}\n\ntype BuildFormStateErrorResult = {\n lockedState?: never\n state?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildFormStateResult = BuildFormStateErrorResult | BuildFormStateSuccessResult\n\nexport const buildFormStateHandler = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateResult> => {\n const { req } = args\n\n const incomingUserSlug = req.user?.collection\n const adminUserSlug = req.payload.config.admin.user\n\n try {\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = req.payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await req.payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const res = await buildFormState(args)\n return res\n } catch (err) {\n req.payload.logger.error({ err, msg: `There was an error building form state` })\n\n if (err.message === 'Could not find field schema for given path') {\n return {\n message: err.message,\n }\n }\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const buildFormState = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateSuccessResult> => {\n const {\n id: idFromArgs,\n collectionSlug,\n data: incomingData,\n docPermissions,\n docPreferences,\n formState,\n fullFormStateOverride,\n globalSlug,\n operation,\n renderAllFields,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n },\n returnLockStatus,\n schemaPath = collectionSlug || globalSlug,\n skipValidation,\n updateLastEdited,\n } = args\n\n let data = incomingData\n\n if (!collectionSlug && !globalSlug) {\n throw new Error('Either collectionSlug or globalSlug must be provided')\n }\n\n const schemaMap = getSchemaMap({\n collectionSlug,\n config,\n globalSlug,\n i18n,\n })\n\n const clientSchemaMap = getClientSchemaMap({\n collectionSlug,\n config: getClientConfig({ config, i18n, importMap: req.payload.importMap }),\n globalSlug,\n i18n,\n payload,\n schemaMap,\n })\n\n const id = collectionSlug ? idFromArgs : undefined\n const fieldOrEntityConfig = schemaMap.get(schemaPath)\n\n if (!fieldOrEntityConfig) {\n throw new Error(`Could not find \"${schemaPath}\" in the fieldSchemaMap`)\n }\n\n if (\n (!('fields' in fieldOrEntityConfig) ||\n !fieldOrEntityConfig.fields ||\n !fieldOrEntityConfig.fields.length) &&\n 'type' in fieldOrEntityConfig &&\n fieldOrEntityConfig.type !== 'blocks'\n ) {\n throw new Error(\n `The field found in fieldSchemaMap for \"${schemaPath}\" does not contain any subfields.`,\n )\n }\n\n // If there is a form state,\n // then we can deduce data from that form state\n if (formState) {\n data = reduceFieldsToValues(formState, true)\n }\n\n let fullDataOverride = undefined\n if (fullFormStateOverride) {\n fullDataOverride = reduceFieldsToValues(fullFormStateOverride, true)\n }\n\n /**\n * When building state for sub schemas we need to adjust:\n * - `fields`\n * - `parentSchemaPath`\n * - `parentPath`\n *\n * Type assertion is fine because we wrap sub schemas in an array\n * so we can safely map over them within `fieldSchemasToFormState`\n */\n const fields = Array.isArray(fieldOrEntityConfig)\n ? fieldOrEntityConfig\n : 'fields' in fieldOrEntityConfig\n ? fieldOrEntityConfig.fields\n : [fieldOrEntityConfig]\n\n const formStateResult = await fieldSchemasToFormState({\n id,\n clientFieldSchemaMap: clientSchemaMap,\n collectionSlug,\n data,\n fields,\n fieldSchemaMap: schemaMap,\n fullDataOverride,\n operation,\n permissions: docPermissions?.fields || {},\n preferences: docPreferences || { fields: {} },\n previousFormState: formState,\n renderAllFields,\n renderFieldFn: renderField,\n req,\n schemaPath,\n skipValidation,\n })\n\n // Maintain form state of auth / upload fields\n if (collectionSlug && formState) {\n if (payload.collections[collectionSlug]?.config?.upload && formState.file) {\n formStateResult.file = formState.file\n }\n }\n\n let lockedStateResult\n\n if (returnLockStatus) {\n lockedStateResult = await handleFormStateLocking({\n id,\n collectionSlug,\n globalSlug,\n req,\n updateLastEdited,\n })\n }\n\n return {\n lockedState: lockedStateResult,\n state: formStateResult,\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"buildFormState.js","names":["formatErrors","reduceFieldsToValues","fieldSchemasToFormState","renderField","getClientConfig","getClientSchemaMap","getSchemaMap","handleFormStateLocking","buildFormStateHandler","args","req","incomingUserSlug","user","collection","adminUserSlug","payload","config","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","docs","length","res","buildFormState","err","logger","error","msg","message","id","idFromArgs","collectionSlug","data","incomingData","docPermissions","docPreferences","documentFormState","formState","globalSlug","initialBlockData","initialBlockFormState","operation","renderAllFields","i18n","returnLockStatus","schemaPath","skipValidation","updateLastEdited","schemaMap","clientSchemaMap","importMap","undefined","fieldOrEntityConfig","get","fields","type","documentData","blockData","Array","isArray","formStateResult","clientFieldSchemaMap","fieldSchemaMap","permissions","preferences","previousFormState","renderFieldFn","upload","file","lockedStateResult","lockedState","state"],"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type { BuildFormStateArgs, ClientConfig, ClientUser, ErrorResult, FormState } from 'payload'\n\nimport { formatErrors } from 'payload'\nimport { reduceFieldsToValues } from 'payload/shared'\n\nimport { fieldSchemasToFormState } from '../forms/fieldSchemasToFormState/index.js'\nimport { renderField } from '../forms/fieldSchemasToFormState/renderField.js'\nimport { getClientConfig } from './getClientConfig.js'\nimport { getClientSchemaMap } from './getClientSchemaMap.js'\nimport { getSchemaMap } from './getSchemaMap.js'\nimport { handleFormStateLocking } from './handleFormStateLocking.js'\n\nexport type LockedState = {\n isLocked: boolean\n lastEditedAt: string\n user: ClientUser | number | string\n}\n\ntype BuildFormStateSuccessResult = {\n clientConfig?: ClientConfig\n errors?: never\n indexPath?: string\n lockedState?: LockedState\n state: FormState\n}\n\ntype BuildFormStateErrorResult = {\n lockedState?: never\n state?: never\n} & (\n | {\n message: string\n }\n | ErrorResult\n)\n\nexport type BuildFormStateResult = BuildFormStateErrorResult | BuildFormStateSuccessResult\n\nexport const buildFormStateHandler = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateResult> => {\n const { req } = args\n\n const incomingUserSlug = req.user?.collection\n const adminUserSlug = req.payload.config.admin.user\n\n try {\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = req.payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await req.payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const res = await buildFormState(args)\n return res\n } catch (err) {\n req.payload.logger.error({ err, msg: `There was an error building form state` })\n\n if (err.message === 'Could not find field schema for given path') {\n return {\n message: err.message,\n }\n }\n\n if (err.message === 'Unauthorized') {\n return null\n }\n\n return formatErrors(err)\n }\n}\n\nexport const buildFormState = async (\n args: BuildFormStateArgs,\n): Promise<BuildFormStateSuccessResult> => {\n const {\n id: idFromArgs,\n collectionSlug,\n data: incomingData,\n docPermissions,\n docPreferences,\n documentFormState,\n formState,\n globalSlug,\n initialBlockData,\n initialBlockFormState,\n operation,\n renderAllFields,\n req,\n req: {\n i18n,\n payload,\n payload: { config },\n },\n returnLockStatus,\n schemaPath = collectionSlug || globalSlug,\n skipValidation,\n updateLastEdited,\n } = args\n\n let data = incomingData\n\n if (!collectionSlug && !globalSlug) {\n throw new Error('Either collectionSlug or globalSlug must be provided')\n }\n\n const schemaMap = getSchemaMap({\n collectionSlug,\n config,\n globalSlug,\n i18n,\n })\n\n const clientSchemaMap = getClientSchemaMap({\n collectionSlug,\n config: getClientConfig({ config, i18n, importMap: req.payload.importMap }),\n globalSlug,\n i18n,\n payload,\n schemaMap,\n })\n\n const id = collectionSlug ? idFromArgs : undefined\n const fieldOrEntityConfig = schemaMap.get(schemaPath)\n\n if (!fieldOrEntityConfig) {\n throw new Error(`Could not find \"${schemaPath}\" in the fieldSchemaMap`)\n }\n\n if (\n (!('fields' in fieldOrEntityConfig) ||\n !fieldOrEntityConfig.fields ||\n !fieldOrEntityConfig.fields.length) &&\n 'type' in fieldOrEntityConfig &&\n fieldOrEntityConfig.type !== 'blocks'\n ) {\n throw new Error(\n `The field found in fieldSchemaMap for \"${schemaPath}\" does not contain any subfields.`,\n )\n }\n\n // If there is a form state,\n // then we can deduce data from that form state\n if (formState) {\n data = reduceFieldsToValues(formState, true)\n }\n\n let documentData = undefined\n if (documentFormState) {\n documentData = reduceFieldsToValues(documentFormState, true)\n }\n\n let blockData = initialBlockData\n if (initialBlockFormState) {\n blockData = reduceFieldsToValues(initialBlockFormState, true)\n }\n\n /**\n * When building state for sub schemas we need to adjust:\n * - `fields`\n * - `parentSchemaPath`\n * - `parentPath`\n *\n * Type assertion is fine because we wrap sub schemas in an array\n * so we can safely map over them within `fieldSchemasToFormState`\n */\n const fields = Array.isArray(fieldOrEntityConfig)\n ? fieldOrEntityConfig\n : 'fields' in fieldOrEntityConfig\n ? fieldOrEntityConfig.fields\n : [fieldOrEntityConfig]\n\n const formStateResult = await fieldSchemasToFormState({\n id,\n clientFieldSchemaMap: clientSchemaMap,\n collectionSlug,\n data,\n documentData,\n fields,\n fieldSchemaMap: schemaMap,\n initialBlockData: blockData,\n operation,\n permissions: docPermissions?.fields || {},\n preferences: docPreferences || { fields: {} },\n previousFormState: formState,\n renderAllFields,\n renderFieldFn: renderField,\n req,\n schemaPath,\n skipValidation,\n })\n\n // Maintain form state of auth / upload fields\n if (collectionSlug && formState) {\n if (payload.collections[collectionSlug]?.config?.upload && formState.file) {\n formStateResult.file = formState.file\n }\n }\n\n let lockedStateResult\n\n if (returnLockStatus) {\n lockedStateResult = await handleFormStateLocking({\n id,\n collectionSlug,\n globalSlug,\n req,\n updateLastEdited,\n })\n }\n\n return {\n lockedState: lockedStateResult,\n state: formStateResult,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"APIKey.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/Auth/APIKey.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAuC,MAAM,OAAO,CAAA;AAe3D,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAgHvF,CAAA"}
1
+ {"version":3,"file":"APIKey.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/Auth/APIKey.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAuC,MAAM,OAAO,CAAA;AAe3D,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAiHvF,CAAA"}
@@ -39,6 +39,7 @@ export const APIKey = ({
39
39
  const validate = val => text(val, {
40
40
  name: 'apiKey',
41
41
  type: 'text',
42
+ blockData: {},
42
43
  data: {},
43
44
  event: 'onChange',
44
45
  maxLength: 48,
@@ -1 +1 @@
1
- {"version":3,"file":"APIKey.js","names":["getTranslation","text","React","useEffect","useMemo","useState","v4","uuidv4","CopyToClipboard","GenerateConfirmation","useFormFields","useField","useConfig","useDocumentInfo","useTranslation","path","baseClass","fieldBaseClass","APIKey","enabled","readOnly","initialAPIKey","highlightedField","setHighlightedField","i18n","t","config","getEntityConfig","collectionSlug","apiKey","fields","apiKeyField","find","field","name","validate","val","type","data","event","maxLength","minLength","preferences","req","payload","siblingData","apiKeyValue","value","apiKeyLabel","label","APIKeyLabel","_jsxs","className","_jsx","fieldType","highlightField","setTimeout","setValue","Fragment","filter","Boolean","join","undefined","disabled","id","setKey"],"sources":["../../../../src/views/Edit/Auth/APIKey.tsx"],"sourcesContent":["'use client'\nimport type { PayloadRequest, TextFieldClient } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { text } from 'payload/shared'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { CopyToClipboard } from '../../../elements/CopyToClipboard/index.js'\nimport { GenerateConfirmation } from '../../../elements/GenerateConfirmation/index.js'\nimport { useFormFields } from '../../../forms/Form/context.js'\nimport { useField } from '../../../forms/useField/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\n\nconst path = 'apiKey'\nconst baseClass = 'api-key'\nconst fieldBaseClass = 'field-type'\n\nexport const APIKey: React.FC<{ readonly enabled: boolean; readonly readOnly?: boolean }> = ({\n enabled,\n readOnly,\n}) => {\n const [initialAPIKey] = useState(uuidv4())\n const [highlightedField, setHighlightedField] = useState(false)\n const { i18n, t } = useTranslation()\n const { config, getEntityConfig } = useConfig()\n const { collectionSlug } = useDocumentInfo()\n\n const apiKey = useFormFields(([fields]) => (fields && fields[path]) || null)\n\n const apiKeyField: TextFieldClient = getEntityConfig({ collectionSlug })?.fields?.find(\n (field) => 'name' in field && field.name === 'apiKey',\n ) as TextFieldClient\n\n const validate = (val) =>\n text(val, {\n name: 'apiKey',\n type: 'text',\n data: {},\n event: 'onChange',\n maxLength: 48,\n minLength: 24,\n preferences: { fields: {} },\n req: {\n payload: {\n config,\n },\n t,\n } as unknown as PayloadRequest,\n siblingData: {},\n })\n\n const apiKeyValue = apiKey?.value\n\n const apiKeyLabel = useMemo(() => {\n let label: Record<string, string> | string = 'API Key'\n\n if (apiKeyField?.label) {\n label = apiKeyField.label\n }\n\n return getTranslation(label, i18n)\n }, [apiKeyField, i18n])\n\n const APIKeyLabel = useMemo(\n () => (\n <div className={`${baseClass}__label`}>\n <span>{apiKeyLabel}</span>\n <CopyToClipboard value={apiKeyValue as string} />\n </div>\n ),\n [apiKeyLabel, apiKeyValue],\n )\n\n const fieldType = useField({\n path: 'apiKey',\n validate,\n })\n\n const highlightField = () => {\n if (highlightedField) {\n setHighlightedField(false)\n }\n setTimeout(() => {\n setHighlightedField(true)\n }, 1)\n }\n\n const { setValue, value } = fieldType\n\n useEffect(() => {\n if (!apiKeyValue && enabled) {\n setValue(initialAPIKey)\n }\n if (!enabled && apiKeyValue) {\n setValue(null)\n }\n }, [apiKeyValue, enabled, setValue, initialAPIKey])\n\n useEffect(() => {\n if (highlightedField) {\n setTimeout(() => {\n setHighlightedField(false)\n }, 10000)\n }\n }, [highlightedField])\n\n if (!enabled) {\n return null\n }\n\n return (\n <React.Fragment>\n <div className={[fieldBaseClass, 'api-key', 'read-only'].filter(Boolean).join(' ')}>\n {APIKeyLabel}\n <input\n aria-label={apiKeyLabel}\n className={highlightedField ? 'highlight' : undefined}\n disabled\n id=\"apiKey\"\n name=\"apiKey\"\n type=\"text\"\n value={(value as string) || ''}\n />\n </div>\n {!readOnly && (\n <GenerateConfirmation highlightField={highlightField} setKey={() => setValue(uuidv4())} />\n )}\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"APIKey.js","names":["getTranslation","text","React","useEffect","useMemo","useState","v4","uuidv4","CopyToClipboard","GenerateConfirmation","useFormFields","useField","useConfig","useDocumentInfo","useTranslation","path","baseClass","fieldBaseClass","APIKey","enabled","readOnly","initialAPIKey","highlightedField","setHighlightedField","i18n","t","config","getEntityConfig","collectionSlug","apiKey","fields","apiKeyField","find","field","name","validate","val","type","blockData","data","event","maxLength","minLength","preferences","req","payload","siblingData","apiKeyValue","value","apiKeyLabel","label","APIKeyLabel","_jsxs","className","_jsx","fieldType","highlightField","setTimeout","setValue","Fragment","filter","Boolean","join","undefined","disabled","id","setKey"],"sources":["../../../../src/views/Edit/Auth/APIKey.tsx"],"sourcesContent":["'use client'\nimport type { PayloadRequest, TextFieldClient } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { text } from 'payload/shared'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport { CopyToClipboard } from '../../../elements/CopyToClipboard/index.js'\nimport { GenerateConfirmation } from '../../../elements/GenerateConfirmation/index.js'\nimport { useFormFields } from '../../../forms/Form/context.js'\nimport { useField } from '../../../forms/useField/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\n\nconst path = 'apiKey'\nconst baseClass = 'api-key'\nconst fieldBaseClass = 'field-type'\n\nexport const APIKey: React.FC<{ readonly enabled: boolean; readonly readOnly?: boolean }> = ({\n enabled,\n readOnly,\n}) => {\n const [initialAPIKey] = useState(uuidv4())\n const [highlightedField, setHighlightedField] = useState(false)\n const { i18n, t } = useTranslation()\n const { config, getEntityConfig } = useConfig()\n const { collectionSlug } = useDocumentInfo()\n\n const apiKey = useFormFields(([fields]) => (fields && fields[path]) || null)\n\n const apiKeyField: TextFieldClient = getEntityConfig({ collectionSlug })?.fields?.find(\n (field) => 'name' in field && field.name === 'apiKey',\n ) as TextFieldClient\n\n const validate = (val) =>\n text(val, {\n name: 'apiKey',\n type: 'text',\n blockData: {},\n data: {},\n event: 'onChange',\n maxLength: 48,\n minLength: 24,\n preferences: { fields: {} },\n req: {\n payload: {\n config,\n },\n t,\n } as unknown as PayloadRequest,\n siblingData: {},\n })\n\n const apiKeyValue = apiKey?.value\n\n const apiKeyLabel = useMemo(() => {\n let label: Record<string, string> | string = 'API Key'\n\n if (apiKeyField?.label) {\n label = apiKeyField.label\n }\n\n return getTranslation(label, i18n)\n }, [apiKeyField, i18n])\n\n const APIKeyLabel = useMemo(\n () => (\n <div className={`${baseClass}__label`}>\n <span>{apiKeyLabel}</span>\n <CopyToClipboard value={apiKeyValue as string} />\n </div>\n ),\n [apiKeyLabel, apiKeyValue],\n )\n\n const fieldType = useField({\n path: 'apiKey',\n validate,\n })\n\n const highlightField = () => {\n if (highlightedField) {\n setHighlightedField(false)\n }\n setTimeout(() => {\n setHighlightedField(true)\n }, 1)\n }\n\n const { setValue, value } = fieldType\n\n useEffect(() => {\n if (!apiKeyValue && enabled) {\n setValue(initialAPIKey)\n }\n if (!enabled && apiKeyValue) {\n setValue(null)\n }\n }, [apiKeyValue, enabled, setValue, initialAPIKey])\n\n useEffect(() => {\n if (highlightedField) {\n setTimeout(() => {\n setHighlightedField(false)\n }, 10000)\n }\n }, [highlightedField])\n\n if (!enabled) {\n return null\n }\n\n return (\n <React.Fragment>\n <div className={[fieldBaseClass, 'api-key', 'read-only'].filter(Boolean).join(' ')}>\n {APIKeyLabel}\n <input\n aria-label={apiKeyLabel}\n className={highlightedField ? 'highlight' : undefined}\n disabled\n id=\"apiKey\"\n name=\"apiKey\"\n type=\"text\"\n value={(value as string) || ''}\n />\n </div>\n {!readOnly && (\n <GenerateConfirmation highlightField={highlightField} setKey={() => setValue(uuidv4())} />\n )}\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/ui",
3
- "version": "3.21.0-canary.db74962",
3
+ "version": "3.22.0",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -131,7 +131,7 @@
131
131
  "ts-essentials": "10.0.3",
132
132
  "use-context-selector": "2.0.0",
133
133
  "uuid": "10.0.0",
134
- "@payloadcms/translations": "3.21.0-canary.db74962"
134
+ "@payloadcms/translations": "3.22.0"
135
135
  },
136
136
  "devDependencies": {
137
137
  "@babel/cli": "7.26.4",
@@ -147,14 +147,14 @@
147
147
  "esbuild": "0.24.2",
148
148
  "esbuild-sass-plugin": "3.3.1",
149
149
  "eslint-plugin-react-compiler": "19.0.0-beta-714736e-20250131",
150
- "@payloadcms/eslint-config": "3.9.0",
151
- "payload": "3.21.0-canary.db74962"
150
+ "payload": "3.22.0",
151
+ "@payloadcms/eslint-config": "3.9.0"
152
152
  },
153
153
  "peerDependencies": {
154
154
  "next": "^15.0.0",
155
155
  "react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
156
156
  "react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
157
- "payload": "3.21.0-canary.db74962"
157
+ "payload": "3.22.0"
158
158
  },
159
159
  "engines": {
160
160
  "node": "^18.20.2 || >=20.9.0"
@@ -1,21 +0,0 @@
1
- /**
2
- * Allows for a `useEffect` hook to be precisely triggered based on whether a only _subset_ of its dependencies have changed, as opposed to all of them. This is useful if you have a list of dependencies that change often, but need to scope your effect's logic to only explicit dependencies within that list.
3
- * @constructor
4
- * @param {React.EffectCallback} effect - The effect to run
5
- * @param {React.DependencyList} deps - Dependencies that should trigger the effect
6
- * @param {React.DependencyList} ignoredDeps - Dependencies that should _not_ trigger the effect
7
- * @param {Object} options - Additional options to configure the hook
8
- * @param {boolean} options.runOnFirstRender - Whether the effect should run on the first render
9
- * @example
10
- * useIgnoredEffect(() => {
11
- * console.log('This will run when `foo` changes, but not when `bar` changes')
12
- * }, [foo], [bar])
13
- */
14
- export declare function useIgnoredEffect(effect: React.EffectCallback, deps: React.DependencyList, ignoredDeps: React.DependencyList, options?: {
15
- runOnFirstRender?: boolean;
16
- }): void;
17
- export declare function useIgnoredEffectDebounced(effect: React.EffectCallback, deps: React.DependencyList, ignoredDeps: React.DependencyList, options?: {
18
- delay?: number;
19
- runOnFirstRender?: boolean;
20
- }): void;
21
- //# sourceMappingURL=useIgnoredEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useIgnoredEffect.d.ts","sourceRoot":"","sources":["../../src/hooks/useIgnoredEffect.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,CAAC,cAAc,EAC5B,IAAI,EAAE,KAAK,CAAC,cAAc,EAC1B,WAAW,EAAE,KAAK,CAAC,cAAc,EACjC,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,QAoBzC;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,KAAK,CAAC,cAAc,EAC5B,IAAI,EAAE,KAAK,CAAC,cAAc,EAC1B,WAAW,EAAE,KAAK,CAAC,cAAc,EACjC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,QAwBzD"}
@@ -1,41 +0,0 @@
1
- import { dequal } from 'dequal/lite';
2
- import { useEffect, useRef } from 'react';
3
- import { useDebouncedEffect } from './useDebouncedEffect.js';
4
- /**
5
- * Allows for a `useEffect` hook to be precisely triggered based on whether a only _subset_ of its dependencies have changed, as opposed to all of them. This is useful if you have a list of dependencies that change often, but need to scope your effect's logic to only explicit dependencies within that list.
6
- * @constructor
7
- * @param {React.EffectCallback} effect - The effect to run
8
- * @param {React.DependencyList} deps - Dependencies that should trigger the effect
9
- * @param {React.DependencyList} ignoredDeps - Dependencies that should _not_ trigger the effect
10
- * @param {Object} options - Additional options to configure the hook
11
- * @param {boolean} options.runOnFirstRender - Whether the effect should run on the first render
12
- * @example
13
- * useIgnoredEffect(() => {
14
- * console.log('This will run when `foo` changes, but not when `bar` changes')
15
- * }, [foo], [bar])
16
- */
17
- export function useIgnoredEffect(effect, deps, ignoredDeps, options) {
18
- const hasInitialized = useRef(typeof options?.runOnFirstRender !== 'undefined' ? Boolean(!options?.runOnFirstRender) : false);
19
- const prevDeps = useRef(deps);
20
- useEffect(() => {
21
- const depsHaveChanged = deps.some((dep, index) => !ignoredDeps.includes(dep) && !dequal(dep, prevDeps.current[index]));
22
- if (depsHaveChanged || !hasInitialized.current) {
23
- effect();
24
- }
25
- prevDeps.current = deps;
26
- hasInitialized.current = true;
27
- }, deps);
28
- }
29
- export function useIgnoredEffectDebounced(effect, deps, ignoredDeps, options) {
30
- const hasInitialized = useRef(typeof options?.runOnFirstRender !== 'undefined' ? Boolean(!options?.runOnFirstRender) : false);
31
- const prevDeps = useRef(deps);
32
- useDebouncedEffect(() => {
33
- const depsHaveChanged = deps.some((dep, index) => !ignoredDeps.includes(dep) && !dequal(dep, prevDeps.current[index]));
34
- if (depsHaveChanged || !hasInitialized.current) {
35
- effect();
36
- }
37
- prevDeps.current = deps;
38
- hasInitialized.current = true;
39
- }, deps, options?.delay || 0);
40
- }
41
- //# sourceMappingURL=useIgnoredEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useIgnoredEffect.js","names":["dequal","useEffect","useRef","useDebouncedEffect","useIgnoredEffect","effect","deps","ignoredDeps","options","hasInitialized","runOnFirstRender","Boolean","prevDeps","depsHaveChanged","some","dep","index","includes","current","useIgnoredEffectDebounced","delay"],"sources":["../../src/hooks/useIgnoredEffect.ts"],"sourcesContent":["import { dequal } from 'dequal/lite'\nimport { useEffect, useRef } from 'react'\n\nimport { useDebouncedEffect } from './useDebouncedEffect.js'\n\n/**\n * Allows for a `useEffect` hook to be precisely triggered based on whether a only _subset_ of its dependencies have changed, as opposed to all of them. This is useful if you have a list of dependencies that change often, but need to scope your effect's logic to only explicit dependencies within that list.\n * @constructor\n * @param {React.EffectCallback} effect - The effect to run\n * @param {React.DependencyList} deps - Dependencies that should trigger the effect\n * @param {React.DependencyList} ignoredDeps - Dependencies that should _not_ trigger the effect\n * @param {Object} options - Additional options to configure the hook\n * @param {boolean} options.runOnFirstRender - Whether the effect should run on the first render\n * @example\n * useIgnoredEffect(() => {\n * console.log('This will run when `foo` changes, but not when `bar` changes')\n * }, [foo], [bar])\n */\nexport function useIgnoredEffect(\n effect: React.EffectCallback,\n deps: React.DependencyList,\n ignoredDeps: React.DependencyList,\n options?: { runOnFirstRender?: boolean },\n) {\n const hasInitialized = useRef(\n typeof options?.runOnFirstRender !== 'undefined' ? Boolean(!options?.runOnFirstRender) : false,\n )\n\n const prevDeps = useRef(deps)\n\n useEffect(() => {\n const depsHaveChanged = deps.some(\n (dep, index) => !ignoredDeps.includes(dep) && !dequal(dep, prevDeps.current[index]),\n )\n\n if (depsHaveChanged || !hasInitialized.current) {\n effect()\n }\n\n prevDeps.current = deps\n hasInitialized.current = true\n }, deps)\n}\n\nexport function useIgnoredEffectDebounced(\n effect: React.EffectCallback,\n deps: React.DependencyList,\n ignoredDeps: React.DependencyList,\n options?: { delay?: number; runOnFirstRender?: boolean },\n) {\n const hasInitialized = useRef(\n typeof options?.runOnFirstRender !== 'undefined' ? Boolean(!options?.runOnFirstRender) : false,\n )\n\n const prevDeps = useRef(deps)\n\n useDebouncedEffect(\n () => {\n const depsHaveChanged = deps.some(\n (dep, index) => !ignoredDeps.includes(dep) && !dequal(dep, prevDeps.current[index]),\n )\n\n if (depsHaveChanged || !hasInitialized.current) {\n effect()\n }\n\n prevDeps.current = deps\n hasInitialized.current = true\n },\n deps,\n options?.delay || 0,\n )\n}\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ;AACvB,SAASC,SAAS,EAAEC,MAAM,QAAQ;AAElC,SAASC,kBAAkB,QAAQ;AAEnC;;;;;;;;;;;;;AAaA,OAAO,SAASC,iBACdC,MAA4B,EAC5BC,IAA0B,EAC1BC,WAAiC,EACjCC,OAAwC;EAExC,MAAMC,cAAA,GAAiBP,MAAA,CACrB,OAAOM,OAAA,EAASE,gBAAA,KAAqB,cAAcC,OAAA,CAAQ,CAACH,OAAA,EAASE,gBAAA,IAAoB;EAG3F,MAAME,QAAA,GAAWV,MAAA,CAAOI,IAAA;EAExBL,SAAA,CAAU;IACR,MAAMY,eAAA,GAAkBP,IAAA,CAAKQ,IAAI,CAC/B,CAACC,GAAA,EAAKC,KAAA,KAAU,CAACT,WAAA,CAAYU,QAAQ,CAACF,GAAA,KAAQ,CAACf,MAAA,CAAOe,GAAA,EAAKH,QAAA,CAASM,OAAO,CAACF,KAAA,CAAM;IAGpF,IAAIH,eAAA,IAAmB,CAACJ,cAAA,CAAeS,OAAO,EAAE;MAC9Cb,MAAA;IACF;IAEAO,QAAA,CAASM,OAAO,GAAGZ,IAAA;IACnBG,cAAA,CAAeS,OAAO,GAAG;EAC3B,GAAGZ,IAAA;AACL;AAEA,OAAO,SAASa,0BACdd,MAA4B,EAC5BC,IAA0B,EAC1BC,WAAiC,EACjCC,OAAwD;EAExD,MAAMC,cAAA,GAAiBP,MAAA,CACrB,OAAOM,OAAA,EAASE,gBAAA,KAAqB,cAAcC,OAAA,CAAQ,CAACH,OAAA,EAASE,gBAAA,IAAoB;EAG3F,MAAME,QAAA,GAAWV,MAAA,CAAOI,IAAA;EAExBH,kBAAA,CACE;IACE,MAAMU,eAAA,GAAkBP,IAAA,CAAKQ,IAAI,CAC/B,CAACC,GAAA,EAAKC,KAAA,KAAU,CAACT,WAAA,CAAYU,QAAQ,CAACF,GAAA,KAAQ,CAACf,MAAA,CAAOe,GAAA,EAAKH,QAAA,CAASM,OAAO,CAACF,KAAA,CAAM;IAGpF,IAAIH,eAAA,IAAmB,CAACJ,cAAA,CAAeS,OAAO,EAAE;MAC9Cb,MAAA;IACF;IAEAO,QAAA,CAASM,OAAO,GAAGZ,IAAA;IACnBG,cAAA,CAAeS,OAAO,GAAG;EAC3B,GACAZ,IAAA,EACAE,OAAA,EAASY,KAAA,IAAS;AAEtB","ignoreList":[]}