@foxy.io/elements 1.15.0-beta.8 → 1.16.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 (266) hide show
  1. package/dist/cdn/foxy-access-recovery-form.js +1 -1
  2. package/dist/cdn/foxy-address-card.js +1 -1
  3. package/dist/cdn/foxy-address-form.js +1 -1
  4. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  5. package/dist/cdn/foxy-attribute-card.js +1 -1
  6. package/dist/cdn/foxy-attribute-form.js +1 -1
  7. package/dist/cdn/foxy-cancellation-form.js +1 -1
  8. package/dist/cdn/foxy-collection-page.js +1 -1
  9. package/dist/cdn/foxy-collection-pages.js +1 -1
  10. package/dist/cdn/foxy-coupon-card.js +1 -1
  11. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  12. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  13. package/dist/cdn/foxy-coupon-form.js +1 -1
  14. package/dist/cdn/foxy-custom-field-card.js +1 -1
  15. package/dist/cdn/foxy-custom-field-form.js +1 -1
  16. package/dist/cdn/foxy-customer-api.js +1 -1
  17. package/dist/cdn/foxy-customer-card.js +1 -1
  18. package/dist/cdn/foxy-customer-form.js +1 -1
  19. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  20. package/dist/cdn/foxy-customer-portal.js +13 -13
  21. package/dist/cdn/foxy-customer.js +3 -3
  22. package/dist/cdn/foxy-customers-table.js +1 -1
  23. package/dist/cdn/foxy-discount-card.js +1 -1
  24. package/dist/cdn/foxy-donation.js +1 -1
  25. package/dist/cdn/foxy-email-template-form.js +1 -1
  26. package/dist/cdn/foxy-error-entry-card.js +1 -1
  27. package/dist/cdn/foxy-form-dialog.js +1 -1
  28. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  29. package/dist/cdn/foxy-gift-card-card.js +1 -1
  30. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  31. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  32. package/dist/cdn/foxy-gift-card-form.js +1 -1
  33. package/dist/cdn/foxy-i18n.js +1 -1
  34. package/dist/cdn/foxy-items-form.js +1 -1
  35. package/dist/cdn/foxy-nucleon-element.js +1 -1
  36. package/dist/cdn/foxy-pagination.js +1 -1
  37. package/dist/cdn/foxy-payment-card.js +1 -1
  38. package/dist/cdn/foxy-payment-method-card.js +1 -1
  39. package/dist/cdn/foxy-query-builder.js +1 -1
  40. package/dist/cdn/foxy-report-form.js +195 -0
  41. package/dist/cdn/foxy-reports-table.js +41 -0
  42. package/dist/cdn/foxy-sign-in-form.js +1 -1
  43. package/dist/cdn/foxy-spinner.js +1 -1
  44. package/dist/cdn/foxy-subscription-card.js +1 -1
  45. package/dist/cdn/foxy-subscription-form.js +5 -5
  46. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  47. package/dist/cdn/foxy-table.js +1 -1
  48. package/dist/cdn/foxy-tax-card.js +1 -1
  49. package/dist/cdn/foxy-tax-form.js +1 -1
  50. package/dist/cdn/foxy-template-config-form.js +1 -1
  51. package/dist/cdn/foxy-template-form.js +1 -1
  52. package/dist/cdn/foxy-transaction-card.js +1 -1
  53. package/dist/cdn/foxy-transactions-table.js +1 -1
  54. package/dist/cdn/foxy-user-form.js +1 -1
  55. package/dist/cdn/foxy-users-table.js +1 -1
  56. package/dist/cdn/{shared-46ee137f.js → shared-01cbd43c.js} +10 -10
  57. package/dist/cdn/{shared-b710881a.js → shared-0389f098.js} +2 -2
  58. package/dist/cdn/{shared-1a67bc75.js → shared-147e571b.js} +4 -4
  59. package/dist/cdn/{shared-c5de42f7.js → shared-1d2cc2fb.js} +1 -1
  60. package/dist/cdn/shared-1e57180b.js +1 -0
  61. package/dist/cdn/{shared-02945b27.js → shared-1fa5f9a9.js} +1 -1
  62. package/dist/cdn/{shared-07134f93.js → shared-2558daa0.js} +1 -1
  63. package/dist/cdn/{shared-59e44f29.js → shared-25f67779.js} +1 -1
  64. package/dist/cdn/{shared-fab8c705.js → shared-269fb742.js} +10 -10
  65. package/dist/cdn/shared-27277bbb.js +1 -0
  66. package/dist/cdn/{shared-218ba06e.js → shared-2b3f17cf.js} +1 -1
  67. package/dist/cdn/{shared-60126eee.js → shared-2f8bf5d9.js} +1 -1
  68. package/dist/cdn/{shared-a23cf7c8.js → shared-312131d3.js} +1 -1
  69. package/dist/cdn/{shared-448781f9.js → shared-34f68715.js} +1 -1
  70. package/dist/cdn/{shared-b5754a42.js → shared-3a06bd7f.js} +1 -1
  71. package/dist/cdn/{shared-1934524e.js → shared-3c85dcd8.js} +2 -2
  72. package/dist/cdn/{shared-e209cb55.js → shared-3f26cae2.js} +1 -1
  73. package/dist/cdn/{shared-a040d79d.js → shared-41272a67.js} +1 -1
  74. package/dist/cdn/shared-41f3f823.js +29 -0
  75. package/dist/cdn/{shared-f4ad24f4.js → shared-44633760.js} +1 -1
  76. package/dist/cdn/{shared-223508ae.js → shared-4dc82211.js} +7 -7
  77. package/dist/cdn/{shared-63eaded9.js → shared-4ec62366.js} +6 -6
  78. package/dist/cdn/{shared-09069d7c.js → shared-57a8ee05.js} +1 -1
  79. package/dist/cdn/{shared-253e59d2.js → shared-5e9d8142.js} +1 -1
  80. package/dist/cdn/shared-5fd50b58.js +1 -0
  81. package/dist/cdn/{shared-21419f10.js → shared-65cfddfd.js} +1 -1
  82. package/dist/cdn/shared-6974569c.js +201 -0
  83. package/dist/cdn/{shared-9221e6b2.js → shared-701d5a7c.js} +1 -1
  84. package/dist/cdn/{shared-7f0a9790.js → shared-7cf914d7.js} +1 -1
  85. package/dist/cdn/{shared-4dc6d228.js → shared-7d337241.js} +1 -1
  86. package/dist/cdn/{shared-dcc9c325.js → shared-7e107668.js} +1 -1
  87. package/dist/cdn/shared-85b8ae57.js +12 -0
  88. package/dist/cdn/{shared-6d45a07b.js → shared-8695b424.js} +1 -1
  89. package/dist/cdn/{shared-39e3ae67.js → shared-8fc0b3ee.js} +1 -1
  90. package/dist/cdn/{shared-756034e4.js → shared-916ef4d3.js} +1 -1
  91. package/dist/cdn/{shared-08c63028.js → shared-9728b5f8.js} +1 -1
  92. package/dist/cdn/{shared-b9f18aaa.js → shared-a42088ee.js} +1 -1
  93. package/dist/cdn/{shared-5a54a9bc.js → shared-a82f8b58.js} +1 -1
  94. package/dist/cdn/{shared-65dfd512.js → shared-b161b269.js} +1 -1
  95. package/dist/cdn/{shared-5535f38f.js → shared-bad032de.js} +1 -1
  96. package/dist/cdn/{shared-20b9ce70.js → shared-bec9e9ce.js} +5 -5
  97. package/dist/cdn/{shared-a7b6feb2.js → shared-c722fc23.js} +1 -1
  98. package/dist/cdn/{shared-e2c878c7.js → shared-cd262e68.js} +10 -10
  99. package/dist/cdn/{shared-df730f90.js → shared-d2228670.js} +1 -1
  100. package/dist/cdn/{shared-b0f0e8b5.js → shared-d3cf78c1.js} +1 -1
  101. package/dist/cdn/{shared-073cb8e9.js → shared-e69e1ca3.js} +1 -1
  102. package/dist/cdn/shared-f0515999.js +1 -0
  103. package/dist/cdn/{shared-0f38a631.js → shared-f1107e25.js} +1 -1
  104. package/dist/cdn/translations/access-recovery-form/en.json +12 -0
  105. package/dist/cdn/translations/address-card/en.json +11 -0
  106. package/dist/cdn/translations/address-form/en.json +27 -0
  107. package/dist/cdn/translations/applied-tax-card/en.json +9 -0
  108. package/dist/cdn/translations/attribute-card/en.json +7 -0
  109. package/dist/cdn/translations/attribute-form/en.json +22 -0
  110. package/dist/cdn/translations/cancellation-form/en.json +10 -0
  111. package/dist/cdn/translations/country/pl.json +251 -0
  112. package/dist/cdn/translations/coupon-card/en.json +36 -0
  113. package/dist/cdn/translations/coupon-code-form/en.json +17 -0
  114. package/dist/cdn/translations/coupon-codes-form/en.json +20 -0
  115. package/dist/cdn/translations/coupon-form/en.json +186 -0
  116. package/dist/cdn/translations/custom-field-card/en.json +7 -0
  117. package/dist/cdn/translations/custom-field-form/en.json +19 -0
  118. package/dist/cdn/translations/customer/en.json +247 -0
  119. package/dist/cdn/translations/customer-card/en.json +7 -0
  120. package/dist/cdn/translations/customer-form/en.json +21 -0
  121. package/dist/cdn/translations/customer-portal/de.json +202 -14
  122. package/dist/cdn/translations/customer-portal/en.json +202 -14
  123. package/dist/cdn/translations/customer-portal/es.json +202 -14
  124. package/dist/cdn/translations/customer-portal/pl.json +223 -0
  125. package/dist/cdn/translations/customer-portal/zh-hk.json +202 -14
  126. package/dist/cdn/translations/customers-table/en.json +9 -0
  127. package/dist/cdn/translations/discount-card/en.json +8 -0
  128. package/dist/cdn/translations/email-template-form/en.json +25 -0
  129. package/dist/cdn/translations/error-entry-card/en.json +7 -0
  130. package/dist/cdn/translations/generate-codes-form/en.json +19 -0
  131. package/dist/cdn/translations/gift-card-card/en.json +9 -0
  132. package/dist/cdn/translations/gift-card-code-form/en.json +19 -0
  133. package/dist/cdn/translations/gift-card-codes-form/en.json +25 -0
  134. package/dist/cdn/translations/gift-card-form/en.json +314 -0
  135. package/dist/cdn/translations/pagination/en.json +7 -0
  136. package/dist/cdn/translations/payment-card/en.json +12 -0
  137. package/dist/cdn/translations/payment-method-card/en.json +13 -0
  138. package/dist/cdn/translations/query-builder/en.json +32 -0
  139. package/dist/cdn/translations/report-form/en.json +38 -0
  140. package/dist/cdn/translations/reports-table/en.json +21 -0
  141. package/dist/cdn/translations/sign-in-form/en.json +21 -0
  142. package/dist/cdn/translations/spinner/en.json +7 -0
  143. package/dist/cdn/translations/subscription-card/en.json +26 -0
  144. package/dist/cdn/translations/subscription-form/en.json +76 -0
  145. package/dist/cdn/translations/subscriptions-table/en.json +26 -0
  146. package/dist/cdn/translations/tax-card/en.json +11 -0
  147. package/dist/cdn/translations/tax-form/en.json +38 -0
  148. package/dist/cdn/translations/template-config-form/en.json +107 -0
  149. package/dist/cdn/translations/template-form/en.json +23 -0
  150. package/dist/cdn/translations/transaction-card/en.json +25 -0
  151. package/dist/cdn/translations/transactions-table/en.json +22 -0
  152. package/dist/cdn/translations/user-form/en.json +26 -0
  153. package/dist/cdn/translations/users-table/en.json +44 -0
  154. package/dist/elements/private/Choice/Choice.js +1 -0
  155. package/dist/elements/private/Choice/Choice.js.map +1 -1
  156. package/dist/elements/private/FrequencyInput/FrequencyInput.d.ts +5 -5
  157. package/dist/elements/private/FrequencyInput/FrequencyInput.js +7 -22
  158. package/dist/elements/private/FrequencyInput/FrequencyInput.js.map +1 -1
  159. package/dist/elements/public/AccessRecoveryForm/AccessRecoveryForm.js +1 -1
  160. package/dist/elements/public/AccessRecoveryForm/AccessRecoveryForm.js.map +1 -1
  161. package/dist/elements/public/AttributeCard/types.d.ts +3 -3
  162. package/dist/elements/public/AttributeCard/types.js.map +1 -1
  163. package/dist/elements/public/AttributeForm/AttributeForm.js +2 -1
  164. package/dist/elements/public/AttributeForm/AttributeForm.js.map +1 -1
  165. package/dist/elements/public/AttributeForm/types.d.ts +3 -3
  166. package/dist/elements/public/AttributeForm/types.js.map +1 -1
  167. package/dist/elements/public/CouponCard/CouponCard.js +2 -1
  168. package/dist/elements/public/CouponCard/CouponCard.js.map +1 -1
  169. package/dist/elements/public/CouponCodeForm/CouponCodeForm.js +5 -5
  170. package/dist/elements/public/CouponCodeForm/CouponCodeForm.js.map +1 -1
  171. package/dist/elements/public/CouponForm/CouponForm.js +199 -164
  172. package/dist/elements/public/CouponForm/CouponForm.js.map +1 -1
  173. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPage.d.ts +4 -3
  174. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPage.js +5 -4
  175. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPage.js.map +1 -1
  176. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItem.d.ts +3 -4
  177. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItem.js +3 -4
  178. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItem.js.map +1 -1
  179. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItemContent.d.ts +3 -4
  180. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItemContent.js +3 -2
  181. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItemContent.js.map +1 -1
  182. package/dist/elements/public/CustomFieldForm/CustomFieldForm.js +2 -1
  183. package/dist/elements/public/CustomFieldForm/CustomFieldForm.js.map +1 -1
  184. package/dist/elements/public/Customer/Customer.js +1 -1
  185. package/dist/elements/public/Customer/Customer.js.map +1 -1
  186. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js +18 -5
  187. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js.map +1 -1
  188. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedOutView.js +20 -6
  189. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedOutView.js.map +1 -1
  190. package/dist/elements/public/CustomerPortal/InternalCustomerPortalSubscriptions.js +2 -1
  191. package/dist/elements/public/CustomerPortal/InternalCustomerPortalSubscriptions.js.map +1 -1
  192. package/dist/elements/public/ErrorEntryCard/ErrorEntryCard.js +2 -1
  193. package/dist/elements/public/ErrorEntryCard/ErrorEntryCard.js.map +1 -1
  194. package/dist/elements/public/GiftCardCodeForm/GiftCardCodeForm.js +6 -6
  195. package/dist/elements/public/GiftCardCodeForm/GiftCardCodeForm.js.map +1 -1
  196. package/dist/elements/public/GiftCardForm/GiftCardForm.js +103 -85
  197. package/dist/elements/public/GiftCardForm/GiftCardForm.js.map +1 -1
  198. package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPage.d.ts +1 -1
  199. package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPage.js +3 -3
  200. package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPage.js.map +1 -1
  201. package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItem.d.ts +1 -3
  202. package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItem.js +2 -4
  203. package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItem.js.map +1 -1
  204. package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItemContent.d.ts +1 -3
  205. package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItemContent.js +2 -2
  206. package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItemContent.js.map +1 -1
  207. package/dist/elements/public/I18n/format/discount.js +2 -2
  208. package/dist/elements/public/I18n/format/discount.js.map +1 -1
  209. package/dist/elements/public/Pagination/Pagination.js +4 -0
  210. package/dist/elements/public/Pagination/Pagination.js.map +1 -1
  211. package/dist/elements/public/ReportForm/ReportForm.d.ts +48 -0
  212. package/dist/elements/public/ReportForm/ReportForm.js +391 -0
  213. package/dist/elements/public/ReportForm/ReportForm.js.map +1 -0
  214. package/dist/elements/public/ReportForm/index.d.ts +11 -0
  215. package/dist/elements/public/ReportForm/index.js +13 -0
  216. package/dist/elements/public/ReportForm/index.js.map +1 -0
  217. package/dist/elements/public/ReportForm/types.d.ts +17 -0
  218. package/dist/elements/public/ReportForm/types.js +2 -0
  219. package/dist/elements/public/ReportForm/types.js.map +1 -0
  220. package/dist/elements/public/ReportForm/utils.d.ts +16 -0
  221. package/dist/elements/public/ReportForm/utils.js +73 -0
  222. package/dist/elements/public/ReportForm/utils.js.map +1 -0
  223. package/dist/elements/public/ReportsTable/ReportsTable.d.ts +21 -0
  224. package/dist/elements/public/ReportsTable/ReportsTable.js +101 -0
  225. package/dist/elements/public/ReportsTable/ReportsTable.js.map +1 -0
  226. package/dist/elements/public/ReportsTable/index.d.ts +4 -0
  227. package/dist/elements/public/ReportsTable/index.js +6 -0
  228. package/dist/elements/public/ReportsTable/index.js.map +1 -0
  229. package/dist/elements/public/ReportsTable/types.d.ts +3 -0
  230. package/dist/elements/public/ReportsTable/types.js +2 -0
  231. package/dist/elements/public/ReportsTable/types.js.map +1 -0
  232. package/dist/elements/public/SignInForm/SignInForm.js +1 -1
  233. package/dist/elements/public/SignInForm/SignInForm.js.map +1 -1
  234. package/dist/elements/public/SubscriptionForm/SubscriptionForm.js +1 -1
  235. package/dist/elements/public/SubscriptionForm/SubscriptionForm.js.map +1 -1
  236. package/dist/elements/public/TaxForm/TaxForm.js +16 -14
  237. package/dist/elements/public/TaxForm/TaxForm.js.map +1 -1
  238. package/dist/elements/public/TemplateForm/TemplateForm.js +1 -1
  239. package/dist/elements/public/TemplateForm/TemplateForm.js.map +1 -1
  240. package/dist/elements/public/UserForm/UserForm.js +2 -1
  241. package/dist/elements/public/UserForm/UserForm.js.map +1 -1
  242. package/dist/elements/public/UsersTable/UsersTable.d.ts +5 -1
  243. package/dist/elements/public/UsersTable/UsersTable.js +2 -1
  244. package/dist/elements/public/UsersTable/UsersTable.js.map +1 -1
  245. package/dist/elements/public/index.d.ts +2 -0
  246. package/dist/elements/public/index.defined.d.ts +2 -0
  247. package/dist/elements/public/index.defined.js +2 -0
  248. package/dist/elements/public/index.defined.js.map +1 -1
  249. package/dist/elements/public/index.js +2 -0
  250. package/dist/elements/public/index.js.map +1 -1
  251. package/dist/mixins/themeable.js +6523 -0
  252. package/dist/mixins/themeable.js.map +1 -1
  253. package/dist/mixins/translatable.js +1 -1
  254. package/dist/mixins/translatable.js.map +1 -1
  255. package/package.json +3 -3
  256. package/dist/cdn/shared-07049bfe.js +0 -1
  257. package/dist/cdn/shared-11708514.js +0 -1
  258. package/dist/cdn/shared-66633ff7.js +0 -1
  259. package/dist/cdn/shared-805d18a2.js +0 -1
  260. package/dist/cdn/shared-8b20bc23.js +0 -12
  261. package/dist/cdn/shared-e68b9c83.js +0 -1
  262. package/dist/cdn/shared-ff79f3f9.js +0 -230
  263. package/dist/cdn/translations/shared/de.json +0 -271
  264. package/dist/cdn/translations/shared/en.json +0 -557
  265. package/dist/cdn/translations/shared/es.json +0 -272
  266. package/dist/cdn/translations/shared/zh-hk.json +0 -179
