Previews

No matching results.

x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<div class="tw:p-6 tw:max-w-7xl tw:mx-auto tw:space-y-8">
<div class="callout">
<p class="tw:mb-1 tw:text-sm tw:font-mono">
<strong>CODE INPUT:</strong> Single-digit-per-cell verification code entry<br>
<strong>VARIANTS:</strong> Blank | Invalid error | Disabled | 4-cell<br>
<strong>COMPOSES:</strong> .form-control (each cell is a real form-control input)
</p>
<p class="tw:mb-0 tw:text-sm">
Typing a digit auto-advances to the next cell; Backspace on an empty cell moves back
and clears the previous digit. Pasting a full code (on any cell) distributes it across
the row starting from cell 1. A hidden input keeps the joined digits in sync for form
submission. Requires <code>data-controller="code-input"</code>.
</p>
</div>
<div class="tw:border-t tw:pt-6">
<h2 class="h4 tw:mb-4">Blank</h2>
<div class="callout tw:mb-4">
<p class="tw:mb-0 tw:text-sm">
<strong>Default state:</strong> 6 cells split 3+3 by <code>.code-input-sep</code>. Each
cell is labelled "Digit N"; the group itself is labelled by the visible field label via
<code>aria-labelledby</code>. The first cell carries <code>autocomplete="one-time-code"</code>
so browsers/password managers can offer SMS-code autofill.
</p>
</div>
<div class="tw:max-w-sm" data-controller="code-input" id="code-input-blank">
<label id="code-input-blank-label" class="form-label" for="code-input-blank-cell-1">Verification code</label>
<div class="code-input" role="group" aria-labelledby="code-input-blank-label">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code"
class="form-control code-input-cell" id="code-input-blank-cell-1" aria-label="Digit 1"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 2"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 3"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<span class="code-input-sep" aria-hidden="true"></span>
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 4"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 5"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 6"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="hidden" name="verification_code" data-code-input-target="value">
</div>
<p class="form-text">We've emailed a 6-digit code to a.okafor@…. Enter it below to verify your account.</p>
</div>
<div class="tw:mt-4 tw:text-sm tw:text-gray-600">
<code><div class="code-input" role="group" aria-labelledby="…"><input class="form-control code-input-cell" inputmode="numeric" maxlength="1" autocomplete="one-time-code" aria-label="Digit 1" data-code-input-target="cell" data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus"><span class="code-input-sep" aria-hidden="true"></span><input type="hidden" data-code-input-target="value"></div></code>
</div>
</div>
<div class="tw:border-t tw:pt-6">
<h2 class="h4 tw:mb-4">Invalid code error</h2>
<div class="callout tw:mb-4">
<p class="tw:mb-0 tw:text-sm">
<strong>Error state:</strong> each cell carries <code>.is-invalid</code> (reusing
<code>.form-control.is-invalid</code>'s red border/focus ring — no bespoke error CSS
needed), <code>aria-invalid="true"</code>, and <code>aria-describedby</code> pointing at
the error text below the row. Editing any cell clears <code>.is-invalid</code> and
<code>aria-invalid</code> from every cell and hides the error text (C08 — the error
clears on the first correcting keystroke, not on resubmit).
</p>
</div>
<div class="tw:max-w-sm" data-controller="code-input" id="code-input-invalid">
<label id="code-input-invalid-label" class="form-label" for="code-input-invalid-cell-1">Verification code</label>
<div class="code-input" role="group" aria-labelledby="code-input-invalid-label">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code"
class="form-control code-input-cell is-invalid" id="code-input-invalid-cell-1" value="4"
aria-label="Digit 1" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="8"
aria-label="Digit 2" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="2"
aria-label="Digit 3" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<span class="code-input-sep" aria-hidden="true"></span>
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="9"
aria-label="Digit 4" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="1"
aria-label="Digit 5" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="3"
aria-label="Digit 6" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="hidden" name="verification_code" value="482913" data-code-input-target="value">
</div>
<p class="invalid-feedback" id="code-input-invalid-error" data-code-input-target="error">That code isn't valid. Check your email for the latest code and try again.</p>
</div>
<div class="tw:mt-4 tw:text-sm tw:text-gray-600">
<code><input class="form-control code-input-cell is-invalid" aria-describedby="code-input-error" aria-invalid="true" ><p class="invalid-feedback" id="code-input-error" data-code-input-target="error">That code isn't valid.</p></code>
</div>
</div>
<div class="tw:border-t tw:pt-6">
<h2 class="h4 tw:mb-4">Disabled</h2>
<div class="callout tw:mb-4">
<p class="tw:mb-0 tw:text-sm">
<strong>Disabled:</strong> real <code>[disabled]</code> attribute on every cell — for an
already-verified code that's now locked from editing.
</p>
</div>
<div class="tw:max-w-sm" data-controller="code-input" id="code-input-disabled">
<label id="code-input-disabled-label" class="form-label" for="code-input-disabled-cell-1">Verification code</label>
<div class="code-input" role="group" aria-labelledby="code-input-disabled-label">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code"
class="form-control code-input-cell" id="code-input-disabled-cell-1" value="4" disabled
aria-label="Digit 1" data-code-input-target="cell">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="8" disabled
aria-label="Digit 2" data-code-input-target="cell">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="2" disabled
aria-label="Digit 3" data-code-input-target="cell">
<span class="code-input-sep" aria-hidden="true"></span>
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="9" disabled
aria-label="Digit 4" data-code-input-target="cell">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="1" disabled
aria-label="Digit 5" data-code-input-target="cell">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="3" disabled
aria-label="Digit 6" data-code-input-target="cell">
<input type="hidden" name="verification_code" value="482913" data-code-input-target="value" disabled>
</div>
<p class="form-text">Your account is already verified.</p>
</div>
</div>
<div class="tw:border-t tw:pt-6">
<h2 class="h4 tw:mb-4">4-cell variant</h2>
<div class="callout tw:mb-4">
<p class="tw:mb-0 tw:text-sm">
<strong>Any cell count:</strong> the controller reads whatever <code>data-code-input-target="cell"</code>
elements are present — no config value for cell count. Drop 4 cells (a PIN) or 6
(an OTP) and it just works.
</p>
</div>
<div class="tw:max-w-xs" data-controller="code-input" id="code-input-4cell">
<label id="code-input-4cell-label" class="form-label" for="code-input-4cell-cell-1">Enter your 4-digit PIN</label>
<div class="code-input" role="group" aria-labelledby="code-input-4cell-label">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code"
class="form-control code-input-cell" id="code-input-4cell-cell-1" aria-label="Digit 1"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 2"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 3"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 4"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="hidden" name="pin" data-code-input-target="value">
</div>
<p class="form-text">Use the 4-digit PIN sent to your registered mobile number.</p>
</div>
<div class="tw:mt-4 tw:text-sm tw:text-gray-600">
<code><div class="code-input" role="group" aria-labelledby="…"><!-- 4 cells, no .code-input-sep --></div></code>
</div>
</div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
<div class="tw:p-6 tw:max-w-7xl tw:mx-auto tw:space-y-8">
<%# Introductory callout %>
<div class="callout">
<p class="tw:mb-1 tw:text-sm tw:font-mono">
<strong>CODE INPUT:</strong> Single-digit-per-cell verification code entry<br>
<strong>VARIANTS:</strong> Blank | Invalid error | Disabled | 4-cell<br>
<strong>COMPOSES:</strong> .form-control (each cell is a real form-control input)
</p>
<p class="tw:mb-0 tw:text-sm">
Typing a digit auto-advances to the next cell; Backspace on an empty cell moves back
and clears the previous digit. Pasting a full code (on any cell) distributes it across
the row starting from cell 1. A hidden input keeps the joined digits in sync for form
submission. Requires <code>data-controller="code-input"</code>.
</p>
</div>
<%# Blank — 6-cell, 3+3 grouped %>
<div class="tw:border-t tw:pt-6">
<h2 class="h4 tw:mb-4">Blank</h2>
<div class="callout tw:mb-4">
<p class="tw:mb-0 tw:text-sm">
<strong>Default state:</strong> 6 cells split 3+3 by <code>.code-input-sep</code>. Each
cell is labelled "Digit N"; the group itself is labelled by the visible field label via
<code>aria-labelledby</code>. The first cell carries <code>autocomplete="one-time-code"</code>
so browsers/password managers can offer SMS-code autofill.
</p>
</div>
<div class="tw:max-w-sm" data-controller="code-input" id="code-input-blank">
<label id="code-input-blank-label" class="form-label" for="code-input-blank-cell-1">Verification code</label>
<div class="code-input" role="group" aria-labelledby="code-input-blank-label">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code"
class="form-control code-input-cell" id="code-input-blank-cell-1" aria-label="Digit 1"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 2"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 3"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<span class="code-input-sep" aria-hidden="true"></span>
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 4"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 5"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 6"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="hidden" name="verification_code" data-code-input-target="value">
</div>
<p class="form-text">We've emailed a 6-digit code to a.okafor@…. Enter it below to verify your account.</p>
</div>
<div class="tw:mt-4 tw:text-sm tw:text-gray-600">
<code><div class="code-input" role="group" aria-labelledby="…"><input class="form-control code-input-cell" inputmode="numeric" maxlength="1" autocomplete="one-time-code" aria-label="Digit 1" data-code-input-target="cell" data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus"><span class="code-input-sep" aria-hidden="true"></span><input type="hidden" data-code-input-target="value"></div></code>
</div>
</div>
<%# Invalid code error %>
<div class="tw:border-t tw:pt-6">
<h2 class="h4 tw:mb-4">Invalid code error</h2>
<div class="callout tw:mb-4">
<p class="tw:mb-0 tw:text-sm">
<strong>Error state:</strong> each cell carries <code>.is-invalid</code> (reusing
<code>.form-control.is-invalid</code>'s red border/focus ring — no bespoke error CSS
needed), <code>aria-invalid="true"</code>, and <code>aria-describedby</code> pointing at
the error text below the row. Editing any cell clears <code>.is-invalid</code> and
<code>aria-invalid</code> from every cell and hides the error text (C08 — the error
clears on the first correcting keystroke, not on resubmit).
</p>
</div>
<div class="tw:max-w-sm" data-controller="code-input" id="code-input-invalid">
<label id="code-input-invalid-label" class="form-label" for="code-input-invalid-cell-1">Verification code</label>
<div class="code-input" role="group" aria-labelledby="code-input-invalid-label">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code"
class="form-control code-input-cell is-invalid" id="code-input-invalid-cell-1" value="4"
aria-label="Digit 1" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="8"
aria-label="Digit 2" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="2"
aria-label="Digit 3" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<span class="code-input-sep" aria-hidden="true"></span>
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="9"
aria-label="Digit 4" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="1"
aria-label="Digit 5" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell is-invalid" value="3"
aria-label="Digit 6" aria-describedby="code-input-invalid-error" aria-invalid="true"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="hidden" name="verification_code" value="482913" data-code-input-target="value">
</div>
<p class="invalid-feedback" id="code-input-invalid-error" data-code-input-target="error">That code isn't valid. Check your email for the latest code and try again.</p>
</div>
<div class="tw:mt-4 tw:text-sm tw:text-gray-600">
<code><input class="form-control code-input-cell is-invalid" aria-describedby="code-input-error" aria-invalid="true" ><p class="invalid-feedback" id="code-input-error" data-code-input-target="error">That code isn't valid.</p></code>
</div>
</div>
<%# Disabled %>
<div class="tw:border-t tw:pt-6">
<h2 class="h4 tw:mb-4">Disabled</h2>
<div class="callout tw:mb-4">
<p class="tw:mb-0 tw:text-sm">
<strong>Disabled:</strong> real <code>[disabled]</code> attribute on every cell — for an
already-verified code that's now locked from editing.
</p>
</div>
<div class="tw:max-w-sm" data-controller="code-input" id="code-input-disabled">
<label id="code-input-disabled-label" class="form-label" for="code-input-disabled-cell-1">Verification code</label>
<div class="code-input" role="group" aria-labelledby="code-input-disabled-label">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code"
class="form-control code-input-cell" id="code-input-disabled-cell-1" value="4" disabled
aria-label="Digit 1" data-code-input-target="cell">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="8" disabled
aria-label="Digit 2" data-code-input-target="cell">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="2" disabled
aria-label="Digit 3" data-code-input-target="cell">
<span class="code-input-sep" aria-hidden="true"></span>
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="9" disabled
aria-label="Digit 4" data-code-input-target="cell">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="1" disabled
aria-label="Digit 5" data-code-input-target="cell">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" value="3" disabled
aria-label="Digit 6" data-code-input-target="cell">
<input type="hidden" name="verification_code" value="482913" data-code-input-target="value" disabled>
</div>
<p class="form-text">Your account is already verified.</p>
</div>
</div>
<%# 4-cell variant %>
<div class="tw:border-t tw:pt-6">
<h2 class="h4 tw:mb-4">4-cell variant</h2>
<div class="callout tw:mb-4">
<p class="tw:mb-0 tw:text-sm">
<strong>Any cell count:</strong> the controller reads whatever <code>data-code-input-target="cell"</code>
elements are present — no config value for cell count. Drop 4 cells (a PIN) or 6
(an OTP) and it just works.
</p>
</div>
<div class="tw:max-w-xs" data-controller="code-input" id="code-input-4cell">
<label id="code-input-4cell-label" class="form-label" for="code-input-4cell-cell-1">Enter your 4-digit PIN</label>
<div class="code-input" role="group" aria-labelledby="code-input-4cell-label">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code"
class="form-control code-input-cell" id="code-input-4cell-cell-1" aria-label="Digit 1"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 2"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 3"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="text" inputmode="numeric" maxlength="1" autocomplete="off"
class="form-control code-input-cell" aria-label="Digit 4"
data-code-input-target="cell"
data-action="input->code-input#input keydown->code-input#keydown paste->code-input#paste focus->code-input#selectOnFocus">
<input type="hidden" name="pin" data-code-input-target="value">
</div>
<p class="form-text">Use the 4-digit PIN sent to your registered mobile number.</p>
</div>
<div class="tw:mt-4 tw:text-sm tw:text-gray-600">
<code><div class="code-input" role="group" aria-labelledby="…"><!-- 4 cells, no .code-input-sep --></div></code>
</div>
</div>
</div>