@foxy.io/elements 1.18.0-beta.20 → 1.18.0-beta.21

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 (214) 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-admin-subscription-card.js +1 -1
  5. package/dist/cdn/foxy-api-browser.js +1 -1
  6. package/dist/cdn/foxy-applied-coupon-code-card.js +1 -1
  7. package/dist/cdn/foxy-applied-coupon-code-form.js +1 -1
  8. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  9. package/dist/cdn/foxy-attribute-card.js +1 -1
  10. package/dist/cdn/foxy-attribute-form.js +1 -1
  11. package/dist/cdn/foxy-cancellation-form.js +1 -1
  12. package/dist/cdn/foxy-cart-card.js +1 -1
  13. package/dist/cdn/foxy-cart-form.js +1 -1
  14. package/dist/cdn/foxy-collection-page.js +1 -1
  15. package/dist/cdn/foxy-collection-pages.js +1 -1
  16. package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
  17. package/dist/cdn/foxy-coupon-card.js +1 -1
  18. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  19. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  20. package/dist/cdn/foxy-coupon-detail-card.js +1 -1
  21. package/dist/cdn/foxy-coupon-form.js +1 -1
  22. package/dist/cdn/foxy-custom-field-card.js +1 -1
  23. package/dist/cdn/foxy-custom-field-form.js +1 -1
  24. package/dist/cdn/foxy-customer-card.js +1 -1
  25. package/dist/cdn/foxy-customer-form.js +1 -1
  26. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  27. package/dist/cdn/foxy-customer-portal.js +2 -2
  28. package/dist/cdn/foxy-customer.js +1 -1
  29. package/dist/cdn/foxy-customers-table.js +1 -1
  30. package/dist/cdn/foxy-discount-builder.js +1 -1
  31. package/dist/cdn/foxy-discount-card.js +1 -1
  32. package/dist/cdn/foxy-discount-detail-card.js +1 -1
  33. package/dist/cdn/foxy-donation.js +1 -1
  34. package/dist/cdn/foxy-email-template-card.js +1 -1
  35. package/dist/cdn/foxy-email-template-form.js +1 -1
  36. package/dist/cdn/foxy-error-entry-card.js +1 -1
  37. package/dist/cdn/foxy-form-dialog.js +1 -1
  38. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  39. package/dist/cdn/foxy-gift-card-card.js +1 -1
  40. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  41. package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
  42. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  43. package/dist/cdn/foxy-gift-card-form.js +1 -1
  44. package/dist/cdn/foxy-i18n-editor.js +2 -2
  45. package/dist/cdn/foxy-i18n.js +1 -1
  46. package/dist/cdn/foxy-integration-card.js +1 -1
  47. package/dist/cdn/foxy-integration-form.js +1 -1
  48. package/dist/cdn/foxy-item-card.js +1 -1
  49. package/dist/cdn/foxy-item-category-card.js +1 -1
  50. package/dist/cdn/foxy-item-category-form.js +1 -1
  51. package/dist/cdn/foxy-item-form.js +1 -1
  52. package/dist/cdn/foxy-item-option-card.js +1 -1
  53. package/dist/cdn/foxy-item-option-form.js +1 -1
  54. package/dist/cdn/foxy-items-form.js +1 -1
  55. package/dist/cdn/foxy-pagination.js +1 -1
  56. package/dist/cdn/foxy-payment-card.js +1 -1
  57. package/dist/cdn/foxy-payment-method-card.js +1 -1
  58. package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
  59. package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
  60. package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
  61. package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
  62. package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
  63. package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
  64. package/dist/cdn/foxy-query-builder.js +1 -1
  65. package/dist/cdn/foxy-report-form.js +2 -2
  66. package/dist/cdn/foxy-reports-table.js +1 -1
  67. package/dist/cdn/foxy-shipment-card.js +1 -1
  68. package/dist/cdn/foxy-shipping-method-card.js +1 -1
  69. package/dist/cdn/foxy-sign-in-form.js +1 -1
  70. package/dist/cdn/foxy-spinner.js +1 -1
  71. package/dist/cdn/foxy-store-form.js +1 -1
  72. package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
  73. package/dist/cdn/foxy-subscription-card.js +1 -1
  74. package/dist/cdn/foxy-subscription-form.js +1 -1
  75. package/dist/cdn/foxy-subscription-settings-form.js +1 -1
  76. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  77. package/dist/cdn/foxy-table.js +1 -1
  78. package/dist/cdn/foxy-tax-card.js +1 -1
  79. package/dist/cdn/foxy-tax-form.js +1 -1
  80. package/dist/cdn/foxy-template-config-form.js +1 -1
  81. package/dist/cdn/foxy-template-form.js +1 -1
  82. package/dist/cdn/foxy-template-set-card.js +1 -1
  83. package/dist/cdn/foxy-template-set-form.js +1 -1
  84. package/dist/cdn/foxy-transaction-card.js +1 -1
  85. package/dist/cdn/foxy-transaction.js +1 -1
  86. package/dist/cdn/foxy-transactions-table.js +4 -4
  87. package/dist/cdn/foxy-user-form.js +1 -1
  88. package/dist/cdn/foxy-users-table.js +1 -1
  89. package/dist/cdn/foxy-webhook-card.js +1 -1
  90. package/dist/cdn/foxy-webhook-form.js +1 -1
  91. package/dist/cdn/foxy-webhook-log-card.js +1 -1
  92. package/dist/cdn/foxy-webhook-status-card.js +1 -1
  93. package/dist/cdn/{shared-2b2002ac.js → shared-02d4bc14.js} +1 -1
  94. package/dist/cdn/shared-0301f5c5.js +1 -0
  95. package/dist/cdn/{shared-6cc53630.js → shared-0a40a749.js} +1 -1
  96. package/dist/cdn/{shared-869df7ed.js → shared-0d3bec9f.js} +1 -1
  97. package/dist/cdn/{shared-bae9da44.js → shared-0f29fba2.js} +1 -1
  98. package/dist/cdn/{shared-88c7755d.js → shared-1392183b.js} +1 -1
  99. package/dist/cdn/{shared-68e0cf30.js → shared-13e6fe8a.js} +1 -1
  100. package/dist/cdn/{shared-b48e5aaf.js → shared-18d42566.js} +1 -1
  101. package/dist/cdn/{shared-df462496.js → shared-206b4ae2.js} +1 -1
  102. package/dist/cdn/{shared-9d7bbdd8.js → shared-25ecdf66.js} +1 -1
  103. package/dist/cdn/{shared-179ff8af.js → shared-2bd47510.js} +3 -3
  104. package/dist/cdn/{shared-bf47ead0.js → shared-2d2ce3b1.js} +1 -1
  105. package/dist/cdn/{shared-17c1eab2.js → shared-307382e5.js} +1 -1
  106. package/dist/cdn/{shared-fafafc09.js → shared-324f9551.js} +1 -1
  107. package/dist/cdn/{shared-7fb8ecc5.js → shared-33912f50.js} +1 -1
  108. package/dist/cdn/{shared-13982611.js → shared-3b249b20.js} +1 -1
  109. package/dist/cdn/{shared-d4a652b7.js → shared-3e8cd935.js} +1 -1
  110. package/dist/cdn/{shared-1e94e6dd.js → shared-459a5ec4.js} +1 -1
  111. package/dist/cdn/{shared-cdc183c5.js → shared-45db2087.js} +1 -1
  112. package/dist/cdn/{shared-776f948d.js → shared-46e22714.js} +1 -1
  113. package/dist/cdn/{shared-0d4f9b06.js → shared-4817dcd1.js} +1 -1
  114. package/dist/cdn/{shared-79d6a262.js → shared-4cbd9a4f.js} +1 -1
  115. package/dist/cdn/{shared-ae588315.js → shared-674c1c04.js} +1 -1
  116. package/dist/cdn/{shared-23bf6ee6.js → shared-6ac71f60.js} +1 -1
  117. package/dist/cdn/{shared-0f649dc6.js → shared-715ee51e.js} +5 -5
  118. package/dist/cdn/{shared-5c6eb602.js → shared-71beb422.js} +1 -1
  119. package/dist/cdn/{shared-a41f2200.js → shared-72279946.js} +1 -1
  120. package/dist/cdn/shared-7304a1ab.js +1 -0
  121. package/dist/cdn/{shared-5b3ae513.js → shared-7788977c.js} +1 -1
  122. package/dist/cdn/{shared-a90a5235.js → shared-780ead03.js} +1 -1
  123. package/dist/cdn/{shared-e94165e9.js → shared-78f6e15f.js} +1 -1
  124. package/dist/cdn/{shared-1db07286.js → shared-7992035c.js} +3 -3
  125. package/dist/cdn/{shared-9d511d7e.js → shared-7a739f89.js} +1 -1
  126. package/dist/cdn/{shared-a343ec6b.js → shared-80378a15.js} +1 -1
  127. package/dist/cdn/{shared-dbd4a5e8.js → shared-8e6a8a88.js} +1 -1
  128. package/dist/cdn/{shared-c379590f.js → shared-915e8780.js} +1 -1
  129. package/dist/cdn/{shared-1351c1e3.js → shared-9291d900.js} +1 -1
  130. package/dist/cdn/{shared-7d658c02.js → shared-9643b6c8.js} +1 -1
  131. package/dist/cdn/{shared-21689ac0.js → shared-9862ca28.js} +1 -1
  132. package/dist/cdn/{shared-5ada1ccb.js → shared-a4165acb.js} +1 -1
  133. package/dist/cdn/{shared-ea6c8bae.js → shared-a6de944b.js} +1 -1
  134. package/dist/cdn/{shared-b7636a23.js → shared-ad3c1ddc.js} +1 -1
  135. package/dist/cdn/{shared-11ffd643.js → shared-c6567654.js} +1 -1
  136. package/dist/cdn/{shared-e99fa3d6.js → shared-d0c5c38f.js} +1 -1
  137. package/dist/cdn/{shared-90c7dbdb.js → shared-d6a78c23.js} +1 -1
  138. package/dist/cdn/{shared-2f6e33b6.js → shared-d7c271d2.js} +1 -1
  139. package/dist/cdn/{shared-d384d6a3.js → shared-d7dfd3d8.js} +1 -1
  140. package/dist/cdn/{shared-413415b0.js → shared-daab7e76.js} +1 -1
  141. package/dist/cdn/{shared-8eb4c8d7.js → shared-e0615601.js} +1 -1
  142. package/dist/cdn/{shared-3ca1e8e4.js → shared-e39be772.js} +1 -1
  143. package/dist/cdn/{shared-cf784db1.js → shared-e7e0ee80.js} +1 -1
  144. package/dist/cdn/{shared-034c6aeb.js → shared-ef98812b.js} +1 -1
  145. package/dist/cdn/{shared-39b184de.js → shared-f69afa4b.js} +1 -1
  146. package/dist/cdn/{shared-e06b70cc.js → shared-f821859e.js} +1 -1
  147. package/dist/cdn/shared-fedeb7b2.js +1 -0
  148. package/dist/cdn/translations/cart-card/en.json +3 -3
  149. package/dist/cdn/translations/gift-card-code-form/en.json +6 -3
  150. package/dist/cdn/translations/gift-card-code-log-card/en.json +6 -3
  151. package/dist/cdn/translations/integration-form/en.json +13 -15
  152. package/dist/cdn/translations/payments-api-fraud-protection-card/en.json +0 -2
  153. package/dist/cdn/translations/payments-api-payment-method-card/en.json +0 -2
  154. package/dist/cdn/translations/template-set-form/en.json +10 -0
  155. package/dist/elements/internal/InternalSelectControl/InternalSelectControl.d.ts +1 -1
  156. package/dist/elements/internal/InternalSelectControl/InternalSelectControl.js +1 -1
  157. package/dist/elements/internal/InternalSelectControl/InternalSelectControl.js.map +1 -1
  158. package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.d.ts +12 -0
  159. package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.js +12 -0
  160. package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.js.map +1 -1
  161. package/dist/elements/public/AdminSubscriptionCard/index.d.ts +1 -0
  162. package/dist/elements/public/AdminSubscriptionCard/index.js +1 -0
  163. package/dist/elements/public/AdminSubscriptionCard/index.js.map +1 -1
  164. package/dist/elements/public/AppliedCouponCodeForm/AppliedCouponCodeForm.d.ts +23 -4
  165. package/dist/elements/public/AppliedCouponCodeForm/AppliedCouponCodeForm.js +19 -0
  166. package/dist/elements/public/AppliedCouponCodeForm/AppliedCouponCodeForm.js.map +1 -1
  167. package/dist/elements/public/AppliedCouponCodeForm/types.d.ts +12 -0
  168. package/dist/elements/public/AppliedCouponCodeForm/types.js.map +1 -1
  169. package/dist/elements/public/CartCard/CartCard.d.ts +7 -2
  170. package/dist/elements/public/CartCard/CartCard.js +16 -9
  171. package/dist/elements/public/CartCard/CartCard.js.map +1 -1
  172. package/dist/elements/public/GiftCardCodeLogCard/GiftCardCodeLogCard.d.ts +13 -2
  173. package/dist/elements/public/GiftCardCodeLogCard/GiftCardCodeLogCard.js +66 -76
  174. package/dist/elements/public/GiftCardCodeLogCard/GiftCardCodeLogCard.js.map +1 -1
  175. package/dist/elements/public/GiftCardCodeLogCard/index.d.ts +1 -2
  176. package/dist/elements/public/GiftCardCodeLogCard/index.js +1 -2
  177. package/dist/elements/public/GiftCardCodeLogCard/index.js.map +1 -1
  178. package/dist/elements/public/I18n/format/price.js +1 -0
  179. package/dist/elements/public/I18n/format/price.js.map +1 -1
  180. package/dist/elements/public/IntegrationForm/IntegrationForm.d.ts +35 -0
  181. package/dist/elements/public/IntegrationForm/IntegrationForm.js +156 -164
  182. package/dist/elements/public/IntegrationForm/IntegrationForm.js.map +1 -1
  183. package/dist/elements/public/IntegrationForm/index.d.ts +1 -0
  184. package/dist/elements/public/IntegrationForm/index.js +1 -0
  185. package/dist/elements/public/IntegrationForm/index.js.map +1 -1
  186. package/dist/elements/public/PaymentsApiFraudProtectionCard/PaymentsApiFraudProtectionCard.d.ts +24 -3
  187. package/dist/elements/public/PaymentsApiFraudProtectionCard/PaymentsApiFraudProtectionCard.js +33 -20
  188. package/dist/elements/public/PaymentsApiFraudProtectionCard/PaymentsApiFraudProtectionCard.js.map +1 -1
  189. package/dist/elements/public/PaymentsApiFraudProtectionCard/index.d.ts +2 -1
  190. package/dist/elements/public/PaymentsApiFraudProtectionCard/index.js +2 -1
  191. package/dist/elements/public/PaymentsApiFraudProtectionCard/index.js.map +1 -1
  192. package/dist/elements/public/PaymentsApiPaymentMethodCard/PaymentsApiPaymentMethodCard.d.ts +24 -4
  193. package/dist/elements/public/PaymentsApiPaymentMethodCard/PaymentsApiPaymentMethodCard.js +32 -21
  194. package/dist/elements/public/PaymentsApiPaymentMethodCard/PaymentsApiPaymentMethodCard.js.map +1 -1
  195. package/dist/elements/public/PaymentsApiPaymentMethodCard/index.d.ts +2 -1
  196. package/dist/elements/public/PaymentsApiPaymentMethodCard/index.js +2 -1
  197. package/dist/elements/public/PaymentsApiPaymentMethodCard/index.js.map +1 -1
  198. package/dist/elements/public/StoreShippingMethodForm/StoreShippingMethodForm.d.ts +1 -1
  199. package/dist/elements/public/StoreShippingMethodForm/StoreShippingMethodForm.js +1 -1
  200. package/dist/elements/public/StoreShippingMethodForm/StoreShippingMethodForm.js.map +1 -1
  201. package/dist/elements/public/TemplateSetForm/TemplateSetForm.d.ts +49 -8
  202. package/dist/elements/public/TemplateSetForm/TemplateSetForm.js +100 -64
  203. package/dist/elements/public/TemplateSetForm/TemplateSetForm.js.map +1 -1
  204. package/dist/elements/public/TemplateSetForm/index.d.ts +1 -0
  205. package/dist/elements/public/TemplateSetForm/index.js +1 -0
  206. package/dist/elements/public/TemplateSetForm/index.js.map +1 -1
  207. package/dist/elements/public/TemplateSetForm/types.d.ts +22 -0
  208. package/dist/elements/public/TemplateSetForm/types.js.map +1 -1
  209. package/dist/mixins/themeable.js +0 -4
  210. package/dist/mixins/themeable.js.map +1 -1
  211. package/package.json +1 -1
  212. package/dist/cdn/shared-004f1a77.js +0 -1
  213. package/dist/cdn/shared-2f9b7791.js +0 -1
  214. package/dist/cdn/shared-888d690a.js +0 -1
