@foxy.io/elements 1.51.0 → 1.52.0-beta.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 (212) 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-admin-subscription-form.js +1 -1
  6. package/dist/cdn/foxy-admin-transaction-card.js +1 -1
  7. package/dist/cdn/foxy-api-browser.js +1 -1
  8. package/dist/cdn/foxy-applied-coupon-code-card.js +1 -1
  9. package/dist/cdn/foxy-applied-coupon-code-form.js +1 -1
  10. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  11. package/dist/cdn/foxy-attribute-card.js +1 -1
  12. package/dist/cdn/foxy-attribute-form.js +1 -1
  13. package/dist/cdn/foxy-billing-address-card.js +1 -1
  14. package/dist/cdn/foxy-cancellation-form.js +1 -1
  15. package/dist/cdn/foxy-cart-card.js +1 -1
  16. package/dist/cdn/foxy-cart-form.js +1 -1
  17. package/dist/cdn/foxy-client-card.js +1 -1
  18. package/dist/cdn/foxy-client-form.js +1 -1
  19. package/dist/cdn/foxy-collection-page.js +1 -1
  20. package/dist/cdn/foxy-collection-pages.js +1 -1
  21. package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
  22. package/dist/cdn/foxy-coupon-card.js +1 -1
  23. package/dist/cdn/foxy-coupon-code-card.js +1 -1
  24. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  25. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  26. package/dist/cdn/foxy-coupon-detail-card.js +1 -1
  27. package/dist/cdn/foxy-coupon-form.js +1 -1
  28. package/dist/cdn/foxy-custom-field-card.js +1 -1
  29. package/dist/cdn/foxy-custom-field-form.js +1 -1
  30. package/dist/cdn/foxy-customer-card.js +1 -1
  31. package/dist/cdn/foxy-customer-form.js +1 -1
  32. package/dist/cdn/foxy-customer-portal-settings-form.js +1 -1
  33. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  34. package/dist/cdn/foxy-customer-portal.js +1 -1
  35. package/dist/cdn/foxy-customer.js +1 -1
  36. package/dist/cdn/foxy-customers-table.js +1 -1
  37. package/dist/cdn/foxy-discount-builder.js +1 -1
  38. package/dist/cdn/foxy-discount-card.js +1 -1
  39. package/dist/cdn/foxy-discount-detail-card.js +1 -1
  40. package/dist/cdn/foxy-donation.js +1 -1
  41. package/dist/cdn/foxy-downloadable-card.js +1 -1
  42. package/dist/cdn/foxy-downloadable-form.js +1 -1
  43. package/dist/cdn/foxy-email-template-card.js +1 -1
  44. package/dist/cdn/foxy-email-template-form.js +1 -1
  45. package/dist/cdn/foxy-error-entry-card.js +1 -1
  46. package/dist/cdn/foxy-experimental-add-to-cart-builder.js +1 -1
  47. package/dist/cdn/foxy-filter-attribute-card.js +1 -1
  48. package/dist/cdn/foxy-filter-attribute-form.js +1 -1
  49. package/dist/cdn/foxy-form-dialog.js +1 -1
  50. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  51. package/dist/cdn/foxy-gift-card-card.js +1 -1
  52. package/dist/cdn/foxy-gift-card-code-card.js +1 -1
  53. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  54. package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
  55. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  56. package/dist/cdn/foxy-gift-card-form.js +1 -1
  57. package/dist/cdn/foxy-i18n-editor.js +1 -1
  58. package/dist/cdn/foxy-i18n.js +1 -1
  59. package/dist/cdn/foxy-integration-card.js +1 -1
  60. package/dist/cdn/foxy-integration-form.js +1 -1
  61. package/dist/cdn/foxy-item-card.js +1 -1
  62. package/dist/cdn/foxy-item-category-card.js +1 -1
  63. package/dist/cdn/foxy-item-category-form.js +1 -1
  64. package/dist/cdn/foxy-item-form.js +1 -1
  65. package/dist/cdn/foxy-item-option-card.js +1 -1
  66. package/dist/cdn/foxy-item-option-form.js +1 -1
  67. package/dist/cdn/foxy-items-form.js +1 -1
  68. package/dist/cdn/foxy-native-integration-card.js +1 -1
  69. package/dist/cdn/foxy-native-integration-form.js +1 -1
  70. package/dist/cdn/foxy-nucleon-element.js +1 -1
  71. package/dist/cdn/foxy-pagination.js +1 -1
  72. package/dist/cdn/foxy-passkey-card.js +1 -1
  73. package/dist/cdn/foxy-passkey-form.js +1 -1
  74. package/dist/cdn/foxy-payment-card-embed.js +1 -1
  75. package/dist/cdn/foxy-payment-card.js +1 -1
  76. package/dist/cdn/foxy-payment-method-card.js +1 -1
  77. package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
  78. package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
  79. package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
  80. package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
  81. package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
  82. package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
  83. package/dist/cdn/foxy-query-builder.js +1 -1
  84. package/dist/cdn/foxy-report-form.js +1 -1
  85. package/dist/cdn/foxy-reports-table.js +1 -1
  86. package/dist/cdn/foxy-shipment-card.js +1 -1
  87. package/dist/cdn/foxy-shipping-container-card.js +1 -1
  88. package/dist/cdn/foxy-shipping-drop-type-card.js +1 -1
  89. package/dist/cdn/foxy-shipping-method-card.js +1 -1
  90. package/dist/cdn/foxy-shipping-service-card.js +1 -1
  91. package/dist/cdn/foxy-sign-in-form.js +1 -1
  92. package/dist/cdn/foxy-spinner.js +2 -2
  93. package/dist/cdn/foxy-store-card.js +1 -1
  94. package/dist/cdn/foxy-store-form.js +1 -1
  95. package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
  96. package/dist/cdn/foxy-store-transaction-folder-card.js +1 -1
  97. package/dist/cdn/foxy-store-transaction-folder-form.js +1 -1
  98. package/dist/cdn/foxy-subscription-card.js +1 -1
  99. package/dist/cdn/foxy-subscription-form.js +1 -1
  100. package/dist/cdn/foxy-subscription-settings-form.js +1 -1
  101. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  102. package/dist/cdn/foxy-table.js +1 -1
  103. package/dist/cdn/foxy-tax-card.js +1 -1
  104. package/dist/cdn/foxy-tax-form.js +1 -1
  105. package/dist/cdn/foxy-template-config-form.js +1 -1
  106. package/dist/cdn/foxy-template-form.js +1 -1
  107. package/dist/cdn/foxy-template-set-card.js +1 -1
  108. package/dist/cdn/foxy-template-set-form.js +1 -1
  109. package/dist/cdn/foxy-transaction-card.js +1 -1
  110. package/dist/cdn/foxy-transaction.js +1 -1
  111. package/dist/cdn/foxy-transactions-table.js +7 -7
  112. package/dist/cdn/foxy-update-payment-method-form.js +1 -1
  113. package/dist/cdn/foxy-user-card.js +1 -1
  114. package/dist/cdn/foxy-user-form.js +1 -1
  115. package/dist/cdn/foxy-user-invitation-card.js +1 -1
  116. package/dist/cdn/foxy-user-invitation-form.js +1 -1
  117. package/dist/cdn/foxy-users-table.js +1 -1
  118. package/dist/cdn/foxy-webhook-card.js +1 -1
  119. package/dist/cdn/foxy-webhook-form.js +1 -1
  120. package/dist/cdn/foxy-webhook-log-card.js +1 -1
  121. package/dist/cdn/foxy-webhook-status-card.js +1 -1
  122. package/dist/cdn/{shared-5ded9f39.js → shared-02c0b25a.js} +4 -4
  123. package/dist/cdn/{shared-49c77c18.js → shared-058530fc.js} +1 -1
  124. package/dist/cdn/shared-0af553f2.js +1 -0
  125. package/dist/cdn/{shared-f4738502.js → shared-0f92b865.js} +1 -1
  126. package/dist/cdn/{shared-5b1ad45f.js → shared-0fd68dc0.js} +1 -1
  127. package/dist/cdn/{shared-86f4e737.js → shared-17c9e095.js} +1 -1
  128. package/dist/cdn/{shared-03519cae.js → shared-19073761.js} +1 -1
  129. package/dist/cdn/{shared-acfe37e7.js → shared-1dfc1e37.js} +1 -1
  130. package/dist/cdn/{shared-9c308061.js → shared-2559d303.js} +1 -1
  131. package/dist/cdn/{shared-fd8b44e3.js → shared-2b39e4d4.js} +1 -1
  132. package/dist/cdn/shared-3426159a.js +1 -0
  133. package/dist/cdn/{shared-70e64227.js → shared-377cce47.js} +1 -1
  134. package/dist/cdn/{shared-211bd1dd.js → shared-3d84ef45.js} +1 -1
  135. package/dist/cdn/{shared-d80549b6.js → shared-3eac4b7c.js} +1 -1
  136. package/dist/cdn/{shared-bb5a2cdf.js → shared-49558171.js} +1 -1
  137. package/dist/cdn/{shared-822537f7.js → shared-4da1f187.js} +1 -1
  138. package/dist/cdn/{shared-a1d07d0c.js → shared-515003f6.js} +1 -1
  139. package/dist/cdn/{shared-c9d67ca3.js → shared-54f824d8.js} +1 -1
  140. package/dist/cdn/{shared-35f59eae.js → shared-5ad5e258.js} +1 -1
  141. package/dist/cdn/{shared-45fd1dc1.js → shared-60497743.js} +1 -1
  142. package/dist/cdn/{shared-2a5c640b.js → shared-609c9693.js} +1 -1
  143. package/dist/cdn/{shared-300bf21a.js → shared-61ddd174.js} +1 -1
  144. package/dist/cdn/{shared-4818631e.js → shared-65094878.js} +1 -1
  145. package/dist/cdn/{shared-d91ec395.js → shared-6a0e1b94.js} +3 -3
  146. package/dist/cdn/{shared-e8571c37.js → shared-6bb9a580.js} +1 -1
  147. package/dist/cdn/{shared-2463790e.js → shared-6cdfb858.js} +1 -1
  148. package/dist/cdn/{shared-91fbd884.js → shared-7892fd3f.js} +1 -1
  149. package/dist/cdn/{shared-d0af0d8d.js → shared-79dd8c55.js} +1 -1
  150. package/dist/cdn/{shared-7c099d54.js → shared-80950330.js} +1 -1
  151. package/dist/cdn/{shared-54380337.js → shared-887ac0b0.js} +1 -1
  152. package/dist/cdn/{shared-9cf7a458.js → shared-8d8975d5.js} +1 -1
  153. package/dist/cdn/{shared-d3205195.js → shared-8df8e77c.js} +1 -1
  154. package/dist/cdn/{shared-5ac5253b.js → shared-9109ae93.js} +1 -1
  155. package/dist/cdn/{shared-75c1ce85.js → shared-96207bb5.js} +1 -1
  156. package/dist/cdn/{shared-4f162d81.js → shared-9687ab7b.js} +1 -1
  157. package/dist/cdn/{shared-bc110f4a.js → shared-99c53365.js} +1 -1
  158. package/dist/cdn/{shared-d53f94a0.js → shared-9a3bf65c.js} +1 -1
  159. package/dist/cdn/shared-9b35fe34.js +1 -0
  160. package/dist/cdn/{shared-02fb8ce3.js → shared-a0baefff.js} +1 -1
  161. package/dist/cdn/{shared-58fdefe5.js → shared-a20ef119.js} +1 -1
  162. package/dist/cdn/{shared-9ee4873a.js → shared-a5d6db21.js} +1 -1
  163. package/dist/cdn/{shared-9d0432c3.js → shared-afdf7b0c.js} +1 -1
  164. package/dist/cdn/shared-b1fa9899.js +1 -0
  165. package/dist/cdn/{shared-0682a41b.js → shared-b2f675d4.js} +1 -1
  166. package/dist/cdn/{shared-fe73af3a.js → shared-b5e048f5.js} +1 -1
  167. package/dist/cdn/{shared-9dc6233c.js → shared-b948488a.js} +1 -1
  168. package/dist/cdn/{shared-375d2c8b.js → shared-bbd07437.js} +1 -1
  169. package/dist/cdn/{shared-040485bb.js → shared-c57aac01.js} +1 -1
  170. package/dist/cdn/{shared-3e37477f.js → shared-c8368877.js} +1 -1
  171. package/dist/cdn/{shared-40475d9c.js → shared-ce05e482.js} +1 -1
  172. package/dist/cdn/{shared-462820a3.js → shared-d14a664a.js} +1 -1
  173. package/dist/cdn/{shared-e54c8946.js → shared-d2b3205f.js} +1 -1
  174. package/dist/cdn/{shared-3be57b19.js → shared-d55c7c67.js} +1 -1
  175. package/dist/cdn/{shared-891e2675.js → shared-d9f83737.js} +1 -1
  176. package/dist/cdn/{shared-dae65afe.js → shared-da31cee5.js} +1 -1
  177. package/dist/cdn/{shared-b7f25c69.js → shared-db623837.js} +1 -1
  178. package/dist/cdn/{shared-6545a38f.js → shared-e2d843ca.js} +4 -4
  179. package/dist/cdn/{shared-8dd5edce.js → shared-e6804126.js} +1 -1
  180. package/dist/cdn/{shared-09acffe6.js → shared-ec015a24.js} +1 -1
  181. package/dist/cdn/{shared-650b8749.js → shared-ec6a369a.js} +1 -1
  182. package/dist/cdn/{shared-52d5b281.js → shared-f8e360e6.js} +1 -1
  183. package/dist/cdn/{shared-ee677138.js → shared-f9a22b7a.js} +1 -1
  184. package/dist/cdn/{shared-b142e823.js → shared-f9e4a1cc.js} +1 -1
  185. package/dist/cdn/{shared-36010fae.js → shared-faa174b6.js} +1 -1
  186. package/dist/cdn/{shared-a7ea2b28.js → shared-fda3270b.js} +1 -1
  187. package/dist/cdn/translations/admin-subscription-form/en.json +64 -9
  188. package/dist/cdn/translations/cart-form/en.json +64 -9
  189. package/dist/cdn/translations/item-form/en.json +64 -9
  190. package/dist/cdn/translations/transaction/en.json +64 -9
  191. package/dist/elements/public/CouponCodesForm/CouponCodesForm.js +1 -2
  192. package/dist/elements/public/CouponCodesForm/CouponCodesForm.js.map +1 -1
  193. package/dist/elements/public/GenerateCodesForm/GenerateCodesForm.js +1 -2
  194. package/dist/elements/public/GenerateCodesForm/GenerateCodesForm.js.map +1 -1
  195. package/dist/elements/public/GiftCardCodesForm/GiftCardCodesForm.js +1 -2
  196. package/dist/elements/public/GiftCardCodesForm/GiftCardCodesForm.js.map +1 -1
  197. package/dist/elements/public/ItemForm/ItemForm.d.ts +3 -0
  198. package/dist/elements/public/ItemForm/ItemForm.js +79 -4
  199. package/dist/elements/public/ItemForm/ItemForm.js.map +1 -1
  200. package/dist/elements/public/ItemForm/index.d.ts +3 -0
  201. package/dist/elements/public/ItemForm/index.js +3 -0
  202. package/dist/elements/public/ItemForm/index.js.map +1 -1
  203. package/dist/elements/public/NucleonElement/NucleonElement.d.ts +3 -2
  204. package/dist/elements/public/NucleonElement/NucleonElement.js +21 -13
  205. package/dist/elements/public/NucleonElement/NucleonElement.js.map +1 -1
  206. package/dist/mixins/themeable.js +4 -0
  207. package/dist/mixins/themeable.js.map +1 -1
  208. package/package.json +2 -2
  209. package/dist/cdn/shared-5e07ca45.js +0 -1
  210. package/dist/cdn/shared-beabe645.js +0 -1
  211. package/dist/cdn/shared-bf03e2e9.js +0 -1
  212. package/dist/cdn/shared-ceeffa02.js +0 -1
