@zitadel/config 1.0.0-alpha.23 → 1.0.0-alpha.25

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 (62) hide show
  1. package/defaults/README-branding.md +26 -34
  2. package/defaults/branding/centered/login.liquid +31 -11
  3. package/defaults/branding/minimal/login.liquid +30 -10
  4. package/dist/branding-contrast.d.mts +28 -21
  5. package/dist/branding-contrast.d.mts.map +1 -1
  6. package/dist/branding-contrast.mjs +1 -1
  7. package/dist/branding-contrast.mjs.map +1 -1
  8. package/dist/branding-url.d.mts +1 -2
  9. package/dist/branding-url.d.mts.map +1 -1
  10. package/dist/branding-url.mjs.map +1 -1
  11. package/dist/css-color.d.mts +5 -10
  12. package/dist/css-color.d.mts.map +1 -1
  13. package/dist/css-color.mjs +1 -1
  14. package/dist/css-color.mjs.map +1 -1
  15. package/dist/{defaults-BxGCGdqS.d.mts → defaults-BtKIcWxW.d.mts} +21 -14
  16. package/dist/defaults-BtKIcWxW.d.mts.map +1 -0
  17. package/dist/{defaults-DV6hY2KT.mjs → defaults-COLBFU3S.mjs} +17 -18
  18. package/dist/defaults-COLBFU3S.mjs.map +1 -0
  19. package/dist/defaults.d.mts +1 -1
  20. package/dist/defaults.mjs +1 -1
  21. package/dist/idp/index.d.mts +2 -0
  22. package/dist/idp/index.mjs +2 -0
  23. package/dist/idp-ByzXQN85.mjs +207 -0
  24. package/dist/idp-ByzXQN85.mjs.map +1 -0
  25. package/dist/idp-connection-CHxGm1Wr.mjs +324 -0
  26. package/dist/idp-connection-CHxGm1Wr.mjs.map +1 -0
  27. package/dist/index-Cuxu-zQD.d.mts +210 -0
  28. package/dist/index-Cuxu-zQD.d.mts.map +1 -0
  29. package/dist/index.d.mts +4 -3
  30. package/dist/index.mjs +5 -4
  31. package/dist/{meta-schemas-OowgSUfU.mjs → meta-schemas-C03zgFux.mjs} +36 -333
  32. package/dist/meta-schemas-C03zgFux.mjs.map +1 -0
  33. package/dist/meta-schemas.d.mts +5 -6
  34. package/dist/meta-schemas.d.mts.map +1 -1
  35. package/dist/meta-schemas.mjs +1 -1
  36. package/dist/normalize.d.mts +3 -4
  37. package/dist/normalize.d.mts.map +1 -1
  38. package/dist/normalize.mjs.map +1 -1
  39. package/dist/{schemas-7oNU25Qz.mjs → schemas-CUU4Rf8J.mjs} +11 -4
  40. package/dist/schemas-CUU4Rf8J.mjs.map +1 -0
  41. package/dist/schemas.d.mts +361 -9
  42. package/dist/schemas.d.mts.map +1 -1
  43. package/dist/schemas.mjs +2 -2
  44. package/dist/template.d.mts +9 -10
  45. package/dist/template.d.mts.map +1 -1
  46. package/dist/template.mjs +1 -1
  47. package/dist/template.mjs.map +1 -1
  48. package/dist/validate.d.mts +15 -13
  49. package/dist/validate.d.mts.map +1 -1
  50. package/dist/validate.mjs +28 -18
  51. package/dist/validate.mjs.map +1 -1
  52. package/meta-schemas/branding.json +5 -5
  53. package/meta-schemas/flow-definition.json +81 -6
  54. package/meta-schemas/idp-connection.json +6 -6
  55. package/package.json +18 -8
  56. package/defaults/branding/hero/login.liquid +0 -238
  57. package/defaults/branding/split/login.liquid +0 -197
  58. package/defaults/branding/split-right/login.liquid +0 -197
  59. package/dist/defaults-BxGCGdqS.d.mts.map +0 -1
  60. package/dist/defaults-DV6hY2KT.mjs.map +0 -1
  61. package/dist/meta-schemas-OowgSUfU.mjs.map +0 -1
  62. package/dist/schemas-7oNU25Qz.mjs.map +0 -1