@@ -1,8 +1,36 @@
1
1
  import { TranslatableMixin } from "../../../mixins/translatable.js";
2
2
  import { InternalForm } from "../../internal/InternalForm/InternalForm.js";
3
+ import { classMap } from "../../../utils/class-map.js";
3
4
  import { html } from 'lit-html';
4
5
  const NS = 'integration-form';
5
6
  const Base = TranslatableMixin(InternalForm, NS);
7
+ /**
8
+ * Form element for managing integrations (`fx:integration`).
9
+ *
10
+ * @slot project-name:before
11
+ * @slot project-name:after
12
+ *
13
+ * @slot project-description:before
14
+ * @slot project-description:after
15
+ *
16
+ * @slot create:before
17
+ * @slot create:after
18
+ *
19
+ * @slot header:before
20
+ * @slot header:after
21
+ *
22
+ * @slot message:before
23
+ * @slot message:after
24
+ *
25
+ * @slot table:before
26
+ * @slot table:after
27
+ *
28
+ * @slot delete:before
29
+ * @slot delete:after
30
+ *
31
+ * @element foxy-integration-form
32
+ * @since 1.21.0
33
+ */
6
34
  export class IntegrationForm extends Base {
7
35
  constructor() {
8
36
  super(...arguments);
@@ -34,187 +62,151 @@ export class IntegrationForm extends Base {
34
62
  return json;
35
63
  }
36
64
  __renderSnapshotBody() {
37
- var _a, _b;
65
+ const hiddenSelector = this.hiddenSelector;
66
+ const postResponse = this.__postResponse;
67
+ return html `
68
+ ${hiddenSelector.matches('header', true) ? '' : this.__renderHeader()}
69
+ ${hiddenSelector.matches('message', true) || !postResponse ? '' : this.__renderMessage()}
70
+ ${hiddenSelector.matches('table') ? '' : this.__renderTable()}
71
+ <foxy-internal-delete-control infer="delete"></foxy-internal-delete-control>
72
+ `;
73
+ }
74
+ __renderTemplateBody() {
75
+ return html `
76
+ <foxy-internal-text-control infer="project-name"></foxy-internal-text-control>
77
+ <foxy-internal-text-area-control infer="project-description">
78
+ </foxy-internal-text-area-control>
79
+ <foxy-internal-create-control infer="create"></foxy-internal-create-control>
80
+ `;
81
+ }
82
+ __renderMessage() {
83
+ return html `
84
+ ${this.renderTemplateOrSlot('message:before')}
85
+
86
+ <div class="bg-success-10 text-success p-m pb-s space-y-xs leading-s rounded-t-l rounded-b-l">
87
+ <foxy-i18n infer="message" class="block" key="text"></foxy-i18n>
88
+ <vaadin-button
89
+ data-testid="message-action"
90
+ theme="tertiary contrast"
91
+ class="p-0"
92
+ ?disabled=${this.disabledSelector.matches('message', true)}
93
+ @click=${() => (this.__postResponse = null)}
94
+ >
95
+ <foxy-i18n infer="message" key="action"></foxy-i18n>
96
+ </vaadin-button>
97
+ </div>
98
+
99
+ ${this.renderTemplateOrSlot('message:after')}
100
+ `;
101
+ }
102
+ __renderHeader() {
38
103
  const data = this.data;
39
- const expires = new Date(((_a = data.expires) !== null && _a !== void 0 ? _a : 0) * 1000);
40
- const description = ((_b = data.project_description) === null || _b === void 0 ? void 0 : _b.trim()) || this.t('no_description');
104
+ const noDescription = html `<foxy-i18n infer="header" key="no_description"></foxy-i18n>`;
41
105
  return html `
42
- <dl class="grid grid-cols-1 gap-s">
43
- <dt class="sr-only">${this.t('title_description')}</dt>
44
- <dd class="font-bold truncate text-xl">${data.project_name}&ZeroWidthSpace;</dd>
106
+ ${this.renderTemplateOrSlot('header:before')}
45
107
 
46
- <dt class="sr-only">${this.t('subtitle_description')}</dt>
47
- <dd class="text-secondary">${description}&ZeroWidthSpace;</dd>
48
- </dl>
108
+ <div class="space-y-xs">
109
+ <div class="font-bold truncate text-xl">${data.project_name}&ZeroWidthSpace;</div>
110
+ <div class="text-secondary">${data.project_description || noDescription}</div>
111
+ </div>
49
112
 
50
- ${this.__postResponse
51
- ? html `
52
- <div
53
- class="bg-success-10 text-success p-m pb-s space-y-xs leading-s rounded-t-l rounded-b-l"
54
- >
55
- <foxy-i18n infer="" class="block" key="post_success_message"></foxy-i18n>
56
- <vaadin-button
57
- theme="tertiary contrast"
58
- class="p-0"
59
- @click=${() => (this.__postResponse = null)}
60
- >
61
- <foxy-i18n infer="" key="post_success_action"></foxy-i18n>
62
- </vaadin-button>
63
- </div>
64
- `
65
- : ''}
113
+ ${this.renderTemplateOrSlot('header:after')}
114
+ `;
115
+ }
116
+ __renderTable() {
117
+ var _a;
118
+ const data = this.data;
119
+ const expires = new Date(((_a = data.expires) !== null && _a !== void 0 ? _a : 0) * 1000);
120
+ const postResponse = this.__postResponse;
121
+ return html `
122
+ ${this.renderTemplateOrSlot('table:before')}
66
123
 
67
124
  <table class="font-lumo text-m leading-m w-full">
68
125
  <tbody class="divide-y divide-contrast-10">
69
- <tr>
70
- <td class="max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold">
71
- <foxy-i18n infer="" key="added_by"></foxy-i18n>
72
- </td>
73
- <td class="max-w-0 truncate py-s text-body w-2-3">
74
- ${data.added_by_email
126
+ ${this.__renderTableRow({
127
+ label: this.__renderTableI18n('added_by'),
128
+ value: this.__renderMailToLink(data.added_by_email, data.added_by_name),
129
+ })}
130
+ ${this.__renderTableRow({
131
+ label: this.__renderTableI18n('contact'),
132
+ value: this.__renderMailToLink(data.contact_email, data.contact_name),
133
+ })}
134
+ ${this.__renderTableRow({
135
+ label: this.__renderTableI18n('company'),
136
+ value: this.__renderLink(data.company_url, data.company_name),
137
+ })}
138
+ ${this.__renderTableRow({
139
+ label: this.__renderTableI18n('expires'),
140
+ value: this.__renderTableI18n('expires_date', { date: expires }),
141
+ })}
142
+ ${this.__renderTableRow({
143
+ label: 'Client ID',
144
+ value: this.__renderCopiableText(data.client_id),
145
+ })}
146
+ ${postResponse
75
147
  ? html `
76
- <a
77
- target="_blank"
78
- class="font-semibold text-primary rounded hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50"
79
- href="mailto:${data.added_by_email}"
80
- >
81
- ${data.added_by_name}
82
- </a>
83
- `
84
- : data.added_by_name}
85
- </td>
86
- </tr>
87
-
88
- <tr>
89
- <td class="max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold">
90
- <foxy-i18n infer="" key="contact"></foxy-i18n>
91
- </td>
92
- <td class="max-w-0 truncate py-s text-body w-2-3">
93
- ${data.contact_email
94
- ? html `
95
- <a
96
- target="_blank"
97
- class="font-semibold text-primary rounded hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50"
98
- href="mailto:${data.contact_email}"
99
- >
100
- ${data.contact_name}
101
- </a>
102
- `
103
- : data.contact_name}
104
- </td>
105
- </tr>
106
-
107
- <tr>
108
- <td class="max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold">
109
- <foxy-i18n infer="" key="company"></foxy-i18n>
110
- </td>
111
- <td class="max-w-0 truncate py-s text-body w-2-3">
112
- ${data.company_url
113
- ? html `
114
- <a
115
- target="_blank"
116
- class="font-semibold text-primary rounded hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50"
117
- href=${data.company_url}
118
- >
119
- ${data.company_name}
120
- </a>
121
- `
122
- : data.company_name}
123
- </td>
124
- </tr>
125
-
126
- <tr>
127
- <td class="max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold">
128
- <foxy-i18n infer="" key="expires"></foxy-i18n>
129
- </td>
130
- <td class="max-w-0 truncate py-s text-body w-2-3">
131
- <foxy-i18n infer="" key="expires_date" .options=${{ date: expires }}></foxy-i18n>
132
- </td>
133
- </tr>
134
-
135
- <tr>
136
- <td class="max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold">Client ID</td>
137
- <td class="max-w-0 truncate py-s text-body w-2-3">
138
- <div class="flex items-center gap-s">
139
- <code class="truncate flex-1">${data.client_id}</code>
140
- <foxy-copy-to-clipboard
141
- infer="copy-to-clipboard"
142
- class="inline-block"
143
- text=${data.client_id}
144
- >
145
- </foxy-copy-to-clipboard>
146
- </div>
147
- </td>
148
- </tr>
149
-
150
- ${this.__postResponse
151
- ? html `
152
- <tr class="font-semibold text-success">
153
- <td class="max-w-0 truncate py-s w-1-3 pr-m font-semibold">Client secret</td>
154
- <td class="max-w-0 py-s w-2-3">
155
- <div class="flex items-center gap-s">
156
- <code class="truncate flex-1">${this.__postResponse.client_secret}</code>
157
- <foxy-copy-to-clipboard
158
- infer="copy-to-clipboard"
159
- class="inline-block"
160
- text=${this.__postResponse.client_secret}
161
- >
162
- </foxy-copy-to-clipboard>
163
- </div>
164
- </td>
165
- </tr>
166
-
167
- <tr class="font-semibold text-success">
168
- <td class="max-w-0 truncate py-s w-1-3 pr-m font-semibold">Refresh token</td>
169
- <td class="max-w-0 py-s w-2-3">
170
- <div class="flex items-center gap-s">
171
- <code class="truncate flex-1">${this.__postResponse.refresh_token}</code>
172
- <foxy-copy-to-clipboard
173
- infer="copy-to-clipboard"
174
- class="inline-block"
175
- text=${this.__postResponse.refresh_token}
176
- >
177
- </foxy-copy-to-clipboard>
178
- </div>
179
- </td>
180
- </tr>
181
-
182
- <tr class="font-semibold text-success">
183
- <td class="max-w-0 truncate py-s w-1-3 pr-m font-semibold">Access token</td>
184
- <td class="max-w-0 py-s w-2-3">
185
- <div class="flex items-center gap-s">
186
- <code class="truncate flex-1">${this.__postResponse.access_token}</code>
187
- <foxy-copy-to-clipboard
188
- infer="copy-to-clipboard"
189
- class="inline-block"
190
- text=${this.__postResponse.access_token}
191
- >
192
- </foxy-copy-to-clipboard>
193
- </div>
194
- </td>
195
- </tr>
148
+ ${this.__renderTableRow({
149
+ highlight: true,
150
+ label: 'Client secret',
151
+ value: this.__renderCopiableText(postResponse.client_secret),
152
+ })}
153
+ ${this.__renderTableRow({
154
+ highlight: true,
155
+ label: 'Refresh token',
156
+ value: this.__renderCopiableText(postResponse.refresh_token),
157
+ })}
158
+ ${this.__renderTableRow({
159
+ highlight: true,
160
+ label: 'Access token',
161
+ value: this.__renderCopiableText(postResponse.access_token),
162
+ })}
196
163
  `
197
164
  : ''}
198
-
199
- <tr>
200
- <td class="max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold">Scope</td>
201
- <td class="max-w-0 truncate py-s text-body w-2-3"><code>${data.scope}</code></td>
202
- </tr>
165
+ ${this.__renderTableRow({ label: 'Scope', value: html `<code>${data.scope}</code>` })}
203
166
  </tbody>
204
167
  </table>
205
168
 
206
- <foxy-internal-delete-control infer="delete"></foxy-internal-delete-control>
169
+ ${this.renderTemplateOrSlot('table:after')}
207
170
  `;
208
171
  }
209
- __renderTemplateBody() {
172
+ __renderCopiableText(text) {
210
173
  return html `
211
- <foxy-internal-text-control infer="project-name"></foxy-internal-text-control>
212
-
213
- <foxy-internal-text-area-control infer="project-description">
214
- </foxy-internal-text-area-control>
215
-
216
- <foxy-internal-create-control infer="create"></foxy-internal-create-control>
174
+ <div class="flex items-center gap-s">
175
+ <code class="truncate flex-1">${text}</code>
176
+ <foxy-copy-to-clipboard infer="copy-to-clipboard" class="inline-block" text=${text}>
177
+ </foxy-copy-to-clipboard>
178
+ </div>
217
179
  `;
218
180
  }
181
+ __renderMailToLink(email, caption) {
182
+ if (!email)
183
+ return html `${caption}`;
184
+ return this.__renderLink(`mailto:${email}`, caption);
185
+ }
186
+ __renderLink(href, caption) {
187
+ if (!href)
188
+ return html `${caption}`;
189
+ return html `
190
+ <a
191
+ target="_blank"
192
+ class="font-semibold text-primary rounded hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50"
193
+ href=${href}
194
+ >
195
+ ${caption}
196
+ </a>
197
+ `;
198
+ }
199
+ __renderTableRow(params) {
200
+ const { label, value, highlight = false } = params;
201
+ return html `
202
+ <tr class=${classMap({ 'font-semibold text-success': highlight })}>
203
+ <td class="max-w-0 truncate py-s text-secondary w-1-3 pr-m">${label}</td>
204
+ <td class="max-w-0 truncate py-s text-body w-2-3">${value}</td>
205
+ </tr>
206
+ `;
207
+ }
208
+ __renderTableI18n(key, options) {
209
+ return html `<foxy-i18n infer="table" key=${key} .options=${options}></foxy-i18n>`;
210
+ }
219
211
  }
220
212
  //# sourceMappingURL=IntegrationForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IntegrationForm.js","sourceRoot":"","sources":["../../../../src/elements/public/IntegrationForm/IntegrationForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Data, PostResponseData } from './types';\nimport type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { html } from 'lit-html';\n\nconst NS = 'integration-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\nexport class IntegrationForm extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __postResponse: { attribute: false },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [({ project_name: v }) => !!v || 'project-name:v8n_required'];\n }\n\n private __postResponse: PostResponseData | null = null;\n\n renderBody(): TemplateResult {\n return this.data ? this.__renderSnapshotBody() : this.__renderTemplateBody();\n }\n\n protected async _fetch<TResult = Data>(...args: Parameters<Window['fetch']>): Promise<TResult> {\n const constructor = this.constructor as typeof IntegrationForm;\n const response = await new constructor.API(this).fetch(...args);\n const method = typeof args[0] === 'string' ? args[1]?.method : args[0].method;\n const url = typeof args[0] === 'string' ? args[0] : args[0].url;\n\n if (!response.ok) throw response;\n\n const json = await response.json();\n if (method?.toUpperCase() === 'POST' && url === this.parent) this.__postResponse = json;\n\n return json;\n }\n\n private __renderSnapshotBody() {\n const data = this.data as Data;\n const expires = new Date((data.expires ?? 0) * 1000);\n const description = data.project_description?.trim() || this.t('no_description');\n\n return html`\n <dl class=\"grid grid-cols-1 gap-s\">\n <dt class=\"sr-only\">${this.t('title_description')}</dt>\n <dd class=\"font-bold truncate text-xl\">${data.project_name}&ZeroWidthSpace;</dd>\n\n <dt class=\"sr-only\">${this.t('subtitle_description')}</dt>\n <dd class=\"text-secondary\">${description}&ZeroWidthSpace;</dd>\n </dl>\n\n ${this.__postResponse\n ? html`\n <div\n class=\"bg-success-10 text-success p-m pb-s space-y-xs leading-s rounded-t-l rounded-b-l\"\n >\n <foxy-i18n infer=\"\" class=\"block\" key=\"post_success_message\"></foxy-i18n>\n <vaadin-button\n theme=\"tertiary contrast\"\n class=\"p-0\"\n @click=${() => (this.__postResponse = null)}\n >\n <foxy-i18n infer=\"\" key=\"post_success_action\"></foxy-i18n>\n </vaadin-button>\n </div>\n `\n : ''}\n\n <table class=\"font-lumo text-m leading-m w-full\">\n <tbody class=\"divide-y divide-contrast-10\">\n <tr>\n <td class=\"max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold\">\n <foxy-i18n infer=\"\" key=\"added_by\"></foxy-i18n>\n </td>\n <td class=\"max-w-0 truncate py-s text-body w-2-3\">\n ${data.added_by_email\n ? html`\n <a\n target=\"_blank\"\n class=\"font-semibold text-primary rounded hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50\"\n href=\"mailto:${data.added_by_email}\"\n >\n ${data.added_by_name}\n </a>\n `\n : data.added_by_name}\n </td>\n </tr>\n\n <tr>\n <td class=\"max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold\">\n <foxy-i18n infer=\"\" key=\"contact\"></foxy-i18n>\n </td>\n <td class=\"max-w-0 truncate py-s text-body w-2-3\">\n ${data.contact_email\n ? html`\n <a\n target=\"_blank\"\n class=\"font-semibold text-primary rounded hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50\"\n href=\"mailto:${data.contact_email}\"\n >\n ${data.contact_name}\n </a>\n `\n : data.contact_name}\n </td>\n </tr>\n\n <tr>\n <td class=\"max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold\">\n <foxy-i18n infer=\"\" key=\"company\"></foxy-i18n>\n </td>\n <td class=\"max-w-0 truncate py-s text-body w-2-3\">\n ${data.company_url\n ? html`\n <a\n target=\"_blank\"\n class=\"font-semibold text-primary rounded hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50\"\n href=${data.company_url}\n >\n ${data.company_name}\n </a>\n `\n : data.company_name}\n </td>\n </tr>\n\n <tr>\n <td class=\"max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold\">\n <foxy-i18n infer=\"\" key=\"expires\"></foxy-i18n>\n </td>\n <td class=\"max-w-0 truncate py-s text-body w-2-3\">\n <foxy-i18n infer=\"\" key=\"expires_date\" .options=${{ date: expires }}></foxy-i18n>\n </td>\n </tr>\n\n <tr>\n <td class=\"max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold\">Client ID</td>\n <td class=\"max-w-0 truncate py-s text-body w-2-3\">\n <div class=\"flex items-center gap-s\">\n <code class=\"truncate flex-1\">${data.client_id}</code>\n <foxy-copy-to-clipboard\n infer=\"copy-to-clipboard\"\n class=\"inline-block\"\n text=${data.client_id}\n >\n </foxy-copy-to-clipboard>\n </div>\n </td>\n </tr>\n\n ${this.__postResponse\n ? html`\n <tr class=\"font-semibold text-success\">\n <td class=\"max-w-0 truncate py-s w-1-3 pr-m font-semibold\">Client secret</td>\n <td class=\"max-w-0 py-s w-2-3\">\n <div class=\"flex items-center gap-s\">\n <code class=\"truncate flex-1\">${this.__postResponse.client_secret}</code>\n <foxy-copy-to-clipboard\n infer=\"copy-to-clipboard\"\n class=\"inline-block\"\n text=${this.__postResponse.client_secret}\n >\n </foxy-copy-to-clipboard>\n </div>\n </td>\n </tr>\n\n <tr class=\"font-semibold text-success\">\n <td class=\"max-w-0 truncate py-s w-1-3 pr-m font-semibold\">Refresh token</td>\n <td class=\"max-w-0 py-s w-2-3\">\n <div class=\"flex items-center gap-s\">\n <code class=\"truncate flex-1\">${this.__postResponse.refresh_token}</code>\n <foxy-copy-to-clipboard\n infer=\"copy-to-clipboard\"\n class=\"inline-block\"\n text=${this.__postResponse.refresh_token}\n >\n </foxy-copy-to-clipboard>\n </div>\n </td>\n </tr>\n\n <tr class=\"font-semibold text-success\">\n <td class=\"max-w-0 truncate py-s w-1-3 pr-m font-semibold\">Access token</td>\n <td class=\"max-w-0 py-s w-2-3\">\n <div class=\"flex items-center gap-s\">\n <code class=\"truncate flex-1\">${this.__postResponse.access_token}</code>\n <foxy-copy-to-clipboard\n infer=\"copy-to-clipboard\"\n class=\"inline-block\"\n text=${this.__postResponse.access_token}\n >\n </foxy-copy-to-clipboard>\n </div>\n </td>\n </tr>\n `\n : ''}\n\n <tr>\n <td class=\"max-w-0 truncate py-s text-secondary w-1-3 pr-m font-semibold\">Scope</td>\n <td class=\"max-w-0 truncate py-s text-body w-2-3\"><code>${data.scope}</code></td>\n </tr>\n </tbody>\n </table>\n\n <foxy-internal-delete-control infer=\"delete\"></foxy-internal-delete-control>\n `;\n }\n\n private __renderTemplateBody() {\n return html`\n <foxy-internal-text-control infer=\"project-name\"></foxy-internal-text-control>\n\n <foxy-internal-text-area-control infer=\"project-description\">\n </foxy-internal-text-area-control>\n\n <foxy-internal-create-control infer=\"create\"></foxy-internal-create-control>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"IntegrationForm.js","sourceRoot":"","sources":["../../../../src/elements/public/IntegrationForm/IntegrationForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Data, PostResponseData } from './types';\nimport type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { classMap } from '../../../utils/class-map';\nimport { html } from 'lit-html';\n\nconst NS = 'integration-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\n/**\n * Form element for managing integrations (`fx:integration`).\n *\n * @slot project-name:before\n * @slot project-name:after\n *\n * @slot project-description:before\n * @slot project-description:after\n *\n * @slot create:before\n * @slot create:after\n *\n * @slot header:before\n * @slot header:after\n *\n * @slot message:before\n * @slot message:after\n *\n * @slot table:before\n * @slot table:after\n *\n * @slot delete:before\n * @slot delete:after\n *\n * @element foxy-integration-form\n * @since 1.21.0\n */\nexport class IntegrationForm extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __postResponse: { attribute: false },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [({ project_name: v }) => !!v || 'project-name:v8n_required'];\n }\n\n private __postResponse: PostResponseData | null = null;\n\n renderBody(): TemplateResult {\n return this.data ? this.__renderSnapshotBody() : this.__renderTemplateBody();\n }\n\n protected async _fetch<TResult = Data>(...args: Parameters<Window['fetch']>): Promise<TResult> {\n const constructor = this.constructor as typeof IntegrationForm;\n const response = await new constructor.API(this).fetch(...args);\n const method = typeof args[0] === 'string' ? args[1]?.method : args[0].method;\n const url = typeof args[0] === 'string' ? args[0] : args[0].url;\n\n if (!response.ok) throw response;\n\n const json = await response.json();\n if (method?.toUpperCase() === 'POST' && url === this.parent) this.__postResponse = json;\n\n return json;\n }\n\n private __renderSnapshotBody() {\n const hiddenSelector = this.hiddenSelector;\n const postResponse = this.__postResponse;\n\n return html`\n ${hiddenSelector.matches('header', true) ? '' : this.__renderHeader()}\n ${hiddenSelector.matches('message', true) || !postResponse ? '' : this.__renderMessage()}\n ${hiddenSelector.matches('table') ? '' : this.__renderTable()}\n <foxy-internal-delete-control infer=\"delete\"></foxy-internal-delete-control>\n `;\n }\n\n private __renderTemplateBody() {\n return html`\n <foxy-internal-text-control infer=\"project-name\"></foxy-internal-text-control>\n <foxy-internal-text-area-control infer=\"project-description\">\n </foxy-internal-text-area-control>\n <foxy-internal-create-control infer=\"create\"></foxy-internal-create-control>\n `;\n }\n\n private __renderMessage() {\n return html`\n ${this.renderTemplateOrSlot('message:before')}\n\n <div class=\"bg-success-10 text-success p-m pb-s space-y-xs leading-s rounded-t-l rounded-b-l\">\n <foxy-i18n infer=\"message\" class=\"block\" key=\"text\"></foxy-i18n>\n <vaadin-button\n data-testid=\"message-action\"\n theme=\"tertiary contrast\"\n class=\"p-0\"\n ?disabled=${this.disabledSelector.matches('message', true)}\n @click=${() => (this.__postResponse = null)}\n >\n <foxy-i18n infer=\"message\" key=\"action\"></foxy-i18n>\n </vaadin-button>\n </div>\n\n ${this.renderTemplateOrSlot('message:after')}\n `;\n }\n\n private __renderHeader() {\n const data = this.data as Data;\n const noDescription = html`<foxy-i18n infer=\"header\" key=\"no_description\"></foxy-i18n>`;\n\n return html`\n ${this.renderTemplateOrSlot('header:before')}\n\n <div class=\"space-y-xs\">\n <div class=\"font-bold truncate text-xl\">${data.project_name}&ZeroWidthSpace;</div>\n <div class=\"text-secondary\">${data.project_description || noDescription}</div>\n </div>\n\n ${this.renderTemplateOrSlot('header:after')}\n `;\n }\n\n private __renderTable() {\n const data = this.data as Data;\n const expires = new Date((data.expires ?? 0) * 1000);\n const postResponse = this.__postResponse;\n\n return html`\n ${this.renderTemplateOrSlot('table:before')}\n\n <table class=\"font-lumo text-m leading-m w-full\">\n <tbody class=\"divide-y divide-contrast-10\">\n ${this.__renderTableRow({\n label: this.__renderTableI18n('added_by'),\n value: this.__renderMailToLink(data.added_by_email, data.added_by_name),\n })}\n ${this.__renderTableRow({\n label: this.__renderTableI18n('contact'),\n value: this.__renderMailToLink(data.contact_email, data.contact_name),\n })}\n ${this.__renderTableRow({\n label: this.__renderTableI18n('company'),\n value: this.__renderLink(data.company_url, data.company_name),\n })}\n ${this.__renderTableRow({\n label: this.__renderTableI18n('expires'),\n value: this.__renderTableI18n('expires_date', { date: expires }),\n })}\n ${this.__renderTableRow({\n label: 'Client ID',\n value: this.__renderCopiableText(data.client_id),\n })}\n ${postResponse\n ? html`\n ${this.__renderTableRow({\n highlight: true,\n label: 'Client secret',\n value: this.__renderCopiableText(postResponse.client_secret),\n })}\n ${this.__renderTableRow({\n highlight: true,\n label: 'Refresh token',\n value: this.__renderCopiableText(postResponse.refresh_token),\n })}\n ${this.__renderTableRow({\n highlight: true,\n label: 'Access token',\n value: this.__renderCopiableText(postResponse.access_token),\n })}\n `\n : ''}\n ${this.__renderTableRow({ label: 'Scope', value: html`<code>${data.scope}</code>` })}\n </tbody>\n </table>\n\n ${this.renderTemplateOrSlot('table:after')}\n `;\n }\n\n private __renderCopiableText(text: string) {\n return html`\n <div class=\"flex items-center gap-s\">\n <code class=\"truncate flex-1\">${text}</code>\n <foxy-copy-to-clipboard infer=\"copy-to-clipboard\" class=\"inline-block\" text=${text}>\n </foxy-copy-to-clipboard>\n </div>\n `;\n }\n\n private __renderMailToLink(email: string, caption: string) {\n if (!email) return html`${caption}`;\n return this.__renderLink(`mailto:${email}`, caption);\n }\n\n private __renderLink(href: string, caption: string) {\n if (!href) return html`${caption}`;\n\n return html`\n <a\n target=\"_blank\"\n class=\"font-semibold text-primary rounded hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50\"\n href=${href}\n >\n ${caption}\n </a>\n `;\n }\n\n private __renderTableRow(params: { label: unknown; value: unknown; highlight?: boolean }) {\n const { label, value, highlight = false } = params;\n return html`\n <tr class=${classMap({ 'font-semibold text-success': highlight })}>\n <td class=\"max-w-0 truncate py-s text-secondary w-1-3 pr-m\">${label}</td>\n <td class=\"max-w-0 truncate py-s text-body w-2-3\">${value}</td>\n </tr>\n `;\n }\n\n private __renderTableI18n(key: string, options?: unknown) {\n return html`<foxy-i18n infer=\"table\" key=${key} .options=${options}></foxy-i18n>`;\n }\n}\n"]}
@@ -3,6 +3,7 @@ import '../../internal/InternalTextAreaControl/index';
3
3
  import '../../internal/InternalDeleteControl/index';
4
4
  import '../../internal/InternalCreateControl/index';
5
5
  import '../../internal/InternalTextControl/index';
6
+ import '../../internal/InternalSandbox/index';
6
7
  import '../../internal/InternalForm/index';
7
8
  import '../CopyToClipboard/index';
8
9
  import '../I18n/index';
@@ -3,6 +3,7 @@ import "../../internal/InternalTextAreaControl/index.js";
3
3
  import "../../internal/InternalDeleteControl/index.js";
4
4
  import "../../internal/InternalCreateControl/index.js";
5
5
  import "../../internal/InternalTextControl/index.js";
6
+ import "../../internal/InternalSandbox/index.js";
6
7
  import "../../internal/InternalForm/index.js";
7
8
  import "../CopyToClipboard/index.js";
8
9
  import "../I18n/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/IntegrationForm/index.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAE/B,yDAAsD;AACtD,uDAAoD;AACpD,uDAAoD;AACpD,qDAAkD;AAClD,8CAA2C;AAE3C,qCAAkC;AAClC,0BAAuB;AAEvB,OAAO,EAAE,eAAe,EAAE,6BAA0B;AAEpD,cAAc,CAAC,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import '@vaadin/vaadin-button';\n\nimport '../../internal/InternalTextAreaControl/index';\nimport '../../internal/InternalDeleteControl/index';\nimport '../../internal/InternalCreateControl/index';\nimport '../../internal/InternalTextControl/index';\nimport '../../internal/InternalForm/index';\n\nimport '../CopyToClipboard/index';\nimport '../I18n/index';\n\nimport { IntegrationForm } from './IntegrationForm';\n\ncustomElements.define('foxy-integration-form', IntegrationForm);\n\nexport { IntegrationForm };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/IntegrationForm/index.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAE/B,yDAAsD;AACtD,uDAAoD;AACpD,uDAAoD;AACpD,qDAAkD;AAClD,iDAA8C;AAC9C,8CAA2C;AAE3C,qCAAkC;AAClC,0BAAuB;AAEvB,OAAO,EAAE,eAAe,EAAE,6BAA0B;AAEpD,cAAc,CAAC,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import '@vaadin/vaadin-button';\n\nimport '../../internal/InternalTextAreaControl/index';\nimport '../../internal/InternalDeleteControl/index';\nimport '../../internal/InternalCreateControl/index';\nimport '../../internal/InternalTextControl/index';\nimport '../../internal/InternalSandbox/index';\nimport '../../internal/InternalForm/index';\n\nimport '../CopyToClipboard/index';\nimport '../I18n/index';\n\nimport { IntegrationForm } from './IntegrationForm';\n\ncustomElements.define('foxy-integration-form', IntegrationForm);\n\nexport { IntegrationForm };\n"]}