@@ -98,9 +98,9 @@
98
98
  "placeholder": "Optional"
99
99
  }
100
100
  },
101
- "subscriptions": {
101
+ "subscription": {
102
102
  "label": "Subscription",
103
- "helper_text": "To modify these value for an existing subscription, you must modify the subscription directly.",
103
+ "helper_text": "",
104
104
  "subscription-frequency": {
105
105
  "label": "Frequency",
106
106
  "helper_text": "",
@@ -127,6 +127,49 @@
127
127
  "placeholder": "None"
128
128
  }
129
129
  },
130
+ "downloadable-purchase": {
131
+ "label": "Downloadable usage",
132
+ "helper_text": "",
133
+ "no_stats_text": "This item has not been downloaded yet. Download statistics will appear here once the item has been downloaded by a customer.",
134
+ "number-of-downloads": {
135
+ "label": "Number of downloads"
136
+ },
137
+ "first-download-time": {
138
+ "label": "First download",
139
+ "value": "{{ value, date }} at {{ value, time }}"
140
+ },
141
+ "download-link": {
142
+ "label": "Download file"
143
+ },
144
+ "copy-download-link": {
145
+ "failed_to_copy": "Failed to copy",
146
+ "click_to_copy": "Copy URL",
147
+ "copying": "Copying...",
148
+ "done": "Copied to clipboard"
149
+ },
150
+ "reset-usage": {
151
+ "message_idle": "This action will attempt to reset usage for this downloadable purchase. Would you like to proceed?",
152
+ "message_fail": "Failed to reset usage for this downloadable purchase. If you'd like to retry, close this dialog and click the reset usage button again.",
153
+ "message_done": "Usage for this downloadable purchase was reset successfully. You can close this dialog now.",
154
+ "button_close": "Close",
155
+ "button_confirm": "Reset usage",
156
+ "button_cancel": "Go back",
157
+ "loading_busy": "Processing",
158
+ "header": "Reset usage",
159
+ "button": "Reset usage"
160
+ }
161
+ },
162
+ "actions": {
163
+ "download": {
164
+ "label": "Download file"
165
+ },
166
+ "copy-download-link": {
167
+ "failed_to_copy": "Failed to copy",
168
+ "click_to_copy": "Copy download link",
169
+ "copying": "Copying...",
170
+ "done": "Copied to clipboard"
171
+ }
172
+ },
130
173
  "dimensions": {
131
174
  "label": "Dimensions",
132
175
  "helper_text": "",
@@ -155,13 +198,13 @@
155
198
  "label": "Meta",
156
199
  "helper_text": "",
157
200
  "url": {
158
- "label": "URL",
159
- "helper_text": "Full URL for the customer to view this item on the store website.",
201
+ "label": "Website URL",
202
+ "helper_text": "",
160
203
  "placeholder": "None"
161
204
  },
162
205
  "image": {
163
- "label": "Image",
164
- "helper_text": "URL of the image to display for this item in the cart and checkout.",
206
+ "label": "Image URL",
207
+ "helper_text": "",
165
208
  "placeholder": "None"
166
209
  },
167
210
  "quantity-max": {
@@ -175,8 +218,8 @@
175
218
  "placeholder": "1"
176
219
  },
177
220
  "expires": {
178
- "label": "Expires",
179
- "helper_text": "Date when this item will be removed from the cart.",
221
+ "label": "Expiry Date",
222
+ "helper_text": "",
180
223
  "display_value": "{{ value, date }}",
181
224
  "placeholder": "Optional"
182
225
  }
@@ -208,6 +251,9 @@
208
251
  },
209
252
  "discount-details": {
210
253
  "label": "Applied discounts",
254
+ "helper_text": "",
255
+ "total_items": "{{ count }} discount",
256
+ "total_items_plural": "{{ count }} discounts",
211
257
  "pagination": {
212
258
  "first": "First",
213
259
  "last": "Last",
@@ -228,6 +274,9 @@
228
274
  },
229
275
  "coupon-details": {
230
276
  "label": "Applied coupons",
277
+ "helper_text": "",
278
+ "total_items": "{{ count }} coupon",
279
+ "total_items_plural": "{{ count }} coupons",
231
280
  "pagination": {
232
281
  "first": "First",
233
282
  "last": "Last",
@@ -248,6 +297,9 @@
248
297
  },
249
298
  "attributes": {
250
299
  "label": "Attributes",
300
+ "helper_text": "",
301
+ "total_items": "{{ count }} attribute",
302
+ "total_items_plural": "{{ count }} attributes",
251
303
  "delete_header": "Remove attribute?",
252
304
  "delete_message": "Please confirm that you'd like to remove this attribute from the item.",
253
305
  "delete_confirm": "Remove",
@@ -351,6 +403,9 @@
351
403
  },
352
404
  "item-options": {
353
405
  "label": "Item options",
406
+ "helper_text": "",
407
+ "total_items": "{{ count }} option",
408
+ "total_items_plural": "{{ count }} options",
354
409
  "delete_header": "Remove item option?",
355
410
  "delete_message": "Please confirm that you'd like to remove this item option from the item.",
356
411
  "delete_confirm": "Remove",
@@ -485,4 +540,4 @@
485
540
  "loading_busy": "Loading",
486
541
  "loading_error": "Unknown error"
487
542
  }
488
- }
543
+ }
@@ -201,9 +201,9 @@
201
201
  "placeholder": "Optional"
202
202
  }
