@payloadcms/next 3.0.0-beta.44 → 3.0.0-beta.45

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,5 +1,5 @@
1
1
  @import './styles.scss';
2
- @import './toastify.scss';
2
+ @import './toasts.scss';
3
3
  @import './colors.scss';
4
4
 
5
5
  :root {
@@ -0,0 +1,111 @@
1
+ .payload-toast-container {
2
+ .payload-toast-close-button {
3
+ left: unset;
4
+ right: 0.5rem;
5
+ top: 1.55rem;
6
+ color: var(--theme-elevation-400);
7
+ background: unset;
8
+ border: none;
9
+ display: flex;
10
+ width: 1.25rem;
11
+ height: 1.25rem;
12
+ justify-content: center;
13
+ align-items: center;
14
+
15
+ &:hover {
16
+ background: none;
17
+ }
18
+
19
+ svg {
20
+ width: 2rem;
21
+ height: 2rem;
22
+ }
23
+
24
+ [dir='RTL'] & {
25
+ right: unset;
26
+ left: 0.5rem;
27
+ }
28
+ }
29
+
30
+ .payload-toast-item {
31
+ padding: 1rem 2.5rem 1rem 1rem;
32
+ color: var(--theme-text);
33
+ font-style: normal;
34
+ font-weight: 600;
35
+ display: flex;
36
+ gap: 1rem;
37
+ align-items: center;
38
+ width: 100%;
39
+ border-radius: 0.15rem;
40
+ border: 1px solid var(--theme-border-color);
41
+ background: var(--theme-input-bg);
42
+ box-shadow:
43
+ 0px 10px 4px -8px rgba(0, 2, 4, 0.02),
44
+ 0px 2px 3px 0px rgba(0, 2, 4, 0.05);
45
+
46
+ .toast-content {
47
+ transition: opacity 100ms cubic-bezier(0.55, 0.055, 0.675, 0.19);
48
+ }
49
+
50
+ &[data-front='false'] {
51
+ .toast-content {
52
+ opacity: 0;
53
+ }
54
+ }
55
+
56
+ &[data-expanded='true'] {
57
+ .toast-content {
58
+ opacity: 1;
59
+ }
60
+ }
61
+
62
+ .toast-icon {
63
+ svg {
64
+ width: 2.4rem;
65
+ height: 2.4rem;
66
+ }
67
+ }
68
+
69
+ &.toast-warning {
70
+ border-color: var(--theme-warning-200);
71
+ background-color: var(--theme-warning-100);
72
+ }
73
+
74
+ &.toast-error {
75
+ border-color: var(--theme-error-300);
76
+ background-color: var(--theme-error-150);
77
+ }
78
+
79
+ &.toast-success {
80
+ border-color: var(--theme-success-200);
81
+ background-color: var(--theme-success-100);
82
+ }
83
+
84
+ &.toast-info {
85
+ border-color: var(--theme-elevation-250);
86
+ background-color: var(--theme-elevation-100);
87
+ }
88
+
89
+ [data-theme='light'] & {
90
+ &.toast-warning {
91
+ border-color: var(--theme-warning-550);
92
+ background-color: var(--theme-warning-100);
93
+ }
94
+
95
+ &.toast-error {
96
+ border-color: var(--theme-error-200);
97
+ background-color: var(--theme-error-50);
98
+ }
99
+
100
+ &.toast-success {
101
+ border-color: var(--theme-success-550);
102
+ background-color: var(--theme-success-50);
103
+ }
104
+
105
+ &.toast-info {
106
+ border-color: var(--theme-border-color);
107
+ background-color: var(--theme-elevation-50);
108
+ }
109
+ }
110
+ }
111
+ }
@@ -15,7 +15,7 @@ import { useTranslation } from '@payloadcms/ui/providers/Translation';
15
15
  import { useSearchParams } from 'next/navigation.js';
16
16
  import qs from 'qs';
17
17
  import * as React from 'react';
18
- import { toast } from 'react-toastify';
18
+ import { toast } from 'sonner';
19
19
  import { SetDocumentStepNav } from '../Edit/Default/SetDocumentStepNav/index.js';
20
20
  import { LocaleSelector } from './LocaleSelector/index.js';
21
21
  import { RenderJSON } from './RenderJSON/index.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/views/API/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { CopyToClipboard } from '@payloadcms/ui/elements/CopyToClipboard'\nimport { Gutter } from '@payloadcms/ui/elements/Gutter'\nimport { Checkbox } from '@payloadcms/ui/fields/Checkbox'\nimport { NumberField as NumberInput } from '@payloadcms/ui/fields/Number'\nimport { Form } from '@payloadcms/ui/forms/Form'\nimport { MinimizeMaximize } from '@payloadcms/ui/icons/MinimizeMaximize'\nimport { SetViewActions } from '@payloadcms/ui/providers/Actions'\nimport { useComponentMap } from '@payloadcms/ui/providers/ComponentMap'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useDocumentInfo } from '@payloadcms/ui/providers/DocumentInfo'\nimport { useLocale } from '@payloadcms/ui/providers/Locale'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport { useSearchParams } from 'next/navigation.js'\nimport qs from 'qs'\nimport * as React from 'react'\nimport { toast } from 'react-toastify'\n\nimport { SetDocumentStepNav } from '../Edit/Default/SetDocumentStepNav/index.js'\nimport { LocaleSelector } from './LocaleSelector/index.js'\nimport { RenderJSON } from './RenderJSON/index.js'\nimport './index.scss'\n\nconst baseClass = 'query-inspector'\n\nexport const APIViewClient: React.FC = () => {\n const { id, collectionSlug, globalSlug, initialData } = useDocumentInfo()\n\n const searchParams = useSearchParams()\n const { i18n, t } = useTranslation()\n const { code } = useLocale()\n\n const { getComponentMap } = useComponentMap()\n\n const componentMap = getComponentMap({ collectionSlug, globalSlug })\n\n const {\n collections,\n globals,\n localization,\n routes: { api: apiRoute },\n serverURL,\n } = useConfig()\n\n const collectionConfig =\n collectionSlug && collections.find((collection) => collection.slug === collectionSlug)\n\n const globalConfig = globalSlug && globals.find((global) => global.slug === globalSlug)\n\n const localeOptions =\n localization &&\n localization.locales.map((locale) => ({ label: locale.label, value: locale.code }))\n\n let draftsEnabled: boolean = false\n let docEndpoint: string = ''\n\n if (collectionConfig) {\n draftsEnabled = Boolean(collectionConfig.versions?.drafts)\n docEndpoint = `/${collectionSlug}/${id}`\n }\n\n if (globalConfig) {\n draftsEnabled = Boolean(globalConfig.versions?.drafts)\n docEndpoint = `/globals/${globalSlug}`\n }\n\n const [data, setData] = React.useState<any>(initialData)\n const [draft, setDraft] = React.useState<boolean>(searchParams.get('draft') === 'true')\n const [locale, setLocale] = React.useState<string>(searchParams?.get('locale') || code)\n const [depth, setDepth] = React.useState<string>(searchParams.get('depth') || '1')\n const [authenticated, setAuthenticated] = React.useState<boolean>(true)\n const [fullscreen, setFullscreen] = React.useState<boolean>(false)\n\n const fetchURL = `${serverURL}${apiRoute}${docEndpoint}${qs.stringify(\n {\n depth,\n draft,\n locale,\n },\n { addQueryPrefix: true },\n )}`\n\n React.useEffect(() => {\n const fetchData = async () => {\n try {\n const res = await fetch(fetchURL, {\n credentials: authenticated ? 'include' : 'omit',\n headers: {\n 'Accept-Language': i18n.language,\n },\n method: 'GET',\n })\n\n try {\n const json = await res.json()\n setData(json)\n } catch (error) {\n toast.error('Error parsing response')\n console.error(error)\n }\n } catch (error) {\n toast.error('Error making request')\n console.error(error)\n }\n }\n\n void fetchData()\n }, [i18n.language, fetchURL, authenticated])\n\n return (\n <Gutter\n className={[baseClass, fullscreen && `${baseClass}--fullscreen`].filter(Boolean).join(' ')}\n right={false}\n >\n <SetDocumentStepNav\n collectionSlug={collectionSlug}\n globalLabel={globalConfig?.label}\n globalSlug={globalSlug}\n id={id}\n pluralLabel={collectionConfig ? collectionConfig?.labels?.plural : undefined}\n useAsTitle={collectionConfig ? collectionConfig?.admin?.useAsTitle : undefined}\n view=\"API\"\n />\n <SetViewActions actions={componentMap?.actionsMap?.Edit?.API} />\n <div className={`${baseClass}__configuration`}>\n <div className={`${baseClass}__api-url`}>\n <span className={`${baseClass}__label`}>\n API URL <CopyToClipboard value={fetchURL} />\n </span>\n <a href={fetchURL} rel=\"noopener noreferrer\" target=\"_blank\">\n {fetchURL}\n </a>\n </div>\n <Form\n initialState={{\n authenticated: {\n initialValue: authenticated || false,\n valid: true,\n value: authenticated || false,\n },\n depth: {\n initialValue: Number(depth || 0),\n valid: true,\n value: Number(depth || 0),\n },\n draft: {\n initialValue: draft || false,\n valid: true,\n value: draft || false,\n },\n locale: {\n initialValue: locale,\n valid: true,\n value: locale,\n },\n }}\n >\n <div className={`${baseClass}__form-fields`}>\n <div className={`${baseClass}__filter-query-checkboxes`}>\n {draftsEnabled && (\n <Checkbox\n label={t('version:draft')}\n name=\"draft\"\n onChange={() => setDraft(!draft)}\n path=\"draft\"\n />\n )}\n <Checkbox\n label={t('authentication:authenticated')}\n name=\"authenticated\"\n onChange={() => setAuthenticated(!authenticated)}\n path=\"authenticated\"\n />\n </div>\n {localeOptions && <LocaleSelector localeOptions={localeOptions} onChange={setLocale} />}\n <NumberInput\n label={t('general:depth')}\n max={10}\n min={0}\n name=\"depth\"\n onChange={(value) => setDepth(value?.toString())}\n path=\"depth\"\n step={1}\n />\n </div>\n </Form>\n </div>\n <div className={`${baseClass}__results-wrapper`}>\n <div className={`${baseClass}__toggle-fullscreen-button-container`}>\n <button\n aria-label=\"toggle fullscreen\"\n className={`${baseClass}__toggle-fullscreen-button`}\n onClick={() => setFullscreen(!fullscreen)}\n type=\"button\"\n >\n <MinimizeMaximize isMinimized={!fullscreen} />\n </button>\n </div>\n <div className={`${baseClass}__results`}>\n <RenderJSON object={data} />\n </div>\n </div>\n </Gutter>\n )\n}\n"],"names":["CopyToClipboard","Gutter","Checkbox","NumberField","NumberInput","Form","MinimizeMaximize","SetViewActions","useComponentMap","useConfig","useDocumentInfo","useLocale","useTranslation","useSearchParams","qs","React","toast","SetDocumentStepNav","LocaleSelector","RenderJSON","baseClass","APIViewClient","id","collectionSlug","globalSlug","initialData","searchParams","i18n","t","code","getComponentMap","componentMap","collections","globals","localization","routes","api","apiRoute","serverURL","collectionConfig","find","collection","slug","globalConfig","global","localeOptions","locales","map","locale","label","value","draftsEnabled","docEndpoint","Boolean","versions","drafts","data","setData","useState","draft","setDraft","get","setLocale","depth","setDepth","authenticated","setAuthenticated","fullscreen","setFullscreen","fetchURL","stringify","addQueryPrefix","useEffect","fetchData","res","fetch","credentials","headers","language","method","json","error","console","className","filter","join","right","globalLabel","pluralLabel","labels","plural","undefined","useAsTitle","admin","view","actions","actionsMap","Edit","API","div","span","a","href","rel","target","initialState","initialValue","valid","Number","name","onChange","path","max","min","toString","step","button","aria-label","onClick","type","isMinimized","object"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/views/API/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { CopyToClipboard } from '@payloadcms/ui/elements/CopyToClipboard'\nimport { Gutter } from '@payloadcms/ui/elements/Gutter'\nimport { Checkbox } from '@payloadcms/ui/fields/Checkbox'\nimport { NumberField as NumberInput } from '@payloadcms/ui/fields/Number'\nimport { Form } from '@payloadcms/ui/forms/Form'\nimport { MinimizeMaximize } from '@payloadcms/ui/icons/MinimizeMaximize'\nimport { SetViewActions } from '@payloadcms/ui/providers/Actions'\nimport { useComponentMap } from '@payloadcms/ui/providers/ComponentMap'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useDocumentInfo } from '@payloadcms/ui/providers/DocumentInfo'\nimport { useLocale } from '@payloadcms/ui/providers/Locale'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport { useSearchParams } from 'next/navigation.js'\nimport qs from 'qs'\nimport * as React from 'react'\nimport { toast } from 'sonner'\n\nimport { SetDocumentStepNav } from '../Edit/Default/SetDocumentStepNav/index.js'\nimport { LocaleSelector } from './LocaleSelector/index.js'\nimport { RenderJSON } from './RenderJSON/index.js'\nimport './index.scss'\n\nconst baseClass = 'query-inspector'\n\nexport const APIViewClient: React.FC = () => {\n const { id, collectionSlug, globalSlug, initialData } = useDocumentInfo()\n\n const searchParams = useSearchParams()\n const { i18n, t } = useTranslation()\n const { code } = useLocale()\n\n const { getComponentMap } = useComponentMap()\n\n const componentMap = getComponentMap({ collectionSlug, globalSlug })\n\n const {\n collections,\n globals,\n localization,\n routes: { api: apiRoute },\n serverURL,\n } = useConfig()\n\n const collectionConfig =\n collectionSlug && collections.find((collection) => collection.slug === collectionSlug)\n\n const globalConfig = globalSlug && globals.find((global) => global.slug === globalSlug)\n\n const localeOptions =\n localization &&\n localization.locales.map((locale) => ({ label: locale.label, value: locale.code }))\n\n let draftsEnabled: boolean = false\n let docEndpoint: string = ''\n\n if (collectionConfig) {\n draftsEnabled = Boolean(collectionConfig.versions?.drafts)\n docEndpoint = `/${collectionSlug}/${id}`\n }\n\n if (globalConfig) {\n draftsEnabled = Boolean(globalConfig.versions?.drafts)\n docEndpoint = `/globals/${globalSlug}`\n }\n\n const [data, setData] = React.useState<any>(initialData)\n const [draft, setDraft] = React.useState<boolean>(searchParams.get('draft') === 'true')\n const [locale, setLocale] = React.useState<string>(searchParams?.get('locale') || code)\n const [depth, setDepth] = React.useState<string>(searchParams.get('depth') || '1')\n const [authenticated, setAuthenticated] = React.useState<boolean>(true)\n const [fullscreen, setFullscreen] = React.useState<boolean>(false)\n\n const fetchURL = `${serverURL}${apiRoute}${docEndpoint}${qs.stringify(\n {\n depth,\n draft,\n locale,\n },\n { addQueryPrefix: true },\n )}`\n\n React.useEffect(() => {\n const fetchData = async () => {\n try {\n const res = await fetch(fetchURL, {\n credentials: authenticated ? 'include' : 'omit',\n headers: {\n 'Accept-Language': i18n.language,\n },\n method: 'GET',\n })\n\n try {\n const json = await res.json()\n setData(json)\n } catch (error) {\n toast.error('Error parsing response')\n console.error(error)\n }\n } catch (error) {\n toast.error('Error making request')\n console.error(error)\n }\n }\n\n void fetchData()\n }, [i18n.language, fetchURL, authenticated])\n\n return (\n <Gutter\n className={[baseClass, fullscreen && `${baseClass}--fullscreen`].filter(Boolean).join(' ')}\n right={false}\n >\n <SetDocumentStepNav\n collectionSlug={collectionSlug}\n globalLabel={globalConfig?.label}\n globalSlug={globalSlug}\n id={id}\n pluralLabel={collectionConfig ? collectionConfig?.labels?.plural : undefined}\n useAsTitle={collectionConfig ? collectionConfig?.admin?.useAsTitle : undefined}\n view=\"API\"\n />\n <SetViewActions actions={componentMap?.actionsMap?.Edit?.API} />\n <div className={`${baseClass}__configuration`}>\n <div className={`${baseClass}__api-url`}>\n <span className={`${baseClass}__label`}>\n API URL <CopyToClipboard value={fetchURL} />\n </span>\n <a href={fetchURL} rel=\"noopener noreferrer\" target=\"_blank\">\n {fetchURL}\n </a>\n </div>\n <Form\n initialState={{\n authenticated: {\n initialValue: authenticated || false,\n valid: true,\n value: authenticated || false,\n },\n depth: {\n initialValue: Number(depth || 0),\n valid: true,\n value: Number(depth || 0),\n },\n draft: {\n initialValue: draft || false,\n valid: true,\n value: draft || false,\n },\n locale: {\n initialValue: locale,\n valid: true,\n value: locale,\n },\n }}\n >\n <div className={`${baseClass}__form-fields`}>\n <div className={`${baseClass}__filter-query-checkboxes`}>\n {draftsEnabled && (\n <Checkbox\n label={t('version:draft')}\n name=\"draft\"\n onChange={() => setDraft(!draft)}\n path=\"draft\"\n />\n )}\n <Checkbox\n label={t('authentication:authenticated')}\n name=\"authenticated\"\n onChange={() => setAuthenticated(!authenticated)}\n path=\"authenticated\"\n />\n </div>\n {localeOptions && <LocaleSelector localeOptions={localeOptions} onChange={setLocale} />}\n <NumberInput\n label={t('general:depth')}\n max={10}\n min={0}\n name=\"depth\"\n onChange={(value) => setDepth(value?.toString())}\n path=\"depth\"\n step={1}\n />\n </div>\n </Form>\n </div>\n <div className={`${baseClass}__results-wrapper`}>\n <div className={`${baseClass}__toggle-fullscreen-button-container`}>\n <button\n aria-label=\"toggle fullscreen\"\n className={`${baseClass}__toggle-fullscreen-button`}\n onClick={() => setFullscreen(!fullscreen)}\n type=\"button\"\n >\n <MinimizeMaximize isMinimized={!fullscreen} />\n </button>\n </div>\n <div className={`${baseClass}__results`}>\n <RenderJSON object={data} />\n </div>\n </div>\n </Gutter>\n )\n}\n"],"names":["CopyToClipboard","Gutter","Checkbox","NumberField","NumberInput","Form","MinimizeMaximize","SetViewActions","useComponentMap","useConfig","useDocumentInfo","useLocale","useTranslation","useSearchParams","qs","React","toast","SetDocumentStepNav","LocaleSelector","RenderJSON","baseClass","APIViewClient","id","collectionSlug","globalSlug","initialData","searchParams","i18n","t","code","getComponentMap","componentMap","collections","globals","localization","routes","api","apiRoute","serverURL","collectionConfig","find","collection","slug","globalConfig","global","localeOptions","locales","map","locale","label","value","draftsEnabled","docEndpoint","Boolean","versions","drafts","data","setData","useState","draft","setDraft","get","setLocale","depth","setDepth","authenticated","setAuthenticated","fullscreen","setFullscreen","fetchURL","stringify","addQueryPrefix","useEffect","fetchData","res","fetch","credentials","headers","language","method","json","error","console","className","filter","join","right","globalLabel","pluralLabel","labels","plural","undefined","useAsTitle","admin","view","actions","actionsMap","Edit","API","div","span","a","href","rel","target","initialState","initialValue","valid","Number","name","onChange","path","max","min","toString","step","button","aria-label","onClick","type","isMinimized","object"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -10,7 +10,7 @@ import { useConfig } from '@payloadcms/ui/providers/Config';
10
10
  import { useDocumentInfo } from '@payloadcms/ui/providers/DocumentInfo';
11
11
  import { useTranslation } from '@payloadcms/ui/providers/Translation';
12
12
  import React, { useCallback, useEffect, useState } from 'react';
13
- import { toast } from 'react-toastify';
13
+ import { toast } from 'sonner';
14
14
  import { APIKey } from './APIKey.js';
15
15
  const baseClass = 'auth-fields';
16
16
  export const Auth = (props)=>{
@@ -51,9 +51,7 @@ export const Auth = (props)=>{
51
51
  method: 'post'
52
52
  });
53
53
  if (response.status === 200) {
54
- toast.success(t('authentication:successfullyUnlocked'), {
55
- autoClose: 3000
56
- });
54
+ toast.success(t('authentication:successfullyUnlocked'));
57
55
  } else {
58
56
  toast.error(t('authentication:failedToUnlock'));
59
57
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/views/Edit/Default/Auth/index.tsx"],"sourcesContent":["'use client'\n\nimport { Button } from '@payloadcms/ui/elements/Button'\nimport { Checkbox } from '@payloadcms/ui/fields/Checkbox'\nimport { ConfirmPassword } from '@payloadcms/ui/fields/ConfirmPassword'\nimport { Email } from '@payloadcms/ui/fields/Email'\nimport { Password } from '@payloadcms/ui/fields/Password'\nimport { useFormFields, useFormModified } from '@payloadcms/ui/forms/Form'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useDocumentInfo } from '@payloadcms/ui/providers/DocumentInfo'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { Props } from './types.js'\n\nimport { APIKey } from './APIKey.js'\nimport './index.scss'\n\nconst baseClass = 'auth-fields'\n\nexport const Auth: React.FC<Props> = (props) => {\n const {\n className,\n collectionSlug,\n disableLocalStrategy,\n email,\n operation,\n readOnly,\n requirePassword,\n useAPIKey,\n verify,\n } = props\n\n const [changingPassword, setChangingPassword] = useState(requirePassword)\n const enableAPIKey = useFormFields(([fields]) => (fields && fields?.enableAPIKey) || null)\n const dispatchFields = useFormFields((reducer) => reducer[1])\n const modified = useFormModified()\n const { i18n, t } = useTranslation()\n const { isInitializing } = useDocumentInfo()\n\n const {\n routes: { api },\n serverURL,\n } = useConfig()\n\n const handleChangePassword = useCallback(\n (state: boolean) => {\n if (!state) {\n dispatchFields({ type: 'REMOVE', path: 'password' })\n dispatchFields({ type: 'REMOVE', path: 'confirm-password' })\n }\n\n setChangingPassword(state)\n },\n [dispatchFields],\n )\n\n const unlock = useCallback(async () => {\n const url = `${serverURL}${api}/${collectionSlug}/unlock`\n const response = await fetch(url, {\n body: JSON.stringify({\n email,\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n\n if (response.status === 200) {\n toast.success(t('authentication:successfullyUnlocked'), { autoClose: 3000 })\n } else {\n toast.error(t('authentication:failedToUnlock'))\n }\n }, [i18n, serverURL, api, collectionSlug, email, t])\n\n useEffect(() => {\n if (!modified) {\n setChangingPassword(false)\n }\n }, [modified])\n\n if (disableLocalStrategy && !useAPIKey) {\n return null\n }\n\n const disabled = readOnly || isInitializing\n\n return (\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n {!disableLocalStrategy && (\n <React.Fragment>\n <Email\n autoComplete=\"email\"\n disabled={disabled}\n label={t('general:email')}\n name=\"email\"\n readOnly={readOnly}\n required\n />\n {(changingPassword || requirePassword) && (\n <div className={`${baseClass}__changing-password`}>\n <Password\n autoComplete=\"off\"\n disabled={disabled}\n label={t('authentication:newPassword')}\n name=\"password\"\n required\n />\n <ConfirmPassword disabled={readOnly} />\n </div>\n )}\n <div className={`${baseClass}__controls`}>\n {changingPassword && !requirePassword && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n onClick={() => handleChangePassword(false)}\n size=\"small\"\n >\n {t('general:cancel')}\n </Button>\n )}\n {!changingPassword && !requirePassword && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"change-password\"\n onClick={() => handleChangePassword(true)}\n size=\"small\"\n >\n {t('authentication:changePassword')}\n </Button>\n )}\n {operation === 'update' && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n onClick={() => unlock()}\n size=\"small\"\n >\n {t('authentication:forceUnlock')}\n </Button>\n )}\n </div>\n </React.Fragment>\n )}\n {useAPIKey && (\n <div className={`${baseClass}__api-key`}>\n <Checkbox\n disabled={disabled}\n label={t('authentication:enableAPIKey')}\n name=\"enableAPIKey\"\n readOnly={readOnly}\n />\n <APIKey enabled={!!enableAPIKey?.value} readOnly={readOnly} />\n </div>\n )}\n {verify && (\n <Checkbox\n disabled={disabled}\n label={t('authentication:verified')}\n name=\"_verified\"\n readOnly={readOnly}\n />\n )}\n </div>\n )\n}\n"],"names":["Button","Checkbox","ConfirmPassword","Email","Password","useFormFields","useFormModified","useConfig","useDocumentInfo","useTranslation","React","useCallback","useEffect","useState","toast","APIKey","baseClass","Auth","props","className","collectionSlug","disableLocalStrategy","email","operation","readOnly","requirePassword","useAPIKey","verify","changingPassword","setChangingPassword","enableAPIKey","fields","dispatchFields","reducer","modified","i18n","t","isInitializing","routes","api","serverURL","handleChangePassword","state","type","path","unlock","url","response","fetch","body","JSON","stringify","credentials","headers","language","method","status","success","autoClose","error","disabled","div","filter","Boolean","join","Fragment","autoComplete","label","name","required","buttonStyle","onClick","size","id","enabled","value"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/views/Edit/Default/Auth/index.tsx"],"sourcesContent":["'use client'\n\nimport { Button } from '@payloadcms/ui/elements/Button'\nimport { Checkbox } from '@payloadcms/ui/fields/Checkbox'\nimport { ConfirmPassword } from '@payloadcms/ui/fields/ConfirmPassword'\nimport { Email } from '@payloadcms/ui/fields/Email'\nimport { Password } from '@payloadcms/ui/fields/Password'\nimport { useFormFields, useFormModified } from '@payloadcms/ui/forms/Form'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useDocumentInfo } from '@payloadcms/ui/providers/DocumentInfo'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { Props } from './types.js'\n\nimport { APIKey } from './APIKey.js'\nimport './index.scss'\n\nconst baseClass = 'auth-fields'\n\nexport const Auth: React.FC<Props> = (props) => {\n const {\n className,\n collectionSlug,\n disableLocalStrategy,\n email,\n operation,\n readOnly,\n requirePassword,\n useAPIKey,\n verify,\n } = props\n\n const [changingPassword, setChangingPassword] = useState(requirePassword)\n const enableAPIKey = useFormFields(([fields]) => (fields && fields?.enableAPIKey) || null)\n const dispatchFields = useFormFields((reducer) => reducer[1])\n const modified = useFormModified()\n const { i18n, t } = useTranslation()\n const { isInitializing } = useDocumentInfo()\n\n const {\n routes: { api },\n serverURL,\n } = useConfig()\n\n const handleChangePassword = useCallback(\n (state: boolean) => {\n if (!state) {\n dispatchFields({ type: 'REMOVE', path: 'password' })\n dispatchFields({ type: 'REMOVE', path: 'confirm-password' })\n }\n\n setChangingPassword(state)\n },\n [dispatchFields],\n )\n\n const unlock = useCallback(async () => {\n const url = `${serverURL}${api}/${collectionSlug}/unlock`\n const response = await fetch(url, {\n body: JSON.stringify({\n email,\n }),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n\n if (response.status === 200) {\n toast.success(t('authentication:successfullyUnlocked'))\n } else {\n toast.error(t('authentication:failedToUnlock'))\n }\n }, [i18n, serverURL, api, collectionSlug, email, t])\n\n useEffect(() => {\n if (!modified) {\n setChangingPassword(false)\n }\n }, [modified])\n\n if (disableLocalStrategy && !useAPIKey) {\n return null\n }\n\n const disabled = readOnly || isInitializing\n\n return (\n <div className={[baseClass, className].filter(Boolean).join(' ')}>\n {!disableLocalStrategy && (\n <React.Fragment>\n <Email\n autoComplete=\"email\"\n disabled={disabled}\n label={t('general:email')}\n name=\"email\"\n readOnly={readOnly}\n required\n />\n {(changingPassword || requirePassword) && (\n <div className={`${baseClass}__changing-password`}>\n <Password\n autoComplete=\"off\"\n disabled={disabled}\n label={t('authentication:newPassword')}\n name=\"password\"\n required\n />\n <ConfirmPassword disabled={readOnly} />\n </div>\n )}\n <div className={`${baseClass}__controls`}>\n {changingPassword && !requirePassword && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n onClick={() => handleChangePassword(false)}\n size=\"small\"\n >\n {t('general:cancel')}\n </Button>\n )}\n {!changingPassword && !requirePassword && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n id=\"change-password\"\n onClick={() => handleChangePassword(true)}\n size=\"small\"\n >\n {t('authentication:changePassword')}\n </Button>\n )}\n {operation === 'update' && (\n <Button\n buttonStyle=\"secondary\"\n disabled={disabled}\n onClick={() => unlock()}\n size=\"small\"\n >\n {t('authentication:forceUnlock')}\n </Button>\n )}\n </div>\n </React.Fragment>\n )}\n {useAPIKey && (\n <div className={`${baseClass}__api-key`}>\n <Checkbox\n disabled={disabled}\n label={t('authentication:enableAPIKey')}\n name=\"enableAPIKey\"\n readOnly={readOnly}\n />\n <APIKey enabled={!!enableAPIKey?.value} readOnly={readOnly} />\n </div>\n )}\n {verify && (\n <Checkbox\n disabled={disabled}\n label={t('authentication:verified')}\n name=\"_verified\"\n readOnly={readOnly}\n />\n )}\n </div>\n )\n}\n"],"names":["Button","Checkbox","ConfirmPassword","Email","Password","useFormFields","useFormModified","useConfig","useDocumentInfo","useTranslation","React","useCallback","useEffect","useState","toast","APIKey","baseClass","Auth","props","className","collectionSlug","disableLocalStrategy","email","operation","readOnly","requirePassword","useAPIKey","verify","changingPassword","setChangingPassword","enableAPIKey","fields","dispatchFields","reducer","modified","i18n","t","isInitializing","routes","api","serverURL","handleChangePassword","state","type","path","unlock","url","response","fetch","body","JSON","stringify","credentials","headers","language","method","status","success","error","disabled","div","filter","Boolean","join","Fragment","autoComplete","label","name","required","buttonStyle","onClick","size","id","enabled","value"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -7,7 +7,7 @@ import { useConfig } from '@payloadcms/ui/providers/Config';
7
7
  import { useTranslation } from '@payloadcms/ui/providers/Translation';
8
8
  import { email } from 'payload/fields/validations';
9
9
  import React, { Fragment, useState } from 'react';
10
- import { toast } from 'react-toastify';
10
+ import { toast } from 'sonner';
11
11
  export const ForgotPasswordForm = ()=>{
12
12
  const config = useConfig();
13
13
  const { admin: { user: userSlug }, routes: { api } } = config;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/views/ForgotPassword/ForgotPasswordForm/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FormState, PayloadRequestWithData } from 'payload/types'\n\nimport { Email } from '@payloadcms/ui/fields/Email'\nimport { Form } from '@payloadcms/ui/forms/Form'\nimport { FormSubmit } from '@payloadcms/ui/forms/Submit'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport { email } from 'payload/fields/validations'\nimport React, { Fragment, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nexport const ForgotPasswordForm: React.FC = () => {\n const config = useConfig()\n\n const {\n admin: { user: userSlug },\n routes: { api },\n } = config\n\n const { t } = useTranslation()\n const [hasSubmitted, setHasSubmitted] = useState(false)\n\n const handleResponse = (res) => {\n res.json().then(\n () => {\n setHasSubmitted(true)\n },\n () => {\n toast.error(t('authentication:emailNotValid'))\n },\n )\n }\n\n const initialState: FormState = {\n email: {\n initialValue: '',\n valid: true,\n value: undefined,\n },\n }\n\n if (hasSubmitted) {\n return (\n <Fragment>\n <h1>{t('authentication:emailSent')}</h1>\n <p>{t('authentication:checkYourEmailForPasswordReset')}</p>\n </Fragment>\n )\n }\n\n return (\n <Form\n action={`${api}/${userSlug}/forgot-password`}\n handleResponse={handleResponse}\n initialState={initialState}\n method=\"POST\"\n >\n <h1>{t('authentication:forgotPassword')}</h1>\n <p>{t('authentication:forgotPasswordEmailInstructions')}</p>\n <Email\n autoComplete=\"email\"\n label={t('general:email')}\n name=\"email\"\n required\n validate={(value) =>\n email(value, {\n name: 'email',\n type: 'email',\n data: {},\n preferences: { fields: {} },\n req: { t } as PayloadRequestWithData,\n required: true,\n siblingData: {},\n })\n }\n />\n <FormSubmit>{t('general:submit')}</FormSubmit>\n </Form>\n )\n}\n"],"names":["Email","Form","FormSubmit","useConfig","useTranslation","email","React","Fragment","useState","toast","ForgotPasswordForm","config","admin","user","userSlug","routes","api","t","hasSubmitted","setHasSubmitted","handleResponse","res","json","then","error","initialState","initialValue","valid","value","undefined","h1","p","action","method","autoComplete","label","name","required","validate","type","data","preferences","fields","req","siblingData"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AAIA,SAASA,KAAK,QAAQ,8BAA6B;AACnD,SAASC,IAAI,QAAQ,4BAA2B;AAChD,SAASC,UAAU,QAAQ,8BAA6B;AACxD,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,KAAK,QAAQ,6BAA4B;AAClD,OAAOC,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,QAAO;AACjD,SAASC,KAAK,QAAQ,iBAAgB;AAEtC,OAAO,MAAMC,qBAA+B;IAC1C,MAAMC,SAASR;IAEf,MAAM,EACJS,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EACzBC,QAAQ,EAAEC,GAAG,EAAE,EAChB,GAAGL;IAEJ,MAAM,EAAEM,CAAC,EAAE,GAAGb;IACd,MAAM,CAACc,cAAcC,gBAAgB,GAAGX,SAAS;IAEjD,MAAMY,iBAAiB,CAACC;QACtBA,IAAIC,IAAI,GAAGC,IAAI,CACb;YACEJ,gBAAgB;QAClB,GACA;YACEV,MAAMe,KAAK,CAACP,EAAE;QAChB;IAEJ;IAEA,MAAMQ,eAA0B;QAC9BpB,OAAO;YACLqB,cAAc;YACdC,OAAO;YACPC,OAAOC;QACT;IACF;IAEA,IAAIX,cAAc;QAChB,qBACE,MAACX;;8BACC,KAACuB;8BAAIb,EAAE;;8BACP,KAACc;8BAAGd,EAAE;;;;IAGZ;IAEA,qBACE,MAAChB;QACC+B,QAAQ,CAAC,EAAEhB,IAAI,CAAC,EAAEF,SAAS,gBAAgB,CAAC;QAC5CM,gBAAgBA;QAChBK,cAAcA;QACdQ,QAAO;;0BAEP,KAACH;0BAAIb,EAAE;;0BACP,KAACc;0BAAGd,EAAE;;0BACN,KAACjB;gBACCkC,cAAa;gBACbC,OAAOlB,EAAE;gBACTmB,MAAK;gBACLC,QAAQ;gBACRC,UAAU,CAACV,QACTvB,MAAMuB,OAAO;wBACXQ,MAAM;wBACNG,MAAM;wBACNC,MAAM,CAAC;wBACPC,aAAa;4BAAEC,QAAQ,CAAC;wBAAE;wBAC1BC,KAAK;4BAAE1B;wBAAE;wBACToB,UAAU;wBACVO,aAAa,CAAC;oBAChB;;0BAGJ,KAAC1C;0BAAYe,EAAE;;;;AAGrB,EAAC"}
1
+ {"version":3,"sources":["../../../../src/views/ForgotPassword/ForgotPasswordForm/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FormState, PayloadRequestWithData } from 'payload/types'\n\nimport { Email } from '@payloadcms/ui/fields/Email'\nimport { Form } from '@payloadcms/ui/forms/Form'\nimport { FormSubmit } from '@payloadcms/ui/forms/Submit'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport { email } from 'payload/fields/validations'\nimport React, { Fragment, useState } from 'react'\nimport { toast } from 'sonner'\n\nexport const ForgotPasswordForm: React.FC = () => {\n const config = useConfig()\n\n const {\n admin: { user: userSlug },\n routes: { api },\n } = config\n\n const { t } = useTranslation()\n const [hasSubmitted, setHasSubmitted] = useState(false)\n\n const handleResponse = (res) => {\n res.json().then(\n () => {\n setHasSubmitted(true)\n },\n () => {\n toast.error(t('authentication:emailNotValid'))\n },\n )\n }\n\n const initialState: FormState = {\n email: {\n initialValue: '',\n valid: true,\n value: undefined,\n },\n }\n\n if (hasSubmitted) {\n return (\n <Fragment>\n <h1>{t('authentication:emailSent')}</h1>\n <p>{t('authentication:checkYourEmailForPasswordReset')}</p>\n </Fragment>\n )\n }\n\n return (\n <Form\n action={`${api}/${userSlug}/forgot-password`}\n handleResponse={handleResponse}\n initialState={initialState}\n method=\"POST\"\n >\n <h1>{t('authentication:forgotPassword')}</h1>\n <p>{t('authentication:forgotPasswordEmailInstructions')}</p>\n <Email\n autoComplete=\"email\"\n label={t('general:email')}\n name=\"email\"\n required\n validate={(value) =>\n email(value, {\n name: 'email',\n type: 'email',\n data: {},\n preferences: { fields: {} },\n req: { t } as PayloadRequestWithData,\n required: true,\n siblingData: {},\n })\n }\n />\n <FormSubmit>{t('general:submit')}</FormSubmit>\n </Form>\n )\n}\n"],"names":["Email","Form","FormSubmit","useConfig","useTranslation","email","React","Fragment","useState","toast","ForgotPasswordForm","config","admin","user","userSlug","routes","api","t","hasSubmitted","setHasSubmitted","handleResponse","res","json","then","error","initialState","initialValue","valid","value","undefined","h1","p","action","method","autoComplete","label","name","required","validate","type","data","preferences","fields","req","siblingData"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AAIA,SAASA,KAAK,QAAQ,8BAA6B;AACnD,SAASC,IAAI,QAAQ,4BAA2B;AAChD,SAASC,UAAU,QAAQ,8BAA6B;AACxD,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,KAAK,QAAQ,6BAA4B;AAClD,OAAOC,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,QAAO;AACjD,SAASC,KAAK,QAAQ,SAAQ;AAE9B,OAAO,MAAMC,qBAA+B;IAC1C,MAAMC,SAASR;IAEf,MAAM,EACJS,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EACzBC,QAAQ,EAAEC,GAAG,EAAE,EAChB,GAAGL;IAEJ,MAAM,EAAEM,CAAC,EAAE,GAAGb;IACd,MAAM,CAACc,cAAcC,gBAAgB,GAAGX,SAAS;IAEjD,MAAMY,iBAAiB,CAACC;QACtBA,IAAIC,IAAI,GAAGC,IAAI,CACb;YACEJ,gBAAgB;QAClB,GACA;YACEV,MAAMe,KAAK,CAACP,EAAE;QAChB;IAEJ;IAEA,MAAMQ,eAA0B;QAC9BpB,OAAO;YACLqB,cAAc;YACdC,OAAO;YACPC,OAAOC;QACT;IACF;IAEA,IAAIX,cAAc;QAChB,qBACE,MAACX;;8BACC,KAACuB;8BAAIb,EAAE;;8BACP,KAACc;8BAAGd,EAAE;;;;IAGZ;IAEA,qBACE,MAAChB;QACC+B,QAAQ,CAAC,EAAEhB,IAAI,CAAC,EAAEF,SAAS,gBAAgB,CAAC;QAC5CM,gBAAgBA;QAChBK,cAAcA;QACdQ,QAAO;;0BAEP,KAACH;0BAAIb,EAAE;;0BACP,KAACc;0BAAGd,EAAE;;0BACN,KAACjB;gBACCkC,cAAa;gBACbC,OAAOlB,EAAE;gBACTmB,MAAK;gBACLC,QAAQ;gBACRC,UAAU,CAACV,QACTvB,MAAMuB,OAAO;wBACXQ,MAAM;wBACNG,MAAM;wBACNC,MAAM,CAAC;wBACPC,aAAa;4BAAEC,QAAQ,CAAC;wBAAE;wBAC1BC,KAAK;4BAAE1B;wBAAE;wBACToB,UAAU;wBACVO,aAAa,CAAC;oBAChB;;0BAGJ,KAAC1C;0BAAYe,EAAE;;;;AAGrB,EAAC"}
@@ -10,7 +10,7 @@ import { useConfig } from '@payloadcms/ui/providers/Config';
10
10
  import { useTranslation } from '@payloadcms/ui/providers/Translation';
11
11
  import { useRouter } from 'next/navigation.js';
12
12
  import React from 'react';
13
- import { toast } from 'react-toastify';
13
+ import { toast } from 'sonner';
14
14
  const initialState = {
15
15
  'confirm-password': {
16
16
  initialValue: '',
@@ -34,9 +34,7 @@ export const ResetPasswordClient = ({ token })=>{
34
34
  history.push(`${admin}`);
35
35
  } else {
36
36
  history.push(`${admin}/login`);
37
- toast.success(i18n.t('general:updatedSuccessfully'), {
38
- autoClose: 3000
39
- });
37
+ toast.success(i18n.t('general:updatedSuccessfully'));
40
38
  }
41
39
  }, [
42
40
  fetchFullUser,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/views/ResetPassword/index.client.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload/types'\n\nimport { ConfirmPassword } from '@payloadcms/ui/fields/ConfirmPassword'\nimport { HiddenInput } from '@payloadcms/ui/fields/HiddenInput'\nimport { Password } from '@payloadcms/ui/fields/Password'\nimport { Form, useFormFields } from '@payloadcms/ui/forms/Form'\nimport { FormSubmit } from '@payloadcms/ui/forms/Submit'\nimport { useAuth } from '@payloadcms/ui/providers/Auth'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport { useRouter } from 'next/navigation.js'\nimport React from 'react'\nimport { toast } from 'react-toastify'\n\ntype Args = {\n token: string\n}\n\nconst initialState: FormState = {\n 'confirm-password': {\n initialValue: '',\n valid: false,\n value: '',\n },\n password: {\n initialValue: '',\n valid: false,\n value: '',\n },\n}\n\nexport const ResetPasswordClient: React.FC<Args> = ({ token }) => {\n const i18n = useTranslation()\n const {\n admin: { user: userSlug },\n routes: { admin, api },\n serverURL,\n } = useConfig()\n\n const history = useRouter()\n\n const { fetchFullUser } = useAuth()\n\n const onSuccess = React.useCallback(\n async (data) => {\n if (data.token) {\n await fetchFullUser()\n history.push(`${admin}`)\n } else {\n history.push(`${admin}/login`)\n toast.success(i18n.t('general:updatedSuccessfully'), { autoClose: 3000 })\n }\n },\n [fetchFullUser, history, admin, i18n],\n )\n\n return (\n <Form\n action={`${serverURL}${api}/${userSlug}/reset-password`}\n initialState={initialState}\n method=\"POST\"\n onSuccess={onSuccess}\n >\n <PasswordToConfirm />\n <ConfirmPassword />\n <HiddenInput forceUsePathFromProps name=\"token\" value={token} />\n <FormSubmit>{i18n.t('authentication:resetPassword')}</FormSubmit>\n </Form>\n )\n}\n\nconst PasswordToConfirm = () => {\n const { t } = useTranslation()\n const { value: confirmValue } = useFormFields(\n ([fields]) => (fields && fields?.['confirm-password']) || null,\n )\n\n const validate = React.useCallback(\n (value: string) => {\n if (!value) {\n return t('validation:required')\n }\n\n if (value === confirmValue) {\n return true\n }\n\n return t('fields:passwordsDoNotMatch')\n },\n [confirmValue, t],\n )\n\n return (\n <Password\n autoComplete=\"off\"\n label={t('authentication:newPassword')}\n name=\"password\"\n required\n validate={validate}\n />\n )\n}\n"],"names":["ConfirmPassword","HiddenInput","Password","Form","useFormFields","FormSubmit","useAuth","useConfig","useTranslation","useRouter","React","toast","initialState","initialValue","valid","value","password","ResetPasswordClient","token","i18n","admin","user","userSlug","routes","api","serverURL","history","fetchFullUser","onSuccess","useCallback","data","push","success","t","autoClose","action","method","PasswordToConfirm","forceUsePathFromProps","name","confirmValue","fields","validate","autoComplete","label","required"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AAGA,SAASA,eAAe,QAAQ,wCAAuC;AACvE,SAASC,WAAW,QAAQ,oCAAmC;AAC/D,SAASC,QAAQ,QAAQ,iCAAgC;AACzD,SAASC,IAAI,EAAEC,aAAa,QAAQ,4BAA2B;AAC/D,SAASC,UAAU,QAAQ,8BAA6B;AACxD,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,SAAS,QAAQ,qBAAoB;AAC9C,OAAOC,WAAW,QAAO;AACzB,SAASC,KAAK,QAAQ,iBAAgB;AAMtC,MAAMC,eAA0B;IAC9B,oBAAoB;QAClBC,cAAc;QACdC,OAAO;QACPC,OAAO;IACT;IACAC,UAAU;QACRH,cAAc;QACdC,OAAO;QACPC,OAAO;IACT;AACF;AAEA,OAAO,MAAME,sBAAsC,CAAC,EAAEC,KAAK,EAAE;IAC3D,MAAMC,OAAOX;IACb,MAAM,EACJY,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EACzBC,QAAQ,EAAEH,KAAK,EAAEI,GAAG,EAAE,EACtBC,SAAS,EACV,GAAGlB;IAEJ,MAAMmB,UAAUjB;IAEhB,MAAM,EAAEkB,aAAa,EAAE,GAAGrB;IAE1B,MAAMsB,YAAYlB,MAAMmB,WAAW,CACjC,OAAOC;QACL,IAAIA,KAAKZ,KAAK,EAAE;YACd,MAAMS;YACND,QAAQK,IAAI,CAAC,CAAC,EAAEX,MAAM,CAAC;QACzB,OAAO;YACLM,QAAQK,IAAI,CAAC,CAAC,EAAEX,MAAM,MAAM,CAAC;YAC7BT,MAAMqB,OAAO,CAACb,KAAKc,CAAC,CAAC,gCAAgC;gBAAEC,WAAW;YAAK;QACzE;IACF,GACA;QAACP;QAAeD;QAASN;QAAOD;KAAK;IAGvC,qBACE,MAAChB;QACCgC,QAAQ,CAAC,EAAEV,UAAU,EAAED,IAAI,CAAC,EAAEF,SAAS,eAAe,CAAC;QACvDV,cAAcA;QACdwB,QAAO;QACPR,WAAWA;;0BAEX,KAACS;0BACD,KAACrC;0BACD,KAACC;gBAAYqC,qBAAqB;gBAACC,MAAK;gBAAQxB,OAAOG;;0BACvD,KAACb;0BAAYc,KAAKc,CAAC,CAAC;;;;AAG1B,EAAC;AAED,MAAMI,oBAAoB;IACxB,MAAM,EAAEJ,CAAC,EAAE,GAAGzB;IACd,MAAM,EAAEO,OAAOyB,YAAY,EAAE,GAAGpC,cAC9B,CAAC,CAACqC,OAAO,GAAK,AAACA,UAAUA,QAAQ,CAAC,mBAAmB,IAAK;IAG5D,MAAMC,WAAWhC,MAAMmB,WAAW,CAChC,CAACd;QACC,IAAI,CAACA,OAAO;YACV,OAAOkB,EAAE;QACX;QAEA,IAAIlB,UAAUyB,cAAc;YAC1B,OAAO;QACT;QAEA,OAAOP,EAAE;IACX,GACA;QAACO;QAAcP;KAAE;IAGnB,qBACE,KAAC/B;QACCyC,cAAa;QACbC,OAAOX,EAAE;QACTM,MAAK;QACLM,QAAQ;QACRH,UAAUA;;AAGhB"}
1
+ {"version":3,"sources":["../../../src/views/ResetPassword/index.client.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload/types'\n\nimport { ConfirmPassword } from '@payloadcms/ui/fields/ConfirmPassword'\nimport { HiddenInput } from '@payloadcms/ui/fields/HiddenInput'\nimport { Password } from '@payloadcms/ui/fields/Password'\nimport { Form, useFormFields } from '@payloadcms/ui/forms/Form'\nimport { FormSubmit } from '@payloadcms/ui/forms/Submit'\nimport { useAuth } from '@payloadcms/ui/providers/Auth'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport { useRouter } from 'next/navigation.js'\nimport React from 'react'\nimport { toast } from 'sonner'\n\ntype Args = {\n token: string\n}\n\nconst initialState: FormState = {\n 'confirm-password': {\n initialValue: '',\n valid: false,\n value: '',\n },\n password: {\n initialValue: '',\n valid: false,\n value: '',\n },\n}\n\nexport const ResetPasswordClient: React.FC<Args> = ({ token }) => {\n const i18n = useTranslation()\n const {\n admin: { user: userSlug },\n routes: { admin, api },\n serverURL,\n } = useConfig()\n\n const history = useRouter()\n\n const { fetchFullUser } = useAuth()\n\n const onSuccess = React.useCallback(\n async (data) => {\n if (data.token) {\n await fetchFullUser()\n history.push(`${admin}`)\n } else {\n history.push(`${admin}/login`)\n toast.success(i18n.t('general:updatedSuccessfully'))\n }\n },\n [fetchFullUser, history, admin, i18n],\n )\n\n return (\n <Form\n action={`${serverURL}${api}/${userSlug}/reset-password`}\n initialState={initialState}\n method=\"POST\"\n onSuccess={onSuccess}\n >\n <PasswordToConfirm />\n <ConfirmPassword />\n <HiddenInput forceUsePathFromProps name=\"token\" value={token} />\n <FormSubmit>{i18n.t('authentication:resetPassword')}</FormSubmit>\n </Form>\n )\n}\n\nconst PasswordToConfirm = () => {\n const { t } = useTranslation()\n const { value: confirmValue } = useFormFields(\n ([fields]) => (fields && fields?.['confirm-password']) || null,\n )\n\n const validate = React.useCallback(\n (value: string) => {\n if (!value) {\n return t('validation:required')\n }\n\n if (value === confirmValue) {\n return true\n }\n\n return t('fields:passwordsDoNotMatch')\n },\n [confirmValue, t],\n )\n\n return (\n <Password\n autoComplete=\"off\"\n label={t('authentication:newPassword')}\n name=\"password\"\n required\n validate={validate}\n />\n )\n}\n"],"names":["ConfirmPassword","HiddenInput","Password","Form","useFormFields","FormSubmit","useAuth","useConfig","useTranslation","useRouter","React","toast","initialState","initialValue","valid","value","password","ResetPasswordClient","token","i18n","admin","user","userSlug","routes","api","serverURL","history","fetchFullUser","onSuccess","useCallback","data","push","success","t","action","method","PasswordToConfirm","forceUsePathFromProps","name","confirmValue","fields","validate","autoComplete","label","required"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AAGA,SAASA,eAAe,QAAQ,wCAAuC;AACvE,SAASC,WAAW,QAAQ,oCAAmC;AAC/D,SAASC,QAAQ,QAAQ,iCAAgC;AACzD,SAASC,IAAI,EAAEC,aAAa,QAAQ,4BAA2B;AAC/D,SAASC,UAAU,QAAQ,8BAA6B;AACxD,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,SAAS,QAAQ,qBAAoB;AAC9C,OAAOC,WAAW,QAAO;AACzB,SAASC,KAAK,QAAQ,SAAQ;AAM9B,MAAMC,eAA0B;IAC9B,oBAAoB;QAClBC,cAAc;QACdC,OAAO;QACPC,OAAO;IACT;IACAC,UAAU;QACRH,cAAc;QACdC,OAAO;QACPC,OAAO;IACT;AACF;AAEA,OAAO,MAAME,sBAAsC,CAAC,EAAEC,KAAK,EAAE;IAC3D,MAAMC,OAAOX;IACb,MAAM,EACJY,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EACzBC,QAAQ,EAAEH,KAAK,EAAEI,GAAG,EAAE,EACtBC,SAAS,EACV,GAAGlB;IAEJ,MAAMmB,UAAUjB;IAEhB,MAAM,EAAEkB,aAAa,EAAE,GAAGrB;IAE1B,MAAMsB,YAAYlB,MAAMmB,WAAW,CACjC,OAAOC;QACL,IAAIA,KAAKZ,KAAK,EAAE;YACd,MAAMS;YACND,QAAQK,IAAI,CAAC,CAAC,EAAEX,MAAM,CAAC;QACzB,OAAO;YACLM,QAAQK,IAAI,CAAC,CAAC,EAAEX,MAAM,MAAM,CAAC;YAC7BT,MAAMqB,OAAO,CAACb,KAAKc,CAAC,CAAC;QACvB;IACF,GACA;QAACN;QAAeD;QAASN;QAAOD;KAAK;IAGvC,qBACE,MAAChB;QACC+B,QAAQ,CAAC,EAAET,UAAU,EAAED,IAAI,CAAC,EAAEF,SAAS,eAAe,CAAC;QACvDV,cAAcA;QACduB,QAAO;QACPP,WAAWA;;0BAEX,KAACQ;0BACD,KAACpC;0BACD,KAACC;gBAAYoC,qBAAqB;gBAACC,MAAK;gBAAQvB,OAAOG;;0BACvD,KAACb;0BAAYc,KAAKc,CAAC,CAAC;;;;AAG1B,EAAC;AAED,MAAMG,oBAAoB;IACxB,MAAM,EAAEH,CAAC,EAAE,GAAGzB;IACd,MAAM,EAAEO,OAAOwB,YAAY,EAAE,GAAGnC,cAC9B,CAAC,CAACoC,OAAO,GAAK,AAACA,UAAUA,QAAQ,CAAC,mBAAmB,IAAK;IAG5D,MAAMC,WAAW/B,MAAMmB,WAAW,CAChC,CAACd;QACC,IAAI,CAACA,OAAO;YACV,OAAOkB,EAAE;QACX;QAEA,IAAIlB,UAAUwB,cAAc;YAC1B,OAAO;QACT;QAEA,OAAON,EAAE;IACX,GACA;QAACM;QAAcN;KAAE;IAGnB,qBACE,KAAC/B;QACCwC,cAAa;QACbC,OAAOV,EAAE;QACTK,MAAK;QACLM,QAAQ;QACRH,UAAUA;;AAGhB"}
@@ -10,7 +10,7 @@ import { MinimalTemplate } from '@payloadcms/ui/templates/Minimal';
10
10
  import { requests } from '@payloadcms/ui/utilities/api';
11
11
  import { useRouter } from 'next/navigation.js';
12
12
  import React, { Fragment, useCallback, useState } from 'react';
13
- import { toast } from 'react-toastify';
13
+ import { toast } from 'sonner';
14
14
  const baseClass = 'restore-version';
15
15
  const modalSlug = 'restore-version';
16
16
  const Restore = ({ className, collectionSlug, globalSlug, label, originalDocID, versionDate, versionID })=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/views/Version/Restore/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport { Button } from '@payloadcms/ui/elements/Button'\nimport { Modal, useModal } from '@payloadcms/ui/elements/Modal'\nimport { Pill } from '@payloadcms/ui/elements/Pill'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport { MinimalTemplate } from '@payloadcms/ui/templates/Minimal'\nimport { requests } from '@payloadcms/ui/utilities/api'\nimport { useRouter } from 'next/navigation.js'\nimport React, { Fragment, useCallback, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { Props } from './types.js'\n\n// import { requests } from '../../../../api'\nimport './index.scss'\n\nconst baseClass = 'restore-version'\nconst modalSlug = 'restore-version'\n\nconst Restore: React.FC<Props> = ({\n className,\n collectionSlug,\n globalSlug,\n label,\n originalDocID,\n versionDate,\n versionID,\n}) => {\n const {\n routes: { admin, api },\n serverURL,\n } = useConfig()\n const { toggleModal } = useModal()\n const [processing, setProcessing] = useState(false)\n const router = useRouter()\n const { i18n, t } = useTranslation()\n\n const restoreMessage = t('version:aboutToRestoreGlobal', {\n label: getTranslation(label, i18n),\n versionDate,\n })\n\n let fetchURL = `${serverURL}${api}`\n let redirectURL: string\n\n if (collectionSlug) {\n fetchURL = `${fetchURL}/${collectionSlug}/versions/${versionID}`\n redirectURL = `${admin}/collections/${collectionSlug}/${originalDocID}`\n }\n\n if (globalSlug) {\n fetchURL = `${fetchURL}/globals/${globalSlug}/versions/${versionID}`\n redirectURL = `${admin}/globals/${globalSlug}`\n }\n\n const handleRestore = useCallback(async () => {\n setProcessing(true)\n\n const res = await requests.post(fetchURL, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (res.status === 200) {\n const json = await res.json()\n toast.success(json.message)\n router.push(redirectURL)\n } else {\n toast.error(t('version:problemRestoringVersion'))\n }\n }, [fetchURL, redirectURL, t, i18n, router])\n\n return (\n <Fragment>\n <Pill\n className={[baseClass, className].filter(Boolean).join(' ')}\n onClick={() => toggleModal(modalSlug)}\n >\n {t('version:restoreThisVersion')}\n </Pill>\n <Modal className={`${baseClass}__modal`} slug={modalSlug}>\n <MinimalTemplate className={`${baseClass}__modal-template`}>\n <h1>{t('version:confirmVersionRestoration')}</h1>\n <p>{restoreMessage}</p>\n <Button\n buttonStyle=\"secondary\"\n onClick={processing ? undefined : () => toggleModal(modalSlug)}\n type=\"button\"\n >\n {t('general:cancel')}\n </Button>\n <Button onClick={processing ? undefined : handleRestore}>\n {processing ? t('version:restoring') : t('general:confirm')}\n </Button>\n </MinimalTemplate>\n </Modal>\n </Fragment>\n )\n}\n\nexport default Restore\n"],"names":["getTranslation","Button","Modal","useModal","Pill","useConfig","useTranslation","MinimalTemplate","requests","useRouter","React","Fragment","useCallback","useState","toast","baseClass","modalSlug","Restore","className","collectionSlug","globalSlug","label","originalDocID","versionDate","versionID","routes","admin","api","serverURL","toggleModal","processing","setProcessing","router","i18n","t","restoreMessage","fetchURL","redirectURL","handleRestore","res","post","headers","language","status","json","success","message","push","error","filter","Boolean","join","onClick","slug","h1","p","buttonStyle","undefined","type"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/views/Version/Restore/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport { Button } from '@payloadcms/ui/elements/Button'\nimport { Modal, useModal } from '@payloadcms/ui/elements/Modal'\nimport { Pill } from '@payloadcms/ui/elements/Pill'\nimport { useConfig } from '@payloadcms/ui/providers/Config'\nimport { useTranslation } from '@payloadcms/ui/providers/Translation'\nimport { MinimalTemplate } from '@payloadcms/ui/templates/Minimal'\nimport { requests } from '@payloadcms/ui/utilities/api'\nimport { useRouter } from 'next/navigation.js'\nimport React, { Fragment, useCallback, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { Props } from './types.js'\n\n// import { requests } from '../../../../api'\nimport './index.scss'\n\nconst baseClass = 'restore-version'\nconst modalSlug = 'restore-version'\n\nconst Restore: React.FC<Props> = ({\n className,\n collectionSlug,\n globalSlug,\n label,\n originalDocID,\n versionDate,\n versionID,\n}) => {\n const {\n routes: { admin, api },\n serverURL,\n } = useConfig()\n const { toggleModal } = useModal()\n const [processing, setProcessing] = useState(false)\n const router = useRouter()\n const { i18n, t } = useTranslation()\n\n const restoreMessage = t('version:aboutToRestoreGlobal', {\n label: getTranslation(label, i18n),\n versionDate,\n })\n\n let fetchURL = `${serverURL}${api}`\n let redirectURL: string\n\n if (collectionSlug) {\n fetchURL = `${fetchURL}/${collectionSlug}/versions/${versionID}`\n redirectURL = `${admin}/collections/${collectionSlug}/${originalDocID}`\n }\n\n if (globalSlug) {\n fetchURL = `${fetchURL}/globals/${globalSlug}/versions/${versionID}`\n redirectURL = `${admin}/globals/${globalSlug}`\n }\n\n const handleRestore = useCallback(async () => {\n setProcessing(true)\n\n const res = await requests.post(fetchURL, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (res.status === 200) {\n const json = await res.json()\n toast.success(json.message)\n router.push(redirectURL)\n } else {\n toast.error(t('version:problemRestoringVersion'))\n }\n }, [fetchURL, redirectURL, t, i18n, router])\n\n return (\n <Fragment>\n <Pill\n className={[baseClass, className].filter(Boolean).join(' ')}\n onClick={() => toggleModal(modalSlug)}\n >\n {t('version:restoreThisVersion')}\n </Pill>\n <Modal className={`${baseClass}__modal`} slug={modalSlug}>\n <MinimalTemplate className={`${baseClass}__modal-template`}>\n <h1>{t('version:confirmVersionRestoration')}</h1>\n <p>{restoreMessage}</p>\n <Button\n buttonStyle=\"secondary\"\n onClick={processing ? undefined : () => toggleModal(modalSlug)}\n type=\"button\"\n >\n {t('general:cancel')}\n </Button>\n <Button onClick={processing ? undefined : handleRestore}>\n {processing ? t('version:restoring') : t('general:confirm')}\n </Button>\n </MinimalTemplate>\n </Modal>\n </Fragment>\n )\n}\n\nexport default Restore\n"],"names":["getTranslation","Button","Modal","useModal","Pill","useConfig","useTranslation","MinimalTemplate","requests","useRouter","React","Fragment","useCallback","useState","toast","baseClass","modalSlug","Restore","className","collectionSlug","globalSlug","label","originalDocID","versionDate","versionID","routes","admin","api","serverURL","toggleModal","processing","setProcessing","router","i18n","t","restoreMessage","fetchURL","redirectURL","handleRestore","res","post","headers","language","status","json","success","message","push","error","filter","Boolean","join","onClick","slug","h1","p","buttonStyle","undefined","type"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AACA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,SAASC,MAAM,QAAQ,iCAAgC;AACvD,SAASC,KAAK,EAAEC,QAAQ,QAAQ,gCAA+B;AAC/D,SAASC,IAAI,QAAQ,+BAA8B;AACnD,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,eAAe,QAAQ,mCAAkC;AAClE,SAASC,QAAQ,QAAQ,+BAA8B;AACvD,SAASC,SAAS,QAAQ,qBAAoB;AAC9C,OAAOC,SAASC,QAAQ,EAAEC,WAAW,EAAEC,QAAQ,QAAQ,QAAO;AAC9D,SAASC,KAAK,QAAQ,SAAQ;AAO9B,MAAMC,YAAY;AAClB,MAAMC,YAAY;AAElB,MAAMC,UAA2B,CAAC,EAChCC,SAAS,EACTC,cAAc,EACdC,UAAU,EACVC,KAAK,EACLC,aAAa,EACbC,WAAW,EACXC,SAAS,EACV;IACC,MAAM,EACJC,QAAQ,EAAEC,KAAK,EAAEC,GAAG,EAAE,EACtBC,SAAS,EACV,GAAGvB;IACJ,MAAM,EAAEwB,WAAW,EAAE,GAAG1B;IACxB,MAAM,CAAC2B,YAAYC,cAAc,GAAGlB,SAAS;IAC7C,MAAMmB,SAASvB;IACf,MAAM,EAAEwB,IAAI,EAAEC,CAAC,EAAE,GAAG5B;IAEpB,MAAM6B,iBAAiBD,EAAE,gCAAgC;QACvDb,OAAOrB,eAAeqB,OAAOY;QAC7BV;IACF;IAEA,IAAIa,WAAW,CAAC,EAAER,UAAU,EAAED,IAAI,CAAC;IACnC,IAAIU;IAEJ,IAAIlB,gBAAgB;QAClBiB,WAAW,CAAC,EAAEA,SAAS,CAAC,EAAEjB,eAAe,UAAU,EAAEK,UAAU,CAAC;QAChEa,cAAc,CAAC,EAAEX,MAAM,aAAa,EAAEP,eAAe,CAAC,EAAEG,cAAc,CAAC;IACzE;IAEA,IAAIF,YAAY;QACdgB,WAAW,CAAC,EAAEA,SAAS,SAAS,EAAEhB,WAAW,UAAU,EAAEI,UAAU,CAAC;QACpEa,cAAc,CAAC,EAAEX,MAAM,SAAS,EAAEN,WAAW,CAAC;IAChD;IAEA,MAAMkB,gBAAgB1B,YAAY;QAChCmB,cAAc;QAEd,MAAMQ,MAAM,MAAM/B,SAASgC,IAAI,CAACJ,UAAU;YACxCK,SAAS;gBACP,mBAAmBR,KAAKS,QAAQ;YAClC;QACF;QAEA,IAAIH,IAAII,MAAM,KAAK,KAAK;YACtB,MAAMC,OAAO,MAAML,IAAIK,IAAI;YAC3B9B,MAAM+B,OAAO,CAACD,KAAKE,OAAO;YAC1Bd,OAAOe,IAAI,CAACV;QACd,OAAO;YACLvB,MAAMkC,KAAK,CAACd,EAAE;QAChB;IACF,GAAG;QAACE;QAAUC;QAAaH;QAAGD;QAAMD;KAAO;IAE3C,qBACE,MAACrB;;0BACC,KAACP;gBACCc,WAAW;oBAACH;oBAAWG;iBAAU,CAAC+B,MAAM,CAACC,SAASC,IAAI,CAAC;gBACvDC,SAAS,IAAMvB,YAAYb;0BAE1BkB,EAAE;;0BAEL,KAAChC;gBAAMgB,WAAW,CAAC,EAAEH,UAAU,OAAO,CAAC;gBAAEsC,MAAMrC;0BAC7C,cAAA,MAACT;oBAAgBW,WAAW,CAAC,EAAEH,UAAU,gBAAgB,CAAC;;sCACxD,KAACuC;sCAAIpB,EAAE;;sCACP,KAACqB;sCAAGpB;;sCACJ,KAAClC;4BACCuD,aAAY;4BACZJ,SAAStB,aAAa2B,YAAY,IAAM5B,YAAYb;4BACpD0C,MAAK;sCAEJxB,EAAE;;sCAEL,KAACjC;4BAAOmD,SAAStB,aAAa2B,YAAYnB;sCACvCR,aAAaI,EAAE,uBAAuBA,EAAE;;;;;;;AAMrD;AAEA,eAAejB,QAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/next",
3
- "version": "3.0.0-beta.44",
3
+ "version": "3.0.0-beta.45",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -39,12 +39,12 @@
39
39
  "path-to-regexp": "^6.2.1",
40
40
  "qs": "6.11.2",
41
41
  "react-diff-viewer-continued": "3.2.6",
42
- "react-toastify": "10.0.5",
43
42
  "sass": "1.77.4",
43
+ "sonner": "^1.5.0",
44
44
  "ws": "^8.16.0",
45
- "@payloadcms/graphql": "3.0.0-beta.44",
46
- "@payloadcms/translations": "3.0.0-beta.44",
47
- "@payloadcms/ui": "3.0.0-beta.44"
45
+ "@payloadcms/graphql": "3.0.0-beta.45",
46
+ "@payloadcms/ui": "3.0.0-beta.45",
47
+ "@payloadcms/translations": "3.0.0-beta.45"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@next/eslint-plugin-next": "^14.1.0",
@@ -63,13 +63,13 @@
63
63
  "terser-webpack-plugin": "^5.3.10",
64
64
  "webpack": "^5.78.0",
65
65
  "webpack-cli": "^5.1.4",
66
- "@payloadcms/eslint-config": "1.1.1",
67
- "payload": "3.0.0-beta.44"
66
+ "payload": "3.0.0-beta.45",
67
+ "@payloadcms/eslint-config": "1.1.1"
68
68
  },
69
69
  "peerDependencies": {
70
70
  "graphql": "^16.8.1",
71
71
  "next": "^15.0.0-rc.0",
72
- "payload": "3.0.0-beta.44"
72
+ "payload": "3.0.0-beta.45"
73
73
  },
74
74
  "engines": {
75
75
  "node": "^18.20.2 || >=20.9.0"
@@ -1,58 +0,0 @@
1
- @import 'vars';
2
-
3
- .Toastify {
4
- .Toastify__toast-container {
5
- left: base(5);
6
- transform: none;
7
- right: base(5);
8
- width: auto;
9
- }
10
-
11
- .Toastify__toast {
12
- padding: base(0.5);
13
- border-radius: $style-radius-m;
14
- font-weight: 600;
15
- }
16
-
17
- .Toastify__close-button {
18
- align-self: center;
19
- opacity: 0.7;
20
-
21
- &:hover {
22
- opacity: 1;
23
- }
24
- }
25
-
26
- .Toastify__toast--success {
27
- color: var(--color-success-900);
28
- background: var(--color-success-500);
29
-
30
- .Toastify__progress-bar {
31
- background-color: var(--color-success-900);
32
- }
33
- }
34
-
35
- .Toastify__close-button--success {
36
- color: var(--color-success-900);
37
- }
38
-
39
- .Toastify__toast--error {
40
- background: var(--theme-error-500);
41
- color: #fff;
42
-
43
- .Toastify__progress-bar {
44
- background-color: #fff;
45
- }
46
- }
47
-
48
- .Toastify__close-button--light {
49
- color: inherit;
50
- }
51
-
52
- @include mid-break {
53
- .Toastify__toast-container {
54
- left: $baseline;
55
- right: $baseline;
56
- }
57
- }
58
- }