@@ -1,14 +1,35 @@
1
1
  import type { PropertyDeclarations } from 'lit-element';
2
2
  import type { TemplateResult } from 'lit-html';
3
3
  import type { Data } from './types';
4
- import { InternalCard } from '../../internal/InternalCard/InternalCard';
5
- declare const Base: typeof InternalCard & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
4
+ import { TwoLineCard } from '../CustomFieldCard/TwoLineCard';
5
+ declare const Base: typeof TwoLineCard & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
6
6
  defaultNS: string;
7
7
  };
8
+ /**
9
+ * Card element representing a `fx:fraud_protection` resource of Payments API.
10
+ *
11
+ * _Payments API is a client-side virtual API layer built on top of hAPI
12
+ * in an attempt to streamline access to stores' payment method settings
13
+ * that is currently a bit quirky due to the legacy functionality. To use
14
+ * this element with hAPI, wrap it into a foxy-payments-api node._
15
+ *
16
+ * @slot title:before
17
+ * @slot title:after
18
+ *
19
+ * @slot subtitle:before
20
+ * @slot subtitle:after
21
+ *
22
+ * @element foxy-payments-api-fraud-protection-card
23
+ * @since 1.21.0
24
+ */
8
25
  export declare class PaymentsApiFraudProtectionCard extends Base<Data> {
9
26
  static get defaultImageSrc(): string;
10
27
  static get properties(): PropertyDeclarations;
28
+ /**
29
+ * Fraud protection image/logo URL getter.
30
+ * If left `null`, the card will display the default image.
31
+ */
11
32
  getImageSrc: ((type: string) => string) | null;
12
- renderBody(): TemplateResult;
33
+ render(): TemplateResult;
13
34
  }
