@payloadcms/next 3.0.0-beta.72 → 3.0.0-beta.74

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 (61) hide show
  1. package/dist/cjs/withPayload.cjs +10 -5
  2. package/dist/cjs/withPayload.cjs.map +1 -1
  3. package/dist/elements/DocumentHeader/Tabs/Tab/index.scss +7 -5
  4. package/dist/elements/EmailAndUsername/index.d.ts +14 -0
  5. package/dist/elements/EmailAndUsername/index.d.ts.map +1 -0
  6. package/dist/elements/EmailAndUsername/index.js +84 -0
  7. package/dist/elements/EmailAndUsername/index.js.map +1 -0
  8. package/dist/elements/LeaveWithoutSaving/index.d.ts.map +1 -1
  9. package/dist/elements/LeaveWithoutSaving/index.js +2 -0
  10. package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
  11. package/dist/elements/Nav/index.client.d.ts.map +1 -1
  12. package/dist/elements/Nav/index.client.js +5 -1
  13. package/dist/elements/Nav/index.client.js.map +1 -1
  14. package/dist/layouts/Root/index.d.ts.map +1 -1
  15. package/dist/layouts/Root/index.js +0 -17
  16. package/dist/layouts/Root/index.js.map +1 -1
  17. package/dist/prod/styles.css +1 -1
  18. package/dist/scss/app.scss +5 -10
  19. package/dist/scss/toastify.scss +59 -0
  20. package/dist/scss/toasts.scss +75 -45
  21. package/dist/scss/type.scss +14 -23
  22. package/dist/scss/vars.scss +26 -47
  23. package/dist/views/CreateFirstUser/index.client.d.ts +2 -3
  24. package/dist/views/CreateFirstUser/index.client.d.ts.map +1 -1
  25. package/dist/views/CreateFirstUser/index.client.js +8 -14
  26. package/dist/views/CreateFirstUser/index.client.js.map +1 -1
  27. package/dist/views/CreateFirstUser/index.d.ts.map +1 -1
  28. package/dist/views/CreateFirstUser/index.js +1 -7
  29. package/dist/views/CreateFirstUser/index.js.map +1 -1
  30. package/dist/views/CreateFirstUser/index.scss +4 -0
  31. package/dist/views/Dashboard/Default/index.scss +11 -7
  32. package/dist/views/Edit/Default/Auth/index.d.ts.map +1 -1
  33. package/dist/views/Edit/Default/Auth/index.js +11 -33
  34. package/dist/views/Edit/Default/Auth/index.js.map +1 -1
  35. package/dist/views/Edit/Default/index.scss +2 -2
  36. package/dist/views/ForgotPassword/index.js +1 -0
  37. package/dist/views/ForgotPassword/index.js.map +1 -1
  38. package/dist/views/List/Default/index.scss +2 -5
  39. package/dist/views/Login/LoginField/index.d.ts +2 -0
  40. package/dist/views/Login/LoginField/index.d.ts.map +1 -1
  41. package/dist/views/Login/LoginField/index.js +8 -66
  42. package/dist/views/Login/LoginField/index.js.map +1 -1
  43. package/dist/views/Login/LoginForm/index.js +1 -0
  44. package/dist/views/Login/LoginForm/index.js.map +1 -1
  45. package/dist/views/Logout/LogoutClient.d.ts.map +1 -1
  46. package/dist/views/Logout/LogoutClient.js +2 -1
  47. package/dist/views/Logout/LogoutClient.js.map +1 -1
  48. package/dist/views/NotFound/index.client.d.ts.map +1 -1
  49. package/dist/views/NotFound/index.client.js +1 -0
  50. package/dist/views/NotFound/index.client.js.map +1 -1
  51. package/dist/views/ResetPassword/index.client.js +1 -0
  52. package/dist/views/ResetPassword/index.client.js.map +1 -1
  53. package/dist/views/Unauthorized/index.d.ts.map +1 -1
  54. package/dist/views/Unauthorized/index.js +1 -0
  55. package/dist/views/Unauthorized/index.js.map +1 -1
  56. package/dist/views/Version/Default/index.js +1 -1
  57. package/dist/views/Version/Default/index.js.map +1 -1
  58. package/dist/withPayload.d.ts.map +1 -1
  59. package/dist/withPayload.js +10 -5
  60. package/dist/withPayload.js.map +1 -1
  61. package/package.json +7 -7
@@ -1,9 +1,9 @@
1
- @import './styles.scss';
1
+ @import 'styles';
2
2
  @import './toasts.scss';
3
3
  @import './colors.scss';
4
4
 