203
203
  },
204
- "subscriptions": {
204
+ "subscription": {
205
205
  "label": "Subscription",
206
- "helper_text": "To modify these value for an existing subscription, you must modify the subscription directly.",
206
+ "helper_text": "",
207
207
  "subscription-frequency": {
208
208
  "label": "Frequency",
209
209
  "helper_text": "",
@@ -230,6 +230,49 @@
230
230
  "placeholder": "None"
231
231
  }
232
232
  },
233
+ "downloadable-purchase": {
234
+ "label": "Downloadable usage",
235
+ "helper_text": "",
236
+ "no_stats_text": "This item has not been downloaded yet. Download statistics will appear here once the item has been downloaded by a customer.",
237
+ "number-of-downloads": {
238
+ "label": "Number of downloads"
239
+ },
240
+ "first-download-time": {
241
+ "label": "First download",
242
+ "value": "{{ value, date }} at {{ value, time }}"
243
+ },
244
+ "download-link": {
245
+ "label": "Download file"
246
+ },
247
+ "copy-download-link": {
248
+ "failed_to_copy": "Failed to copy",
249
+ "click_to_copy": "Copy URL",
250
+ "copying": "Copying...",
251
+ "done": "Copied to clipboard"
252
+ },
253
+ "reset-usage": {
254
+ "message_idle": "This action will attempt to reset usage for this downloadable purchase. Would you like to proceed?",
255
+ "message_fail": "Failed to reset usage for this downloadable purchase. If you'd like to retry, close this dialog and click the reset usage button again.",
256
+ "message_done": "Usage for this downloadable purchase was reset successfully. You can close this dialog now.",
257
+ "button_close": "Close",
258
+ "button_confirm": "Reset usage",
259
+ "button_cancel": "Go back",
260
+ "loading_busy": "Processing",
261
+ "header": "Reset usage",
262
+ "button": "Reset usage"
263
+ }
264
+ },
265
+ "actions": {
266
+ "download": {
267
+ "label": "Download file"
268
+ },
269
+ "copy-download-link": {
270
+ "failed_to_copy": "Failed to copy",
271
+ "click_to_copy": "Copy download link",
272
+ "copying": "Copying...",
273
+ "done": "Copied to clipboard"
274
+ }
275
+ },
233
276
  "dimensions": {
234
277
  "label": "Dimensions",
235
278
  "helper_text": "",
@@ -258,13 +301,13 @@
258
301
  "label": "Meta",
259
302
  "helper_text": "",
260
303
  "url": {
261
- "label": "URL",
262
- "helper_text": "Full URL for the customer to view this item on the store website.",
304
+ "label": "Website URL",
305
+ "helper_text": "",
263
306
  "placeholder": "None"
264
307
  },
265
308
  "image": {
266
- "label": "Image",
267
- "helper_text": "URL of the image to display for this item in the cart and checkout.",
309
+ "label": "Image URL",
310
+ "helper_text": "",
268
311
  "placeholder": "None"
269
312
  },
270
313
  "quantity-max": {
@@ -278,8 +321,8 @@
278
321
  "placeholder": "1"
279
322
  },
280
323
  "expires": {
281
- "label": "Expires",
282
- "helper_text": "Date when this item will be removed from the cart.",
324
+ "label": "Expiry Date",
325
+ "helper_text": "",
283
326
  "display_value": "{{ value, date }}",
284
327
  "placeholder": "Optional"
285
328
  }
@@ -311,6 +354,9 @@
311
354
  },
312
355
  "discount-details": {
313
356
  "label": "Applied discounts",
357
+ "helper_text": "",
358
+ "total_items": "{{ count }} discount",
359
+ "total_items_plural": "{{ count }} discounts",
314
360
  "pagination": {
315
361
  "first": "First",
316
362
  "last": "Last",
@@ -331,6 +377,9 @@
331
377
  },
332
378
  "coupon-details": {
333
379
  "label": "Applied coupons",
380
+ "helper_text": "",
381
+ "total_items": "{{ count }} coupon",
382
+ "total_items_plural": "{{ count }} coupons",
334
383
  "pagination": {
335
384
  "first": "First",
336
385
  "last": "Last",
@@ -351,6 +400,9 @@
351
400
  },
352
401
  "attributes": {
353
402
  "label": "Attributes",
403
+ "helper_text": "",
404
+ "total_items": "{{ count }} attribute",
405
+ "total_items_plural": "{{ count }} attributes",
354
406
  "delete_header": "Remove attribute?",
355
407
  "delete_message": "Please confirm that you'd like to remove this attribute from the item.",
356
408
  "delete_confirm": "Remove",
@@ -454,6 +506,9 @@
454
506
  },
455
507
  "item-options": {
456
508
  "label": "Item options",
509
+ "helper_text": "",
510
+ "total_items": "{{ count }} option",
511
+ "total_items_plural": "{{ count }} options",
457
512
  "delete_header": "Remove item option?",
458
513
  "delete_message": "Please confirm that you'd like to remove this item option from the item.",
459
514
  "delete_confirm": "Remove",
@@ -1784,4 +1839,4 @@
1784
1839
  "loading_empty": "No data",
1785
1840
  "loading_error": "Unknown error"
1786
1841
  }
1787
- }
1842
+ }
@@ -52,8 +52,7 @@ export class CouponCodesForm extends Base {
52
52
  `;
53
53
  }
54
54
  async _sendPost(edits) {
55
- const body = JSON.stringify(edits);
56
- const data = await this._fetch(this.parent, { body, method: 'POST' });
55
+ const data = await super._sendPost(edits, { mode: 'action' });
57
56
  this.status = { key: 'success' };
58
57
  return data;
59
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CouponCodesForm.js","sourceRoot":"","sources":["../../../../src/elements/public/CouponCodesForm/CouponCodesForm.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,mBAAmB,CAAC;AAC/B,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,IAAU;IAA/C;;QAKmB,0BAAqB,GAAG,GAAG,EAAE;;YAC5C,mBAAO,IAAI,CAAC,IAAI,CAAC,YAAY,0CAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,oCAAK,EAAE,CAAC;QACjE,CAAC,CAAC;QAEe,0BAAqB,GAAG,CAAC,QAAgB,EAAE,EAAE;YAC5D,IAAI,CAAC,IAAI,CAAC;gBACR,YAAY,EAAE,QAAQ;qBACnB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;qBACvD,IAAI,EAAE;qBACN,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC,CAAC;IAgCJ,CAAC;IA/CC,MAAM,KAAK,GAAG;QACZ,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,2BAA2B,CAAC,CAAC;IACvF,CAAC;IAeD,IAAI,gBAAgB;QAClB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAA;;;oBAGK,IAAI,CAAC,qBAAqB;oBAC1B,IAAI,CAAC,qBAAqB;;;;QAItC,KAAK,CAAC,UAAU,EAAE;KACrB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,KAAoB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import type { Data } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Item } from '../../internal/InternalEditableListControl/types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { html } from 'lit-html';\n\nconst NS = 'coupon-codes-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\n/**\n * Form element for importing coupon codes (`fx:coupon_codes`).\n *\n * @element foxy-coupon-codes-form\n * @since 1.15.0\n */\nexport class CouponCodesForm extends Base<Data> {\n static get v8n(): NucleonV8N<Data> {\n return [({ coupon_codes: v }) => (v && v.length > 0) || 'coupon-codes:v8n_required'];\n }\n\n private readonly __couponCodesGetValue = () => {\n return this.form.coupon_codes?.map(value => ({ value })) ?? [];\n };\n\n private readonly __couponCodesSetValue = (newValue: Item[]) => {\n this.edit({\n coupon_codes: newValue\n .map(({ value }) => value.split(' ').map(v => v.trim()))\n .flat()\n .filter((v, i, a) => a.indexOf(v) === i),\n });\n };\n\n get readonlySelector(): BooleanSelector {\n const alwaysMatch = [super.readonlySelector.toString()];\n if (this.href) alwaysMatch.push('coupon-codes');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = ['delete timestamps', super.hiddenSelector.toString()];\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n return html`\n <foxy-internal-editable-list-control\n infer=\"coupon-codes\"\n .getValue=${this.__couponCodesGetValue}\n .setValue=${this.__couponCodesSetValue}\n >\n </foxy-internal-editable-list-control>\n\n ${super.renderBody()}\n `;\n }\n\n protected async _sendPost(edits: Partial<Data>): Promise<Data> {\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.parent, { body, method: 'POST' });\n this.status = { key: 'success' };\n return data;\n }\n}\n"]}
1
+ {"version":3,"file":"CouponCodesForm.js","sourceRoot":"","sources":["../../../../src/elements/public/CouponCodesForm/CouponCodesForm.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,mBAAmB,CAAC;AAC/B,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,IAAU;IAA/C;;QAKmB,0BAAqB,GAAG,GAAG,EAAE;;YAC5C,mBAAO,IAAI,CAAC,IAAI,CAAC,YAAY,0CAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,oCAAK,EAAE,CAAC;QACjE,CAAC,CAAC;QAEe,0BAAqB,GAAG,CAAC,QAAgB,EAAE,EAAE;YAC5D,IAAI,CAAC,IAAI,CAAC;gBACR,YAAY,EAAE,QAAQ;qBACnB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;qBACvD,IAAI,EAAE;qBACN,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC,CAAC;IA+BJ,CAAC;IA9CC,MAAM,KAAK,GAAG;QACZ,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,2BAA2B,CAAC,CAAC;IACvF,CAAC;IAeD,IAAI,gBAAgB;QAClB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAA;;;oBAGK,IAAI,CAAC,qBAAqB;oBAC1B,IAAI,CAAC,qBAAqB;;;;QAItC,KAAK,CAAC,UAAU,EAAE;KACrB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,KAAoB;QAC5C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import type { Data } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Item } from '../../internal/InternalEditableListControl/types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { html } from 'lit-html';\n\nconst NS = 'coupon-codes-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\n/**\n * Form element for importing coupon codes (`fx:coupon_codes`).\n *\n * @element foxy-coupon-codes-form\n * @since 1.15.0\n */\nexport class CouponCodesForm extends Base<Data> {\n static get v8n(): NucleonV8N<Data> {\n return [({ coupon_codes: v }) => (v && v.length > 0) || 'coupon-codes:v8n_required'];\n }\n\n private readonly __couponCodesGetValue = () => {\n return this.form.coupon_codes?.map(value => ({ value })) ?? [];\n };\n\n private readonly __couponCodesSetValue = (newValue: Item[]) => {\n this.edit({\n coupon_codes: newValue\n .map(({ value }) => value.split(' ').map(v => v.trim()))\n .flat()\n .filter((v, i, a) => a.indexOf(v) === i),\n });\n };\n\n get readonlySelector(): BooleanSelector {\n const alwaysMatch = [super.readonlySelector.toString()];\n if (this.href) alwaysMatch.push('coupon-codes');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = ['delete timestamps', super.hiddenSelector.toString()];\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n return html`\n <foxy-internal-editable-list-control\n infer=\"coupon-codes\"\n .getValue=${this.__couponCodesGetValue}\n .setValue=${this.__couponCodesSetValue}\n >\n </foxy-internal-editable-list-control>\n\n ${super.renderBody()}\n `;\n }\n\n protected async _sendPost(edits: Partial<Data>): Promise<Data> {\n const data = await super._sendPost(edits, { mode: 'action' });\n this.status = { key: 'success' };\n return data;\n }\n}\n"]}
@@ -64,8 +64,7 @@ export class GenerateCodesForm extends Base {
64
64
  `;
65
65
  }
66
66
  async _sendPost(edits) {
67
- const body = JSON.stringify(edits);
68
- const data = await this._fetch(this.parent, { body, method: 'POST' });
67
+ const data = await super._sendPost(edits, { mode: 'action' });
69
68
  this.status = { key: 'success' };
70
69
  return data;
71
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateCodesForm.js","sourceRoot":"","sources":["../../../../src/elements/public/GenerateCodesForm/GenerateCodesForm.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,qBAAqB,CAAC;AACjC,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,IAAU;IAAjD;;QAQmB,sBAAiB,GAAG,GAAG,EAAE;;YACxC,MAAM,SAAS,GAAG;gBAChB,oDAAoD;gBACpD,oDAAoD;gBACpD,oDAAoD;aACrD,CAAC;YAEF,MAAM,MAAM,SAAG,IAAI,CAAC,IAAI,CAAC,MAAM,mCAAI,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,OAAC,IAAI,CAAC,IAAI,CAAC,MAAM,mCAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACvD,IAAI,MAAM,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC,CAAC;IAwCJ,CAAC;IAzDC,MAAM,KAAK,GAAG;QACZ,OAAO;YACL,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CACpC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,IAAI,oBAAoB;SAC7E,CAAC;IACJ,CAAC;IAcD,IAAI,gBAAgB;QAClB,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QACjF,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5E,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAA;;;;;;;;;;gEAUiD,IAAI,CAAC,iBAAiB;;;QAG9E,KAAK,CAAC,UAAU,EAAE;KACrB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,KAAoB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import type { Data } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { html } from 'lit-html';\n\nconst NS = 'generate-codes-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\n/**\n * Form element for generating codes for coupons or gift cards (`fx:generate_codes`).\n *\n * @element foxy-generate-codes-form\n * @since 1.15.0\n */\nexport class GenerateCodesForm extends Base<Data> {\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ prefix: p = '', length: l = 6 }) =>\n (l - p.length > 0 && l <= 50 && !p?.includes(' ')) || 'error:invalid_form',\n ];\n }\n\n private readonly __exampleGetValue = () => {\n const templates = [\n '1V3BJ3USJKSS1BYANMNBT7AJ06R6QQ8RB0VPPL03ATQVY186X2',\n 'P4YNSW7NSSAY43PL4H7BKHDUVNAE9UR13FC0XAAJHDLZWW8AJC',\n '7DGT4Q91FV4KK095WLX1ML1HFNU6ZCGVBVPMGR7D3P52A9UFTB',\n ];\n\n const prefix = this.form.prefix ?? '';\n const length = (this.form.length ?? 6) - prefix.length;\n if (length > 0) return templates.map(t => `${prefix}${t.slice(0, length)}`).join('\\n');\n };\n\n get readonlySelector(): BooleanSelector {\n const alwaysMatch = ['example', super.readonlySelector.toString()];\n if (this.href) alwaysMatch.push('length number-of-codes current-balance prefix');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = [super.hiddenSelector.toString()];\n alwaysMatch.unshift('delete timestamps');\n if (this.href) alwaysMatch.push('example');\n if (this.errors.includes('error:invalid_form')) alwaysMatch.push('example');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n return html`\n <foxy-internal-text-control infer=\"prefix\"></foxy-internal-text-control>\n\n <div class=\"grid grid-cols-2 gap-m\">\n <foxy-internal-integer-control infer=\"length\" min=\"1\"></foxy-internal-integer-control>\n <foxy-internal-integer-control infer=\"number-of-codes\" min=\"1\">\n </foxy-internal-integer-control>\n </div>\n\n <foxy-internal-number-control infer=\"current-balance\" min=\"0\"></foxy-internal-number-control>\n <foxy-internal-source-control infer=\"example\" .getValue=${this.__exampleGetValue}>\n </foxy-internal-source-control>\n\n ${super.renderBody()}\n `;\n }\n\n protected async _sendPost(edits: Partial<Data>): Promise<Data> {\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.parent, { body, method: 'POST' });\n this.status = { key: 'success' };\n return data;\n }\n}\n"]}
1
+ {"version":3,"file":"GenerateCodesForm.js","sourceRoot":"","sources":["../../../../src/elements/public/GenerateCodesForm/GenerateCodesForm.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,qBAAqB,CAAC;AACjC,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,IAAU;IAAjD;;QAQmB,sBAAiB,GAAG,GAAG,EAAE;;YACxC,MAAM,SAAS,GAAG;gBAChB,oDAAoD;gBACpD,oDAAoD;gBACpD,oDAAoD;aACrD,CAAC;YAEF,MAAM,MAAM,SAAG,IAAI,CAAC,IAAI,CAAC,MAAM,mCAAI,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,OAAC,IAAI,CAAC,IAAI,CAAC,MAAM,mCAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACvD,IAAI,MAAM,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC,CAAC;IAuCJ,CAAC;IAxDC,MAAM,KAAK,GAAG;QACZ,OAAO;YACL,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CACpC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,IAAI,oBAAoB;SAC7E,CAAC;IACJ,CAAC;IAcD,IAAI,gBAAgB;QAClB,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QACjF,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5E,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAA;;;;;;;;;;gEAUiD,IAAI,CAAC,iBAAiB;;;QAG9E,KAAK,CAAC,UAAU,EAAE;KACrB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,KAAoB;QAC5C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import type { Data } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { html } from 'lit-html';\n\nconst NS = 'generate-codes-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\n/**\n * Form element for generating codes for coupons or gift cards (`fx:generate_codes`).\n *\n * @element foxy-generate-codes-form\n * @since 1.15.0\n */\nexport class GenerateCodesForm extends Base<Data> {\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ prefix: p = '', length: l = 6 }) =>\n (l - p.length > 0 && l <= 50 && !p?.includes(' ')) || 'error:invalid_form',\n ];\n }\n\n private readonly __exampleGetValue = () => {\n const templates = [\n '1V3BJ3USJKSS1BYANMNBT7AJ06R6QQ8RB0VPPL03ATQVY186X2',\n 'P4YNSW7NSSAY43PL4H7BKHDUVNAE9UR13FC0XAAJHDLZWW8AJC',\n '7DGT4Q91FV4KK095WLX1ML1HFNU6ZCGVBVPMGR7D3P52A9UFTB',\n ];\n\n const prefix = this.form.prefix ?? '';\n const length = (this.form.length ?? 6) - prefix.length;\n if (length > 0) return templates.map(t => `${prefix}${t.slice(0, length)}`).join('\\n');\n };\n\n get readonlySelector(): BooleanSelector {\n const alwaysMatch = ['example', super.readonlySelector.toString()];\n if (this.href) alwaysMatch.push('length number-of-codes current-balance prefix');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = [super.hiddenSelector.toString()];\n alwaysMatch.unshift('delete timestamps');\n if (this.href) alwaysMatch.push('example');\n if (this.errors.includes('error:invalid_form')) alwaysMatch.push('example');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n return html`\n <foxy-internal-text-control infer=\"prefix\"></foxy-internal-text-control>\n\n <div class=\"grid grid-cols-2 gap-m\">\n <foxy-internal-integer-control infer=\"length\" min=\"1\"></foxy-internal-integer-control>\n <foxy-internal-integer-control infer=\"number-of-codes\" min=\"1\">\n </foxy-internal-integer-control>\n </div>\n\n <foxy-internal-number-control infer=\"current-balance\" min=\"0\"></foxy-internal-number-control>\n <foxy-internal-source-control infer=\"example\" .getValue=${this.__exampleGetValue}>\n </foxy-internal-source-control>\n\n ${super.renderBody()}\n `;\n }\n\n protected async _sendPost(edits: Partial<Data>): Promise<Data> {\n const data = await super._sendPost(edits, { mode: 'action' });\n this.status = { key: 'success' };\n return data;\n }\n}\n"]}
@@ -54,8 +54,7 @@ export class GiftCardCodesForm extends Base {
54
54
  `;
55
55
  }
56
56
  async _sendPost(edits) {
57
- const body = JSON.stringify(edits);
58
- const data = await this._fetch(this.parent, { body, method: 'POST' });
57
+ const data = await super._sendPost(edits, { mode: 'action' });
59
58
  this.status = { key: 'success' };
60
59
  return data;
61
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GiftCardCodesForm.js","sourceRoot":"","sources":["../../../../src/elements/public/GiftCardCodesForm/GiftCardCodesForm.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,sBAAsB,CAAC;AAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,IAAU;IAAjD;;QAKmB,4BAAuB,GAAG,GAAG,EAAE;;YAC9C,mBAAO,IAAI,CAAC,IAAI,CAAC,eAAe,0CAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,oCAAK,EAAE,CAAC;QACpE,CAAC,CAAC;QAEe,4BAAuB,GAAG,CAAC,QAAgB,EAAE,EAAE;YAC9D,IAAI,CAAC,IAAI,CAAC;gBACR,eAAe,EAAE,QAAQ;qBACtB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;qBACvD,IAAI,EAAE;qBACN,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC,CAAC;IAkCJ,CAAC;IAjDC,MAAM,KAAK,GAAG;QACZ,OAAO,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,8BAA8B,CAAC,CAAC;IAC7F,CAAC;IAeD,IAAI,gBAAgB;QAClB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnD,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAA;;;oBAGK,IAAI,CAAC,uBAAuB;oBAC5B,IAAI,CAAC,uBAAuB;;;;;;QAMxC,KAAK,CAAC,UAAU,EAAE;KACrB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,KAAoB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import type { Data } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Item } from '../../internal/InternalEditableListControl/types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { html } from 'lit-html';\n\nconst NS = 'gift-card-codes-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\n/**\n * Form element for importing gift card codes (`fx:gift_card_codes`).\n *\n * @element foxy-gift-card-codes-form\n * @since 1.15.0\n */\nexport class GiftCardCodesForm extends Base<Data> {\n static get v8n(): NucleonV8N<Data> {\n return [({ gift_card_codes: v }) => (v && v.length > 0) || 'gift-card-codes:v8n_required'];\n }\n\n private readonly __giftCardCodesGetValue = () => {\n return this.form.gift_card_codes?.map(value => ({ value })) ?? [];\n };\n\n private readonly __giftCardCodesSetValue = (newValue: Item[]) => {\n this.edit({\n gift_card_codes: newValue\n .map(({ value }) => value.split(' ').map(v => v.trim()))\n .flat()\n .filter((v, i, a) => a.indexOf(v) === i),\n });\n };\n\n get readonlySelector(): BooleanSelector {\n const alwaysMatch = [super.readonlySelector.toString()];\n if (this.href) alwaysMatch.push('gift-card-codes');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = ['delete timestamps', super.hiddenSelector.toString()];\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n return html`\n <foxy-internal-editable-list-control\n infer=\"gift-card-codes\"\n .getValue=${this.__giftCardCodesGetValue}\n .setValue=${this.__giftCardCodesSetValue}\n >\n </foxy-internal-editable-list-control>\n\n <foxy-internal-number-control infer=\"current-balance\" min=\"0\"></foxy-internal-number-control>\n\n ${super.renderBody()}\n `;\n }\n\n protected async _sendPost(edits: Partial<Data>): Promise<Data> {\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.parent, { body, method: 'POST' });\n this.status = { key: 'success' };\n return data;\n }\n}\n"]}
1
+ {"version":3,"file":"GiftCardCodesForm.js","sourceRoot":"","sources":["../../../../src/elements/public/GiftCardCodesForm/GiftCardCodesForm.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,sBAAsB,CAAC;AAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,IAAU;IAAjD;;QAKmB,4BAAuB,GAAG,GAAG,EAAE;;YAC9C,mBAAO,IAAI,CAAC,IAAI,CAAC,eAAe,0CAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,oCAAK,EAAE,CAAC;QACpE,CAAC,CAAC;QAEe,4BAAuB,GAAG,CAAC,QAAgB,EAAE,EAAE;YAC9D,IAAI,CAAC,IAAI,CAAC;gBACR,eAAe,EAAE,QAAQ;qBACtB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;qBACvD,IAAI,EAAE;qBACN,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC,CAAC;IAiCJ,CAAC;IAhDC,MAAM,KAAK,GAAG;QACZ,OAAO,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,8BAA8B,CAAC,CAAC;IAC7F,CAAC;IAeD,IAAI,gBAAgB;QAClB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnD,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAA;;;oBAGK,IAAI,CAAC,uBAAuB;oBAC5B,IAAI,CAAC,uBAAuB;;;;;;QAMxC,KAAK,CAAC,UAAU,EAAE;KACrB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,KAAoB;QAC5C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import type { Data } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Item } from '../../internal/InternalEditableListControl/types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { html } from 'lit-html';\n\nconst NS = 'gift-card-codes-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\n/**\n * Form element for importing gift card codes (`fx:gift_card_codes`).\n *\n * @element foxy-gift-card-codes-form\n * @since 1.15.0\n */\nexport class GiftCardCodesForm extends Base<Data> {\n static get v8n(): NucleonV8N<Data> {\n return [({ gift_card_codes: v }) => (v && v.length > 0) || 'gift-card-codes:v8n_required'];\n }\n\n private readonly __giftCardCodesGetValue = () => {\n return this.form.gift_card_codes?.map(value => ({ value })) ?? [];\n };\n\n private readonly __giftCardCodesSetValue = (newValue: Item[]) => {\n this.edit({\n gift_card_codes: newValue\n .map(({ value }) => value.split(' ').map(v => v.trim()))\n .flat()\n .filter((v, i, a) => a.indexOf(v) === i),\n });\n };\n\n get readonlySelector(): BooleanSelector {\n const alwaysMatch = [super.readonlySelector.toString()];\n if (this.href) alwaysMatch.push('gift-card-codes');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = ['delete timestamps', super.hiddenSelector.toString()];\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n return html`\n <foxy-internal-editable-list-control\n infer=\"gift-card-codes\"\n .getValue=${this.__giftCardCodesGetValue}\n .setValue=${this.__giftCardCodesSetValue}\n >\n </foxy-internal-editable-list-control>\n\n <foxy-internal-number-control infer=\"current-balance\" min=\"0\"></foxy-internal-number-control>\n\n ${super.renderBody()}\n `;\n }\n\n protected async _sendPost(edits: Partial<Data>): Promise<Data> {\n const data = await super._sendPost(edits, { mode: 'action' });\n this.status = { key: 'success' };\n return data;\n }\n}\n"]}
@@ -26,15 +26,18 @@ export declare class ItemForm extends ItemForm_base<Data> {
26
26
  coupons: string | null;
27
27
  /** Link to `fx:store` this item belongs to. */
28
28
  store: string | null;
29
+ private __downloadablePurchase;
29
30
  private __itemsLink;
30
31
  get headerSubtitleOptions(): Record<string, unknown>;
31
32
  get readonlySelector(): BooleanSelector;
32
33
  get hiddenSelector(): BooleanSelector;
34
+ renderHeaderActions(): TemplateResult;
33
35
  renderBody(): TemplateResult;
34
36
  protected _sendGet(): Promise<Data>;
35
37
  private get __discountBuilderParsedValue();
36
38
  private get __itemOptionRelatedUrls();
37
39
  private get __storeLoader();
40
+ private __renderDownloadablePurchaseSection;
38
41
  private __handleDiscountBuilderChange;
39
42
  }
