@atlasauth/angular 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +67 -0
- package/README.md +1 -1
- package/dist/README.md +1 -1
- package/dist/esm2022/lib/atlas.config.mjs +1 -1
- package/dist/esm2022/lib/atlas.service.mjs +7 -3
- package/dist/esm2022/lib/components/attempt-flow.component.mjs +31 -3
- package/dist/esm2022/lib/components/flow-controller.mjs +83 -7
- package/dist/esm2022/lib/components/sign-in.component.mjs +13 -4
- package/dist/esm2022/lib/components/sign-up-form.component.mjs +410 -0
- package/dist/esm2022/lib/components/sign-up.component.mjs +52 -22
- package/dist/esm2022/lib/directives/captcha-slot.directive.mjs +42 -0
- package/dist/esm2022/lib/i18n.mjs +13 -1
- package/dist/esm2022/public-api.mjs +3 -1
- package/dist/fesm2022/atlasauth-angular.mjs +632 -34
- package/dist/fesm2022/atlasauth-angular.mjs.map +1 -1
- package/dist/lib/atlas.config.d.ts +7 -2
- package/dist/lib/components/attempt-flow.component.d.ts +9 -2
- package/dist/lib/components/flow-controller.d.ts +40 -3
- package/dist/lib/components/sign-in.component.d.ts +3 -1
- package/dist/lib/components/sign-up-form.component.d.ts +43 -0
- package/dist/lib/components/sign-up.component.d.ts +9 -5
- package/dist/lib/directives/captcha-slot.directive.d.ts +19 -0
- package/dist/public-api.d.ts +3 -0
- package/package.json +5 -4
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, inject, } from '@angular/core';
|
|
2
|
+
import { AtlasService } from '../atlas.service';
|
|
3
|
+
import { classFor } from '../appearance';
|
|
4
|
+
import { translate } from '../i18n';
|
|
5
|
+
import { AtlasCaptchaSlotDirective } from '../directives/captcha-slot.directive';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/**
|
|
8
|
+
* The create-account step of `<atlas-sign-up>`: the instance's configured extra
|
|
9
|
+
* fields, email + password, the legal-consent row and — when the instance
|
|
10
|
+
* requires one on sign-up — the captcha widget. Values live on the component so
|
|
11
|
+
* a refused submit never clears them.
|
|
12
|
+
*/
|
|
13
|
+
export class SignUpFormComponent {
|
|
14
|
+
atlas = inject(AtlasService);
|
|
15
|
+
settings = null;
|
|
16
|
+
busy = false;
|
|
17
|
+
errors = [];
|
|
18
|
+
captcha = null;
|
|
19
|
+
/** Emits the typed values and the consent tick when the form is submitted. */
|
|
20
|
+
submitSignUp = new EventEmitter();
|
|
21
|
+
values = {};
|
|
22
|
+
agreed = false;
|
|
23
|
+
t(key, vars) {
|
|
24
|
+
return translate(this.atlas.localization, key, vars);
|
|
25
|
+
}
|
|
26
|
+
cls(key, base) {
|
|
27
|
+
return classFor(key, this.atlas.appearance, base);
|
|
28
|
+
}
|
|
29
|
+
setValue(name, value) {
|
|
30
|
+
this.values = { ...this.values, [name]: value };
|
|
31
|
+
}
|
|
32
|
+
fields() {
|
|
33
|
+
return this.settings?.signUpFields ?? [];
|
|
34
|
+
}
|
|
35
|
+
label(f) {
|
|
36
|
+
return f.required ? f.label : this.t('signUp.optionalField', { label: f.label });
|
|
37
|
+
}
|
|
38
|
+
inputType(f) {
|
|
39
|
+
return ['email', 'tel', 'url', 'number', 'date'].includes(f.type) ? f.type : 'text';
|
|
40
|
+
}
|
|
41
|
+
/** Same encoding as React, the embed widget and the hosted page: one value,
|
|
42
|
+
* or a comma-joined list for multiselect. */
|
|
43
|
+
picked(key) {
|
|
44
|
+
const value = this.values[key];
|
|
45
|
+
return value ? value.split(', ') : [];
|
|
46
|
+
}
|
|
47
|
+
toggle(f, option, on) {
|
|
48
|
+
if (f.type === 'radio') {
|
|
49
|
+
this.setValue(f.key, option);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const current = this.picked(f.key);
|
|
53
|
+
this.setValue(f.key, (on ? [...current, option] : current.filter((p) => p !== option)).join(', '));
|
|
54
|
+
}
|
|
55
|
+
showLegal() {
|
|
56
|
+
const legal = this.settings?.legal;
|
|
57
|
+
return !!legal && (!!legal.termsUrl || !!legal.privacyUrl);
|
|
58
|
+
}
|
|
59
|
+
consentOk() {
|
|
60
|
+
return !this.settings?.legal?.required || this.agreed;
|
|
61
|
+
}
|
|
62
|
+
formErrors() {
|
|
63
|
+
return this.errors.filter((error) => !error.param);
|
|
64
|
+
}
|
|
65
|
+
fieldErrorsFor(name) {
|
|
66
|
+
return this.errors.filter((error) => error.param === name);
|
|
67
|
+
}
|
|
68
|
+
onSubmit(event) {
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
if (!this.consentOk())
|
|
71
|
+
return;
|
|
72
|
+
this.submitSignUp.emit({
|
|
73
|
+
values: { ...this.values },
|
|
74
|
+
consent: this.settings?.legal?.required ? this.agreed : true,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
78
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SignUpFormComponent, isStandalone: true, selector: "atlas-sign-up-form", inputs: { settings: "settings", busy: "busy", errors: "errors", captcha: "captcha" }, outputs: { submitSignUp: "submitSignUp" }, ngImport: i0, template: `
|
|
79
|
+
<div [class]="cls('card', 'atlas-card')">
|
|
80
|
+
<h1 [class]="cls('headerTitle', 'atlas-title')">{{ t('signUp.title') }}</h1>
|
|
81
|
+
|
|
82
|
+
@for (error of formErrors(); track error.code) {
|
|
83
|
+
<p [class]="cls('formFieldError', 'atlas-error')" role="alert">{{ error.message }}</p>
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
<form (submit)="onSubmit($event)">
|
|
87
|
+
@for (f of fields(); track f.key) {
|
|
88
|
+
@if (f.type === 'radio' || f.type === 'multiselect') {
|
|
89
|
+
<div [class]="cls('formField', 'atlas-field')">
|
|
90
|
+
<span [class]="cls('formFieldLabel', 'atlas-field-label')">{{ label(f) }}</span>
|
|
91
|
+
<span class="atlas-choices">
|
|
92
|
+
@for (o of f.options; track o) {
|
|
93
|
+
<label class="atlas-choice">
|
|
94
|
+
<input
|
|
95
|
+
[type]="f.type === 'radio' ? 'radio' : 'checkbox'"
|
|
96
|
+
[attr.name]="f.key"
|
|
97
|
+
[value]="o"
|
|
98
|
+
[checked]="picked(f.key).includes(o)"
|
|
99
|
+
(change)="toggle(f, o, $any($event.target).checked)"
|
|
100
|
+
/>
|
|
101
|
+
{{ o }}
|
|
102
|
+
</label>
|
|
103
|
+
}
|
|
104
|
+
</span>
|
|
105
|
+
@for (error of fieldErrorsFor(f.key); track error.code) {
|
|
106
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
107
|
+
}
|
|
108
|
+
</div>
|
|
109
|
+
} @else {
|
|
110
|
+
<label [class]="cls('formField', 'atlas-field')">
|
|
111
|
+
<span [class]="cls('formFieldLabel', 'atlas-field-label')">{{ label(f) }}</span>
|
|
112
|
+
@if (f.type === 'checkbox') {
|
|
113
|
+
<input
|
|
114
|
+
type="checkbox"
|
|
115
|
+
[attr.name]="f.key"
|
|
116
|
+
[checked]="values[f.key] === 'true'"
|
|
117
|
+
(change)="setValue(f.key, $any($event.target).checked ? 'true' : '')"
|
|
118
|
+
/>
|
|
119
|
+
} @else if (f.type === 'select') {
|
|
120
|
+
<select
|
|
121
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
122
|
+
[attr.name]="f.key"
|
|
123
|
+
[value]="values[f.key] ?? ''"
|
|
124
|
+
[required]="f.required"
|
|
125
|
+
(change)="setValue(f.key, $any($event.target).value)"
|
|
126
|
+
>
|
|
127
|
+
<option value="">{{ f.placeholder ?? t('signUp.selectPlaceholder') }}</option>
|
|
128
|
+
@for (o of f.options; track o) {
|
|
129
|
+
<option [value]="o">{{ o }}</option>
|
|
130
|
+
}
|
|
131
|
+
</select>
|
|
132
|
+
} @else if (f.type === 'textarea') {
|
|
133
|
+
<textarea
|
|
134
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
135
|
+
[attr.name]="f.key"
|
|
136
|
+
rows="3"
|
|
137
|
+
[value]="values[f.key] ?? ''"
|
|
138
|
+
[required]="f.required"
|
|
139
|
+
[attr.placeholder]="f.placeholder"
|
|
140
|
+
(input)="setValue(f.key, $any($event.target).value)"
|
|
141
|
+
></textarea>
|
|
142
|
+
} @else {
|
|
143
|
+
<input
|
|
144
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
145
|
+
[type]="inputType(f)"
|
|
146
|
+
[attr.name]="f.key"
|
|
147
|
+
[value]="values[f.key] ?? ''"
|
|
148
|
+
[required]="f.required"
|
|
149
|
+
[attr.placeholder]="f.placeholder"
|
|
150
|
+
(input)="setValue(f.key, $any($event.target).value)"
|
|
151
|
+
/>
|
|
152
|
+
}
|
|
153
|
+
@for (error of fieldErrorsFor(f.key); track error.code) {
|
|
154
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
155
|
+
}
|
|
156
|
+
</label>
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
<label [class]="cls('formField', 'atlas-field')">
|
|
161
|
+
<span [class]="cls('formFieldLabel', 'atlas-field-label')">{{ t('signUp.emailLabel') }}</span>
|
|
162
|
+
<input
|
|
163
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
164
|
+
type="email"
|
|
165
|
+
name="email"
|
|
166
|
+
autocomplete="email"
|
|
167
|
+
required
|
|
168
|
+
[value]="values['email'] ?? ''"
|
|
169
|
+
(input)="setValue('email', $any($event.target).value)"
|
|
170
|
+
/>
|
|
171
|
+
@for (error of fieldErrorsFor('email'); track error.code) {
|
|
172
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
173
|
+
}
|
|
174
|
+
</label>
|
|
175
|
+
|
|
176
|
+
<label [class]="cls('formField', 'atlas-field')">
|
|
177
|
+
<span [class]="cls('formFieldLabel', 'atlas-field-label')">{{ t('signUp.passwordLabel') }}</span>
|
|
178
|
+
<input
|
|
179
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
180
|
+
type="password"
|
|
181
|
+
name="password"
|
|
182
|
+
autocomplete="new-password"
|
|
183
|
+
required
|
|
184
|
+
[value]="values['password'] ?? ''"
|
|
185
|
+
(input)="setValue('password', $any($event.target).value)"
|
|
186
|
+
/>
|
|
187
|
+
@for (error of fieldErrorsFor('password'); track error.code) {
|
|
188
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
189
|
+
}
|
|
190
|
+
</label>
|
|
191
|
+
|
|
192
|
+
@if (showLegal()) {
|
|
193
|
+
<label [class]="cls('formField', 'atlas-consent')">
|
|
194
|
+
@if (settings?.legal?.required) {
|
|
195
|
+
<input
|
|
196
|
+
type="checkbox"
|
|
197
|
+
name="consent"
|
|
198
|
+
[checked]="agreed"
|
|
199
|
+
(change)="agreed = $any($event.target).checked"
|
|
200
|
+
/>
|
|
201
|
+
}
|
|
202
|
+
<span class="atlas-text">
|
|
203
|
+
{{ t(settings?.legal?.required ? 'signUp.consentAgree' : 'signUp.consentNotice') }}
|
|
204
|
+
@if (settings?.legal?.termsUrl; as terms) {
|
|
205
|
+
<a class="atlas-link" [href]="terms" target="_blank" rel="noopener noreferrer">{{ t('signUp.terms') }}</a>
|
|
206
|
+
}
|
|
207
|
+
@if (settings?.legal?.termsUrl && settings?.legal?.privacyUrl) {
|
|
208
|
+
{{ t('signUp.and') }}
|
|
209
|
+
}
|
|
210
|
+
@if (settings?.legal?.privacyUrl; as privacy) {
|
|
211
|
+
<a class="atlas-link" [href]="privacy" target="_blank" rel="noopener noreferrer">{{ t('signUp.privacy') }}</a>
|
|
212
|
+
}.
|
|
213
|
+
</span>
|
|
214
|
+
@for (error of fieldErrorsFor('consent'); track error.code) {
|
|
215
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
216
|
+
}
|
|
217
|
+
</label>
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@if (captcha) {
|
|
221
|
+
<div class="atlas-captcha" data-atlas-captcha="" [atlasCaptchaSlot]="captcha"></div>
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
<button
|
|
225
|
+
[class]="cls('formButtonPrimary', 'atlas-button')"
|
|
226
|
+
[disabled]="busy || !consentOk()"
|
|
227
|
+
type="submit"
|
|
228
|
+
>
|
|
229
|
+
{{ t('signUp.submit') }}
|
|
230
|
+
</button>
|
|
231
|
+
</form>
|
|
232
|
+
</div>
|
|
233
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: AtlasCaptchaSlotDirective, selector: "[atlasCaptchaSlot]", inputs: ["atlasCaptchaSlot"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
234
|
+
}
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpFormComponent, decorators: [{
|
|
236
|
+
type: Component,
|
|
237
|
+
args: [{
|
|
238
|
+
selector: 'atlas-sign-up-form',
|
|
239
|
+
standalone: true,
|
|
240
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
241
|
+
imports: [AtlasCaptchaSlotDirective],
|
|
242
|
+
template: `
|
|
243
|
+
<div [class]="cls('card', 'atlas-card')">
|
|
244
|
+
<h1 [class]="cls('headerTitle', 'atlas-title')">{{ t('signUp.title') }}</h1>
|
|
245
|
+
|
|
246
|
+
@for (error of formErrors(); track error.code) {
|
|
247
|
+
<p [class]="cls('formFieldError', 'atlas-error')" role="alert">{{ error.message }}</p>
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
<form (submit)="onSubmit($event)">
|
|
251
|
+
@for (f of fields(); track f.key) {
|
|
252
|
+
@if (f.type === 'radio' || f.type === 'multiselect') {
|
|
253
|
+
<div [class]="cls('formField', 'atlas-field')">
|
|
254
|
+
<span [class]="cls('formFieldLabel', 'atlas-field-label')">{{ label(f) }}</span>
|
|
255
|
+
<span class="atlas-choices">
|
|
256
|
+
@for (o of f.options; track o) {
|
|
257
|
+
<label class="atlas-choice">
|
|
258
|
+
<input
|
|
259
|
+
[type]="f.type === 'radio' ? 'radio' : 'checkbox'"
|
|
260
|
+
[attr.name]="f.key"
|
|
261
|
+
[value]="o"
|
|
262
|
+
[checked]="picked(f.key).includes(o)"
|
|
263
|
+
(change)="toggle(f, o, $any($event.target).checked)"
|
|
264
|
+
/>
|
|
265
|
+
{{ o }}
|
|
266
|
+
</label>
|
|
267
|
+
}
|
|
268
|
+
</span>
|
|
269
|
+
@for (error of fieldErrorsFor(f.key); track error.code) {
|
|
270
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
271
|
+
}
|
|
272
|
+
</div>
|
|
273
|
+
} @else {
|
|
274
|
+
<label [class]="cls('formField', 'atlas-field')">
|
|
275
|
+
<span [class]="cls('formFieldLabel', 'atlas-field-label')">{{ label(f) }}</span>
|
|
276
|
+
@if (f.type === 'checkbox') {
|
|
277
|
+
<input
|
|
278
|
+
type="checkbox"
|
|
279
|
+
[attr.name]="f.key"
|
|
280
|
+
[checked]="values[f.key] === 'true'"
|
|
281
|
+
(change)="setValue(f.key, $any($event.target).checked ? 'true' : '')"
|
|
282
|
+
/>
|
|
283
|
+
} @else if (f.type === 'select') {
|
|
284
|
+
<select
|
|
285
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
286
|
+
[attr.name]="f.key"
|
|
287
|
+
[value]="values[f.key] ?? ''"
|
|
288
|
+
[required]="f.required"
|
|
289
|
+
(change)="setValue(f.key, $any($event.target).value)"
|
|
290
|
+
>
|
|
291
|
+
<option value="">{{ f.placeholder ?? t('signUp.selectPlaceholder') }}</option>
|
|
292
|
+
@for (o of f.options; track o) {
|
|
293
|
+
<option [value]="o">{{ o }}</option>
|
|
294
|
+
}
|
|
295
|
+
</select>
|
|
296
|
+
} @else if (f.type === 'textarea') {
|
|
297
|
+
<textarea
|
|
298
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
299
|
+
[attr.name]="f.key"
|
|
300
|
+
rows="3"
|
|
301
|
+
[value]="values[f.key] ?? ''"
|
|
302
|
+
[required]="f.required"
|
|
303
|
+
[attr.placeholder]="f.placeholder"
|
|
304
|
+
(input)="setValue(f.key, $any($event.target).value)"
|
|
305
|
+
></textarea>
|
|
306
|
+
} @else {
|
|
307
|
+
<input
|
|
308
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
309
|
+
[type]="inputType(f)"
|
|
310
|
+
[attr.name]="f.key"
|
|
311
|
+
[value]="values[f.key] ?? ''"
|
|
312
|
+
[required]="f.required"
|
|
313
|
+
[attr.placeholder]="f.placeholder"
|
|
314
|
+
(input)="setValue(f.key, $any($event.target).value)"
|
|
315
|
+
/>
|
|
316
|
+
}
|
|
317
|
+
@for (error of fieldErrorsFor(f.key); track error.code) {
|
|
318
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
319
|
+
}
|
|
320
|
+
</label>
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
<label [class]="cls('formField', 'atlas-field')">
|
|
325
|
+
<span [class]="cls('formFieldLabel', 'atlas-field-label')">{{ t('signUp.emailLabel') }}</span>
|
|
326
|
+
<input
|
|
327
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
328
|
+
type="email"
|
|
329
|
+
name="email"
|
|
330
|
+
autocomplete="email"
|
|
331
|
+
required
|
|
332
|
+
[value]="values['email'] ?? ''"
|
|
333
|
+
(input)="setValue('email', $any($event.target).value)"
|
|
334
|
+
/>
|
|
335
|
+
@for (error of fieldErrorsFor('email'); track error.code) {
|
|
336
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
337
|
+
}
|
|
338
|
+
</label>
|
|
339
|
+
|
|
340
|
+
<label [class]="cls('formField', 'atlas-field')">
|
|
341
|
+
<span [class]="cls('formFieldLabel', 'atlas-field-label')">{{ t('signUp.passwordLabel') }}</span>
|
|
342
|
+
<input
|
|
343
|
+
[class]="cls('formFieldInput', 'atlas-input')"
|
|
344
|
+
type="password"
|
|
345
|
+
name="password"
|
|
346
|
+
autocomplete="new-password"
|
|
347
|
+
required
|
|
348
|
+
[value]="values['password'] ?? ''"
|
|
349
|
+
(input)="setValue('password', $any($event.target).value)"
|
|
350
|
+
/>
|
|
351
|
+
@for (error of fieldErrorsFor('password'); track error.code) {
|
|
352
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
353
|
+
}
|
|
354
|
+
</label>
|
|
355
|
+
|
|
356
|
+
@if (showLegal()) {
|
|
357
|
+
<label [class]="cls('formField', 'atlas-consent')">
|
|
358
|
+
@if (settings?.legal?.required) {
|
|
359
|
+
<input
|
|
360
|
+
type="checkbox"
|
|
361
|
+
name="consent"
|
|
362
|
+
[checked]="agreed"
|
|
363
|
+
(change)="agreed = $any($event.target).checked"
|
|
364
|
+
/>
|
|
365
|
+
}
|
|
366
|
+
<span class="atlas-text">
|
|
367
|
+
{{ t(settings?.legal?.required ? 'signUp.consentAgree' : 'signUp.consentNotice') }}
|
|
368
|
+
@if (settings?.legal?.termsUrl; as terms) {
|
|
369
|
+
<a class="atlas-link" [href]="terms" target="_blank" rel="noopener noreferrer">{{ t('signUp.terms') }}</a>
|
|
370
|
+
}
|
|
371
|
+
@if (settings?.legal?.termsUrl && settings?.legal?.privacyUrl) {
|
|
372
|
+
{{ t('signUp.and') }}
|
|
373
|
+
}
|
|
374
|
+
@if (settings?.legal?.privacyUrl; as privacy) {
|
|
375
|
+
<a class="atlas-link" [href]="privacy" target="_blank" rel="noopener noreferrer">{{ t('signUp.privacy') }}</a>
|
|
376
|
+
}.
|
|
377
|
+
</span>
|
|
378
|
+
@for (error of fieldErrorsFor('consent'); track error.code) {
|
|
379
|
+
<span [class]="cls('formFieldError', 'atlas-error')">{{ error.message }}</span>
|
|
380
|
+
}
|
|
381
|
+
</label>
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
@if (captcha) {
|
|
385
|
+
<div class="atlas-captcha" data-atlas-captcha="" [atlasCaptchaSlot]="captcha"></div>
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
<button
|
|
389
|
+
[class]="cls('formButtonPrimary', 'atlas-button')"
|
|
390
|
+
[disabled]="busy || !consentOk()"
|
|
391
|
+
type="submit"
|
|
392
|
+
>
|
|
393
|
+
{{ t('signUp.submit') }}
|
|
394
|
+
</button>
|
|
395
|
+
</form>
|
|
396
|
+
</div>
|
|
397
|
+
`,
|
|
398
|
+
}]
|
|
399
|
+
}], propDecorators: { settings: [{
|
|
400
|
+
type: Input
|
|
401
|
+
}], busy: [{
|
|
402
|
+
type: Input
|
|
403
|
+
}], errors: [{
|
|
404
|
+
type: Input
|
|
405
|
+
}], captcha: [{
|
|
406
|
+
type: Input
|
|
407
|
+
}], submitSignUp: [{
|
|
408
|
+
type: Output
|
|
409
|
+
}] } });
|
|
410
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi11cC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9zaWduLXVwLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNwQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFRakY7Ozs7O0dBS0c7QUFtS0gsTUFBTSxPQUFPLG1CQUFtQjtJQUNiLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFckMsUUFBUSxHQUE0QixJQUFJLENBQUM7SUFDekMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNiLE1BQU0sR0FBaUIsRUFBRSxDQUFDO0lBQzFCLE9BQU8sR0FBNkIsSUFBSSxDQUFDO0lBRWxELDhFQUE4RTtJQUNwRSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7SUFFcEQsTUFBTSxHQUEyQixFQUFFLENBQUM7SUFDcEMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUVmLENBQUMsQ0FBQyxHQUFXLEVBQUUsSUFBNkI7UUFDcEQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxHQUFHLENBQUMsR0FBZSxFQUFFLElBQVk7UUFDekMsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxL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O2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFHSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1xuICBDYXB0Y2hhQ29udHJvbGxlcixcbiAgRmllbGRFcnJvcixcbiAgSW5zdGFuY2VTZXR0aW5ncyxcbiAgUHVibGljU2lnblVwRmllbGQsXG59IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuaW1wb3J0IHsgQXRsYXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRsYXMuc2VydmljZSc7XG5pbXBvcnQgeyBjbGFzc0ZvciwgdHlwZSBFbGVtZW50S2V5IH0gZnJvbSAnLi4vYXBwZWFyYW5jZSc7XG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEF0bGFzQ2FwdGNoYVNsb3REaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2NhcHRjaGEtc2xvdC5kaXJlY3RpdmUnO1xuXG4vKiogV2hhdCB0aGUgY3JlYXRlLWFjY291bnQgZm9ybSBlbWl0czogdGhlIHZhbHVlcyB0eXBlZCBwbHVzIHRoZSBjb25zZW50IHRpY2suICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25VcEZvcm1TdWJtaXQge1xuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNvbnNlbnQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGNyZWF0ZS1hY2NvdW50IHN0ZXAgb2YgYDxhdGxhcy1zaWduLXVwPmA6IHRoZSBpbnN0YW5jZSdzIGNvbmZpZ3VyZWQgZXh0cmFcbiAqIGZpZWxkcywgZW1haWwgKyBwYXNzd29yZCwgdGhlIGxlZ2FsLWNvbnNlbnQgcm93IGFuZCDigJQgd2hlbiB0aGUgaW5zdGFuY2VcbiAqIHJlcXVpcmVzIG9uZSBvbiBzaWduLXVwIOKAlCB0aGUgY2FwdGNoYSB3aWRnZXQuIFZhbHVlcyBsaXZlIG9uIHRoZSBjb21wb25lbnQgc29cbiAqIGEgcmVmdXNlZCBzdWJtaXQgbmV2ZXIgY2xlYXJzIHRoZW0uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F0bGFzLXNpZ24tdXAtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQXRsYXNDYXB0Y2hhU2xvdERpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY2xzKCdjYXJkJywgJ2F0bGFzLWNhcmQnKVwiPlxuICAgICAgPGgxIFtjbGFzc109XCJjbHMoJ2hlYWRlclRpdGxlJywgJ2F0bGFzLXRpdGxlJylcIj57eyB0KCdzaWduVXAudGl0bGUnKSB9fTwvaDE+XG5cbiAgICAgIEBmb3IgKGVycm9yIG9mIGZvcm1FcnJvcnMoKTsgdHJhY2sgZXJyb3IuY29kZSkge1xuICAgICAgICA8cCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3IubWVzc2FnZSB9fTwvcD5cbiAgICAgIH1cblxuICAgICAgPGZvcm0gKHN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCI+XG4gICAgICAgIEBmb3IgKGYgb2YgZmllbGRzKCk7IHRyYWNrIGYua2V5KSB7XG4gICAgICAgICAgQGlmIChmLnR5cGUgPT09ICdyYWRpbycgfHwgZi50eXBlID09PSAnbXVsdGlzZWxlY3QnKSB7XG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZCcsICdhdGxhcy1maWVsZCcpXCI+XG4gICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZExhYmVsJywgJ2F0bGFzLWZpZWxkLWxhYmVsJylcIj57eyBsYWJlbChmKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdGxhcy1jaG9pY2VzXCI+XG4gICAgICAgICAgICAgICAgQGZvciAobyBvZiBmLm9wdGlvbnM7IHRyYWNrIG8pIHtcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImF0bGFzLWNob2ljZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJmLnR5cGUgPT09ICdyYWRpbycgPyAncmFkaW8nIDogJ2NoZWNrYm94J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCJmLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInBpY2tlZChmLmtleSkuaW5jbHVkZXMobylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlKGYsIG8sICRhbnkoJGV2ZW50LnRhcmdldCkuY2hlY2tlZClcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICB7eyBvIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICBAZm9yIChlcnJvciBvZiBmaWVsZEVycm9yc0ZvcihmLmtleSk7IHRyYWNrIGVycm9yLmNvZGUpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCI+e3sgZXJyb3IubWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkJywgJ2F0bGFzLWZpZWxkJylcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImNscygnZm9ybUZpZWxkTGFiZWwnLCAnYXRsYXMtZmllbGQtbGFiZWwnKVwiPnt7IGxhYmVsKGYpIH19PC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKGYudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiZi5rZXlcIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidmFsdWVzW2Yua2V5XSA9PT0gJ3RydWUnXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VmFsdWUoZi5rZXksICRhbnkoJGV2ZW50LnRhcmdldCkuY2hlY2tlZCA/ICd0cnVlJyA6ICcnKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoZi50eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZElucHV0JywgJ2F0bGFzLWlucHV0JylcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCJmLmtleVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVzW2Yua2V5XSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZi5yZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlKGYua2V5LCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPnt7IGYucGxhY2Vob2xkZXIgPz8gdCgnc2lnblVwLnNlbGVjdFBsYWNlaG9sZGVyJykgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKG8gb2YgZi5vcHRpb25zOyB0cmFjayBvKSB7XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9cIj57eyBvIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGYudHlwZSA9PT0gJ3RleHRhcmVhJykge1xuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkSW5wdXQnLCAnYXRsYXMtaW5wdXQnKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cImYua2V5XCJcbiAgICAgICAgICAgICAgICAgIHJvd3M9XCIzXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZXNbZi5rZXldID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmLnJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cImYucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInNldFZhbHVlKGYua2V5LCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkSW5wdXQnLCAnYXRsYXMtaW5wdXQnKVwiXG4gICAgICAgICAgICAgICAgICBbdHlwZV09XCJpbnB1dFR5cGUoZilcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCJmLmtleVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVzW2Yua2V5XSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZi5yZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJmLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJzZXRWYWx1ZShmLmtleSwgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGZvciAoZXJyb3Igb2YgZmllbGRFcnJvcnNGb3IoZi5rZXkpOyB0cmFjayBlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImNscygnZm9ybUZpZWxkRXJyb3InLCAnYXRsYXMtZXJyb3InKVwiPnt7IGVycm9yLm1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPGxhYmVsIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZCcsICdhdGxhcy1maWVsZCcpXCI+XG4gICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImNscygnZm9ybUZpZWxkTGFiZWwnLCAnYXRsYXMtZmllbGQtbGFiZWwnKVwiPnt7IHQoJ3NpZ25VcC5lbWFpbExhYmVsJykgfX08L3NwYW4+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRJbnB1dCcsICdhdGxhcy1pbnB1dCcpXCJcbiAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwiZW1haWxcIlxuICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZXNbJ2VtYWlsJ10gPz8gJydcIlxuICAgICAgICAgICAgKGlucHV0KT1cInNldFZhbHVlKCdlbWFpbCcsICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIEBmb3IgKGVycm9yIG9mIGZpZWxkRXJyb3JzRm9yKCdlbWFpbCcpOyB0cmFjayBlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCI+e3sgZXJyb3IubWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgPGxhYmVsIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZCcsICdhdGxhcy1maWVsZCcpXCI+XG4gICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImNscygnZm9ybUZpZWxkTGFiZWwnLCAnYXRsYXMtZmllbGQtbGFiZWwnKVwiPnt7IHQoJ3NpZ25VcC5wYXNzd29yZExhYmVsJykgfX08L3NwYW4+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRJbnB1dCcsICdhdGxhcy1pbnB1dCcpXCJcbiAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVzWydwYXNzd29yZCddID8/ICcnXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJzZXRWYWx1ZSgncGFzc3dvcmQnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICBAZm9yIChlcnJvciBvZiBmaWVsZEVycm9yc0ZvcigncGFzc3dvcmQnKTsgdHJhY2sgZXJyb3IuY29kZSkge1xuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImNscygnZm9ybUZpZWxkRXJyb3InLCAnYXRsYXMtZXJyb3InKVwiPnt7IGVycm9yLm1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgIEBpZiAoc2hvd0xlZ2FsKCkpIHtcbiAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkJywgJ2F0bGFzLWNvbnNlbnQnKVwiPlxuICAgICAgICAgICAgQGlmIChzZXR0aW5ncz8ubGVnYWw/LnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImNvbnNlbnRcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFncmVlZFwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhZ3JlZWQgPSAkYW55KCRldmVudC50YXJnZXQpLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdGxhcy10ZXh0XCI+XG4gICAgICAgICAgICAgIHt7IHQoc2V0dGluZ3M/LmxlZ2FsPy5yZXF1aXJlZCA/ICdzaWduVXAuY29uc2VudEFncmVlJyA6ICdzaWduVXAuY29uc2VudE5vdGljZScpIH19XG4gICAgICAgICAgICAgIEBpZiAoc2V0dGluZ3M/LmxlZ2FsPy50ZXJtc1VybDsgYXMgdGVybXMpIHtcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImF0bGFzLWxpbmtcIiBbaHJlZl09XCJ0ZXJtc1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj57eyB0KCdzaWduVXAudGVybXMnKSB9fTwvYT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNldHRpbmdzPy5sZWdhbD8udGVybXNVcmwgJiYgc2V0dGluZ3M/LmxlZ2FsPy5wcml2YWN5VXJsKSB7XG4gICAgICAgICAgICAgICAge3sgdCgnc2lnblVwLmFuZCcpIH19XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChzZXR0aW5ncz8ubGVnYWw/LnByaXZhY3lVcmw7IGFzIHByaXZhY3kpIHtcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImF0bGFzLWxpbmtcIiBbaHJlZl09XCJwcml2YWN5XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPnt7IHQoJ3NpZ25VcC5wcml2YWN5JykgfX08L2E+XG4gICAgICAgICAgICAgIH0uXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBAZm9yIChlcnJvciBvZiBmaWVsZEVycm9yc0ZvcignY29uc2VudCcpOyB0cmFjayBlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJjbHMoJ2Zvcm1GaWVsZEVycm9yJywgJ2F0bGFzLWVycm9yJylcIj57eyBlcnJvci5tZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGNhcHRjaGEpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXRsYXMtY2FwdGNoYVwiIGRhdGEtYXRsYXMtY2FwdGNoYT1cIlwiIFthdGxhc0NhcHRjaGFTbG90XT1cImNhcHRjaGFcIj48L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uUHJpbWFyeScsICdhdGxhcy1idXR0b24nKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImJ1c3kgfHwgIWNvbnNlbnRPaygpXCJcbiAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHQoJ3NpZ25VcC5zdWJtaXQnKSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgU2lnblVwRm9ybUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICBASW5wdXQoKSBzZXR0aW5nczogSW5zdGFuY2VTZXR0aW5ncyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBidXN5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVycm9yczogRmllbGRFcnJvcltdID0gW107XG4gIEBJbnB1dCgpIGNhcHRjaGE6IENhcHRjaGFDb250cm9sbGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEVtaXRzIHRoZSB0eXBlZCB2YWx1ZXMgYW5kIHRoZSBjb25zZW50IHRpY2sgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQuICovXG4gIEBPdXRwdXQoKSBzdWJtaXRTaWduVXAgPSBuZXcgRXZlbnRFbWl0dGVyPFNpZ25VcEZvcm1TdWJtaXQ+KCk7XG5cbiAgcHJvdGVjdGVkIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwcm90ZWN0ZWQgYWdyZWVkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHQoa2V5OiBzdHJpbmcsIHZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXksIHZhcnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNscyhrZXk6IEVsZW1lbnRLZXksIGJhc2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNsYXNzRm9yKGtleSwgdGhpcy5hdGxhcy5hcHBlYXJhbmNlLCBiYXNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyA9IHsgLi4udGhpcy52YWx1ZXMsIFtuYW1lXTogdmFsdWUgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWVsZHMoKTogUHVibGljU2lnblVwRmllbGRbXSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M/LnNpZ25VcEZpZWxkcyA/PyBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsYWJlbChmOiBQdWJsaWNTaWduVXBGaWVsZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGYucmVxdWlyZWQgPyBmLmxhYmVsIDogdGhpcy50KCdzaWduVXAub3B0aW9uYWxGaWVsZCcsIHsgbGFiZWw6IGYubGFiZWwgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5wdXRUeXBlKGY6IFB1YmxpY1NpZ25VcEZpZWxkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gWydlbWFpbCcsICd0ZWwnLCAndXJsJywgJ251bWJlcicsICdkYXRlJ10uaW5jbHVkZXMoZi50eXBlKSA/IGYudHlwZSA6ICd0ZXh0JztcbiAgfVxuXG4gIC8qKiBTYW1lIGVuY29kaW5nIGFzIFJlYWN0LCB0aGUgZW1iZWQgd2lkZ2V0IGFuZCB0aGUgaG9zdGVkIHBhZ2U6IG9uZSB2YWx1ZSxcbiAgICogIG9yIGEgY29tbWEtam9pbmVkIGxpc3QgZm9yIG11bHRpc2VsZWN0LiAqL1xuICBwcm90ZWN0ZWQgcGlja2VkKGtleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZXNba2V5XTtcbiAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS5zcGxpdCgnLCAnKSA6IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZShmOiBQdWJsaWNTaWduVXBGaWVsZCwgb3B0aW9uOiBzdHJpbmcsIG9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGYudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgdGhpcy5zZXRWYWx1ZShmLmtleSwgb3B0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMucGlja2VkKGYua2V5KTtcbiAgICB0aGlzLnNldFZhbHVlKGYua2V5LCAob24gPyBbLi4uY3VycmVudCwgb3B0aW9uXSA6IGN1cnJlbnQuZmlsdGVyKChwKSA9PiBwICE9PSBvcHRpb24pKS5qb2luKCcsICcpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93TGVnYWwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGVnYWwgPSB0aGlzLnNldHRpbmdzPy5sZWdhbDtcbiAgICByZXR1cm4gISFsZWdhbCAmJiAoISFsZWdhbC50ZXJtc1VybCB8fCAhIWxlZ2FsLnByaXZhY3lVcmwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnNlbnRPaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc2V0dGluZ3M/LmxlZ2FsPy5yZXF1aXJlZCB8fCB0aGlzLmFncmVlZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmb3JtRXJyb3JzKCk6IEZpZWxkRXJyb3JbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmZpbHRlcigoZXJyb3IpID0+ICFlcnJvci5wYXJhbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmllbGRFcnJvcnNGb3IobmFtZTogc3RyaW5nKTogRmllbGRFcnJvcltdIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMuZmlsdGVyKChlcnJvcikgPT4gZXJyb3IucGFyYW0gPT09IG5hbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU3VibWl0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLmNvbnNlbnRPaygpKSByZXR1cm47XG4gICAgdGhpcy5zdWJtaXRTaWduVXAuZW1pdCh7XG4gICAgICB2YWx1ZXM6IHsgLi4udGhpcy52YWx1ZXMgfSxcbiAgICAgIGNvbnNlbnQ6IHRoaXMuc2V0dGluZ3M/LmxlZ2FsPy5yZXF1aXJlZCA/IHRoaXMuYWdyZWVkIDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, Input, inject, } from '@angular/core';
|
|
2
2
|
import { AtlasService } from '../atlas.service';
|
|
3
|
+
import { translate } from '../i18n';
|
|
3
4
|
import { AttemptFlowComponent } from './attempt-flow.component';
|
|
5
|
+
import { SignUpFormComponent } from './sign-up-form.component';
|
|
4
6
|
import { AtlasFlowController } from './flow-controller';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
/**
|
|
7
|
-
* `<atlas-sign-up>` —
|
|
8
|
-
*
|
|
9
|
-
*
|
|
9
|
+
* `<atlas-sign-up>` — creates an account. The Angular peer of React's
|
|
10
|
+
* `<SignUp/>`. The first step is the create-account form (the instance's
|
|
11
|
+
* configured fields, email, password, legal consent and — when required — the
|
|
12
|
+
* captcha), which POSTs `/v1/client/sign_ups`; from there it shares the flow
|
|
13
|
+
* engine with `<atlas-sign-in>` (the emailed-code step, then the ticket
|
|
14
|
+
* exchange), because the sequence of steps is decided by the server.
|
|
10
15
|
*
|
|
11
16
|
* ```html
|
|
12
17
|
* <atlas-sign-up *atlasSignedOut></atlas-sign-up>
|
|
@@ -16,20 +21,35 @@ export class SignUpComponent {
|
|
|
16
21
|
atlas = inject(AtlasService);
|
|
17
22
|
/** Where to send the user once the flow completes. Reserved for host routing. */
|
|
18
23
|
afterUrl;
|
|
19
|
-
flow = new AtlasFlowController(this.atlas.createFapiClient(), () => this.atlas.reload(), this.atlas.pendingAttempt);
|
|
24
|
+
flow = new AtlasFlowController(this.atlas.createFapiClient(), () => this.atlas.reload(), this.atlas.pendingAttempt, (key) => translate(this.atlas.localization, key));
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
// §5 the instance's sign-up fields, consent policy and captcha settings.
|
|
27
|
+
if (typeof window !== 'undefined')
|
|
28
|
+
void this.flow.loadSettings();
|
|
29
|
+
}
|
|
20
30
|
ngOnDestroy() {
|
|
21
31
|
this.flow.destroy();
|
|
22
32
|
}
|
|
23
33
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SignUpComponent, isStandalone: true, selector: "atlas-sign-up", inputs: { afterUrl: "afterUrl" }, ngImport: i0, template: `
|
|
35
|
+
@if (flow.state().attempt) {
|
|
36
|
+
<atlas-attempt-flow
|
|
37
|
+
[attempt]="flow.state().attempt"
|
|
38
|
+
[busy]="flow.state().busy"
|
|
39
|
+
[errors]="flow.state().errors"
|
|
40
|
+
titleKey="signUp.title"
|
|
41
|
+
(submitFlow)="flow.submit($event)"
|
|
42
|
+
></atlas-attempt-flow>
|
|
43
|
+
} @else {
|
|
44
|
+
<atlas-sign-up-form
|
|
45
|
+
[settings]="flow.settings()"
|
|
46
|
+
[busy]="flow.state().busy"
|
|
47
|
+
[errors]="flow.state().errors"
|
|
48
|
+
[captcha]="flow.signUpCaptchaDrawn() ? flow.signUpCaptcha : null"
|
|
49
|
+
(submitSignUp)="flow.create($event.values, $event.consent)"
|
|
50
|
+
></atlas-sign-up-form>
|
|
51
|
+
}
|
|
52
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AttemptFlowComponent, selector: "atlas-attempt-flow", inputs: ["attempt", "busy", "errors", "titleKey", "captcha"], outputs: ["submitFlow"] }, { kind: "component", type: SignUpFormComponent, selector: "atlas-sign-up-form", inputs: ["settings", "busy", "errors", "captcha"], outputs: ["submitSignUp"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
33
53
|
}
|
|
34
54
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpComponent, decorators: [{
|
|
35
55
|
type: Component,
|
|
@@ -37,18 +57,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
37
57
|
selector: 'atlas-sign-up',
|
|
38
58
|
standalone: true,
|
|
39
59
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
40
|
-
imports: [AttemptFlowComponent],
|
|
60
|
+
imports: [AttemptFlowComponent, SignUpFormComponent],
|
|
41
61
|
template: `
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
62
|
+
@if (flow.state().attempt) {
|
|
63
|
+
<atlas-attempt-flow
|
|
64
|
+
[attempt]="flow.state().attempt"
|
|
65
|
+
[busy]="flow.state().busy"
|
|
66
|
+
[errors]="flow.state().errors"
|
|
67
|
+
titleKey="signUp.title"
|
|
68
|
+
(submitFlow)="flow.submit($event)"
|
|
69
|
+
></atlas-attempt-flow>
|
|
70
|
+
} @else {
|
|
71
|
+
<atlas-sign-up-form
|
|
72
|
+
[settings]="flow.settings()"
|
|
73
|
+
[busy]="flow.state().busy"
|
|
74
|
+
[errors]="flow.state().errors"
|
|
75
|
+
[captcha]="flow.signUpCaptchaDrawn() ? flow.signUpCaptcha : null"
|
|
76
|
+
(submitSignUp)="flow.create($event.values, $event.consent)"
|
|
77
|
+
></atlas-sign-up-form>
|
|
78
|
+
}
|
|
49
79
|
`,
|
|
50
80
|
}]
|
|
51
81
|
}], propDecorators: { afterUrl: [{
|
|
52
82
|
type: Input
|
|
53
83
|
}] } });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi11cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi11cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFeEQ7Ozs7Ozs7Ozs7O0dBV0c7QUEwQkgsTUFBTSxPQUFPLGVBQWU7SUFDVCxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTlDLGlGQUFpRjtJQUN4RSxRQUFRLENBQVU7SUFFUixJQUFJLEdBQUcsSUFBSSxtQkFBbUIsQ0FDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUM3QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFDekIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FDakQsQ0FBQztJQUVGLFFBQVE7UUFDTix5RUFBeUU7UUFDekUsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1lBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ25FLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN0QixDQUFDO3dHQXBCVSxlQUFlOzRGQUFmLGVBQWUsMkdBcEJoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULDREQW5CUyxvQkFBb0Isc0pBQUUsbUJBQW1COzs0RkFxQnhDLGVBQWU7a0JBekIzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixFQUFFLG1CQUFtQixDQUFDO29CQUNwRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCVDtpQkFDRjs4QkFLVSxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXRsYXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRsYXMuc2VydmljZSc7XG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEF0dGVtcHRGbG93Q29tcG9uZW50IH0gZnJvbSAnLi9hdHRlbXB0LWZsb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFNpZ25VcEZvcm1Db21wb25lbnQgfSBmcm9tICcuL3NpZ24tdXAtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXRsYXNGbG93Q29udHJvbGxlciB9IGZyb20gJy4vZmxvdy1jb250cm9sbGVyJztcblxuLyoqXG4gKiBgPGF0bGFzLXNpZ24tdXA+YCDigJQgY3JlYXRlcyBhbiBhY2NvdW50LiBUaGUgQW5ndWxhciBwZWVyIG9mIFJlYWN0J3NcbiAqIGA8U2lnblVwLz5gLiBUaGUgZmlyc3Qgc3RlcCBpcyB0aGUgY3JlYXRlLWFjY291bnQgZm9ybSAodGhlIGluc3RhbmNlJ3NcbiAqIGNvbmZpZ3VyZWQgZmllbGRzLCBlbWFpbCwgcGFzc3dvcmQsIGxlZ2FsIGNvbnNlbnQgYW5kIOKAlCB3aGVuIHJlcXVpcmVkIOKAlCB0aGVcbiAqIGNhcHRjaGEpLCB3aGljaCBQT1NUcyBgL3YxL2NsaWVudC9zaWduX3Vwc2A7IGZyb20gdGhlcmUgaXQgc2hhcmVzIHRoZSBmbG93XG4gKiBlbmdpbmUgd2l0aCBgPGF0bGFzLXNpZ24taW4+YCAodGhlIGVtYWlsZWQtY29kZSBzdGVwLCB0aGVuIHRoZSB0aWNrZXRcbiAqIGV4Y2hhbmdlKSwgYmVjYXVzZSB0aGUgc2VxdWVuY2Ugb2Ygc3RlcHMgaXMgZGVjaWRlZCBieSB0aGUgc2VydmVyLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxhdGxhcy1zaWduLXVwICphdGxhc1NpZ25lZE91dD48L2F0bGFzLXNpZ24tdXA+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRsYXMtc2lnbi11cCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQXR0ZW1wdEZsb3dDb21wb25lbnQsIFNpZ25VcEZvcm1Db21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoZmxvdy5zdGF0ZSgpLmF0dGVtcHQpIHtcbiAgICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgICAgW2F0dGVtcHRdPVwiZmxvdy5zdGF0ZSgpLmF0dGVtcHRcIlxuICAgICAgICBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICAgIHRpdGxlS2V5PVwic2lnblVwLnRpdGxlXCJcbiAgICAgICAgKHN1Ym1pdEZsb3cpPVwiZmxvdy5zdWJtaXQoJGV2ZW50KVwiXG4gICAgICA+PC9hdGxhcy1hdHRlbXB0LWZsb3c+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8YXRsYXMtc2lnbi11cC1mb3JtXG4gICAgICAgIFtzZXR0aW5nc109XCJmbG93LnNldHRpbmdzKClcIlxuICAgICAgICBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICAgIFtjYXB0Y2hhXT1cImZsb3cuc2lnblVwQ2FwdGNoYURyYXduKCkgPyBmbG93LnNpZ25VcENhcHRjaGEgOiBudWxsXCJcbiAgICAgICAgKHN1Ym1pdFNpZ25VcCk9XCJmbG93LmNyZWF0ZSgkZXZlbnQudmFsdWVzLCAkZXZlbnQuY29uc2VudClcIlxuICAgICAgPjwvYXRsYXMtc2lnbi11cC1mb3JtPlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgU2lnblVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGF0bGFzID0gaW5qZWN0KEF0bGFzU2VydmljZSk7XG5cbiAgLyoqIFdoZXJlIHRvIHNlbmQgdGhlIHVzZXIgb25jZSB0aGUgZmxvdyBjb21wbGV0ZXMuIFJlc2VydmVkIGZvciBob3N0IHJvdXRpbmcuICovXG4gIEBJbnB1dCgpIGFmdGVyVXJsPzogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBmbG93ID0gbmV3IEF0bGFzRmxvd0NvbnRyb2xsZXIoXG4gICAgdGhpcy5hdGxhcy5jcmVhdGVGYXBpQ2xpZW50KCksXG4gICAgKCkgPT4gdGhpcy5hdGxhcy5yZWxvYWQoKSxcbiAgICB0aGlzLmF0bGFzLnBlbmRpbmdBdHRlbXB0LFxuICAgIChrZXkpID0+IHRyYW5zbGF0ZSh0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwga2V5KSxcbiAgKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyDCpzUgdGhlIGluc3RhbmNlJ3Mgc2lnbi11cCBmaWVsZHMsIGNvbnNlbnQgcG9saWN5IGFuZCBjYXB0Y2hhIHNldHRpbmdzLlxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgdm9pZCB0aGlzLmZsb3cubG9hZFNldHRpbmdzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsb3cuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Directive, ElementRef, Input, inject } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* `[atlasCaptchaSlot]="controller"` — the element a flow's captcha widget draws
|
|
5
|
+
* into (see `createCaptchaController` in `@atlasauth/js`). Attaches the
|
|
6
|
+
* controller to the host element while it is rendered and detaches it (removing
|
|
7
|
+
* the widget) when it goes away.
|
|
8
|
+
*/
|
|
9
|
+
export class AtlasCaptchaSlotDirective {
|
|
10
|
+
host = inject(ElementRef);
|
|
11
|
+
current = null;
|
|
12
|
+
initialized = false;
|
|
13
|
+
set controller(next) {
|
|
14
|
+
if (next === this.current)
|
|
15
|
+
return;
|
|
16
|
+
if (this.initialized)
|
|
17
|
+
this.current?.attach(null);
|
|
18
|
+
this.current = next;
|
|
19
|
+
if (this.initialized)
|
|
20
|
+
this.current?.attach(this.host.nativeElement);
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() {
|
|
23
|
+
this.initialized = true;
|
|
24
|
+
this.current?.attach(this.host.nativeElement);
|
|
25
|
+
}
|
|
26
|
+
ngOnDestroy() {
|
|
27
|
+
this.current?.attach(null);
|
|
28
|
+
}
|
|
29
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AtlasCaptchaSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
30
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AtlasCaptchaSlotDirective, isStandalone: true, selector: "[atlasCaptchaSlot]", inputs: { controller: ["atlasCaptchaSlot", "controller"] }, ngImport: i0 });
|
|
31
|
+
}
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AtlasCaptchaSlotDirective, decorators: [{
|
|
33
|
+
type: Directive,
|
|
34
|
+
args: [{
|
|
35
|
+
selector: '[atlasCaptchaSlot]',
|
|
36
|
+
standalone: true,
|
|
37
|
+
}]
|
|
38
|
+
}], propDecorators: { controller: [{
|
|
39
|
+
type: Input,
|
|
40
|
+
args: ['atlasCaptchaSlot']
|
|
41
|
+
}] } });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS1zbG90LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGlyZWN0aXZlcy9jYXB0Y2hhLXNsb3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd4Rjs7Ozs7R0FLRztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUFDbkIsSUFBSSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7SUFDNUQsT0FBTyxHQUE2QixJQUFJLENBQUM7SUFDekMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUU1QixJQUErQixVQUFVLENBQUMsSUFBOEI7UUFDdEUsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ2xDLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO3dHQW5CVSx5QkFBeUI7NEZBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFKckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBTWdDLFVBQVU7c0JBQXhDLEtBQUs7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBDYXB0Y2hhQ29udHJvbGxlciB9IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuXG4vKipcbiAqIGBbYXRsYXNDYXB0Y2hhU2xvdF09XCJjb250cm9sbGVyXCJgIOKAlCB0aGUgZWxlbWVudCBhIGZsb3cncyBjYXB0Y2hhIHdpZGdldCBkcmF3c1xuICogaW50byAoc2VlIGBjcmVhdGVDYXB0Y2hhQ29udHJvbGxlcmAgaW4gYEBhdGxhc2F1dGgvanNgKS4gQXR0YWNoZXMgdGhlXG4gKiBjb250cm9sbGVyIHRvIHRoZSBob3N0IGVsZW1lbnQgd2hpbGUgaXQgaXMgcmVuZGVyZWQgYW5kIGRldGFjaGVzIGl0IChyZW1vdmluZ1xuICogdGhlIHdpZGdldCkgd2hlbiBpdCBnb2VzIGF3YXkuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thdGxhc0NhcHRjaGFTbG90XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEF0bGFzQ2FwdGNoYVNsb3REaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG9zdCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgY3VycmVudDogQ2FwdGNoYUNvbnRyb2xsZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnYXRsYXNDYXB0Y2hhU2xvdCcpIHNldCBjb250cm9sbGVyKG5leHQ6IENhcHRjaGFDb250cm9sbGVyIHwgbnVsbCkge1xuICAgIGlmIChuZXh0ID09PSB0aGlzLmN1cnJlbnQpIHJldHVybjtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkgdGhpcy5jdXJyZW50Py5hdHRhY2gobnVsbCk7XG4gICAgdGhpcy5jdXJyZW50ID0gbmV4dDtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkgdGhpcy5jdXJyZW50Py5hdHRhY2godGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5jdXJyZW50Py5hdHRhY2godGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50Py5hdHRhY2gobnVsbCk7XG4gIH1cbn1cbiJdfQ==
|