5
5
  :root {
6
- --base-px: 25;
6
+ --base-px: 20;
7
7
  --base-body-size: 13;
8
8
  --base: calc((var(--base-px) / var(--base-body-size)) * 1rem);
9
9
 
@@ -21,6 +21,7 @@
21
21
  --theme-baseline-body-size: #{$baseline-body-size};
22
22
  --font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
23
23
  sans-serif;
24
+ --font-serif: Georgia, 'Bitstream Charter', 'Charis SIL', Utopia, 'URW Bookman L', serif;
24
25
  --font-mono: monospace;
25
26
 
26
27
  --style-radius-s: #{$style-radius-s};
@@ -67,12 +68,6 @@ html {
67
68
  @extend %body;
68
69
  background: var(--theme-bg);
69
70
  -webkit-font-smoothing: antialiased;
70
- opacity: 0;
71
-
72
- &[data-theme='dark'],
73
- &[data-theme='light'] {
74
- opacity: initial;
75
- }
76
71
 
77
72
  &[data-theme='dark'] {
78
73
  --theme-bg: var(--theme-elevation-0);
@@ -111,12 +106,12 @@ body {
111
106
  }
112
107
 
113
108
  ::selection {
114
- background: var(--theme-success-500);
109
+ background: var(--color-success-250);
115
110
  color: var(--theme-base-800);
116
111
  }
117
112
 
118
113
  ::-moz-selection {
119
- background: var(--theme-success-500);
114
+ background: var(--color-success-250);
120
115
  color: var(--theme-base-800);
121
116
  }
122
117
 
@@ -0,0 +1,59 @@
1
+ @import 'vars';
2
+ @import 'queries';
3
+
4
+ .Toastify {
5
+ .Toastify__toast-container {
6
+ left: base(5);
7
+ transform: none;
8
+ right: base(5);
9
+ width: auto;
10
+ }
11
+
12
+ .Toastify__toast {
13
+ padding: base(0.5);
14
+ border-radius: $style-radius-m;
15
+ font-weight: 600;
16
+ }
17
+
18
+ .Toastify__close-button {
19
+ align-self: center;
20
+ opacity: 0.7;
21
+
22
+ &:hover {
23
+ opacity: 1;
24
+ }
25
+ }
26
+
27
+ .Toastify__toast--success {
28
+ color: var(--color-success-900);
29
+ background: var(--color-success-500);
30
+
31
+ .Toastify__progress-bar {
32
+ background-color: var(--color-success-900);
33
+ }
34
+ }
35
+
36
+ .Toastify__close-button--success {
37
+ color: var(--color-success-900);
38
+ }
39
+
40
+ .Toastify__toast--error {
41
+ background: var(--theme-error-500);
42
+ color: #fff;
43
+
44
+ .Toastify__progress-bar {
45
+ background-color: #fff;
46
+ }
47
+ }
48
+
49
+ .Toastify__close-button--light {
50
+ color: inherit;
51
+ }
52
+
53
+ @include mid-break {
54
+ .Toastify__toast-container {
55
+ left: $baseline;
56
+ right: $baseline;
57
+ }
58
+ }
59
+ }
@@ -1,24 +1,28 @@
1
+ @import './styles.scss';
2
+
1
3
  .payload-toast-container {
4
+ padding: 0;
5
+ margin: 0;
6
+
2
7
  .payload-toast-close-button {
8
+ position: absolute;
9
+ order: 3;
3
10
  left: unset;
4
- right: 0.5rem;
5
- top: 1.55rem;
6
- color: var(--theme-elevation-400);
11
+ inset-inline-end: base(0.5);
12
+ top: 50%;
13
+ transform: translateY(-50%);
14
+ color: var(--theme-elevation-600);
7
15
  background: unset;
8
16
  border: none;
9
- display: flex;
10
- width: 1.25rem;
11
- height: 1.25rem;
12
- justify-content: center;
13
- align-items: center;
14
17
 
15
- &:hover {
16
- background: none;
18
+ svg {
19
+ width: base(0.75);
20
+ height: base(0.75);
17
21
  }
18
22
 
19
- svg {
20
- width: 2rem;
21
- height: 2rem;
23
+ &:hover {
24
+ color: var(--theme-elevation-250);
25
+ background: none;
22
26
  }
23
27
 
24
28
  [dir='RTL'] & {
@@ -27,16 +31,20 @@
27
31
  }
28
32
  }
29
33
 
34
+ .toast-title {
35
+ line-height: base(1);
36
+ }
37
+
30
38
  .payload-toast-item {
31
- padding: 1rem 2.5rem 1rem 1rem;
32
- color: var(--theme-text);
39
+ padding: base(0.5);
40
+ color: var(--theme-elevation-800);
33
41
  font-style: normal;
34
42
  font-weight: 600;
35
43
  display: flex;
36
44
  gap: 1rem;
37
45
  align-items: center;
38
46
  width: 100%;
39
- border-radius: 0.15rem;
47
+ border-radius: 4px;
40
48
  border: 1px solid var(--theme-border-color);
41
49
  background: var(--theme-input-bg);
42
50
  box-shadow:
@@ -45,6 +53,7 @@
45
53
 
46
54
  .toast-content {
47
55
  transition: opacity 100ms cubic-bezier(0.55, 0.055, 0.675, 0.19);
56
+ width: 100%;
48
57
  }
49
58
 
50
59
  &[data-front='false'] {
@@ -60,51 +69,72 @@
60
69
  }
61
70
 
62
71
  .toast-icon {
63
- svg {
64
- width: 2.4rem;
65
- height: 2.4rem;
72
+ width: base(1);
73
+ height: base(1);
74
+ margin: 0;
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+
79
+ & > * {
80
+ width: base(1.2);
81
+ height: base(1.2);
66
82
  }
67
83
  }
68
84
 
69
85
  &.toast-warning {
70
- border-color: var(--theme-warning-200);
71
- background-color: var(--theme-warning-100);
86
+ color: var(--theme-warning-800);
87
+ border-color: var(--theme-warning-150);
88
+ background-color: var(--theme-warning-50);
89
+
90
+ .payload-toast-close-button {
91
+ color: var(--theme-warning-600);
92
+
93
+ &:hover {
94
+ color: var(--theme-warning-250);
95
+ }
96
+ }
72
97
  }
73
98
 
74
99
  &.toast-error {
75
- border-color: var(--theme-error-300);
76
- background-color: var(--theme-error-150);
100
+ color: var(--theme-error-800);
101
+ border-color: var(--theme-error-150);
102
+ background-color: var(--theme-error-50);
103
+
104
+ .payload-toast-close-button {
105
+ color: var(--theme-error-600);
106
+
107
+ &:hover {
108
+ color: var(--theme-error-250);
109
+ }
110
+ }
77
111
  }
78
112
 
79
113
  &.toast-success {
80
- border-color: var(--theme-success-200);
81
- background-color: var(--theme-success-100);
82
- }
114
+ color: var(--theme-success-800);
115
+ border-color: var(--theme-success-150);
116
+ background-color: var(--theme-success-50);
83
117
 
84
- &.toast-info {
85
- border-color: var(--theme-elevation-250);
86
- background-color: var(--theme-elevation-100);
87
- }
118
+ .payload-toast-close-button {
119
+ color: var(--theme-success-600);
88
120
 
89
- [data-theme='light'] & {
90
- &.toast-warning {
91
- border-color: var(--theme-warning-550);
92
- background-color: var(--theme-warning-100);
121
+ &:hover {
122
+ color: var(--theme-success-250);
123
+ }
93
124
  }
125
+ }
94
126
 
95
- &.toast-error {
96
- border-color: var(--theme-error-200);
97
- background-color: var(--theme-error-50);
98
- }
127
+ &.toast-info {
128
+ color: var(--theme-elevation-800);
129
+ border-color: var(--theme-elevation-150);
130
+ background-color: var(--theme-elevation-50);
99
131
 
100
- &.toast-success {
101
- border-color: var(--theme-success-550);
102
- background-color: var(--theme-success-50);
103
- }
132
+ .payload-toast-close-button {
133
+ color: var(--theme-elevation-600);
104
134
 
105
- &.toast-info {
106
- border-color: var(--theme-border-color);
107
- background-color: var(--theme-elevation-50);
135
+ &:hover {
136
+ color: var(--theme-elevation-250);
137
+ }
108
138
  }
109
139
  }
110
140
  }
@@ -15,17 +15,10 @@
15
15
  font-weight: 500;
16
16
  }
17
17
 
18
- %jumbo {
19
- font-size: base(2.5);
20
- line-height: 1;
21
- margin: 0 0 base(2);
22
- }
23
-
24
18
  %h1 {
25
19
  margin: 0 0 base(1);
26
- font-size: base(2);
27
- line-height: 1.15;
28
- letter-spacing: -1px;
20
+ font-size: base(1.6);
21
+ line-height: base(1.8);
29
22
 
30
23
  @include small-break {
31
24
  letter-spacing: -0.5px;
@@ -35,9 +28,8 @@
35
28
 
36
29
  %h2 {
37
30
  margin: 0 0 base(1);
38
- font-size: base(1.25);
39
- line-height: 1.15;
40
- letter-spacing: -0.5px;
31
+ font-size: base(1.3);
32
+ line-height: base(1.6);
41
33
 
42
34
  @include small-break {
43
35
  font-size: base(0.85);
@@ -46,9 +38,8 @@
46
38
 
47
39
  %h3 {
48
40
  margin: 0 0 base(1);
49
- font-size: base(0.925);
50
- line-height: 1.25;
51
- letter-spacing: -0.5px;
41
+ font-size: base(1);
42
+ line-height: base(1.2);
52
43
 
53
44
  @include small-break {
54
45
  font-size: base(0.65);
@@ -58,27 +49,27 @@
58
49
 
59
50
  %h4 {
60
51
  margin: 0 0 $baseline;
61
- font-size: base(0.75);
62
- line-height: 1.5;
52
+ font-size: base(0.8);
53
+ line-height: base(1);
63
54
  letter-spacing: -0.375px;
64
55
  }
65
56
 
66
57
  %h5 {
67
58
  margin: 0;
68
- font-size: base(0.5625);
69
- line-height: 1.5;
59
+ font-size: base(0.65);
60
+ line-height: base(0.8);
70
61
  }
71
62
 
72
63
  %h6 {
73
64
  margin: 0;
74
- font-size: base(0.5);
75
- line-height: 1.5;
65
+ font-size: base(0.6);
66
+ line-height: base(0.8);
76
67
  }
77
68
 
78
69
  %small {
79
70
  margin: 0;
80
- font-size: 11px;
81
- line-height: 1.5;
71
+ font-size: 12px;
72
+ line-height: 20px;
82
73
  }
83
74
 
84
75
  /////////////////////////////
@@ -13,7 +13,7 @@ $breakpoint-l-width: 1440px !default;
13
13
  // BASELINE GRID
14
14
  //////////////////////////////
15
15
 
16
- $baseline-px: 25px !default;
16
+ $baseline-px: 20px !default;
17
17
  $baseline-body-size: 13px !default;
18
18
  $baseline: math.div($baseline-px, $baseline-body-size) + rem;
19
19
 
@@ -40,7 +40,7 @@ $color-purple: #f3ddf3 !default;
40
40
 
41
41
  $style-radius-s: 3px !default;
42
42
  $style-radius-m: 4px !default;
43
- $style-radius-l: 9px !default;
43
+ $style-radius-l: 8px !default;
44
44
  $style-stroke-width: 1px !default;
45
45
 
46
46
  $style-stroke-width-s: 1px !default;
@@ -50,8 +50,8 @@ $style-stroke-width-m: 2px !default;
50
50
  // MISC
51
51
  //////////////////////////////
52
52
 
53
- $top-header-offset: calc(var(--base) - 1px);
54
- $top-header-offset-m: calc(var(--base) * 3);
53
+ $top-header-offset: calc(base(1) - 1px);
54
+ $top-header-offset-m: base(3);
55
55
  $focus-box-shadow: 0 0 0 $style-stroke-width-m var(--theme-success-500);
56
56
 
57
57
  //////////////////////////////
@@ -59,41 +59,19 @@ $focus-box-shadow: 0 0 0 $style-stroke-width-m var(--theme-success-500);
59
59
  //////////////////////////////
60
60
 
61
61
  @mixin shadow-sm {
62
- box-shadow:
63
- 0 2px 3px 0 rgba(0, 2, 4, 0.05),
64
- 0 10px 4px -8px rgba(0, 2, 4, 0.02);
62
+ box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1);
65
63
  }
66
64
 
67
65
  @mixin shadow-m {
68
- box-shadow:
69
- 0 0 30px 0 rgb(0 2 4 / 12%),
70
- 0 30px 25px -8px rgb(0 2 4 / 10%);
66
+ box-shadow: 0 4px 8px -3px rgba(0, 0, 0, 0.1);
71
67
  }
72
68
 
73
69
  @mixin shadow-lg {
74
- box-shadow:
75
- 0 20px 35px -10px rgba(0, 2, 4, 0.2),
76
- 0 6px 4px -4px rgba(0, 2, 4, 0.02);
70
+ box-shadow: 0 -2px 16px -2px rgba(0, 0, 0, 0.2);
77
71
  }
78
72
 
79
73
  @mixin shadow-lg-top {
80
- box-shadow:
81
- 0 -20px 35px -10px rgba(0, 2, 4, 0.2),
82
- 0 -6px 4px -4px rgba(0, 2, 4, 0.02);
83
- }
84
-
85
- @mixin shadow {
86
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.07);
87
-
88
- &:hover {
89
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
90
- }
91
- }
92
-
93
- @mixin inputShadowActive {
94
- box-shadow:
95
- 0 2px 3px 0 rgba(0, 2, 4, 0.16),
96
- 0 6px 4px -4px rgba(0, 2, 4, 0.13);
74
+ box-shadow: 0 2px 16px -2px rgba(0, 0, 0, 0.2);
97
75
  }
98
76
 
99
77
  @mixin inputShadow {
@@ -101,15 +79,7 @@ $focus-box-shadow: 0 0 0 $style-stroke-width-m var(--theme-success-500);
101
79
 
102
80
  &:not(:disabled) {
103
81
  &:hover {
104
- box-shadow:
105
- 0 2px 3px 0 rgba(0, 2, 4, 0.13),
106
- 0 6px 4px -4px rgba(0, 2, 4, 0.1);
107
- }
108
-
109
- &:active,
110
- &:focus-within,
111
- &:focus {
112
- @include inputShadowActive;
82
+ box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.2);
113
83
  }
114
84
  }
115
85
  }
@@ -147,19 +117,33 @@ $focus-box-shadow: 0 0 0 $style-stroke-width-m var(--theme-success-500);
147
117
  @include blur-bg(var(--theme-bg), 0.3);
148
118
  }
149
119
 
120
+ @mixin readOnly {
121
+ background: var(--theme-elevation-100);
122
+ color: var(--theme-elevation-400);
123
+ box-shadow: none;
124
+
125
+ &:hover {
126
+ border-color: var(--theme-elevation-150);
127
+ box-shadow: none;
128
+ }
129
+ }
130
+
150
131
  @mixin formInput() {
151
132
  @include inputShadow;
152
133
  font-family: var(--font-body);
153
134
  width: 100%;
154
135
  border: 1px solid var(--theme-elevation-150);
136
+ border-radius: var(--style-radius-s);
155
137
  background: var(--theme-input-bg);
156
138
  color: var(--theme-elevation-800);
157
- border-radius: 0;
158
139
  font-size: 1rem;
159
140
  height: base(2);
160
141
  line-height: base(1);
161
- padding: base(0.5) base(0.75);
142
+ padding: base(0.4) base(0.75);
162
143
  -webkit-appearance: none;
144
+ transition-property: border, box-shadow;
145
+ transition-duration: 100ms;
146
+ transition-timing-function: cubic-bezier(0, 0.2, 0.2, 1);
163
147
 
164
148
  &[data-rtl='true'] {
165
149
  direction: rtl;
@@ -189,12 +173,7 @@ $focus-box-shadow: 0 0 0 $style-stroke-width-m var(--theme-success-500);
189
173
  }
190
174
 
191
175
  &:disabled {
192
- background: var(--theme-elevation-200);
193
- color: var(--theme-elevation-450);
194
-
195
- &:hover {
196
- border-color: var(--theme-elevation-150);
197
- }
176
+ @include readOnly;
198
177
  }
199
178
  }
200
179
 
@@ -1,9 +1,8 @@
1
- import type { FormState } from 'payload';
1
+ import type { FormState, LoginWithUsernameOptions } from 'payload';
2
2
  import React from 'react';
3
3
  export declare const CreateFirstUserClient: React.FC<{
4
4
  initialState: FormState;
5
- loginType: 'email' | 'emailOrUsername' | 'username';
6
- requireEmail?: boolean;
5
+ loginWithUsername?: LoginWithUsernameOptions | false;
7
6
  userSlug: string;
8
7
  }>;
9
8
  //# sourceMappingURL=index.client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/views/CreateFirstUser/index.client.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAcxC,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC3C,YAAY,EAAE,SAAS,CAAA;IACvB,SAAS,EAAE,OAAO,GAAG,iBAAiB,GAAG,UAAU,CAAA;IACnD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;CACjB,CA0DA,CAAA"}
1
+ {"version":3,"file":"index.client.d.ts","sourceRoot":"","sources":["../../../src/views/CreateFirstUser/index.client.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAclE,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC3C,YAAY,EAAE,SAAS,CAAA;IACvB,iBAAiB,CAAC,EAAE,wBAAwB,GAAG,KAAK,CAAA;IACpD,QAAQ,EAAE,MAAM,CAAA;CACjB,CA4DA,CAAA"}
@@ -3,8 +3,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { ConfirmPasswordField, Form, FormSubmit, PasswordField, RenderFields, useComponentMap, useConfig, useTranslation } from '@payloadcms/ui';
4
4
  import { getFormState } from '@payloadcms/ui/shared';
5
5
  import React from 'react';
6
- import { LoginField } from '../Login/LoginField/index.js';
7
- export const CreateFirstUserClient = ({ initialState, loginType, requireEmail = true, userSlug })=>{
6
+ import { RenderEmailAndUsernameFields } from '../../elements/EmailAndUsername/index.js';
7
+ export const CreateFirstUserClient = ({ initialState, loginWithUsername, userSlug })=>{
8
8
  const { getFieldMap } = useComponentMap();
9
9
  const { routes: { admin, api: apiRoute }, serverURL } = useConfig();
10
10
  const { t } = useTranslation();
@@ -35,18 +35,11 @@ export const CreateFirstUserClient = ({ initialState, loginType, requireEmail =
35
35
  redirect: admin,
36
36
  validationOperation: "create",
37
37
  children: [
38
- [
39
- 'emailOrUsername',
40
- 'username'
41
- ].includes(loginType) && /*#__PURE__*/ _jsx(LoginField, {
42
- type: "username"
43
- }),
44
- [
45
- 'email',
46
- 'emailOrUsername'
47
- ].includes(loginType) && /*#__PURE__*/ _jsx(LoginField, {
48
- required: requireEmail,
49
- type: "email"
38
+ /*#__PURE__*/ _jsx(RenderEmailAndUsernameFields, {
39
+ className: "emailAndUsername",
40
+ loginWithUsername: loginWithUsername,
41
+ operation: "create",
42
+ readOnly: false
50
43
  }),
51
44
  /*#__PURE__*/ _jsx(PasswordField, {
52
45
  label: t('authentication:newPassword'),
@@ -64,6 +57,7 @@ export const CreateFirstUserClient = ({ initialState, loginType, requireEmail =
64
57
  schemaPath: userSlug
65
58
  }),
66
59
  /*#__PURE__*/ _jsx(FormSubmit, {
60
+ size: "large",
67
61
  children: t('general:create')
68
62
  })
69
63
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/views/CreateFirstUser/index.client.tsx"],"sourcesContent":["'use client'\nimport type { FormState } from 'payload'\n\nimport {\n ConfirmPasswordField,\n Form,\n type FormProps,\n FormSubmit,\n PasswordField,\n RenderFields,\n useComponentMap,\n useConfig,\n useTranslation,\n} from '@payloadcms/ui'\nimport { getFormState } from '@payloadcms/ui/shared'\nimport React from 'react'\n\nimport { LoginField } from '../Login/LoginField/index.js'\n\nexport const CreateFirstUserClient: React.FC<{\n initialState: FormState\n loginType: 'email' | 'emailOrUsername' | 'username'\n requireEmail?: boolean\n userSlug: string\n}> = ({ initialState, loginType, requireEmail = true, userSlug }) => {\n const { getFieldMap } = useComponentMap()\n\n const {\n routes: { admin, api: apiRoute },\n serverURL,\n } = useConfig()\n\n const { t } = useTranslation()\n\n const fieldMap = getFieldMap({ collectionSlug: userSlug })\n\n const onChange: FormProps['onChange'][0] = React.useCallback(\n async ({ formState: prevFormState }) =>\n getFormState({\n apiRoute,\n body: {\n collectionSlug: userSlug,\n formState: prevFormState,\n operation: 'create',\n schemaPath: `_${userSlug}.auth`,\n },\n serverURL,\n }),\n [apiRoute, userSlug, serverURL],\n )\n\n return (\n <Form\n action={`${serverURL}${apiRoute}/${userSlug}/first-register`}\n initialState={initialState}\n method=\"POST\"\n onChange={[onChange]}\n redirect={admin}\n validationOperation=\"create\"\n >\n {['emailOrUsername', 'username'].includes(loginType) && <LoginField type=\"username\" />}\n {['email', 'emailOrUsername'].includes(loginType) && (\n <LoginField required={requireEmail} type=\"email\" />\n )}\n <PasswordField\n label={t('authentication:newPassword')}\n name=\"password\"\n path=\"password\"\n required\n />\n <ConfirmPasswordField />\n <RenderFields\n fieldMap={fieldMap}\n forceRender\n operation=\"create\"\n path=\"\"\n readOnly={false}\n schemaPath={userSlug}\n />\n <FormSubmit>{t('general:create')}</FormSubmit>\n </Form>\n )\n}\n"],"names":["ConfirmPasswordField","Form","FormSubmit","PasswordField","RenderFields","useComponentMap","useConfig","useTranslation","getFormState","React","LoginField","CreateFirstUserClient","initialState","loginType","requireEmail","userSlug","getFieldMap","routes","admin","api","apiRoute","serverURL","t","fieldMap","collectionSlug","onChange","useCallback","formState","prevFormState","body","operation","schemaPath","action","method","redirect","validationOperation","includes","type","required","label","name","path","forceRender","readOnly"],"mappings":"AAAA;;AAGA,SACEA,oBAAoB,EACpBC,IAAI,EAEJC,UAAU,EACVC,aAAa,EACbC,YAAY,EACZC,eAAe,EACfC,SAAS,EACTC,cAAc,QACT,iBAAgB;AACvB,SAASC,YAAY,QAAQ,wBAAuB;AACpD,OAAOC,WAAW,QAAO;AAEzB,SAASC,UAAU,QAAQ,+BAA8B;AAEzD,OAAO,MAAMC,wBAKR,CAAC,EAAEC,YAAY,EAAEC,SAAS,EAAEC,eAAe,IAAI,EAAEC,QAAQ,EAAE;IAC9D,MAAM,EAAEC,WAAW,EAAE,GAAGX;IAExB,MAAM,EACJY,QAAQ,EAAEC,KAAK,EAAEC,KAAKC,QAAQ,EAAE,EAChCC,SAAS,EACV,GAAGf;IAEJ,MAAM,EAAEgB,CAAC,EAAE,GAAGf;IAEd,MAAMgB,WAAWP,YAAY;QAAEQ,gBAAgBT;IAAS;IAExD,MAAMU,WAAqChB,MAAMiB,WAAW,CAC1D,OAAO,EAAEC,WAAWC,aAAa,EAAE,GACjCpB,aAAa;YACXY;YACAS,MAAM;gBACJL,gBAAgBT;gBAChBY,WAAWC;gBACXE,WAAW;gBACXC,YAAY,CAAC,CAAC,EAAEhB,SAAS,KAAK,CAAC;YACjC;YACAM;QACF,IACF;QAACD;QAAUL;QAAUM;KAAU;IAGjC,qBACE,MAACpB;QACC+B,QAAQ,CAAC,EAAEX,UAAU,EAAED,SAAS,CAAC,EAAEL,SAAS,eAAe,CAAC;QAC5DH,cAAcA;QACdqB,QAAO;QACPR,UAAU;YAACA;SAAS;QACpBS,UAAUhB;QACViB,qBAAoB;;YAEnB;gBAAC;gBAAmB;aAAW,CAACC,QAAQ,CAACvB,4BAAc,KAACH;gBAAW2B,MAAK;;YACxE;gBAAC;gBAAS;aAAkB,CAACD,QAAQ,CAACvB,4BACrC,KAACH;gBAAW4B,UAAUxB;gBAAcuB,MAAK;;0BAE3C,KAAClC;gBACCoC,OAAOjB,EAAE;gBACTkB,MAAK;gBACLC,MAAK;gBACLH,QAAQ;;0BAEV,KAACtC;0BACD,KAACI;gBACCmB,UAAUA;gBACVmB,WAAW;gBACXZ,WAAU;gBACVW,MAAK;gBACLE,UAAU;gBACVZ,YAAYhB;;0BAEd,KAACb;0BAAYoB,EAAE;;;;AAGrB,EAAC"}
1
+ {"version":3,"sources":["../../../src/views/CreateFirstUser/index.client.tsx"],"sourcesContent":["'use client'\nimport type { FormState, LoginWithUsernameOptions } from 'payload'\n\nimport {\n ConfirmPasswordField,\n Form,\n type FormProps,\n FormSubmit,\n PasswordField,\n RenderFields,\n useComponentMap,\n useConfig,\n useTranslation,\n} from '@payloadcms/ui'\nimport { getFormState } from '@payloadcms/ui/shared'\nimport React from 'react'\n\nimport { RenderEmailAndUsernameFields } from '../../elements/EmailAndUsername/index.js'\n\nexport const CreateFirstUserClient: React.FC<{\n initialState: FormState\n loginWithUsername?: LoginWithUsernameOptions | false\n userSlug: string\n}> = ({ initialState, loginWithUsername, userSlug }) => {\n const { getFieldMap } = useComponentMap()\n\n const {\n routes: { admin, api: apiRoute },\n serverURL,\n } = useConfig()\n\n const { t } = useTranslation()\n\n const fieldMap = getFieldMap({ collectionSlug: userSlug })\n\n const onChange: FormProps['onChange'][0] = React.useCallback(\n async ({ formState: prevFormState }) =>\n getFormState({\n apiRoute,\n body: {\n collectionSlug: userSlug,\n formState: prevFormState,\n operation: 'create',\n schemaPath: `_${userSlug}.auth`,\n },\n serverURL,\n }),\n [apiRoute, userSlug, serverURL],\n )\n\n return (\n <Form\n action={`${serverURL}${apiRoute}/${userSlug}/first-register`}\n initialState={initialState}\n method=\"POST\"\n onChange={[onChange]}\n redirect={admin}\n validationOperation=\"create\"\n >\n <RenderEmailAndUsernameFields\n className=\"emailAndUsername\"\n loginWithUsername={loginWithUsername}\n operation=\"create\"\n readOnly={false}\n />\n <PasswordField\n label={t('authentication:newPassword')}\n name=\"password\"\n path=\"password\"\n required\n />\n <ConfirmPasswordField />\n <RenderFields\n fieldMap={fieldMap}\n forceRender\n operation=\"create\"\n path=\"\"\n readOnly={false}\n schemaPath={userSlug}\n />\n <FormSubmit size=\"large\">{t('general:create')}</FormSubmit>\n </Form>\n )\n}\n"],"names":["ConfirmPasswordField","Form","FormSubmit","PasswordField","RenderFields","useComponentMap","useConfig","useTranslation","getFormState","React","RenderEmailAndUsernameFields","CreateFirstUserClient","initialState","loginWithUsername","userSlug","getFieldMap","routes","admin","api","apiRoute","serverURL","t","fieldMap","collectionSlug","onChange","useCallback","formState","prevFormState","body","operation","schemaPath","action","method","redirect","validationOperation","className","readOnly","label","name","path","required","forceRender","size"],"mappings":"AAAA;;AAGA,SACEA,oBAAoB,EACpBC,IAAI,EAEJC,UAAU,EACVC,aAAa,EACbC,YAAY,EACZC,eAAe,EACfC,SAAS,EACTC,cAAc,QACT,iBAAgB;AACvB,SAASC,YAAY,QAAQ,wBAAuB;AACpD,OAAOC,WAAW,QAAO;AAEzB,SAASC,4BAA4B,QAAQ,2CAA0C;AAEvF,OAAO,MAAMC,wBAIR,CAAC,EAAEC,YAAY,EAAEC,iBAAiB,EAAEC,QAAQ,EAAE;IACjD,MAAM,EAAEC,WAAW,EAAE,GAAGV;IAExB,MAAM,EACJW,QAAQ,EAAEC,KAAK,EAAEC,KAAKC,QAAQ,EAAE,EAChCC,SAAS,EACV,GAAGd;IAEJ,MAAM,EAAEe,CAAC,EAAE,GAAGd;IAEd,MAAMe,WAAWP,YAAY;QAAEQ,gBAAgBT;IAAS;IAExD,MAAMU,WAAqCf,MAAMgB,WAAW,CAC1D,OAAO,EAAEC,WAAWC,aAAa,EAAE,GACjCnB,aAAa;YACXW;YACAS,MAAM;gBACJL,gBAAgBT;gBAChBY,WAAWC;gBACXE,WAAW;gBACXC,YAAY,CAAC,CAAC,EAAEhB,SAAS,KAAK,CAAC;YACjC;YACAM;QACF,IACF;QAACD;QAAUL;QAAUM;KAAU;IAGjC,qBACE,MAACnB;QACC8B,QAAQ,CAAC,EAAEX,UAAU,EAAED,SAAS,CAAC,EAAEL,SAAS,eAAe,CAAC;QAC5DF,cAAcA;QACdoB,QAAO;QACPR,UAAU;YAACA;SAAS;QACpBS,UAAUhB;QACViB,qBAAoB;;0BAEpB,KAACxB;gBACCyB,WAAU;gBACVtB,mBAAmBA;gBACnBgB,WAAU;gBACVO,UAAU;;0BAEZ,KAACjC;gBACCkC,OAAOhB,EAAE;gBACTiB,MAAK;gBACLC,MAAK;gBACLC,QAAQ;;0BAEV,KAACxC;0BACD,KAACI;gBACCkB,UAAUA;gBACVmB,WAAW;gBACXZ,WAAU;gBACVU,MAAK;gBACLH,UAAU;gBACVN,YAAYhB;;0BAEd,KAACZ;gBAAWwC,MAAK;0BAASrB,EAAE;;;;AAGlC,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/CreateFirstUser/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AAErB,OAAO,EAAE,+BAA+B,EAAE,MAAM,WAAW,CAAA;AAE3D,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA2CxD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/CreateFirstUser/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AAErB,OAAO,EAAE,+BAA+B,EAAE,MAAM,WAAW,CAAA;AAE3D,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAoCxD,CAAA"}
@@ -8,11 +8,6 @@ export const CreateFirstUserView = async ({ initPageResult })=>{
8
8
  const collectionConfig = config.collections?.find((collection)=>collection?.slug === userSlug);
9
9
  const { auth: authOptions } = collectionConfig;
10
10
  const loginWithUsername = authOptions.loginWithUsername;
11
- const emailRequired = loginWithUsername && loginWithUsername.requireEmail;
12
- let loginType = loginWithUsername ? 'username' : 'email';
13
- if (loginWithUsername && (loginWithUsername.allowEmailLogin || loginWithUsername.requireEmail)) {
14
- loginType = 'emailOrUsername';
15
- }
16
11
  const { formState } = await getDocumentData({
17
12
  collectionConfig,
18
13
  locale,
@@ -30,8 +25,7 @@ export const CreateFirstUserView = async ({ initPageResult })=>{
30
25
  }),
31
26
  /*#__PURE__*/ _jsx(CreateFirstUserClient, {
32
27
  initialState: formState,
33
- loginType: loginType,
34
- requireEmail: emailRequired,
28
+ loginWithUsername: loginWithUsername,
35
29
  userSlug: userSlug
36
30
  })
37
31
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/views/CreateFirstUser/index.tsx"],"sourcesContent":["import type { AdminViewProps } from 'payload'\n\nimport React from 'react'\n\nimport type { LoginFieldProps } from '../Login/LoginField/index.js'\n\nimport { getDocumentData } from '../Document/getDocumentData.js'\nimport { CreateFirstUserClient } from './index.client.js'\nimport './index.scss'\n\nexport { generateCreateFirstUserMetadata } from './meta.js'\n\nexport const CreateFirstUserView: React.FC<AdminViewProps> = async ({ initPageResult }) => {\n const {\n locale,\n req,\n req: {\n payload: {\n config: {\n admin: { user: userSlug },\n },\n config,\n },\n },\n } = initPageResult\n\n const collectionConfig = config.collections?.find((collection) => collection?.slug === userSlug)\n const { auth: authOptions } = collectionConfig\n const loginWithUsername = authOptions.loginWithUsername\n const emailRequired = loginWithUsername && loginWithUsername.requireEmail\n\n let loginType: LoginFieldProps['type'] = loginWithUsername ? 'username' : 'email'\n if (loginWithUsername && (loginWithUsername.allowEmailLogin || loginWithUsername.requireEmail)) {\n loginType = 'emailOrUsername'\n }\n\n const { formState } = await getDocumentData({\n collectionConfig,\n locale,\n req,\n schemaPath: `_${collectionConfig.slug}.auth`,\n })\n\n return (\n <div className=\"create-first-user\">\n <h1>{req.t('general:welcome')}</h1>\n <p>{req.t('authentication:beginCreateFirstUser')}</p>\n <CreateFirstUserClient\n initialState={formState}\n loginType={loginType}\n requireEmail={emailRequired}\n userSlug={userSlug}\n />\n </div>\n )\n}\n"],"names":["React","getDocumentData","CreateFirstUserClient","generateCreateFirstUserMetadata","CreateFirstUserView","initPageResult","locale","req","payload","config","admin","user","userSlug","collectionConfig","collections","find","collection","slug","auth","authOptions","loginWithUsername","emailRequired","requireEmail","loginType","allowEmailLogin","formState","schemaPath","div","className","h1","t","p","initialState"],"mappings":";AAEA,OAAOA,WAAW,QAAO;AAIzB,SAASC,eAAe,QAAQ,iCAAgC;AAChE,SAASC,qBAAqB,QAAQ,oBAAmB;AAGzD,SAASC,+BAA+B,QAAQ,YAAW;AAE3D,OAAO,MAAMC,sBAAgD,OAAO,EAAEC,cAAc,EAAE;IACpF,MAAM,EACJC,MAAM,EACNC,GAAG,EACHA,KAAK,EACHC,SAAS,EACPC,QAAQ,EACNC,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EAC1B,EACDH,MAAM,EACP,EACF,EACF,GAAGJ;IAEJ,MAAMQ,mBAAmBJ,OAAOK,WAAW,EAAEC,KAAK,CAACC,aAAeA,YAAYC,SAASL;IACvF,MAAM,EAAEM,MAAMC,WAAW,EAAE,GAAGN;IAC9B,MAAMO,oBAAoBD,YAAYC,iBAAiB;IACvD,MAAMC,gBAAgBD,qBAAqBA,kBAAkBE,YAAY;IAEzE,IAAIC,YAAqCH,oBAAoB,aAAa;IAC1E,IAAIA,qBAAsBA,CAAAA,kBAAkBI,eAAe,IAAIJ,kBAAkBE,YAAY,AAAD,GAAI;QAC9FC,YAAY;IACd;IAEA,MAAM,EAAEE,SAAS,EAAE,GAAG,MAAMxB,gBAAgB;QAC1CY;QACAP;QACAC;QACAmB,YAAY,CAAC,CAAC,EAAEb,iBAAiBI,IAAI,CAAC,KAAK,CAAC;IAC9C;IAEA,qBACE,MAACU;QAAIC,WAAU;;0BACb,KAACC;0BAAItB,IAAIuB,CAAC,CAAC;;0BACX,KAACC;0BAAGxB,IAAIuB,CAAC,CAAC;;0BACV,KAAC5B;gBACC8B,cAAcP;gBACdF,WAAWA;gBACXD,cAAcD;gBACdT,UAAUA;;;;AAIlB,EAAC"}
1
+ {"version":3,"sources":["../../../src/views/CreateFirstUser/index.tsx"],"sourcesContent":["import type { AdminViewProps } from 'payload'\n\nimport React from 'react'\n\nimport type { LoginFieldProps } from '../Login/LoginField/index.js'\n\nimport { getDocumentData } from '../Document/getDocumentData.js'\nimport { CreateFirstUserClient } from './index.client.js'\nimport './index.scss'\n\nexport { generateCreateFirstUserMetadata } from './meta.js'\n\nexport const CreateFirstUserView: React.FC<AdminViewProps> = async ({ initPageResult }) => {\n const {\n locale,\n req,\n req: {\n payload: {\n config: {\n admin: { user: userSlug },\n },\n config,\n },\n },\n } = initPageResult\n\n const collectionConfig = config.collections?.find((collection) => collection?.slug === userSlug)\n const { auth: authOptions } = collectionConfig\n const loginWithUsername = authOptions.loginWithUsername\n\n const { formState } = await getDocumentData({\n collectionConfig,\n locale,\n req,\n schemaPath: `_${collectionConfig.slug}.auth`,\n })\n\n return (\n <div className=\"create-first-user\">\n <h1>{req.t('general:welcome')}</h1>\n <p>{req.t('authentication:beginCreateFirstUser')}</p>\n <CreateFirstUserClient\n initialState={formState}\n loginWithUsername={loginWithUsername}\n userSlug={userSlug}\n />\n </div>\n )\n}\n"],"names":["React","getDocumentData","CreateFirstUserClient","generateCreateFirstUserMetadata","CreateFirstUserView","initPageResult","locale","req","payload","config","admin","user","userSlug","collectionConfig","collections","find","collection","slug","auth","authOptions","loginWithUsername","formState","schemaPath","div","className","h1","t","p","initialState"],"mappings":";AAEA,OAAOA,WAAW,QAAO;AAIzB,SAASC,eAAe,QAAQ,iCAAgC;AAChE,SAASC,qBAAqB,QAAQ,oBAAmB;AAGzD,SAASC,+BAA+B,QAAQ,YAAW;AAE3D,OAAO,MAAMC,sBAAgD,OAAO,EAAEC,cAAc,EAAE;IACpF,MAAM,EACJC,MAAM,EACNC,GAAG,EACHA,KAAK,EACHC,SAAS,EACPC,QAAQ,EACNC,OAAO,EAAEC,MAAMC,QAAQ,EAAE,EAC1B,EACDH,MAAM,EACP,EACF,EACF,GAAGJ;IAEJ,MAAMQ,mBAAmBJ,OAAOK,WAAW,EAAEC,KAAK,CAACC,aAAeA,YAAYC,SAASL;IACvF,MAAM,EAAEM,MAAMC,WAAW,EAAE,GAAGN;IAC9B,MAAMO,oBAAoBD,YAAYC,iBAAiB;IAEvD,MAAM,EAAEC,SAAS,EAAE,GAAG,MAAMpB,gBAAgB;QAC1CY;QACAP;QACAC;QACAe,YAAY,CAAC,CAAC,EAAET,iBAAiBI,IAAI,CAAC,KAAK,CAAC;IAC9C;IAEA,qBACE,MAACM;QAAIC,WAAU;;0BACb,KAACC;0BAAIlB,IAAImB,CAAC,CAAC;;0BACX,KAACC;0BAAGpB,IAAImB,CAAC,CAAC;;0BACV,KAACxB;gBACC0B,cAAcP;gBACdD,mBAAmBA;gBACnBR,UAAUA;;;;AAIlB,EAAC"}
@@ -3,3 +3,7 @@
3
3
  margin-bottom: var(--base);
4
4
  }
5
5
  }
6
+
7
+ .emailAndUsername {
8
+ margin-bottom: var(--base);
9
+ }