@@ -1,238 +0,0 @@
1
- <zl-page-shell data-zl-template-root>
2
- <div class="zl-split">
3
- <aside class="zl-split__brand">
4
- {% comment %} ──────────────────────────────────────────────────────────
5
- YOUR LANDING CONTENT — everything inside this aside is yours.
6
- Edit the copy and structure freely: structural HTML (div, section,
7
- nav, h1–h6, ul, li, a, img, …) plus inline style="" attributes are
8
- allowed; button, input, form, script, and style tags are stripped —
9
- use plain anchors for landing CTAs. The zl-hero__* classes keep
10
- this pane on design tokens so palettes and theme mode apply.
11
-
12
- The login card in the section below is fully wired to the flow
13
- engine; leave its zl-* atoms intact. Layout knobs (set on the root
14
- element's style attribute): --zl-split-columns, --zl-split-align,
15
- --zl-split-brand-mobile. Add zl-split--right to the wrapper div to
16
- mirror the panes. More in .zitadel/branding/README.md.
17
- ────────────────────────────────────────────────────────────── {% endcomment %}
18
- <div class="zl-hero">
19
- <nav class="zl-hero__nav">
20
- <span class="zl-hero__brand">
21
- {% if branding.logo_url %}
22
- <img class="zl-hero__brand-logo" src="{{ branding.logo_url }}" alt="" data-zl-asset-fallback />
23
- <span class="zl-hero__brand-mark" aria-hidden="true" hidden data-zl-asset-fallback-content></span>
24
- {% else %}
25
- <span class="zl-hero__brand-mark" aria-hidden="true"></span>
26
- {% endif %}
27
- Your brand
28
- </span>
29
- <span class="zl-hero__nav-links">
30
- <a href="#">Product</a>
31
- <a href="#">Pricing</a>
32
- <a href="#">Docs</a>
33
- </span>
34
- </nav>
35
-
36
- <p class="zl-hero__eyebrow">Your product category</p>
37
- <h2 class="zl-hero__headline">A headline about what you ship.</h2>
38
- <p class="zl-hero__sub">
39
- Use this pane to tell visitors why they sign up: what your product
40
- does, who it is for, and what happens after they sign in. Replace
41
- every line here before you publish.
42
- </p>
43
-
44
- <ul class="zl-hero__bullets">
45
- <li>Your first selling point</li>
46
- <li>Your second selling point</li>
47
- <li>Your third selling point</li>
48
- </ul>
49
-
50
- <p class="zl-hero__footnote">
51
- Replace this line with real social proof, such as customer logos or
52
- a certification you actually hold.
53
- </p>
54
- </div>
55
- </aside>
56
- <section class="zl-split__form">
57
- {% if branding.logo_url %}
58
- <img class="zl-split__compact" src="{{ branding.logo_url }}" alt="" data-zl-asset-fallback />
59
- <p class="zl-split__compact zl-hero__compact-brand" hidden data-zl-asset-fallback-content>Your brand</p>
60
- {% else %}
61
- <p class="zl-split__compact zl-hero__compact-brand">Your brand</p>
62
- {% endif %}
63
- <zl-card>
64
- <h1 slot="header" class="zl-card-title">{{ step.texts.title_key | t: identity.display_name }}</h1>
65
- {% if step.texts.description_key %}
66
- {% assign card_subtitle = step.texts.description_key | t: identity.display_name %}
67
- {% if card_subtitle != "" %}
68
- <p slot="header" class="zl-card-subtitle">{{ card_subtitle }}</p>
69
- {% endif %}
70
- {% endif %}
71
-
72
- {% assign recover = actions | where: "name", "recover" | first %}
73
- {% assign password_field = fields | where: "type", "password" | first %}
74
- <div class="zl-field-group">
75
- {% for f in fields %}
76
- {% assign field_placeholder = f.text_key | fieldPlaceholder %}
77
- {% assign field_help = f.text_key | fieldHelp %}
78
- {% assign field_err = f.name | fieldError: errors %}
79
- {% case f.type %}
80
- {% when 'checkbox' %}
81
- <zl-checkbox
82
- name="{{ f.name }}"
83
- data-testid="zitadel-field-{{ f.name | testid }}"
84
- label="{{ f.text_key | t }}"
85
- value="true"
86
- {% if f.value %}checked{% endif %}
87
- {% if field_err != "" %}invalid error="{{ field_err }}"{% endif %}
88
- ></zl-checkbox>
89
- {% when 'select' %}
90
- <zl-select
91
- name="{{ f.name }}"
92
- data-testid="zitadel-field-{{ f.name | testid }}"
93
- label="{{ f.text_key | t }}"
94
- value="{{ f.value }}"
95
- options='{{ f.validation.enum | selectOptions | json }}'
96
- {% if f.required %}required{% endif %}
97
- {% if field_placeholder != "" %}placeholder="{{ field_placeholder }}"{% endif %}
98
- {% if field_err != "" %}invalid error="{{ field_err }}"{% endif %}
99
- ></zl-select>
100
- {% else %}
101
- {% assign autocomplete_val = '' %}
102
- {% if f.name == 'email' %}
103
- {% assign autocomplete_val = 'email' %}
104
- {% elsif f.type == 'password' and step.name contains 'register' %}
105
- {% assign autocomplete_val = 'new-password' %}
106
- {% elsif f.type == 'password' %}
107
- {% assign autocomplete_val = 'current-password' %}
108
- {% endif %}
109
- <zl-field
110
- name="{{ f.name }}"
111
- data-testid="zitadel-field-{{ f.name | testid }}"
112
- label="{{ f.text_key | t }}"
113
- type="{{ f.type }}"
114
- value="{{ f.value }}"
115
- {% if autocomplete_val != '' %}autocomplete="{{ autocomplete_val }}"{% endif %}
116
- {% if f.required %}required{% endif %}
117
- {% if field_placeholder != "" %}placeholder="{{ field_placeholder }}"{% endif %}
118
- {% if field_err != "" %}invalid error="{{ field_err }}"{% endif %}
119
- {% if recover and f.type == 'password' %}forgot-password-href="#" forgot-password-action="{{ recover.name }}" forgot-password-label="{{ recover.text_key | t }}"{% endif %}
120
- >
121
- {% if field_help != "" %}
122
- <span slot="help">{{ field_help }}</span>
123
- {% endif %}
124
- </zl-field>
125
- {% endcase %}
126
- {% endfor %}
127
-
128
- {% if errors and errors.size > 0 %}
129
- {% for err in errors %}
130
- {% if err | formLevelError %}
131
- {% assign alert_heading = err.text_key | alertHeading %}
132
- {% assign alert_body = err.text_key | alertBody %}
133
- <zl-alert data-zl-step-error{% if alert_heading != "" %} heading="{{ alert_heading | t }}"{% endif %}>
134
- {% if alert_body != "" %}{{ alert_body | t }}{% elsif err.text_key %}{{ err.text_key | t }}{% else %}{{ err.message }}{% endif %}
135
- </zl-alert>
136
- {% endif %}
137
- {% endfor %}
138
- {% endif %}
139
- </div>
140
-
141
- <div class="zl-card-actions">
142
- {% comment %}
143
- A step can offer recovery without asking for a password (an identifier-only
144
- screen, say). With no label row to sit on, the affordance keeps its own row
145
- rather than disappearing.
146
- {% endcomment %}
147
- {% if recover and password_field == nil %}
148
- <p class="zl-card-forgot">
149
- <a href="#" class="zl-card-forgot__link" data-action="recover">{{ recover.text_key | t }}</a>
150
- </p>
151
- {% endif %}
152
-
153
- {% for a in actions %}
154
- {% if a.primary %}
155
- <zl-button
156
- hierarchy="primary"
157
- size="medium"
158
- type="submit"
159
- block
160
- action="{{ a.name }}"
161
- data-testid="zitadel-action-{{ a.name }}"
162
- label="{{ a.text_key | t }}"
163
- {% if loading %}loading{% endif %}
164
- ></zl-button>
165
- {% endif %}
166
- {% endfor %}
167
-
168
- {% for a in actions %}
169
- {% unless a.primary or a.kind == 'back' or a.name == 'passkey' or a.name == 'register' or a.name == 'sign_in' or a.name == 'recover' %}
170
- <zl-button
171
- hierarchy="secondary"
172
- size="medium"
173
- type="button"
174
- block
175
- action="{{ a.name }}"
176
- data-testid="zitadel-action-{{ a.name }}"
177
- label="{{ a.text_key | t }}"
178
- ></zl-button>
179
- {% endunless %}
180
- {% endfor %}
181
-
182
- {% assign passkey = actions | where: "name", "passkey" | first %}
183
- {% if passkey %}
184
- {% unless passkey.primary %}
185
- <zl-button
186
- hierarchy="secondary"
187
- size="medium"
188
- block
189
- action="passkey"
190
- data-testid="zitadel-action-passkey"
191
- label="{{ passkey.text_key | t }}"
192
- ></zl-button>
193
- {% endunless %}
194
- {% endif %}
195
-
196
- {% assign register = actions | where: "name", "register" | first %}
197
- {% if register %}
198
- <p class="zl-card-nav">
199
- {{ 'identifier.action.register.lead' | t }}<a href="#" class="zl-card-nav__link" data-action="register" data-testid="zitadel-action-register-link">{{ 'identifier.action.register.link' | t }}</a>
200
- </p>
201
- {% endif %}
202
-
203
- {% assign sign_in = actions | where: "name", "sign_in" | first %}
204
- {% if sign_in %}
205
- <p class="zl-card-nav">
206
- {{ 'register.action.sign_in.lead' | t }}<a href="#" class="zl-card-nav__link" data-action="sign_in" data-testid="zitadel-action-sign_in-link">{{ 'register.action.sign_in.link' | t }}</a>
207
- </p>
208
- {% endif %}
209
- </div>
210
-
211
- {% if challenge %}
212
- {% if challenge.method == "passkey" or challenge.method == "passkey_register" %}
213
- {% assign ceremony = "authenticate" %}
214
- {% assign submit_method = challenge.method %}
215
- {% if challenge.method == "passkey_register" or challenge.options.user %}
216
- {% assign ceremony = "register" %}
217
- {% assign submit_method = "passkey_register" %}
218
- {% endif %}
219
- <zl-passkey
220
- ceremony="{{ ceremony }}"
221
- method="{{ submit_method }}"
222
- challenge-id="{{ challenge.challenge_id }}"
223
- options='{{ challenge.options | json }}'
224
- pending-label="{{ 'passkey.pending.status' | t }}"
225
- cancel-label="{{ 'action.cancel' | t }}"
226
- ></zl-passkey>
227
- {% endif %}
228
- {% endif %}
229
-
230
- {% mandatory_gates %}
231
- </zl-card>
232
- {% comment %} The orchestrator swaps this for the trustmark, so it sits with
233
- the card rather than under the seam between the panes. Removing it falls
234
- back to the page-shell footer. {% endcomment %}
235
- <div data-zl-attribution-anchor></div>
236
- </section>
237
- </div>
238
- </zl-page-shell>
@@ -1,197 +0,0 @@
1
- <zl-page-shell data-zl-template-root>
2
- <div class="zl-split">
3
- <aside class="zl-split__brand">
4
- {% if branding.logo_url %}
5
- <img class="zl-split__logo" src="{{ branding.logo_url }}" alt="" />
6
- {% endif %}
7
- {% if branding.hero_url %}
8
- <img class="zl-split__hero" src="{{ branding.hero_url }}" alt="" />
9
- {% endif %}
10
- {% unless branding.logo_url or branding.hero_url %}
11
- {% comment %} Until branding.json names an asset, a decorative panel
12
- keeps the split composition readable. {% endcomment %}
13
- <div class="zl-split__placeholder" aria-hidden="true"></div>
14
- {% endunless %}
15
- </aside>
16
- <section class="zl-split__form">
17
- {% if branding.logo_url %}
18
- <img class="zl-split__compact" src="{{ branding.logo_url }}" alt="" />
19
- {% elsif branding.hero_url %}
20
- <img class="zl-split__compact zl-split__compact--hero" src="{{ branding.hero_url }}" alt="" />
21
- {% endif %}
22
- <zl-card>
23
- <h1 slot="header" class="zl-card-title">{{ step.texts.title_key | t: identity.display_name }}</h1>
24
- {% if step.texts.description_key %}
25
- {% assign card_subtitle = step.texts.description_key | t: identity.display_name %}
26
- {% if card_subtitle != "" %}
27
- <p slot="header" class="zl-card-subtitle">{{ card_subtitle }}</p>
28
- {% endif %}
29
- {% endif %}
30
-
31
- {% assign recover = actions | where: "name", "recover" | first %}
32
- {% assign password_field = fields | where: "type", "password" | first %}
33
- <div class="zl-field-group">
34
- {% for f in fields %}
35
- {% assign field_placeholder = f.text_key | fieldPlaceholder %}
36
- {% assign field_help = f.text_key | fieldHelp %}
37
- {% assign field_err = f.name | fieldError: errors %}
38
- {% case f.type %}
39
- {% when 'checkbox' %}
40
- <zl-checkbox
41
- name="{{ f.name }}"
42
- data-testid="zitadel-field-{{ f.name | testid }}"
43
- label="{{ f.text_key | t }}"
44
- value="true"
45
- {% if f.value %}checked{% endif %}
46
- {% if field_err != "" %}invalid error="{{ field_err }}"{% endif %}
47
- ></zl-checkbox>
48
- {% when 'select' %}
49
- <zl-select
50
- name="{{ f.name }}"
51
- data-testid="zitadel-field-{{ f.name | testid }}"
52
- label="{{ f.text_key | t }}"
53
- value="{{ f.value }}"
54
- options='{{ f.validation.enum | selectOptions | json }}'
55
- {% if f.required %}required{% endif %}
56
- {% if field_placeholder != "" %}placeholder="{{ field_placeholder }}"{% endif %}
57
- {% if field_err != "" %}invalid error="{{ field_err }}"{% endif %}
58
- ></zl-select>
59
- {% else %}
60
- {% assign autocomplete_val = '' %}
61
- {% if f.name == 'email' %}
62
- {% assign autocomplete_val = 'email' %}
63
- {% elsif f.type == 'password' and step.name contains 'register' %}
64
- {% assign autocomplete_val = 'new-password' %}
65
- {% elsif f.type == 'password' %}
66
- {% assign autocomplete_val = 'current-password' %}
67
- {% endif %}
68
- <zl-field
69
- name="{{ f.name }}"
70
- data-testid="zitadel-field-{{ f.name | testid }}"
71
- label="{{ f.text_key | t }}"
72
- type="{{ f.type }}"
73
- value="{{ f.value }}"
74
- {% if autocomplete_val != '' %}autocomplete="{{ autocomplete_val }}"{% endif %}
75
- {% if f.required %}required{% endif %}
76
- {% if field_placeholder != "" %}placeholder="{{ field_placeholder }}"{% endif %}
77
- {% if field_err != "" %}invalid error="{{ field_err }}"{% endif %}
78
- {% if recover and f.type == 'password' %}forgot-password-href="#" forgot-password-action="{{ recover.name }}" forgot-password-label="{{ recover.text_key | t }}"{% endif %}
79
- >
80
- {% if field_help != "" %}
81
- <span slot="help">{{ field_help }}</span>
82
- {% endif %}
83
- </zl-field>
84
- {% endcase %}
85
- {% endfor %}
86
-
87
- {% if errors and errors.size > 0 %}
88
- {% for err in errors %}
89
- {% if err | formLevelError %}
90
- {% assign alert_heading = err.text_key | alertHeading %}
91
- {% assign alert_body = err.text_key | alertBody %}
92
- <zl-alert data-zl-step-error{% if alert_heading != "" %} heading="{{ alert_heading | t }}"{% endif %}>
93
- {% if alert_body != "" %}{{ alert_body | t }}{% elsif err.text_key %}{{ err.text_key | t }}{% else %}{{ err.message }}{% endif %}
94
- </zl-alert>
95
- {% endif %}
96
- {% endfor %}
97
- {% endif %}
98
- </div>
99
-
100
- <div class="zl-card-actions">
101
- {% comment %}
102
- A step can offer recovery without asking for a password (an identifier-only
103
- screen, say). With no label row to sit on, the affordance keeps its own row
104
- rather than disappearing.
105
- {% endcomment %}
106
- {% if recover and password_field == nil %}
107
- <p class="zl-card-forgot">
108
- <a href="#" class="zl-card-forgot__link" data-action="recover">{{ recover.text_key | t }}</a>
109
- </p>
110
- {% endif %}
111
-
112
- {% for a in actions %}
113
- {% if a.primary %}
114
- <zl-button
115
- hierarchy="primary"
116
- size="medium"
117
- type="submit"
118
- block
119
- action="{{ a.name }}"
120
- data-testid="zitadel-action-{{ a.name }}"
121
- label="{{ a.text_key | t }}"
122
- {% if loading %}loading{% endif %}
123
- ></zl-button>
124
- {% endif %}
125
- {% endfor %}
126
-
127
- {% for a in actions %}
128
- {% unless a.primary or a.kind == 'back' or a.name == 'passkey' or a.name == 'register' or a.name == 'sign_in' or a.name == 'recover' %}
129
- <zl-button
130
- hierarchy="secondary"
131
- size="medium"
132
- type="button"
133
- block
134
- action="{{ a.name }}"
135
- data-testid="zitadel-action-{{ a.name }}"
136
- label="{{ a.text_key | t }}"
137
- ></zl-button>
138
- {% endunless %}
139
- {% endfor %}
140
-
141
- {% assign passkey = actions | where: "name", "passkey" | first %}
142
- {% if passkey %}
143
- {% unless passkey.primary %}
144
- <zl-button
145
- hierarchy="secondary"
146
- size="medium"
147
- block
148
- action="passkey"
149
- data-testid="zitadel-action-passkey"
150
- label="{{ passkey.text_key | t }}"
151
- ></zl-button>
152
- {% endunless %}
153
- {% endif %}
154
-
155
- {% assign register = actions | where: "name", "register" | first %}
156
- {% if register %}
157
- <p class="zl-card-nav">
158
- {{ 'identifier.action.register.lead' | t }}<a href="#" class="zl-card-nav__link" data-action="register" data-testid="zitadel-action-register-link">{{ 'identifier.action.register.link' | t }}</a>
159
- </p>
160
- {% endif %}
161
-
162
- {% assign sign_in = actions | where: "name", "sign_in" | first %}
163
- {% if sign_in %}
164
- <p class="zl-card-nav">
165
- {{ 'register.action.sign_in.lead' | t }}<a href="#" class="zl-card-nav__link" data-action="sign_in" data-testid="zitadel-action-sign_in-link">{{ 'register.action.sign_in.link' | t }}</a>
166
- </p>
167
- {% endif %}
168
- </div>
169
-
170
- {% if challenge %}
171
- {% if challenge.method == "passkey" or challenge.method == "passkey_register" %}
172
- {% assign ceremony = "authenticate" %}
173
- {% assign submit_method = challenge.method %}
174
- {% if challenge.method == "passkey_register" or challenge.options.user %}
175
- {% assign ceremony = "register" %}
176
- {% assign submit_method = "passkey_register" %}
177
- {% endif %}
178
- <zl-passkey
179
- ceremony="{{ ceremony }}"
180
- method="{{ submit_method }}"
181
- challenge-id="{{ challenge.challenge_id }}"
182
- options='{{ challenge.options | json }}'
183
- pending-label="{{ 'passkey.pending.status' | t }}"
184
- cancel-label="{{ 'action.cancel' | t }}"
185
- ></zl-passkey>
186
- {% endif %}
187
- {% endif %}
188
-
189
- {% mandatory_gates %}
190
- </zl-card>
191
- {% comment %} The orchestrator swaps this for the trustmark, so it sits with
192
- the card rather than under the seam between the panes. Removing it falls
193
- back to the page-shell footer. {% endcomment %}
194
- <div data-zl-attribution-anchor></div>
195
- </section>
196
- </div>
197
- </zl-page-shell>
@@ -1,197 +0,0 @@
1
- <zl-page-shell data-zl-template-root>
2
- <div class="zl-split zl-split--right">
3
- <aside class="zl-split__brand">
4
- {% if branding.logo_url %}
5
- <img class="zl-split__logo" src="{{ branding.logo_url }}" alt="" />
6
- {% endif %}
7
- {% if branding.hero_url %}
8
- <img class="zl-split__hero" src="{{ branding.hero_url }}" alt="" />
9
- {% endif %}
10
- {% unless branding.logo_url or branding.hero_url %}
11
- {% comment %} Until branding.json names an asset, a decorative panel
12
- keeps the split composition readable. {% endcomment %}
13
- <div class="zl-split__placeholder" aria-hidden="true"></div>
14
- {% endunless %}
15
- </aside>
16
- <section class="zl-split__form">
17
- {% if branding.logo_url %}
18
- <img class="zl-split__compact" src="{{ branding.logo_url }}" alt="" />
19
- {% elsif branding.hero_url %}
20
- <img class="zl-split__compact zl-split__compact--hero" src="{{ branding.hero_url }}" alt="" />
21
- {% endif %}
22
- <zl-card>
23
- <h1 slot="header" class="zl-card-title">{{ step.texts.title_key | t: identity.display_name }}</h1>
24
- {% if step.texts.description_key %}
25
- {% assign card_subtitle = step.texts.description_key | t: identity.display_name %}
26
- {% if card_subtitle != "" %}
27
- <p slot="header" class="zl-card-subtitle">{{ card_subtitle }}</p>
28
- {% endif %}
29
- {% endif %}
30
-
31
- {% assign recover = actions | where: "name", "recover" | first %}
32
- {% assign password_field = fields | where: "type", "password" | first %}
33
- <div class="zl-field-group">
34
- {% for f in fields %}
35
- {% assign field_placeholder = f.text_key | fieldPlaceholder %}
36
- {% assign field_help = f.text_key | fieldHelp %}
37
- {% assign field_err = f.name | fieldError: errors %}
38
- {% case f.type %}
39
- {% when 'checkbox' %}
40
- <zl-checkbox
41
- name="{{ f.name }}"
42
- data-testid="zitadel-field-{{ f.name | testid }}"
43
- label="{{ f.text_key | t }}"
44
- value="true"
45
- {% if f.value %}checked{% endif %}
46
- {% if field_err != "" %}invalid error="{{ field_err }}"{% endif %}
47
- ></zl-checkbox>
48
- {% when 'select' %}
49
- <zl-select
50
- name="{{ f.name }}"
51
- data-testid="zitadel-field-{{ f.name | testid }}"
52
- label="{{ f.text_key | t }}"
53
- value="{{ f.value }}"
54
- options='{{ f.validation.enum | selectOptions | json }}'
55
- {% if f.required %}required{% endif %}
56
- {% if field_placeholder != "" %}placeholder="{{ field_placeholder }}"{% endif %}
57
- {% if field_err != "" %}invalid error="{{ field_err }}"{% endif %}
58
- ></zl-select>
59
- {% else %}
60
- {% assign autocomplete_val = '' %}
61
- {% if f.name == 'email' %}
62
- {% assign autocomplete_val = 'email' %}
63
- {% elsif f.type == 'password' and step.name contains 'register' %}
64
- {% assign autocomplete_val = 'new-password' %}
65
- {% elsif f.type == 'password' %}
66
- {% assign autocomplete_val = 'current-password' %}
67
- {% endif %}
68
- <zl-field
69
- name="{{ f.name }}"
70
- data-testid="zitadel-field-{{ f.name | testid }}"
71
- label="{{ f.text_key | t }}"
72
- type="{{ f.type }}"
73
- value="{{ f.value }}"
74
- {% if autocomplete_val != '' %}autocomplete="{{ autocomplete_val }}"{% endif %}
75
- {% if f.required %}required{% endif %}
76
- {% if field_placeholder != "" %}placeholder="{{ field_placeholder }}"{% endif %}
77
- {% if field_err != "" %}invalid error="{{ field_err }}"{% endif %}
78
- {% if recover and f.type == 'password' %}forgot-password-href="#" forgot-password-action="{{ recover.name }}" forgot-password-label="{{ recover.text_key | t }}"{% endif %}
79
- >
80
- {% if field_help != "" %}
81
- <span slot="help">{{ field_help }}</span>
82
- {% endif %}
83
- </zl-field>
84
- {% endcase %}
85
- {% endfor %}
86
-
87
- {% if errors and errors.size > 0 %}
88
- {% for err in errors %}
89
- {% if err | formLevelError %}
90
- {% assign alert_heading = err.text_key | alertHeading %}
91
- {% assign alert_body = err.text_key | alertBody %}
92
- <zl-alert data-zl-step-error{% if alert_heading != "" %} heading="{{ alert_heading | t }}"{% endif %}>
93
- {% if alert_body != "" %}{{ alert_body | t }}{% elsif err.text_key %}{{ err.text_key | t }}{% else %}{{ err.message }}{% endif %}
94
- </zl-alert>
95
- {% endif %}
96
- {% endfor %}
97
- {% endif %}
98
- </div>
99
-
100
- <div class="zl-card-actions">
101
- {% comment %}
102
- A step can offer recovery without asking for a password (an identifier-only
103
- screen, say). With no label row to sit on, the affordance keeps its own row
104
- rather than disappearing.
105
- {% endcomment %}
106
- {% if recover and password_field == nil %}
107
- <p class="zl-card-forgot">
108
- <a href="#" class="zl-card-forgot__link" data-action="recover">{{ recover.text_key | t }}</a>
109
- </p>
110
- {% endif %}
111
-
112
- {% for a in actions %}
113
- {% if a.primary %}
114
- <zl-button
115
- hierarchy="primary"
116
- size="medium"
117
- type="submit"
118
- block
119
- action="{{ a.name }}"
120
- data-testid="zitadel-action-{{ a.name }}"
121
- label="{{ a.text_key | t }}"
122
- {% if loading %}loading{% endif %}
123
- ></zl-button>
124
- {% endif %}
125
- {% endfor %}
126
-
127
- {% for a in actions %}
128
- {% unless a.primary or a.kind == 'back' or a.name == 'passkey' or a.name == 'register' or a.name == 'sign_in' or a.name == 'recover' %}
129
- <zl-button
130
- hierarchy="secondary"
131
- size="medium"
132
- type="button"
133
- block
134
- action="{{ a.name }}"
135
- data-testid="zitadel-action-{{ a.name }}"
136
- label="{{ a.text_key | t }}"
137
- ></zl-button>
138
- {% endunless %}
139
- {% endfor %}
140
-
141
- {% assign passkey = actions | where: "name", "passkey" | first %}
142
- {% if passkey %}
143
- {% unless passkey.primary %}
144
- <zl-button
145
- hierarchy="secondary"
146
- size="medium"
147
- block
148
- action="passkey"
149
- data-testid="zitadel-action-passkey"
150
- label="{{ passkey.text_key | t }}"
151
- ></zl-button>
152
- {% endunless %}
153
- {% endif %}
154
-
155
- {% assign register = actions | where: "name", "register" | first %}
156
- {% if register %}
157
- <p class="zl-card-nav">
158
- {{ 'identifier.action.register.lead' | t }}<a href="#" class="zl-card-nav__link" data-action="register" data-testid="zitadel-action-register-link">{{ 'identifier.action.register.link' | t }}</a>
159
- </p>
160
- {% endif %}
161
-
162
- {% assign sign_in = actions | where: "name", "sign_in" | first %}
163
- {% if sign_in %}
164
- <p class="zl-card-nav">
165
- {{ 'register.action.sign_in.lead' | t }}<a href="#" class="zl-card-nav__link" data-action="sign_in" data-testid="zitadel-action-sign_in-link">{{ 'register.action.sign_in.link' | t }}</a>
166
- </p>
167
- {% endif %}
168
- </div>
169
-
170
- {% if challenge %}
171
- {% if challenge.method == "passkey" or challenge.method == "passkey_register" %}
172
- {% assign ceremony = "authenticate" %}
173
- {% assign submit_method = challenge.method %}
174
- {% if challenge.method == "passkey_register" or challenge.options.user %}
175
- {% assign ceremony = "register" %}
176
- {% assign submit_method = "passkey_register" %}
177
- {% endif %}
178
- <zl-passkey
179
- ceremony="{{ ceremony }}"
180
- method="{{ submit_method }}"
181
- challenge-id="{{ challenge.challenge_id }}"
182
- options='{{ challenge.options | json }}'
183
- pending-label="{{ 'passkey.pending.status' | t }}"
184
- cancel-label="{{ 'action.cancel' | t }}"
185
- ></zl-passkey>
186
- {% endif %}
187
- {% endif %}
188
-
189
- {% mandatory_gates %}
190
- </zl-card>
191
- {% comment %} The orchestrator swaps this for the trustmark, so it sits with
192
- the card rather than under the seam between the panes. Removing it falls
193
- back to the page-shell footer. {% endcomment %}
194
- <div data-zl-attribution-anchor></div>
195
- </section>
196
- </div>
197
- </zl-page-shell>
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults-BxGCGdqS.d.mts","names":[],"sources":["../src/readmes.ts","../src/defaults.ts"],"mappings":";;;;;;AAQA;;iBAAgB,oBAAA,CAAA;;;AAQhB;;iBAAgB,kBAAA,CAAA;;;AAShB;;;iBAAgB,qBAAA,CAAA;;;cCFH,2BAAA;AAAA,cACA,uBAAA;AAAA,cACA,0BAAA;AAAA,cACA,wBAAA;AAAA,cACA,4BAAA;AAAA,cACA,8BAAA;ADZb;;;;;AASA;;AATA,cCqBa,aAAA;AAAA,KAED,WAAA,WAAsB,aAAA;AAAA,cAErB,oBAAA,EAAsB,WAAA;;;;AAlBnC;;;;cAkDa,gBAAA;AAAA,KAED,cAAA,WAAyB,gBAAA;AAAA,cAExB,uBAAA,EAAyB,cAAA;AAAA,KAW1B,qBAAA;EAhEwB,8EAkElC,QAAA;IACE,MAAA,wBAlEmC;IAoEnC,eAAA;MAAmB,KAAA;IAAA;EAAA,GAnEc;EAsEnC,QAAA;AAAA;;AArEF;;;;iBA6EgB,wBAAA,CACd,MAAA,YACC,qBAAA;AA9EH;;;;;AASA;;;AATA,cAiHa,eAAA;AAAA,KAED,YAAA,WAAuB,eAAA;AAAA,cAEtB,sBAAA,EAAwB,YAAA;AAAA,KA0GzB,0BAAA;EACV,iBAAA;EACA,aAAA,WAtN6C;EAwN7C,MAAA,WAtN+D;EAwN/D,OAAA;AAAA;AAAA,iBAGc,yBAAA,CACd,iBAAA;AAAA,iBAKc,yBAAA,CACd,OAAA,GAAS,0BAAA,GACR,gBAAA;AAAA,iBAca,mBAAA,CACd,OAAA,GAAS,0BAAA,GACR,sCAAA"}