40
43
  export {};
@@ -23,6 +23,7 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
23
23
  this.coupons = null;
24
24
  /** Link to `fx:store` this item belongs to. */
25
25
  this.store = null;
26
+ this.__downloadablePurchase = null;
26
27
  this.__itemsLink = '';
27
28
  }
28
29
  static get properties() {
@@ -61,6 +62,8 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
61
62
  alwaysMatch.unshift('general:shipto');
62
63
  if (this.data && !this.data.subscription_frequency)
63
64
  alwaysMatch.unshift('subscriptions');
65
+ if (!this.__downloadablePurchase)
66
+ alwaysMatch.unshift('downloadable-purchase');
64
67
  if (!this.form.discount_name)
65
68
  alwaysMatch.unshift('discount:discount-builder');
66
69
  if (!this.href) {
@@ -68,6 +71,31 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
68
71
  }
69
72
  return new BooleanSelector(alwaysMatch.join(' ').trim());
70
73
  }
74
+ renderHeaderActions() {
75
+ var _a;
76
+ if (!this.__downloadablePurchase)
77
+ return html ``;
78
+ const downloadUrl = (_a = this.__downloadablePurchase) === null || _a === void 0 ? void 0 : _a._links['fx:download_url'].href;
79
+ return html `
80
+ <a
81
+ data-testid="download-link"
82
+ target="_blank"
83
+ class="text-primary font-medium cursor-pointer hover-underline rounded-sm focus-outline-none focus-ring-2 focus-ring-primary-50"
84
+ href=${ifDefined(downloadUrl)}
85
+ rel="noopener noreferrer"
86
+ >
87
+ <foxy-i18n infer="actions download" key="label"></foxy-i18n>
88
+ </a>
89
+
90
+ <foxy-copy-to-clipboard
91
+ layout="text"
92
+ theme="tertiary-inline"
93
+ infer="actions copy-download-link"
94
+ text=${ifDefined(downloadUrl)}
95
+ >
96
+ </foxy-copy-to-clipboard>
97
+ `;
98
+ }
71
99
  renderBody() {
72
100
  var _a, _b, _c, _d, _e, _f, _g;
73
101
  return html `
@@ -93,7 +121,7 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
93
121
  </foxy-internal-text-control>
94
122
  </foxy-internal-summary-control>
95
123
 
96
- <foxy-internal-summary-control infer="subscriptions">
124
+ <foxy-internal-summary-control infer="subscription" layout="details">
97
125
  <foxy-internal-frequency-control layout="summary-item" infer="subscription-frequency">
98
126
  </foxy-internal-frequency-control>
99
127
  <foxy-internal-date-control layout="summary-item" infer="subscription-start-date">
@@ -102,7 +130,10 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
102
130
  </foxy-internal-date-control>
103
131
  </foxy-internal-summary-control>
104
132
 
133
+ ${this.__renderDownloadablePurchaseSection()}
134
+
105
135
  <foxy-internal-async-list-control
136
+ layout="details"
106
137
  infer="item-options"
107
138
  first=${ifDefined((_b = this.data) === null || _b === void 0 ? void 0 : _b._links['fx:item_options'].href)}
108
139
  form="foxy-item-option-form"
@@ -113,7 +144,7 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
113
144
  >
114
145
  </foxy-internal-async-list-control>
115
146
 
116
- <foxy-internal-summary-control infer="dimensions">
147
+ <foxy-internal-summary-control infer="dimensions" layout="details">
117
148
  <foxy-internal-number-control layout="summary-item" infer="weight" min="0">
118
149
  </foxy-internal-number-control>
119
150
  <foxy-internal-number-control layout="summary-item" infer="length" min="0">
@@ -124,7 +155,7 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
124
155
  </foxy-internal-number-control>
125
156
  </foxy-internal-summary-control>
126
157
 
127
- <foxy-internal-summary-control infer="meta">
158
+ <foxy-internal-summary-control infer="meta" layout="details">
128
159
  <foxy-internal-text-control layout="summary-item" infer="url"></foxy-internal-text-control>
129
160
  <foxy-internal-text-control layout="summary-item" infer="image">
130
161
  </foxy-internal-text-control>
@@ -136,7 +167,7 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
136
167
  </foxy-internal-date-control>
137
168
  </foxy-internal-summary-control>
138
169
 
139
- <foxy-internal-summary-control infer="discount">
170
+ <foxy-internal-summary-control infer="discount" layout="details">
140
171
  <foxy-internal-text-control layout="summary-item" infer="discount-name">
141
172
  </foxy-internal-text-control>
142
173
  <foxy-discount-builder
@@ -149,6 +180,7 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
149
180
  </foxy-internal-summary-control>
150
181
 
151
182
  <foxy-internal-async-list-control
183
+ layout="details"
152
184
  infer="discount-details"
153
185
  first=${ifDefined((_d = this.data) === null || _d === void 0 ? void 0 : _d._links['fx:discount_details'].href)}
154
186
  item="foxy-discount-detail-card"
@@ -156,6 +188,7 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
156
188
  </foxy-internal-async-list-control>
157
189
 
158
190
  <foxy-internal-async-list-control
191
+ layout="details"
159
192
  infer="coupon-details"
160
193
  first=${ifDefined((_e = this.data) === null || _e === void 0 ? void 0 : _e._links['fx:coupon_details'].href)}
161
194
  item="foxy-coupon-detail-card"
@@ -163,6 +196,7 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
163
196
  </foxy-internal-async-list-control>
164
197
 
165
198
  <foxy-internal-async-list-control
199
+ layout="details"
166
200
  infer="attributes"
167
201
  first=${ifDefined((_f = this.data) === null || _f === void 0 ? void 0 : _f._links['fx:attributes'].href)}
168
202
  item="foxy-attribute-card"
@@ -185,6 +219,9 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
185
219
  }
186
220
  async _sendGet() {
187
221
  const item = await super._sendGet();
222
+ if (item._links['fx:downloadable_purchase']) {
223
+ this.__downloadablePurchase = await super._fetch(item._links['fx:downloadable_purchase'].href);
224
+ }
188
225
  if (item._links['fx:subscription']) {
189
226
  const subscriptionHref = item._links['fx:subscription'].href;
190
227
  const subscription = await super._fetch(subscriptionHref);
@@ -231,6 +268,44 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
231
268
  get __storeLoader() {
232
269
  return this.renderRoot.querySelector('#storeLoader');
233
270
  }
271
+ __renderDownloadablePurchaseSection() {
272
+ const download = this.__downloadablePurchase;
273
+ return html `
274
+ <foxy-internal-summary-control infer="downloadable-purchase" layout="details">
275
+ ${(download === null || download === void 0 ? void 0 : download.number_of_downloads) ? html `
276
+ <p class="flex justify-between gap-m">
277
+ <foxy-i18n infer="number-of-downloads" key="label"></foxy-i18n>
278
+ <span class="text-secondary">${download.number_of_downloads}</span>
279
+ </p>
280
+
281
+ <p class="flex justify-between gap-m">
282
+ <foxy-i18n infer="first-download-time" key="label"></foxy-i18n>
283
+ <foxy-i18n
284
+ options=${JSON.stringify({ value: download === null || download === void 0 ? void 0 : download.first_download_time })}
285
+ class="text-secondary"
286
+ infer="first-download-time"
287
+ key="value"
288
+ >
289
+ </foxy-i18n>
290
+ </p>
291
+
292
+ <div class="flex justify-start">
293
+ <foxy-internal-post-action-control
294
+ theme="tertiary-inline"
295
+ infer="reset-usage"
296
+ href=${ifDefined(download === null || download === void 0 ? void 0 : download._links['fx:reset_usage'].href)}
297
+ >
298
+ </foxy-internal-post-action-control>
299
+ </div>
300
+ `
301
+ : html `
302
+ <p class="text-secondary">
303
+ <foxy-i18n infer="" key="no_stats_text"></foxy-i18n>
304
+ </p>
305
+ `}
306
+ </foxy-internal-summary-control>
307
+ `;
308
+ }
234
309
  __handleDiscountBuilderChange(evt) {
235
310
  const builder = evt.currentTarget;
236
311
  const value = builder.parsedValue;