@justifi/webcomponents 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +26 -2
  2. package/changelog-template.hbs +3 -34
  3. package/dist/cjs/{Payment-5781460e.js → Payment-ac4dea02.js} +1 -1
  4. package/dist/cjs/index.esm-8df4906e.js +2092 -0
  5. package/dist/cjs/justifi-bank-account-form.cjs.entry.js +2 -2
  6. package/dist/cjs/justifi-billing-form_2.cjs.entry.js +14 -2104
  7. package/dist/cjs/justifi-business-address.cjs.entry.js +66 -0
  8. package/dist/cjs/justifi-card-form.cjs.entry.js +2 -2
  9. package/dist/cjs/justifi-payment-form.cjs.entry.js +4 -4
  10. package/dist/cjs/justifi-payment-method-form.cjs.entry.js +14 -14
  11. package/dist/cjs/justifi-payments-list.cjs.entry.js +9 -9
  12. package/dist/cjs/loader.cjs.js +1 -1
  13. package/dist/cjs/select-input_2.cjs.entry.js +2 -4
  14. package/dist/cjs/webcomponents.cjs.js +1 -1
  15. package/dist/collection/api/Api.js +3 -5
  16. package/dist/collection/api/Payment.js +1 -1
  17. package/dist/collection/api/mockData/MockPayments.js +24 -22
  18. package/dist/collection/collection-manifest.json +1 -0
  19. package/dist/collection/components/bank-account-form/bank-account-form.js +2 -2
  20. package/dist/collection/components/bank-account-form/bank-account-form.stories.js +13 -9
  21. package/dist/collection/components/bank-account-form/example.js +54 -0
  22. package/dist/collection/components/billing-form/billing-form-schema.js +1 -4
  23. package/dist/collection/components/billing-form/billing-form.js +7 -2
  24. package/dist/collection/components/billing-form/billing-form.stories.js +4 -4
  25. package/dist/collection/components/billing-form/example.js +26 -0
  26. package/dist/collection/components/billing-form/state-options.js +61 -61
  27. package/dist/collection/components/business-address/business-address-schema.js +13 -0
  28. package/dist/collection/components/business-address/business-address.css +2325 -0
  29. package/dist/collection/components/business-address/business-address.js +99 -0
  30. package/dist/collection/components/card-form/card-form.js +2 -2
  31. package/dist/collection/components/card-form/card-form.stories.js +11 -7
  32. package/dist/collection/components/card-form/example.js +59 -0
  33. package/dist/collection/components/payment-form/example.js +23 -0
  34. package/dist/collection/components/payment-form/payment-form.css +2 -0
  35. package/dist/collection/components/payment-form/payment-form.js +2 -2
  36. package/dist/collection/components/payment-form/payment-form.stories.js +15 -12
  37. package/dist/collection/components/payment-form/payment-method-selector.css +5 -0
  38. package/dist/collection/components/payment-form/payment-method-selector.js +2 -3
  39. package/dist/collection/components/payment-method-form/get-computed-theme.js +1 -1
  40. package/dist/collection/components/payment-method-form/message-event-types.js +1 -1
  41. package/dist/collection/components/payment-method-form/payment-method-form.js +5 -8
  42. package/dist/collection/components/payments-list/payments-list.js +4 -4
  43. package/dist/collection/components/select-input/select-input.js +3 -4
  44. package/dist/collection/components/text-input/text-input.js +2 -3
  45. package/dist/collection/utils/utils.js +1 -5
  46. package/dist/components/Payment.js +1 -1
  47. package/dist/components/billing-form.js +4 -2093
  48. package/dist/components/index.d.ts +1 -0
  49. package/dist/components/index.js +1 -0
  50. package/dist/components/justifi-bank-account-form.js +2 -2
  51. package/dist/components/justifi-business-address.d.ts +11 -0
  52. package/dist/components/justifi-business-address.js +96 -0
  53. package/dist/components/justifi-card-form.js +2 -2
  54. package/dist/components/justifi-payment-form.js +3 -3
  55. package/dist/components/justifi-payments-list.js +8 -8
  56. package/dist/components/payment-method-form.js +14 -14
  57. package/dist/components/payment-method-selector.js +3 -4
  58. package/dist/components/select-input2.js +1 -2
  59. package/dist/components/state-options.js +2088 -0
  60. package/dist/components/text-input2.js +1 -2
  61. package/dist/esm/{Payment-3f7570a8.js → Payment-c86e1e84.js} +1 -1
  62. package/dist/esm/index.esm-c6a89005.js +2088 -0
  63. package/dist/esm/justifi-bank-account-form.entry.js +2 -2
  64. package/dist/esm/justifi-billing-form_2.entry.js +7 -2097
  65. package/dist/esm/justifi-business-address.entry.js +62 -0
  66. package/dist/esm/justifi-card-form.entry.js +2 -2
  67. package/dist/esm/justifi-payment-form.entry.js +4 -4
  68. package/dist/esm/justifi-payment-method-form.entry.js +14 -14
  69. package/dist/esm/justifi-payments-list.entry.js +9 -9
  70. package/dist/esm/loader.js +1 -1
  71. package/dist/esm/select-input_2.entry.js +2 -4
  72. package/dist/esm/webcomponents.js +1 -1
  73. package/dist/types/components/bank-account-form/bank-account-form.d.ts +5 -5
  74. package/dist/types/components/billing-form/billing-form.d.ts +5 -0
  75. package/dist/types/components/business-address/business-address-schema.d.ts +23 -0
  76. package/dist/types/components/business-address/business-address.d.ts +11 -0
  77. package/dist/types/components/card-form/card-form.d.ts +5 -5
  78. package/dist/types/components/payment-method-form/get-computed-theme.d.ts +1 -1
  79. package/dist/types/components.d.ts +19 -4
  80. package/dist/webcomponents/p-039e3540.entry.js +1 -0
  81. package/dist/webcomponents/{p-64b19598.entry.js → p-11e5bef9.entry.js} +1 -1
  82. package/dist/webcomponents/p-20732337.js +1 -0
  83. package/dist/webcomponents/p-5b5e8351.entry.js +1 -0
  84. package/dist/webcomponents/{p-bf40b1ca.entry.js → p-7747c086.entry.js} +1 -1
  85. package/dist/webcomponents/{p-48bd3d00.entry.js → p-b061da77.entry.js} +1 -1
  86. package/dist/webcomponents/webcomponents.css +1 -1
  87. package/dist/webcomponents/webcomponents.esm.js +1 -1
  88. package/package.json +8 -5
  89. package/readme.md +7 -3
  90. package/dist/webcomponents/p-2530278e.entry.js +0 -1
  91. /package/dist/webcomponents/{p-21e020a8.js → p-1ca0646b.js} +0 -0
