userflow.js-self-hosted 0.1.1003129 → 0.1.1003153
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/bubble-frame.css +11 -11
- package/builder-ui-frame.css +76 -147
- package/builder-ui-host.css +1 -1
- package/flow-host.css +29 -29
- package/hash.txt +1 -1
- package/iframe-reset.css +1 -1
- package/logomark.js +1 -1
- package/notifications-host.css +3 -3
- package/package.json +1 -1
- package/userflow.js +1 -1
package/bubble-frame.css
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
width: 14px;
|
|
3
3
|
height: 14px;
|
|
4
4
|
border-radius: 6px 6px 6px 1px;
|
|
5
|
-
background: var(--userflow-widget-background-color, #
|
|
5
|
+
background: var(--userflow-widget-background-color, #1a57e6);
|
|
6
6
|
position: relative;
|
|
7
7
|
overflow: hidden;
|
|
8
8
|
display: inline-flex;
|
|
@@ -527,9 +527,9 @@
|
|
|
527
527
|
}
|
|
528
528
|
.userflowjs-bubble-button--primary:disabled,
|
|
529
529
|
.userflowjs-bubble-button--default:disabled {
|
|
530
|
-
background-color: #
|
|
531
|
-
border-color: #
|
|
532
|
-
color: #
|
|
530
|
+
background-color: #f4f8fb;
|
|
531
|
+
border-color: #c3d5e0;
|
|
532
|
+
color: #c3d5e0;
|
|
533
533
|
}
|
|
534
534
|
.userflowjs-bubble-button--primary {
|
|
535
535
|
background-color: var(--userflow-primary-button-background-color);
|
|
@@ -771,7 +771,7 @@
|
|
|
771
771
|
}
|
|
772
772
|
.userflowjs-bubble-question__multiple-choice-hint--error {
|
|
773
773
|
opacity: 1;
|
|
774
|
-
color: #
|
|
774
|
+
color: #eb1e47;
|
|
775
775
|
}
|
|
776
776
|
.userflowjs-bubble-question__multiple-choice {
|
|
777
777
|
border-radius: calc(var(--userflow-font-size) * 0.25);
|
|
@@ -956,7 +956,7 @@
|
|
|
956
956
|
box-shadow: 0 0 0 1px var(--userflow-main-background-color), 0 0 0 4px var(--userflow-focus-color);
|
|
957
957
|
}
|
|
958
958
|
.userflowjs-bubble-question__error {
|
|
959
|
-
color: #
|
|
959
|
+
color: #eb1e47;
|
|
960
960
|
margin-bottom: 0.5rem;
|
|
961
961
|
}
|
|
962
962
|
.userflowjs-bubble-menu__title {
|
|
@@ -1932,7 +1932,7 @@ a.userflowjs-resource-center-block--clickable:hover {
|
|
|
1932
1932
|
}
|
|
1933
1933
|
.userflowjs-assistant-chat__error {
|
|
1934
1934
|
padding: 0 0.5rem;
|
|
1935
|
-
color: #
|
|
1935
|
+
color: #eb1e47;
|
|
1936
1936
|
}
|
|
1937
1937
|
.userflowjs-assistant-chat__prompt {
|
|
1938
1938
|
padding: 0 1rem 1rem 1rem;
|
|
@@ -2011,11 +2011,11 @@ a.userflowjs-resource-center-block--clickable:hover {
|
|
|
2011
2011
|
transition: stroke-dasharray 300ms;
|
|
2012
2012
|
}
|
|
2013
2013
|
.userflowjs-bubble-alert {
|
|
2014
|
-
border: 1px solid #
|
|
2015
|
-
background-color: #
|
|
2014
|
+
border: 1px solid #f0c000;
|
|
2015
|
+
background-color: #fefdf0;
|
|
2016
2016
|
border-radius: calc(var(--userflow-font-size) * 0.25);
|
|
2017
2017
|
padding: 0.5rem;
|
|
2018
|
-
color: #
|
|
2018
|
+
color: #132b39;
|
|
2019
2019
|
}
|
|
2020
2020
|
.userflowjs-bubble-content .userflowjs-bubble-alert:first-child {
|
|
2021
2021
|
margin-top: 1rem;
|
|
@@ -2029,7 +2029,7 @@ a.userflowjs-resource-center-block--clickable:hover {
|
|
|
2029
2029
|
.userflowjs-bubble-alert__label {
|
|
2030
2030
|
display: inline-block;
|
|
2031
2031
|
font-weight: var(--userflow-font-weight-bold);
|
|
2032
|
-
color: #
|
|
2032
|
+
color: #f0c000;
|
|
2033
2033
|
}
|
|
2034
2034
|
.userflowjs-a11y-only {
|
|
2035
2035
|
position: absolute;
|
package/builder-ui-frame.css
CHANGED
|
@@ -104,126 +104,103 @@
|
|
|
104
104
|
font-size: 0.875rem;
|
|
105
105
|
}
|
|
106
106
|
.btn--default {
|
|
107
|
-
background-color: #
|
|
107
|
+
background-color: #1a57e6;
|
|
108
108
|
color: #fff;
|
|
109
109
|
font-weight: 500;
|
|
110
110
|
box-shadow: 0 4px 8px -4px rgba(54,107,214,0.5);
|
|
111
111
|
}
|
|
112
112
|
.btn--default:hover,
|
|
113
113
|
.btn--default:focus-visible {
|
|
114
|
-
background-color: #
|
|
114
|
+
background-color: #2f69ee;
|
|
115
115
|
}
|
|
116
116
|
.btn--default:focus-visible {
|
|
117
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(
|
|
117
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(47,105,238,0.35);
|
|
118
118
|
}
|
|
119
119
|
.btn--default:active {
|
|
120
|
-
background-color: #
|
|
120
|
+
background-color: #1047c6;
|
|
121
121
|
box-shadow: none;
|
|
122
122
|
}
|
|
123
123
|
.btn--default:disabled,
|
|
124
124
|
.btn--default.disabled {
|
|
125
|
-
background-color: #
|
|
125
|
+
background-color: #c3d5e0;
|
|
126
126
|
color: #fff;
|
|
127
127
|
box-shadow: none;
|
|
128
128
|
}
|
|
129
129
|
.btn--secondary {
|
|
130
130
|
background-color: #fff;
|
|
131
|
-
color: #
|
|
131
|
+
color: #1a57e6;
|
|
132
132
|
font-weight: 500;
|
|
133
|
-
border: 1px solid #
|
|
133
|
+
border: 1px solid #1a57e6;
|
|
134
134
|
box-shadow: 0 2px 4px -2px rgba(54,107,214,0.5);
|
|
135
135
|
}
|
|
136
136
|
.btn--secondary:hover,
|
|
137
137
|
.btn--secondary:focus-visible {
|
|
138
|
-
background-color: #
|
|
138
|
+
background-color: #f7f9ff;
|
|
139
139
|
}
|
|
140
140
|
.btn--secondary:focus-visible {
|
|
141
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(
|
|
141
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(47,105,238,0.35);
|
|
142
142
|
}
|
|
143
143
|
.btn--secondary:active {
|
|
144
|
-
background-color: #
|
|
144
|
+
background-color: #e9f1fb;
|
|
145
145
|
box-shadow: none;
|
|
146
146
|
}
|
|
147
147
|
.btn--secondary:disabled,
|
|
148
148
|
.btn--secondary.disabled {
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
border-color: #c3d5e0;
|
|
150
|
+
background-color: #c3d5e0;
|
|
151
151
|
color: #fff;
|
|
152
152
|
box-shadow: none;
|
|
153
153
|
}
|
|
154
154
|
.btn--secondary-on-dark {
|
|
155
|
-
background-color: #
|
|
155
|
+
background-color: #132b39;
|
|
156
156
|
color: #fff;
|
|
157
157
|
font-weight: 500;
|
|
158
|
-
border: 1px solid #
|
|
158
|
+
border: 1px solid #537388;
|
|
159
159
|
}
|
|
160
160
|
.btn--secondary-on-dark:hover,
|
|
161
161
|
.btn--secondary-on-dark:focus-visible {
|
|
162
|
-
background-color: #
|
|
162
|
+
background-color: #1b3d50;
|
|
163
163
|
}
|
|
164
164
|
.btn--secondary-on-dark:focus-visible {
|
|
165
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(
|
|
165
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(47,105,238,0.35);
|
|
166
166
|
}
|
|
167
167
|
.btn--secondary-on-dark:active {
|
|
168
|
-
background-color: #
|
|
168
|
+
background-color: #0a1a24;
|
|
169
169
|
box-shadow: none;
|
|
170
170
|
}
|
|
171
171
|
.btn--secondary-on-dark:disabled,
|
|
172
172
|
.btn--secondary-on-dark.disabled {
|
|
173
|
-
background-color: #
|
|
174
|
-
border-color: #
|
|
175
|
-
color: #
|
|
173
|
+
background-color: #f4f8fb;
|
|
174
|
+
border-color: #c3d5e0;
|
|
175
|
+
color: #c3d5e0;
|
|
176
176
|
}
|
|
177
177
|
.btn--danger {
|
|
178
|
-
background-color: #
|
|
178
|
+
background-color: #eb1e47;
|
|
179
179
|
color: #fff;
|
|
180
180
|
font-weight: 500;
|
|
181
181
|
}
|
|
182
182
|
.btn--danger:hover,
|
|
183
183
|
.btn--danger:focus-visible {
|
|
184
|
-
background-color: #
|
|
184
|
+
background-color: #fe3960;
|
|
185
185
|
}
|
|
186
186
|
.btn--danger:focus-visible {
|
|
187
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(
|
|
187
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(47,105,238,0.35);
|
|
188
188
|
}
|
|
189
189
|
.btn--danger:active {
|
|
190
|
-
background-color: #
|
|
190
|
+
background-color: #be1335;
|
|
191
191
|
box-shadow: none;
|
|
192
192
|
}
|
|
193
193
|
.btn--danger:disabled,
|
|
194
194
|
.btn--danger.disabled {
|
|
195
|
-
background-color: #
|
|
196
|
-
color: #
|
|
197
|
-
}
|
|
198
|
-
.btn--danger-alt {
|
|
199
|
-
background-color: #fff;
|
|
200
|
-
color: #e4455f;
|
|
201
|
-
font-weight: 500;
|
|
202
|
-
border: 1px solid #e4455f;
|
|
203
|
-
}
|
|
204
|
-
.btn--danger-alt:hover,
|
|
205
|
-
.btn--danger-alt:focus-visible {
|
|
206
|
-
background-color: #fff6f7;
|
|
207
|
-
}
|
|
208
|
-
.btn--danger-alt:focus-visible {
|
|
209
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(84,136,240,0.35);
|
|
210
|
-
}
|
|
211
|
-
.btn--danger-alt:active {
|
|
212
|
-
background-color: #fad9df;
|
|
213
|
-
box-shadow: none;
|
|
214
|
-
}
|
|
215
|
-
.btn--danger-alt:disabled,
|
|
216
|
-
.btn--danger-alt.disabled {
|
|
217
|
-
background-color: #f5f8fa;
|
|
218
|
-
border-color: #cfdce6;
|
|
219
|
-
color: #cfdce6;
|
|
195
|
+
background-color: #c3d5e0;
|
|
196
|
+
color: #f4f8fb;
|
|
220
197
|
}
|
|
221
198
|
.btn--plain,
|
|
222
199
|
.btn--plain-on-dark,
|
|
223
200
|
.btn--plain-blue,
|
|
224
201
|
.btn--plain-danger,
|
|
225
202
|
.btn--plain-danger-alt {
|
|
226
|
-
color: #
|
|
203
|
+
color: #132b39;
|
|
227
204
|
background: transparent;
|
|
228
205
|
border-radius: 0.25rem;
|
|
229
206
|
padding: 0 0.25rem !important;
|
|
@@ -243,7 +220,7 @@
|
|
|
243
220
|
.btn--plain-blue:not(.btn--round):not(.btn--square):focus-visible,
|
|
244
221
|
.btn--plain-danger:not(.btn--round):not(.btn--square):focus-visible,
|
|
245
222
|
.btn--plain-danger-alt:not(.btn--round):not(.btn--square):focus-visible {
|
|
246
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(
|
|
223
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(47,105,238,0.35);
|
|
247
224
|
}
|
|
248
225
|
.btn--plain.btn--round:focus-visible.btn--focus-inset,
|
|
249
226
|
.btn--plain-on-dark.btn--round:focus-visible.btn--focus-inset,
|
|
@@ -255,7 +232,7 @@
|
|
|
255
232
|
.btn--plain-blue.btn--square:focus-visible.btn--focus-inset,
|
|
256
233
|
.btn--plain-danger.btn--square:focus-visible.btn--focus-inset,
|
|
257
234
|
.btn--plain-danger-alt.btn--square:focus-visible.btn--focus-inset {
|
|
258
|
-
box-shadow: inset 0 0 0 3px rgba(
|
|
235
|
+
box-shadow: inset 0 0 0 3px rgba(47,105,238,0.35);
|
|
259
236
|
}
|
|
260
237
|
.btn--plain.btn--round:focus-visible:not(.btn--focus-inset),
|
|
261
238
|
.btn--plain-on-dark.btn--round:focus-visible:not(.btn--focus-inset),
|
|
@@ -267,7 +244,7 @@
|
|
|
267
244
|
.btn--plain-blue.btn--square:focus-visible:not(.btn--focus-inset),
|
|
268
245
|
.btn--plain-danger.btn--square:focus-visible:not(.btn--focus-inset),
|
|
269
246
|
.btn--plain-danger-alt.btn--square:focus-visible:not(.btn--focus-inset) {
|
|
270
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(
|
|
247
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(47,105,238,0.35);
|
|
271
248
|
}
|
|
272
249
|
.btn--plain:hover:not(:disabled),
|
|
273
250
|
.btn--plain-on-dark:hover:not(:disabled),
|
|
@@ -279,14 +256,14 @@
|
|
|
279
256
|
.btn--plain-blue:focus-visible,
|
|
280
257
|
.btn--plain-danger:focus-visible,
|
|
281
258
|
.btn--plain-danger-alt:focus-visible {
|
|
282
|
-
background-color: rgba(
|
|
259
|
+
background-color: rgba(26,87,230,0.1);
|
|
283
260
|
}
|
|
284
261
|
.btn--plain.btn--popover-open,
|
|
285
262
|
.btn--plain-on-dark.btn--popover-open,
|
|
286
263
|
.btn--plain-blue.btn--popover-open,
|
|
287
264
|
.btn--plain-danger.btn--popover-open,
|
|
288
265
|
.btn--plain-danger-alt.btn--popover-open {
|
|
289
|
-
background-color: rgba(
|
|
266
|
+
background-color: rgba(26,87,230,0.1) !important;
|
|
290
267
|
}
|
|
291
268
|
.btn--plain:disabled,
|
|
292
269
|
.btn--plain-on-dark:disabled,
|
|
@@ -298,105 +275,57 @@
|
|
|
298
275
|
.btn--plain-blue.disabled,
|
|
299
276
|
.btn--plain-danger.disabled,
|
|
300
277
|
.btn--plain-danger-alt.disabled {
|
|
301
|
-
color: #
|
|
278
|
+
color: #c3d5e0;
|
|
302
279
|
}
|
|
303
280
|
.btn--plain-on-dark {
|
|
304
281
|
color: #fff;
|
|
305
282
|
}
|
|
306
283
|
.btn--plain-on-dark:hover:not(:disabled),
|
|
307
284
|
.btn--plain-on-dark:focus-visible {
|
|
308
|
-
background-color: rgba(
|
|
285
|
+
background-color: rgba(209,224,245,0.1);
|
|
309
286
|
}
|
|
310
287
|
.btn--plain-blue {
|
|
311
|
-
color: #
|
|
288
|
+
color: #1a57e6;
|
|
312
289
|
font-weight: 500;
|
|
313
290
|
}
|
|
314
291
|
.btn--plain-blue:hover:not(:disabled),
|
|
315
292
|
.btn--plain-blue:focus-visible {
|
|
316
|
-
color: #
|
|
317
|
-
background-color: rgba(
|
|
293
|
+
color: #1047c6;
|
|
294
|
+
background-color: rgba(26,87,230,0.1);
|
|
318
295
|
}
|
|
319
296
|
.btn--plain-blue:disabled,
|
|
320
297
|
.btn--plain-blue.disabled {
|
|
321
|
-
color: #
|
|
298
|
+
color: #c3d5e0;
|
|
322
299
|
}
|
|
323
300
|
.btn--plain-danger {
|
|
324
|
-
color: #
|
|
301
|
+
color: #eb1e47;
|
|
325
302
|
font-weight: 500;
|
|
326
303
|
}
|
|
327
304
|
.btn--plain-danger:hover:not(:disabled),
|
|
328
305
|
.btn--plain-danger:focus-visible {
|
|
329
|
-
color: #
|
|
330
|
-
background-color: rgba(
|
|
306
|
+
color: #be1335;
|
|
307
|
+
background-color: rgba(235,30,71,0.1);
|
|
331
308
|
}
|
|
332
309
|
.btn--plain-danger:disabled,
|
|
333
310
|
.btn--plain-danger.disabled {
|
|
334
|
-
color: #
|
|
311
|
+
color: #c3d5e0;
|
|
335
312
|
}
|
|
336
313
|
.btn--plain-danger-alt {
|
|
337
|
-
color: #
|
|
314
|
+
color: #132b39;
|
|
338
315
|
}
|
|
339
316
|
.btn--plain-danger-alt:hover:not(:disabled),
|
|
340
317
|
.btn--plain-danger-alt:focus-visible {
|
|
341
|
-
color: #
|
|
342
|
-
background-color: rgba(
|
|
318
|
+
color: #be1335;
|
|
319
|
+
background-color: rgba(235,30,71,0.1);
|
|
343
320
|
}
|
|
344
321
|
.btn--plain-danger-alt:disabled,
|
|
345
322
|
.btn--plain-danger-alt.disabled {
|
|
346
|
-
color: #
|
|
323
|
+
color: #c3d5e0;
|
|
347
324
|
}
|
|
348
325
|
.btn--plain--side-padding {
|
|
349
326
|
padding-left: 0.5rem !important;
|
|
350
327
|
padding-right: 0.5rem !important;
|
|
351
328
|
}
|
|
352
|
-
.btn--site-primary {
|
|
353
|
-
background: linear-gradient(45deg, #00e673 0%, #00e699 100%);
|
|
354
|
-
border-radius: 0.375em !important;
|
|
355
|
-
color: #fff;
|
|
356
|
-
font-weight: bold;
|
|
357
|
-
min-width: 200px;
|
|
358
|
-
}
|
|
359
|
-
.btn--site-primary:not(.btn--lg) {
|
|
360
|
-
font-size: 1.125rem;
|
|
361
|
-
}
|
|
362
|
-
.btn--site-primary:hover,
|
|
363
|
-
.btn--site-primary:focus-visible {
|
|
364
|
-
background: linear-gradient(45deg, #3bed94 0%, #2de688 100%);
|
|
365
|
-
}
|
|
366
|
-
.btn--site-primary:focus-visible {
|
|
367
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(84,136,240,0.35);
|
|
368
|
-
}
|
|
369
|
-
.btn--site-primary:active {
|
|
370
|
-
background: linear-gradient(45deg, #2de688 0%, #1fdb7d 100%);
|
|
371
|
-
}
|
|
372
|
-
.btn--site-primary:disabled,
|
|
373
|
-
.btn--site-primary.disabled {
|
|
374
|
-
background: #cfdce6;
|
|
375
|
-
color: #f5f8fa;
|
|
376
|
-
}
|
|
377
|
-
.btn--site-default {
|
|
378
|
-
background-color: #0f334d;
|
|
379
|
-
border-radius: 0.375em !important;
|
|
380
|
-
color: #fff;
|
|
381
|
-
font-weight: bold;
|
|
382
|
-
font-size: 1.125rem;
|
|
383
|
-
min-width: 200px;
|
|
384
|
-
}
|
|
385
|
-
.btn--site-default:hover,
|
|
386
|
-
.btn--site-default:focus-visible {
|
|
387
|
-
background-color: #173c57;
|
|
388
|
-
}
|
|
389
|
-
.btn--site-default:focus-visible {
|
|
390
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(84,136,240,0.35);
|
|
391
|
-
}
|
|
392
|
-
.btn--site-default:active {
|
|
393
|
-
background-color: #062840;
|
|
394
|
-
}
|
|
395
|
-
.btn--site-default:disabled,
|
|
396
|
-
.btn--site-default.disabled {
|
|
397
|
-
background-color: #cfdce6;
|
|
398
|
-
color: #f5f8fa;
|
|
399
|
-
}
|
|
400
329
|
.btn--round {
|
|
401
330
|
border-radius: 50%;
|
|
402
331
|
}
|
|
@@ -426,7 +355,7 @@ input[type="radio"] {
|
|
|
426
355
|
background-color: #fff;
|
|
427
356
|
width: 1rem;
|
|
428
357
|
height: 1rem;
|
|
429
|
-
border: 1px solid #
|
|
358
|
+
border: 1px solid #c3d5e0;
|
|
430
359
|
vertical-align: text-bottom;
|
|
431
360
|
margin: 0.25rem 0;
|
|
432
361
|
position: relative;
|
|
@@ -438,18 +367,18 @@ input[type="radio"]:focus {
|
|
|
438
367
|
}
|
|
439
368
|
input[type="checkbox"]:focus-visible:not(:active),
|
|
440
369
|
input[type="radio"]:focus-visible:not(:active) {
|
|
441
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(
|
|
370
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(47,105,238,0.35);
|
|
442
371
|
}
|
|
443
372
|
input[type="checkbox"]:active:not(:checked):not(:disabled),
|
|
444
373
|
input[type="radio"]:active:not(:checked):not(:disabled) {
|
|
445
|
-
background-color: #
|
|
374
|
+
background-color: #f4f8fb;
|
|
446
375
|
}
|
|
447
376
|
input[type="checkbox"]:checked:not(:disabled),
|
|
448
377
|
input[type="radio"]:checked:not(:disabled),
|
|
449
378
|
input[type="checkbox"][type="checkbox"]:indeterminate:not(:disabled),
|
|
450
379
|
input[type="radio"][type="checkbox"]:indeterminate:not(:disabled) {
|
|
451
|
-
background-color: #
|
|
452
|
-
border-color: #
|
|
380
|
+
background-color: #1a57e6;
|
|
381
|
+
border-color: #1a57e6;
|
|
453
382
|
}
|
|
454
383
|
input[type="checkbox"]:checked:after,
|
|
455
384
|
input[type="radio"]:checked:after,
|
|
@@ -466,34 +395,34 @@ input[type="radio"][type="checkbox"]:indeterminate:after {
|
|
|
466
395
|
}
|
|
467
396
|
input[type="checkbox"]:active:checked,
|
|
468
397
|
input[type="radio"]:active:checked {
|
|
469
|
-
background-color: #
|
|
398
|
+
background-color: #1a57e6;
|
|
470
399
|
}
|
|
471
400
|
input[type="checkbox"]:disabled:not(:checked),
|
|
472
401
|
input[type="radio"]:disabled:not(:checked) {
|
|
473
|
-
background-color: #
|
|
402
|
+
background-color: #f4f8fb;
|
|
474
403
|
}
|
|
475
404
|
input[type="checkbox"]:disabled:checked,
|
|
476
405
|
input[type="radio"]:disabled:checked {
|
|
477
|
-
background-color: #
|
|
478
|
-
border-color: #
|
|
406
|
+
background-color: #c3d5e0;
|
|
407
|
+
border-color: #c3d5e0;
|
|
479
408
|
}
|
|
480
409
|
input[type="checkbox"].check--dark,
|
|
481
410
|
input[type="radio"].check--dark {
|
|
482
|
-
background-color: #
|
|
483
|
-
border-color: #
|
|
411
|
+
background-color: #132b39;
|
|
412
|
+
border-color: #537388;
|
|
484
413
|
}
|
|
485
414
|
input[type="checkbox"].check--dark:active:not(:checked):not(:disabled),
|
|
486
415
|
input[type="radio"].check--dark:active:not(:checked):not(:disabled) {
|
|
487
|
-
background-color: #
|
|
416
|
+
background-color: #0a1a24;
|
|
488
417
|
}
|
|
489
418
|
input[type="checkbox"].check--dark:disabled:not(:checked),
|
|
490
419
|
input[type="radio"].check--dark:disabled:not(:checked) {
|
|
491
|
-
background-color: #
|
|
420
|
+
background-color: #1b3d50;
|
|
492
421
|
}
|
|
493
422
|
input[type="checkbox"].check--dark:disabled:checked,
|
|
494
423
|
input[type="radio"].check--dark:disabled:checked {
|
|
495
|
-
background-color: #
|
|
496
|
-
border-color: #
|
|
424
|
+
background-color: #537388;
|
|
425
|
+
border-color: #537388;
|
|
497
426
|
}
|
|
498
427
|
input[type="checkbox"] {
|
|
499
428
|
border-radius: 0.1875rem;
|
|
@@ -524,12 +453,12 @@ input[type="radio"]:checked:after {
|
|
|
524
453
|
margin-right: 0.5rem;
|
|
525
454
|
}
|
|
526
455
|
.labeled-check input:disabled ~ div {
|
|
527
|
-
color: #
|
|
456
|
+
color: #537388;
|
|
528
457
|
}
|
|
529
458
|
.labeled-check .labeled-check__tip {
|
|
530
459
|
font-size: 0.875rem;
|
|
531
460
|
line-height: 1.5rem;
|
|
532
|
-
color: #
|
|
461
|
+
color: #537388;
|
|
533
462
|
}
|
|
534
463
|
.popover {
|
|
535
464
|
position: absolute;
|
|
@@ -540,10 +469,10 @@ input[type="radio"]:checked:after {
|
|
|
540
469
|
box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25), 0 1px 4px 0 rgba(15,51,77,0.1);
|
|
541
470
|
border-radius: 0.5rem;
|
|
542
471
|
background-color: #fff;
|
|
543
|
-
border-color: #
|
|
472
|
+
border-color: #2f69ee;
|
|
544
473
|
}
|
|
545
474
|
.popover .popover__notch-border {
|
|
546
|
-
fill: #
|
|
475
|
+
fill: #2f69ee;
|
|
547
476
|
}
|
|
548
477
|
.popover .popover__notch-fill {
|
|
549
478
|
fill: #fff;
|
|
@@ -613,10 +542,10 @@ input[type="radio"]:checked:after {
|
|
|
613
542
|
height: 3.5rem;
|
|
614
543
|
}
|
|
615
544
|
.progress-spinner__bg {
|
|
616
|
-
stroke: rgba(
|
|
545
|
+
stroke: rgba(195,213,224,0.25);
|
|
617
546
|
}
|
|
618
547
|
.progress-spinner__fill {
|
|
619
|
-
stroke: #
|
|
548
|
+
stroke: #1a57e6;
|
|
620
549
|
transition: stroke-dasharray 300ms;
|
|
621
550
|
}
|
|
622
551
|
.progress-spinner--indeterminate {
|
|
@@ -682,17 +611,17 @@ input[type="radio"]:checked:after {
|
|
|
682
611
|
}
|
|
683
612
|
}
|
|
684
613
|
.tooltipped__popover {
|
|
685
|
-
background-color: #
|
|
686
|
-
border-color: #
|
|
614
|
+
background-color: #132b39;
|
|
615
|
+
border-color: #132b39;
|
|
687
616
|
pointer-events: none;
|
|
688
617
|
border: 0;
|
|
689
618
|
box-shadow: none;
|
|
690
619
|
}
|
|
691
620
|
.tooltipped__popover .popover__notch-border {
|
|
692
|
-
fill: #
|
|
621
|
+
fill: #132b39;
|
|
693
622
|
}
|
|
694
623
|
.tooltipped__popover .popover__notch-fill {
|
|
695
|
-
fill: #
|
|
624
|
+
fill: #132b39;
|
|
696
625
|
}
|
|
697
626
|
.tooltipped__popover .popover__body {
|
|
698
627
|
padding: 0.75rem;
|
|
@@ -707,7 +636,7 @@ input[type="radio"]:checked:after {
|
|
|
707
636
|
font-weight: 600;
|
|
708
637
|
}
|
|
709
638
|
.tooltipped__popover .popover__body .text-secondary {
|
|
710
|
-
color:
|
|
639
|
+
color: $gray-300 !important;
|
|
711
640
|
}
|
|
712
641
|
.tooltipped__popover .popover__body code {
|
|
713
642
|
background-color: transparent;
|
|
@@ -715,7 +644,7 @@ input[type="radio"]:checked:after {
|
|
|
715
644
|
font-size: 0.875rem;
|
|
716
645
|
}
|
|
717
646
|
body {
|
|
718
|
-
background: #
|
|
647
|
+
background: #132b39;
|
|
719
648
|
color: #fff;
|
|
720
649
|
}
|
|
721
650
|
.root {
|
|
@@ -771,7 +700,7 @@ body {
|
|
|
771
700
|
.label {
|
|
772
701
|
font-size: 0.75rem;
|
|
773
702
|
font-weight: 500;
|
|
774
|
-
color: #
|
|
703
|
+
color: #c3d5e0;
|
|
775
704
|
line-height: 1rem;
|
|
776
705
|
}
|
|
777
706
|
.status {
|
|
@@ -779,11 +708,11 @@ body {
|
|
|
779
708
|
}
|
|
780
709
|
.error {
|
|
781
710
|
font-weight: 500;
|
|
782
|
-
color: #
|
|
711
|
+
color: #eb1e47;
|
|
783
712
|
}
|
|
784
713
|
.success {
|
|
785
714
|
font-weight: 500;
|
|
786
|
-
color: #
|
|
715
|
+
color: #0ac762;
|
|
787
716
|
}
|
|
788
717
|
.buttons {
|
|
789
718
|
display: flex;
|
package/builder-ui-host.css
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
bottom: 50vh;
|
|
38
38
|
left: 50vw;
|
|
39
39
|
border-radius: 2px;
|
|
40
|
-
box-shadow: 0 0 4px 0 rgba(
|
|
40
|
+
box-shadow: 0 0 4px 0 rgba(26,87,230,0.5), 0 0 0 1000vw rgba(223,234,241,0.6);
|
|
41
41
|
pointer-events: none;
|
|
42
42
|
}
|
|
43
43
|
.userflowjs-element-selection-box:not(.userflowjs-element-selection-box--no-transition) {
|
package/flow-host.css
CHANGED
|
@@ -125,7 +125,7 @@ _:future,
|
|
|
125
125
|
overflow: hidden;
|
|
126
126
|
}
|
|
127
127
|
.userflowjs-bubble__avatar--minimizable:hover {
|
|
128
|
-
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(
|
|
128
|
+
box-shadow: 0 0 0 1px #fff, 0 0 0 4px rgba(47,105,238,0.35);
|
|
129
129
|
}
|
|
130
130
|
.userflowjs-bubble__avatar--speaking {
|
|
131
131
|
animation: userflowjs-avatar-pulsate 900ms ease-in-out infinite;
|
|
@@ -441,94 +441,94 @@ _:future,
|
|
|
441
441
|
}
|
|
442
442
|
@-moz-keyframes userflowjs-avatar-pulsate {
|
|
443
443
|
0% {
|
|
444
|
-
box-shadow: 0 0 0 1px rgba(
|
|
444
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
445
445
|
}
|
|
446
446
|
16% {
|
|
447
|
-
box-shadow: 0 0 0 4px rgba(
|
|
447
|
+
box-shadow: 0 0 0 4px rgba(26,87,230,0.2);
|
|
448
448
|
}
|
|
449
449
|
33% {
|
|
450
|
-
box-shadow: 0 0 0 3px rgba(
|
|
450
|
+
box-shadow: 0 0 0 3px rgba(26,87,230,0.2);
|
|
451
451
|
}
|
|
452
452
|
50% {
|
|
453
|
-
box-shadow: 0 0 0 5px rgba(
|
|
453
|
+
box-shadow: 0 0 0 5px rgba(26,87,230,0.2);
|
|
454
454
|
}
|
|
455
455
|
66% {
|
|
456
|
-
box-shadow: 0 0 0 1px rgba(
|
|
456
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
457
457
|
}
|
|
458
458
|
83% {
|
|
459
|
-
box-shadow: 0 0 0 2px rgba(
|
|
459
|
+
box-shadow: 0 0 0 2px rgba(26,87,230,0.2);
|
|
460
460
|
}
|
|
461
461
|
100% {
|
|
462
|
-
box-shadow: 0 0 0 1px rgba(
|
|
462
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
463
463
|
}
|
|
464
464
|
}
|
|
465
465
|
@-webkit-keyframes userflowjs-avatar-pulsate {
|
|
466
466
|
0% {
|
|
467
|
-
box-shadow: 0 0 0 1px rgba(
|
|
467
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
468
468
|
}
|
|
469
469
|
16% {
|
|
470
|
-
box-shadow: 0 0 0 4px rgba(
|
|
470
|
+
box-shadow: 0 0 0 4px rgba(26,87,230,0.2);
|
|
471
471
|
}
|
|
472
472
|
33% {
|
|
473
|
-
box-shadow: 0 0 0 3px rgba(
|
|
473
|
+
box-shadow: 0 0 0 3px rgba(26,87,230,0.2);
|
|
474
474
|
}
|
|
475
475
|
50% {
|
|
476
|
-
box-shadow: 0 0 0 5px rgba(
|
|
476
|
+
box-shadow: 0 0 0 5px rgba(26,87,230,0.2);
|
|
477
477
|
}
|
|
478
478
|
66% {
|
|
479
|
-
box-shadow: 0 0 0 1px rgba(
|
|
479
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
480
480
|
}
|
|
481
481
|
83% {
|
|
482
|
-
box-shadow: 0 0 0 2px rgba(
|
|
482
|
+
box-shadow: 0 0 0 2px rgba(26,87,230,0.2);
|
|
483
483
|
}
|
|
484
484
|
100% {
|
|
485
|
-
box-shadow: 0 0 0 1px rgba(
|
|
485
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
486
486
|
}
|
|
487
487
|
}
|
|
488
488
|
@-o-keyframes userflowjs-avatar-pulsate {
|
|
489
489
|
0% {
|
|
490
|
-
box-shadow: 0 0 0 1px rgba(
|
|
490
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
491
491
|
}
|
|
492
492
|
16% {
|
|
493
|
-
box-shadow: 0 0 0 4px rgba(
|
|
493
|
+
box-shadow: 0 0 0 4px rgba(26,87,230,0.2);
|
|
494
494
|
}
|
|
495
495
|
33% {
|
|
496
|
-
box-shadow: 0 0 0 3px rgba(
|
|
496
|
+
box-shadow: 0 0 0 3px rgba(26,87,230,0.2);
|
|
497
497
|
}
|
|
498
498
|
50% {
|
|
499
|
-
box-shadow: 0 0 0 5px rgba(
|
|
499
|
+
box-shadow: 0 0 0 5px rgba(26,87,230,0.2);
|
|
500
500
|
}
|
|
501
501
|
66% {
|
|
502
|
-
box-shadow: 0 0 0 1px rgba(
|
|
502
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
503
503
|
}
|
|
504
504
|
83% {
|
|
505
|
-
box-shadow: 0 0 0 2px rgba(
|
|
505
|
+
box-shadow: 0 0 0 2px rgba(26,87,230,0.2);
|
|
506
506
|
}
|
|
507
507
|
100% {
|
|
508
|
-
box-shadow: 0 0 0 1px rgba(
|
|
508
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
509
509
|
}
|
|
510
510
|
}
|
|
511
511
|
@keyframes userflowjs-avatar-pulsate {
|
|
512
512
|
0% {
|
|
513
|
-
box-shadow: 0 0 0 1px rgba(
|
|
513
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
514
514
|
}
|
|
515
515
|
16% {
|
|
516
|
-
box-shadow: 0 0 0 4px rgba(
|
|
516
|
+
box-shadow: 0 0 0 4px rgba(26,87,230,0.2);
|
|
517
517
|
}
|
|
518
518
|
33% {
|
|
519
|
-
box-shadow: 0 0 0 3px rgba(
|
|
519
|
+
box-shadow: 0 0 0 3px rgba(26,87,230,0.2);
|
|
520
520
|
}
|
|
521
521
|
50% {
|
|
522
|
-
box-shadow: 0 0 0 5px rgba(
|
|
522
|
+
box-shadow: 0 0 0 5px rgba(26,87,230,0.2);
|
|
523
523
|
}
|
|
524
524
|
66% {
|
|
525
|
-
box-shadow: 0 0 0 1px rgba(
|
|
525
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
526
526
|
}
|
|
527
527
|
83% {
|
|
528
|
-
box-shadow: 0 0 0 2px rgba(
|
|
528
|
+
box-shadow: 0 0 0 2px rgba(26,87,230,0.2);
|
|
529
529
|
}
|
|
530
530
|
100% {
|
|
531
|
-
box-shadow: 0 0 0 1px rgba(
|
|
531
|
+
box-shadow: 0 0 0 1px rgba(26,87,230,0.2);
|
|
532
532
|
}
|
|
533
533
|
}
|
|
534
534
|
@-moz-keyframes userflowjs-beacon-ring-transform-effect {
|
package/hash.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
fcf42eabbe2931592462780638cc38c3d775ae9a
|
package/iframe-reset.css
CHANGED
package/logomark.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./vendor.react.js";import{r as t}from"./vendor.react-dom.js";import{g as s,a as r,c as a}from"./stylesheets.js";import{a as
|
|
1
|
+
import{r as e}from"./vendor.react.js";import{r as t}from"./vendor.react-dom.js";import{g as s,a as r,c as a}from"./stylesheets.js";import{a as n,i as o}from"./client-context.js";var l=new URL("iframe-reset.css",import.meta.url).href;const d=({testId:t,className:n,style:o,elRef:d,stylesheet:m,theme:u,onStylesheetsLoad:f,noIframe:h,ariaHidden:y,children:w})=>{h=h||!1;const[p,E]=e.useState(null),v=u&&"userflowjs-theme-root",R=u&&s(u),{loaded:L}=r(p,h?null:l),{loaded:N}=r(p,m,u),{loaded:g}=a(p,u),I=u?.cssVersion?`https://cdn.userflow.com/themes/${u.id}/stylesheets/${u.cssVersion}/custom.css`:null,{loaded:C}=r(p,I,u);return e.useEffect((()=>{f&&L&&N&&g&&C&&f(!0)}),[f,L,N,g,C]),h?e.createElement(c,{testId:t,className:n,style:o,rootClassName:v,rootStyle:R,elRef:d,onWinReady:E,ariaHidden:y},w):e.createElement(i,{testId:t,className:n,style:o,rootClassName:v,rootStyle:R,elRef:d,onWinReady:E,ariaHidden:y},w)},i=({testId:s,className:r,style:a,rootClassName:l,rootStyle:d,elRef:i,onWinReady:c,ariaHidden:m,children:u})=>{const f=n(),[h,y]=e.useState(null);e.useLayoutEffect((()=>{if(!h)return;const{documentElement:e,body:t}=h.document;e.dir=o.dir();const s=l&&l.split(" ");if(s&&t.classList.add(...s),d)for(const r in d)t.style.setProperty(r,d[r]);return()=>{s&&t.classList.remove(...s)}}),[h,l,d]);const w=f?.logrocketAppId,p=e.useRef(!1);e.useEffect((()=>{if(!h||!w||p.current)return;if(!window.LogRocket?.tabID)return;p.current=!0;const e=h.document.createElement("script");e.crossOrigin="anonymous",e.src="https://cdn.lr-in-prod.com/LogRocket.min.js",e.onload=()=>{h.LogRocket.init(w,{mergeIframes:!0})},h.document.head.appendChild(e)}),[h,w]);return e.createElement("iframe",{ref:e=>{if(!e)return;i&&(i.current=e);const t=e.contentWindow;if(!t||t===h)return;const s=e=>{y(e),c(e)};"complete"===t.document.readyState?s(t):t.addEventListener("load",(()=>{s(t)}))},"data-testid":s,role:"presentation","aria-hidden":m?"true":void 0,tabIndex:m?-1:void 0,className:r,style:a,frameBorder:0,bis_size:"{}"},h&&t.createPortal(u,h.document.body))},c=({testId:t,className:s,style:r,rootClassName:a,rootStyle:n,elRef:l,onWinReady:d,ariaHidden:i,children:c})=>(e.useEffect((()=>{d(window)}),[d]),e.createElement("div",{ref:l,"data-testid":t,"aria-hidden":i?"true":void 0,tabIndex:i?-1:void 0,dir:o.dir(),className:s,style:r},e.createElement("div",{className:a,style:n},c)));function m(t){e.useLayoutEffect((()=>{let e;const s=()=>{window.cancelAnimationFrame(e),e=window.requestAnimationFrame(t)};return window.addEventListener("resize",s),()=>{window.removeEventListener("resize",s),window.cancelAnimationFrame(e)}}),[t])}const u=t=>e.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 100 100"},t),e.createElement("path",{fill:"#23d777",d:"m61.539 30.37-1.652 9.37c-1.762 10-11.293 18-21.244 18h-8.159c-10.011 0-16.628-8.09-14.877-18l3.314-18.77h9.42l-3.313 18.77a6.992 6.992 0 0 0 1.405 6.088 7.006 7.006 0 0 0 5.713 2.542h8.16a10.77 10.77 0 0 0 6.58-2.553 10.748 10.748 0 0 0 3.58-6.077l2.483-14.07a5.849 5.849 0 0 1 5.537-4.7h17.43l1.08-6.15C78.448 6.63 72.992 0 64.783 0H24.738C16.548 0 8.72 6.63 7.288 14.82l-7.008 40C-1.16 63 4.285 69.63 12.494 69.63h40.045c8.199 0 16.018-6.63 17.45-14.81l4.314-24.45H61.54Z"}),e.createElement("path",{fill:"#1a57e6",d:"M87.668 30.37h-4.004l-6.097 34.57c-1.442 8.18-9.26 14.82-17.45 14.82h-36.09l-.951 5.43C21.624 93.37 27.08 100 35.289 100h40.045c8.19 0 16.018-6.63 17.45-14.81l7.008-40c1.531-8.18-3.935-14.82-12.124-14.82Z"}));export{d as F,u as S,m as u};
|
package/notifications-host.css
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
margin-top: 1rem;
|
|
19
19
|
padding: 1rem;
|
|
20
20
|
border-radius: 0.25rem;
|
|
21
|
-
background-color: #
|
|
21
|
+
background-color: #eb1e47;
|
|
22
22
|
color: #fff;
|
|
23
23
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
|
24
24
|
font-size: 14px;
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
cursor: pointer;
|
|
37
37
|
width: 24px;
|
|
38
38
|
height: 24px;
|
|
39
|
-
color: #
|
|
39
|
+
color: #700013;
|
|
40
40
|
display: flex;
|
|
41
41
|
align-items: center;
|
|
42
42
|
justify-content: center;
|
|
43
43
|
}
|
|
44
44
|
.userflowjs-notifications__toast-dismiss:hover {
|
|
45
|
-
color: #
|
|
45
|
+
color: #fdc9d5;
|
|
46
46
|
}
|
|
47
47
|
.userflowjs-notifications__toast-dismiss svg {
|
|
48
48
|
display: block;
|
package/package.json
CHANGED
package/userflow.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as e}from"./vendor.phoenix.js";import{v as t}from"./vendor.uuid.js";let s;const i={},n=function(e,t){if(!t)return e();if(void 0===s){const e=document.createElement("link").relList;s=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in i)return;i[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":s,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};class o extends Error{constructor(e,t,s){super(e),Object.setPrototypeOf(this,o.prototype),this.name="UserflowError",this.code=t,this.humanMessage=s}}class r{constructor(e){this.type=e,this.testState={}}formatKey(e){return`userflow:${e}`}getItem(e){return e=this.formatKey(e),"undefined"==typeof window?null:window[this.type].getItem(e)}setItem(e,t){e=this.formatKey(e),"undefined"!=typeof window&&window[this.type].setItem(e,t)}removeItem(e){if(e=this.formatKey(e),"undefined"!=typeof window)return window[this.type].removeItem(e)}clear(){if("undefined"!=typeof window)return window[this.type].clear()}}const a=new r("localStorage"),c=new r("sessionStorage");function l(e){window.location.href=e}function d(){return window.location.href}var h,u,E;function f(e,t,{toOrigin:s}={}){e.postMessage(t,s||"*")}function T(e,{fromWindow:t,fromOrigin:s}={}){const i=i=>{if(!i.isTrusted)return;if(t&&t!==i.source)return;if(s&&i.origin!==s)return;const o=i.data;o&&"object"==typeof o&&"string"==typeof o.kind&&o.kind.startsWith("userflow:")&&!0===e(o)&&n()};window.addEventListener("message",i);const n=()=>window.removeEventListener("message",i);return n}(h||(h={})).INPUT="INPUT",(E=u||(u={})).AUTO="AUTO",E.MANUAL="MANUAL";const w=new Set;let S=!1;function g(e){return function(){if(S)return;S=!0;const{history:e}=window,t=t=>{const s=e[t];e[t]=(...t)=>{s.apply(e,t),I()}};t("pushState"),t("replaceState"),window.addEventListener("popstate",(()=>{I()}))}(),w.add(e),()=>{p(e)}}function p(e){w.delete(e)}function I(){w.forEach((e=>e()))}class C{destroy(){this.unregisterOnMessage&&this.unregisterOnMessage()}postBuilderMessage(e){f(window.opener,e,{toOrigin:"https://userflow.com"})}onBuilderMessage(e){return this.unregisterOnMessage=T(e,{fromOrigin:"https://userflow.com"}),!1}async captureScreenshot(e,t,s,i){f(window,{kind:"userflow:crxScreenshot",x:e,y:t,width:s,height:i,devicePixelRatio:window.devicePixelRatio});var n;return(await(n=e=>"userflow:crxScreenshotResult"===e.kind?e:null,new Promise((e=>{T((t=>{const s=n(t);return!!s&&(e(s),!0)}))})))).imageDataUrl}}var m,k,A,U,L,R,y,O,v,N,_,b,D,F,M,B,P,x,H,G,W,$,V,j,K,z,Y,J,X,Z,Q,q,ee,te,se,ie,ne,oe,re,ae,ce,le,de,he,ue,Ee,fe,Te,we,Se,ge,pe,Ie,Ce,me,ke,Ae,Ue,Le,Re,ye,Oe,ve,Ne,_e,be,De,Fe,Me,Be,Pe,xe,He,Ge,We,$e;(k=m||(m={})).ACTION="ACTION",k.LAUNCHER_DEACTIVATED="LAUNCHER_DEACTIVATED",k.REPLACED="REPLACED",k.SNOOZED="SNOOZED",k.TOOLTIP_TARGET_MISSING="TOOLTIP_TARGET_MISSING",k.USERFLOWJS="USERFLOWJS",k.USER_CLOSED="USER_CLOSED",(U=A||(A={})).SECOND="SECOND",U.MINUTE="MINUTE",U.HOUR="HOUR",U.DAY="DAY",(R=L||(L={})).ACTION="ACTION",R.DRAFT="DRAFT",R.LINK="LINK",R.LAUNCHER_SEEN="LAUNCHER_SEEN",R.RESOURCE_CENTER="RESOURCE_CENTER",R.USERFLOWJS="USERFLOWJS",(O=y||(y={})).LIKE="LIKE",O.DISLIKE="DISLIKE",(N=v||(v={})).STRING="STRING",N.BOOLEAN="BOOLEAN",N.NUMBER="NUMBER",N.DATETIME="DATETIME",N.LIST="LIST",N.RANDOM_AB="RANDOM_AB",N.RANDOM_NUMBER="RANDOM_NUMBER",(b=_||(_={})).FLOW="FLOW",b.CHECKLIST="CHECKLIST",b.LAUNCHER="LAUNCHER",b.RESOURCE_CENTER="RESOURCE_CENTER",(F=D||(D={})).ALWAYS_TRUE="ALWAYS_TRUE",F.ATTRIBUTE="ATTRIBUTE",F.CLAUSE="CLAUSE",F.ELEMENT="ELEMENT",F.FILLED_IN_INPUT="FILLED_IN_INPUT",F.FLOW="FLOW",F.INPUT_VALUE="INPUT_VALUE",F.PAGE="PAGE",F.TIME="TIME",function(e){e.AUTO="AUTO",e.MANUAL="MANUAL"}(M||(M={})),(B||(B={})).INPUT="INPUT",(x=P||(P={})).ABSOLUTE_EQ="ABSOLUTE_EQ",x.ABSOLUTE_GT="ABSOLUTE_GT",x.ABSOLUTE_LT="ABSOLUTE_LT",x.AND="AND",x.BETWEEN="BETWEEN",x.CONTAINS="CONTAINS",x.EMPTY="EMPTY",x.ENDS_WITH="ENDS_WITH",x.EQ="EQ",x.EXCLUDES_ALL="EXCLUDES_ALL",x.EXCLUDES_ANY="EXCLUDES_ANY",x.FALSE="FALSE",x.GT="GT",x.GTE="GTE",x.INCLUDES_ALL="INCLUDES_ALL",x.INCLUDES_ANY="INCLUDES_ANY",x.LT="LT",x.LTE="LTE",x.NE="NE",x.NOT_CONTAINS="NOT_CONTAINS",x.NOT_EMPTY="NOT_EMPTY",x.NOT_REGEX="NOT_REGEX",x.OR="OR",x.REGEX="REGEX",x.RELATIVE_EQ="RELATIVE_EQ",x.RELATIVE_GT="RELATIVE_GT",x.RELATIVE_LT="RELATIVE_LT",x.STARTS_WITH="STARTS_WITH",x.TRUE="TRUE",x.URL="URL",(G=H||(H={})).CLICK="CLICK",G.DISABLED="DISABLED",G.MOUSEDOWN="MOUSEDOWN",G.NOT_CLICK="NOT_CLICK",G.NOT_DISABLED="NOT_DISABLED",G.NOT_PRESENT="NOT_PRESENT",G.PRESENT="PRESENT",($=W||(W={})).ASSET="ASSET",$.CARTOON="CARTOON",$.NONE="NONE",$.URL="URL",(j=V||(V={})).INSIDE="INSIDE",j.OUTSIDE="OUTSIDE",(z=K||(K={})).TOP_LEFT="TOP_LEFT",z.TOP_CENTER="TOP_CENTER",z.TOP_RIGHT="TOP_RIGHT",z.BOTTOM_RIGHT="BOTTOM_RIGHT",z.BOTTOM_CENTER="BOTTOM_CENTER",z.BOTTOM_LEFT="BOTTOM_LEFT",z.CENTER="CENTER",(J=Y||(Y={})).GOOGLE="GOOGLE",J.STANDARD="STANDARD",(Z=X||(X={})).DISMISS_FIRST_MENU_AFTER="DISMISS_FIRST_MENU_AFTER",Z.DISMISS="DISMISS",(q=Q||(Q={})).DISMISS="DISMISS",q.NONE="NONE",(te=ee||(ee={})).DEFAULT="DEFAULT",te.PLAINTEXT="PLAINTEXT",(ie=se||(se={})).CHECKLIST_OVERRIDE="CHECKLIST_OVERRIDE",ie.RESOURCE_CENTER_ONLY="RESOURCE_CENTER_ONLY",ie.NONE="NONE",(oe=ne||(ne={})).BUBBLE="BUBBLE",oe.END="END",oe.ERROR="ERROR",oe.FLAG="FLAG",(ae=re||(re={})).MANUAL="MANUAL",ae.NONE="NONE",ae.SYNTHETIC="SYNTHETIC",(le=ce||(ce={})).BUBBLE="BUBBLE",le.HIDDEN="HIDDEN",le.MODAL="MODAL",le.TOOLTIP="TOOLTIP",(he=de||(de={})).ABOVE="ABOVE",he.BELOW="BELOW",he.LEFT="LEFT",he.RIGHT="RIGHT",(Ee=ue||(ue={})).CLOSE_FLOW="CLOSE_FLOW",Ee.EVAL_JS="EVAL_JS",Ee.GO_TO_STEP="GO_TO_STEP",Ee.NAVIGATE="NAVIGATE",Ee.SET_ATTRIBUTE="SET_ATTRIBUTE",Ee.SNOOZE="SNOOZE",Ee.START_FLOW="START_FLOW",(Te=fe||(fe={})).NEW_TAB="NEW_TAB",Te.SAME_TAB="SAME_TAB",(Se=we||(we={})).SET="SET",Se.SET_ONCE="SET_ONCE",Se.ADD="ADD",Se.SUBTRACT="SUBTRACT",Se.UNSET="UNSET",(pe=ge||(ge={})).MULTILINE_TEXT="MULTILINE_TEXT",pe.MULTIPLE_CHOICE="MULTIPLE_CHOICE",pe.NPS="NPS",pe.SCALE="SCALE",pe.STARS="STARS",pe.TEXT="TEXT",(Ce=Ie||(Ie={})).ACTION="ACTION",Ce.ASSISTANT="ASSISTANT",Ce.CHECKLIST="CHECKLIST",Ce.CONTACT="CONTACT",Ce.FLOWS="FLOWS",Ce.KNOWLEDGE_BASE="KNOWLEDGE_BASE",Ce.MESSAGE="MESSAGE",Ce.SUBPAGE="SUBPAGE",(ke=me||(me={})).CRISP="CRISP",ke.CUSTOM="CUSTOM",ke.FRESHCHAT="FRESHCHAT",ke.HELPSCOUT="HELPSCOUT",ke.HUBSPOT="HUBSPOT",ke.INTERCOM="INTERCOM",ke.ZENDESK="ZENDESK",ke.ZENDESK_MESSENGER="ZENDESK_MESSENGER",(Ue=Ae||(Ae={})).BUTTON="BUTTON",Ue.INPUT="INPUT",(Re=Le||(Le={})).LAUNCHER_CLICK="LAUNCHER_CLICK",Re.LAUNCHER_HOVER="LAUNCHER_HOVER",Re.TARGET_CLICK="TARGET_CLICK",Re.TARGET_HOVER="TARGET_HOVER",Re.LAUNCHER_TARGET_CLICK="LAUNCHER_TARGET_CLICK",Re.LAUNCHER_TARGET_HOVER="LAUNCHER_TARGET_HOVER",(Oe=ye||(ye={})).ACTIVATE="ACTIVATE",Oe.DEACTIVATE="DEACTIVATE",Oe.NEVER="NEVER",(Ne=ve||(ve={})).AUTO="AUTO",Ne.TOP="TOP",Ne.RIGHT="RIGHT",Ne.BOTTOM="BOTTOM",Ne.LEFT="LEFT",(be=_e||(_e={})).START="START",be.CENTER="CENTER",be.END="END",(Fe=De||(De={})).PERCENT="PERCENT",Fe.PX="PX",(Be=Me||(Me={})).BEACON="BEACON",Be.BUTTON="BUTTON",Be.HIDDEN="HIDDEN",Be.ICON="ICON",(xe=Pe||(Pe={})).LAUNCHER="LAUNCHER",xe.TARGET="TARGET",(Ge=He||(He={})).ACTIVE="ACTIVE",Ge.COMPLETED="COMPLETED",Ge.ENDED="ENDED",Ge.NOT_SEEN="NOT_SEEN",($e=We||(We={})).HIGHLIGHT="HIGHLIGHT",$e.MODAL="MODAL",$e.HIGHLIGHT_MODAL="HIGHLIGHT_MODAL";const Ve={customInputs:[],customNavigate:null,urlFilter:null,customScrollIntoView:null,scrollPadding:null,inferenceAttributeNames:["data-for","data-id","data-testid","data-test-id","for","id","name","placeholder","role"],inferenceAttributeFilters:{id:[e=>!e.match(/\d$/)],"data-id":[e=>!e.match(/\d$/)]},inferenceClassNameFilters:[e=>!e.startsWith("css-")],baseZIndex:1234500};function je(e){return Array.isArray(e)||(e=e?[e]:[]),e=e.map((e=>"string"==typeof e?new RegExp(e):e))}function Ke(e,t){return e.every((e=>"function"==typeof e?e(t):!(e instanceof RegExp)||e.test(t)))}function ze(){let e=d();if(Ve.urlFilter){if(e=Ve.urlFilter(e),"string"!=typeof e)throw new o("Userflow.js: URL filter returned non-string value. Please check your userflow.setUrlFilter() implementation.");try{new URL(e)}catch(t){throw new o("Userflow.js: URL filter returned an invalid URL. Please check your userflow.setUrlFilter() implementation.\nReturned URL: "+e+"\nError message: "+t.message)}}return e}const Ye=(localStorage.getItem("debug")||"").split(",").some((e=>"*"===e||e.startsWith("userflow:*"))),Je=Ze("log");let Xe;function Ze(e){return function(t,...s){if(Ye){const i=performance.now(),n=Xe?Math.round(i-Xe):0;Xe=i,console[e](`%cuserflow %c${t} %c+${n}ms`,"color:#4579E4;","","color:#4579E4;",...s)}}}Je.group=Ze("group"),Je.groupCollapsed=Ze("groupCollapsed"),Je.groupEnd=function(){Ye&&console.groupEnd()};const Qe=()=>n((()=>import("./ResourceCenterApp.js").then((function(e){return e.R}))),[new URL("ResourceCenterApp.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("Icons.js",import.meta.url).toString(),new URL("BubbleToolbar.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("vendor.fortawesome.react-fontawesome.js",import.meta.url).toString(),new URL("vendor.fortawesome.fontawesome-svg-core.js",import.meta.url).toString(),new URL("vendor.prop-types.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("logomark.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("DynamicIcon.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("ChecklistUI.js",import.meta.url).toString()]);function qe(e){const t=e.version.checklist.tasks.length;return Math.max(0,t-e.taskCompletions.length)}class et{constructor(e){this.observers=new Set,this._value=e}get value(){return this._value}update(e){if(e!==this._value){this._value=e;for(const e of this.observers)e()}}observe(e){return this.observers.add(e),()=>this.observers.delete(e)}}const tt=["turbo:before-cache","turbo:load","turbo:visit","turbolinks:before-cache","turbolinks:load","turbolinks:visit"],st=import.meta.url;class it{constructor(){this.clientToken=null,this.externalId=null,this.signature=null,this.groupId=null,this.groupSignature=null,this._socketStatus="disconnected",this.socket=null,this.channel=null,this.featureFlags=new Set,this.logrocketAppId=null,this.debounceInactiveDisconnectTimeout=void 0,this.inBatch=!1,this.endBatchTimeout=void 0,this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=0,this.clientClock=1,this.serverClock=1,this.flowSession=null,this.flowSessionClock=0,this.checklistSession=null,this.checklistExpanded=!1,this.checklistExpandPending=!1,this.checklistSessionClock=0,this.resourceCenterSession=null,this.resourceCenterOpen=!1,this.resourceCenterLauncherHidden=!1,this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.notificationIdCounter=0,this.sessionStorageState=null,this.clientContext=null,this.flushUrlChangeTimeout=void 0,this.onFirstIdentifyRun=!1,this.onFirstIdentifyTimeout=void 0,this.firstIdentifyCallback=null,this.ui=null,this.unackedTasks=new Set,this.clientConditions=new Map,this.trackers=new Map,this.conditionWaitTimers=new Map,this.listeners=new Map,this.targetEnv=null,this.idempotencyKeysSeen=new Set,this.testUserIdentified=!1,this.cspIssueReported=!1,this.uiDisabled=!1,this.audio=null,this.audioReady=!1,this.pageTrackingDisabled=!1,this.refCounter=1,this.onBuilderMessage=e=>(this.handleBuilderMessage(e),!1),this.handleBuilderMessage=async e=>{Je(`builder ${e.kind} message received`,e);const t="idempotencyKey"in e&&"string"==typeof e.idempotencyKey?e.idempotencyKey:null;if(t&&this.idempotencyKeysSeen.has(t))return;const s=()=>{t&&this.idempotencyKeysSeen.add(t)};switch(e.kind){case"userflow:selectElement":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:selectElementAck",idempotencyKey:e.idempotencyKey}),void this.setSessionStorageState((t=>({...t,activeApp:"elementSelection",elementSelection:{mode:"select",elementType:e.elementType}})));case"userflow:selectElementCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,elementSelection:null})));case"userflow:startFlowWithToken":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:startFlowWithTokenAck",idempotencyKey:e.idempotencyKey}),c.setItem("previewFlowId",e.flowId),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.onceIdentified((()=>{if(this.startFlowWithToken(e.token),e.isResourceCenter){const t=()=>{const s=this.resourceCenterSession;s&&s.draftMode&&s.flow.id===e.flowId&&(this.openResourceCenter(),this.off("resourceCenterChanged",t))};this.on("resourceCenterChanged",t),t()}}));case"userflow:testTracker":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:testTrackerAck",idempotencyKey:e.idempotencyKey}),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.setSessionStorageState((t=>({...t,activeApp:"trackerTesting",trackerTesting:{trackerName:e.trackerName,token:e.token,events:0}})));case"userflow:testTrackerCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,trackerTesting:null})))}},this.onUrlChange=()=>{this.externalId&&(window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=window.setTimeout((()=>this.flushUrlChange()),50))},this.onUserActivity=()=>this.ensureConnected(),this.remountIfNecessary=()=>{this.ui?.container&&!document.contains(this.ui.container)&&(Je("remounting UI because container was missing"),this.remount())},Je("constructor, build=1003129"),g(this.onUrlChange),this.setTargetEnv(new C),this.checkTestUserAtBoot(),this.toggleUI();for(const e of tt)document.addEventListener(e,this.remountIfNecessary)}get socketStatus(){return this._socketStatus}destroy(){Je("destroy"),this.reset(),p(this.onUrlChange),this.destroyTargetEnv();for(const e of tt)document.removeEventListener(e,this.remountIfNecessary)}setTargetEnv(e){this.destroyTargetEnv(),this.targetEnv=e,e.onBuilderMessage(this.onBuilderMessage)}destroyTargetEnv(){this.targetEnv&&(this.targetEnv.destroy(),this.targetEnv=null)}getTargetEnv(){if(!this.targetEnv)throw new o("Userflow.js: Cannot call getTargetEnv when protocol is not set");return this.targetEnv}setSessionStorageState(e){const t=e(this.getSessionStorageState());c.setItem("userflowClientState",JSON.stringify(t)),this.sessionStorageState=t,this.toggleUI()}getSessionStorageState(){let e=this.sessionStorageState;if(!e){const s=c.getItem("userflowClientState");if(s)try{e=JSON.parse(s)}catch(t){console.error("Userflow.js: Parse ElementSelectionState error:",t)}e||(e={testUser:null,activeApp:null,elementSelection:null,trackerTesting:null})}return e}checkTestUserAtBoot(){const e=this.getSessionStorageState().testUser;e&&(Je("checkTestUserAtBoot identifying test user"),this.identifyTestUser(e))}async identifyTestUser(e){this.setSessionStorageState((t=>({...t,testUser:e}))),this.reset(),this.init(e.clientToken),this.testUserIdentified=!0,this.externalId=e.id;const t=[this.identify(e.id,{name:e.name,email:e.email,signed_up_at:{set_once:(new Date).toISOString(),data_type:"datetime"}},{signature:e.signature})],{group:s}=e;s&&(this.groupId=s.id,t.push(this.group(s.id,{name:s.name},{signature:s.signature}))),await Promise.all(t)}resetTestUser(){this.setSessionStorageState((e=>({...e,testUser:null})))}init(e){if(Je("init",e),!e)throw new o("userflow.init() was called but missing Userflow.js Token");this.clientToken!==e&&(this.testUserIdentified?Je("init() ignoring new token since a test user has been identified"):(this.clientToken&&(Je("init() resetting due to new client token"),this.reset()),this.clientToken=e))}ensureInit(){if(!this.clientToken)throw new o("You must call userflow.init() first")}ensureIdentified(){if(this.ensureInit(),!this.externalId)throw new o("You must call userflow.identify() first");return this.externalId}ensureGroup(){if(this.ensureIdentified(),!this.groupId)throw new o("You must call userflow.group() first");return this.groupId}ensureConnected(){if(!this.clientToken||!this.externalId)return;if(this.debounceInactiveDisconnect(),this.socket)return;this._socketStatus="connecting",Je("connecting to socket");let t="e.userflow.com";"js.getuserflow.com"===new URL(st).hostname&&"e.userflow.com"===t&&(t="e.getuserflow.com");const s="wss://"+t+"/end-users/"+this.clientToken+"/socket";this.socket=new e(s,{reconnectAfterMs:e=>[100,500,1e3,5e3][e-1]||1e4,timeout:2e4}),this.socket.connect(),this.socket.onOpen((()=>{Je("socket opened")})),this.socket.onClose((()=>{this.emit("private:disconnect")})),this.socket.onError((e=>{console.log("Userflow.js socket error",e),this.reportCspIssue()})),this.channel=this.socket.channel(`end_users:${this.externalId}`,(()=>this.makeChannelJoinPayload())),this.channel.join().receive("ok",(e=>{this.logrocketAppId=e.logrocketAppId,this.featureFlags=new Set(e.featureFlags),Je("channel joined"),"connected"!==this._socketStatus&&(this._socketStatus="connected")})).receive("error",(e=>{["company_closed","invalid_client_token","invalid_user_external_id","incorrect_user_signature","rate_limit_exceeded","user_signature_required"].includes(e.code)?(console.error(`Userflow.js resetting due to: [${e.code}] ${e.message}`),this.reset(),this.clientToken=null):"invalid_protocol_version"===e.code?(console.error(`Userflow.js destroying due to: [${e.code}] ${e.message}`),this.destroy()):console.log("Userflow.js channel join error",e)})),this.channel.on("server_message",(e=>this.handleServerMessage(e))),this.channel.on("server_error",(e=>{console.log(`Userflow.js server error (${e.code}): ${e.message}`+(e.details&&e.details.length>0?"\nDetails:\n"+e.details.map((e=>(e.path?`${e.path}: `:"")+e.message)):""))}))}makeChannelJoinPayload(){const e=this.buildClientContext();this.clientContext=e;const t={protocolVersion:2,userflowClientBuild:"1003129",signature:this.signature,groupExternalId:this.groupId,groupSignature:this.groupSignature,flowSessionId:this.flowSession?.id||null,checklistSessionId:this.checklistSession?.id||null,resourceCenterSessionId:this.resourceCenterSession?.id||null,launchers:this.launcherSessions.map((e=>({flowId:e.flow.id}))),trackers:Array.from(this.trackers.values()).map((e=>({flowId:e.tracker.flowId}))),hasDraftSession:this.hasDraftSession(),clientConditions:Array.from(this.clientConditions.values()).map((e=>({conditionId:e.condition.id,isTrue:e.isTrue}))),previewFlowId:c.getItem("previewFlowId"),clientContext:e};return Je("channel join payload",t),t}disconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.socket&&this.socket.disconnect(),this._socketStatus="disconnected",this.socket=null,this.channel=null}debounceInactiveDisconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.debounceInactiveDisconnectTimeout=window.setTimeout((()=>{this.hasDraftSession()||this.assistantMessageInProgress?this.debounceInactiveDisconnect():(Je("disconnecting from socket due to inactivity"),this.disconnect())}),3e5)}hasDraftSession(){return!!this.flowSession?.draftMode||!!this.checklistSession?.draftMode||!!this.resourceCenterSession?.draftMode||this.launcherSessions.some((e=>e.draftMode))}async send(e,{batch:t,endBatch:s,handlesRejection:i}={}){return this.inBatch&&["ToggleClientCondition","UpdateClientContext"].includes(e.kind)||this.checkPushRateLimit(),this.ensureConnected(),t&&!this.inBatch&&(this.inBatch=!0,this.sendRaw({kind:"BeginBatch"})),this.inBatch&&(window.clearTimeout(this.endBatchTimeout),s?this.endBatch():this.endBatchTimeout=window.setTimeout((()=>{this.endBatch()}),50)),this.sendRaw(e,{handlesRejection:i})}async sendRaw(e,{handlesRejection:t}={}){return new Promise(((s,i)=>{if(!this.channel){const s=`Userflow.js: send() should not be called if channel is not set. Message kind=${e.kind}`;if(t)throw Error(s);return void console.log(s,"\nClient message:",e)}Je(`push ${e.kind} message`,e);const n=this.clientClock,r=()=>{this.serverClock=n,this.channel?.off("phx_error",a)},a=this.channel.on("phx_error",(s=>{r();const n=`Userflow.js send ${e.kind} got phx_error`;console.log(n,"\nClient message:",e,"\nError:",s),t&&i(new o(n))}));this.channel.push("client_message",e).receive("ok",(e=>{r(),s(e)})).receive("error",(t=>{r();const s=`Userflow.js error reply (${t.code}): ${t.message}`;console.log(s,"\nClient message:",e,"\nError:",t),i(new o(s,t.code,t.message))}))}))}endBatch(){this.inBatch=!1,this.sendRaw({kind:"EndBatch"})}checkPushRateLimit(){const e=Date.now();if(this.pushRateLimitMinuteExpires<e&&(this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=e+6e4),this.pushRateLimitMinute>=100)throw new o("This Userflow.js client has reached a maximum of 100 operations in the last 1 minute. This is usually due to one of the following:\n\n - Excessive calls to Userflow.js. Check if any of userflow.track(), userflow.identify(), userflow.updateUser() or similar are called repeatedly.\n - The URL changing too frequently. Look into https://userflow.com/docs/userflow-js#seturlfilter and filter out the changing part of the URL.\n - The user legitimately being very active, in which case you can just ignore this error.\n \n If in doubt, reach out to us at support@userflow.com.");this.pushRateLimitMinute++}handleServerMessage(e){Je(`received ${e.kind} message`,e);const{serverClock:t,flowSession:s,flowSessionClock:i,checklistSession:n,checklistSessionClock:o,resourceCenterSession:r}=this;switch(e.kind){case"CheckSessionsAck":case"ServerDebug":return;case"AddLauncher":{const{session:t}=e,s=this.launcherSessions.findIndex((e=>e.flow.id===t.flow.id));return this.launcherSessions=-1===s?[...this.launcherSessions,t]:[...this.launcherSessions.slice(0,s),t,...this.launcherSessions.slice(s+1)],void this.toggleUI()}case"AddTracker":return void this.addTracker(e.tracker);case"AssistantMessageEventWrapper":return void this.emit("private:assistantMessageEvent",e);case"CancelConditionWaitTimer":return window.clearTimeout(this.conditionWaitTimers.get(e.conditionId)),void this.conditionWaitTimers.delete(e.conditionId);case"ChecklistTaskCompleted":return void this.unackedTasks.add(e.taskCvid);case"ForceGoToStep":return i>t?void Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&this.emit("gotostep",{session:s,step:{id:e.stepId}}));case"RemoveLauncher":return void(this.removeLauncher(e.flowId)&&this.toggleUI());case"RemoveTracker":return void this.removeTracker(e.flowId);case"SetChecklistSession":return void(o<=t||n?.id===e.session.id?(this.setChecklistSession(e.session,t),this.toggleUI()):Je(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`));case"SetFlowSession":return void(i<=t||s?.id===e.session.id?(this.setFlowSession(e.session,t),this.toggleUI()):Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`));case"SetResourceCenterSession":return this.setResourceCenterSession(e.session),void this.toggleUI();case"StartConditionWaitTimer":if(!this.conditionWaitTimers.has(e.conditionId)){const t=window.setTimeout((()=>{this.conditionWaitTimers.delete(e.conditionId),this.send({kind:"FireConditionWaitTimer",conditionId:e.conditionId},{batch:!0})}),1e3*parseFloat(e.waitTime));this.conditionWaitTimers.set(e.conditionId,t)}return;case"TrackClientCondition":return void this.trackClientCondition(e.condition);case"UnsetChecklistSession":return o>t?void Je(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`):void(n?.id===e.sessionId&&(this.setChecklistSession(null,t),this.toggleUI()));case"UnsetFlowSession":return i>t?void Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&(this.setFlowSession(null,t),this.toggleUI()));case"UnsetResourceCenterSession":return void(r?.id===e.sessionId&&(this.setResourceCenterSession(null),this.toggleUI()));case"UntrackClientCondition":return void this.untrackClientCondition(e.conditionId);default:return void console.warn("Userflow.js: Received unknown message",e)}}async identify(e,t={},{signature:s}={}){if(Je("identify",e),this.ensureInit(),this.testUserIdentified&&e!==this.externalId)Je("identify() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.identify: First argument must be a non-empty string representing the user's ID in your database. Value received: ${JSON.stringify(e)}`);this.externalId&&e!==this.externalId&&(Je("identify resetting due to new externalId"),this.reset()),this.externalId=e,this.signature=s||null,this.observeUserActivity(),await Promise.all([this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(t)},{batch:!0}),this.onFirstIdentify()]),this.emit("private:identified")}}async identifyAnonymous(e={},s={}){const i="anonymousId";let n=a.getItem(i);n||(n="anon-"+t(),a.setItem(i,n)),await this.identify(n,e,s)}async updateUser(e={},t={}){Je("updateUser"),this.ensureIdentified(),await this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(e)},{batch:!0})}async group(e,t={},{signature:s,membership:i}={}){if(Je("group",e),this.ensureIdentified(),this.testUserIdentified&&e!==this.groupId)Je("group() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.group: First argument must be a non-empty string representing the group's ID in your database. Value received: ${JSON.stringify(e)}`);this.groupId=e,this.groupSignature=s||null,await this.send({kind:"UpsertGroup",groupExternalId:e,groupSignature:this.groupSignature,groupAttributes:this.normalizeAttributes(t),membershipAttributes:this.normalizeAttributes(i)},{batch:!0})}}async updateGroup(e={},t={}){Je("updateGroup");const s=this.ensureGroup();await this.send({kind:"UpsertGroup",groupExternalId:s,groupSignature:this.groupSignature,membershipAttributes:this.normalizeAttributes(t.membership),groupAttributes:this.normalizeAttributes(e)},{batch:!0})}normalizeAttributes(e){if(null==e)return{};if("object"!=typeof e)throw new o("Userflow: 'attributes' must be an object.");const t={};for(const s in e){if(!e.hasOwnProperty(s))continue;if("traits"===s){const i=e[s];Object.assign(t,this.extractLegacyTraits(i));continue}let i=e[s];if("string"==typeof i||"number"==typeof i||"boolean"==typeof i||null==i||Array.isArray(i))t[s]=this.normalizeAttributeLiteralOrList(s,i);else{if("object"!=typeof i||null==i)throw new o(`Userflow: Invalid value for '${s}' attribute.`);if("set"in i)t[s]={set:this.normalizeAttributeLiteralOrList(s,i.set),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("set_once"in i||"setOnce"in i)t[s]={setOnce:this.normalizeAttributeLiteralOrList(s,i.set_once??i.setOnce),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("add"in i){const e=i.add;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'add' value for '${s}' attribute. Must be a number or string.`);t[s]={add:e}}else if("subtract"in i){const e=i.subtract;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'subtract' value for '${s}' attribute. Must be a number or string.`);t[s]={subtract:e}}else if("append"in i)t[s]={append:this.normalizeAttributeLiteralOrList(s,i.append)};else if("prepend"in i)t[s]={prepend:this.normalizeAttributeLiteralOrList(s,i.prepend)};else{if(!("remove"in i))throw new o(`Userflow: Invalid value for '${s}' attribute.`);t[s]={remove:this.normalizeAttributeLiteralOrList(s,i.remove)}}}}return t}normalizeAttributeLiteralOrList(e,t){return Array.isArray(t)?t.map((t=>this.normalizeAttributeLiteral(e,t))):this.normalizeAttributeLiteral(e,t)}normalizeAttributeLiteral(e,t){if(null==t)return null;if("string"==typeof t||"number"==typeof t||"boolean"==typeof t)return t;throw new o(`Userflow: Invalid value for '${e}' attribute.`)}normalizeDataType(e,t){if(!t)return null;switch(t){case"string":return v.STRING;case"number":return v.NUMBER;case"boolean":return v.BOOLEAN;case"datetime":return v.DATETIME}throw new o(`Userflow: Invalid data_type for '${e}' attribute.`)}extractLegacyTraits(e){if(!e)return{};if(!Array.isArray(e)){const t=[];for(const s in e)e.hasOwnProperty(s)&&t.push({name:s,value:e[s]});e=t}return e.reduce(((e,{name:t,value:s,dataType:i})=>{if("string"!=typeof t||t.length>100||!t.match(/^[a-z0-9_]+$/))return this.warn("Userflow.identify: Invalid trait name (must be string, no more than 100 characters, and only consist of a-z, 0-9 and underscores). The trait will be ignored. Name was:",t),e;if("string"==typeof s);else if("boolean"==typeof s)i||(i="boolean"),s=s?"true":"false";else{if("number"!=typeof s)return this.warn(`userflow.identify: The value of trait '${t}' is invalid (must be a string, a boolean or a number). The trait will be ignored. Value was:`,s),e;i||(i=Number.isInteger(s)?"integer":"decimal"),s=String(s)}let n=null;if(i)switch(i){case"string":n=v.STRING;break;case"boolean":n=v.BOOLEAN;break;case"integer":case"decimal":n=v.NUMBER;break;case"datetime":n=v.DATETIME;break;default:return this.warn(`userflow.identify: The data type of trait '${t}' is invalid (must be a 'string', 'boolean', 'integer', 'decimal' or 'datetime'). The trait will be ignored. Data type was:`,i),e}return e[t]={set:s,dataType:n},e}),{})}async track(e,t={},{userOnly:s}={}){Je(`track '${e}'`,t),this.ensureIdentified(),await this.send({kind:"TrackEvent",userOnly:!!s,name:e,attributes:this.normalizeEventAttributes(t)},{batch:!0})}normalizeEventAttributes(e){const t=this.normalizeAttributes(e);for(const s in t){if(!t.hasOwnProperty(s))continue;const e=t[s];if(null!=e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Array.isArray(e)&&!("set"in e))throw new o(`Userflow: Invalid value for '${s}' attribute. Event attributes only support literal values, list values and 'set' changes.`)}return t}onFirstIdentify(){this.onFirstIdentifyRun||(this.onFirstIdentifyRun=!0,this.onFirstIdentifyTimeout=window.setTimeout((()=>{this.trackPageViewed(),this.firstIdentifyCallback?(this.firstIdentifyCallback(),this.firstIdentifyCallback=null):this.checkUrlForStartFlow()}),0))}onceIdentified(e){this.isIdentified()?e():this.firstIdentifyCallback=e}checkUrlForStartFlow(){const e=new URL(d()),t=e.searchParams.get("userflow")||e.searchParams.get("studio1_flow")||e.searchParams.get("studio1_walkthrough");t&&(Je(`url contained flow ${t}`),this.startFlow({flowId:t,startReason:L.LINK,batch:!0}),e.searchParams.delete("userflow"),e.searchParams.delete("studio1_flow"),e.searchParams.delete("studio1_walkthrough"),window.history.replaceState({},"",e.toString()),this.clientContext=this.buildClientContext(),this.pushUpdateClientContext())}flushUrlChange(){const e=this.buildClientContext();this.clientContext&&e.pageUrl===this.clientContext.pageUrl||(this.clientContext=e,this.pushUpdateClientContext(),this.trackPageViewed(),this.checkUrlForStartFlow())}async trackPageViewed(){this.pageTrackingDisabled||this.track("page_viewed",{})}buildClientContext(){return{pageUrl:ze(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}}pushUpdateClientContext(){this.send({kind:"UpdateClientContext",clientContext:this.clientContext},{batch:!0})}ackCompletedTask(e){this.unackedTasks.delete(e)}taskIsUnacked(e){return this.unackedTasks.has(e)}isIdentified(){return null!=this.externalId}on(e,t){let s=this.listeners.get(e);s||(s=new Set,this.listeners.set(e,s)),s.add(t)}off(e,t){const s=this.listeners.get(e);s&&s.delete(t)}emit(e,...t){const s=this.listeners.get(e);if(s){Array.from(s).forEach((e=>e(...t)))}}observeUserActivity(){document.addEventListener("mouseover",this.onUserActivity),document.addEventListener("pointerdown",this.onUserActivity),document.addEventListener("keydown",this.onUserActivity)}unobserveUserActivity(){document.removeEventListener("mouseover",this.onUserActivity),document.removeEventListener("pointerdown",this.onUserActivity),document.removeEventListener("keydown",this.onUserActivity)}reset(){Je("reset"),this.externalId=null,this.groupId=null,this.sessionStorageState=null,this.setFlowSession(null,0),this.setChecklistSession(null,0),this.setResourceCenterSession(null),this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.unackedTasks=new Set,this.onFirstIdentifyRun=!1,window.clearTimeout(this.onFirstIdentifyTimeout),this.onFirstIdentifyTimeout=void 0,this.clientContext=null,this.unobserveUserActivity(),window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=void 0,this.clientConditions.forEach(((e,t)=>{this.untrackClientCondition(t)})),this.firstIdentifyCallback=null,this.testUserIdentified=!1,a.removeItem("anonymousId"),this.unmountUI(),this.disconnect(),this.inBatch=!1,window.clearTimeout(this.endBatchTimeout),this.endBatchTimeout=void 0,this.clientClock=1,this.serverClock=1}async startFlow({flowId:e,stepCvid:t,startReason:s,once:i,batch:n,replaceCurrent:o}){if(this.ensureIdentified(),o&&this.flowSession&&this.endFlow(this.flowSession,{endReason:m.REPLACED,batch:!0}),Je(`startFlow ${e}`,{startReason:s}),this.checklistSession?.flow.id===e)return Je("startFlow matches current checklist, so showing it instead"),void this.showChecklist();const r={kind:"StartFlow",flowId:e,stepCvid:t,startReason:s,once:!!i};await this.send(r,{batch:n})}async startFlowWithToken(e){this.ensureIdentified(),Je("startFlowWithToken",{token:e}),await this.send({kind:"StartFlowWithToken",token:e},{batch:!0})}optimisticClockUIUpdate(e){this.clientClock++,e(),this.toggleUI()}async showChecklist(){this.resourceCenterEmbedsChecklist()?this.openResourceCenter():(this.unmarkExpandPending(),this.checklistSession&&!this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!0,this.toggleUI(),c.setItem(`checklistExpanded:${this.checklistSession.id}`,"1"),await this.send({kind:"ShowChecklist",sessionId:this.checklistSession.id},{batch:!0})))}async hideChecklist(){this.resourceCenterEmbedsChecklist()?this.closeResourceCenter():this.checklistSession&&this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!1,this.toggleUI(),c.removeItem(`checklistExpanded:${this.checklistSession.id}`),await this.send({kind:"HideChecklist",sessionId:this.checklistSession.id},{batch:!0}))}async unmarkExpandPending(){this.checklistSession&&this.checklistExpandPending&&(this.checklistExpandPending=!1,await this.send({kind:"UnmarkExpandPending",sessionId:this.checklistSession.id},{batch:!0}))}async openResourceCenter(){this.resourceCenterEmbedsChecklist()&&this.unmarkExpandPending(),this.resourceCenterSession&&!this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!0,this.toggleUI(),this.emit("resourceCenterChanged"),c.setItem(`resourceCenterOpen:${this.resourceCenterSession.id}`,"1"),await this.send({kind:"OpenResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}async closeResourceCenter(){this.resourceCenterSession&&this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!1,this.toggleUI(),this.emit("resourceCenterChanged"),c.removeItem(`resourceCenterOpen:${this.resourceCenterSession.id}`),await this.send({kind:"CloseResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}toggleResourceCenter(){this.resourceCenterOpen?this.closeResourceCenter():this.openResourceCenter()}setResourceCenterLauncherHidden(e){this.resourceCenterLauncherHidden=e,this.toggleUI()}getResourceCenterState(){if(!this.resourceCenterSession)return null;const e=this.resourceCenterEmbedsChecklist(),{checklistSession:t}=this;return{isOpen:this.resourceCenterOpen,hasChecklist:e,uncompletedChecklistTaskCount:e&&t?qe(t):0}}resourceCenterEmbedsChecklist(){const e=this.resourceCenterSession;return!!e&&!!e.version.resourceCenter?.blocks.some((e=>e.type===Ie.CHECKLIST))}async endFlow(e,{endReason:t,batch:s}){this.ensureIdentified(),this.optimisticClockUIUpdate((()=>{const{clientClock:t}=this;this.flowSession?.id===e.id&&this.setFlowSession(null,t),this.checklistSession?.id===e.id&&this.setChecklistSession(null,t),this.resourceCenterSession?.id===e.id&&this.setResourceCenterSession(null)}));const{flow:i}=e,n={id:i.id,type:i.type.toLowerCase()};i.type===_.CHECKLIST?this.emit("checklistEnded",{checklist:n,endReason:t}):i.type===_.FLOW&&this.emit("flowEnded",{flow:n,endReason:t});const o={kind:"EndFlow",sessionId:e.id,endReason:t};await this.send(o,{batch:s})}async goToStep(e,t){Je("goToStep",e.id,t.name||t.id),this.ensureIdentified();const s=this.send({kind:"GoToStep",sessionId:e.id,stepId:t.id});e.currentStep=t,this.emit("gotostep",{session:e,step:t}),await s}async endAllFlows(){Je("endAllFlows"),this.optimisticClockUIUpdate((()=>{const{clientClock:e}=this;this.setFlowSession(null,e),this.setChecklistSession(null,e)})),await this.send({kind:"EndAllFlows"})}async endChecklist(){Je("endChecklist");const e=this.checklistSession||this.flowSession;e?.flow.type===_.CHECKLIST&&this.endFlow(e,{endReason:m.USERFLOWJS})}setFlowSession(e,t=this.clientClock){const s=this.flowSession;this.flowSession=e,this.flowSessionClock=t,e&&!s&&(this.hideChecklist(),this.closeResourceCenter()),null==e&&this.originalActiveElement&&("function"==typeof this.originalActiveElement.focus&&this.originalActiveElement.focus(),this.originalActiveElement=void 0)}setChecklistSession(e,t=this.clientClock){const s=this.checklistSession;this.checklistSession=e,this.checklistSessionClock=t,null===e&&(this.checklistExpanded=!1,this.checklistExpandPending=!1),e&&e.id!==s?.id&&(this.checklistExpanded=!!c.getItem(`checklistExpanded:${e.id}`),e.expandPending&&(this.checklistExpandPending=!0)),this.emit("checklistChanged"),this.emit("resourceCenterChanged")}setResourceCenterSession(e){const t=this.resourceCenterSession;this.resourceCenterSession=e,null===e&&(this.resourceCenterOpen=!1),t&&t.id!==e?.id&&c.removeItem(`resourceCenterOpen:${t.id}`),e&&e.id!==t?.id&&(this.resourceCenterOpen=!!c.getItem(`resourceCenterOpen:${e.id}`)),this.emit("resourceCenterChanged")}launcherSeen(e){this.send({kind:"StartFlow",flowId:e,startReason:L.LAUNCHER_SEEN,once:!1})}activateLauncher(e){const t=this.activeLauncherFlowId&&this.launcherSessions.find((e=>e.flow.id===this.activeLauncherFlowId));t&&this.deactivateLauncher(t),this.activeLauncherFlowId=e.flow.id,this.toggleUI(),this.send({kind:"ActivateLauncher",flowId:e.flow.id})}deactivateLauncher(e){const{launcher:t}=e.version;e.flow.id===this.activeLauncherFlowId&&(t?.dismissOn===ye.DEACTIVATE?this.dismissLauncher(e,{endReason:m.LAUNCHER_DEACTIVATED}):(this.activeLauncherFlowId=null,this.toggleUI()))}dismissLauncher(e,{endReason:t}){const s=e.flow.id;this.removeLauncher(s),this.toggleUI(),this.send({kind:"DismissLauncher",flowId:s,endReason:t})}removeLauncher(e){const t=this.launcherSessions.findIndex((t=>t.flow.id===e));return-1!==t&&(this.launcherSessions=[...this.launcherSessions.slice(0,t),...this.launcherSessions.slice(t+1)],e===this.activeLauncherFlowId&&(this.activeLauncherFlowId=null),!0)}async toggleUI(){this.flowSession||!this.checklistExpandPending&&!this.checklistSession?.version.checklist?.tasks.some((e=>this.taskIsUnacked(e.cvid)))||this.showChecklist(),this.emit("uistatechange"),this.shouldBeMounted()?await this.mountUI():this.unmountUI()}shouldBeMounted(){if(this.uiDisabled)return!1;return!!this.getSessionStorageState().activeApp||!!this.flowSession||!!this.checklistSession&&(this.checklistExpanded||!!this.checklistSession?.version.checklist?.launcherEnabled)||!!this.resourceCenterSession&&(this.resourceCenterOpen||!this.resourceCenterLauncherHidden)||this.launcherSessions.length>0||this.notifications.length>0}async mountUI(){if(!this.ui){const e=await this.createUI();this.shouldBeMounted()&&!this.ui&&(Je("mount UI"),this.ui=e,this.ui.mount())}}unmountUI(){this.ui&&(Je("unmount UI"),this.ui.unmount(),this.ui=null)}remount(){this.unmountUI(),this.toggleUI()}async createUI(){try{const e=n((()=>import("./ui.js")),[new URL("ui.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString()]);this.resourceCenterSession&&Qe();const{RealUI:t}=await e;return new t(this)}catch(e){throw this.reportCspIssue(),e}}async trackClientCondition(e){if(this.clientConditions.has(e.id))return;Je("track client condition",e),this.clientConditions.set(e.id,{condition:e,isTrue:null});const{conditionTypes:t}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.u}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),s=t[e.type],i=this.clientConditions.get(e.id);i&&(i.untrack=s.track({sessionData:new et([]),condition:e,callback:t=>{i.isTrue!==t&&(Je("client condition truthiness changed",t,i.condition),i.isTrue=t,this.send({kind:"ToggleClientCondition",conditionId:e.id,isTrue:t},{batch:!0}))}}))}untrackClientCondition(e){const t=this.clientConditions.get(e);t&&(Je("untrack client condition",t.condition),t.untrack&&t.untrack(),this.clientConditions.delete(e))}async addTracker(e){let t=this.trackers.get(e.flowId);t?t.tracker=e:this.trackers.set(e.flowId,{tracker:e,isTrue:!1});const{conditionTypes:s}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.u}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),i=this.trackers.get(e.flowId);if(!i)return;const{tracker:o}=i,{condition:r}=o,a=s[r.type];i.untrack&&i.untrack(),i.untrack=a.track({sessionData:new et(o.data),condition:r,flipBackEvents:!0,callback:e=>{const t=i.isTrue;i.isTrue=e,!t&&e&&this.send({kind:"TrackTrackerEvent",token:o.token},{batch:!0})}}),this.emit("private:trackerStarted")}removeTracker(e){const t=this.trackers.get(e);t&&(t.untrack&&t.untrack(),this.trackers.delete(e),this.emit("private:trackerStopped"))}reportCspIssue(){const e=this.getSessionStorageState();!this.testUserIdentified&&!e.activeApp||this.cspIssueReported||(this.cspIssueReported=!0,Je("csp issue detected"),f(window,{kind:"userflow:crxCspIssueDetected"}))}getAudio(){return this.audio||(this.audio=new Audio),this.audio}playAudio(e){if(document.hidden)return;const t=this.getAudio();e&&(t.src=e);const s=t.play();this.audioReady=!0,s&&s.catch((e=>{e.name}))}pauseAudio(){const e=this.audio;e&&!e.paused&&e.pause()}async getStepSpeech(e,t){return(await this.send({kind:"GetStepSpeechV2",syntheticVoice:e,text:t})).url}featureFlagEnabled(e){return this.featureFlags.has(e)}showNotification(e,t,s){const i={id:++this.notificationIdCounter,label:e,message:t,type:s};this.notifications=[...this.notifications,i],this.toggleUI()}dismissNotification(e){this.notifications=this.notifications.filter((t=>t.id!==e)),this.toggleUI()}warn(...e){console.warn(...e)}nextRef(){return this.refCounter++}}if(void 0===window.userflow||window.userflow._stubbed){const e=Object.assign(window.userflow||{},function(){const e=new it;return{_stubbed:!1,init(t){e.init(t)},identify:(t,s={},i={})=>e.identify(t,s,i),identifyAnonymous:(t={},s={})=>e.identifyAnonymous(t,s),isIdentified:()=>e.isIdentified(),updateUser:(t,s={})=>e.updateUser(t,s),group:(t,s={},i={})=>e.group(t,s,i),updateGroup:(t,s={})=>e.updateGroup(t,s),track:(t,s={},i={})=>e.track(t,s,i),start:(t,{once:s}={})=>e.startFlow({flowId:t,startReason:L.USERFLOWJS,once:s}),startFlow:e=>(console.warn("Userflow.js: userflow.startFlow() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),startWalk:e=>(console.warn("Userflow.js: userflow.startWalk() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),endAll:()=>e.endAllFlows(),endChecklist:()=>e.endChecklist(),endAllFlows:()=>window.userflow.endAll(),async endFlow(){console.warn("Userflow.js: userflow.endFlow() has been deprecated and no longer has any effect.")},async endWalk(){console.warn("Userflow.js: userflow.endWalk() has been deprecated and no longer has any effect.")},openResourceCenter(){e.openResourceCenter()},closeResourceCenter(){e.closeResourceCenter()},toggleResourceCenter(){e.toggleResourceCenter()},setResourceCenterLauncherHidden(t){e.setResourceCenterLauncherHidden(t)},getResourceCenterState:()=>e.getResourceCenterState(),setWalkPosition(){console.warn("Userflow.js: userflow.setWalkPosition() has been deprecated and no longer has any effect.")},reset(){e.reset()},remount(){e.remount()},on(t,s){e.on(t,s)},off(t,s){e.off(t,s)},setCustomInputSelector(e){console.warn("Userflow.js: userflow.setCustomInputSelector() has been deprecated. Use userflow.registerCustomInput() instead. See docs: https://userflow.com/docs/userflow-js"),e&&Ve.customInputs.push({cssSelector:e})},registerCustomInput(e,t){Ve.customInputs.push({cssSelector:e,getValue:t})},setCustomNavigate(e){Ve.customNavigate=e},setUrlFilter(e){Ve.urlFilter=e},setInferenceAttributeNames(e){Ve.inferenceAttributeNames=e},setInferenceAttributeFilter(e,t){Ve.inferenceAttributeFilters[e]=je(t)},setInferenceClassNameFilter(e){Ve.inferenceClassNameFilters=je(e)},setScrollPadding(e){Ve.scrollPadding=e},setCustomScrollIntoView(e){Ve.customScrollIntoView=e},prepareAudio(){e.playAudio(null)},setShadowDomEnabled(e){console.warn("Userflow.js: userflow.setShadowDomEnabled() has been deprecated. Please remove this call from your Userflow.js snippet. Shadow DOM is supported by default now.")},setPageTrackingDisabled(t){e.pageTrackingDisabled=t},setBaseZIndex(e){Ve.baseZIndex=e},_setTargetEnv(t){e.setTargetEnv(t)}}}());window.userflow=e,window.studio1=e,function(){const e=window.userflow,t=window.USERFLOWJS_QUEUE;if(delete window.USERFLOWJS_QUEUE,!t||0===t.length)return;Je(`processing ${t.length} items in the queue`);for(const[s,i,n]of t){if("function"!=typeof e[s]){console.error(`Userflow.js: Invalid method '${s}' in queue`);continue}const t=e[s](...n);i&&t&&"function"==typeof t.then&&t.then(i.resolve,i.reject)}Je("queue processed")}()}export{W as A,V as B,me as C,X as D,m as E,P as F,ne as G,ce as H,K as I,de as J,Le as K,Me as L,Q as M,ve as N,Pe as O,_e as P,De as Q,Qe as R,L as S,tt as T,o as U,re as V,y as W,n as _,B as a,M as b,Ve as c,Je as d,D as e,H as f,ze as g,Ie as h,c as i,qe as j,se as k,ee as l,ue as m,Ae as n,g as o,_ as p,d as q,fe as r,l as s,Ke as t,p as u,we as v,ge as w,et as x,Y as y,a as z};export default window.userflow;
|
|
1
|
+
import{S as e}from"./vendor.phoenix.js";import{v as t}from"./vendor.uuid.js";let s;const i={},n=function(e,t){if(!t)return e();if(void 0===s){const e=document.createElement("link").relList;s=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in i)return;i[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":s,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};class o extends Error{constructor(e,t,s){super(e),Object.setPrototypeOf(this,o.prototype),this.name="UserflowError",this.code=t,this.humanMessage=s}}class r{constructor(e){this.type=e,this.testState={}}formatKey(e){return`userflow:${e}`}getItem(e){return e=this.formatKey(e),"undefined"==typeof window?null:window[this.type].getItem(e)}setItem(e,t){e=this.formatKey(e),"undefined"!=typeof window&&window[this.type].setItem(e,t)}removeItem(e){if(e=this.formatKey(e),"undefined"!=typeof window)return window[this.type].removeItem(e)}clear(){if("undefined"!=typeof window)return window[this.type].clear()}}const a=new r("localStorage"),c=new r("sessionStorage");function l(e){window.location.href=e}function d(){return window.location.href}var h,u,E;function f(e,t,{toOrigin:s}={}){e.postMessage(t,s||"*")}function T(e,{fromWindow:t,fromOrigin:s}={}){const i=i=>{if(!i.isTrusted)return;if(t&&t!==i.source)return;if(s&&i.origin!==s)return;const o=i.data;o&&"object"==typeof o&&"string"==typeof o.kind&&o.kind.startsWith("userflow:")&&!0===e(o)&&n()};window.addEventListener("message",i);const n=()=>window.removeEventListener("message",i);return n}(h||(h={})).INPUT="INPUT",(E=u||(u={})).AUTO="AUTO",E.MANUAL="MANUAL";const w=new Set;let S=!1;function g(e){return function(){if(S)return;S=!0;const{history:e}=window,t=t=>{const s=e[t];e[t]=(...t)=>{s.apply(e,t),I()}};t("pushState"),t("replaceState"),window.addEventListener("popstate",(()=>{I()}))}(),w.add(e),()=>{p(e)}}function p(e){w.delete(e)}function I(){w.forEach((e=>e()))}class C{destroy(){this.unregisterOnMessage&&this.unregisterOnMessage()}postBuilderMessage(e){f(window.opener,e,{toOrigin:"https://userflow.com"})}onBuilderMessage(e){return this.unregisterOnMessage=T(e,{fromOrigin:"https://userflow.com"}),!1}async captureScreenshot(e,t,s,i){f(window,{kind:"userflow:crxScreenshot",x:e,y:t,width:s,height:i,devicePixelRatio:window.devicePixelRatio});var n;return(await(n=e=>"userflow:crxScreenshotResult"===e.kind?e:null,new Promise((e=>{T((t=>{const s=n(t);return!!s&&(e(s),!0)}))})))).imageDataUrl}}var m,k,A,U,L,R,y,O,v,N,_,b,D,F,M,B,P,x,H,G,W,$,V,j,K,z,Y,J,X,Z,Q,q,ee,te,se,ie,ne,oe,re,ae,ce,le,de,he,ue,Ee,fe,Te,we,Se,ge,pe,Ie,Ce,me,ke,Ae,Ue,Le,Re,ye,Oe,ve,Ne,_e,be,De,Fe,Me,Be,Pe,xe,He,Ge,We,$e;(k=m||(m={})).ACTION="ACTION",k.LAUNCHER_DEACTIVATED="LAUNCHER_DEACTIVATED",k.REPLACED="REPLACED",k.SNOOZED="SNOOZED",k.TOOLTIP_TARGET_MISSING="TOOLTIP_TARGET_MISSING",k.USERFLOWJS="USERFLOWJS",k.USER_CLOSED="USER_CLOSED",(U=A||(A={})).SECOND="SECOND",U.MINUTE="MINUTE",U.HOUR="HOUR",U.DAY="DAY",(R=L||(L={})).ACTION="ACTION",R.DRAFT="DRAFT",R.LINK="LINK",R.LAUNCHER_SEEN="LAUNCHER_SEEN",R.RESOURCE_CENTER="RESOURCE_CENTER",R.USERFLOWJS="USERFLOWJS",(O=y||(y={})).LIKE="LIKE",O.DISLIKE="DISLIKE",(N=v||(v={})).STRING="STRING",N.BOOLEAN="BOOLEAN",N.NUMBER="NUMBER",N.DATETIME="DATETIME",N.LIST="LIST",N.RANDOM_AB="RANDOM_AB",N.RANDOM_NUMBER="RANDOM_NUMBER",(b=_||(_={})).FLOW="FLOW",b.CHECKLIST="CHECKLIST",b.LAUNCHER="LAUNCHER",b.RESOURCE_CENTER="RESOURCE_CENTER",(F=D||(D={})).ALWAYS_TRUE="ALWAYS_TRUE",F.ATTRIBUTE="ATTRIBUTE",F.CLAUSE="CLAUSE",F.ELEMENT="ELEMENT",F.FILLED_IN_INPUT="FILLED_IN_INPUT",F.FLOW="FLOW",F.INPUT_VALUE="INPUT_VALUE",F.PAGE="PAGE",F.TIME="TIME",function(e){e.AUTO="AUTO",e.MANUAL="MANUAL"}(M||(M={})),(B||(B={})).INPUT="INPUT",(x=P||(P={})).ABSOLUTE_EQ="ABSOLUTE_EQ",x.ABSOLUTE_GT="ABSOLUTE_GT",x.ABSOLUTE_LT="ABSOLUTE_LT",x.AND="AND",x.BETWEEN="BETWEEN",x.CONTAINS="CONTAINS",x.EMPTY="EMPTY",x.ENDS_WITH="ENDS_WITH",x.EQ="EQ",x.EXCLUDES_ALL="EXCLUDES_ALL",x.EXCLUDES_ANY="EXCLUDES_ANY",x.FALSE="FALSE",x.GT="GT",x.GTE="GTE",x.INCLUDES_ALL="INCLUDES_ALL",x.INCLUDES_ANY="INCLUDES_ANY",x.LT="LT",x.LTE="LTE",x.NE="NE",x.NOT_CONTAINS="NOT_CONTAINS",x.NOT_EMPTY="NOT_EMPTY",x.NOT_REGEX="NOT_REGEX",x.OR="OR",x.REGEX="REGEX",x.RELATIVE_EQ="RELATIVE_EQ",x.RELATIVE_GT="RELATIVE_GT",x.RELATIVE_LT="RELATIVE_LT",x.STARTS_WITH="STARTS_WITH",x.TRUE="TRUE",x.URL="URL",(G=H||(H={})).CLICK="CLICK",G.DISABLED="DISABLED",G.MOUSEDOWN="MOUSEDOWN",G.NOT_CLICK="NOT_CLICK",G.NOT_DISABLED="NOT_DISABLED",G.NOT_PRESENT="NOT_PRESENT",G.PRESENT="PRESENT",($=W||(W={})).ASSET="ASSET",$.CARTOON="CARTOON",$.NONE="NONE",$.URL="URL",(j=V||(V={})).INSIDE="INSIDE",j.OUTSIDE="OUTSIDE",(z=K||(K={})).TOP_LEFT="TOP_LEFT",z.TOP_CENTER="TOP_CENTER",z.TOP_RIGHT="TOP_RIGHT",z.BOTTOM_RIGHT="BOTTOM_RIGHT",z.BOTTOM_CENTER="BOTTOM_CENTER",z.BOTTOM_LEFT="BOTTOM_LEFT",z.CENTER="CENTER",(J=Y||(Y={})).GOOGLE="GOOGLE",J.STANDARD="STANDARD",(Z=X||(X={})).DISMISS_FIRST_MENU_AFTER="DISMISS_FIRST_MENU_AFTER",Z.DISMISS="DISMISS",(q=Q||(Q={})).DISMISS="DISMISS",q.NONE="NONE",(te=ee||(ee={})).DEFAULT="DEFAULT",te.PLAINTEXT="PLAINTEXT",(ie=se||(se={})).CHECKLIST_OVERRIDE="CHECKLIST_OVERRIDE",ie.RESOURCE_CENTER_ONLY="RESOURCE_CENTER_ONLY",ie.NONE="NONE",(oe=ne||(ne={})).BUBBLE="BUBBLE",oe.END="END",oe.ERROR="ERROR",oe.FLAG="FLAG",(ae=re||(re={})).MANUAL="MANUAL",ae.NONE="NONE",ae.SYNTHETIC="SYNTHETIC",(le=ce||(ce={})).BUBBLE="BUBBLE",le.HIDDEN="HIDDEN",le.MODAL="MODAL",le.TOOLTIP="TOOLTIP",(he=de||(de={})).ABOVE="ABOVE",he.BELOW="BELOW",he.LEFT="LEFT",he.RIGHT="RIGHT",(Ee=ue||(ue={})).CLOSE_FLOW="CLOSE_FLOW",Ee.EVAL_JS="EVAL_JS",Ee.GO_TO_STEP="GO_TO_STEP",Ee.NAVIGATE="NAVIGATE",Ee.SET_ATTRIBUTE="SET_ATTRIBUTE",Ee.SNOOZE="SNOOZE",Ee.START_FLOW="START_FLOW",(Te=fe||(fe={})).NEW_TAB="NEW_TAB",Te.SAME_TAB="SAME_TAB",(Se=we||(we={})).SET="SET",Se.SET_ONCE="SET_ONCE",Se.ADD="ADD",Se.SUBTRACT="SUBTRACT",Se.UNSET="UNSET",(pe=ge||(ge={})).MULTILINE_TEXT="MULTILINE_TEXT",pe.MULTIPLE_CHOICE="MULTIPLE_CHOICE",pe.NPS="NPS",pe.SCALE="SCALE",pe.STARS="STARS",pe.TEXT="TEXT",(Ce=Ie||(Ie={})).ACTION="ACTION",Ce.ASSISTANT="ASSISTANT",Ce.CHECKLIST="CHECKLIST",Ce.CONTACT="CONTACT",Ce.FLOWS="FLOWS",Ce.KNOWLEDGE_BASE="KNOWLEDGE_BASE",Ce.MESSAGE="MESSAGE",Ce.SUBPAGE="SUBPAGE",(ke=me||(me={})).CRISP="CRISP",ke.CUSTOM="CUSTOM",ke.FRESHCHAT="FRESHCHAT",ke.HELPSCOUT="HELPSCOUT",ke.HUBSPOT="HUBSPOT",ke.INTERCOM="INTERCOM",ke.ZENDESK="ZENDESK",ke.ZENDESK_MESSENGER="ZENDESK_MESSENGER",(Ue=Ae||(Ae={})).BUTTON="BUTTON",Ue.INPUT="INPUT",(Re=Le||(Le={})).LAUNCHER_CLICK="LAUNCHER_CLICK",Re.LAUNCHER_HOVER="LAUNCHER_HOVER",Re.TARGET_CLICK="TARGET_CLICK",Re.TARGET_HOVER="TARGET_HOVER",Re.LAUNCHER_TARGET_CLICK="LAUNCHER_TARGET_CLICK",Re.LAUNCHER_TARGET_HOVER="LAUNCHER_TARGET_HOVER",(Oe=ye||(ye={})).ACTIVATE="ACTIVATE",Oe.DEACTIVATE="DEACTIVATE",Oe.NEVER="NEVER",(Ne=ve||(ve={})).AUTO="AUTO",Ne.TOP="TOP",Ne.RIGHT="RIGHT",Ne.BOTTOM="BOTTOM",Ne.LEFT="LEFT",(be=_e||(_e={})).START="START",be.CENTER="CENTER",be.END="END",(Fe=De||(De={})).PERCENT="PERCENT",Fe.PX="PX",(Be=Me||(Me={})).BEACON="BEACON",Be.BUTTON="BUTTON",Be.HIDDEN="HIDDEN",Be.ICON="ICON",(xe=Pe||(Pe={})).LAUNCHER="LAUNCHER",xe.TARGET="TARGET",(Ge=He||(He={})).ACTIVE="ACTIVE",Ge.COMPLETED="COMPLETED",Ge.ENDED="ENDED",Ge.NOT_SEEN="NOT_SEEN",($e=We||(We={})).HIGHLIGHT="HIGHLIGHT",$e.MODAL="MODAL",$e.HIGHLIGHT_MODAL="HIGHLIGHT_MODAL";const Ve={customInputs:[],customNavigate:null,urlFilter:null,customScrollIntoView:null,scrollPadding:null,inferenceAttributeNames:["data-for","data-id","data-testid","data-test-id","for","id","name","placeholder","role"],inferenceAttributeFilters:{id:[e=>!e.match(/\d$/)],"data-id":[e=>!e.match(/\d$/)]},inferenceClassNameFilters:[e=>!e.startsWith("css-")],baseZIndex:1234500};function je(e){return Array.isArray(e)||(e=e?[e]:[]),e=e.map((e=>"string"==typeof e?new RegExp(e):e))}function Ke(e,t){return e.every((e=>"function"==typeof e?e(t):!(e instanceof RegExp)||e.test(t)))}function ze(){let e=d();if(Ve.urlFilter){if(e=Ve.urlFilter(e),"string"!=typeof e)throw new o("Userflow.js: URL filter returned non-string value. Please check your userflow.setUrlFilter() implementation.");try{new URL(e)}catch(t){throw new o("Userflow.js: URL filter returned an invalid URL. Please check your userflow.setUrlFilter() implementation.\nReturned URL: "+e+"\nError message: "+t.message)}}return e}const Ye=(localStorage.getItem("debug")||"").split(",").some((e=>"*"===e||e.startsWith("userflow:*"))),Je=Ze("log");let Xe;function Ze(e){return function(t,...s){if(Ye){const i=performance.now(),n=Xe?Math.round(i-Xe):0;Xe=i,console[e](`%cuserflow %c${t} %c+${n}ms`,"color:#1a57e6;","","color:#1a57e6;",...s)}}}Je.group=Ze("group"),Je.groupCollapsed=Ze("groupCollapsed"),Je.groupEnd=function(){Ye&&console.groupEnd()};const Qe=()=>n((()=>import("./ResourceCenterApp.js").then((function(e){return e.R}))),[new URL("ResourceCenterApp.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("Icons.js",import.meta.url).toString(),new URL("BubbleToolbar.js",import.meta.url).toString(),new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString(),new URL("stylesheets.js",import.meta.url).toString(),new URL("vendor.obj-str.js",import.meta.url).toString(),new URL("vendor.fortawesome.react-fontawesome.js",import.meta.url).toString(),new URL("vendor.fortawesome.fontawesome-svg-core.js",import.meta.url).toString(),new URL("vendor.prop-types.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-solid-svg-icons.js",import.meta.url).toString(),new URL("logomark.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("DynamicIcon.js",import.meta.url).toString(),new URL("vendor.fortawesome.pro-regular-svg-icons.js",import.meta.url).toString(),new URL("ChecklistUI.js",import.meta.url).toString()]);function qe(e){const t=e.version.checklist.tasks.length;return Math.max(0,t-e.taskCompletions.length)}class et{constructor(e){this.observers=new Set,this._value=e}get value(){return this._value}update(e){if(e!==this._value){this._value=e;for(const e of this.observers)e()}}observe(e){return this.observers.add(e),()=>this.observers.delete(e)}}const tt=["page:before-change","page:change","turbo:before-cache","turbo:load","turbo:visit","turbolinks:before-cache","turbolinks:load","turbolinks:visit"],st=import.meta.url;class it{constructor(){this.clientToken=null,this.externalId=null,this.signature=null,this.groupId=null,this.groupSignature=null,this._socketStatus="disconnected",this.socket=null,this.channel=null,this.featureFlags=new Set,this.logrocketAppId=null,this.debounceInactiveDisconnectTimeout=void 0,this.inBatch=!1,this.endBatchTimeout=void 0,this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=0,this.clientClock=1,this.serverClock=1,this.flowSession=null,this.flowSessionClock=0,this.checklistSession=null,this.checklistExpanded=!1,this.checklistExpandPending=!1,this.checklistSessionClock=0,this.resourceCenterSession=null,this.resourceCenterOpen=!1,this.resourceCenterLauncherHidden=!1,this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.notificationIdCounter=0,this.sessionStorageState=null,this.clientContext=null,this.flushUrlChangeTimeout=void 0,this.onFirstIdentifyRun=!1,this.onFirstIdentifyTimeout=void 0,this.firstIdentifyCallback=null,this.ui=null,this.unackedTasks=new Set,this.clientConditions=new Map,this.trackers=new Map,this.conditionWaitTimers=new Map,this.listeners=new Map,this.targetEnv=null,this.idempotencyKeysSeen=new Set,this.testUserIdentified=!1,this.cspIssueReported=!1,this.uiDisabled=!1,this.audio=null,this.audioReady=!1,this.pageTrackingDisabled=!1,this.refCounter=1,this.onBuilderMessage=e=>(this.handleBuilderMessage(e),!1),this.handleBuilderMessage=async e=>{Je(`builder ${e.kind} message received`,e);const t="idempotencyKey"in e&&"string"==typeof e.idempotencyKey?e.idempotencyKey:null;if(t&&this.idempotencyKeysSeen.has(t))return;const s=()=>{t&&this.idempotencyKeysSeen.add(t)};switch(e.kind){case"userflow:selectElement":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:selectElementAck",idempotencyKey:e.idempotencyKey}),void this.setSessionStorageState((t=>({...t,activeApp:"elementSelection",elementSelection:{mode:"select",elementType:e.elementType}})));case"userflow:selectElementCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,elementSelection:null})));case"userflow:startFlowWithToken":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:startFlowWithTokenAck",idempotencyKey:e.idempotencyKey}),c.setItem("previewFlowId",e.flowId),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.onceIdentified((()=>{if(this.startFlowWithToken(e.token),e.isResourceCenter){const t=()=>{const s=this.resourceCenterSession;s&&s.draftMode&&s.flow.id===e.flowId&&(this.openResourceCenter(),this.off("resourceCenterChanged",t))};this.on("resourceCenterChanged",t),t()}}));case"userflow:testTracker":return s(),this.getTargetEnv().postBuilderMessage({kind:"userflow:testTrackerAck",idempotencyKey:e.idempotencyKey}),e.testUser?this.identifyTestUser(e.testUser):this.resetTestUser(),void this.setSessionStorageState((t=>({...t,activeApp:"trackerTesting",trackerTesting:{trackerName:e.trackerName,token:e.token,events:0}})));case"userflow:testTrackerCancel":return void this.setSessionStorageState((e=>({...e,activeApp:null,trackerTesting:null})))}},this.onUrlChange=()=>{this.externalId&&(window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=window.setTimeout((()=>this.flushUrlChange()),50))},this.onUserActivity=()=>this.ensureConnected(),this.remountIfNecessary=()=>{this.ui?.container&&!document.contains(this.ui.container)&&(Je("remounting UI because container was missing"),this.remount())},Je("constructor, build=1003153"),g(this.onUrlChange),this.setTargetEnv(new C),this.checkTestUserAtBoot(),this.toggleUI();for(const e of tt)document.addEventListener(e,this.remountIfNecessary)}get socketStatus(){return this._socketStatus}destroy(){Je("destroy"),this.reset(),p(this.onUrlChange),this.destroyTargetEnv();for(const e of tt)document.removeEventListener(e,this.remountIfNecessary)}setTargetEnv(e){this.destroyTargetEnv(),this.targetEnv=e,e.onBuilderMessage(this.onBuilderMessage)}destroyTargetEnv(){this.targetEnv&&(this.targetEnv.destroy(),this.targetEnv=null)}getTargetEnv(){if(!this.targetEnv)throw new o("Userflow.js: Cannot call getTargetEnv when protocol is not set");return this.targetEnv}setSessionStorageState(e){const t=e(this.getSessionStorageState());c.setItem("userflowClientState",JSON.stringify(t)),this.sessionStorageState=t,this.toggleUI()}getSessionStorageState(){let e=this.sessionStorageState;if(!e){const s=c.getItem("userflowClientState");if(s)try{e=JSON.parse(s)}catch(t){console.error("Userflow.js: Parse ElementSelectionState error:",t)}e||(e={testUser:null,activeApp:null,elementSelection:null,trackerTesting:null})}return e}checkTestUserAtBoot(){const e=this.getSessionStorageState().testUser;e&&(Je("checkTestUserAtBoot identifying test user"),this.identifyTestUser(e))}async identifyTestUser(e){this.setSessionStorageState((t=>({...t,testUser:e}))),this.reset(),this.init(e.clientToken),this.testUserIdentified=!0,this.externalId=e.id;const t=[this.identify(e.id,{name:e.name,email:e.email,signed_up_at:{set_once:(new Date).toISOString(),data_type:"datetime"}},{signature:e.signature})],{group:s}=e;s&&(this.groupId=s.id,t.push(this.group(s.id,{name:s.name},{signature:s.signature}))),await Promise.all(t)}resetTestUser(){this.setSessionStorageState((e=>({...e,testUser:null})))}init(e){if(Je("init",e),!e)throw new o("userflow.init() was called but missing Userflow.js Token");this.clientToken!==e&&(this.testUserIdentified?Je("init() ignoring new token since a test user has been identified"):(this.clientToken&&(Je("init() resetting due to new client token"),this.reset()),this.clientToken=e))}ensureInit(){if(!this.clientToken)throw new o("You must call userflow.init() first")}ensureIdentified(){if(this.ensureInit(),!this.externalId)throw new o("You must call userflow.identify() first");return this.externalId}ensureGroup(){if(this.ensureIdentified(),!this.groupId)throw new o("You must call userflow.group() first");return this.groupId}ensureConnected(){if(!this.clientToken||!this.externalId)return;if(this.debounceInactiveDisconnect(),this.socket)return;this._socketStatus="connecting",Je("connecting to socket");let t="e.userflow.com";"js.getuserflow.com"===new URL(st).hostname&&"e.userflow.com"===t&&(t="e.getuserflow.com");const s="wss://"+t+"/end-users/"+this.clientToken+"/socket";this.socket=new e(s,{reconnectAfterMs:e=>[100,500,1e3,5e3][e-1]||1e4,timeout:2e4}),this.socket.connect(),this.socket.onOpen((()=>{Je("socket opened")})),this.socket.onClose((()=>{this.emit("private:disconnect")})),this.socket.onError((e=>{console.log("Userflow.js socket error",e),this.reportCspIssue()})),this.channel=this.socket.channel(`end_users:${this.externalId}`,(()=>this.makeChannelJoinPayload())),this.channel.join().receive("ok",(e=>{this.logrocketAppId=e.logrocketAppId,this.featureFlags=new Set(e.featureFlags),Je("channel joined"),"connected"!==this._socketStatus&&(this._socketStatus="connected")})).receive("error",(e=>{["company_closed","invalid_client_token","invalid_user_external_id","incorrect_user_signature","rate_limit_exceeded","user_signature_required"].includes(e.code)?(console.error(`Userflow.js resetting due to: [${e.code}] ${e.message}`),this.reset(),this.clientToken=null):"invalid_protocol_version"===e.code?(console.error(`Userflow.js destroying due to: [${e.code}] ${e.message}`),this.destroy()):console.log("Userflow.js channel join error",e)})),this.channel.on("server_message",(e=>this.handleServerMessage(e))),this.channel.on("server_error",(e=>{console.log(`Userflow.js server error (${e.code}): ${e.message}`+(e.details&&e.details.length>0?"\nDetails:\n"+e.details.map((e=>(e.path?`${e.path}: `:"")+e.message)):""))}))}makeChannelJoinPayload(){const e=this.buildClientContext();this.clientContext=e;const t={protocolVersion:2,userflowClientBuild:"1003153",signature:this.signature,groupExternalId:this.groupId,groupSignature:this.groupSignature,flowSessionId:this.flowSession?.id||null,checklistSessionId:this.checklistSession?.id||null,resourceCenterSessionId:this.resourceCenterSession?.id||null,launchers:this.launcherSessions.map((e=>({flowId:e.flow.id}))),trackers:Array.from(this.trackers.values()).map((e=>({flowId:e.tracker.flowId}))),hasDraftSession:this.hasDraftSession(),clientConditions:Array.from(this.clientConditions.values()).map((e=>({conditionId:e.condition.id,isTrue:e.isTrue}))),previewFlowId:c.getItem("previewFlowId"),clientContext:e};return Je("channel join payload",t),t}disconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.socket&&this.socket.disconnect(),this._socketStatus="disconnected",this.socket=null,this.channel=null}debounceInactiveDisconnect(){window.clearTimeout(this.debounceInactiveDisconnectTimeout),this.debounceInactiveDisconnectTimeout=window.setTimeout((()=>{this.hasDraftSession()||this.assistantMessageInProgress?this.debounceInactiveDisconnect():(Je("disconnecting from socket due to inactivity"),this.disconnect())}),3e5)}hasDraftSession(){return!!this.flowSession?.draftMode||!!this.checklistSession?.draftMode||!!this.resourceCenterSession?.draftMode||this.launcherSessions.some((e=>e.draftMode))}async send(e,{batch:t,endBatch:s,handlesRejection:i}={}){return this.inBatch&&["ToggleClientCondition","UpdateClientContext"].includes(e.kind)||this.checkPushRateLimit(),this.ensureConnected(),t&&!this.inBatch&&(this.inBatch=!0,this.sendRaw({kind:"BeginBatch"})),this.inBatch&&(window.clearTimeout(this.endBatchTimeout),s?this.endBatch():this.endBatchTimeout=window.setTimeout((()=>{this.endBatch()}),50)),this.sendRaw(e,{handlesRejection:i})}async sendRaw(e,{handlesRejection:t}={}){return new Promise(((s,i)=>{if(!this.channel){const s=`Userflow.js: send() should not be called if channel is not set. Message kind=${e.kind}`;if(t)throw Error(s);return void console.log(s,"\nClient message:",e)}Je(`push ${e.kind} message`,e);const n=this.clientClock,r=()=>{this.serverClock=n,this.channel?.off("phx_error",a)},a=this.channel.on("phx_error",(s=>{r();const n=`Userflow.js send ${e.kind} got phx_error`;console.log(n,"\nClient message:",e,"\nError:",s),t&&i(new o(n))}));this.channel.push("client_message",e).receive("ok",(e=>{r(),s(e)})).receive("error",(t=>{r();const s=`Userflow.js error reply (${t.code}): ${t.message}`;console.log(s,"\nClient message:",e,"\nError:",t),i(new o(s,t.code,t.message))}))}))}endBatch(){this.inBatch=!1,this.sendRaw({kind:"EndBatch"})}checkPushRateLimit(){const e=Date.now();if(this.pushRateLimitMinuteExpires<e&&(this.pushRateLimitMinute=0,this.pushRateLimitMinuteExpires=e+6e4),this.pushRateLimitMinute>=100)throw new o("This Userflow.js client has reached a maximum of 100 operations in the last 1 minute. This is usually due to one of the following:\n\n - Excessive calls to Userflow.js. Check if any of userflow.track(), userflow.identify(), userflow.updateUser() or similar are called repeatedly.\n - The URL changing too frequently. Look into https://userflow.com/docs/userflow-js#seturlfilter and filter out the changing part of the URL.\n - The user legitimately being very active, in which case you can just ignore this error.\n \n If in doubt, reach out to us at support@userflow.com.");this.pushRateLimitMinute++}handleServerMessage(e){Je(`received ${e.kind} message`,e);const{serverClock:t,flowSession:s,flowSessionClock:i,checklistSession:n,checklistSessionClock:o,resourceCenterSession:r}=this;switch(e.kind){case"CheckSessionsAck":case"ServerDebug":return;case"AddLauncher":{const{session:t}=e,s=this.launcherSessions.findIndex((e=>e.flow.id===t.flow.id));return this.launcherSessions=-1===s?[...this.launcherSessions,t]:[...this.launcherSessions.slice(0,s),t,...this.launcherSessions.slice(s+1)],void this.toggleUI()}case"AddTracker":return void this.addTracker(e.tracker);case"AssistantMessageEventWrapper":return void this.emit("private:assistantMessageEvent",e);case"CancelConditionWaitTimer":return window.clearTimeout(this.conditionWaitTimers.get(e.conditionId)),void this.conditionWaitTimers.delete(e.conditionId);case"ChecklistTaskCompleted":return void this.unackedTasks.add(e.taskCvid);case"ForceGoToStep":return i>t?void Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&this.emit("gotostep",{session:s,step:{id:e.stepId}}));case"RemoveLauncher":return void(this.removeLauncher(e.flowId)&&this.toggleUI());case"RemoveTracker":return void this.removeTracker(e.flowId);case"SetChecklistSession":return void(o<=t||n?.id===e.session.id?(this.setChecklistSession(e.session,t),this.toggleUI()):Je(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`));case"SetFlowSession":return void(i<=t||s?.id===e.session.id?(this.setFlowSession(e.session,t),this.toggleUI()):Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`));case"SetResourceCenterSession":return this.setResourceCenterSession(e.session),void this.toggleUI();case"StartConditionWaitTimer":if(!this.conditionWaitTimers.has(e.conditionId)){const t=window.setTimeout((()=>{this.conditionWaitTimers.delete(e.conditionId),this.send({kind:"FireConditionWaitTimer",conditionId:e.conditionId},{batch:!0})}),1e3*parseFloat(e.waitTime));this.conditionWaitTimers.set(e.conditionId,t)}return;case"TrackClientCondition":return void this.trackClientCondition(e.condition);case"UnsetChecklistSession":return o>t?void Je(`ignoring ${e.kind} message due to stale clock checklistSessionClock=${o} > serverClock=${t}`):void(n?.id===e.sessionId&&(this.setChecklistSession(null,t),this.toggleUI()));case"UnsetFlowSession":return i>t?void Je(`ignoring ${e.kind} message due to stale clock flowSessionClock=${i} > serverClock=${t}`):void(s?.id===e.sessionId&&(this.setFlowSession(null,t),this.toggleUI()));case"UnsetResourceCenterSession":return void(r?.id===e.sessionId&&(this.setResourceCenterSession(null),this.toggleUI()));case"UntrackClientCondition":return void this.untrackClientCondition(e.conditionId);default:return void console.warn("Userflow.js: Received unknown message",e)}}async identify(e,t={},{signature:s}={}){if(Je("identify",e),this.ensureInit(),this.testUserIdentified&&e!==this.externalId)Je("identify() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.identify: First argument must be a non-empty string representing the user's ID in your database. Value received: ${JSON.stringify(e)}`);this.externalId&&e!==this.externalId&&(Je("identify resetting due to new externalId"),this.reset()),this.externalId=e,this.signature=s||null,this.observeUserActivity(),await Promise.all([this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(t)},{batch:!0}),this.onFirstIdentify()]),this.emit("private:identified")}}async identifyAnonymous(e={},s={}){const i="anonymousId";let n=a.getItem(i);n||(n="anon-"+t(),a.setItem(i,n)),await this.identify(n,e,s)}async updateUser(e={},t={}){Je("updateUser"),this.ensureIdentified(),await this.send({kind:"UpsertUser",attributes:this.normalizeAttributes(e)},{batch:!0})}async group(e,t={},{signature:s,membership:i}={}){if(Je("group",e),this.ensureIdentified(),this.testUserIdentified&&e!==this.groupId)Je("group() ignored since a test user has been identified");else{if("number"==typeof e)e=String(e);else if(!e||"string"!=typeof e)throw new o(`userflow.group: First argument must be a non-empty string representing the group's ID in your database. Value received: ${JSON.stringify(e)}`);this.groupId=e,this.groupSignature=s||null,await this.send({kind:"UpsertGroup",groupExternalId:e,groupSignature:this.groupSignature,groupAttributes:this.normalizeAttributes(t),membershipAttributes:this.normalizeAttributes(i)},{batch:!0})}}async updateGroup(e={},t={}){Je("updateGroup");const s=this.ensureGroup();await this.send({kind:"UpsertGroup",groupExternalId:s,groupSignature:this.groupSignature,membershipAttributes:this.normalizeAttributes(t.membership),groupAttributes:this.normalizeAttributes(e)},{batch:!0})}normalizeAttributes(e){if(null==e)return{};if("object"!=typeof e)throw new o("Userflow: 'attributes' must be an object.");const t={};for(const s in e){if(!e.hasOwnProperty(s))continue;if("traits"===s){const i=e[s];Object.assign(t,this.extractLegacyTraits(i));continue}let i=e[s];if("string"==typeof i||"number"==typeof i||"boolean"==typeof i||null==i||Array.isArray(i))t[s]=this.normalizeAttributeLiteralOrList(s,i);else{if("object"!=typeof i||null==i)throw new o(`Userflow: Invalid value for '${s}' attribute.`);if("set"in i)t[s]={set:this.normalizeAttributeLiteralOrList(s,i.set),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("set_once"in i||"setOnce"in i)t[s]={setOnce:this.normalizeAttributeLiteralOrList(s,i.set_once??i.setOnce),dataType:this.normalizeDataType(s,i.data_type||i.dataType)};else if("add"in i){const e=i.add;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'add' value for '${s}' attribute. Must be a number or string.`);t[s]={add:e}}else if("subtract"in i){const e=i.subtract;if("string"!=typeof e&&"number"!=typeof e)throw new o(`Userflow: Invalid 'subtract' value for '${s}' attribute. Must be a number or string.`);t[s]={subtract:e}}else if("append"in i)t[s]={append:this.normalizeAttributeLiteralOrList(s,i.append)};else if("prepend"in i)t[s]={prepend:this.normalizeAttributeLiteralOrList(s,i.prepend)};else{if(!("remove"in i))throw new o(`Userflow: Invalid value for '${s}' attribute.`);t[s]={remove:this.normalizeAttributeLiteralOrList(s,i.remove)}}}}return t}normalizeAttributeLiteralOrList(e,t){return Array.isArray(t)?t.map((t=>this.normalizeAttributeLiteral(e,t))):this.normalizeAttributeLiteral(e,t)}normalizeAttributeLiteral(e,t){if(null==t)return null;if("string"==typeof t||"number"==typeof t||"boolean"==typeof t)return t;throw new o(`Userflow: Invalid value for '${e}' attribute.`)}normalizeDataType(e,t){if(!t)return null;switch(t){case"string":return v.STRING;case"number":return v.NUMBER;case"boolean":return v.BOOLEAN;case"datetime":return v.DATETIME}throw new o(`Userflow: Invalid data_type for '${e}' attribute.`)}extractLegacyTraits(e){if(!e)return{};if(!Array.isArray(e)){const t=[];for(const s in e)e.hasOwnProperty(s)&&t.push({name:s,value:e[s]});e=t}return e.reduce(((e,{name:t,value:s,dataType:i})=>{if("string"!=typeof t||t.length>100||!t.match(/^[a-z0-9_]+$/))return this.warn("Userflow.identify: Invalid trait name (must be string, no more than 100 characters, and only consist of a-z, 0-9 and underscores). The trait will be ignored. Name was:",t),e;if("string"==typeof s);else if("boolean"==typeof s)i||(i="boolean"),s=s?"true":"false";else{if("number"!=typeof s)return this.warn(`userflow.identify: The value of trait '${t}' is invalid (must be a string, a boolean or a number). The trait will be ignored. Value was:`,s),e;i||(i=Number.isInteger(s)?"integer":"decimal"),s=String(s)}let n=null;if(i)switch(i){case"string":n=v.STRING;break;case"boolean":n=v.BOOLEAN;break;case"integer":case"decimal":n=v.NUMBER;break;case"datetime":n=v.DATETIME;break;default:return this.warn(`userflow.identify: The data type of trait '${t}' is invalid (must be a 'string', 'boolean', 'integer', 'decimal' or 'datetime'). The trait will be ignored. Data type was:`,i),e}return e[t]={set:s,dataType:n},e}),{})}async track(e,t={},{userOnly:s}={}){Je(`track '${e}'`,t),this.ensureIdentified(),await this.send({kind:"TrackEvent",userOnly:!!s,name:e,attributes:this.normalizeEventAttributes(t)},{batch:!0})}normalizeEventAttributes(e){const t=this.normalizeAttributes(e);for(const s in t){if(!t.hasOwnProperty(s))continue;const e=t[s];if(null!=e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Array.isArray(e)&&!("set"in e))throw new o(`Userflow: Invalid value for '${s}' attribute. Event attributes only support literal values, list values and 'set' changes.`)}return t}onFirstIdentify(){this.onFirstIdentifyRun||(this.onFirstIdentifyRun=!0,this.onFirstIdentifyTimeout=window.setTimeout((()=>{this.trackPageViewed(),this.firstIdentifyCallback?(this.firstIdentifyCallback(),this.firstIdentifyCallback=null):this.checkUrlForStartFlow()}),0))}onceIdentified(e){this.isIdentified()?e():this.firstIdentifyCallback=e}checkUrlForStartFlow(){const e=new URL(d()),t=e.searchParams.get("userflow")||e.searchParams.get("studio1_flow")||e.searchParams.get("studio1_walkthrough");t&&(Je(`url contained flow ${t}`),this.startFlow({flowId:t,startReason:L.LINK,batch:!0}),e.searchParams.delete("userflow"),e.searchParams.delete("studio1_flow"),e.searchParams.delete("studio1_walkthrough"),window.history.replaceState({},"",e.toString()),this.clientContext=this.buildClientContext(),this.pushUpdateClientContext())}flushUrlChange(){const e=this.buildClientContext();this.clientContext&&e.pageUrl===this.clientContext.pageUrl||(this.clientContext=e,this.pushUpdateClientContext(),this.trackPageViewed(),this.checkUrlForStartFlow())}async trackPageViewed(){this.pageTrackingDisabled||this.track("page_viewed",{})}buildClientContext(){return{pageUrl:ze(),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}}pushUpdateClientContext(){this.send({kind:"UpdateClientContext",clientContext:this.clientContext},{batch:!0})}ackCompletedTask(e){this.unackedTasks.delete(e)}taskIsUnacked(e){return this.unackedTasks.has(e)}isIdentified(){return null!=this.externalId}on(e,t){let s=this.listeners.get(e);s||(s=new Set,this.listeners.set(e,s)),s.add(t)}off(e,t){const s=this.listeners.get(e);s&&s.delete(t)}emit(e,...t){const s=this.listeners.get(e);if(s){Array.from(s).forEach((e=>e(...t)))}}observeUserActivity(){document.addEventListener("mouseover",this.onUserActivity),document.addEventListener("pointerdown",this.onUserActivity),document.addEventListener("keydown",this.onUserActivity)}unobserveUserActivity(){document.removeEventListener("mouseover",this.onUserActivity),document.removeEventListener("pointerdown",this.onUserActivity),document.removeEventListener("keydown",this.onUserActivity)}reset(){Je("reset"),this.externalId=null,this.groupId=null,this.sessionStorageState=null,this.setFlowSession(null,0),this.setChecklistSession(null,0),this.setResourceCenterSession(null),this.launcherSessions=[],this.activeLauncherFlowId=null,this.notifications=[],this.unackedTasks=new Set,this.onFirstIdentifyRun=!1,window.clearTimeout(this.onFirstIdentifyTimeout),this.onFirstIdentifyTimeout=void 0,this.clientContext=null,this.unobserveUserActivity(),window.clearTimeout(this.flushUrlChangeTimeout),this.flushUrlChangeTimeout=void 0,this.clientConditions.forEach(((e,t)=>{this.untrackClientCondition(t)})),this.firstIdentifyCallback=null,this.testUserIdentified=!1,a.removeItem("anonymousId"),this.unmountUI(),this.disconnect(),this.inBatch=!1,window.clearTimeout(this.endBatchTimeout),this.endBatchTimeout=void 0,this.clientClock=1,this.serverClock=1}async startFlow({flowId:e,stepCvid:t,startReason:s,once:i,batch:n,replaceCurrent:o}){if(this.ensureIdentified(),o&&this.flowSession&&this.endFlow(this.flowSession,{endReason:m.REPLACED,batch:!0}),Je(`startFlow ${e}`,{startReason:s}),this.checklistSession?.flow.id===e)return Je("startFlow matches current checklist, so showing it instead"),void this.showChecklist();const r={kind:"StartFlow",flowId:e,stepCvid:t,startReason:s,once:!!i};await this.send(r,{batch:n})}async startFlowWithToken(e){this.ensureIdentified(),Je("startFlowWithToken",{token:e}),await this.send({kind:"StartFlowWithToken",token:e},{batch:!0})}optimisticClockUIUpdate(e){this.clientClock++,e(),this.toggleUI()}async showChecklist(){this.resourceCenterEmbedsChecklist()?this.openResourceCenter():(this.unmarkExpandPending(),this.checklistSession&&!this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!0,this.toggleUI(),c.setItem(`checklistExpanded:${this.checklistSession.id}`,"1"),await this.send({kind:"ShowChecklist",sessionId:this.checklistSession.id},{batch:!0})))}async hideChecklist(){this.resourceCenterEmbedsChecklist()?this.closeResourceCenter():this.checklistSession&&this.checklistExpanded&&(this.ensureIdentified(),this.checklistExpanded=!1,this.toggleUI(),c.removeItem(`checklistExpanded:${this.checklistSession.id}`),await this.send({kind:"HideChecklist",sessionId:this.checklistSession.id},{batch:!0}))}async unmarkExpandPending(){this.checklistSession&&this.checklistExpandPending&&(this.checklistExpandPending=!1,await this.send({kind:"UnmarkExpandPending",sessionId:this.checklistSession.id},{batch:!0}))}async openResourceCenter(){this.resourceCenterEmbedsChecklist()&&this.unmarkExpandPending(),this.resourceCenterSession&&!this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!0,this.toggleUI(),this.emit("resourceCenterChanged"),c.setItem(`resourceCenterOpen:${this.resourceCenterSession.id}`,"1"),await this.send({kind:"OpenResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}async closeResourceCenter(){this.resourceCenterSession&&this.resourceCenterOpen&&(this.ensureIdentified(),this.resourceCenterOpen=!1,this.toggleUI(),this.emit("resourceCenterChanged"),c.removeItem(`resourceCenterOpen:${this.resourceCenterSession.id}`),await this.send({kind:"CloseResourceCenter",sessionId:this.resourceCenterSession.id},{batch:!0}))}toggleResourceCenter(){this.resourceCenterOpen?this.closeResourceCenter():this.openResourceCenter()}setResourceCenterLauncherHidden(e){this.resourceCenterLauncherHidden=e,this.toggleUI()}getResourceCenterState(){if(!this.resourceCenterSession)return null;const e=this.resourceCenterEmbedsChecklist(),{checklistSession:t}=this;return{isOpen:this.resourceCenterOpen,hasChecklist:e,uncompletedChecklistTaskCount:e&&t?qe(t):0}}resourceCenterEmbedsChecklist(){const e=this.resourceCenterSession;return!!e&&!!e.version.resourceCenter?.blocks.some((e=>e.type===Ie.CHECKLIST))}async endFlow(e,{endReason:t,batch:s}){this.ensureIdentified(),this.optimisticClockUIUpdate((()=>{const{clientClock:t}=this;this.flowSession?.id===e.id&&this.setFlowSession(null,t),this.checklistSession?.id===e.id&&this.setChecklistSession(null,t),this.resourceCenterSession?.id===e.id&&this.setResourceCenterSession(null)}));const{flow:i}=e,n={id:i.id,type:i.type.toLowerCase()};i.type===_.CHECKLIST?this.emit("checklistEnded",{checklist:n,endReason:t}):i.type===_.FLOW&&this.emit("flowEnded",{flow:n,endReason:t});const o={kind:"EndFlow",sessionId:e.id,endReason:t};await this.send(o,{batch:s})}async goToStep(e,t){Je("goToStep",e.id,t.name||t.id),this.ensureIdentified();const s=this.send({kind:"GoToStep",sessionId:e.id,stepId:t.id});e.currentStep=t,this.emit("gotostep",{session:e,step:t}),await s}async endAllFlows(){Je("endAllFlows"),this.optimisticClockUIUpdate((()=>{const{clientClock:e}=this;this.setFlowSession(null,e),this.setChecklistSession(null,e)})),await this.send({kind:"EndAllFlows"})}async endChecklist(){Je("endChecklist");const e=this.checklistSession||this.flowSession;e?.flow.type===_.CHECKLIST&&this.endFlow(e,{endReason:m.USERFLOWJS})}setFlowSession(e,t=this.clientClock){const s=this.flowSession;this.flowSession=e,this.flowSessionClock=t,e&&!s&&(this.hideChecklist(),this.closeResourceCenter()),null==e&&this.originalActiveElement&&("function"==typeof this.originalActiveElement.focus&&this.originalActiveElement.focus(),this.originalActiveElement=void 0)}setChecklistSession(e,t=this.clientClock){const s=this.checklistSession;this.checklistSession=e,this.checklistSessionClock=t,null===e&&(this.checklistExpanded=!1,this.checklistExpandPending=!1),e&&e.id!==s?.id&&(this.checklistExpanded=!!c.getItem(`checklistExpanded:${e.id}`),e.expandPending&&(this.checklistExpandPending=!0)),this.emit("checklistChanged"),this.emit("resourceCenterChanged")}setResourceCenterSession(e){const t=this.resourceCenterSession;this.resourceCenterSession=e,null===e&&(this.resourceCenterOpen=!1),t&&t.id!==e?.id&&c.removeItem(`resourceCenterOpen:${t.id}`),e&&e.id!==t?.id&&(this.resourceCenterOpen=!!c.getItem(`resourceCenterOpen:${e.id}`)),this.emit("resourceCenterChanged")}launcherSeen(e){this.send({kind:"StartFlow",flowId:e,startReason:L.LAUNCHER_SEEN,once:!1})}activateLauncher(e){const t=this.activeLauncherFlowId&&this.launcherSessions.find((e=>e.flow.id===this.activeLauncherFlowId));t&&this.deactivateLauncher(t),this.activeLauncherFlowId=e.flow.id,this.toggleUI(),this.send({kind:"ActivateLauncher",flowId:e.flow.id})}deactivateLauncher(e){const{launcher:t}=e.version;e.flow.id===this.activeLauncherFlowId&&(t?.dismissOn===ye.DEACTIVATE?this.dismissLauncher(e,{endReason:m.LAUNCHER_DEACTIVATED}):(this.activeLauncherFlowId=null,this.toggleUI()))}dismissLauncher(e,{endReason:t}){const s=e.flow.id;this.removeLauncher(s),this.toggleUI(),this.send({kind:"DismissLauncher",flowId:s,endReason:t})}removeLauncher(e){const t=this.launcherSessions.findIndex((t=>t.flow.id===e));return-1!==t&&(this.launcherSessions=[...this.launcherSessions.slice(0,t),...this.launcherSessions.slice(t+1)],e===this.activeLauncherFlowId&&(this.activeLauncherFlowId=null),!0)}async toggleUI(){this.flowSession||!this.checklistExpandPending&&!this.checklistSession?.version.checklist?.tasks.some((e=>this.taskIsUnacked(e.cvid)))||this.showChecklist(),this.emit("uistatechange"),this.shouldBeMounted()?await this.mountUI():this.unmountUI()}shouldBeMounted(){if(this.uiDisabled)return!1;return!!this.getSessionStorageState().activeApp||!!this.flowSession||!!this.checklistSession&&(this.checklistExpanded||!!this.checklistSession?.version.checklist?.launcherEnabled)||!!this.resourceCenterSession&&(this.resourceCenterOpen||!this.resourceCenterLauncherHidden)||this.launcherSessions.length>0||this.notifications.length>0}async mountUI(){if(!this.ui){const e=await this.createUI();this.shouldBeMounted()&&!this.ui&&(Je("mount UI"),this.ui=e,this.ui.mount())}}unmountUI(){this.ui&&(Je("unmount UI"),this.ui.unmount(),this.ui=null)}remount(){this.unmountUI(),this.toggleUI()}async createUI(){try{const e=n((()=>import("./ui.js")),[new URL("ui.js",import.meta.url).toString(),new URL("vendor.react.js",import.meta.url).toString(),new URL("vendor.object-assign.js",import.meta.url).toString(),new URL("vendor.react-dom.js",import.meta.url).toString(),new URL("vendor.scheduler.js",import.meta.url).toString(),new URL("client-context.js",import.meta.url).toString(),new URL("vendor.i18next.js",import.meta.url).toString(),new URL("vendor.react-i18next.js",import.meta.url).toString(),new URL("vendor.babel.runtime.js",import.meta.url).toString(),new URL("vendor.phoenix.js",import.meta.url).toString(),new URL("vendor.uuid.js",import.meta.url).toString()]);this.resourceCenterSession&&Qe();const{RealUI:t}=await e;return new t(this)}catch(e){throw this.reportCspIssue(),e}}async trackClientCondition(e){if(this.clientConditions.has(e.id))return;Je("track client condition",e),this.clientConditions.set(e.id,{condition:e,isTrue:null});const{conditionTypes:t}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.u}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),s=t[e.type],i=this.clientConditions.get(e.id);i&&(i.untrack=s.track({sessionData:new et([]),condition:e,callback:t=>{i.isTrue!==t&&(Je("client condition truthiness changed",t,i.condition),i.isTrue=t,this.send({kind:"ToggleClientCondition",conditionId:e.id,isTrue:t},{batch:!0}))}}))}untrackClientCondition(e){const t=this.clientConditions.get(e);t&&(Je("untrack client condition",t.condition),t.untrack&&t.untrack(),this.clientConditions.delete(e))}async addTracker(e){let t=this.trackers.get(e.flowId);t?t.tracker=e:this.trackers.set(e.flowId,{tracker:e,isTrue:!1});const{conditionTypes:s}=await n((()=>import("./flow-condition-types.js").then((function(e){return e.u}))),[new URL("flow-condition-types.js",import.meta.url).toString(),new URL("vendor.date-fns.js",import.meta.url).toString()]),i=this.trackers.get(e.flowId);if(!i)return;const{tracker:o}=i,{condition:r}=o,a=s[r.type];i.untrack&&i.untrack(),i.untrack=a.track({sessionData:new et(o.data),condition:r,flipBackEvents:!0,callback:e=>{const t=i.isTrue;i.isTrue=e,!t&&e&&this.send({kind:"TrackTrackerEvent",token:o.token},{batch:!0})}}),this.emit("private:trackerStarted")}removeTracker(e){const t=this.trackers.get(e);t&&(t.untrack&&t.untrack(),this.trackers.delete(e),this.emit("private:trackerStopped"))}reportCspIssue(){const e=this.getSessionStorageState();!this.testUserIdentified&&!e.activeApp||this.cspIssueReported||(this.cspIssueReported=!0,Je("csp issue detected"),f(window,{kind:"userflow:crxCspIssueDetected"}))}getAudio(){return this.audio||(this.audio=new Audio),this.audio}playAudio(e){if(document.hidden)return;const t=this.getAudio();e&&(t.src=e);const s=t.play();this.audioReady=!0,s&&s.catch((e=>{e.name}))}pauseAudio(){const e=this.audio;e&&!e.paused&&e.pause()}async getStepSpeech(e,t){return(await this.send({kind:"GetStepSpeechV2",syntheticVoice:e,text:t})).url}featureFlagEnabled(e){return this.featureFlags.has(e)}showNotification(e,t,s){const i={id:++this.notificationIdCounter,label:e,message:t,type:s};this.notifications=[...this.notifications,i],this.toggleUI()}dismissNotification(e){this.notifications=this.notifications.filter((t=>t.id!==e)),this.toggleUI()}warn(...e){console.warn(...e)}nextRef(){return this.refCounter++}}if(void 0===window.userflow||window.userflow._stubbed){const e=Object.assign(window.userflow||{},function(){const e=new it;return{_stubbed:!1,init(t){e.init(t)},identify:(t,s={},i={})=>e.identify(t,s,i),identifyAnonymous:(t={},s={})=>e.identifyAnonymous(t,s),isIdentified:()=>e.isIdentified(),updateUser:(t,s={})=>e.updateUser(t,s),group:(t,s={},i={})=>e.group(t,s,i),updateGroup:(t,s={})=>e.updateGroup(t,s),track:(t,s={},i={})=>e.track(t,s,i),start:(t,{once:s}={})=>e.startFlow({flowId:t,startReason:L.USERFLOWJS,once:s}),startFlow:e=>(console.warn("Userflow.js: userflow.startFlow() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),startWalk:e=>(console.warn("Userflow.js: userflow.startWalk() has been deprecated. Use userflow.start() instead."),window.userflow.start(e)),endAll:()=>e.endAllFlows(),endChecklist:()=>e.endChecklist(),endAllFlows:()=>window.userflow.endAll(),async endFlow(){console.warn("Userflow.js: userflow.endFlow() has been deprecated and no longer has any effect.")},async endWalk(){console.warn("Userflow.js: userflow.endWalk() has been deprecated and no longer has any effect.")},openResourceCenter(){e.openResourceCenter()},closeResourceCenter(){e.closeResourceCenter()},toggleResourceCenter(){e.toggleResourceCenter()},setResourceCenterLauncherHidden(t){e.setResourceCenterLauncherHidden(t)},getResourceCenterState:()=>e.getResourceCenterState(),setWalkPosition(){console.warn("Userflow.js: userflow.setWalkPosition() has been deprecated and no longer has any effect.")},reset(){e.reset()},remount(){e.remount()},on(t,s){e.on(t,s)},off(t,s){e.off(t,s)},setCustomInputSelector(e){console.warn("Userflow.js: userflow.setCustomInputSelector() has been deprecated. Use userflow.registerCustomInput() instead. See docs: https://userflow.com/docs/userflow-js"),e&&Ve.customInputs.push({cssSelector:e})},registerCustomInput(e,t){Ve.customInputs.push({cssSelector:e,getValue:t})},setCustomNavigate(e){Ve.customNavigate=e},setUrlFilter(e){Ve.urlFilter=e},setInferenceAttributeNames(e){Ve.inferenceAttributeNames=e},setInferenceAttributeFilter(e,t){Ve.inferenceAttributeFilters[e]=je(t)},setInferenceClassNameFilter(e){Ve.inferenceClassNameFilters=je(e)},setScrollPadding(e){Ve.scrollPadding=e},setCustomScrollIntoView(e){Ve.customScrollIntoView=e},prepareAudio(){e.playAudio(null)},setShadowDomEnabled(e){console.warn("Userflow.js: userflow.setShadowDomEnabled() has been deprecated. Please remove this call from your Userflow.js snippet. Shadow DOM is supported by default now.")},setPageTrackingDisabled(t){e.pageTrackingDisabled=t},setBaseZIndex(e){Ve.baseZIndex=e},_setTargetEnv(t){e.setTargetEnv(t)}}}());window.userflow=e,window.studio1=e,function(){const e=window.userflow,t=window.USERFLOWJS_QUEUE;if(delete window.USERFLOWJS_QUEUE,!t||0===t.length)return;Je(`processing ${t.length} items in the queue`);for(const[s,i,n]of t){if("function"!=typeof e[s]){console.error(`Userflow.js: Invalid method '${s}' in queue`);continue}const t=e[s](...n);i&&t&&"function"==typeof t.then&&t.then(i.resolve,i.reject)}Je("queue processed")}()}export{W as A,V as B,me as C,X as D,m as E,P as F,ne as G,ce as H,K as I,de as J,Le as K,Me as L,Q as M,ve as N,Pe as O,_e as P,De as Q,Qe as R,L as S,tt as T,o as U,re as V,y as W,n as _,B as a,M as b,Ve as c,Je as d,D as e,H as f,ze as g,Ie as h,c as i,qe as j,se as k,ee as l,ue as m,Ae as n,g as o,_ as p,d as q,fe as r,l as s,Ke as t,p as u,we as v,ge as w,et as x,Y as y,a as z};export default window.userflow;
|