@@ -4,9 +4,8 @@ import { ConfigurableMixin } from "../../../../mixins/configurable.js";
4
4
  import { NucleonElement } from "../../NucleonElement/NucleonElement.js";
5
5
  import { ScopedElementsMixin } from '@open-wc/scoped-elements';
6
6
  import { ThemeableMixin } from "../../../../mixins/themeable.js";
7
- import { TranslatableMixin } from "../../../../mixins/translatable.js";
8
7
  import { ifDefined } from 'lit-html/directives/if-defined';
9
- const Base = ConfigurableMixin(ScopedElementsMixin(ThemeableMixin(TranslatableMixin(NucleonElement))));
8
+ const Base = ConfigurableMixin(ScopedElementsMixin(ThemeableMixin(NucleonElement)));
10
9
  export class CategoryRestrictionsPageItem extends Base {
11
10
  constructor() {
12
11
  super(...arguments);
@@ -34,13 +33,12 @@ export class CategoryRestrictionsPageItem extends Base {
34
33
  return html `
35
34
  <x-category-restrictions-page-item-content
36
35
  item-category=${this.itemCategory}
36
+ data-testid="content"
37
37
  gift-card=${this.giftCard}
38
38
  parent=${ifDefined(parent)}
39
39
  class="h-full"
40
40
  group=${this.group}
41
41
  href=${ifDefined(href)}
42
- lang=${this.lang}
43
- ns=${this.ns}
44
42
  ?disabled=${!this.in('idle') || this.disabled}
45
43
  ?readonly=${this.readonly}
46
44
  >
@@ -1 +1 @@
1
- {"version":3,"file":"CategoryRestrictionsPageItem.js","sourceRoot":"","sources":["../../../../../src/elements/public/GiftCardForm/private/CategoryRestrictionsPageItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,mCAAmC,EAAE,iDAA8C;AAC5F,OAAO,EAAE,iBAAiB,EAAE,2CAAwC;AACpE,OAAO,EAAE,cAAc,EAAE,+CAA4C;AAKrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,wCAAqC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,2CAAwC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAG3D,MAAM,IAAI,GAAG,iBAAiB,CAC5B,mBAAmB,CAAC,cAAc,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CACvE,CAAC;AAEF,MAAM,OAAO,4BAA6B,SAAQ,IAAU;IAA5D;;QAgBE,iBAAY,GAAG,EAAE,CAAC;QAElB,aAAQ,GAAG,EAAE,CAAC;IAwBhB,CAAC;IAzCC,MAAM,KAAK,cAAc;QACvB,OAAO;YACL,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC;YAClD,2CAA2C,EAAE,mCAAmC;SACjF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE;YAC1D,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE;SACnD,CAAC;IACJ,CAAC;IAMD,MAAM;;QACJ,MAAM,QAAQ,SAAG,IAAI,CAAC,IAAI,0CAAE,SAAS,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9D,OAAO,IAAI,CAAA;;wBAES,IAAI,CAAC,YAAY;oBACrB,IAAI,CAAC,QAAQ;iBAChB,SAAS,CAAC,MAAM,CAAC;;gBAElB,IAAI,CAAC,KAAK;eACX,SAAS,CAAC,IAAI,CAAC;eACf,IAAI,CAAC,IAAI;aACX,IAAI,CAAC,EAAE;oBACA,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;oBACjC,IAAI,CAAC,QAAQ;;;;KAI5B,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { TemplateResult, html } from 'lit-html';\n\nimport { CategoryRestrictionsPageItemContent } from './CategoryRestrictionsPageItemContent';\nimport { ConfigurableMixin } from '../../../../mixins/configurable';\nimport { NucleonElement } from '../../NucleonElement/NucleonElement';\nimport { PropertyDeclarations } from 'lit-element';\nimport { Rels } from '@foxy.io/sdk/backend';\nimport { Resource } from '@foxy.io/sdk/core';\nimport { ScopedElementsMap } from '@open-wc/scoped-elements/src/types';\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { ThemeableMixin } from '../../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../../mixins/translatable';\nimport { ifDefined } from 'lit-html/directives/if-defined';\n\ntype Data = Resource<Rels.GiftCardItemCategories>;\nconst Base = ConfigurableMixin(\n ScopedElementsMixin(ThemeableMixin(TranslatableMixin(NucleonElement)))\n);\n\nexport class CategoryRestrictionsPageItem extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'foxy-spinner': customElements.get('foxy-spinner'),\n 'x-category-restrictions-page-item-content': CategoryRestrictionsPageItemContent,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n itemCategory: { type: String, attribute: 'item-category' },\n giftCard: { type: String, attribute: 'gift-card' },\n };\n }\n\n itemCategory = '';\n\n giftCard = '';\n\n render(): TemplateResult {\n const category = this.data?._embedded['fx:gift_card_item_categories'][0];\n const parent = category ? undefined : this.href;\n const href = category ? category._links.self.href : undefined;\n\n return html`\n <x-category-restrictions-page-item-content\n item-category=${this.itemCategory}\n gift-card=${this.giftCard}\n parent=${ifDefined(parent)}\n class=\"h-full\"\n group=${this.group}\n href=${ifDefined(href)}\n lang=${this.lang}\n ns=${this.ns}\n ?disabled=${!this.in('idle') || this.disabled}\n ?readonly=${this.readonly}\n >\n <slot></slot>\n </x-category-restrictions-page-item-content>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"CategoryRestrictionsPageItem.js","sourceRoot":"","sources":["../../../../../src/elements/public/GiftCardForm/private/CategoryRestrictionsPageItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,mCAAmC,EAAE,iDAA8C;AAC5F,OAAO,EAAE,iBAAiB,EAAE,2CAAwC;AACpE,OAAO,EAAE,cAAc,EAAE,+CAA4C;AAKrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,wCAAqC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAG3D,MAAM,IAAI,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAEpF,MAAM,OAAO,4BAA6B,SAAQ,IAAU;IAA5D;;QAgBE,iBAAY,GAAG,EAAE,CAAC;QAElB,aAAQ,GAAG,EAAE,CAAC;IAuBhB,CAAC;IAxCC,MAAM,KAAK,cAAc;QACvB,OAAO;YACL,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC;YAClD,2CAA2C,EAAE,mCAAmC;SACjF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE;YAC1D,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE;SACnD,CAAC;IACJ,CAAC;IAMD,MAAM;;QACJ,MAAM,QAAQ,SAAG,IAAI,CAAC,IAAI,0CAAE,SAAS,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9D,OAAO,IAAI,CAAA;;wBAES,IAAI,CAAC,YAAY;;oBAErB,IAAI,CAAC,QAAQ;iBAChB,SAAS,CAAC,MAAM,CAAC;;gBAElB,IAAI,CAAC,KAAK;eACX,SAAS,CAAC,IAAI,CAAC;oBACV,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;oBACjC,IAAI,CAAC,QAAQ;;;;KAI5B,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { TemplateResult, html } from 'lit-html';\n\nimport { CategoryRestrictionsPageItemContent } from './CategoryRestrictionsPageItemContent';\nimport { ConfigurableMixin } from '../../../../mixins/configurable';\nimport { NucleonElement } from '../../NucleonElement/NucleonElement';\nimport { PropertyDeclarations } from 'lit-element';\nimport { Rels } from '@foxy.io/sdk/backend';\nimport { Resource } from '@foxy.io/sdk/core';\nimport { ScopedElementsMap } from '@open-wc/scoped-elements/src/types';\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { ThemeableMixin } from '../../../../mixins/themeable';\nimport { ifDefined } from 'lit-html/directives/if-defined';\n\ntype Data = Resource<Rels.GiftCardItemCategories>;\nconst Base = ConfigurableMixin(ScopedElementsMixin(ThemeableMixin(NucleonElement)));\n\nexport class CategoryRestrictionsPageItem extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'foxy-spinner': customElements.get('foxy-spinner'),\n 'x-category-restrictions-page-item-content': CategoryRestrictionsPageItemContent,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n itemCategory: { type: String, attribute: 'item-category' },\n giftCard: { type: String, attribute: 'gift-card' },\n };\n }\n\n itemCategory = '';\n\n giftCard = '';\n\n render(): TemplateResult {\n const category = this.data?._embedded['fx:gift_card_item_categories'][0];\n const parent = category ? undefined : this.href;\n const href = category ? category._links.self.href : undefined;\n\n return html`\n <x-category-restrictions-page-item-content\n item-category=${this.itemCategory}\n data-testid=\"content\"\n gift-card=${this.giftCard}\n parent=${ifDefined(parent)}\n class=\"h-full\"\n group=${this.group}\n href=${ifDefined(href)}\n ?disabled=${!this.in('idle') || this.disabled}\n ?readonly=${this.readonly}\n >\n <slot></slot>\n </x-category-restrictions-page-item-content>\n `;\n }\n}\n"]}
@@ -5,9 +5,7 @@ import { PropertyDeclarations } from 'lit-element';
5
5
  import { Rels } from '@foxy.io/sdk/backend';