@@ -3,2113 +3,24 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-051b6dd0.js');
6
-
7
- /**
8
- * Based on Kendo UI Core expression code <https://github.com/telerik/kendo-ui-core#license-information>
9
- */
10
-
11
- function Cache(maxSize) {
12
- this._maxSize = maxSize;
13
- this.clear();
14
- }
15
- Cache.prototype.clear = function () {
16
- this._size = 0;
17
- this._values = Object.create(null);
18
- };
19
- Cache.prototype.get = function (key) {
20
- return this._values[key]
21
- };
22
- Cache.prototype.set = function (key, value) {
23
- this._size >= this._maxSize && this.clear();
24
- if (!(key in this._values)) this._size++;
25
-
26
- return (this._values[key] = value)
27
- };
28
-
29
- var SPLIT_REGEX = /[^.^\]^[]+|(?=\[\]|\.\.)/g,
30
- DIGIT_REGEX = /^\d+$/,
31
- LEAD_DIGIT_REGEX = /^\d/,
32
- SPEC_CHAR_REGEX = /[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,
33
- CLEAN_QUOTES_REGEX = /^\s*(['"]?)(.*?)(\1)\s*$/,
34
- MAX_CACHE_SIZE = 512;
35
-
36
- var pathCache = new Cache(MAX_CACHE_SIZE),
37
- setCache = new Cache(MAX_CACHE_SIZE),
38
- getCache = new Cache(MAX_CACHE_SIZE);
39
-
40
- var propertyExpr = {
41
- Cache: Cache,
42
-
43
- split: split,
44
-
45
- normalizePath: normalizePath,
46
-
47
- setter: function (path) {
48
- var parts = normalizePath(path);
49
-
50
- return (
51
- setCache.get(path) ||
52
- setCache.set(path, function setter(obj, value) {
53
- var index = 0;
54
- var len = parts.length;
55
- var data = obj;
56
-
57
- while (index < len - 1) {
58
- var part = parts[index];
59
- if (
60
- part === '__proto__' ||
61
- part === 'constructor' ||
62
- part === 'prototype'
63
- ) {
64
- return obj
65
- }
66
-
67
- data = data[parts[index++]];
68
- }
69
- data[parts[index]] = value;
70
- })
71
- )
72
- },
73
-
74
- getter: function (path, safe) {
75
- var parts = normalizePath(path);
76
- return (
77
- getCache.get(path) ||
78
- getCache.set(path, function getter(data) {
79
- var index = 0,
80
- len = parts.length;
81
- while (index < len) {
82
- if (data != null || !safe) data = data[parts[index++]];
83
- else return
84
- }
85
- return data
86
- })
87
- )
88
- },
89
-
90
- join: function (segments) {
91
- return segments.reduce(function (path, part) {
92
- return (
93
- path +
94
- (isQuoted(part) || DIGIT_REGEX.test(part)
95
- ? '[' + part + ']'
96
- : (path ? '.' : '') + part)
97
- )
98
- }, '')
99
- },
100
-
101
- forEach: function (path, cb, thisArg) {
102
- forEach(Array.isArray(path) ? path : split(path), cb, thisArg);
103
- },
104
- };
105
-
106
- function normalizePath(path) {
107
- return (
108
- pathCache.get(path) ||
109
- pathCache.set(
110
- path,
111
- split(path).map(function (part) {
112
- return part.replace(CLEAN_QUOTES_REGEX, '$2')
113
- })
114
- )
115
- )
116
- }
117
-
118
- function split(path) {
119
- return path.match(SPLIT_REGEX) || ['']
120
- }
121
-
122
- function forEach(parts, iter, thisArg) {
123
- var len = parts.length,
124
- part,
125
- idx,
126
- isArray,
127
- isBracket;
128
-
129
- for (idx = 0; idx < len; idx++) {
130
- part = parts[idx];
131
-
132
- if (part) {
133
- if (shouldBeQuoted(part)) {
134
- part = '"' + part + '"';
135
- }
136
-
137
- isBracket = isQuoted(part);
138
- isArray = !isBracket && /^\d+$/.test(part);
139
-
140
- iter.call(thisArg, part, isBracket, isArray, idx, parts);
141
- }
142
- }
143
- }
144
-
145
- function isQuoted(str) {
146
- return (
147
- typeof str === 'string' && str && ["'", '"'].indexOf(str.charAt(0)) !== -1
148
- )
149
- }
150
-
151
- function hasLeadingNumber(part) {
152
- return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)
153
- }
154
-
155
- function hasSpecialChars(part) {
156
- return SPEC_CHAR_REGEX.test(part)
157
- }
158
-
159
- function shouldBeQuoted(part) {
160
- return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))
161
- }
162
-
163
- const reWords = /[A-Z\xc0-\xd6\xd8-\xde]?[a-z\xdf-\xf6\xf8-\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde]|$)|(?:[A-Z\xc0-\xd6\xd8-\xde]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]|[A-Z\xc0-\xd6\xd8-\xde](?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])|$)|[A-Z\xc0-\xd6\xd8-\xde]?(?:[a-z\xdf-\xf6\xf8-\xff]|[^\ud800-\udfff\xac\xb1\xd7\xf7\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xbf\u2000-\u206f \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\d+\u2700-\u27bfa-z\xdf-\xf6\xf8-\xffA-Z\xc0-\xd6\xd8-\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\xc0-\xd6\xd8-\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\d*(?:1ST|2ND|3RD|(?![123])\dTH)(?=\b|[a-z_])|\d*(?:1st|2nd|3rd|(?![123])\dth)(?=\b|[A-Z_])|\d+|(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?)*/g;
164
-
165
- const words = (str) => str.match(reWords) || [];
166
-
167
- const upperFirst = (str) => str[0].toUpperCase() + str.slice(1);
168
-
169
- const join = (str, d) => words(str).join(d).toLowerCase();
170
-
171
- const camelCase = (str) =>
172
- words(str).reduce(
173
- (acc, next) =>
174
- `${acc}${
175
- !acc
176
- ? next.toLowerCase()
177
- : next[0].toUpperCase() + next.slice(1).toLowerCase()
178
- }`,
179
- '',
180
- );
181
-
182
- const pascalCase = (str) => upperFirst(camelCase(str));
183
-
184
- const snakeCase = (str) => join(str, '_');
185
-
186
- const kebabCase = (str) => join(str, '-');
187
-
188
- const sentenceCase = (str) => upperFirst(join(str, ' '));
189
-
190
- const titleCase = (str) => words(str).map(upperFirst).join(' ');
191
-
192
- var tinyCase = {
193
- words,
194
- upperFirst,
195
- camelCase,
196
- pascalCase,
197
- snakeCase,
198
- kebabCase,
199
- sentenceCase,
200
- titleCase,
201
- };
202
-
203
- /**
204
- * Topological sorting function
205
- *
206
- * @param {Array} edges
207
- * @returns {Array}
208
- */
209
-
210
- var toposort_1 = function(edges) {
211
- return toposort(uniqueNodes(edges), edges)
212
- };
213
-
214
- var array$1 = toposort;
215
-
216
- function toposort(nodes, edges) {
217
- var cursor = nodes.length
218
- , sorted = new Array(cursor)
219
- , visited = {}
220
- , i = cursor
221
- // Better data structures make algorithm much faster.
222
- , outgoingEdges = makeOutgoingEdges(edges)
223
- , nodesHash = makeNodesHash(nodes);
224
-
225
- // check for unknown nodes
226
- edges.forEach(function(edge) {
227
- if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {
228
- throw new Error('Unknown node. There is an unknown node in the supplied edges.')
229
- }
230
- });
231
-
232
- while (i--) {
233
- if (!visited[i]) visit(nodes[i], i, new Set());
234
- }
235
-
236
- return sorted
237
-
238
- function visit(node, i, predecessors) {
239
- if(predecessors.has(node)) {
240
- var nodeRep;
241
- try {
242
- nodeRep = ", node was:" + JSON.stringify(node);
243
- } catch(e) {
244
- nodeRep = "";
245
- }
246
- throw new Error('Cyclic dependency' + nodeRep)
247
- }
248
-
249
- if (!nodesHash.has(node)) {
250
- throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))
251
- }
252
-
253
- if (visited[i]) return;
254
- visited[i] = true;
255
-
256
- var outgoing = outgoingEdges.get(node) || new Set();
257
- outgoing = Array.from(outgoing);
258
-
259
- if (i = outgoing.length) {
260
- predecessors.add(node);
261
- do {
262
- var child = outgoing[--i];
263
- visit(child, nodesHash.get(child), predecessors);
264
- } while (i)
265
- predecessors.delete(node);
266
- }
267
-
268
- sorted[--cursor] = node;
269
- }
270
- }
271
-
272
- function uniqueNodes(arr){
273
- var res = new Set();
274
- for (var i = 0, len = arr.length; i < len; i++) {
275
- var edge = arr[i];
276
- res.add(edge[0]);
277
- res.add(edge[1]);
278
- }
279
- return Array.from(res)
280
- }
281
-
282
- function makeOutgoingEdges(arr){
283
- var edges = new Map();
284
- for (var i = 0, len = arr.length; i < len; i++) {
285
- var edge = arr[i];
286
- if (!edges.has(edge[0])) edges.set(edge[0], new Set());
287
- if (!edges.has(edge[1])) edges.set(edge[1], new Set());
288
- edges.get(edge[0]).add(edge[1]);
289
- }
290
- return edges
291
- }
292
-
293
- function makeNodesHash(arr){
294
- var res = new Map();
295
- for (var i = 0, len = arr.length; i < len; i++) {
296
- res.set(arr[i], i);
297
- }
298
- return res
299
- }
300
- toposort_1.array = array$1;
301
-
302
- const toString = Object.prototype.toString;
303
- const errorToString = Error.prototype.toString;
304
- const regExpToString = RegExp.prototype.toString;
305
- const symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';
306
- const SYMBOL_REGEXP = /^Symbol\((.*)\)(.*)$/;
307
- function printNumber(val) {
308
- if (val != +val) return 'NaN';
309
- const isNegativeZero = val === 0 && 1 / val < 0;
310
- return isNegativeZero ? '-0' : '' + val;
311
- }
312
- function printSimpleValue(val, quoteStrings = false) {
313
- if (val == null || val === true || val === false) return '' + val;
314
- const typeOf = typeof val;
315
- if (typeOf === 'number') return printNumber(val);
316
- if (typeOf === 'string') return quoteStrings ? `"${val}"` : val;
317
- if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']';
318
- if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');
319
- const tag = toString.call(val).slice(8, -1);
320
- if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val);
321
- if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']';
322
- if (tag === 'RegExp') return regExpToString.call(val);
323
- return null;
324
- }
325
- function printValue(value, quoteStrings) {
326
- let result = printSimpleValue(value, quoteStrings);
327
- if (result !== null) return result;
328
- return JSON.stringify(value, function (key, value) {
329
- let result = printSimpleValue(this[key], quoteStrings);
330
- if (result !== null) return result;
331
- return value;
332
- }, 2);
333
- }
334
-
335
- function toArray(value) {
336
- return value == null ? [] : [].concat(value);
337
- }
338
-
339
- let strReg = /\$\{\s*(\w+)\s*\}/g;
340
- class ValidationError extends Error {
341
- static formatError(message, params) {
342
- const path = params.label || params.path || 'this';
343
- if (path !== params.path) params = Object.assign({}, params, {
344
- path
345
- });
346
- if (typeof message === 'string') return message.replace(strReg, (_, key) => printValue(params[key]));
347
- if (typeof message === 'function') return message(params);
348
- return message;
349
- }
350
- static isError(err) {
351
- return err && err.name === 'ValidationError';
352
- }
353
- constructor(errorOrErrors, value, field, type) {
354
- super();
355
- this.value = void 0;
356
- this.path = void 0;
357
- this.type = void 0;
358
- this.errors = void 0;
359
- this.params = void 0;
360
- this.inner = void 0;
361
- this.name = 'ValidationError';
362
- this.value = value;
363
- this.path = field;
364
- this.type = type;
365
- this.errors = [];
366
- this.inner = [];
367
- toArray(errorOrErrors).forEach(err => {
368
- if (ValidationError.isError(err)) {
369
- this.errors.push(...err.errors);
370
- this.inner = this.inner.concat(err.inner.length ? err.inner : err);
371
- } else {
372
- this.errors.push(err);
373
- }
374
- });
375
- this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0];
376
- if (Error.captureStackTrace) Error.captureStackTrace(this, ValidationError);
377
- }
378
- }
379
-
380
- let mixed = {
381
- default: '${path} is invalid',
382
- required: '${path} is a required field',
383
- defined: '${path} must be defined',
384
- notNull: '${path} cannot be null',
385
- oneOf: '${path} must be one of the following values: ${values}',
386
- notOneOf: '${path} must not be one of the following values: ${values}',
387
- notType: ({
388
- path,
389
- type,
390
- value,
391
- originalValue
392
- }) => {
393
- const castMsg = originalValue != null && originalValue !== value ? ` (cast from the value \`${printValue(originalValue, true)}\`).` : '.';
394
- return type !== 'mixed' ? `${path} must be a \`${type}\` type, ` + `but the final value was: \`${printValue(value, true)}\`` + castMsg : `${path} must match the configured type. ` + `The validated value was: \`${printValue(value, true)}\`` + castMsg;
395
- }
396
- };
397
- let string = {
398
- length: '${path} must be exactly ${length} characters',
399
- min: '${path} must be at least ${min} characters',
400
- max: '${path} must be at most ${max} characters',
401
- matches: '${path} must match the following: "${regex}"',
402
- email: '${path} must be a valid email',
403
- url: '${path} must be a valid URL',
404
- uuid: '${path} must be a valid UUID',
405
- trim: '${path} must be a trimmed string',
406
- lowercase: '${path} must be a lowercase string',
407
- uppercase: '${path} must be a upper case string'
408
- };
409
- let number = {
410
- min: '${path} must be greater than or equal to ${min}',
411
- max: '${path} must be less than or equal to ${max}',
412
- lessThan: '${path} must be less than ${less}',
413
- moreThan: '${path} must be greater than ${more}',
414
- positive: '${path} must be a positive number',
415
- negative: '${path} must be a negative number',
416
- integer: '${path} must be an integer'
417
- };
418
- let date = {
419
- min: '${path} field must be later than ${min}',
420
- max: '${path} field must be at earlier than ${max}'
421
- };
422
- let boolean = {
423
- isValue: '${path} field must be ${value}'
424
- };
425
- let object = {
426
- noUnknown: '${path} field has unspecified keys: ${unknown}'
427
- };
428
- let array = {
429
- min: '${path} field must have at least ${min} items',
430
- max: '${path} field must have less than or equal to ${max} items',
431
- length: '${path} must have ${length} items'
432
- };
433
- Object.assign(Object.create(null), {
434
- mixed,
435
- string,
436
- number,
437
- date,
438
- object,
439
- array,
440
- boolean
441
- });
442
-
443
- const isSchema = obj => obj && obj.__isYupSchema__;
444
-
445
- class Condition {
446
- static fromOptions(refs, config) {
447
- if (!config.then && !config.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions');
448
- let {
449
- is,
450
- then,
451
- otherwise
452
- } = config;
453
- let check = typeof is === 'function' ? is : (...values) => values.every(value => value === is);
454
- return new Condition(refs, (values, schema) => {
455
- var _branch;
456
- let branch = check(...values) ? then : otherwise;
457
- return (_branch = branch == null ? void 0 : branch(schema)) != null ? _branch : schema;
458
- });
459
- }
460
- constructor(refs, builder) {
461
- this.fn = void 0;
462
- this.refs = refs;
463
- this.refs = refs;
464
- this.fn = builder;
465
- }
466
- resolve(base, options) {
467
- let values = this.refs.map(ref =>
468
- // TODO: ? operator here?
469
- ref.getValue(options == null ? void 0 : options.value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context));
470
- let schema = this.fn(values, base, options);
471
- if (schema === undefined ||
472
- // @ts-ignore this can be base
473
- schema === base) {
474
- return base;
475
- }
476
- if (!isSchema(schema)) throw new TypeError('conditions must return a schema object');
477
- return schema.resolve(options);
478
- }
479
- }
480
-
481
- const prefixes = {
482
- context: '$',
483
- value: '.'
484
- };
485
- class Reference {
486
- constructor(key, options = {}) {
487
- this.key = void 0;
488
- this.isContext = void 0;
489
- this.isValue = void 0;
490
- this.isSibling = void 0;
491
- this.path = void 0;
492
- this.getter = void 0;
493
- this.map = void 0;
494
- if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key);
495
- this.key = key.trim();
496
- if (key === '') throw new TypeError('ref must be a non-empty string');
497
- this.isContext = this.key[0] === prefixes.context;
498
- this.isValue = this.key[0] === prefixes.value;
499
- this.isSibling = !this.isContext && !this.isValue;
500
- let prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : '';
501
- this.path = this.key.slice(prefix.length);
502
- this.getter = this.path && propertyExpr.getter(this.path, true);
503
- this.map = options.map;
504
- }
505
- getValue(value, parent, context) {
506
- let result = this.isContext ? context : this.isValue ? value : parent;
507
- if (this.getter) result = this.getter(result || {});
508
- if (this.map) result = this.map(result);
509
- return result;
510
- }
511
-
512
- /**
513
- *
514
- * @param {*} value
515
- * @param {Object} options
516
- * @param {Object=} options.context
517
- * @param {Object=} options.parent
518
- */
519
- cast(value, options) {
520
- return this.getValue(value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context);
521
- }
522
- resolve() {
523
- return this;
524
- }
525
- describe() {
526
- return {
527
- type: 'ref',
528
- key: this.key
529
- };
530
- }
531
- toString() {
532
- return `Ref(${this.key})`;
533
- }
534
- static isRef(value) {
535
- return value && value.__isYupRef;
536
- }
537
- }
538
-
539
- // @ts-ignore
540
- Reference.prototype.__isYupRef = true;
541
-
542
- const isAbsent = value => value == null;
543
-
544
- function createValidation(config) {
545
- function validate({
546
- value,
547
- path = '',
548
- options,
549
- originalValue,
550
- schema
551
- }, panic, next) {
552
- const {
553
- name,
554
- test,
555
- params,
556
- message,
557
- skipAbsent
558
- } = config;
559
- let {
560
- parent,
561
- context,
562
- abortEarly = schema.spec.abortEarly
563
- } = options;
564
- function resolve(item) {
565
- return Reference.isRef(item) ? item.getValue(value, parent, context) : item;
566
- }
567
- function createError(overrides = {}) {
568
- const nextParams = Object.assign({
569
- value,
570
- originalValue,
571
- label: schema.spec.label,
572
- path: overrides.path || path,
573
- spec: schema.spec
574
- }, params, overrides.params);
575
- for (const key of Object.keys(nextParams)) nextParams[key] = resolve(nextParams[key]);
576
- const error = new ValidationError(ValidationError.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name);
577
- error.params = nextParams;
578
- return error;
579
- }
580
- const invalid = abortEarly ? panic : next;
581
- let ctx = {
582
- path,
583
- parent,
584
- type: name,
585
- from: options.from,
586
- createError,
587
- resolve,
588
- options,
589
- originalValue,
590
- schema
591
- };
592
- const handleResult = validOrError => {
593
- if (ValidationError.isError(validOrError)) invalid(validOrError);else if (!validOrError) invalid(createError());else next(null);
594
- };
595
- const handleError = err => {
596
- if (ValidationError.isError(err)) invalid(err);else panic(err);
597
- };
598
- const shouldSkip = skipAbsent && isAbsent(value);
599
- if (!options.sync) {
600
- try {
601
- Promise.resolve(!shouldSkip ? test.call(ctx, value, ctx) : true).then(handleResult, handleError);
602
- } catch (err) {
603
- handleError(err);
604
- }
605
- return;
606
- }
607
- let result;
608
- try {
609
- var _result;
610
- result = !shouldSkip ? test.call(ctx, value, ctx) : true;
611
- if (typeof ((_result = result) == null ? void 0 : _result.then) === 'function') {
612
- throw new Error(`Validation test of type: "${ctx.type}" returned a Promise during a synchronous validate. ` + `This test will finish after the validate call has returned`);
613
- }
614
- } catch (err) {
615
- handleError(err);
616
- return;
617
- }
618
- handleResult(result);
619
- }
620
- validate.OPTIONS = config;
621
- return validate;
622
- }
623
-
624
- function getIn(schema, path, value, context = value) {
625
- let parent, lastPart, lastPartDebug;
626
-
627
- // root path: ''
628
- if (!path) return {
629
- parent,
630
- parentPath: path,
631
- schema
632
- };
633
- propertyExpr.forEach(path, (_part, isBracket, isArray) => {
634
- let part = isBracket ? _part.slice(1, _part.length - 1) : _part;
635
- schema = schema.resolve({
636
- context,
637
- parent,
638
- value
639
- });
640
- let isTuple = schema.type === 'tuple';
641
- let idx = isArray ? parseInt(part, 10) : 0;
642
- if (schema.innerType || isTuple) {
643
- if (isTuple && !isArray) throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part "${lastPartDebug}" must contain an index to the tuple element, e.g. "${lastPartDebug}[0]"`);
644
- if (value && idx >= value.length) {
645
- throw new Error(`Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + `because there is no value at that index. `);
646
- }
647
- parent = value;
648
- value = value && value[idx];
649
- schema = isTuple ? schema.spec.types[idx] : schema.innerType;
650
- }
651
-
652
- // sometimes the array index part of a path doesn't exist: "nested.arr.child"
653
- // in these cases the current part is the next schema and should be processed
654
- // in this iteration. For cases where the index signature is included this
655
- // check will fail and we'll handle the `child` part on the next iteration like normal
656
- if (!isArray) {
657
- if (!schema.fields || !schema.fields[part]) throw new Error(`The schema does not contain the path: ${path}. ` + `(failed at: ${lastPartDebug} which is a type: "${schema.type}")`);
658
- parent = value;
659
- value = value && value[part];
660
- schema = schema.fields[part];
661
- }
662
- lastPart = part;
663
- lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part;
664
- });
665
- return {
666
- schema,
667
- parent,
668
- parentPath: lastPart
669
- };
670
- }
671
-
672
- class ReferenceSet extends Set {
673
- describe() {
674
- const description = [];
675
- for (const item of this.values()) {
676
- description.push(Reference.isRef(item) ? item.describe() : item);
677
- }
678
- return description;
679
- }
680
- resolveAll(resolve) {
681
- let result = [];
682
- for (const item of this.values()) {
683
- result.push(resolve(item));
684
- }
685
- return result;
686
- }
687
- clone() {
688
- return new ReferenceSet(this.values());
689
- }
690
- merge(newItems, removeItems) {
691
- const next = this.clone();
692
- newItems.forEach(value => next.add(value));
693
- removeItems.forEach(value => next.delete(value));
694
- return next;
695
- }
696
- }
697
-
698
- // tweaked from https://github.com/Kelin2025/nanoclone/blob/0abeb7635bda9b68ef2277093f76dbe3bf3948e1/src/index.js
699
- function clone(src, seen = new Map()) {
700
- if (isSchema(src) || !src || typeof src !== 'object') return src;
701
- if (seen.has(src)) return seen.get(src);
702
- let copy;
703
- if (src instanceof Date) {
704
- // Date
705
- copy = new Date(src.getTime());
706
- seen.set(src, copy);
707
- } else if (src instanceof RegExp) {
708
- // RegExp
709
- copy = new RegExp(src);
710
- seen.set(src, copy);
711
- } else if (Array.isArray(src)) {
712
- // Array
713
- copy = new Array(src.length);
714
- seen.set(src, copy);
715
- for (let i = 0; i < src.length; i++) copy[i] = clone(src[i], seen);
716
- } else if (src instanceof Map) {
717
- // Map
718
- copy = new Map();
719
- seen.set(src, copy);
720
- for (const [k, v] of src.entries()) copy.set(k, clone(v, seen));
721
- } else if (src instanceof Set) {
722
- // Set
723
- copy = new Set();
724
- seen.set(src, copy);
725
- for (const v of src) copy.add(clone(v, seen));
726
- } else if (src instanceof Object) {
727
- // Object
728
- copy = {};
729
- seen.set(src, copy);
730
- for (const [k, v] of Object.entries(src)) copy[k] = clone(v, seen);
731
- } else {
732
- throw Error(`Unable to clone ${src}`);
733
- }
734
- return copy;
735
- }
736
-
737
- class Schema {
738
- constructor(options) {
739
- this.type = void 0;
740
- this.deps = [];
741
- this.tests = void 0;
742
- this.transforms = void 0;
743
- this.conditions = [];
744
- this._mutate = void 0;
745
- this.internalTests = {};
746
- this._whitelist = new ReferenceSet();
747
- this._blacklist = new ReferenceSet();
748
- this.exclusiveTests = Object.create(null);
749
- this._typeCheck = void 0;
750
- this.spec = void 0;
751
- this.tests = [];
752
- this.transforms = [];
753
- this.withMutation(() => {
754
- this.typeError(mixed.notType);
755
- });
756
- this.type = options.type;
757
- this._typeCheck = options.check;
758
- this.spec = Object.assign({
759
- strip: false,
760
- strict: false,
761
- abortEarly: true,
762
- recursive: true,
763
- nullable: false,
764
- optional: true,
765
- coerce: true
766
- }, options == null ? void 0 : options.spec);
767
- this.withMutation(s => {
768
- s.nonNullable();
769
- });
770
- }
771
-
772
- // TODO: remove
773
- get _type() {
774
- return this.type;
775
- }
776
- clone(spec) {
777
- if (this._mutate) {
778
- if (spec) Object.assign(this.spec, spec);
779
- return this;
780
- }
781
-
782
- // if the nested value is a schema we can skip cloning, since
783
- // they are already immutable
784
- const next = Object.create(Object.getPrototypeOf(this));
785
-
786
- // @ts-expect-error this is readonly
787
- next.type = this.type;
788
- next._typeCheck = this._typeCheck;
789
- next._whitelist = this._whitelist.clone();
790
- next._blacklist = this._blacklist.clone();
791
- next.internalTests = Object.assign({}, this.internalTests);
792
- next.exclusiveTests = Object.assign({}, this.exclusiveTests);
793
-
794
- // @ts-expect-error this is readonly
795
- next.deps = [...this.deps];
796
- next.conditions = [...this.conditions];
797
- next.tests = [...this.tests];
798
- next.transforms = [...this.transforms];
799
- next.spec = clone(Object.assign({}, this.spec, spec));
800
- return next;
801
- }
802
- label(label) {
803
- let next = this.clone();
804
- next.spec.label = label;
805
- return next;
806
- }
807
- meta(...args) {
808
- if (args.length === 0) return this.spec.meta;
809
- let next = this.clone();
810
- next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);
811
- return next;
812
- }
813
- withMutation(fn) {
814
- let before = this._mutate;
815
- this._mutate = true;
816
- let result = fn(this);
817
- this._mutate = before;
818
- return result;
819
- }
820
- concat(schema) {
821
- if (!schema || schema === this) return this;
822
- if (schema.type !== this.type && this.type !== 'mixed') throw new TypeError(`You cannot \`concat()\` schema's of different types: ${this.type} and ${schema.type}`);
823
- let base = this;
824
- let combined = schema.clone();
825
- const mergedSpec = Object.assign({}, base.spec, combined.spec);
826
- combined.spec = mergedSpec;
827
- combined.internalTests = Object.assign({}, base.internalTests, combined.internalTests);
828
-
829
- // manually merge the blacklist/whitelist (the other `schema` takes
830
- // precedence in case of conflicts)
831
- combined._whitelist = base._whitelist.merge(schema._whitelist, schema._blacklist);
832
- combined._blacklist = base._blacklist.merge(schema._blacklist, schema._whitelist);
833
-
834
- // start with the current tests
835
- combined.tests = base.tests;
836
- combined.exclusiveTests = base.exclusiveTests;
837
-
838
- // manually add the new tests to ensure
839
- // the deduping logic is consistent
840
- combined.withMutation(next => {
841
- schema.tests.forEach(fn => {
842
- next.test(fn.OPTIONS);
843
- });
844
- });
845
- combined.transforms = [...base.transforms, ...combined.transforms];
846
- return combined;
847
- }
848
- isType(v) {
849
- if (v == null) {
850
- if (this.spec.nullable && v === null) return true;
851
- if (this.spec.optional && v === undefined) return true;
852
- return false;
853
- }
854
- return this._typeCheck(v);
855
- }
856
- resolve(options) {
857
- let schema = this;
858
- if (schema.conditions.length) {
859
- let conditions = schema.conditions;
860
- schema = schema.clone();
861
- schema.conditions = [];
862
- schema = conditions.reduce((prevSchema, condition) => condition.resolve(prevSchema, options), schema);
863
- schema = schema.resolve(options);
864
- }
865
- return schema;
866
- }
867
- resolveOptions(options) {
868
- var _options$strict, _options$abortEarly, _options$recursive;
869
- return Object.assign({}, options, {
870
- from: options.from || [],
871
- strict: (_options$strict = options.strict) != null ? _options$strict : this.spec.strict,
872
- abortEarly: (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly,
873
- recursive: (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive
874
- });
875
- }
876
-
877
- /**
878
- * Run the configured transform pipeline over an input value.
879
- */
880
-
881
- cast(value, options = {}) {
882
- let resolvedSchema = this.resolve(Object.assign({
883
- value
884
- }, options));
885
- let allowOptionality = options.assert === 'ignore-optionality';
886
- let result = resolvedSchema._cast(value, options);
887
- if (options.assert !== false && !resolvedSchema.isType(result)) {
888
- if (allowOptionality && isAbsent(result)) {
889
- return result;
890
- }
891
- let formattedValue = printValue(value);
892
- let formattedResult = printValue(result);
893
- throw new TypeError(`The value of ${options.path || 'field'} could not be cast to a value ` + `that satisfies the schema type: "${resolvedSchema.type}". \n\n` + `attempted value: ${formattedValue} \n` + (formattedResult !== formattedValue ? `result of cast: ${formattedResult}` : ''));
894
- }
895
- return result;
896
- }
897
- _cast(rawValue, _options) {
898
- let value = rawValue === undefined ? rawValue : this.transforms.reduce((prevValue, fn) => fn.call(this, prevValue, rawValue, this), rawValue);
899
- if (value === undefined) {
900
- value = this.getDefault();
901
- }
902
- return value;
903
- }
904
- _validate(_value, options = {}, panic, next) {
905
- let {
906
- path,
907
- originalValue = _value,
908
- strict = this.spec.strict
909
- } = options;
910
- let value = _value;
911
- if (!strict) {
912
- value = this._cast(value, Object.assign({
913
- assert: false
914
- }, options));
915
- }
916
- let initialTests = [];
917
- for (let test of Object.values(this.internalTests)) {
918
- if (test) initialTests.push(test);
919
- }
920
- this.runTests({
921
- path,
922
- value,
923
- originalValue,
924
- options,
925
- tests: initialTests
926
- }, panic, initialErrors => {
927
- // even if we aren't ending early we can't proceed further if the types aren't correct
928
- if (initialErrors.length) {
929
- return next(initialErrors, value);
930
- }
931
- this.runTests({
932
- path,
933
- value,
934
- originalValue,
935
- options,
936
- tests: this.tests
937
- }, panic, next);
938
- });
939
- }
940
-
941
- /**
942
- * Executes a set of validations, either schema, produced Tests or a nested
943
- * schema validate result.
944
- */
945
- runTests(runOptions, panic, next) {
946
- let fired = false;
947
- let {
948
- tests,
949
- value,
950
- originalValue,
951
- path,
952
- options
953
- } = runOptions;
954
- let panicOnce = arg => {
955
- if (fired) return;
956
- fired = true;
957
- panic(arg, value);
958
- };
959
- let nextOnce = arg => {
960
- if (fired) return;
961
- fired = true;
962
- next(arg, value);
963
- };
964
- let count = tests.length;
965
- let nestedErrors = [];
966
- if (!count) return nextOnce([]);
967
- let args = {
968
- value,
969
- originalValue,
970
- path,
971
- options,
972
- schema: this
973
- };
974
- for (let i = 0; i < tests.length; i++) {
975
- const test = tests[i];
976
- test(args, panicOnce, function finishTestRun(err) {
977
- if (err) {
978
- nestedErrors = nestedErrors.concat(err);
979
- }
980
- if (--count <= 0) {
981
- nextOnce(nestedErrors);
982
- }
983
- });
984
- }
985
- }
986
- asNestedTest({
987
- key,
988
- index,
989
- parent,
990
- parentPath,
991
- originalParent,
992
- options
993
- }) {
994
- const k = key != null ? key : index;
995
- if (k == null) {
996
- throw TypeError('Must include `key` or `index` for nested validations');
997
- }
998
- const isIndex = typeof k === 'number';
999
- let value = parent[k];
1000
- const testOptions = Object.assign({}, options, {
1001
- // Nested validations fields are always strict:
1002
- // 1. parent isn't strict so the casting will also have cast inner values
1003
- // 2. parent is strict in which case the nested values weren't cast either
1004
- strict: true,
1005
- parent,
1006
- value,
1007
- originalValue: originalParent[k],
1008
- // FIXME: tests depend on `index` being passed around deeply,
1009
- // we should not let the options.key/index bleed through
1010
- key: undefined,
1011
- // index: undefined,
1012
- [isIndex ? 'index' : 'key']: k,
1013
- path: isIndex || k.includes('.') ? `${parentPath || ''}[${value ? k : `"${k}"`}]` : (parentPath ? `${parentPath}.` : '') + key
1014
- });
1015
- return (_, panic, next) => this.resolve(testOptions)._validate(value, testOptions, panic, next);
1016
- }
1017
- validate(value, options) {
1018
- let schema = this.resolve(Object.assign({}, options, {
1019
- value
1020
- }));
1021
- return new Promise((resolve, reject) => schema._validate(value, options, (error, parsed) => {
1022
- if (ValidationError.isError(error)) error.value = parsed;
1023
- reject(error);
1024
- }, (errors, validated) => {
1025
- if (errors.length) reject(new ValidationError(errors, validated));else resolve(validated);
1026
- }));
1027
- }
1028
- validateSync(value, options) {
1029
- let schema = this.resolve(Object.assign({}, options, {
1030
- value
1031
- }));
1032
- let result;
1033
- schema._validate(value, Object.assign({}, options, {
1034
- sync: true
1035
- }), (error, parsed) => {
1036
- if (ValidationError.isError(error)) error.value = parsed;
1037
- throw error;
1038
- }, (errors, validated) => {
1039
- if (errors.length) throw new ValidationError(errors, value);
1040
- result = validated;
1041
- });
1042
- return result;
1043
- }
1044
- isValid(value, options) {
1045
- return this.validate(value, options).then(() => true, err => {
1046
- if (ValidationError.isError(err)) return false;
1047
- throw err;
1048
- });
1049
- }
1050
- isValidSync(value, options) {
1051
- try {
1052
- this.validateSync(value, options);
1053
- return true;
1054
- } catch (err) {
1055
- if (ValidationError.isError(err)) return false;
1056
- throw err;
1057
- }
1058
- }
1059
- _getDefault() {
1060
- let defaultValue = this.spec.default;
1061
- if (defaultValue == null) {
1062
- return defaultValue;
1063
- }
1064
- return typeof defaultValue === 'function' ? defaultValue.call(this) : clone(defaultValue);
1065
- }
1066
- getDefault(options
1067
- // If schema is defaulted we know it's at least not undefined
1068
- ) {
1069
- let schema = this.resolve(options || {});
1070
- return schema._getDefault();
1071
- }
1072
- default(def) {
1073
- if (arguments.length === 0) {
1074
- return this._getDefault();
1075
- }
1076
- let next = this.clone({
1077
- default: def
1078
- });
1079
- return next;
1080
- }
1081
- strict(isStrict = true) {
1082
- return this.clone({
1083
- strict: isStrict
1084
- });
1085
- }
1086
- nullability(nullable, message) {
1087
- const next = this.clone({
1088
- nullable
1089
- });
1090
- next.internalTests.nullable = createValidation({
1091
- message,
1092
- name: 'nullable',
1093
- test(value) {
1094
- return value === null ? this.schema.spec.nullable : true;
1095
- }
1096
- });
1097
- return next;
1098
- }
1099
- optionality(optional, message) {
1100
- const next = this.clone({
1101
- optional
1102
- });
1103
- next.internalTests.optionality = createValidation({
1104
- message,
1105
- name: 'optionality',
1106
- test(value) {
1107
- return value === undefined ? this.schema.spec.optional : true;
1108
- }
1109
- });
1110
- return next;
1111
- }
1112
- optional() {
1113
- return this.optionality(true);
1114
- }
1115
- defined(message = mixed.defined) {
1116
- return this.optionality(false, message);
1117
- }
1118
- nullable() {
1119
- return this.nullability(true);
1120
- }
1121
- nonNullable(message = mixed.notNull) {
1122
- return this.nullability(false, message);
1123
- }
1124
- required(message = mixed.required) {
1125
- return this.clone().withMutation(next => next.nonNullable(message).defined(message));
1126
- }
1127
- notRequired() {
1128
- return this.clone().withMutation(next => next.nullable().optional());
1129
- }
1130
- transform(fn) {
1131
- let next = this.clone();
1132
- next.transforms.push(fn);
1133
- return next;
1134
- }
1135
-
1136
- /**
1137
- * Adds a test function to the schema's queue of tests.
1138
- * tests can be exclusive or non-exclusive.
1139
- *
1140
- * - exclusive tests, will replace any existing tests of the same name.
1141
- * - non-exclusive: can be stacked
1142
- *
1143
- * If a non-exclusive test is added to a schema with an exclusive test of the same name
1144
- * the exclusive test is removed and further tests of the same name will be stacked.
1145
- *
1146
- * If an exclusive test is added to a schema with non-exclusive tests of the same name
1147
- * the previous tests are removed and further tests of the same name will replace each other.
1148
- */
1149
-
1150
- test(...args) {
1151
- let opts;
1152
- if (args.length === 1) {
1153
- if (typeof args[0] === 'function') {
1154
- opts = {
1155
- test: args[0]
1156
- };
1157
- } else {
1158
- opts = args[0];
1159
- }
1160
- } else if (args.length === 2) {
1161
- opts = {
1162
- name: args[0],
1163
- test: args[1]
1164
- };
1165
- } else {
1166
- opts = {
1167
- name: args[0],
1168
- message: args[1],
1169
- test: args[2]
1170
- };
1171
- }
1172
- if (opts.message === undefined) opts.message = mixed.default;
1173
- if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters');
1174
- let next = this.clone();
1175
- let validate = createValidation(opts);
1176
- let isExclusive = opts.exclusive || opts.name && next.exclusiveTests[opts.name] === true;
1177
- if (opts.exclusive) {
1178
- if (!opts.name) throw new TypeError('Exclusive tests must provide a unique `name` identifying the test');
1179
- }
1180
- if (opts.name) next.exclusiveTests[opts.name] = !!opts.exclusive;
1181
- next.tests = next.tests.filter(fn => {
1182
- if (fn.OPTIONS.name === opts.name) {
1183
- if (isExclusive) return false;
1184
- if (fn.OPTIONS.test === validate.OPTIONS.test) return false;
1185
- }
1186
- return true;
1187
- });
1188
- next.tests.push(validate);
1189
- return next;
1190
- }
1191
- when(keys, options) {
1192
- if (!Array.isArray(keys) && typeof keys !== 'string') {
1193
- options = keys;
1194
- keys = '.';
1195
- }
1196
- let next = this.clone();
1197
- let deps = toArray(keys).map(key => new Reference(key));
1198
- deps.forEach(dep => {
1199
- // @ts-ignore readonly array
1200
- if (dep.isSibling) next.deps.push(dep.key);
1201
- });
1202
- next.conditions.push(typeof options === 'function' ? new Condition(deps, options) : Condition.fromOptions(deps, options));
1203
- return next;
1204
- }
1205
- typeError(message) {
1206
- let next = this.clone();
1207
- next.internalTests.typeError = createValidation({
1208
- message,
1209
- name: 'typeError',
1210
- test(value) {
1211
- if (!isAbsent(value) && !this.schema._typeCheck(value)) return this.createError({
1212
- params: {
1213
- type: this.schema.type
1214
- }
1215
- });
1216
- return true;
1217
- }
1218
- });
1219
- return next;
1220
- }
1221
- oneOf(enums, message = mixed.oneOf) {
1222
- let next = this.clone();
1223
- enums.forEach(val => {
1224
- next._whitelist.add(val);
1225
- next._blacklist.delete(val);
1226
- });
1227
- next.internalTests.whiteList = createValidation({
1228
- message,
1229
- name: 'oneOf',
1230
- skipAbsent: true,
1231
- test(value) {
1232
- let valids = this.schema._whitelist;
1233
- let resolved = valids.resolveAll(this.resolve);
1234
- return resolved.includes(value) ? true : this.createError({
1235
- params: {
1236
- values: Array.from(valids).join(', '),
1237
- resolved
1238
- }
1239
- });
1240
- }
1241
- });
1242
- return next;
1243
- }
1244
- notOneOf(enums, message = mixed.notOneOf) {
1245
- let next = this.clone();
1246
- enums.forEach(val => {
1247
- next._blacklist.add(val);
1248
- next._whitelist.delete(val);
1249
- });
1250
- next.internalTests.blacklist = createValidation({
1251
- message,
1252
- name: 'notOneOf',
1253
- test(value) {
1254
- let invalids = this.schema._blacklist;
1255
- let resolved = invalids.resolveAll(this.resolve);
1256
- if (resolved.includes(value)) return this.createError({
1257
- params: {
1258
- values: Array.from(invalids).join(', '),
1259
- resolved
1260
- }
1261
- });
1262
- return true;
1263
- }
1264
- });
1265
- return next;
1266
- }
1267
- strip(strip = true) {
1268
- let next = this.clone();
1269
- next.spec.strip = strip;
1270
- return next;
1271
- }
1272
-
1273
- /**
1274
- * Return a serialized description of the schema including validations, flags, types etc.
1275
- *
1276
- * @param options Provide any needed context for resolving runtime schema alterations (lazy, when conditions, etc).
1277
- */
1278
- describe(options) {
1279
- const next = (options ? this.resolve(options) : this).clone();
1280
- const {
1281
- label,
1282
- meta,
1283
- optional,
1284
- nullable
1285
- } = next.spec;
1286
- const description = {
1287
- meta,
1288
- label,
1289
- optional,
1290
- nullable,
1291
- default: next.getDefault(options),
1292
- type: next.type,
1293
- oneOf: next._whitelist.describe(),
1294
- notOneOf: next._blacklist.describe(),
1295
- tests: next.tests.map(fn => ({
1296
- name: fn.OPTIONS.name,
1297
- params: fn.OPTIONS.params
1298
- })).filter((n, idx, list) => list.findIndex(c => c.name === n.name) === idx)
1299
- };
1300
- return description;
1301
- }
1302
- }
1303
- // @ts-expect-error
1304
- Schema.prototype.__isYupSchema__ = true;
1305
- for (const method of ['validate', 'validateSync']) Schema.prototype[`${method}At`] = function (path, value, options = {}) {
1306
- const {
1307
- parent,
1308
- parentPath,
1309
- schema
1310
- } = getIn(this, path, value, options.context);
1311
- return schema[method](parent && parent[parentPath], Object.assign({}, options, {
1312
- parent,
1313
- path
1314
- }));
1315
- };
1316
- for (const alias of ['equals', 'is']) Schema.prototype[alias] = Schema.prototype.oneOf;
1317
- for (const alias of ['not', 'nope']) Schema.prototype[alias] = Schema.prototype.notOneOf;
1318
-
1319
- // Taken from HTML spec: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
1320
- let rEmail =
1321
- // eslint-disable-next-line
1322
- /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
1323
- let rUrl =
1324
- // eslint-disable-next-line
1325
- /^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;
1326
-
1327
- // eslint-disable-next-line
1328
- let rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
1329
- let isTrimmed = value => isAbsent(value) || value === value.trim();
1330
- let objStringTag = {}.toString();
1331
- function create$6() {
1332
- return new StringSchema();
1333
- }
1334
- class StringSchema extends Schema {
1335
- constructor() {
1336
- super({
1337
- type: 'string',
1338
- check(value) {
1339
- if (value instanceof String) value = value.valueOf();
1340
- return typeof value === 'string';
1341
- }
1342
- });
1343
- this.withMutation(() => {
1344
- this.transform((value, _raw, ctx) => {
1345
- if (!ctx.spec.coerce || ctx.isType(value)) return value;
1346
-
1347
- // don't ever convert arrays
1348
- if (Array.isArray(value)) return value;
1349
- const strValue = value != null && value.toString ? value.toString() : value;
1350
-
1351
- // no one wants plain objects converted to [Object object]
1352
- if (strValue === objStringTag) return value;
1353
- return strValue;
1354
- });
1355
- });
1356
- }
1357
- required(message) {
1358
- return super.required(message).withMutation(schema => schema.test({
1359
- message: message || mixed.required,
1360
- name: 'required',
1361
- skipAbsent: true,
1362
- test: value => !!value.length
1363
- }));
1364
- }
1365
- notRequired() {
1366
- return super.notRequired().withMutation(schema => {
1367
- schema.tests = schema.tests.filter(t => t.OPTIONS.name !== 'required');
1368
- return schema;
1369
- });
1370
- }
1371
- length(length, message = string.length) {
1372
- return this.test({
1373
- message,
1374
- name: 'length',
1375
- exclusive: true,
1376
- params: {
1377
- length
1378
- },
1379
- skipAbsent: true,
1380
- test(value) {
1381
- return value.length === this.resolve(length);
1382
- }
1383
- });
1384
- }
1385
- min(min, message = string.min) {
1386
- return this.test({
1387
- message,
1388
- name: 'min',
1389
- exclusive: true,
1390
- params: {
1391
- min
1392
- },
1393
- skipAbsent: true,
1394
- test(value) {
1395
- return value.length >= this.resolve(min);
1396
- }
1397
- });
1398
- }
1399
- max(max, message = string.max) {
1400
- return this.test({
1401
- name: 'max',
1402
- exclusive: true,
1403
- message,
1404
- params: {
1405
- max
1406
- },
1407
- skipAbsent: true,
1408
- test(value) {
1409
- return value.length <= this.resolve(max);
1410
- }
1411
- });
1412
- }
1413
- matches(regex, options) {
1414
- let excludeEmptyString = false;
1415
- let message;
1416
- let name;
1417
- if (options) {
1418
- if (typeof options === 'object') {
1419
- ({
1420
- excludeEmptyString = false,
1421
- message,
1422
- name
1423
- } = options);
1424
- } else {
1425
- message = options;
1426
- }
1427
- }
1428
- return this.test({
1429
- name: name || 'matches',
1430
- message: message || string.matches,
1431
- params: {
1432
- regex
1433
- },
1434
- skipAbsent: true,
1435
- test: value => value === '' && excludeEmptyString || value.search(regex) !== -1
1436
- });
1437
- }
1438
- email(message = string.email) {
1439
- return this.matches(rEmail, {
1440
- name: 'email',
1441
- message,
1442
- excludeEmptyString: true
1443
- });
1444
- }
1445
- url(message = string.url) {
1446
- return this.matches(rUrl, {
1447
- name: 'url',
1448
- message,
1449
- excludeEmptyString: true
1450
- });
1451
- }
1452
- uuid(message = string.uuid) {
1453
- return this.matches(rUUID, {
1454
- name: 'uuid',
1455
- message,
1456
- excludeEmptyString: false
1457
- });
1458
- }
1459
-
1460
- //-- transforms --
1461
- ensure() {
1462
- return this.default('').transform(val => val === null ? '' : val);
1463
- }
1464
- trim(message = string.trim) {
1465
- return this.transform(val => val != null ? val.trim() : val).test({
1466
- message,
1467
- name: 'trim',
1468
- test: isTrimmed
1469
- });
1470
- }
1471
- lowercase(message = string.lowercase) {
1472
- return this.transform(value => !isAbsent(value) ? value.toLowerCase() : value).test({
1473
- message,
1474
- name: 'string_case',
1475
- exclusive: true,
1476
- skipAbsent: true,
1477
- test: value => isAbsent(value) || value === value.toLowerCase()
1478
- });
1479
- }
1480
- uppercase(message = string.uppercase) {
1481
- return this.transform(value => !isAbsent(value) ? value.toUpperCase() : value).test({
1482
- message,
1483
- name: 'string_case',
1484
- exclusive: true,
1485
- skipAbsent: true,
1486
- test: value => isAbsent(value) || value === value.toUpperCase()
1487
- });
1488
- }
1489
- }
1490
- create$6.prototype = StringSchema.prototype;
1491
-
1492
- // @ts-expect-error
1493
- function sortFields(fields, excludedEdges = []) {
1494
- let edges = [];
1495
- let nodes = new Set();
1496
- let excludes = new Set(excludedEdges.map(([a, b]) => `${a}-${b}`));
1497
- function addNode(depPath, key) {
1498
- let node = propertyExpr.split(depPath)[0];
1499
- nodes.add(node);
1500
- if (!excludes.has(`${key}-${node}`)) edges.push([key, node]);
1501
- }
1502
- for (const key of Object.keys(fields)) {
1503
- let value = fields[key];
1504
- nodes.add(key);
1505
- if (Reference.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && 'deps' in value) value.deps.forEach(path => addNode(path, key));
1506
- }
1507
- return toposort_1.array(Array.from(nodes), edges).reverse();
1508
- }
1509
-
1510
- function findIndex(arr, err) {
1511
- let idx = Infinity;
1512
- arr.some((key, ii) => {
1513
- var _err$path;
1514
- if ((_err$path = err.path) != null && _err$path.includes(key)) {
1515
- idx = ii;
1516
- return true;
1517
- }
1518
- });
1519
- return idx;
1520
- }
1521
- function sortByKeyOrder(keys) {
1522
- return (a, b) => {
1523
- return findIndex(keys, a) - findIndex(keys, b);
1524
- };
1525
- }
1526
-
1527
- const parseJson = (value, _, ctx) => {
1528
- if (typeof value !== 'string') {
1529
- return value;
1530
- }
1531
- let parsed = value;
1532
- try {
1533
- parsed = JSON.parse(value);
1534
- } catch (err) {
1535
- /* */
1536
- }
1537
- return ctx.isType(parsed) ? parsed : value;
1538
- };
1539
-
1540
- // @ts-ignore
1541
- function deepPartial(schema) {
1542
- if ('fields' in schema) {
1543
- const partial = {};
1544
- for (const [key, fieldSchema] of Object.entries(schema.fields)) {
1545
- partial[key] = deepPartial(fieldSchema);
1546
- }
1547
- return schema.setFields(partial);
1548
- }
1549
- if (schema.type === 'array') {
1550
- const nextArray = schema.optional();
1551
- if (nextArray.innerType) nextArray.innerType = deepPartial(nextArray.innerType);
1552
- return nextArray;
1553
- }
1554
- if (schema.type === 'tuple') {
1555
- return schema.optional().clone({
1556
- types: schema.spec.types.map(deepPartial)
1557
- });
1558
- }
1559
- if ('optional' in schema) {
1560
- return schema.optional();
1561
- }
1562
- return schema;
1563
- }
1564
- const deepHas = (obj, p) => {
1565
- const path = [...propertyExpr.normalizePath(p)];
1566
- if (path.length === 1) return path[0] in obj;
1567
- let last = path.pop();
1568
- let parent = propertyExpr.getter(propertyExpr.join(path), true)(obj);
1569
- return !!(parent && last in parent);
1570
- };
1571
- let isObject = obj => Object.prototype.toString.call(obj) === '[object Object]';
1572
- function unknown(ctx, value) {
1573
- let known = Object.keys(ctx.fields);
1574
- return Object.keys(value).filter(key => known.indexOf(key) === -1);
1575
- }
1576
- const defaultSort = sortByKeyOrder([]);
1577
- function create$3(spec) {
1578
- return new ObjectSchema(spec);
1579
- }
1580
- class ObjectSchema extends Schema {
1581
- constructor(spec) {
1582
- super({
1583
- type: 'object',
1584
- check(value) {
1585
- return isObject(value) || typeof value === 'function';
1586
- }
1587
- });
1588
- this.fields = Object.create(null);
1589
- this._sortErrors = defaultSort;
1590
- this._nodes = [];
1591
- this._excludedEdges = [];
1592
- this.withMutation(() => {
1593
- if (spec) {
1594
- this.shape(spec);
1595
- }
1596
- });
1597
- }
1598
- _cast(_value, options = {}) {
1599
- var _options$stripUnknown;
1600
- let value = super._cast(_value, options);
1601
-
1602
- //should ignore nulls here
1603
- if (value === undefined) return this.getDefault();
1604
- if (!this._typeCheck(value)) return value;
1605
- let fields = this.fields;
1606
- let strip = (_options$stripUnknown = options.stripUnknown) != null ? _options$stripUnknown : this.spec.noUnknown;
1607
- let props = [].concat(this._nodes, Object.keys(value).filter(v => !this._nodes.includes(v)));
1608
- let intermediateValue = {}; // is filled during the transform below
1609
- let innerOptions = Object.assign({}, options, {
1610
- parent: intermediateValue,
1611
- __validating: options.__validating || false
1612
- });
1613
- let isChanged = false;
1614
- for (const prop of props) {
1615
- let field = fields[prop];
1616
- let exists = (prop in value);
1617
- if (field) {
1618
- let fieldValue;
1619
- let inputValue = value[prop];
1620
-
1621
- // safe to mutate since this is fired in sequence
1622
- innerOptions.path = (options.path ? `${options.path}.` : '') + prop;
1623
- field = field.resolve({
1624
- value: inputValue,
1625
- context: options.context,
1626
- parent: intermediateValue
1627
- });
1628
- let fieldSpec = field instanceof Schema ? field.spec : undefined;
1629
- let strict = fieldSpec == null ? void 0 : fieldSpec.strict;
1630
- if (fieldSpec != null && fieldSpec.strip) {
1631
- isChanged = isChanged || prop in value;
1632
- continue;
1633
- }
1634
- fieldValue = !options.__validating || !strict ?
1635
- // TODO: use _cast, this is double resolving
1636
- field.cast(value[prop], innerOptions) : value[prop];
1637
- if (fieldValue !== undefined) {
1638
- intermediateValue[prop] = fieldValue;
1639
- }
1640
- } else if (exists && !strip) {
1641
- intermediateValue[prop] = value[prop];
1642
- }
1643
- if (exists !== prop in intermediateValue || intermediateValue[prop] !== value[prop]) {
1644
- isChanged = true;
1645
- }
1646
- }
1647
- return isChanged ? intermediateValue : value;
1648
- }
1649
- _validate(_value, options = {}, panic, next) {
1650
- let {
1651
- from = [],
1652
- originalValue = _value,
1653
- recursive = this.spec.recursive
1654
- } = options;
1655
- options.from = [{
1656
- schema: this,
1657
- value: originalValue
1658
- }, ...from];
1659
- // this flag is needed for handling `strict` correctly in the context of
1660
- // validation vs just casting. e.g strict() on a field is only used when validating
1661
- options.__validating = true;
1662
- options.originalValue = originalValue;
1663
- super._validate(_value, options, panic, (objectErrors, value) => {
1664
- if (!recursive || !isObject(value)) {
1665
- next(objectErrors, value);
1666
- return;
1667
- }
1668
- originalValue = originalValue || value;
1669
- let tests = [];
1670
- for (let key of this._nodes) {
1671
- let field = this.fields[key];
1672
- if (!field || Reference.isRef(field)) {
1673
- continue;
1674
- }
1675
- tests.push(field.asNestedTest({
1676
- options,
1677
- key,
1678
- parent: value,
1679
- parentPath: options.path,
1680
- originalParent: originalValue
1681
- }));
1682
- }
1683
- this.runTests({
1684
- tests,
1685
- value,
1686
- originalValue,
1687
- options
1688
- }, panic, fieldErrors => {
1689
- next(fieldErrors.sort(this._sortErrors).concat(objectErrors), value);
1690
- });
1691
- });
1692
- }
1693
- clone(spec) {
1694
- const next = super.clone(spec);
1695
- next.fields = Object.assign({}, this.fields);
1696
- next._nodes = this._nodes;
1697
- next._excludedEdges = this._excludedEdges;
1698
- next._sortErrors = this._sortErrors;
1699
- return next;
1700
- }
1701
- concat(schema) {
1702
- let next = super.concat(schema);
1703
- let nextFields = next.fields;
1704
- for (let [field, schemaOrRef] of Object.entries(this.fields)) {
1705
- const target = nextFields[field];
1706
- nextFields[field] = target === undefined ? schemaOrRef : target;
1707
- }
1708
- return next.withMutation(s => s.setFields(nextFields, this._excludedEdges));
1709
- }
1710
- _getDefault() {
1711
- if ('default' in this.spec) {
1712
- return super._getDefault();
1713
- }
1714
-
1715
- // if there is no default set invent one
1716
- if (!this._nodes.length) {
1717
- return undefined;
1718
- }
1719
- let dft = {};
1720
- this._nodes.forEach(key => {
1721
- const field = this.fields[key];
1722
- dft[key] = field && 'getDefault' in field ? field.getDefault() : undefined;
1723
- });
1724
- return dft;
1725
- }
1726
- setFields(shape, excludedEdges) {
1727
- let next = this.clone();
1728
- next.fields = shape;
1729
- next._nodes = sortFields(shape, excludedEdges);
1730
- next._sortErrors = sortByKeyOrder(Object.keys(shape));
1731
- // XXX: this carries over edges which may not be what you want
1732
- if (excludedEdges) next._excludedEdges = excludedEdges;
1733
- return next;
1734
- }
1735
- shape(additions, excludes = []) {
1736
- return this.clone().withMutation(next => {
1737
- let edges = next._excludedEdges;
1738
- if (excludes.length) {
1739
- if (!Array.isArray(excludes[0])) excludes = [excludes];
1740
- edges = [...next._excludedEdges, ...excludes];
1741
- }
1742
-
1743
- // XXX: excludes here is wrong
1744
- return next.setFields(Object.assign(next.fields, additions), edges);
1745
- });
1746
- }
1747
- partial() {
1748
- const partial = {};
1749
- for (const [key, schema] of Object.entries(this.fields)) {
1750
- partial[key] = 'optional' in schema && schema.optional instanceof Function ? schema.optional() : schema;
1751
- }
1752
- return this.setFields(partial);
1753
- }
1754
- deepPartial() {
1755
- const next = deepPartial(this);
1756
- return next;
1757
- }
1758
- pick(keys) {
1759
- const picked = {};
1760
- for (const key of keys) {
1761
- if (this.fields[key]) picked[key] = this.fields[key];
1762
- }
1763
- return this.setFields(picked);
1764
- }
1765
- omit(keys) {
1766
- const fields = Object.assign({}, this.fields);
1767
- for (const key of keys) {
1768
- delete fields[key];
1769
- }
1770
- return this.setFields(fields);
1771
- }
1772
- from(from, to, alias) {
1773
- let fromGetter = propertyExpr.getter(from, true);
1774
- return this.transform(obj => {
1775
- if (!obj) return obj;
1776
- let newObj = obj;
1777
- if (deepHas(obj, from)) {
1778
- newObj = Object.assign({}, obj);
1779
- if (!alias) delete newObj[from];
1780
- newObj[to] = fromGetter(obj);
1781
- }
1782
- return newObj;
1783
- });
1784
- }
1785
-
1786
- /** Parse an input JSON string to an object */
1787
- json() {
1788
- return this.transform(parseJson);
1789
- }
1790
- noUnknown(noAllow = true, message = object.noUnknown) {
1791
- if (typeof noAllow !== 'boolean') {
1792
- message = noAllow;
1793
- noAllow = true;
1794
- }
1795
- let next = this.test({
1796
- name: 'noUnknown',
1797
- exclusive: true,
1798
- message: message,
1799
- test(value) {
1800
- if (value == null) return true;
1801
- const unknownKeys = unknown(this.schema, value);
1802
- return !noAllow || unknownKeys.length === 0 || this.createError({
1803
- params: {
1804
- unknown: unknownKeys.join(', ')
1805
- }
1806
- });
1807
- }
1808
- });
1809
- next.spec.noUnknown = noAllow;
1810
- return next;
1811
- }
1812
- unknown(allow = true, message = object.noUnknown) {
1813
- return this.noUnknown(!allow, message);
1814
- }
1815
- transformKeys(fn) {
1816
- return this.transform(obj => {
1817
- if (!obj) return obj;
1818
- const result = {};
1819
- for (const key of Object.keys(obj)) result[fn(key)] = obj[key];
1820
- return result;
1821
- });
1822
- }
1823
- camelCase() {
1824
- return this.transformKeys(tinyCase.camelCase);
1825
- }
1826
- snakeCase() {
1827
- return this.transformKeys(tinyCase.snakeCase);
1828
- }
1829
- constantCase() {
1830
- return this.transformKeys(key => tinyCase.snakeCase(key).toUpperCase());
1831
- }
1832
- describe(options) {
1833
- let base = super.describe(options);
1834
- base.fields = {};
1835
- for (const [key, value] of Object.entries(this.fields)) {
1836
- var _innerOptions;
1837
- let innerOptions = options;
1838
- if ((_innerOptions = innerOptions) != null && _innerOptions.value) {
1839
- innerOptions = Object.assign({}, innerOptions, {
1840
- parent: innerOptions.value,
1841
- value: innerOptions.value[key]
1842
- });
1843
- }
1844
- base.fields[key] = value.describe(innerOptions);
1845
- }
1846
- return base;
1847
- }
1848
- }
1849
- create$3.prototype = ObjectSchema.prototype;
6
+ const index_esm = require('./index.esm-8df4906e.js');
1850
7
 
1851
8
  const RegExZip = /^\d{5}/;
1852
- const BillingFormSchema = create$3({
1853
- name: create$6().required('Enter name'),
1854
- address_line1: create$6().required('Enter street address'),
1855
- address_line2: create$6(),
1856
- address_city: create$6().required('Enter city'),
1857
- address_state: create$6().required('Choose state'),
1858
- address_postal_code: create$6()
1859
- .required('Enter ZIP')
1860
- .matches(RegExZip, 'Enter a valid ZIP')
1861
- .min(5, 'Enter a valid ZIP')
9
+ const BillingFormSchema = index_esm.create$3({
10
+ name: index_esm.create$6().required('Enter name'),
11
+ address_line1: index_esm.create$6().required('Enter street address'),
12
+ address_line2: index_esm.create$6(),
13
+ address_city: index_esm.create$6().required('Enter city'),
14
+ address_state: index_esm.create$6().required('Choose state'),
15
+ address_postal_code: index_esm.create$6().required('Enter ZIP').matches(RegExZip, 'Enter a valid ZIP').min(5, 'Enter a valid ZIP'),
1862
16
  });
1863
17
 
1864
- const StateOptions = [
1865
- {
1866
- label: 'Choose state',
1867
- value: ''
1868
- },
1869
- {
1870
- label: 'Alabama',
1871
- value: 'AL'
1872
- },
1873
- {
1874
- label: 'Alaska',
1875
- value: 'AK'
1876
- },
1877
- {
1878
- label: 'American Samoa',
1879
- value: 'AS'
1880
- },
1881
- {
1882
- label: 'Arizona',
1883
- value: 'AZ'
1884
- },
1885
- {
1886
- label: 'Arkansas',
1887
- value: 'AR'
1888
- },
1889
- {
1890
- label: 'California',
1891
- value: 'CA'
1892
- },
1893
- {
1894
- label: 'Colorado',
1895
- value: 'CO'
1896
- },
1897
- {
1898
- label: 'Connecticut',
1899
- value: 'CT'
1900
- },
1901
- {
1902
- label: 'Delaware',
1903
- value: 'DE'
1904
- },
1905
- {
1906
- label: 'District Of Columbia',
1907
- value: 'DC'
1908
- },
1909
- {
1910
- label: 'Federated States Of Micronesia',
1911
- value: 'FM'
1912
- },
1913
- {
1914
- label: 'Florida',
1915
- value: 'FL'
1916
- },
1917
- {
1918
- label: 'Georgia',
1919
- value: 'GA'
1920
- },
1921
- {
1922
- label: 'Guam',
1923
- value: 'GU'
1924
- },
1925
- {
1926
- label: 'Hawaii',
1927
- value: 'HI'
1928
- },
1929
- {
1930
- label: 'Idaho',
1931
- value: 'ID'
1932
- },
1933
- {
1934
- label: 'Illinois',
1935
- value: 'IL'
1936
- },
1937
- {
1938
- label: 'Indiana',
1939
- value: 'IN'
1940
- },
1941
- {
1942
- label: 'Iowa',
1943
- value: 'IA'
1944
- },
1945
- {
1946
- label: 'Kansas',
1947
- value: 'KS'
1948
- },
1949
- {
1950
- label: 'Kentucky',
1951
- value: 'KY'
1952
- },
1953
- {
1954
- label: 'Louisiana',
1955
- value: 'LA'
1956
- },
1957
- {
1958
- label: 'Maine',
1959
- value: 'ME'
1960
- },
1961
- {
1962
- label: 'Marshall Islands',
1963
- value: 'MH'
1964
- },
1965
- {
1966
- label: 'Maryland',
1967
- value: 'MD'
1968
- },
1969
- {
1970
- label: 'Massachusetts',
1971
- value: 'MA'
1972
- },
1973
- {
1974
- label: 'Michigan',
1975
- value: 'MI'
1976
- },
1977
- {
1978
- label: 'Minnesota',
1979
- value: 'MN'
1980
- },
1981
- {
1982
- label: 'Mississippi',
1983
- value: 'MS'
1984
- },
1985
- {
1986
- label: 'Missouri',
1987
- value: 'MO'
1988
- },
1989
- {
1990
- label: 'Montana',
1991
- value: 'MT'
1992
- },
1993
- {
1994
- label: 'Nebraska',
1995
- value: 'NE'
1996
- },
1997
- {
1998
- label: 'Nevada',
1999
- value: 'NV'
2000
- },
2001
- {
2002
- label: 'New Hampshire',
2003
- value: 'NH'
2004
- },
2005
- {
2006
- label: 'New Jersey',
2007
- value: 'NJ'
2008
- },
2009
- {
2010
- label: 'New Mexico',
2011
- value: 'NM'
2012
- },
2013
- {
2014
- label: 'New York',
2015
- value: 'NY'
2016
- },
2017
- {
2018
- label: 'North Carolina',
2019
- value: 'NC'
2020
- },
2021
- {
2022
- label: 'North Dakota',
2023
- value: 'ND'
2024
- },
2025
- {
2026
- label: 'Northern Mariana Islands',
2027
- value: 'MP'
2028
- },
2029
- {
2030
- label: 'Ohio',
2031
- value: 'OH'
2032
- },
2033
- {
2034
- label: 'Oklahoma',
2035
- value: 'OK'
2036
- },
2037
- {
2038
- label: 'Oregon',
2039
- value: 'OR'
2040
- },
2041
- {
2042
- label: 'Palau',
2043
- value: 'PW'
2044
- },
2045
- {
2046
- label: 'Pennsylvania',
2047
- value: 'PA'
2048
- },
2049
- {
2050
- label: 'Puerto Rico',
2051
- value: 'PR'
2052
- },
2053
- {
2054
- label: 'Rhode Island',
2055
- value: 'RI'
2056
- },
2057
- {
2058
- label: 'South Carolina',
2059
- value: 'SC'
2060
- },
2061
- {
2062
- label: 'South Dakota',
2063
- value: 'SD'
2064
- },
2065
- {
2066
- label: 'Tennessee',
2067
- value: 'TN'
2068
- },
2069
- {
2070
- label: 'Texas',
2071
- value: 'TX'
2072
- },
2073
- {
2074
- label: 'Utah',
2075
- value: 'UT'
2076
- },
2077
- {
2078
- label: 'Vermont',
2079
- value: 'VT'
2080
- },
2081
- {
2082
- label: 'Virgin Islands',
2083
- value: 'VI'
2084
- },
2085
- {
2086
- label: 'Virginia',
2087
- value: 'VA'
2088
- },
2089
- {
2090
- label: 'Washington',
2091
- value: 'WA'
2092
- },
2093
- {
2094
- label: 'West Virginia',
2095
- value: 'WV'
2096
- },
2097
- {
2098
- label: 'Wisconsin',
2099
- value: 'WI'
2100
- },
2101
- {
2102
- label: 'Wyoming',
2103
- value: 'WY'
2104
- }
2105
- ];
2106
-
2107
18
  const billingFormCss = ":root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13, 110, 253;--bs-secondary-rgb:108, 117, 125;--bs-success-rgb:25, 135, 84;--bs-info-rgb:13, 202, 240;--bs-warning-rgb:255, 193, 7;--bs-danger-rgb:220, 53, 69;--bs-light-rgb:248, 249, 250;--bs-dark-rgb:33, 37, 41;--bs-white-rgb:255, 255, 255;--bs-black-rgb:0, 0, 0;--bs-body-color-rgb:33, 37, 41;--bs-body-bg-rgb:255, 255, 255;--bs-font-sans-serif:system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace:SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0, 0, 0, 0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:0.25}h6,h5,h4,h3,h2,h1{margin-top:0;margin-bottom:0.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + 0.9vw)}@media (min-width: 1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + 0.6vw)}@media (min-width: 1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + 0.3vw)}@media (min-width: 1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:0.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:0.875em}mark{padding:0.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:var(--bs-link-color);text-decoration:underline}a:hover{color:var(--bs-link-hover-color)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:0.1875rem 0.375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:0.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:0.5rem;padding-bottom:0.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:0.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-0.5 * var(--bs-gutter-x));margin-left:calc(-0.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * 0.5);padding-left:calc(var(--bs-gutter-x) * 0.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}:host{font-family:system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;display:block}justifi-billing-form{margin-left:calc(var(--jfi-layout-padding) * -1);margin-right:calc(var(--jfi-layout-padding) * -1)}*::part(label){color:var(--jfi-form-label-color);font-family:var(--jfi-form-label-font-family);font-weight:var(--jfi-form-label-font-weight);font-size:var(--jfi-form-label-font-size);margin:var(--jfi-form-label-margin)}*::part(input){background-color:var(--jfi-form-control-background-color);border-color:var(--jfi-form-control-border-color);border-width:var(--jfi-form-control-border-width);border-bottom-width:var(--jfi-form-control-border-bottom-width);border-left-width:var(--jfi-form-control-border-left-width);border-right-width:var(--jfi-form-control-border-right-width);border-top-width:var(--jfi-form-control-border-top-width);border-radius:var(--jfi-form-control-border-radius);border-style:var(--jfi-form-control-border-style);box-shadow:var(--jfi-form-control-box-shadow);color:var(--jfi-form-control-color);font-size:var(--jfi-form-control-font-size);font-weight:var(--jfi-form-control-font-weight);line-height:var(--jfi-form-control-line-height);margin:var(--jfi-form-control-margin);padding:var(--jfi-form-control-padding)}*::part(input):focus{color:var(--jfi-form-control-color-focus);border-color:var(--jfi-form-control-border-color-focus);box-shadow:var(--jfi-form-control-box-shadow-focus)}*::part(input-invalid){border-color:var(--jfi-form-control-border-color-error);box-shadow:var(--jfi-form-control-box-shadow-error)}*::part(input-invalid):focus{border-color:var(--jfi-form-control-border-color-error);box-shadow:var(--jfi-form-control-box-shadow-error-focus)}";
2108
19
 
2109
20
  const BillingForm = class {
2110
21
  constructor(hostRef) {
2111
22
  index.registerInstance(this, hostRef);
2112
- this.legendBlock = index.h("legend", null, this.legend);
23
+ this.legendBlock = (index.h("legend", null, this.legend));
2113
24
  this.legend = undefined;
2114
25
  this.billingFields = {
2115
26
  name: '',
@@ -2117,7 +28,7 @@ const BillingForm = class {
2117
28
  address_line2: '',
2118
29
  address_city: '',
2119
30
  address_state: '',
2120
- address_postal_code: ''
31
+ address_postal_code: '',
2121
32
  };
2122
33
  this.billingFieldsErrors = {};
2123
34
  }
@@ -2162,16 +73,16 @@ const BillingForm = class {
2162
73
  return this.billingFields;
2163
74
  }
2164
75
  render() {
2165
- return (index.h(index.Host, { exportparts: "label,input,input-invalid" }, index.h("fieldset", null, this.legend && this.legendBlock, index.h("div", { class: "row gy-3" }, index.h("div", { class: "col-12" }, index.h("text-input", { name: "name", label: "Full Name", defaultValue: this.billingFields.name, error: this.billingFieldsErrors.name })), index.h("div", { class: "col-12" }, index.h("text-input", { name: "address_line1", label: "Street Address", defaultValue: this.billingFields.address_line1, error: this.billingFieldsErrors.address_line1 })), index.h("div", { class: "col-12" }, index.h("text-input", { name: "address_line2", label: "Apartment, Suite, etc. (optional)", defaultValue: this.billingFields.address_line2, error: this.billingFieldsErrors.address_line2 })), index.h("div", { class: "col-12" }, index.h("text-input", { name: "address_city", label: "City", defaultValue: this.billingFields.address_city, error: this.billingFieldsErrors.address_city })), index.h("div", { class: "col-12" }, index.h("select-input", { name: "address_state", label: "State", options: StateOptions, defaultValue: this.billingFields.address_state, error: this.billingFieldsErrors.address_state })), index.h("div", { class: "col-12" }, index.h("text-input", { name: "address_postal_code", label: "ZIP", defaultValue: this.billingFields.address_postal_code, error: this.billingFieldsErrors.address_postal_code }))))));
76
+ return (index.h(index.Host, { exportparts: "label,input,input-invalid" }, index.h("fieldset", null, this.legend && this.legendBlock, index.h("div", { class: "row gy-3" }, index.h("div", { class: "col-12" }, index.h("text-input", { name: "name", label: "Full Name", defaultValue: this.billingFields.name, error: this.billingFieldsErrors.name })), index.h("div", { class: "col-12" }, index.h("text-input", { name: "address_line1", label: "Street Address", defaultValue: this.billingFields.address_line1, error: this.billingFieldsErrors.address_line1 })), index.h("div", { class: "col-12" }, index.h("text-input", { name: "address_line2", label: "Apartment, Suite, etc. (optional)", defaultValue: this.billingFields.address_line2, error: this.billingFieldsErrors.address_line2 })), index.h("div", { class: "col-12" }, index.h("text-input", { name: "address_city", label: "City", defaultValue: this.billingFields.address_city, error: this.billingFieldsErrors.address_city })), index.h("div", { class: "col-12" }, index.h("select-input", { name: "address_state", label: "State", options: index_esm.StateOptions, defaultValue: this.billingFields.address_state, error: this.billingFieldsErrors.address_state })), index.h("div", { class: "col-12" }, index.h("text-input", { name: "address_postal_code", label: "ZIP", defaultValue: this.billingFields.address_postal_code, error: this.billingFieldsErrors.address_postal_code }))))));
2166
77
  }
2167
78
  };
2168
79
  BillingForm.style = billingFormCss;
2169
80
 
2170
- const paymentMethodSelectorCss = ":root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13, 110, 253;--bs-secondary-rgb:108, 117, 125;--bs-success-rgb:25, 135, 84;--bs-info-rgb:13, 202, 240;--bs-warning-rgb:255, 193, 7;--bs-danger-rgb:220, 53, 69;--bs-light-rgb:248, 249, 250;--bs-dark-rgb:33, 37, 41;--bs-white-rgb:255, 255, 255;--bs-black-rgb:0, 0, 0;--bs-body-color-rgb:33, 37, 41;--bs-body-bg-rgb:255, 255, 255;--bs-font-sans-serif:system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace:SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}.form-label{margin-bottom:0.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:0.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:0.375rem 0.75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;border-radius:0.375rem;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:0.375rem 0.75rem;margin:-0.375rem -0.75rem;margin-inline-end:0.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:0.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:0.25rem 0.5rem;font-size:0.875rem;border-radius:0.25rem}.form-control-sm::file-selector-button{padding:0.25rem 0.5rem;margin:-0.25rem -0.5rem;margin-inline-end:0.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:0.5rem 1rem;font-size:1.25rem;border-radius:0.5rem}.form-control-lg::file-selector-button{padding:0.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:0.375rem}.form-control-color::-webkit-color-swatch{border-radius:0.375rem}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + 2px)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + 2px)}.form-select{display:block;width:100%;padding:0.375rem 2.25rem 0.375rem 0.75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right 0.75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:0.375rem;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-select[multiple],.form-select[size]:not([size=\"1\"]){padding-right:0.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:0.25rem;padding-bottom:0.25rem;padding-left:0.5rem;font-size:0.875rem;border-radius:0.25rem}.form-select-lg{padding-top:0.5rem;padding-bottom:0.5rem;padding-left:1rem;font-size:1.25rem;border-radius:0.5rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:0.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{width:1em;height:1em;margin-top:0.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0, 0, 0, 0.25);appearance:none;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:0.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\")}.form-check-input:checked[type=radio]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:0.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:0.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:0.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;width:100%;height:100%;padding:1rem 0.75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out, transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem 0.75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:0.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:0.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:0.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{opacity:0.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:0.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:0.375rem 0.75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0.375rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:0.5rem 1rem;font-size:1.25rem;border-radius:0.5rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:0.25rem 0.5rem;font-size:0.875rem;border-radius:0.25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:0.1rem;font-size:0.875rem;color:#fff;background-color:rgba(25, 135, 84, 0.9);border-radius:0.375rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 0.25rem rgba(25, 135, 84, 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size=\"1\"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size=\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-position:right 0.75rem center, center right 2.25rem;background-size:16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 0.25rem rgba(25, 135, 84, 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 0.25rem rgba(25, 135, 84, 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:0.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:0.1rem;font-size:0.875rem;color:#fff;background-color:rgba(220, 53, 69, 0.9);border-radius:0.375rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 0.25rem rgba(220, 53, 69, 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size=\"1\"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size=\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-position:right 0.75rem center, center right 2.25rem;background-size:16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 0.25rem rgba(220, 53, 69, 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 0.25rem rgba(220, 53, 69, 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:0.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:#212529;--bs-btn-bg:transparent;--bs-btn-border-width:1px;--bs-btn-border-color:transparent;--bs-btn-border-radius:0.375rem;--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49, 132, 253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130, 138, 145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60, 153, 110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11, 172, 204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217, 164, 6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225, 83, 97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211, 212, 213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66, 70, 73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13, 110, 253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108, 117, 125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25, 135, 84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13, 202, 240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255, 193, 7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220, 53, 69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248, 249, 250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33, 37, 41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:none;--bs-btn-focus-shadow-rgb:49, 132, 253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:0.25rem}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:0.375rem}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:0.5625rem;padding-left:0.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:0.375rem;padding-left:0.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:0.75rem;padding-left:0.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}:host{font-family:system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;display:block}.jfi-btn-radio+.jfi-btn-radio-label{color:var(--jfi-radio-button-color);background-color:var(--jfi-radio-button-background-color);border-color:var(--jfi-radio-button-border-color);padding:var(--jfi-radio-button-padding);font-size:var(--jfi-radio-button-font-size)}.jfi-btn-radio:focus+.jfi-btn-radio-label{box-shadow:var(--jfi-box-shadow-focus)}.jfi-btn-radio+.jfi-btn-radio-label:hover{color:var(--jfi-radio-button-color-hover);border-color:var(--jfi-radio-button-border-color-hover);background-color:var(--jfi-radio-button-background-color-hover)}.jfi-btn-radio:checked+.jfi-btn-radio-label:hover{color:var(--jfi-radio-button-color-selected-hover);border-color:var(--jfi-radio-button-border-color-selected-hover);background-color:var(--jfi-radio-button-background-color-selected-hover)}.jfi-btn-radio:checked+.jfi-btn-radio-label{color:var(--jfi-radio-button-color-selected);background-color:var(--jfi-radio-button-background-color-selected);border-color:var(--jfi-radio-button-border-color-selected)}";
81
+ const paymentMethodSelectorCss = ":root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13, 110, 253;--bs-secondary-rgb:108, 117, 125;--bs-success-rgb:25, 135, 84;--bs-info-rgb:13, 202, 240;--bs-warning-rgb:255, 193, 7;--bs-danger-rgb:220, 53, 69;--bs-light-rgb:248, 249, 250;--bs-dark-rgb:33, 37, 41;--bs-white-rgb:255, 255, 255;--bs-black-rgb:0, 0, 0;--bs-body-color-rgb:33, 37, 41;--bs-body-bg-rgb:255, 255, 255;--bs-font-sans-serif:system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace:SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}.form-label{margin-bottom:0.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:0.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:0.375rem 0.75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;border-radius:0.375rem;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:0.375rem 0.75rem;margin:-0.375rem -0.75rem;margin-inline-end:0.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:0.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:0.25rem 0.5rem;font-size:0.875rem;border-radius:0.25rem}.form-control-sm::file-selector-button{padding:0.25rem 0.5rem;margin:-0.25rem -0.5rem;margin-inline-end:0.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:0.5rem 1rem;font-size:1.25rem;border-radius:0.5rem}.form-control-lg::file-selector-button{padding:0.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:0.375rem}.form-control-color::-webkit-color-swatch{border-radius:0.375rem}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + 2px)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + 2px)}.form-select{display:block;width:100%;padding:0.375rem 2.25rem 0.375rem 0.75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right 0.75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:0.375rem;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-select[multiple],.form-select[size]:not([size=\"1\"]){padding-right:0.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:0.25rem;padding-bottom:0.25rem;padding-left:0.5rem;font-size:0.875rem;border-radius:0.25rem}.form-select-lg{padding-top:0.5rem;padding-bottom:0.5rem;padding-left:1rem;font-size:1.25rem;border-radius:0.5rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:0.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{width:1em;height:1em;margin-top:0.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0, 0, 0, 0.25);appearance:none;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:0.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\")}.form-check-input:checked[type=radio]{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:0.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:0.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:0.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;width:100%;height:100%;padding:1rem 0.75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out, transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem 0.75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:0.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:0.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:0.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{opacity:0.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:0.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:0.375rem 0.75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0.375rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:0.5rem 1rem;font-size:1.25rem;border-radius:0.5rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:0.25rem 0.5rem;font-size:0.875rem;border-radius:0.25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:0.1rem;font-size:0.875rem;color:#fff;background-color:rgba(25, 135, 84, 0.9);border-radius:0.375rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 0.25rem rgba(25, 135, 84, 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size=\"1\"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size=\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-position:right 0.75rem center, center right 2.25rem;background-size:16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 0.25rem rgba(25, 135, 84, 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 0.25rem rgba(25, 135, 84, 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:0.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:0.1rem;font-size:0.875rem;color:#fff;background-color:rgba(220, 53, 69, 0.9);border-radius:0.375rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 0.25rem rgba(220, 53, 69, 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size=\"1\"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size=\"1\"]{padding-right:4.125rem;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-position:right 0.75rem center, center right 2.25rem;background-size:16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 0.25rem rgba(220, 53, 69, 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 0.25rem rgba(220, 53, 69, 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:0.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:#212529;--bs-btn-bg:transparent;--bs-btn-border-width:1px;--bs-btn-border-color:transparent;--bs-btn-border-radius:0.375rem;--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49, 132, 253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130, 138, 145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60, 153, 110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11, 172, 204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217, 164, 6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225, 83, 97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211, 212, 213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66, 70, 73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13, 110, 253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108, 117, 125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25, 135, 84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13, 202, 240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255, 193, 7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220, 53, 69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248, 249, 250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33, 37, 41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:none;--bs-btn-focus-shadow-rgb:49, 132, 253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:0.25rem}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:0.375rem}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:0.5625rem;padding-left:0.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:0.375rem;padding-left:0.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:0.75rem;padding-left:0.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}:host{font-family:system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;display:block}.jfi-btn-radio+.jfi-btn-radio-label{color:var(--jfi-radio-button-color);background-color:var(--jfi-radio-button-background-color);border-color:var(--jfi-radio-button-border-color);padding:var(--jfi-radio-button-padding);font-size:var(--jfi-radio-button-font-size)}.jfi-btn-radio:focus+.jfi-btn-radio-label{box-shadow:var(--jfi-box-shadow-focus)}.jfi-btn-radio+.jfi-btn-radio-label:hover{color:var(--jfi-radio-button-color-hover);border-color:var(--jfi-radio-button-border-color-hover);background-color:var(--jfi-radio-button-background-color-hover)}.jfi-btn-radio:checked+.jfi-btn-radio-label:hover{color:var(--jfi-radio-button-color-selected-hover);border-color:var(--jfi-radio-button-border-color-selected-hover);background-color:var(--jfi-radio-button-background-color-selected-hover)}.jfi-btn-radio:checked+.jfi-btn-radio-label{color:var(--jfi-radio-button-color-selected);background-color:var(--jfi-radio-button-background-color-selected);border-color:var(--jfi-radio-button-border-color-selected)}.jfi-btn-radio-group{display:inline-flex;width:var(--jfi-radio-button-group-width)}";
2171
82
 
2172
83
  const PaymentMethodLabels = {
2173
84
  bankAccount: 'Bank Account',
2174
- card: 'Card'
85
+ card: 'Card',
2175
86
  };
2176
87
  const PaymentMethodSelector = class {
2177
88
  constructor(hostRef) {
@@ -2184,9 +95,8 @@ const PaymentMethodSelector = class {
2184
95
  this.paymentMethodSelected.emit(event.target.value);
2185
96
  }
2186
97
  render() {
2187
- return (index.h("div", { class: "btn-group", role: "group", "aria-label": "Radio toggle group for payment method" }, this.paymentMethodTypes.map((paymentMethodType) => index.h(index.Fragment, null, index.h("input", { id: paymentMethodType, type: "radio", name: "paymentMethodType", value: paymentMethodType, onChange: (event) => this.onChangeHandler(event), checked: this.selectedPaymentMethodType === paymentMethodType, class: "btn-check jfi-btn-radio" }), index.h("label", { htmlFor: paymentMethodType, class: "btn btn-outline-primary jfi-btn-radio-label" }, PaymentMethodLabels[paymentMethodType])))));
98
+ return (index.h("div", { class: "btn-group jfi-btn-radio-group", role: "group", "aria-label": "Radio toggle group for payment method" }, this.paymentMethodTypes.map((paymentMethodType) => (index.h(index.Fragment, null, index.h("input", { id: paymentMethodType, type: "radio", name: "paymentMethodType", value: paymentMethodType, onChange: (event) => this.onChangeHandler(event), checked: this.selectedPaymentMethodType === paymentMethodType, class: "btn-check jfi-btn-radio" }), index.h("label", { htmlFor: paymentMethodType, class: "btn btn-outline-primary jfi-btn-radio-label" }, PaymentMethodLabels[paymentMethodType]))))));
2188
99
  }
2189
- ;
2190
100
  };
2191
101
  PaymentMethodSelector.style = paymentMethodSelectorCss;
2192
102