@foxy.io/elements 1.14.0-beta.7 → 1.14.0-beta.8

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 (89) hide show
  1. package/dist/cdn/foxy-access-recovery-form.js +1 -1
  2. package/dist/cdn/foxy-address-card.js +1 -1
  3. package/dist/cdn/foxy-address-form.js +1 -1
  4. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  5. package/dist/cdn/foxy-attribute-card.js +1 -1
  6. package/dist/cdn/foxy-attribute-form.js +1 -1
  7. package/dist/cdn/foxy-cancellation-form.js +1 -1
  8. package/dist/cdn/foxy-collection-page.js +1 -1
  9. package/dist/cdn/foxy-collection-pages.js +1 -1
  10. package/dist/cdn/foxy-custom-field-card.js +1 -1
  11. package/dist/cdn/foxy-custom-field-form.js +1 -1
  12. package/dist/cdn/foxy-customer-card.js +1 -1
  13. package/dist/cdn/foxy-customer-form.js +1 -1
  14. package/dist/cdn/foxy-customer-portal-settings.js +17 -17
  15. package/dist/cdn/foxy-customer-portal.js +2 -2
  16. package/dist/cdn/foxy-customer.js +4 -4
  17. package/dist/cdn/foxy-customers-table.js +1 -1
  18. package/dist/cdn/foxy-discount-card.js +1 -1
  19. package/dist/cdn/foxy-donation.js +1 -1
  20. package/dist/cdn/foxy-email-template-form.js +1 -1
  21. package/dist/cdn/foxy-error-entry-card.js +1 -1
  22. package/dist/cdn/foxy-form-dialog.js +1 -1
  23. package/dist/cdn/foxy-i18n.js +1 -1
  24. package/dist/cdn/foxy-items-form.js +1 -1
  25. package/dist/cdn/foxy-payment-card.js +1 -1
  26. package/dist/cdn/foxy-payment-method-card.js +1 -1
  27. package/dist/cdn/foxy-query-builder.js +2 -2
  28. package/dist/cdn/foxy-sign-in-form.js +1 -1
  29. package/dist/cdn/foxy-spinner.js +1 -1
  30. package/dist/cdn/foxy-subscription-card.js +1 -1
  31. package/dist/cdn/foxy-subscription-form.js +3 -3
  32. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  33. package/dist/cdn/foxy-table.js +1 -1
  34. package/dist/cdn/foxy-tax-card.js +1 -1
  35. package/dist/cdn/foxy-tax-form.js +1 -1
  36. package/dist/cdn/foxy-template-config-form.js +1 -14
  37. package/dist/cdn/foxy-template-form.js +1 -1
  38. package/dist/cdn/foxy-transaction-card.js +1 -1
  39. package/dist/cdn/foxy-transactions-table.js +1 -1
  40. package/dist/cdn/foxy-user-form.js +1 -1
  41. package/dist/cdn/foxy-users-table.js +1 -1
  42. package/dist/cdn/{shared-50c7a176.js → shared-00070cc4.js} +5 -5
  43. package/dist/cdn/shared-007c4e34.js +1 -0
  44. package/dist/cdn/shared-07134f93.js +14 -0
  45. package/dist/cdn/{shared-09feabf8.js → shared-0f9809ab.js} +1 -1
  46. package/dist/cdn/{shared-8edee4e1.js → shared-31d03530.js} +7 -7
  47. package/dist/cdn/{shared-691da586.js → shared-4ba926ca.js} +1 -1
  48. package/dist/cdn/{shared-1bafffd0.js → shared-5d94bacb.js} +1 -1
  49. package/dist/cdn/{shared-6ecbc785.js → shared-7007dedb.js} +1 -1
  50. package/dist/cdn/{shared-7629a1a5.js → shared-a3d2c48e.js} +1 -1
  51. package/dist/cdn/{shared-c66e9946.js → shared-b24377bf.js} +1 -1
  52. package/dist/cdn/{shared-0ba88744.js → shared-c5ae5d33.js} +1 -1
  53. package/dist/cdn/{shared-6f7f752e.js → shared-ca7c3b9a.js} +1 -1
  54. package/dist/cdn/shared-d01035c5.js +1 -0
  55. package/dist/cdn/{shared-16e28f3b.js → shared-d05c93a5.js} +1 -1
  56. package/dist/cdn/{shared-4d3c7828.js → shared-da787055.js} +1 -1
  57. package/dist/cdn/{shared-a6c047b1.js → shared-daf6b763.js} +1 -1
  58. package/dist/cdn/shared-fe8a7aa2.js +1 -0
  59. package/dist/elements/private/Checkbox/Checkbox.d.ts +3 -1
  60. package/dist/elements/private/Checkbox/Checkbox.js +43 -14
  61. package/dist/elements/private/Checkbox/Checkbox.js.map +1 -1
  62. package/dist/elements/private/Choice/Choice.js +7 -5
  63. package/dist/elements/private/Choice/Choice.js.map +1 -1
  64. package/dist/elements/public/EmailTemplateForm/EmailTemplateForm.d.ts +3 -2
  65. package/dist/elements/public/EmailTemplateForm/EmailTemplateForm.js +68 -50
  66. package/dist/elements/public/EmailTemplateForm/EmailTemplateForm.js.map +1 -1
  67. package/dist/elements/public/EmailTemplateForm/types.d.ts +14 -0
  68. package/dist/elements/public/EmailTemplateForm/types.js.map +1 -1
  69. package/dist/elements/public/TemplateConfigForm/CountriesList.js +11 -2
  70. package/dist/elements/public/TemplateConfigForm/CountriesList.js.map +1 -1
  71. package/dist/elements/public/TemplateConfigForm/CountryCard.d.ts +2 -0
  72. package/dist/elements/public/TemplateConfigForm/CountryCard.js +36 -4
  73. package/dist/elements/public/TemplateConfigForm/CountryCard.js.map +1 -1
  74. package/dist/elements/public/TemplateConfigForm/TemplateConfigForm.d.ts +55 -1
  75. package/dist/elements/public/TemplateConfigForm/TemplateConfigForm.js +247 -55
  76. package/dist/elements/public/TemplateConfigForm/TemplateConfigForm.js.map +1 -1
  77. package/dist/elements/public/TemplateConfigForm/types.d.ts +34 -0
  78. package/dist/elements/public/TemplateConfigForm/types.js.map +1 -1
  79. package/dist/elements/public/TemplateForm/TemplateForm.d.ts +2 -1
  80. package/dist/elements/public/TemplateForm/TemplateForm.js +71 -52
  81. package/dist/elements/public/TemplateForm/TemplateForm.js.map +1 -1
  82. package/dist/elements/public/TemplateForm/types.d.ts +14 -0
  83. package/dist/elements/public/TemplateForm/types.js.map +1 -1
  84. package/dist/mixins/themeable.js +22 -8
  85. package/dist/mixins/themeable.js.map +1 -1
  86. package/package.json +1 -1
  87. package/dist/cdn/shared-3f35fa81.js +0 -1
  88. package/dist/cdn/shared-ace85f1b.js +0 -1
  89. package/dist/cdn/shared-d8852c42.js +0 -1