6
6
  import { Resource } from '@foxy.io/sdk/core';
7
7
  declare type Data = Resource<Rels.GiftCardItemCategory>;
8
- declare const Base: typeof NucleonElement & import("lit-element").Constructor<import("../../../../mixins/translatable").TranslatableMixinHost> & {
9
- defaultNS: string;
10
- } & {
8
+ declare const Base: typeof NucleonElement & {
11
9
  styles: import("lit-element").CSSResultArray;
12
10
  } & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/src/types").ScopedElementsHost> & import("lit-element").Constructor<import("../../../../mixins/configurable").ConfigurableMixinHost>;
13
11
  export declare class CategoryRestrictionsPageItemContent extends Base<Data> {
@@ -4,8 +4,7 @@ import { Checkbox } from "../../../private/Checkbox/Checkbox.js";
4
4
  import { ConfigurableMixin } from "../../../../mixins/configurable.js";
5
5
  import { NucleonElement } from "../../NucleonElement/NucleonElement.js";
6
6
  import { ThemeableMixin } from "../../../../mixins/themeable.js";
7
- import { TranslatableMixin } from "../../../../mixins/translatable.js";
8
- const Base = ConfigurableMixin(ScopedElementsMixin(ThemeableMixin(TranslatableMixin(NucleonElement))));
7
+ const Base = ConfigurableMixin(ScopedElementsMixin(ThemeableMixin(NucleonElement)));
9
8
  export class CategoryRestrictionsPageItemContent extends Base {
10
9
  constructor() {
11
10
  super(...arguments);
@@ -28,6 +27,7 @@ export class CategoryRestrictionsPageItemContent extends Base {
28
27
  return html `
29
28
  <div class="h-full flex items-center">
30
29
  <x-checkbox
30
+ data-testid="checkbox"
31
31
  ?disabled=${!this.in('idle') || this.disabled}
32
32
  ?readonly=${this.readonly}
33
33
  ?checked=${!!this.data}
@@ -1 +1 @@
1
- {"version":3,"file":"CategoryRestrictionsPageItemContent.js","sourceRoot":"","sources":["../../../../../src/elements/public/GiftCardForm/private/CategoryRestrictionsPageItemContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAkB,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,8CAA2C;AAE9D,OAAO,EAAE,iBAAiB,EAAE,2CAAwC;AACpE,OAAO,EAAE,cAAc,EAAE,+CAA4C;AAIrE,OAAO,EAAE,cAAc,EAAE,wCAAqC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,2CAAwC;AAGpE,MAAM,IAAI,GAAG,iBAAiB,CAC5B,mBAAmB,CAAC,cAAc,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CACvE,CAAC;AAEF,MAAM,OAAO,mCAAoC,SAAQ,IAAU;IAAnE;;QAeE,iBAAY,GAAG,EAAE,CAAC;QAElB,aAAQ,GAAG,EAAE,CAAC;IA2BhB,CAAC;IA3CC,MAAM,KAAK,cAAc;QACvB,OAAO;YACL,YAAY,EAAE,QAAQ;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE;YAC1D,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE;SACnD,CAAC;IACJ,CAAC;IAMD,MAAM;QACJ,OAAO,IAAI,CAAA;;;sBAGO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;sBACjC,IAAI,CAAC,QAAQ;qBACd,CAAC,CAAC,IAAI,CAAC,IAAI;oBACZ,CAAC,GAAwB,EAAE,EAAE;YACrC,IAAI,GAAG,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,IAAI,CAAC;oBACR,iBAAiB,EAAE,IAAI,CAAC,YAAY;oBACpC,aAAa,EAAE,IAAI,CAAC,QAAQ;iBAC7B,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;iBAAM;gBACL,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;QACH,CAAC;;;;;KAKN,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { ScopedElementsMap, ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { TemplateResult, html } from 'lit-html';\n\nimport { Checkbox } from '../../../private/Checkbox/Checkbox';\nimport { CheckboxChangeEvent } from '../../../private/events';\nimport { ConfigurableMixin } from '../../../../mixins/configurable';\nimport { NucleonElement } from '../../NucleonElement/NucleonElement';\nimport { PropertyDeclarations } from 'lit-element';\nimport { Rels } from '@foxy.io/sdk/backend';\nimport { Resource } from '@foxy.io/sdk/core';\nimport { ThemeableMixin } from '../../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../../mixins/translatable';\n\ntype Data = Resource<Rels.GiftCardItemCategory>;\nconst Base = ConfigurableMixin(\n ScopedElementsMixin(ThemeableMixin(TranslatableMixin(NucleonElement)))\n);\n\nexport class CategoryRestrictionsPageItemContent extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'x-checkbox': Checkbox,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n itemCategory: { type: String, attribute: 'item-category' },\n giftCard: { type: String, attribute: 'gift-card' },\n };\n }\n\n itemCategory = '';\n\n giftCard = '';\n\n render(): TemplateResult {\n return html`\n <div class=\"h-full flex items-center\">\n <x-checkbox\n ?disabled=${!this.in('idle') || this.disabled}\n ?readonly=${this.readonly}\n ?checked=${!!this.data}\n @change=${(evt: CheckboxChangeEvent) => {\n if (evt.detail) {\n this.edit({\n item_category_uri: this.itemCategory,\n gift_card_uri: this.giftCard,\n });\n\n this.submit();\n } else {\n this.delete();\n }\n }}\n >\n <slot></slot>\n </x-checkbox>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"CategoryRestrictionsPageItemContent.js","sourceRoot":"","sources":["../../../../../src/elements/public/GiftCardForm/private/CategoryRestrictionsPageItemContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAkB,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,8CAA2C;AAE9D,OAAO,EAAE,iBAAiB,EAAE,2CAAwC;AACpE,OAAO,EAAE,cAAc,EAAE,+CAA4C;AAIrE,OAAO,EAAE,cAAc,EAAE,wCAAqC;AAG9D,MAAM,IAAI,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAEpF,MAAM,OAAO,mCAAoC,SAAQ,IAAU;IAAnE;;QAeE,iBAAY,GAAG,EAAE,CAAC;QAElB,aAAQ,GAAG,EAAE,CAAC;IA4BhB,CAAC;IA5CC,MAAM,KAAK,cAAc;QACvB,OAAO;YACL,YAAY,EAAE,QAAQ;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE;YAC1D,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE;SACnD,CAAC;IACJ,CAAC;IAMD,MAAM;QACJ,OAAO,IAAI,CAAA;;;;sBAIO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;sBACjC,IAAI,CAAC,QAAQ;qBACd,CAAC,CAAC,IAAI,CAAC,IAAI;oBACZ,CAAC,GAAwB,EAAE,EAAE;YACrC,IAAI,GAAG,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,IAAI,CAAC;oBACR,iBAAiB,EAAE,IAAI,CAAC,YAAY;oBACpC,aAAa,EAAE,IAAI,CAAC,QAAQ;iBAC7B,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;iBAAM;gBACL,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;QACH,CAAC;;;;;KAKN,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { ScopedElementsMap, ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { TemplateResult, html } from 'lit-html';\n\nimport { Checkbox } from '../../../private/Checkbox/Checkbox';\nimport { CheckboxChangeEvent } from '../../../private/events';\nimport { ConfigurableMixin } from '../../../../mixins/configurable';\nimport { NucleonElement } from '../../NucleonElement/NucleonElement';\nimport { PropertyDeclarations } from 'lit-element';\nimport { Rels } from '@foxy.io/sdk/backend';\nimport { Resource } from '@foxy.io/sdk/core';\nimport { ThemeableMixin } from '../../../../mixins/themeable';\n\ntype Data = Resource<Rels.GiftCardItemCategory>;\nconst Base = ConfigurableMixin(ScopedElementsMixin(ThemeableMixin(NucleonElement)));\n\nexport class CategoryRestrictionsPageItemContent extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'x-checkbox': Checkbox,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n itemCategory: { type: String, attribute: 'item-category' },\n giftCard: { type: String, attribute: 'gift-card' },\n };\n }\n\n itemCategory = '';\n\n giftCard = '';\n\n render(): TemplateResult {\n return html`\n <div class=\"h-full flex items-center\">\n <x-checkbox\n data-testid=\"checkbox\"\n ?disabled=${!this.in('idle') || this.disabled}\n ?readonly=${this.readonly}\n ?checked=${!!this.data}\n @change=${(evt: CheckboxChangeEvent) => {\n if (evt.detail) {\n this.edit({\n item_category_uri: this.itemCategory,\n gift_card_uri: this.giftCard,\n });\n\n this.submit();\n } else {\n this.delete();\n }\n }}\n >\n <slot></slot>\n </x-checkbox>\n </div>\n `;\n }\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * i18next formatter that returns a human-readable discount description for an API value.
3
3
  * @see https://www.i18next.com/translation-function/formatting
4
4
  */
5
- export const discount = ({ type, details }, format, lang) => {
5
+ export const discount = ({ ns, type, details }, format, lang) => {
6
6
  const methods = ['allunits', 'incremental', 'repeat', 'single'];
7
7
  const factor = type.endsWith('_percentage') ? 0.01 : 1;
8
8
  const tiers = details.split('|');
@@ -13,7 +13,7 @@ export const discount = ({ type, details }, format, lang) => {
13
13
  const signIndex = (_b = (_a = /[-+]/.exec(tier)) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1;
14
14
  const adjustment = parseFloat(tier.substring(signIndex)) * factor;
15
15
  const from = parseFloat(tier.substring(0, signIndex));
16
- return `$t(${i18nKey}, ${JSON.stringify({ adjustment, from })})`;
16
+ return `$t(${i18nKey}, ${JSON.stringify({ adjustment, from, ns })})`;
17
17
  });
18
18
  return translatedTiers.join('; ');
19
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"discount.js","sourceRoot":"","sources":["../../../../../src/elements/public/I18n/format/discount.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAS,EAAE,MAAM,EAAE,IAAI,EAAU,EAAE;IACzF,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrE,MAAM,OAAO,GAAG,GAAG,MAAM,IAAI,IAAI,mBAAmB,CAAC;IAErD,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;;QACvC,MAAM,SAAS,eAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,0CAAE,KAAK,mCAAI,CAAC,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;QAClE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAEtD,OAAO,MAAM,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC","sourcesContent":["import { FormatFunction } from 'i18next';\n\ntype Value = { type: string; details: string };\n\n/**\n * i18next formatter that returns a human-readable discount description for an API value.\n * @see https://www.i18next.com/translation-function/formatting\n */\nexport const discount: FormatFunction = ({ type, details }: Value, format, lang): string => {\n const methods = ['allunits', 'incremental', 'repeat', 'single'];\n const factor = type.endsWith('_percentage') ? 0.01 : 1;\n const tiers = details.split('|');\n const method = methods.includes(tiers[0]) ? tiers.shift() : 'single';\n const i18nKey = `${method}_${type}_discount_summary`;\n\n const translatedTiers = tiers.map(tier => {\n const signIndex = /[-+]/.exec(tier)?.index ?? -1;\n const adjustment = parseFloat(tier.substring(signIndex)) * factor;\n const from = parseFloat(tier.substring(0, signIndex));\n\n return `$t(${i18nKey}, ${JSON.stringify({ adjustment, from })})`;\n });\n\n return translatedTiers.join('; ');\n};\n"]}
1
+ {"version":3,"file":"discount.js","sourceRoot":"","sources":["../../../../../src/elements/public/I18n/format/discount.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAmB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAS,EAAE,MAAM,EAAE,IAAI,EAAU,EAAE;IAC7F,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrE,MAAM,OAAO,GAAG,GAAG,MAAM,IAAI,IAAI,mBAAmB,CAAC;IAErD,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;;QACvC,MAAM,SAAS,eAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,0CAAE,KAAK,mCAAI,CAAC,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;QAClE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAEtD,OAAO,MAAM,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC","sourcesContent":["import { FormatFunction } from 'i18next';\n\ntype Value = { ns: string; type: string; details: string };\n\n/**\n * i18next formatter that returns a human-readable discount description for an API value.\n * @see https://www.i18next.com/translation-function/formatting\n */\nexport const discount: FormatFunction = ({ ns, type, details }: Value, format, lang): string => {\n const methods = ['allunits', 'incremental', 'repeat', 'single'];\n const factor = type.endsWith('_percentage') ? 0.01 : 1;\n const tiers = details.split('|');\n const method = methods.includes(tiers[0]) ? tiers.shift() : 'single';\n const i18nKey = `${method}_${type}_discount_summary`;\n\n const translatedTiers = tiers.map(tier => {\n const signIndex = /[-+]/.exec(tier)?.index ?? -1;\n const adjustment = parseFloat(tier.substring(signIndex)) * factor;\n const from = parseFloat(tier.substring(0, signIndex));\n\n return `$t(${i18nKey}, ${JSON.stringify({ adjustment, from, ns })})`;\n });\n\n return translatedTiers.join('; ');\n};\n"]}
@@ -69,6 +69,7 @@ export class Pagination extends Base {
69
69
  <div class="grid grid-cols-3 gap-s items-center">
70
70
  <div class="flex items-center space-x-s">
71
71
  <vaadin-button
72
+ data-testid="first"
72
73
  theme="contrast tertiary-inline"
73
74
  ?disabled=${!canGoBack}
74
75
  @click=${() => this.__goTo('first')}
@@ -78,6 +79,7 @@ export class Pagination extends Base {
78
79
  </vaadin-button>
79
80
 
80
81
  <vaadin-button
82
+ data-testid="prev"
81
83
  theme="contrast tertiary-inline"
82
84
  ?disabled=${!canGoBack}
83
85
  @click=${() => this.__goTo('prev')}
@@ -105,6 +107,7 @@ export class Pagination extends Base {
105
107
 
106
108
  <div class="flex items-center justify-end space-x-s">
107
109
  <vaadin-button
110
+ data-testid="next"
108
111
  theme="contrast tertiary-inline"
109
112
  ?disabled=${!canGoForth}
110
113
  @click=${() => this.__goTo('next')}
@@ -114,6 +117,7 @@ export class Pagination extends Base {
114
117
  </vaadin-button>
115
118
 
116
119
  <vaadin-button
120
+ data-testid="last"
117
121
  theme="contrast tertiary-inline"
118
122
  ?disabled=${!canGoForth}
119
123
  @click=${() => this.__goTo('last')}
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../../../src/elements/public/Pagination/Pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwC,IAAI,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,cAAc,EAAE,4CAAyC;AAClE,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAC7D,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,QAAQ,EAAE,oCAAiC;AACpD,OAAO,GAAG,MAAM,eAAe,CAAC;AAEhC,MAAM,EAAE,GAAG,YAAY,CAAC;AACxB,MAAM,IAAI,GAAG,eAAe,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnG;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,UAAW,SAAQ,IAAI;IAApC;;QASU,kBAAa,GAA+B,IAAI,CAAC;QAEjD,eAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAExC,YAAO,GAAG,EAAE,CAAC;IA+HvB,CAAC;IA3IC,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACvB,aAAa,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SACpC,CAAC;IACJ,CAAC;IAQD,8CAA8C;IAC9C,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,CAAC,QAAgB;QACxB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,IAAI,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,QAAQ,CAAC;IAC7D,CAAC;IAED,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM;;QACJ,MAAM,IAAI,SAAG,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC;QACtC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;QAEpC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAEhF,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QAEvE,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAE3D,MAAM,SAAS,GAAG,CAAC,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,CAAC,QAAQ,IAAI,MAAM,GAAG,aAAa,GAAG,UAAU,CAAC;QAEpE,MAAM,UAAU,GAAG,wBAAwB,CAAC;QAE5C,OAAO,IAAI,CAAA;0BACW,IAAI,CAAC,oBAAoB;;;;;;wBAM3B,CAAC,SAAS;qBACb,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;;;+BAGhB,UAAU,SAAS,IAAI,mBAAmB,EAAE;;;;;wBAKnD,CAAC,SAAS;qBACb,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;;;+BAGf,UAAU,SAAS,IAAI,sBAAsB,EAAE;;;;;oBAK1D,IAAI,CAAC,SAAS,CAAC;YACvB,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,EAAE,EAAE,MAAM,GAAG,aAAa;SAC3B,CAAC;kBACM,QAAQ,CAAC;YACf,qDAAqD,EAAE,IAAI;YAC3D,WAAW,EAAE,CAAC,IAAI;SACnB,CAAC;iBACK,IAAI;;eAEN,EAAE;;;;;;;wBAOO,CAAC,UAAU;qBACd,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;;+BAEf,UAAU,SAAS,IAAI,kBAAkB,EAAE;;;;;;wBAMlD,CAAC,UAAU;qBACd,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;;+BAEf,UAAU,SAAS,IAAI,kBAAkB,EAAE;;;;;KAKrE,CAAC;IACJ,CAAC;IAED,oBAAoB;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAEO,MAAM,CAAC,GAAW;;QACxB,IAAI,CAAC,aAAc,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,OAAC,IAAI,CAAC,aAAa,0CAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IACzF,CAAC;IAEO,uBAAuB;;QAC7B,MAAA,IAAI,CAAC,aAAa,0CAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;QACnE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEO,oBAAoB;;QAC1B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAkB,MAAM,CAAC,CAAC;QACpE,MAAM,gBAAgB,SAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,qCAAM,EAAE,CAAC;QACxD,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,cAAc,CAEvE,CAAC;QAEd,IAAI,mBAAmB,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC;YACzC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;SACtC;IACH,CAAC;CACF","sourcesContent":["import { LitElement, PropertyDeclarations, TemplateResult, html } from 'lit-element';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { ResponsiveMixin } from '../../../mixins/responsive';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport get from 'lodash-es/get';\n\nconst NS = 'pagination';\nconst Base = ResponsiveMixin(ConfigurableMixin(ThemeableMixin(TranslatableMixin(LitElement, NS))));\n\n/**\n * Helper element that adds pagination controls to elements\n * representing Hypermedia API collection pages. Works with NucleonElement instances only.\n * Page element **MUST** be a direct descendant of `foxy-pagination`.\n *\n * @example\n * ```html\n * <foxy-pagination first=\"https://demo.api/hapi/customers?limit=3\">\n * <foxy-customers-table></foxy-customers-table>\n * </foxy-pagination>\n * ```\n *\n * @element foxy-pagination\n * @since 1.15.0\n */\nexport class Pagination extends Base {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n first: { type: String },\n __pageElement: { attribute: false },\n };\n }\n\n private __pageElement: NucleonElement<any> | null = null;\n\n private __rerender = () => this.requestUpdate();\n\n private __first = '';\n\n /** URL of the first page of the colletion. */\n get first(): string {\n return this.__first;\n }\n\n set first(newValue: string) {\n this.__first = newValue;\n if (this.__pageElement) this.__pageElement.href = newValue;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.__connectPageElement();\n }\n\n render(): TemplateResult {\n const data = this.__pageElement?.data;\n const { disabled, lang, ns } = this;\n\n const returnedItemsValue = Number(get(data, 'returned_items'));\n const returnedItems = Number.isNaN(returnedItemsValue) ? 0 : returnedItemsValue;\n\n const totalItemsValue = Number(get(data, 'total_items'));\n const totalItems = Number.isNaN(totalItemsValue) ? 0 : totalItemsValue;\n\n const offsetValue = Number(get(data, 'offset'));\n const offset = Number.isNaN(offsetValue) ? 0 : offsetValue;\n\n const canGoBack = !disabled && offset > 0;\n const canGoForth = !disabled && offset + returnedItems < totalItems;\n\n const labelClass = 'sr-only sm-not-sr-only';\n\n return html`\n <slot @slotchange=${this.__connectPageElement}></slot>\n\n <div class=\"grid grid-cols-3 gap-s items-center\">\n <div class=\"flex items-center space-x-s\">\n <vaadin-button\n theme=\"contrast tertiary-inline\"\n ?disabled=${!canGoBack}\n @click=${() => this.__goTo('first')}\n >\n <iron-icon class=\"icon-inline text-s\" icon=\"icons:first-page\"></iron-icon>\n <foxy-i18n class=${labelClass} lang=${lang} key=\"first\" ns=${ns}></foxy-i18n>\n </vaadin-button>\n\n <vaadin-button\n theme=\"contrast tertiary-inline\"\n ?disabled=${!canGoBack}\n @click=${() => this.__goTo('prev')}\n >\n <iron-icon class=\"icon-inline text-s\" icon=\"icons:chevron-left\"></iron-icon>\n <foxy-i18n class=${labelClass} lang=${lang} key=\"previous\" ns=${ns}></foxy-i18n>\n </vaadin-button>\n </div>\n\n <foxy-i18n\n options=${JSON.stringify({\n total: totalItems,\n from: offset ? offset + 1 : 0,\n to: offset + returnedItems,\n })}\n class=${classMap({\n 'flex-1 text-xs text-tertiary text-center leading-xs': true,\n 'opacity-0': !data,\n })}\n lang=${lang}\n key=\"pagination\"\n ns=${ns}\n >\n </foxy-i18n>\n\n <div class=\"flex items-center justify-end space-x-s\">\n <vaadin-button\n theme=\"contrast tertiary-inline\"\n ?disabled=${!canGoForth}\n @click=${() => this.__goTo('next')}\n >\n <foxy-i18n class=${labelClass} lang=${lang} key=\"next\" ns=${ns}></foxy-i18n>\n <iron-icon class=\"icon-inline text-s\" icon=\"icons:chevron-right\"></iron-icon>\n </vaadin-button>\n\n <vaadin-button\n theme=\"contrast tertiary-inline\"\n ?disabled=${!canGoForth}\n @click=${() => this.__goTo('last')}\n >\n <foxy-i18n class=${labelClass} lang=${lang} key=\"last\" ns=${ns}></foxy-i18n>\n <iron-icon class=\"icon-inline text-s\" icon=\"icons:last-page\"></iron-icon>\n </vaadin-button>\n </div>\n </div>\n `;\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.__disconnectPageElement();\n }\n\n private __goTo(rel: string): void {\n this.__pageElement!.href = String(get(this.__pageElement?.data, `_links.${rel}.href`));\n }\n\n private __disconnectPageElement() {\n this.__pageElement?.removeEventListener('update', this.__rerender);\n this.__pageElement = null;\n }\n\n private __connectPageElement() {\n this.__disconnectPageElement();\n\n const slot = this.renderRoot.querySelector<HTMLSlotElement>('slot');\n const assignedElements = slot?.assignedElements() ?? [];\n const firstNucleonElement = assignedElements.find(el => el instanceof NucleonElement) as\n | NucleonElement<any>\n | undefined;\n\n if (firstNucleonElement) {\n this.__pageElement = firstNucleonElement;\n this.__pageElement.addEventListener('update', this.__rerender);\n this.__pageElement.href = this.first;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../../../src/elements/public/Pagination/Pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, PropertyDeclarations, TemplateResult, html } from 'lit-element';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { ResponsiveMixin } from '../../../mixins/responsive';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport get from 'lodash-es/get';\n\nconst NS = 'pagination';\nconst Base = ResponsiveMixin(ConfigurableMixin(ThemeableMixin(TranslatableMixin(LitElement, NS))));\n\n/**\n * Helper element that adds pagination controls to elements\n * representing Hypermedia API collection pages. Works with NucleonElement instances only.\n * Page element **MUST** be a direct descendant of `foxy-pagination`.\n *\n * @example\n * ```html\n * <foxy-pagination first=\"https://demo.api/hapi/customers?limit=3\">\n * <foxy-customers-table></foxy-customers-table>\n * </foxy-pagination>\n * ```\n *\n * @element foxy-pagination\n * @since 1.15.0\n */\nexport class Pagination extends Base {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n first: { type: String },\n __pageElement: { attribute: false },\n };\n }\n\n private __pageElement: NucleonElement<any> | null = null;\n\n private __rerender = () => this.requestUpdate();\n\n private __first = '';\n\n /** URL of the first page of the colletion. */\n get first(): string {\n return this.__first;\n }\n\n set first(newValue: string) {\n this.__first = newValue;\n if (this.__pageElement) this.__pageElement.href = newValue;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.__connectPageElement();\n }\n\n render(): TemplateResult {\n const data = this.__pageElement?.data;\n const { disabled, lang, ns } = this;\n\n const returnedItemsValue = Number(get(data, 'returned_items'));\n const returnedItems = Number.isNaN(returnedItemsValue) ? 0 : returnedItemsValue;\n\n const totalItemsValue = Number(get(data, 'total_items'));\n const totalItems = Number.isNaN(totalItemsValue) ? 0 : totalItemsValue;\n\n const offsetValue = Number(get(data, 'offset'));\n const offset = Number.isNaN(offsetValue) ? 0 : offsetValue;\n\n const canGoBack = !disabled && offset > 0;\n const canGoForth = !disabled && offset + returnedItems < totalItems;\n\n const labelClass = 'sr-only sm-not-sr-only';\n\n return html`\n <slot @slotchange=${this.__connectPageElement}></slot>\n\n <div class=\"grid grid-cols-3 gap-s items-center\">\n <div class=\"flex items-center space-x-s\">\n <vaadin-button\n data-testid=\"first\"\n theme=\"contrast tertiary-inline\"\n ?disabled=${!canGoBack}\n @click=${() => this.__goTo('first')}\n >\n <iron-icon class=\"icon-inline text-s\" icon=\"icons:first-page\"></iron-icon>\n <foxy-i18n class=${labelClass} lang=${lang} key=\"first\" ns=${ns}></foxy-i18n>\n </vaadin-button>\n\n <vaadin-button\n data-testid=\"prev\"\n theme=\"contrast tertiary-inline\"\n ?disabled=${!canGoBack}\n @click=${() => this.__goTo('prev')}\n >\n <iron-icon class=\"icon-inline text-s\" icon=\"icons:chevron-left\"></iron-icon>\n <foxy-i18n class=${labelClass} lang=${lang} key=\"previous\" ns=${ns}></foxy-i18n>\n </vaadin-button>\n </div>\n\n <foxy-i18n\n options=${JSON.stringify({\n total: totalItems,\n from: offset ? offset + 1 : 0,\n to: offset + returnedItems,\n })}\n class=${classMap({\n 'flex-1 text-xs text-tertiary text-center leading-xs': true,\n 'opacity-0': !data,\n })}\n lang=${lang}\n key=\"pagination\"\n ns=${ns}\n >\n </foxy-i18n>\n\n <div class=\"flex items-center justify-end space-x-s\">\n <vaadin-button\n data-testid=\"next\"\n theme=\"contrast tertiary-inline\"\n ?disabled=${!canGoForth}\n @click=${() => this.__goTo('next')}\n >\n <foxy-i18n class=${labelClass} lang=${lang} key=\"next\" ns=${ns}></foxy-i18n>\n <iron-icon class=\"icon-inline text-s\" icon=\"icons:chevron-right\"></iron-icon>\n </vaadin-button>\n\n <vaadin-button\n data-testid=\"last\"\n theme=\"contrast tertiary-inline\"\n ?disabled=${!canGoForth}\n @click=${() => this.__goTo('last')}\n >\n <foxy-i18n class=${labelClass} lang=${lang} key=\"last\" ns=${ns}></foxy-i18n>\n <iron-icon class=\"icon-inline text-s\" icon=\"icons:last-page\"></iron-icon>\n </vaadin-button>\n </div>\n </div>\n `;\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.__disconnectPageElement();\n }\n\n private __goTo(rel: string): void {\n this.__pageElement!.href = String(get(this.__pageElement?.data, `_links.${rel}.href`));\n }\n\n private __disconnectPageElement() {\n this.__pageElement?.removeEventListener('update', this.__rerender);\n this.__pageElement = null;\n }\n\n private __connectPageElement() {\n this.__disconnectPageElement();\n\n const slot = this.renderRoot.querySelector<HTMLSlotElement>('slot');\n const assignedElements = slot?.assignedElements() ?? [];\n const firstNucleonElement = assignedElements.find(el => el instanceof NucleonElement) as\n | NucleonElement<any>\n | undefined;\n\n if (firstNucleonElement) {\n this.__pageElement = firstNucleonElement;\n this.__pageElement.addEventListener('update', this.__rerender);\n this.__pageElement.href = this.first;\n }\n }\n}\n"]}
@@ -0,0 +1,48 @@
1
+ import { Data, Templates } from './types';
2
+ import { PropertyDeclarations, TemplateResult } from 'lit-element';
3
+ import { ScopedElementsMap } from '@open-wc/scoped-elements';
4
+ import { NucleonElement } from '../NucleonElement/NucleonElement';
5
+ import { NucleonV8N } from '../NucleonElement/types';
6
+ declare const Base: typeof NucleonElement & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
7
+ defaultNS: string;
8
+ } & import("lit-element").Constructor<import("../../../mixins/configurable").ConfigurableMixinHost> & {
9
+ styles: import("lit-element").CSSResultArray;
10
+ } & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/src/types").ScopedElementsHost>;
11
+ /**
12
+ * Form element for creating or editing reports (`fx:report`).
13
+ *
14
+ * @slot name:before
15
+ * @slot name:after
16
+ *
17
+ * @slot range:before
18
+ * @slot range:after
19
+ *
20
+ * @slot timestamps:before
21
+ * @slot timestamps:after
22
+ *
23
+ * @slot delete:before
24
+ * @slot delete:after
25
+ *
26
+ * @slot create:before
27
+ * @slot create:after
28
+ *
29
+ * @element foxy-report-form
30
+ * @since 1.16.0
31
+ */
32
+ export declare class ReportForm extends Base<Data> {
33
+ static get scopedElements(): ScopedElementsMap;
34
+ static get properties(): PropertyDeclarations;
35
+ static get v8n(): NucleonV8N<Data>;
36
+ templates: Templates;
37
+ private __showRangeTime;
38
+ render(): TemplateResult;
39
+ private __renderName;
40
+ private __renderRangePreset;
41
+ private __renderRangeDateTimePicker;
42
+ private __renderRangeDatePicker;
43
+ private __renderRange;
44
+ private __renderTimestamps;
45
+ private __renderCreate;
46
+ private __renderDelete;
47
+ }
48
+ export {};
@@ -0,0 +1,391 @@
1
+ import { Choice, Group, PropertyTable } from "../../private/index.js";
2
+ import { html } from 'lit-element';
3
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
4
+ import { getCurrentMonth, getCurrentQuarter, getCurrentYear, getLast30Days, getLast365Days, getPreviousMonth, getPreviousQuarter, getPreviousYear, toAPIDateTime, toDatePickerValue, toDateTimePickerValue, } from "./utils.js";
5
+ import { ChoiceChangeEvent } from "../../private/Choice/ChoiceChangeEvent.js";
6
+ import { ConfigurableMixin } from "../../../mixins/configurable.js";
7
+ import { NucleonElement } from "../NucleonElement/NucleonElement.js";
8
+ import { ResponsiveMixin } from "../../../mixins/responsive.js";
9
+ import { ThemeableMixin } from "../../../mixins/themeable.js";
10
+ import { TranslatableMixin } from "../../../mixins/translatable.js";
11
+ import { classMap } from "../../../utils/class-map.js";
12
+ import { ifDefined } from 'lit-html/directives/if-defined';
13
+ import { live } from 'lit-html/directives/live';
14
+ import { render } from 'lit-html';
15
+ const Base = ScopedElementsMixin(ResponsiveMixin(ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, 'report-form')))));
16
+ /**
17
+ * Form element for creating or editing reports (`fx:report`).
18
+ *
19
+ * @slot name:before
20
+ * @slot name:after
21
+ *
22
+ * @slot range:before
23
+ * @slot range:after
24
+ *
25
+ * @slot timestamps:before
26
+ * @slot timestamps:after
27
+ *
28
+ * @slot delete:before
29
+ * @slot delete:after
30
+ *
31
+ * @slot create:before
32
+ * @slot create:after
33
+ *
34
+ * @element foxy-report-form
35
+ * @since 1.16.0
36
+ */
37
+ export class ReportForm extends Base {
38
+ constructor() {
39
+ super(...arguments);
40
+ this.templates = {};
41
+ this.__showRangeTime = false;
42
+ }
43
+ static get scopedElements() {
44
+ return {
45
+ 'vaadin-date-time-picker': customElements.get('vaadin-date-time-picker'),
46
+ 'vaadin-date-picker': customElements.get('vaadin-date-picker'),
47
+ 'vaadin-checkbox': customElements.get('vaadin-checkbox'),
48
+ 'vaadin-select': customElements.get('vaadin-select'),
49
+ 'vaadin-button': customElements.get('vaadin-button'),
50
+ 'foxy-internal-confirm-dialog': customElements.get('foxy-internal-confirm-dialog'),
51
+ 'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),
52
+ 'foxy-spinner': customElements.get('foxy-spinner'),
53
+ 'foxy-i18n': customElements.get('foxy-i18n'),
54
+ 'x-property-table': PropertyTable,
55
+ 'x-choice': Choice,
56
+ 'x-group': Group,
57
+ };
58
+ }
59
+ static get properties() {
60
+ return {
61
+ ...super.properties,
62
+ __showRangeTime: { attribute: false },
63
+ };
64
+ }
65
+ static get v8n() {
66
+ return [
67
+ ({ name: v }) => !!v || 'name_required',
68
+ ({ datetime_start: v }) => !!v || 'datetime_start_required',
69
+ ({ datetime_end: v }) => !!v || 'datetime_end_required',
70
+ ];
71
+ }
72
+ render() {
73
+ var _a, _b;
74
+ const hidden = this.hiddenSelector;
75
+ return html `
76
+ <div
77
+ data-testid="wrapper"
78
+ aria-busy=${this.in('busy')}
79
+ aria-live="polite"
80
+ class="space-y-l relative"
81
+ >
82
+ <div class="space-y-m">
83
+ ${hidden.matches('name', true) ? '' : this.__renderName()}
84
+ ${hidden.matches('range', true) ? '' : this.__renderRange()}
85
+ ${hidden.matches('timestamps', true) || !this.data ? '' : this.__renderTimestamps()}
86
+ ${hidden.matches('create', true) || this.data ? '' : this.__renderCreate()}
87
+ ${hidden.matches('delete', true) || !this.data ? '' : this.__renderDelete()}
88
+ </div>
89
+
90
+ <div
91
+ data-testid="spinner"
92
+ class=${classMap({
93
+ 'transition duration-500 ease-in-out absolute inset-0 flex': true,
94
+ 'opacity-0 pointer-events-none': this.in('idle'),
95
+ })}
96
+ >
97
+ <foxy-spinner
98
+ layout="vertical"
99
+ class="m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l"
100
+ state=${this.in('fail') ? 'error' : this.in('busy') ? 'busy' : 'empty'}
101
+ lang=${this.lang}
102
+ ns="${this.ns} ${(_b = (_a = customElements.get('foxy-spinner')) === null || _a === void 0 ? void 0 : _a.defaultNS) !== null && _b !== void 0 ? _b : ''}"
103
+ >
104
+ </foxy-spinner>
105
+ </div>
106
+ </div>
107
+ `;
108
+ }
109
+ __renderName() {
110
+ const scope = 'name';
111
+ const items = ['complete', 'customers', 'customers_ltv'];
112
+ const isDisabled = !this.in('idle') || this.disabledSelector.matches(scope);
113
+ const isReadonly = this.readonlySelector.matches(scope);
114
+ return html `
115
+ <div data-testid=${scope}>
116
+ ${this.renderTemplateOrSlot(`${scope}:before`)}
117
+
118
+ <x-group frame>
119
+ <foxy-i18n lang=${this.lang} slot="header" key="name" ns=${this.ns}></foxy-i18n>
120
+
121
+ <x-choice
122
+ data-testid="name-choice"
123
+ .value=${this.form.name}
124
+ .items=${items}
125
+ ?readonly=${isReadonly}
126
+ ?disabled=${isDisabled}
127
+ @change=${(evt) => {
128
+ if (evt instanceof ChoiceChangeEvent) {
129
+ this.edit({ name: evt.detail });
130
+ }
131
+ }}
132
+ >
133
+ ${items.map(value => {
134
+ return html `
135
+ <div slot="${value}-label" class="py-s leading-s">
136
+ <foxy-i18n class="block" lang=${this.lang} key="name_${value}" ns=${this.ns}>
137
+ </foxy-i18n>
138
+
139
+ <foxy-i18n
140
+ class="block text-s opacity-70"
141
+ lang=${this.lang}
142
+ key="name_${value}_explainer"
143
+ ns=${this.ns}
144
+ >
145
+ </foxy-i18n>
146
+ </div>
147
+ `;
148
+ })}
149
+ </x-choice>
150
+ </x-group>
151
+
152
+ ${this.renderTemplateOrSlot(`${scope}:after`)}
153
+ </div>
154
+ `;
155
+ }
156
+ __renderRangePreset() {
157
+ var _a;
158
+ const options = [
159
+ [
160
+ { value: '0', label: 'preset_previous_quarter', ...getPreviousQuarter() },
161
+ { value: '1', label: 'preset_previous_month', ...getPreviousMonth() },
162
+ { value: '2', label: 'preset_previous_year', ...getPreviousYear() },
163
+ ],
164
+ [
165
+ { value: '3', label: 'preset_this_quarter', ...getCurrentQuarter() },
166
+ { value: '4', label: 'preset_this_month', ...getCurrentMonth() },
167
+ { value: '5', label: 'preset_this_year', ...getCurrentYear() },
168
+ ],
169
+ [
170
+ { value: '6', label: 'preset_last_365_days', ...getLast365Days() },
171
+ { value: '7', label: 'preset_last_30_days', ...getLast30Days() },
172
+ ],
173
+ ];
174
+ const currentOption = options.flat(1).find(option => {
175
+ const { datetime_end: end, datetime_start: start } = this.form;
176
+ return (start && end && toAPIDateTime(option.start) === start && toAPIDateTime(option.end) === end);
177
+ });
178
+ const renderer = (root) => {
179
+ const custom = html `<vaadin-item value="custom">${this.t('preset_custom')}</vaadin-item>`;
180
+ const separator = html `<hr />`;
181
+ const predefined = options.map(group => {
182
+ const items = group.map(({ value, label }) => {
183
+ return html `<vaadin-item value=${value}>${this.t(label)}</vaadin-item>`;
184
+ });
185
+ return html `${items}${separator}`;
186
+ });
187
+ if (!root.firstElementChild)
188
+ root.appendChild(document.createElement('vaadin-list-box'));
189
+ render(html `${predefined}${custom}`, root.firstElementChild);
190
+ };
191
+ return html `
192
+ <div>
193
+ <vaadin-select
194
+ data-testid="range:preset"
195
+ label=${this.t('preset')}
196
+ class="w-full -mt-m -mb-xs"
197
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
198
+ ?readonly=${this.readonlySelector.matches('range', true)}
199
+ .value=${live((_a = currentOption === null || currentOption === void 0 ? void 0 : currentOption.value) !== null && _a !== void 0 ? _a : 'custom')}
200
+ .renderer=${renderer}
201
+ @change=${(evt) => {
202
+ const select = evt.currentTarget;
203
+ const option = options.flat(1).find(option => option.value === select.value);
204
+ if (option) {
205
+ this.edit({
206
+ datetime_start: toAPIDateTime(option.start),
207
+ datetime_end: toAPIDateTime(option.end),
208
+ });
209
+ }
210
+ }}
211
+ >
212
+ </vaadin-select>
213
+ </div>
214
+ `;
215
+ }
216
+ __renderRangeDateTimePicker(type) {
217
+ const field = type === 'end' ? 'datetime_end' : 'datetime_start';
218
+ const error = this.errors.find(error => error.startsWith(`${field}_`));
219
+ const value = this.form[field];
220
+ return html `
221
+ <vaadin-date-time-picker
222
+ date-placeholder=${this.t('select_date')}
223
+ time-placeholder=${this.t('select_time')}
224
+ error-message=${ifDefined(error ? this.t(error) : undefined)}
225
+ data-testid="range:${type}"
226
+ class="w-full"
227
+ label=${this.t(type)}
228
+ step="1"
229
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
230
+ ?readonly=${this.readonlySelector.matches('range', true)}
231
+ .checkValidity=${() => !error}
232
+ .value=${value ? toDateTimePickerValue(value) : ''}
233
+ @keydown=${(evt) => evt.key === 'Enter' && this.submit()}
234
+ @change=${(evt) => {
235
+ const picker = evt.currentTarget;
236
+ this.edit({ [field]: picker.value });
237
+ }}
238
+ >
239
+ </vaadin-date-time-picker>
240
+ `;
241
+ }
242
+ __renderRangeDatePicker(type) {
243
+ const field = type === 'end' ? 'datetime_end' : 'datetime_start';
244
+ const error = this.errors.find(error => error.startsWith(`${field}_`));
245
+ const value = this.form[field];
246
+ return html `
247
+ <vaadin-date-picker
248
+ error-message=${ifDefined(error ? this.t(error) : undefined)}
249
+ placeholder=${this.t('select_date')}
250
+ data-testid="range:${type}"
251
+ class="w-full"
252
+ label=${this.t(type)}
253
+ step="1"
254
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
255
+ ?readonly=${this.readonlySelector.matches('range', true)}
256
+ .checkValidity=${() => !error}
257
+ .value=${value ? toDatePickerValue(value) : ''}
258
+ @keydown=${(evt) => evt.key === 'Enter' && this.submit()}
259
+ @change=${(evt) => {
260
+ const picker = evt.currentTarget;
261
+ const time = type === 'end' ? '23:59:59' : '00:00:00';
262
+ this.edit({ [field]: `${picker.value}T${time}` });
263
+ }}
264
+ >
265
+ </vaadin-date-picker>
266
+ `;
267
+ }
268
+ __renderRange() {
269
+ const renderer = this.__showRangeTime
270
+ ? this.__renderRangeDateTimePicker
271
+ : this.__renderRangeDatePicker;
272
+ return html `
273
+ <div data-testid="range">
274
+ ${this.renderTemplateOrSlot('range:before')}
275
+
276
+ <x-group frame>
277
+ <foxy-i18n slot="header" lang=${this.lang} key="range" ns=${this.ns}></foxy-i18n>
278
+
279
+ <div class="p-m grid gap-m ${this.__showRangeTime ? 'grid-cols-1' : 'sm-grid-cols-2'}">
280
+ <div class=${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}>
281
+ ${this.__renderRangePreset()}
282
+ </div>
283
+
284
+ ${renderer.call(this, 'start')} ${renderer.call(this, 'end')}
285
+
286
+ <vaadin-checkbox
287
+ data-testid="range:toggle"
288
+ class="-my-xs w-full ${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}"
289
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
290
+ ?checked=${this.__showRangeTime}
291
+ @change=${(evt) => {
292
+ const checkbox = evt.currentTarget;
293
+ this.__showRangeTime = checkbox.checked;
294
+ }}
295
+ >
296
+ <foxy-i18n lang=${this.lang} key="use_precise_time" ns=${this.ns}></foxy-i18n>
297
+ </vaadin-checkbox>
298
+ </div>
299
+ </x-group>
300
+
301
+ ${this.renderTemplateOrSlot('range:after')}
302
+ </div>
303
+ `;
304
+ }
305
+ __renderTimestamps() {
306
+ return html `
307
+ <div>
308
+ ${this.renderTemplateOrSlot('timestamps:before')}
309
+
310
+ <x-property-table
311
+ data-testid="timestamps"
312
+ .items=${['date_modified', 'date_created'].map(field => {
313
+ var _a;
314
+ return ({
315
+ name: this.t(field),
316
+ value: ((_a = this.data) === null || _a === void 0 ? void 0 : _a[field]) ? this.t('date', { value: new Date(this.data[field]) })
317
+ : '',
318
+ });
319
+ })}
320
+ >
321
+ </x-property-table>
322
+
323
+ ${this.renderTemplateOrSlot('timestamps:after')}
324
+ </div>
325
+ `;
326
+ }
327
+ __renderCreate() {
328
+ const isCleanTemplateInvalid = this.in({ idle: { template: { clean: 'invalid' } } });
329
+ const isDirtyTemplateInvalid = this.in({ idle: { template: { dirty: 'invalid' } } });
330
+ const isCleanSnapshotInvalid = this.in({ idle: { snapshot: { clean: 'invalid' } } });
331
+ const isDirtySnapshotInvalid = this.in({ idle: { snapshot: { dirty: 'invalid' } } });
332
+ const isTemplateInvalid = isCleanTemplateInvalid || isDirtyTemplateInvalid;
333
+ const isSnaphotInvalid = isCleanSnapshotInvalid || isDirtySnapshotInvalid;
334
+ const isInvalid = isTemplateInvalid || isSnaphotInvalid;
335
+ const isIdle = this.in('idle');
336
+ return html `
337
+ <div>
338
+ ${this.renderTemplateOrSlot('create:before')}
339
+
340
+ <vaadin-button
341
+ data-testid="create"
342
+ class="w-full"
343
+ theme="primary success"
344
+ ?disabled=${!isIdle || isInvalid || this.disabledSelector.matches('create', true)}
345
+ @click=${this.submit}
346
+ >
347
+ <foxy-i18n ns=${this.ns} key="create" lang=${this.lang}></foxy-i18n>
348
+ </vaadin-button>
349
+
350
+ ${this.renderTemplateOrSlot('create:after')}
351
+ </div>
352
+ `;
353
+ }
354
+ __renderDelete() {
355
+ return html `
356
+ <div>
357
+ <foxy-internal-confirm-dialog
358
+ data-testid="confirm"
359
+ message="delete_prompt"
360
+ confirm="delete"
361
+ cancel="cancel"
362
+ header="delete"
363
+ theme="primary error"
364
+ lang=${this.lang}
365
+ ns=${this.ns}
366
+ id="confirm"
367
+ @hide=${(evt) => !evt.detail.cancelled && this.delete()}
368
+ >
369
+ </foxy-internal-confirm-dialog>
370
+
371
+ ${this.renderTemplateOrSlot('delete:before')}
372
+
373
+ <vaadin-button
374
+ data-testid="delete"
375
+ theme="primary error"
376
+ class="w-full"
377
+ ?disabled=${!this.in('idle') || this.disabledSelector.matches('delete', true)}
378
+ @click=${(evt) => {
379
+ const confirm = this.renderRoot.querySelector('#confirm');
380
+ confirm.show(evt.currentTarget);
381
+ }}
382
+ >
383
+ <foxy-i18n ns=${this.ns} key="delete" lang=${this.lang}></foxy-i18n>
384
+ </vaadin-button>
385
+
386
+ ${this.renderTemplateOrSlot('delete:after')}
387
+ </div>
388
+ `;
389
+ }
390
+ }
391
+ //# sourceMappingURL=ReportForm.js.map