14
35
  export {};
@@ -1,11 +1,32 @@
1
1
  import { TranslatableMixin } from "../../../mixins/translatable.js";
2
- import { InternalCard } from "../../internal/InternalCard/InternalCard.js";
2
+ import { TwoLineCard } from "../CustomFieldCard/TwoLineCard.js";
3
3
  import { html } from 'lit-html';
4
4
  const NS = 'payments-api-fraud-protection-card';
5
- const Base = TranslatableMixin(InternalCard, NS);
5
+ const Base = TranslatableMixin(TwoLineCard, NS);
6
+ /**
7
+ * Card element representing a `fx:fraud_protection` resource of Payments API.
8
+ *
9
+ * _Payments API is a client-side virtual API layer built on top of hAPI
10
+ * in an attempt to streamline access to stores' payment method settings
11
+ * that is currently a bit quirky due to the legacy functionality. To use
12
+ * this element with hAPI, wrap it into a foxy-payments-api node._
13
+ *
14
+ * @slot title:before
15
+ * @slot title:after
16
+ *
17
+ * @slot subtitle:before
18
+ * @slot subtitle:after
19
+ *
20
+ * @element foxy-payments-api-fraud-protection-card
21
+ * @since 1.21.0
22
+ */
6
23
  export class PaymentsApiFraudProtectionCard extends Base {
7
24
  constructor() {
8
25
  super(...arguments);
26
+ /**
27
+ * Fraud protection image/logo URL getter.
28
+ * If left `null`, the card will display the default image.
29
+ */
9
30
  this.getImageSrc = null;
10
31
  }
11
32
  static get defaultImageSrc() {
@@ -17,12 +38,18 @@ export class PaymentsApiFraudProtectionCard extends Base {
17
38
  getImageSrc: { attribute: false },
18
39
  };
19
40
  }
20
- renderBody() {
41
+ render() {
21
42
  var _a, _b;
22
- const data = this.data;
43
+ const defaultLayout = super.render({
44
+ title: data => html `${data.helper.name}`,
45
+ subtitle: data => html `${data.description}`,
46
+ });
47
+ if (!this.in({ idle: 'snapshot' }))
48
+ return defaultLayout;
23
49
  const defaultSrc = PaymentsApiFraudProtectionCard.defaultImageSrc;
50
+ const data = this.data;
24
51
  return html `
25
- <figure class="flex items-center gap-m h-m">
52
+ <figure class="flex items-center gap-m">
26
53
  <img
27
54
  class="relative h-s w-s object-cover rounded-full bg-contrast-20 flex-shrink-0 shadow-xs"
28
55
  src=${(_b = (data ? (_a = this.getImageSrc) === null || _a === void 0 ? void 0 : _a.call(this, data.type) : null)) !== null && _b !== void 0 ? _b : defaultSrc}
@@ -30,21 +57,7 @@ export class PaymentsApiFraudProtectionCard extends Base {
30
57
  @error=${(evt) => (evt.currentTarget.src = defaultSrc)}
31
58
  />
32
59
 
33
- <figcaption class="min-w-0 flex-1">
34
- <dl class="flex justify-between gap-s">
35
- <dt class="sr-only">${this.t('title_description')}</dt>
36
- <dd class="font-semibold truncate flex-shrink-0">
37
- ${data === null || data === void 0 ? void 0 : data.helper.name}&ZeroWidthSpace;
38
- </dd>
39
-
40
- ${(data === null || data === void 0 ? void 0 : data.helper.name) !== (data === null || data === void 0 ? void 0 : data.description)
41
- ? html `
42
- <dt class="sr-only">${this.t('subtitle_description')}</dt>
43
- <dd class="truncate text-tertiary">${data === null || data === void 0 ? void 0 : data.description}</dd>
44
- `
45
- : ''}
46
- </dl>
47
- </figcaption>
60
+ <figcaption class="min-w-0 flex-1">${defaultLayout}</figcaption>
48
61
  </figure>
49
62
  `;
50
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentsApiFraudProtectionCard.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentsApiFraudProtectionCard/PaymentsApiFraudProtectionCard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,oCAAoC,CAAC;AAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAM,OAAO,8BAA+B,SAAQ,IAAU;IAA9D;;QAYE,gBAAW,GAAsC,IAAI,CAAC;IAiCxD,CAAC;IA5CC,MAAM,KAAK,eAAe;QACxB,OAAO,uuBAAuuB,CAAC;IACjvB,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAClC,CAAC;IACJ,CAAC;IAID,UAAU;;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,UAAU,GAAG,8BAA8B,CAAC,eAAe,CAAC;QAElE,OAAO,IAAI,CAAA;;;;gBAIC,MAAA,CAAC,IAAI,CAAC,CAAC,OAAC,IAAI,CAAC,WAAW,+CAAhB,IAAI,EAAe,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,mCAAI,UAAU;gBAC3D,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;mBAChB,CAAC,GAAU,EAAE,EAAE,CAAC,CAAE,GAAG,CAAC,aAAkC,CAAC,GAAG,GAAG,UAAU,CAAC;;;;;kCAK3D,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC;;gBAE7C,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC,IAAI;;;cAGnB,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC,IAAI,OAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAA;YACvC,CAAC,CAAC,IAAI,CAAA;wCACoB,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC;uDACf,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW;iBACvD;YACH,CAAC,CAAC,EAAE;;;;KAIb,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { html } from 'lit-html';\n\nconst NS = 'payments-api-fraud-protection-card';\nconst Base = TranslatableMixin(InternalCard, NS);\n\nexport class PaymentsApiFraudProtectionCard extends Base<Data> {\n static get defaultImageSrc(): string {\n return \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 44 44'%3E%3Cpath fill='%23fff' d='M0 20.73v-9.9L10.83 0h9.9L0 20.73ZM0 0h9.41L0 9.41V0Zm0 22.14L22.14 0h9.9l-9.43 9.44-.61-.27-10.5 4.66v7-.29L0 32.04v-9.9Zm11.54-.23L0 33.46v9.9l14.14-14.14a15 15 0 0 1-2.6-7.3Zm3.2 8.12L.77 44h9.9l9.7-9.7a13.75 13.75 0 0 1-5.63-4.27Zm6.67 4.64L12.08 44h9.9L44 21.98v-9.9L32.16 23.92C31.01 29.15 27.05 33.6 22 34.83l-.59-.16Zm11.02-12.43L44 10.67V.77L31.42 13.35l1.08.48v7a13 13 0 0 1-.07 1.4Zm-1.99-9.32L43.35 0h-9.9l-9.87 9.87 6.86 3.05ZM23.4 44 44 23.4v9.9L33.3 44h-9.9Zm11.31 0L44 34.71V44h-9.29Z'/%3E%3Cpath fill='%23fff' d='M30.17 21.99H22V11.72l-8.17 3.63V22H22v10.42c4.34-1.34 7.55-5.63 8.17-10.43Z'/%3E%3C/svg%3E\";\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n getImageSrc: { attribute: false },\n };\n }\n\n getImageSrc: ((type: string) => string) | null = null;\n\n renderBody(): TemplateResult {\n const data = this.data;\n const defaultSrc = PaymentsApiFraudProtectionCard.defaultImageSrc;\n\n return html`\n <figure class=\"flex items-center gap-m h-m\">\n <img\n class=\"relative h-s w-s object-cover rounded-full bg-contrast-20 flex-shrink-0 shadow-xs\"\n src=${(data ? this.getImageSrc?.(data.type) : null) ?? defaultSrc}\n alt=${this.t('image_alt')}\n @error=${(evt: Event) => ((evt.currentTarget as HTMLImageElement).src = defaultSrc)}\n />\n\n <figcaption class=\"min-w-0 flex-1\">\n <dl class=\"flex justify-between gap-s\">\n <dt class=\"sr-only\">${this.t('title_description')}</dt>\n <dd class=\"font-semibold truncate flex-shrink-0\">\n ${data?.helper.name}&ZeroWidthSpace;\n </dd>\n\n ${data?.helper.name !== data?.description\n ? html`\n <dt class=\"sr-only\">${this.t('subtitle_description')}</dt>\n <dd class=\"truncate text-tertiary\">${data?.description}</dd>\n `\n : ''}\n </dl>\n </figcaption>\n </figure>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"PaymentsApiFraudProtectionCard.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentsApiFraudProtectionCard/PaymentsApiFraudProtectionCard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,WAAW,EAAE,0CAAuC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,oCAAoC,CAAC;AAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAEhD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,8BAA+B,SAAQ,IAAU;IAA9D;;QAYE;;;WAGG;QACH,gBAAW,GAAsC,IAAI,CAAC;IA0BxD,CAAC;IAzCC,MAAM,KAAK,eAAe;QACxB,OAAO,uuBAAuuB,CAAC;IACjvB,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAClC,CAAC;IACJ,CAAC;IAQD,MAAM;;QACJ,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;YACjC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACxC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA,GAAG,IAAI,CAAC,WAAW,EAAE;SAC5C,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YAAE,OAAO,aAAa,CAAC;QAEzD,MAAM,UAAU,GAAG,8BAA8B,CAAC,eAAe,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,OAAO,IAAI,CAAA;;;;gBAIC,MAAA,CAAC,IAAI,CAAC,CAAC,OAAC,IAAI,CAAC,WAAW,+CAAhB,IAAI,EAAe,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,mCAAI,UAAU;gBAC3D,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;mBAChB,CAAC,GAAU,EAAE,EAAE,CAAC,CAAE,GAAG,CAAC,aAAkC,CAAC,GAAG,GAAG,UAAU,CAAC;;;6CAGhD,aAAa;;KAErD,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { TwoLineCard } from '../CustomFieldCard/TwoLineCard';\nimport { html } from 'lit-html';\n\nconst NS = 'payments-api-fraud-protection-card';\nconst Base = TranslatableMixin(TwoLineCard, NS);\n\n/**\n * Card element representing a `fx:fraud_protection` resource of Payments API.\n *\n * _Payments API is a client-side virtual API layer built on top of hAPI\n * in an attempt to streamline access to stores' payment method settings\n * that is currently a bit quirky due to the legacy functionality. To use\n * this element with hAPI, wrap it into a foxy-payments-api node._\n *\n * @slot title:before\n * @slot title:after\n *\n * @slot subtitle:before\n * @slot subtitle:after\n *\n * @element foxy-payments-api-fraud-protection-card\n * @since 1.21.0\n */\nexport class PaymentsApiFraudProtectionCard extends Base<Data> {\n static get defaultImageSrc(): string {\n return \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 44 44'%3E%3Cpath fill='%23fff' d='M0 20.73v-9.9L10.83 0h9.9L0 20.73ZM0 0h9.41L0 9.41V0Zm0 22.14L22.14 0h9.9l-9.43 9.44-.61-.27-10.5 4.66v7-.29L0 32.04v-9.9Zm11.54-.23L0 33.46v9.9l14.14-14.14a15 15 0 0 1-2.6-7.3Zm3.2 8.12L.77 44h9.9l9.7-9.7a13.75 13.75 0 0 1-5.63-4.27Zm6.67 4.64L12.08 44h9.9L44 21.98v-9.9L32.16 23.92C31.01 29.15 27.05 33.6 22 34.83l-.59-.16Zm11.02-12.43L44 10.67V.77L31.42 13.35l1.08.48v7a13 13 0 0 1-.07 1.4Zm-1.99-9.32L43.35 0h-9.9l-9.87 9.87 6.86 3.05ZM23.4 44 44 23.4v9.9L33.3 44h-9.9Zm11.31 0L44 34.71V44h-9.29Z'/%3E%3Cpath fill='%23fff' d='M30.17 21.99H22V11.72l-8.17 3.63V22H22v10.42c4.34-1.34 7.55-5.63 8.17-10.43Z'/%3E%3C/svg%3E\";\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n getImageSrc: { attribute: false },\n };\n }\n\n /**\n * Fraud protection image/logo URL getter.\n * If left `null`, the card will display the default image.\n */\n getImageSrc: ((type: string) => string) | null = null;\n\n render(): TemplateResult {\n const defaultLayout = super.render({\n title: data => html`${data.helper.name}`,\n subtitle: data => html`${data.description}`,\n });\n\n if (!this.in({ idle: 'snapshot' })) return defaultLayout;\n\n const defaultSrc = PaymentsApiFraudProtectionCard.defaultImageSrc;\n const data = this.data;\n\n return html`\n <figure class=\"flex items-center gap-m\">\n <img\n class=\"relative h-s w-s object-cover rounded-full bg-contrast-20 flex-shrink-0 shadow-xs\"\n src=${(data ? this.getImageSrc?.(data.type) : null) ?? defaultSrc}\n alt=${this.t('image_alt')}\n @error=${(evt: Event) => ((evt.currentTarget as HTMLImageElement).src = defaultSrc)}\n />\n\n <figcaption class=\"min-w-0 flex-1\">${defaultLayout}</figcaption>\n </figure>\n `;\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
- import '../../internal/InternalCard/index';
1
+ import '../../internal/InternalSandbox/index';
2
+ import '../Spinner/index';
2
3
  import '../I18n/index';
3
4
  import { PaymentsApiFraudProtectionCard } from './PaymentsApiFraudProtectionCard';
4
5
  export { PaymentsApiFraudProtectionCard };
@@ -1,4 +1,5 @@
1
- import "../../internal/InternalCard/index.js";
1
+ import "../../internal/InternalSandbox/index.js";
2
+ import "../Spinner/index.js";
2
3
  import "../I18n/index.js";
3
4
  import { PaymentsApiFraudProtectionCard } from "./PaymentsApiFraudProtectionCard.js";
4
5
  customElements.define('foxy-payments-api-fraud-protection-card', PaymentsApiFraudProtectionCard);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentsApiFraudProtectionCard/index.ts"],"names":[],"mappings":"AAAA,8CAA2C;AAE3C,0BAAuB;AAEvB,OAAO,EAAE,8BAA8B,EAAE,4CAAyC;AAElF,cAAc,CAAC,MAAM,CAAC,yCAAyC,EAAE,8BAA8B,CAAC,CAAC;AAEjG,OAAO,EAAE,8BAA8B,EAAE,CAAC","sourcesContent":["import '../../internal/InternalCard/index';\n\nimport '../I18n/index';\n\nimport { PaymentsApiFraudProtectionCard } from './PaymentsApiFraudProtectionCard';\n\ncustomElements.define('foxy-payments-api-fraud-protection-card', PaymentsApiFraudProtectionCard);\n\nexport { PaymentsApiFraudProtectionCard };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentsApiFraudProtectionCard/index.ts"],"names":[],"mappings":"AAAA,iDAA8C;AAE9C,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,8BAA8B,EAAE,4CAAyC;AAElF,cAAc,CAAC,MAAM,CAAC,yCAAyC,EAAE,8BAA8B,CAAC,CAAC;AAEjG,OAAO,EAAE,8BAA8B,EAAE,CAAC","sourcesContent":["import '../../internal/InternalSandbox/index';\n\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport { PaymentsApiFraudProtectionCard } from './PaymentsApiFraudProtectionCard';\n\ncustomElements.define('foxy-payments-api-fraud-protection-card', PaymentsApiFraudProtectionCard);\n\nexport { PaymentsApiFraudProtectionCard };\n"]}