@@ -16,10 +16,64 @@ import { getDefaultJSON } from "./defaults.js";
16
16
  import { live } from 'lit-html/directives/live';
17
17
  const NS = 'template-config-form';
18
18
  const Base = ScopedElementsMixin(ResponsiveMixin(ConfigurableMixin(ThemeableMixin(TranslatableMixin(NucleonElement, NS)))));
19
+ /**
20
+ * Form element for creating or editing template configs (`fx:template_config`).
21
+ *
22
+ * @slot cart-type:before
23
+ * @slot cart-type:after
24
+ *
25
+ * @slot foxycomplete:before
26
+ * @slot foxycomplete:after
27
+ *
28
+ * @slot locations:before
29
+ * @slot locations:after
30
+ *
31
+ * @slot hidden-fields:before
32
+ * @slot hidden-fields:after
33
+ *
34
+ * @slot cards:before
35
+ * @slot cards:after
36
+ *
37
+ * @slot checkout-type:before
38
+ * @slot checkout-type:after
39
+ *
40
+ * @slot consent:before
41
+ * @slot consent:after
42
+ *
43
+ * @slot fields:before
44
+ * @slot fields:after
45
+ *
46
+ * @slot google-analytics:before
47
+ * @slot google-analytics:after
48
+ *
49
+ * @slot segment-io:before
50
+ * @slot segment-io:after
51
+ *
52
+ * @slot troubleshooting:before
53
+ * @slot troubleshooting:after
54
+ *
55
+ * @slot custom-config:before
56
+ * @slot custom-config:after
57
+ *
58
+ * @slot header:before
59
+ * @slot header:after
60
+ *
61
+ * @slot custom-fields:before
62
+ * @slot custom-fields:after
63
+ *
64
+ * @slot footer:before
65
+ * @slot footer:after
66
+ *
67
+ * @element foxy-template-config-form
68
+ * @since 1.14.0
69
+ */
19
70
  export class TemplateConfigForm extends Base {
20
71
  constructor() {
21
72
  super(...arguments);
73
+ this.templates = {};
74
+ /** URI of the `fx:countries` hAPI resource. */
22
75
  this.countries = '';
76
+ /** URI of the `fx:regions` hAPI resource. */
23
77
  this.regions = '';
24
78
  this.__addHiddenFieldInputValue = '';
25
79
  }
@@ -95,17 +149,25 @@ export class TemplateConfigForm extends Base {
95
149
  __renderCartType(json) {
96
150
  const { lang, ns } = this;
97
151
  const items = ['default', 'fullpage', 'custom'];
152
+ const isDisabled = this.disabledSelector.matches('cart-type', true);
98
153
  return html `
99
154
  <div>
100
155
  ${this.renderTemplateOrSlot('cart-type:before')}
101
156
 
102
157
  <x-group frame>
103
- <foxy-i18n slot="header" lang=${lang} key="cart_type" ns=${ns}></foxy-i18n>
158
+ <foxy-i18n
159
+ class=${isDisabled ? 'text-disabled' : ''}
160
+ slot="header"
161
+ lang=${lang}
162
+ key="cart_type"
163
+ ns=${ns}
164
+ >
165
+ </foxy-i18n>
104
166
 
105
167
  <x-choice
106
168
  .value=${json.cart_type}
107
169
  .items=${items}
108
- ?disabled=${this.disabledSelector.matches('cart-type', true)}
170
+ ?disabled=${isDisabled}
109
171
  ?readonly=${this.readonlySelector.matches('cart-type', true)}
110
172
  @change=${(evt) => {
111
173
  this.edit({ json: JSON.stringify({ ...json, cart_type: evt.detail }) });
@@ -116,7 +178,7 @@ export class TemplateConfigForm extends Base {
116
178
  <div slot="${item}-label" class="grid leading-s py-s">
117
179
  <foxy-i18n lang=${lang} key="cart_type_${item}" ns=${ns}></foxy-i18n>
118
180
  <foxy-i18n
119
- class="text-secondary text-xs"
181
+ class="text-xs ${isDisabled ? 'text-disabled' : 'text-secondary'}"
120
182
  lang=${lang}
121
183
  key="cart_type_${item}_explainer"
122
184
  ns=${ns}
@@ -155,8 +217,7 @@ export class TemplateConfigForm extends Base {
155
217
  this.edit({ json: JSON.stringify({ ...json, foxycomplete: newConfig }) });
156
218
  }}
157
219
  >
158
- <foxy-i18n class="leading-s block" lang=${lang} key="show_country_flags" ns=${ns}>
159
- </foxy-i18n>
220
+ <foxy-i18n lang=${lang} key="show_country_flags" ns=${ns}></foxy-i18n>
160
221
  </x-checkbox>
161
222
  `;
162
223
  return html `
@@ -164,7 +225,14 @@ export class TemplateConfigForm extends Base {
164
225
  ${this.renderTemplateOrSlot('foxycomplete:before')}
165
226
 
166
227
  <x-group frame>
167
- <foxy-i18n slot="header" lang=${lang} key="foxycomplete" ns=${ns}></foxy-i18n>
228
+ <foxy-i18n
229
+ class=${isDisabled ? 'text-disabled' : ''}
230
+ slot="header"
231
+ lang=${lang}
232
+ key="foxycomplete"
233
+ ns=${ns}
234
+ >
235
+ </foxy-i18n>
168
236
 
169
237
  <x-choice
170
238
  .value=${value}
@@ -187,7 +255,7 @@ export class TemplateConfigForm extends Base {
187
255
  <div slot="${item}-label" class="grid leading-s py-s">
188
256
  <foxy-i18n lang=${lang} key="foxycomplete_${item}" ns=${ns}></foxy-i18n>
189
257
  <foxy-i18n
190
- class="text-secondary text-xs"
258
+ class="text-xs ${isDisabled ? 'text-disabled' : 'text-secondary'}"
191
259
  lang=${lang}
192
260
  key="foxycomplete_${item}_explainer"
193
261
  ns=${ns}
@@ -253,6 +321,8 @@ export class TemplateConfigForm extends Base {
253
321
  __renderLocations(json) {
254
322
  const { lang, ns } = this;
255
323
  const config = json.location_filtering;
324
+ const isDisabled = this.disabledSelector.matches('locations', true);
325
+ const isReadonly = this.readonlySelector.matches('locations', true);
256
326
  const shippingChoice = config.shipping_filter_type === 'blacklist' ? 'block' : 'allow';
257
327
  const billingChoice = config.usage === 'both'
258
328
  ? 'copy'
@@ -285,16 +355,31 @@ export class TemplateConfigForm extends Base {
285
355
  ${this.renderTemplateOrSlot('locations:before')}
286
356
 
287
357
  <x-group frame>
288
- <foxy-i18n slot="header" lang=${lang} key="location_plural" ns=${ns}></foxy-i18n>
358
+ <foxy-i18n
359
+ class=${isDisabled ? 'text-disabled' : ''}
360
+ slot="header"
361
+ lang=${lang}
362
+ key="location_plural"
363
+ ns=${ns}
364
+ >
365
+ </foxy-i18n>
289
366
 
290
367
  <div class="grid sm-grid-cols-2 bg-contrast-10" style="gap: 1px">
291
368
  <x-group class="bg-base pt-m">
292
- <foxy-i18n class="text-tertiary" slot="header" lang=${lang} key="shipping" ns=${ns}>
369
+ <foxy-i18n
370
+ class=${isDisabled ? 'text-disabled' : 'text-tertiary'}
371
+ slot="header"
372
+ lang=${lang}
373
+ key="shipping"
374
+ ns=${ns}
375
+ >
293
376
  </foxy-i18n>
294
377
 
295
378
  <x-choice
296
379
  .items=${['allow', 'block']}
297
380
  .value=${shippingChoice}
381
+ ?disabled=${isDisabled}
382
+ ?readonly=${isReadonly}
298
383
  @change=${(evt) => {
299
384
  if (config.usage !== 'both')
300
385
  config.usage = 'independent';
@@ -314,8 +399,8 @@ export class TemplateConfigForm extends Base {
314
399
  slot=${shippingChoice}
315
400
  lang=${lang}
316
401
  ns=${ns}
317
- ?disabled=${this.disabledSelector.matches('locations', true)}
318
- ?readonly=${this.readonlySelector.matches('locations', true)}
402
+ ?disabled=${isDisabled}
403
+ ?readonly=${isReadonly}
319
404
  @update:countries=${(evt) => {
320
405
  config.shipping_filter_values = evt.currentTarget.countries;
321
406
  normalize();
@@ -327,12 +412,20 @@ export class TemplateConfigForm extends Base {
327
412
  </x-group>
328
413
 
329
414
  <x-group class="bg-base pt-m">
330
- <foxy-i18n class="text-tertiary" slot="header" lang=${lang} key="billing" ns=${ns}>
415
+ <foxy-i18n
416
+ class=${isDisabled ? 'text-disabled' : 'text-tertiary'}
417
+ slot="header"
418
+ lang=${lang}
419
+ key="billing"
420
+ ns=${ns}
421
+ >
331
422
  </foxy-i18n>
332
423
 
333
424
  <x-choice
334
425
  .items=${['allow', 'block', 'copy']}
335
426
  .value=${billingChoice}
427
+ ?disabled=${isDisabled}
428
+ ?readonly=${isReadonly}
336
429
  @change=${(evt) => {
337
430
  if (evt.detail === 'copy') {
338
431
  config.usage = 'both';
@@ -357,8 +450,8 @@ export class TemplateConfigForm extends Base {
357
450
  slot=${billingChoice}
358
451
  lang=${lang}
359
452
  ns=${ns}
360
- ?disabled=${this.disabledSelector.matches('locations', true)}
361
- ?readonly=${this.readonlySelector.matches('locations', true)}
453
+ ?disabled=${isDisabled}
454
+ ?readonly=${isReadonly}
362
455
  ?hidden=${billingChoice === 'copy'}
363
456
  @update:countries=${(evt) => {
364
457
  config.billing_filter_values = evt.currentTarget.countries;
@@ -380,6 +473,8 @@ export class TemplateConfigForm extends Base {
380
473
  const suggestions = [];
381
474
  const fields = [];
382
475
  const config = json.cart_display_config;
476
+ const isDisabled = this.disabledSelector.matches('hidden-fields', true);
477
+ const isReadonly = this.readonlySelector.matches('hidden-fields', true);
383
478
  for (const key in config) {
384
479
  if (!key.startsWith('show_'))
385
480
  continue;
@@ -409,31 +504,54 @@ export class TemplateConfigForm extends Base {
409
504
  ${this.renderTemplateOrSlot('hidden-fields:before')}
410
505
 
411
506
  <x-group frame>
412
- <foxy-i18n slot="header" lang=${lang} key="hidden_fields" ns=${ns}></foxy-i18n>
507
+ <foxy-i18n
508
+ class=${isDisabled ? 'text-disabled' : ''}
509
+ slot="header"
510
+ lang=${lang}
511
+ key="hidden_fields"
512
+ ns=${ns}
513
+ >
514
+ </foxy-i18n>
413
515
 
414
516
  <div class="divide-y divide-contrast-10">
415
- ${fields.map(field => html `
416
- <div class="h-m ml-m pr-xs flex items-center justify-between">
517
+ ${fields.map(field => {
518
+ return html `
519
+ <div
520
+ class=${classMap({
521
+ 'h-m ml-m pr-xs flex items-center justify-between': true,
522
+ 'text-secondary': isReadonly,
523
+ 'text-disabled': isDisabled,
524
+ })}
525
+ >
417
526
  ${suggestions.includes(field)
418
- ? html `<foxy-i18n lang=${lang} key=${field} ns=${ns}></foxy-i18n>`
419
- : html `<span>${field}</span>`}
527
+ ? html `<foxy-i18n lang=${lang} key=${field} ns=${ns}></foxy-i18n>`
528
+ : html `<span>${field}</span>`}
420
529
 
421
530
  <button
422
- class="flex w-xs h-xs items-center justify-center rounded-full transition-colors hover-bg-error-10 hover-text-error focus-outline-none focus-ring-2 focus-ring-inset focus-ring-error-50"
531
+ class=${classMap({
532
+ 'w-xs h-xs rounded-full transition-colors': true,
533
+ 'hover-bg-error-10 hover-text-error': !isDisabled,
534
+ 'focus-outline-none focus-ring-2 ring-inset ring-error-50': !isDisabled,
535
+ 'cursor-default': isDisabled,
536
+ 'flex': !isReadonly,
537
+ 'hidden': isReadonly,
538
+ })}
539
+ ?disabled=${isDisabled}
423
540
  @click=${() => {
424
- if (typeof config[`show_${field}`] === 'boolean') {
425
- config[`show_${field}`] = true;
426
- }
427
- else {
428
- config.hidden_product_options = config.hidden_product_options.filter(option => option !== field);
429
- }
430
- this.edit({ json: JSON.stringify(json) });
431
- }}
541
+ if (typeof config[`show_${field}`] === 'boolean') {
542
+ config[`show_${field}`] = true;
543
+ }
544
+ else {
545
+ config.hidden_product_options = config.hidden_product_options.filter(option => option !== field);
546
+ }
547
+ this.edit({ json: JSON.stringify(json) });
548
+ }}
432
549
  >
433
- <iron-icon icon="icons:close" class="icon-inline text-m"></iron-icon>
550
+ <iron-icon icon="icons:close" class="icon-inline text-m m-auto"></iron-icon>
434
551
  </button>
435
552
  </div>
436
- `)}
553
+ `;
554
+ })}
437
555
  </div>
438
556
 
439
557
  <div
@@ -441,6 +559,8 @@ export class TemplateConfigForm extends Base {
441
559
  class=${classMap({
442
560
  'h-m flex items-center ring-inset ring-primary-50 focus-within-ring-2': true,
443
561
  'border-t border-contrast-10': fields.length > 0,
562
+ 'flex': !isReadonly,
563
+ 'hidden': isReadonly,
444
564
  })}
445
565
  >
446
566
  <input
@@ -448,6 +568,7 @@ export class TemplateConfigForm extends Base {
448
568
  class="w-full bg-transparent appearance-none h-m px-m focus-outline-none"
449
569
  list="hidden-fields-list"
450
570
  .value=${live(this.__addHiddenFieldInputValue)}
571
+ ?disabled=${isDisabled}
451
572
  @keydown=${(evt) => evt.key === 'Enter' && addField()}
452
573
  @input=${(evt) => {
453
574
  this.__addHiddenFieldInputValue = evt.currentTarget.value;
@@ -485,6 +606,7 @@ export class TemplateConfigForm extends Base {
485
606
  __renderCards(json) {
486
607
  const { lang, ns } = this;
487
608
  const isDisabled = this.disabledSelector.matches('cards', true);
609
+ const isReadonly = this.readonlySelector.matches('cards', true);
488
610
  const config = json.supported_payment_cards;
489
611
  let skipForSaved;
490
612
  let skipForSSO;
@@ -516,7 +638,14 @@ export class TemplateConfigForm extends Base {
516
638
 
517
639
  <div class="space-y-xs">
518
640
  <x-group frame>
519
- <foxy-i18n slot="header" lang=${lang} key="supported_cards" ns=${ns}></foxy-i18n>
641
+ <foxy-i18n
642
+ class=${isDisabled ? 'text-disabled' : ''}
643
+ slot="header"
644
+ lang=${lang}
645
+ key="supported_cards"
646
+ ns=${ns}
647
+ >
648
+ </foxy-i18n>
520
649
 
521
650
  <div class="flex flex-wrap m-xs p-s">
522
651
  ${Object.entries(logos).map(([type, logo]) => {
@@ -534,10 +663,12 @@ export class TemplateConfigForm extends Base {
534
663
  <label
535
664
  class=${classMap({
536
665
  'overflow-hidden transition-colors flex rounded border': true,
537
- 'border-primary bg-primary-10 text-primary': isChecked,
538
- 'hover-text-body': isChecked && !isDisabled,
666
+ 'border-primary bg-primary-10 text-primary': isChecked && !isReadonly,
667
+ 'border-contrast bg-contrast-5 text-secondary': isChecked && isReadonly,
668
+ 'hover-text-body': isChecked && !isDisabled && !isReadonly,
539
669
  'border-contrast-10': !isChecked,
540
- 'hover-border-primary hover-text-primary': !isChecked && !isDisabled,
670
+ 'hover-border-primary': !isChecked && !isDisabled && !isReadonly,
671
+ 'hover-text-primary': !isChecked && !isDisabled && !isReadonly,
541
672
  })}
542
673
  >
543
674
  <div class="h-s">${logo}</div>
@@ -552,6 +683,8 @@ export class TemplateConfigForm extends Base {
552
683
  ?disabled=${isDisabled}
553
684
  ?checked=${isChecked}
554
685
  @change=${(evt) => {
686
+ if (isReadonly)
687
+ return evt.preventDefault();
555
688
  evt.stopPropagation();
556
689
  if (isChecked) {
557
690
  config.splice(config.indexOf(type), 1);
@@ -572,6 +705,7 @@ export class TemplateConfigForm extends Base {
572
705
  <x-checkbox
573
706
  class="m-s"
574
707
  ?disabled=${isDisabled || json.csc_requirements === 'new_cards_only'}
708
+ ?readonly=${isReadonly}
575
709
  ?checked=${skipForSaved}
576
710
  @change=${(evt) => {
577
711
  json.csc_requirements = evt.detail ? 'sso_only' : 'all_cards';
@@ -585,6 +719,7 @@ export class TemplateConfigForm extends Base {
585
719
  <x-checkbox
586
720
  class="m-s"
587
721
  ?disabled=${isDisabled}
722
+ ?readonly=${isReadonly}
588
723
  ?checked=${skipForSSO}
589
724
  @change=${(evt) => {
590
725
  json.csc_requirements = evt.detail
@@ -602,7 +737,7 @@ export class TemplateConfigForm extends Base {
602
737
  </x-group>
603
738
 
604
739
  <foxy-i18n
605
- class="text-xs text-secondary leading-s block"
740
+ class="text-xs leading-s block ${isDisabled ? 'text-disabled' : 'text-secondary'}"
606
741
  lang=${lang}
607
742
  key="supported_cards_disclaimer"
608
743
  ns=${ns}
@@ -616,17 +751,26 @@ export class TemplateConfigForm extends Base {
616
751
  }
617
752
  __renderCheckoutType(json) {
618
753
  const { lang, ns } = this;
754
+ const isDisabled = this.disabledSelector.matches('checkout-type', true);
755
+ const isReadonly = this.readonlySelector.matches('checkout-type', true);
619
756
  return html `
620
757
  <div>
621
758
  ${this.renderTemplateOrSlot('checkout-type:before')}
622
759
 
623
760
  <div class="space-y-xs">
624
761
  <x-group frame>
625
- <foxy-i18n slot="header" lang=${lang} key="checkout_type" ns=${ns}></foxy-i18n>
762
+ <foxy-i18n
763
+ class=${isDisabled ? 'text-disabled' : ''}
764
+ slot="header"
765
+ lang=${lang}
766
+ key="checkout_type"
767
+ ns=${ns}
768
+ >
769
+ </foxy-i18n>
626
770
 
627
771
  <x-choice
628
- ?disabled=${this.disabledSelector.matches('checkout-type', true)}
629
- ?readonly=${this.readonlySelector.matches('checkout-type', true)}
772
+ ?disabled=${isDisabled}
773
+ ?readonly=${isReadonly}
630
774
  .items=${['default_account', 'default_guest', 'guest_only', 'account_only']}
631
775
  .value=${json.checkout_type}
632
776
  .getText=${(item) => this.t(`checkout_type_${item}`)}
@@ -639,7 +783,7 @@ export class TemplateConfigForm extends Base {
639
783
  </x-group>
640
784
 
641
785
  <foxy-i18n
642
- class="text-secondary text-xs leading-s block"
786
+ class="text-xs leading-s block ${isDisabled ? 'text-disabled' : 'text-secondary'}"
643
787
  lang=${lang}
644
788
  key="checkout_type_helper_text"
645
789
  ns=${ns}
@@ -664,7 +808,14 @@ export class TemplateConfigForm extends Base {
664
808
  ${this.renderTemplateOrSlot('consent:before')}
665
809
 
666
810
  <x-group frame>
667
- <foxy-i18n slot="header" lang=${lang} key="consent" ns=${ns}></foxy-i18n>
811
+ <foxy-i18n
812
+ class=${isDisabled ? 'text-disabled' : ''}
813
+ slot="header"
814
+ lang=${lang}
815
+ key="consent"
816
+ ns=${ns}
817
+ >
818
+ </foxy-i18n>
668
819
 
669
820
  <x-checkbox
670
821
  ?disabled=${isDisabled}
@@ -682,7 +833,7 @@ export class TemplateConfigForm extends Base {
682
833
  <div class="flex flex-col">
683
834
  <foxy-i18n lang=${lang} key="display_tos_link" ns=${ns}></foxy-i18n>
684
835
  <foxy-i18n
685
- class="text-xs leading-s text-secondary"
836
+ class="text-xs leading-s ${isDisabled ? 'text-disabled' : 'text-secondary'}"
686
837
  lang=${lang}
687
838
  key="display_tos_link_explainer"
688
839
  ns=${ns}
@@ -751,7 +902,7 @@ export class TemplateConfigForm extends Base {
751
902
  <div class="flex flex-col">
752
903
  <foxy-i18n lang=${lang} key="newsletter_subscribe" ns=${ns}></foxy-i18n>
753
904
  <foxy-i18n
754
- class="text-xs leading-s text-secondary"
905
+ class="text-xs leading-s ${isDisabled ? 'text-disabled' : 'text-secondary'}"
755
906
  lang=${lang}
756
907
  key="newsletter_subscribe_explainer"
757
908
  ns=${ns}
@@ -775,7 +926,7 @@ export class TemplateConfigForm extends Base {
775
926
  <div class="flex flex-col">
776
927
  <foxy-i18n lang=${lang} key="display_sdta" ns=${ns}></foxy-i18n>
777
928
  <foxy-i18n
778
- class="text-xs leading-s text-secondary"
929
+ class="text-xs leading-s ${isDisabled ? 'text-disabled' : 'text-secondary'}"
779
930
  lang=${lang}
780
931
  key="display_sdta_explainer"
781
932
  ns=${ns}
@@ -792,6 +943,7 @@ export class TemplateConfigForm extends Base {
792
943
  __renderFields(json) {
793
944
  const { lang, ns } = this;
794
945
  const isDisabled = this.disabledSelector.matches('fields', true);
946
+ const isReadonly = this.readonlySelector.matches('fields', true);
795
947
  const config = json.custom_checkout_field_requirements;
796
948
  const options = {
797
949
  cart_controls: ['enabled', 'disabled'],
@@ -813,12 +965,25 @@ export class TemplateConfigForm extends Base {
813
965
  ${this.renderTemplateOrSlot('fields:before')}
814
966
 
815
967
  <x-group frame>
816
- <foxy-i18n slot="header" lang=${lang} key="field_plural" ns=${ns}></foxy-i18n>
968
+ <foxy-i18n
969
+ class=${isDisabled ? 'text-disabled' : ''}
970
+ slot="header"
971
+ lang=${lang}
972
+ key="field_plural"
973
+ ns=${ns}
974
+ >
975
+ </foxy-i18n>
817
976
 
818
977
  <div class="bg-contrast-10 grid grid-cols-1 md-grid-cols-2" style="gap: 1px">
819
978
  ${Object.entries(options).map(([property, values]) => {
820
979
  return html `
821
- <label class="flex items-center pl-m bg-base">
980
+ <label
981
+ class=${classMap({
982
+ 'flex items-center pl-m bg-base': true,
983
+ 'text-secondary': isReadonly,
984
+ 'text-disabled': isDisabled,
985
+ })}
986
+ >
822
987
  <foxy-i18n
823
988
  class="flex-1"
824
989
  lang=${lang}
@@ -829,14 +994,32 @@ export class TemplateConfigForm extends Base {
829
994
 
830
995
  <div
831
996
  class=${classMap({
832
- 'px-s m-xs flex items-center cursor-pointer rounded leading-none': true,
997
+ 'flex items-center text-right font-medium h-s px-s m-xs': isReadonly,
998
+ 'hidden': !isReadonly,
999
+ })}
1000
+ >
1001
+ ${this.t(values.find(value => config[property] === value))}
1002
+ </div>
1003
+
1004
+ <div
1005
+ class=${classMap({
1006
+ 'px-s m-xs flex items-center rounded leading-none': true,
833
1007
  'ring-primary-50 ring-inset focus-within-ring-2': !isDisabled,
834
1008
  'hover-text-primary': !isDisabled,
835
- 'opacity-50': isDisabled,
1009
+ 'cursor-pointer': !isDisabled,
1010
+ 'cursor-default': isDisabled,
1011
+ 'flex': !isReadonly,
1012
+ 'hidden': isReadonly,
836
1013
  })}
837
1014
  >
838
1015
  <select
839
- class="h-s mr-xs text-right appearance-none bg-transparent cursor-pointer focus-outline-none font-medium"
1016
+ class=${classMap({
1017
+ 'h-s mr-xs text-right appearance-none bg-transparent font-medium': true,
1018
+ 'focus-outline-none cursor-pointer': !isDisabled,
1019
+ 'cursor-default': isDisabled,
1020
+ })}
1021
+ ?disabled=${isDisabled}
1022
+ ?readonly=${isReadonly}
840
1023
  @change=${(evt) => {
841
1024
  const select = evt.currentTarget;
842
1025
  const value = select.options[select.options.selectedIndex].value;
@@ -886,7 +1069,7 @@ export class TemplateConfigForm extends Base {
886
1069
  ${this.renderTemplateOrSlot('google-analytics:before')}
887
1070
 
888
1071
  <x-group frame>
889
- <span slot="header">Google Analytics</span>
1072
+ <span class=${isDisabled ? 'text-disabled' : ''} slot="header">Google Analytics</span>
890
1073
 
891
1074
  <div class="p-m space-y-m">
892
1075
  <vaadin-text-field
@@ -919,7 +1102,7 @@ export class TemplateConfigForm extends Base {
919
1102
  <div class="flex flex-col">
920
1103
  <foxy-i18n lang=${lang} key="ga_include_on_site" ns=${ns}></foxy-i18n>
921
1104
  <foxy-i18n
922
- class="text-xs leading-s text-secondary"
1105
+ class="text-xs leading-s ${isDisabled ? 'text-disabled' : 'text-secondary'}"
923
1106
  lang=${lang}
924
1107
  key="ga_include_on_site_explainer"
925
1108
  ns=${ns}
@@ -945,7 +1128,7 @@ export class TemplateConfigForm extends Base {
945
1128
  ${this.renderTemplateOrSlot('segment-io:before')}
946
1129
 
947
1130
  <x-group frame>
948
- <span slot="header">Segment.io</span>
1131
+ <span class=${isDisabled ? 'text-disabled' : ''} slot="header">Segment.io</span>
949
1132
 
950
1133
  <div class="p-m">
951
1134
  <vaadin-text-field
@@ -975,17 +1158,26 @@ export class TemplateConfigForm extends Base {
975
1158
  __renderTroubleshooting(json) {
976
1159
  const { lang, ns } = this;
977
1160
  const config = json.debug;
1161
+ const isDisabled = this.disabledSelector.matches('troubleshooting', true);
1162
+ const isReadonly = this.readonlySelector.matches('troubleshooting', true);
978
1163
  return html `
979
1164
  <div>
980
1165
  ${this.renderTemplateOrSlot('troubleshooting:before')}
981
1166
 
982
1167
  <x-group frame>
983
- <foxy-i18n slot="header" lang=${lang} key="troubleshooting" ns=${ns}></foxy-i18n>
1168
+ <foxy-i18n
1169
+ class=${isDisabled ? 'text-disabled' : ''}
1170
+ slot="header"
1171
+ lang=${lang}
1172
+ key="troubleshooting"
1173
+ ns=${ns}
1174
+ >
1175
+ </foxy-i18n>
984
1176
 
985
1177
  <div class="p-m space-y-m">
986
1178
  <x-checkbox
987
- ?disabled=${this.disabledSelector.matches('troubleshooting', true)}
988
- ?readonly=${this.readonlySelector.matches('troubleshooting', true)}
1179
+ ?disabled=${isDisabled}
1180
+ ?readonly=${isReadonly}
989
1181
  ?checked=${config.usage === 'required'}
990
1182
  @change=${(evt) => {
991
1183
  config.usage = evt.detail ? 'required' : 'none';
@@ -995,7 +1187,7 @@ export class TemplateConfigForm extends Base {
995
1187
  <div class="flex flex-col">
996
1188
  <foxy-i18n lang=${lang} key="troubleshooting_debug" ns=${ns}></foxy-i18n>
997
1189
  <foxy-i18n
998
- class="text-xs leading-s text-secondary"
1190
+ class="text-xs leading-s ${isDisabled ? 'text-disabled' : 'text-secondary'}"
999
1191
  lang=${lang}
1000
1192
  key="troubleshooting_debug_explainer"
1001
1193
  ns=${ns}