@foxy.io/elements 1.43.0-beta.3 → 1.43.0-beta.5

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 (235) 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-api-browser.js +1 -1
  7. package/dist/cdn/foxy-applied-coupon-code-card.js +1 -1
  8. package/dist/cdn/foxy-applied-coupon-code-form.js +1 -1
  9. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  10. package/dist/cdn/foxy-attribute-card.js +1 -1
  11. package/dist/cdn/foxy-attribute-form.js +1 -1
  12. package/dist/cdn/foxy-billing-address-card.js +1 -1
  13. package/dist/cdn/foxy-cancellation-form.js +1 -1
  14. package/dist/cdn/foxy-cart-card.js +1 -1
  15. package/dist/cdn/foxy-cart-form.js +1 -1
  16. package/dist/cdn/foxy-client-card.js +1 -1
  17. package/dist/cdn/foxy-client-form.js +1 -1
  18. package/dist/cdn/foxy-collection-page.js +1 -1
  19. package/dist/cdn/foxy-collection-pages.js +1 -1
  20. package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
  21. package/dist/cdn/foxy-coupon-card.js +1 -1
  22. package/dist/cdn/foxy-coupon-code-card.js +1 -1
  23. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  24. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  25. package/dist/cdn/foxy-coupon-detail-card.js +1 -1
  26. package/dist/cdn/foxy-coupon-form.js +1 -1
  27. package/dist/cdn/foxy-custom-field-card.js +1 -1
  28. package/dist/cdn/foxy-custom-field-form.js +1 -1
  29. package/dist/cdn/foxy-customer-card.js +1 -1
  30. package/dist/cdn/foxy-customer-form.js +1 -1
  31. package/dist/cdn/foxy-customer-portal-settings-form.js +1 -1
  32. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  33. package/dist/cdn/foxy-customer-portal.js +11 -11
  34. package/dist/cdn/foxy-customer.js +1 -1
  35. package/dist/cdn/foxy-customers-table.js +1 -1
  36. package/dist/cdn/foxy-discount-builder.js +1 -1
  37. package/dist/cdn/foxy-discount-card.js +1 -1
  38. package/dist/cdn/foxy-discount-detail-card.js +1 -1
  39. package/dist/cdn/foxy-donation.js +1 -1
  40. package/dist/cdn/foxy-downloadable-card.js +1 -1
  41. package/dist/cdn/foxy-downloadable-form.js +1 -1
  42. package/dist/cdn/foxy-email-template-card.js +1 -1
  43. package/dist/cdn/foxy-email-template-form.js +1 -1
  44. package/dist/cdn/foxy-error-entry-card.js +1 -1
  45. package/dist/cdn/foxy-experimental-add-to-cart-builder.js +1 -1
  46. package/dist/cdn/foxy-filter-attribute-card.js +1 -1
  47. package/dist/cdn/foxy-filter-attribute-form.js +1 -1
  48. package/dist/cdn/foxy-form-dialog.js +1 -1
  49. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  50. package/dist/cdn/foxy-gift-card-card.js +1 -1
  51. package/dist/cdn/foxy-gift-card-code-card.js +1 -1
  52. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  53. package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
  54. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  55. package/dist/cdn/foxy-gift-card-form.js +1 -1
  56. package/dist/cdn/foxy-i18n-editor.js +1 -1
  57. package/dist/cdn/foxy-i18n.js +1 -1
  58. package/dist/cdn/foxy-integration-card.js +1 -1
  59. package/dist/cdn/foxy-integration-form.js +1 -1
  60. package/dist/cdn/foxy-item-card.js +1 -1
  61. package/dist/cdn/foxy-item-category-card.js +1 -1
  62. package/dist/cdn/foxy-item-category-form.js +1 -1
  63. package/dist/cdn/foxy-item-form.js +1 -1
  64. package/dist/cdn/foxy-item-option-card.js +1 -1
  65. package/dist/cdn/foxy-item-option-form.js +1 -1
  66. package/dist/cdn/foxy-items-form.js +1 -1
  67. package/dist/cdn/foxy-native-integration-card.js +1 -1
  68. package/dist/cdn/foxy-native-integration-form.js +1 -1
  69. package/dist/cdn/foxy-pagination.js +1 -1
  70. package/dist/cdn/foxy-passkey-card.js +1 -1
  71. package/dist/cdn/foxy-passkey-form.js +1 -1
  72. package/dist/cdn/foxy-payment-card-embed.js +1 -1
  73. package/dist/cdn/foxy-payment-card.js +1 -1
  74. package/dist/cdn/foxy-payment-method-card.js +1 -1
  75. package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
  76. package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
  77. package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
  78. package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
  79. package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
  80. package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
  81. package/dist/cdn/foxy-query-builder.js +1 -1
  82. package/dist/cdn/foxy-report-form.js +1 -1
  83. package/dist/cdn/foxy-reports-table.js +1 -1
  84. package/dist/cdn/foxy-shipment-card.js +1 -1
  85. package/dist/cdn/foxy-shipping-container-card.js +1 -1
  86. package/dist/cdn/foxy-shipping-drop-type-card.js +1 -1
  87. package/dist/cdn/foxy-shipping-method-card.js +1 -1
  88. package/dist/cdn/foxy-shipping-service-card.js +1 -1
  89. package/dist/cdn/foxy-sign-in-form.js +1 -1
  90. package/dist/cdn/foxy-spinner.js +2 -2
  91. package/dist/cdn/foxy-store-card.js +1 -1
  92. package/dist/cdn/foxy-store-form.js +1 -1
  93. package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
  94. package/dist/cdn/foxy-subscription-card.js +1 -1
  95. package/dist/cdn/foxy-subscription-form.js +1 -1
  96. package/dist/cdn/foxy-subscription-settings-form.js +1 -1
  97. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  98. package/dist/cdn/foxy-table.js +1 -1
  99. package/dist/cdn/foxy-tax-card.js +1 -1
  100. package/dist/cdn/foxy-tax-form.js +1 -1
  101. package/dist/cdn/foxy-template-config-form.js +1 -1
  102. package/dist/cdn/foxy-template-form.js +1 -1
  103. package/dist/cdn/foxy-template-set-card.js +1 -1
  104. package/dist/cdn/foxy-template-set-form.js +1 -1
  105. package/dist/cdn/foxy-transaction-card.js +1 -1
  106. package/dist/cdn/foxy-transaction.js +1 -1
  107. package/dist/cdn/foxy-transactions-table.js +2 -2
  108. package/dist/cdn/foxy-update-payment-method-form.js +1 -1
  109. package/dist/cdn/foxy-user-card.js +1 -1
  110. package/dist/cdn/foxy-user-form.js +1 -1
  111. package/dist/cdn/foxy-user-invitation-card.js +1 -1
  112. package/dist/cdn/foxy-user-invitation-form.js +1 -1
  113. package/dist/cdn/foxy-users-table.js +1 -1
  114. package/dist/cdn/foxy-webhook-card.js +1 -1
  115. package/dist/cdn/foxy-webhook-form.js +1 -1
  116. package/dist/cdn/foxy-webhook-log-card.js +1 -1
  117. package/dist/cdn/foxy-webhook-status-card.js +1 -1
  118. package/dist/cdn/{shared-3558bfae.js → shared-070211c0.js} +1 -1
  119. package/dist/cdn/{shared-457789d7.js → shared-0e605594.js} +1 -1
  120. package/dist/cdn/{shared-206d3153.js → shared-0fa21237.js} +1 -1
  121. package/dist/cdn/{shared-cd3cfea5.js → shared-0fb90a71.js} +1 -1
  122. package/dist/cdn/{shared-a3234358.js → shared-107dc7d7.js} +4 -4
  123. package/dist/cdn/{shared-6540a584.js → shared-140c6b70.js} +1 -1
  124. package/dist/cdn/{shared-a715e3e5.js → shared-160072f2.js} +1 -1
  125. package/dist/cdn/{shared-7b5bdf0e.js → shared-1b4a3e56.js} +1 -1
  126. package/dist/cdn/{shared-0993c2f5.js → shared-1f95aa71.js} +1 -1
  127. package/dist/cdn/{shared-2ebcaabc.js → shared-28253ef3.js} +1 -1
  128. package/dist/cdn/{shared-5aacbf1f.js → shared-2b328555.js} +1 -1
  129. package/dist/cdn/{shared-8b0d25e5.js → shared-2c7e0ed1.js} +1 -1
  130. package/dist/cdn/shared-2d3bdc6b.js +1 -0
  131. package/dist/cdn/{shared-21a445d9.js → shared-34a7df04.js} +1 -1
  132. package/dist/cdn/{shared-aab4ed2b.js → shared-364b98a1.js} +1 -1
  133. package/dist/cdn/{shared-2c00e6b1.js → shared-3c64ecdd.js} +1 -1
  134. package/dist/cdn/{shared-12bab9de.js → shared-3f4549ba.js} +1 -1
  135. package/dist/cdn/{shared-ee689ddc.js → shared-4388f7ea.js} +1 -1
  136. package/dist/cdn/{shared-2f17b0fa.js → shared-46a20973.js} +1 -1
  137. package/dist/cdn/{shared-264bea6b.js → shared-48129732.js} +1 -1
  138. package/dist/cdn/{shared-0584a904.js → shared-50a355d6.js} +1 -1
  139. package/dist/cdn/{shared-9363a954.js → shared-5492f8eb.js} +1 -1
  140. package/dist/cdn/{shared-9006bac2.js → shared-59c064c2.js} +1 -1
  141. package/dist/cdn/{shared-e52d2fdd.js → shared-5a6e4a7b.js} +1 -1
  142. package/dist/cdn/{shared-3e3c5095.js → shared-5af5ab06.js} +1 -1
  143. package/dist/cdn/{shared-03b67a3d.js → shared-6313b188.js} +1 -1
  144. package/dist/cdn/{shared-6a65acb4.js → shared-69c7ad04.js} +1 -1
  145. package/dist/cdn/{shared-5700fbfd.js → shared-742899dc.js} +1 -1
  146. package/dist/cdn/{shared-bdbdf963.js → shared-7d1512e1.js} +1 -1
  147. package/dist/cdn/{shared-74a5f2a4.js → shared-7e18a7d9.js} +1 -1
  148. package/dist/cdn/{shared-3ffa26c1.js → shared-8530fbae.js} +1 -1
  149. package/dist/cdn/{shared-944fab16.js → shared-88a1cb23.js} +1 -1
  150. package/dist/cdn/{shared-90a8d5cf.js → shared-8a570d01.js} +1 -1
  151. package/dist/cdn/{shared-1b627cc5.js → shared-8a743005.js} +1 -1
  152. package/dist/cdn/{shared-76c608e2.js → shared-9884fb7d.js} +1 -1
  153. package/dist/cdn/{shared-ab0bbad5.js → shared-9bfb584b.js} +1 -1
  154. package/dist/cdn/{shared-1af6aa1d.js → shared-a0fbe3ef.js} +5 -5
  155. package/dist/cdn/{shared-998c0ace.js → shared-a16ef278.js} +1 -1
  156. package/dist/cdn/{shared-68d1075b.js → shared-a41ccdc7.js} +3 -3
  157. package/dist/cdn/{shared-aedaf182.js → shared-a4871405.js} +1 -1
  158. package/dist/cdn/{shared-ddda911c.js → shared-a89e8a07.js} +1 -1
  159. package/dist/cdn/{shared-f497cd69.js → shared-acee789f.js} +1 -1
  160. package/dist/cdn/{shared-80dafe85.js → shared-ad8d209a.js} +1 -1
  161. package/dist/cdn/{shared-2db6b377.js → shared-b15efc37.js} +1 -1
  162. package/dist/cdn/{shared-02acac7f.js → shared-c16f05d9.js} +1 -1
  163. package/dist/cdn/{shared-8dd6f543.js → shared-ce0df878.js} +1 -1
  164. package/dist/cdn/{shared-2557c0c4.js → shared-cf6122d9.js} +1 -1
  165. package/dist/cdn/{shared-10c8f21c.js → shared-d3aefd9b.js} +1 -1
  166. package/dist/cdn/{shared-be7af87f.js → shared-d3f37507.js} +1 -1
  167. package/dist/cdn/{shared-19b43f73.js → shared-d4928805.js} +1 -1
  168. package/dist/cdn/{shared-6ebe5ef5.js → shared-d8b0432a.js} +1 -1
  169. package/dist/cdn/{shared-b2bd7666.js → shared-db50afd9.js} +1 -1
  170. package/dist/cdn/shared-dc1fc2e6.js +1 -0
  171. package/dist/cdn/shared-dfe59df6.js +1 -0
  172. package/dist/cdn/{shared-cd0ae051.js → shared-e02936f0.js} +3 -3
  173. package/dist/cdn/{shared-6eebe353.js → shared-e126cf44.js} +2 -2
  174. package/dist/cdn/shared-e82550b1.js +40 -0
  175. package/dist/cdn/{shared-8259d01b.js → shared-ebfb86b5.js} +1 -1
  176. package/dist/cdn/{shared-1c252319.js → shared-f2be9863.js} +1 -1
  177. package/dist/cdn/{shared-109cfbba.js → shared-f2e8070b.js} +1 -1
  178. package/dist/cdn/{shared-13ba9f3a.js → shared-f3590d20.js} +2 -2
  179. package/dist/cdn/{shared-049295b7.js → shared-f7b4a4f6.js} +1 -1
  180. package/dist/cdn/{shared-3e0b2588.js → shared-fa482a7d.js} +1 -1
  181. package/dist/cdn/translations/admin-subscription-form/en.json +2 -2
  182. package/dist/cdn/translations/coupon-code-form/en.json +2 -2
  183. package/dist/cdn/translations/coupon-form/en.json +2 -2
  184. package/dist/cdn/translations/customer/en.json +5 -5
  185. package/dist/cdn/translations/customer-portal/de.json +6 -5
  186. package/dist/cdn/translations/customer-portal/en.json +6 -5
  187. package/dist/cdn/translations/customer-portal/es.json +6 -5
  188. package/dist/cdn/translations/customer-portal/fr.json +6 -5
  189. package/dist/cdn/translations/customer-portal/nl.json +6 -5
  190. package/dist/cdn/translations/customer-portal/pl.json +6 -5
  191. package/dist/cdn/translations/customer-portal/sv.json +6 -5
  192. package/dist/cdn/translations/customer-portal/zh-HK.json +6 -5
  193. package/dist/cdn/translations/subscription-card/en.json +2 -1
  194. package/dist/cdn/translations/subscription-form/en.json +2 -2
  195. package/dist/cdn/translations/subscriptions-table/en.json +2 -1
  196. package/dist/cdn/translations/transaction-card/en.json +2 -2
  197. package/dist/cdn/translations/transactions-table/en.json +3 -3
  198. package/dist/elements/internal/InternalEditableListControl/InternalEditableListControl.js +5 -4
  199. package/dist/elements/internal/InternalEditableListControl/InternalEditableListControl.js.map +1 -1
  200. package/dist/elements/internal/InternalSummaryControl/InternalSummaryControl.js +6 -6
  201. package/dist/elements/internal/InternalSummaryControl/InternalSummaryControl.js.map +1 -1
  202. package/dist/elements/public/Donation/Donation.d.ts +4 -1
  203. package/dist/elements/public/Donation/Donation.js +22 -1
  204. package/dist/elements/public/Donation/Donation.js.map +1 -1
  205. package/dist/elements/public/FilterAttributeForm/FilterAttributeForm.js +4 -15
  206. package/dist/elements/public/FilterAttributeForm/FilterAttributeForm.js.map +1 -1
  207. package/dist/elements/public/QueryBuilder/QueryBuilder.d.ts +2 -0
  208. package/dist/elements/public/QueryBuilder/QueryBuilder.js +5 -0
  209. package/dist/elements/public/QueryBuilder/QueryBuilder.js.map +1 -1
  210. package/dist/elements/public/QueryBuilder/components/AdvancedInput.js +2 -1
  211. package/dist/elements/public/QueryBuilder/components/AdvancedInput.js.map +1 -1
  212. package/dist/elements/public/QueryBuilder/components/SimpleInput.js +9 -2
  213. package/dist/elements/public/QueryBuilder/components/SimpleInput.js.map +1 -1
  214. package/dist/elements/public/QueryBuilder/utils/parse.js +19 -16
  215. package/dist/elements/public/QueryBuilder/utils/parse.js.map +1 -1
  216. package/dist/elements/public/QueryBuilder/utils/stringify.js +22 -45
  217. package/dist/elements/public/QueryBuilder/utils/stringify.js.map +1 -1
  218. package/dist/elements/public/QueryBuilder/utils/zoom.d.ts +3 -0
  219. package/dist/elements/public/QueryBuilder/utils/zoom.js +29 -0
  220. package/dist/elements/public/QueryBuilder/utils/zoom.js.map +1 -0
  221. package/dist/elements/public/SubscriptionCard/SubscriptionCard.js +1 -1
  222. package/dist/elements/public/SubscriptionCard/SubscriptionCard.js.map +1 -1
  223. package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js +1 -1
  224. package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js.map +1 -1
  225. package/dist/elements/public/TransactionCard/TransactionCard.js +1 -1
  226. package/dist/elements/public/TransactionCard/TransactionCard.js.map +1 -1
  227. package/dist/elements/public/TransactionsTable/TransactionsTable.js +1 -1
  228. package/dist/elements/public/TransactionsTable/TransactionsTable.js.map +1 -1
  229. package/dist/mixins/themeable.js +0 -6
  230. package/dist/mixins/themeable.js.map +1 -1
  231. package/package.json +1 -1
  232. package/dist/cdn/shared-2f1ced90.js +0 -1
  233. package/dist/cdn/shared-88a59a2e.js +0 -1
  234. package/dist/cdn/shared-dd7e85be.js +0 -1
  235. package/dist/cdn/shared-f4be6924.js +0 -40
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedInput.js","sourceRoot":"","sources":["../../../../../src/elements/public/QueryBuilder/components/AdvancedInput.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,uCAAoC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAWhC,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,IAAI,CAAA;;;;wBAIW,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;kBAC5B,QAAQ,CAAC;QACf,mDAAmD,EAAE,IAAI;QACzD,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ;QACjD,eAAe,EAAE,MAAM,CAAC,QAAQ;QAChC,gBAAgB,EAAE,MAAM,CAAC,QAAQ;QACjC,mCAAmC,EAAE,IAAI;QACzC,oBAAoB,EAAE,IAAI;KAC3B,CAAC;mBACO,MAAM,CAAC,KAAK;sBACT,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;mBACrC,CAAC,GAAU,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,GAAG,CAAC,aAAiC,CAAC;QACpD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;;;;;gBAKK,QAAQ,CAAC;QACf,0EAA0E,EAAE,IAAI;QAChF,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;QAC9B,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK;QACxB,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ;QACjD,eAAe,EAAE,MAAM,CAAC,QAAQ;QAChC,gBAAgB,EAAE,MAAM,CAAC,QAAQ;KAClC,CAAC;;UAEA,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;;QAGxB,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QAClC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,CAAA;;;;WAIH;;GAER,CAAC;AACJ,CAAC","sourcesContent":["import type { TemplateResult } from 'lit-html';\nimport type { I18n } from '../../I18n/I18n';\n\nimport { classMap } from '../../../../utils/class-map';\nimport { html } from 'lit-html';\n\ntype Params = {\n disabled: boolean;\n readonly: boolean;\n label: string;\n value: string;\n t: I18n['t'];\n onChange: (newValue: string) => void;\n};\n\nexport function AdvancedInput(params: Params): TemplateResult {\n return html`\n <label class=\"relative flex items-center cursor-text group text-tertiary\">\n <div class=\"relative flex-1 min-w-0 overflow-hidden\">\n <input\n placeholder=${params.t(params.label)}\n class=${classMap({\n 'bg-base relative flex h-m px-s font-medium w-full': true,\n 'text-body': !params.disabled && !params.readonly,\n 'text-disabled': params.disabled,\n 'text-secondary': params.readonly,\n 'flex max-w-full whitespace-nowrap': true, // ugh safari\n 'focus-outline-none': true,\n })}\n .value=${params.value}\n ?disabled=${params.disabled || params.readonly}\n @input=${(evt: Event) => {\n const input = evt.currentTarget as HTMLInputElement;\n params.onChange(input.value);\n }}\n />\n </div>\n\n <span\n class=${classMap({\n 'font-tnum text-xs font-medium border border-current mr-s px-xs rounded-s': true,\n 'inline-block': !!params.value,\n 'sr-only': !params.value,\n 'text-body': !params.disabled && !params.readonly,\n 'text-disabled': params.disabled,\n 'text-secondary': params.readonly,\n })}\n >\n ${params.t(params.label)}\n </span>\n\n ${params.disabled || params.readonly\n ? ''\n : html`\n <div\n class=\"absolute inset-0 transition-colors bg-transparent group-hover-bg-contrast-5 pointer-events-none\"\n ></div>\n `}\n </label>\n `;\n}\n"]}
1
+ {"version":3,"file":"AdvancedInput.js","sourceRoot":"","sources":["../../../../../src/elements/public/QueryBuilder/components/AdvancedInput.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,uCAAoC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAWhC,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,IAAI,CAAA;;;;wBAIW,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;kBAC5B,QAAQ,CAAC;QACf,mDAAmD,EAAE,IAAI;QACzD,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ;QACjD,eAAe,EAAE,MAAM,CAAC,QAAQ;QAChC,gBAAgB,EAAE,MAAM,CAAC,QAAQ;QACjC,mCAAmC,EAAE,IAAI;QACzC,oBAAoB,EAAE,IAAI;KAC3B,CAAC;mBACO,MAAM,CAAC,KAAK;sBACT,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;qBACnC,CAAC,GAAkB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE;mBACjE,CAAC,GAAU,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,GAAG,CAAC,aAAiC,CAAC;QACpD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;;;;;gBAKK,QAAQ,CAAC;QACf,0EAA0E,EAAE,IAAI;QAChF,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;QAC9B,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK;QACxB,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ;QACjD,eAAe,EAAE,MAAM,CAAC,QAAQ;QAChC,gBAAgB,EAAE,MAAM,CAAC,QAAQ;KAClC,CAAC;;UAEA,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;;QAGxB,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QAClC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,CAAA;;;;WAIH;;GAER,CAAC;AACJ,CAAC","sourcesContent":["import type { TemplateResult } from 'lit-html';\nimport type { I18n } from '../../I18n/I18n';\n\nimport { classMap } from '../../../../utils/class-map';\nimport { html } from 'lit-html';\n\ntype Params = {\n disabled: boolean;\n readonly: boolean;\n label: string;\n value: string;\n t: I18n['t'];\n onChange: (newValue: string) => void;\n};\n\nexport function AdvancedInput(params: Params): TemplateResult {\n return html`\n <label class=\"relative flex items-center cursor-text group text-tertiary\">\n <div class=\"relative flex-1 min-w-0 overflow-hidden\">\n <input\n placeholder=${params.t(params.label)}\n class=${classMap({\n 'bg-base relative flex h-m px-s font-medium w-full': true,\n 'text-body': !params.disabled && !params.readonly,\n 'text-disabled': params.disabled,\n 'text-secondary': params.readonly,\n 'flex max-w-full whitespace-nowrap': true, // ugh safari\n 'focus-outline-none': true,\n })}\n .value=${params.value}\n ?disabled=${params.disabled || params.readonly}\n @keydown=${(evt: KeyboardEvent) => evt.key === '|' && evt.preventDefault()}\n @input=${(evt: Event) => {\n const input = evt.currentTarget as HTMLInputElement;\n params.onChange(input.value.replace(/\\|/gi, ''));\n }}\n />\n </div>\n\n <span\n class=${classMap({\n 'font-tnum text-xs font-medium border border-current mr-s px-xs rounded-s': true,\n 'inline-block': !!params.value,\n 'sr-only': !params.value,\n 'text-body': !params.disabled && !params.readonly,\n 'text-disabled': params.disabled,\n 'text-secondary': params.readonly,\n })}\n >\n ${params.t(params.label)}\n </span>\n\n ${params.disabled || params.readonly\n ? ''\n : html`\n <div\n class=\"absolute inset-0 transition-colors bg-transparent group-hover-bg-contrast-5 pointer-events-none\"\n ></div>\n `}\n </label>\n `;\n}\n"]}
@@ -4,7 +4,10 @@ import { html } from 'lit-html';
4
4
  export function SimpleInput(params) {
5
5
  const { disabled, readonly, layout, label, value, type, min, t, onChange } = params;
6
6
  return html `
7
- <label class="flex-shrink-0 flex items-center gap-s relative">
7
+ <label
8
+ class="flex-shrink-0 flex items-center gap-s relative"
9
+ style="min-width: ${type === 'number' ? '4' : type === 'date' ? '6' : '8'}rem; max-width: 50%"
10
+ >
8
11
  <foxy-i18n infer="" class=${classMap({ 'sr-only': layout !== 'fixed' })} key=${label}>
9
12
  </foxy-i18n>
10
13
 
@@ -34,7 +37,11 @@ export function SimpleInput(params) {
34
37
  type=${ifDefined(type)}
35
38
  min=${ifDefined(min)}
36
39
  .value=${value}
37
- @input=${(evt) => onChange(evt.target.value)}
40
+ @keydown=${(evt) => evt.key === '|' && evt.preventDefault()}
41
+ @input=${(evt) => {
42
+ const input = evt.currentTarget;
43
+ onChange(input.value.replace(/\|/gi, ''));
44
+ }}
38
45
  />
39
46
  `}
40
47
  </label>
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleInput.js","sourceRoot":"","sources":["../../../../../src/elements/public/QueryBuilder/components/SimpleInput.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,uCAAoC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAchC,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEpF,OAAO,IAAI,CAAA;;kCAEqB,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC,QAAQ,KAAK;;;;gBAI1E,QAAQ,CAAC;QACf,sCAAsC,EAAE,IAAI;QAC5C,yCAAyC,EAAE,CAAC,QAAQ;QACpD,kBAAkB,EAAE,QAAQ;KAC7B,CAAC;kBACQ,MAAM,KAAK,WAAW,IAAI,CAAC,QAAQ;WAC1C,KAAK,IAAI,IAAI,CAAA,oDAAoD;;;QAGpE,QAAQ;QACR,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,CAAA;;4BAEc,CAAC,CAAC,aAAa,CAAC;sBACtB,QAAQ,CAAC;YACf,uEAAuE,EAAE,IAAI;YAC7E,2BAA2B,EAAE,IAAI;YACjC,YAAY,EAAE,QAAQ;YACtB,kBAAkB,EAAE,MAAM,KAAK,WAAW;YAC1C,uDAAuD,EAAE,IAAI;SAC9D,CAAC;0BACU,QAAQ;qBACb,SAAS,CAAC,IAAI,CAAC;oBAChB,SAAS,CAAC,GAAG,CAAC;uBACX,KAAK;uBACL,CAAC,GAAU,EAAE,EAAE,CAAC,QAAQ,CAAE,GAAG,CAAC,MAA2B,CAAC,KAAK,CAAC;;WAE5E;;GAER,CAAC;AACJ,CAAC","sourcesContent":["import type { TemplateResult } from 'lit-html';\nimport type { I18n } from '../../I18n/I18n';\n\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { classMap } from '../../../../utils/class-map';\nimport { html } from 'lit-html';\n\ntype Params = {\n disabled: boolean;\n readonly: boolean;\n layout?: 'auto-grow' | 'fixed';\n value: string;\n label: string;\n type?: string;\n min?: string | number;\n t: I18n['t'];\n onChange: (newValue: string) => void;\n};\n\nexport function SimpleInput(params: Params): TemplateResult {\n const { disabled, readonly, layout, label, value, type, min, t, onChange } = params;\n\n return html`\n <label class=\"flex-shrink-0 flex items-center gap-s relative\">\n <foxy-i18n infer=\"\" class=${classMap({ 'sr-only': layout !== 'fixed' })} key=${label}>\n </foxy-i18n>\n\n <span\n class=${classMap({\n 'relative block whitespace-pre text-m': true,\n 'px-s py-xs -my-xs font-medium opacity-0': !readonly,\n 'text-contrast-80': readonly,\n })}\n ?hidden=${layout !== 'auto-grow' && !readonly}\n >${value || html`<foxy-i18n infer=\"\" key=\"value_empty\"></foxy-i18n>`}</span\n >\n\n ${readonly\n ? ''\n : html`\n <input\n placeholder=${t('value_empty')}\n class=${classMap({\n 'appearance-none transition-all text-body text-m font-medium rounded-s': true,\n 'bg-base px-s py-xs -my-xs': true,\n 'opacity-50': disabled,\n 'absolute inset-0': layout === 'auto-grow',\n 'focus-outline-none focus-ring-2 focus-ring-primary-50': true,\n })}\n ?disabled=${disabled}\n type=${ifDefined(type)}\n min=${ifDefined(min)}\n .value=${value}\n @input=${(evt: Event) => onChange((evt.target as HTMLInputElement).value)}\n />\n `}\n </label>\n `;\n}\n"]}
1
+ {"version":3,"file":"SimpleInput.js","sourceRoot":"","sources":["../../../../../src/elements/public/QueryBuilder/components/SimpleInput.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,uCAAoC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAchC,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEpF,OAAO,IAAI,CAAA;;;0BAGa,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;;kCAE7C,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC,QAAQ,KAAK;;;;gBAI1E,QAAQ,CAAC;QACf,sCAAsC,EAAE,IAAI;QAC5C,yCAAyC,EAAE,CAAC,QAAQ;QACpD,kBAAkB,EAAE,QAAQ;KAC7B,CAAC;kBACQ,MAAM,KAAK,WAAW,IAAI,CAAC,QAAQ;WAC1C,KAAK,IAAI,IAAI,CAAA,oDAAoD;;;QAGpE,QAAQ;QACR,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI,CAAA;;4BAEc,CAAC,CAAC,aAAa,CAAC;sBACtB,QAAQ,CAAC;YACf,uEAAuE,EAAE,IAAI;YAC7E,2BAA2B,EAAE,IAAI;YACjC,YAAY,EAAE,QAAQ;YACtB,kBAAkB,EAAE,MAAM,KAAK,WAAW;YAC1C,uDAAuD,EAAE,IAAI;SAC9D,CAAC;0BACU,QAAQ;qBACb,SAAS,CAAC,IAAI,CAAC;oBAChB,SAAS,CAAC,GAAG,CAAC;uBACX,KAAK;yBACH,CAAC,GAAkB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE;uBACjE,CAAC,GAAU,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,GAAG,CAAC,aAAiC,CAAC;YACpD,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;;WAEJ;;GAER,CAAC;AACJ,CAAC","sourcesContent":["import type { TemplateResult } from 'lit-html';\nimport type { I18n } from '../../I18n/I18n';\n\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { classMap } from '../../../../utils/class-map';\nimport { html } from 'lit-html';\n\ntype Params = {\n disabled: boolean;\n readonly: boolean;\n layout?: 'auto-grow' | 'fixed';\n value: string;\n label: string;\n type?: string;\n min?: string | number;\n t: I18n['t'];\n onChange: (newValue: string) => void;\n};\n\nexport function SimpleInput(params: Params): TemplateResult {\n const { disabled, readonly, layout, label, value, type, min, t, onChange } = params;\n\n return html`\n <label\n class=\"flex-shrink-0 flex items-center gap-s relative\"\n style=\"min-width: ${type === 'number' ? '4' : type === 'date' ? '6' : '8'}rem; max-width: 50%\"\n >\n <foxy-i18n infer=\"\" class=${classMap({ 'sr-only': layout !== 'fixed' })} key=${label}>\n </foxy-i18n>\n\n <span\n class=${classMap({\n 'relative block whitespace-pre text-m': true,\n 'px-s py-xs -my-xs font-medium opacity-0': !readonly,\n 'text-contrast-80': readonly,\n })}\n ?hidden=${layout !== 'auto-grow' && !readonly}\n >${value || html`<foxy-i18n infer=\"\" key=\"value_empty\"></foxy-i18n>`}</span\n >\n\n ${readonly\n ? ''\n : html`\n <input\n placeholder=${t('value_empty')}\n class=${classMap({\n 'appearance-none transition-all text-body text-m font-medium rounded-s': true,\n 'bg-base px-s py-xs -my-xs': true,\n 'opacity-50': disabled,\n 'absolute inset-0': layout === 'auto-grow',\n 'focus-outline-none focus-ring-2 focus-ring-primary-50': true,\n })}\n ?disabled=${disabled}\n type=${ifDefined(type)}\n min=${ifDefined(min)}\n .value=${value}\n @keydown=${(evt: KeyboardEvent) => evt.key === '|' && evt.preventDefault()}\n @input=${(evt: Event) => {\n const input = evt.currentTarget as HTMLInputElement;\n onChange(input.value.replace(/\\|/gi, ''));\n }}\n />\n `}\n </label>\n `;\n}\n"]}
@@ -1,14 +1,11 @@
1
1
  import { Operator } from "../types.js";
2
- function parseGroup(search) {
2
+ function parseGroup(key, value) {
3
3
  var _a;
4
- const separatorIndex = search.indexOf('=');
5
- const fullPath = decodeURIComponent(search.substring(0, separatorIndex));
6
- const value = decodeURIComponent(search.substring(separatorIndex + 1));
7
4
  const operators = Object.values(Operator);
8
- const operator = (_a = operators.find(operator => fullPath.endsWith(`:${operator}`))) !== null && _a !== void 0 ? _a : null;
9
- let path = fullPath.substring(0, operator ? fullPath.lastIndexOf(':') : undefined);
5
+ const operator = (_a = operators.find(operator => key.endsWith(`:${operator}`))) !== null && _a !== void 0 ? _a : null;
6
+ let path = key.substring(0, operator ? key.lastIndexOf(':') : undefined);
10
7
  let name = undefined;
11
- const nameStart = fullPath.lastIndexOf('[');
8
+ const nameStart = key.lastIndexOf('[');
12
9
  if (path.endsWith(']') && nameStart !== -1) {
13
10
  name = path.substring(nameStart + 1, path.length - 1);
14
11
  path = path.substring(0, nameStart);
@@ -18,15 +15,21 @@ function parseGroup(search) {
18
15
  return { name, path, value, operator };
19
16
  }
20
17
  function parse(search) {
21
- return search
22
- .split('&')
23
- .filter(v => !!v)
24
- .map(entry => {
25
- const [name, value] = entry.split('=').map(decodeURIComponent);
26
- if (!(value === null || value === void 0 ? void 0 : value.includes('|')))
27
- return parseGroup(entry);
28
- return `${encodeURIComponent(name)}=${value}`.split('|').map(v => parseGroup(v));
29
- });
18
+ const params = new URLSearchParams(search);
19
+ const result = [];
20
+ for (const [key, value] of params.entries()) {
21
+ if (value.includes('|')) {
22
+ result.push(value.split('|').map((part, index) => {
23
+ if (index === 0)
24
+ return parseGroup(key, part);
25
+ return parseGroup(...part.split('='));
26
+ }));
27
+ }
28
+ else {
29
+ result.push(parseGroup(key, value));
30
+ }
31
+ }
32
+ return result;
30
33
  }
31
34
  export { parse };
32
35
  //# sourceMappingURL=parse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../../src/elements/public/QueryBuilder/utils/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAQ,oBAAiB;AAE1C,SAAS,UAAU,CAAC,MAAc;;IAChC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAe,CAAC;IACxD,MAAM,QAAQ,SAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,mCAAI,IAAI,CAAC;IAEvF,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnF,IAAI,IAAI,GAAuB,SAAS,CAAC;IAEzC,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;QAC1C,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACvE;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,KAAK,CAAC,MAAc;IAC3B,OAAO,MAAM;SACV,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAChB,GAAG,CAAC,KAAK,CAAC,EAAE;QACX,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC/D,IAAI,EAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,CAAC,GAAG,EAAC;YAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QACpD,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACP,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC","sourcesContent":["import { Operator, Rule } from '../types';\n\nfunction parseGroup(search: string): Rule {\n const separatorIndex = search.indexOf('=');\n const fullPath = decodeURIComponent(search.substring(0, separatorIndex));\n const value = decodeURIComponent(search.substring(separatorIndex + 1));\n\n const operators = Object.values(Operator) as Operator[];\n const operator = operators.find(operator => fullPath.endsWith(`:${operator}`)) ?? null;\n\n let path = fullPath.substring(0, operator ? fullPath.lastIndexOf(':') : undefined);\n let name: string | undefined = undefined;\n\n const nameStart = fullPath.lastIndexOf('[');\n\n if (path.endsWith(']') && nameStart !== -1) {\n name = path.substring(nameStart + 1, path.length - 1);\n path = path.substring(0, nameStart);\n if (path.endsWith(':name')) path = path.substring(0, path.length - 5);\n }\n\n return { name, path, value, operator };\n}\n\nfunction parse(search: string): (Rule | Rule[])[] {\n return search\n .split('&')\n .filter(v => !!v)\n .map(entry => {\n const [name, value] = entry.split('=').map(decodeURIComponent);\n if (!value?.includes('|')) return parseGroup(entry);\n return `${encodeURIComponent(name)}=${value}`.split('|').map(v => parseGroup(v));\n });\n}\n\nexport { parse };\n"]}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../../src/elements/public/QueryBuilder/utils/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAQ,oBAAiB;AAE1C,SAAS,UAAU,CAAC,GAAW,EAAE,KAAa;;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAe,CAAC;IACxD,MAAM,QAAQ,SAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,mCAAI,IAAI,CAAC;IAElF,IAAI,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzE,IAAI,IAAI,GAAuB,SAAS,CAAC;IAEzC,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEvC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;QAC1C,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACvE;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,KAAK,CAAC,MAAc;IAC3B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE;QAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACvB,MAAM,CAAC,IAAI,CACT,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACnC,IAAI,KAAK,KAAK,CAAC;oBAAE,OAAO,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC9C,OAAO,UAAU,CAAC,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC,CAAC;YAC9D,CAAC,CAAC,CACH,CAAC;SACH;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;SACrC;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC","sourcesContent":["import { Operator, Rule } from '../types';\n\nfunction parseGroup(key: string, value: string): Rule {\n const operators = Object.values(Operator) as Operator[];\n const operator = operators.find(operator => key.endsWith(`:${operator}`)) ?? null;\n\n let path = key.substring(0, operator ? key.lastIndexOf(':') : undefined);\n let name: string | undefined = undefined;\n\n const nameStart = key.lastIndexOf('[');\n\n if (path.endsWith(']') && nameStart !== -1) {\n name = path.substring(nameStart + 1, path.length - 1);\n path = path.substring(0, nameStart);\n if (path.endsWith(':name')) path = path.substring(0, path.length - 5);\n }\n\n return { name, path, value, operator };\n}\n\nfunction parse(search: string): (Rule | Rule[])[] {\n const params = new URLSearchParams(search);\n const result: (Rule | Rule[])[] = [];\n\n for (const [key, value] of params.entries()) {\n if (value.includes('|')) {\n result.push(\n value.split('|').map((part, index) => {\n if (index === 0) return parseGroup(key, part);\n return parseGroup(...(part.split('=') as [string, string]));\n })\n );\n } else {\n result.push(parseGroup(key, value));\n }\n }\n\n return result;\n}\n\nexport { parse };\n"]}
@@ -1,56 +1,33 @@
1
- function stringifyGroup(parsedValue) {
2
- let result = parsedValue.path;
1
+ import { zoom } from "./zoom.js";
2
+ function stringifyRule(parsedValue) {
3
+ let key = parsedValue.path;
3
4
  if (parsedValue.name)
4
- result += `:name[${parsedValue.name}]`;
5
+ key += `:name[${parsedValue.name}]`;
5
6
  if (parsedValue.operator)
6
- result += `:${parsedValue.operator}`;
7
- result = `${encodeURIComponent(result)}=${encodeURIComponent(parsedValue.value)}`;
8
- return result === '=' ? '' : result;
7
+ key += `:${parsedValue.operator}`;
8
+ return [key, parsedValue.value];
9
9
  }
10
10
  function stringify(newValue, disableZoom = false) {
11
- const toQuery = (rules, rule) => {
12
- if (Array.isArray(rule)) {
13
- let key = rule[0].path;
14
- if (rule[0].name)
15
- key += `:name[${rule[0].name}]`;
16
- if (rule[0].operator)
17
- key += `:${rule[0].operator}`;
18
- const alternatives = [
19
- rule[0].value,
20
- ...rule.slice(1).map(or => decodeURIComponent(stringifyGroup(or))),
21
- ];
22
- rules.push(`${encodeURIComponent(key)}=${encodeURIComponent(alternatives.join('|'))}`);
11
+ const query = new URLSearchParams();
12
+ for (const ruleOrGroup of newValue) {
13
+ if (Array.isArray(ruleOrGroup)) {
14
+ const [firstRule, ...otherRules] = ruleOrGroup.map(stringifyRule);
15
+ if (firstRule && firstRule[0]) {
16
+ const value = [firstRule[1], ...otherRules.map(rule => rule.join('='))];
17
+ query.append(firstRule[0], value.join('|'));
18
+ }
23
19
  }
24
- else if (rule.path !== 'zoom') {
25
- rules.push(stringifyGroup(rule));
20
+ else {
21
+ const [key, value] = stringifyRule(ruleOrGroup);
22
+ if (key)
23
+ query.append(key, value);
26
24
  }
27
- return rules;
28
- };
29
- const query = newValue.reduce(toQuery, []);
25
+ }
30
26
  if (!disableZoom) {
31
- const zoom = getZoomedRels(newValue).join(',');
32
- if (zoom)
33
- query.push(`zoom=${encodeURIComponent(zoom)}`);
27
+ const zoomValue = zoom(newValue);
28
+ zoomValue ? query.set('zoom', zoomValue) : query.delete('zoom');
34
29
  }
35
- return query.join('&');
36
- }
37
- function getZoomedRels(value) {
38
- return value
39
- .map(rule => {
40
- if (Array.isArray(rule))
41
- return getZoomedRels(rule);
42
- if (rule.name)
43
- return [rule.path];
44
- const pathMembers = rule.path.split(':');
45
- return pathMembers.slice(0, pathMembers.length - 1);
46
- })
47
- .flat()
48
- .sort((rel1, rel2) => rel2.length - rel1.length)
49
- .filter((rel, index, rels) => {
50
- return rels.every((_rel, _index) => {
51
- return (_index >= index || _rel !== rel) && !_rel.startsWith(`${rel}:`);
52
- });
53
- });
30
+ return query.toString();
54
31
  }
55
32
  export { stringify };
56
33
  //# sourceMappingURL=stringify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../../../../src/elements/public/QueryBuilder/utils/stringify.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Rule } from '../types';\n\nfunction stringifyGroup(parsedValue: Rule): string {\n let result = parsedValue.path;\n if (parsedValue.name) result += `:name[${parsedValue.name}]`;\n if (parsedValue.operator) result += `:${parsedValue.operator}`;\n result = `${encodeURIComponent(result)}=${encodeURIComponent(parsedValue.value)}`;\n return result === '=' ? '' : result;\n}\n\nfunction stringify(newValue: (Rule | Rule[])[], disableZoom = false): string {\n const toQuery = (rules: string[], rule: Rule | Rule[]) => {\n if (Array.isArray(rule)) {\n let key = rule[0].path;\n if (rule[0].name) key += `:name[${rule[0].name}]`;\n if (rule[0].operator) key += `:${rule[0].operator}`;\n\n const alternatives = [\n rule[0].value,\n ...rule.slice(1).map(or => decodeURIComponent(stringifyGroup(or))),\n ];\n\n rules.push(`${encodeURIComponent(key)}=${encodeURIComponent(alternatives.join('|'))}`);\n } else if (rule.path !== 'zoom') {\n rules.push(stringifyGroup(rule));\n }\n\n return rules;\n };\n\n const query = newValue.reduce(toQuery, [] as string[]);\n\n if (!disableZoom) {\n const zoom = getZoomedRels(newValue).join(',');\n if (zoom) query.push(`zoom=${encodeURIComponent(zoom)}`);\n }\n\n return query.join('&');\n}\n\nfunction getZoomedRels(value: (Rule | Rule[])[]): string[] {\n return value\n .map(rule => {\n if (Array.isArray(rule)) return getZoomedRels(rule);\n if (rule.name) return [rule.path];\n\n const pathMembers = rule.path.split(':');\n return pathMembers.slice(0, pathMembers.length - 1);\n })\n .flat()\n .sort((rel1, rel2) => rel2.length - rel1.length)\n .filter((rel, index, rels) => {\n return rels.every((_rel, _index) => {\n return (_index >= index || _rel !== rel) && !_rel.startsWith(`${rel}:`);\n });\n });\n}\n\nexport { stringify };\n"]}
1
+ {"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../../../../src/elements/public/QueryBuilder/utils/stringify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,kBAAe;AAE9B,SAAS,aAAa,CAAC,WAAiB;IACtC,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC;IAC3B,IAAI,WAAW,CAAC,IAAI;QAAE,GAAG,IAAI,SAAS,WAAW,CAAC,IAAI,GAAG,CAAC;IAC1D,IAAI,WAAW,CAAC,QAAQ;QAAE,GAAG,IAAI,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC5D,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,QAA2B,EAAE,WAAW,GAAG,KAAK;IACjE,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IAEpC,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE;QAClC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC9B,MAAM,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAClE,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;gBAC7B,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACxE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aAC7C;SACF;aAAM;YACL,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,GAAG;gBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACnC;KACF;IAED,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACjE;IAED,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type { Rule } from '../types';\nimport { zoom } from './zoom';\n\nfunction stringifyRule(parsedValue: Rule): [string, string] {\n let key = parsedValue.path;\n if (parsedValue.name) key += `:name[${parsedValue.name}]`;\n if (parsedValue.operator) key += `:${parsedValue.operator}`;\n return [key, parsedValue.value];\n}\n\nfunction stringify(newValue: (Rule | Rule[])[], disableZoom = false): string {\n const query = new URLSearchParams();\n\n for (const ruleOrGroup of newValue) {\n if (Array.isArray(ruleOrGroup)) {\n const [firstRule, ...otherRules] = ruleOrGroup.map(stringifyRule);\n if (firstRule && firstRule[0]) {\n const value = [firstRule[1], ...otherRules.map(rule => rule.join('='))];\n query.append(firstRule[0], value.join('|'));\n }\n } else {\n const [key, value] = stringifyRule(ruleOrGroup);\n if (key) query.append(key, value);\n }\n }\n\n if (!disableZoom) {\n const zoomValue = zoom(newValue);\n zoomValue ? query.set('zoom', zoomValue) : query.delete('zoom');\n }\n\n return query.toString();\n}\n\nexport { stringify };\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Rule } from '../types';
2
+ declare function zoom(parsedValue: (Rule | Rule[])[]): string;
3
+ export { zoom };
@@ -0,0 +1,29 @@
1
+ function zoom(parsedValue) {
2
+ const zooms = new Set();
3
+ const maybeAdd = (rule) => {
4
+ let rel;
5
+ if (typeof rule.name === 'string') {
6
+ rel = rule.path;
7
+ }
8
+ else {
9
+ const separatorIndex = rule.path.lastIndexOf(':');
10
+ if (separatorIndex === -1)
11
+ return;
12
+ rel = rule.path.substring(0, separatorIndex);
13
+ }
14
+ if (rel.length > 0)
15
+ zooms.add(rel);
16
+ };
17
+ for (const ruleOrGroup of parsedValue) {
18
+ if (Array.isArray(ruleOrGroup)) {
19
+ for (const rule of ruleOrGroup)
20
+ maybeAdd(rule);
21
+ }
22
+ else {
23
+ maybeAdd(ruleOrGroup);
24
+ }
25
+ }
26
+ return Array.from(zooms).join();
27
+ }
28
+ export { zoom };
29
+ //# sourceMappingURL=zoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../../../src/elements/public/QueryBuilder/utils/zoom.ts"],"names":[],"mappings":"AAEA,SAAS,IAAI,CAAC,WAA8B;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,EAAE;QAC9B,IAAI,GAAW,CAAC;QAEhB,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;SACjB;aAAM;YACL,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,cAAc,KAAK,CAAC,CAAC;gBAAE,OAAO;YAClC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;SAC9C;QAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,KAAK,MAAM,WAAW,IAAI,WAAW,EAAE;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC9B,KAAK,MAAM,IAAI,IAAI,WAAW;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;SAChD;aAAM;YACL,QAAQ,CAAC,WAAW,CAAC,CAAC;SACvB;KACF;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,CAAC","sourcesContent":["import type { Rule } from '../types';\n\nfunction zoom(parsedValue: (Rule | Rule[])[]): string {\n const zooms = new Set<string>();\n const maybeAdd = (rule: Rule) => {\n let rel: string;\n\n if (typeof rule.name === 'string') {\n rel = rule.path;\n } else {\n const separatorIndex = rule.path.lastIndexOf(':');\n if (separatorIndex === -1) return;\n rel = rule.path.substring(0, separatorIndex);\n }\n\n if (rel.length > 0) zooms.add(rel);\n };\n\n for (const ruleOrGroup of parsedValue) {\n if (Array.isArray(ruleOrGroup)) {\n for (const rule of ruleOrGroup) maybeAdd(rule);\n } else {\n maybeAdd(ruleOrGroup);\n }\n }\n\n return Array.from(zooms).join();\n}\n\nexport { zoom };\n"]}
@@ -141,8 +141,8 @@ export class SubscriptionCard extends Base {
141
141
  return {};
142
142
  const items = this.data._embedded['fx:transaction_template']._embedded['fx:items'];
143
143
  return {
144
- most_expensive_item: [...items].sort((a, b) => a.price - b.price)[0],
145
144
  count_minus_one: items.length - 1,
145
+ first_item: items[0],
146
146
  count: items.length,
147
147
  };
148
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionCard.js","sourceRoot":"","sources":["../../../../src/elements/public/SubscriptionCard/SubscriptionCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { Data, Settings } from './types';\n\nimport { TemplateResult, html } from 'lit-html';\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 { parseFrequency } from '../../../utils/parse-frequency';\n\nimport {\n getExtendedSubscriptionStatus,\n getSubscriptionStatus,\n} from '../../../utils/get-subscription-status';\n\nconst NS = 'subscription-card';\nconst Base = ConfigurableMixin(\n ResponsiveMixin(ThemeableMixin(TranslatableMixin(NucleonElement, NS)))\n);\n\n/**\n * Card element displaying subscription summary.\n *\n * @element foxy-subscription-card\n * @since 1.4.0\n */\nexport class SubscriptionCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n settings: { type: Object },\n };\n }\n\n settings: Settings | null = null;\n\n render(): TemplateResult {\n const status = this.settings\n ? getExtendedSubscriptionStatus(this.data, this.settings)\n : getSubscriptionStatus(this.data);\n\n const isRed = status === 'failed';\n const isGreen = status?.startsWith('next_payment') || !!status?.startsWith('will_end');\n const isNormal = !isGreen && !isRed;\n\n return html`\n <div class=\"relative text-left\">\n <div\n class=${classMap({\n 'flex items-start sm-items-center space-x-m transition duration-150 ease-in-out': true,\n 'opacity-0': !this.in({ idle: 'snapshot' }),\n })}\n >\n <div\n class=${classMap({\n 'min-w-0 flex-shrink-0 rounded-full relative flex p-s': true,\n 'text-success bg-success-10': isGreen,\n 'text-body bg-contrast-5': isNormal,\n 'text-error bg-error-10': isRed,\n })}\n >\n <iron-icon\n class=\"m-auto\"\n icon=${isRed ? 'error-outline' : isGreen ? 'done' : 'done-all'}\n >\n </iron-icon>\n </div>\n\n <div class=\"flex-1 min-w-0 leading-xs flex flex-col sm-flex-row sm-items-center\">\n <div class=\"order-1 sm-order-0\">\n <div class=\"text-body font-medium origin-top-left text-m\">\n <foxy-i18n\n data-testid=\"summary\"\n options=${JSON.stringify(this.__getSummaryOptions())}\n lang=${this.lang}\n key=\"transaction_summary\"\n ns=${this.ns}\n >\n </foxy-i18n>\n &#8203;\n </div>\n\n <div\n class=${classMap({\n 'text-m': true,\n 'text-tertiary': isNormal,\n 'text-success': isGreen,\n 'text-error': isRed,\n })}\n >\n <foxy-i18n\n data-testid=\"status\"\n lang=${this.lang}\n key=\"status_${status}\"\n ns=${this.ns}\n .options=${this.data}\n >\n </foxy-i18n>\n &#8203;\n </div>\n </div>\n\n <div\n class=\"flex-1 leading-xs mb-xs sm-mb-0 sm-text-right order-0 sm-order-1\"\n >\n <foxy-i18n\n data-testid=\"price\"\n options=${JSON.stringify(this.__getPriceOptions())}\n class=\"text-xxs sm-text-l font-tnum tracking-wide sm-tracking-normal uppercase sm-normal-case font-medium text-secondary sm-text-body sm-block\"\n lang=${this.lang}\n key=\"price${\n this.settings?.cart_display_config.show_sub_frequency ?? true\n ? `_${this.data?.frequency === '.5m' ? 'twice_a_month' : 'recurring'}`\n : ''\n }\"\n ns=${this.ns}\n >\n </foxy-i18n>\n <span class=\"text-secondary font-medium sm-font-normal sm-block text-xxs sm-text-s\">\n <span class=\"sm-hidden\">(</span><span class=\"hidden sm-inline\">*</span><foxy-i18n infer=\"\" key=\"fees_hint\"></foxy-i18n><span class=\"sm-hidden\">)</span>\n <iron-icon id=\"hint\" icon=\"icons:info-outline\" class=\"icon-inline\"></iron-icon>\n <vcf-tooltip for=\"hint\" position=\"bottom\">\n <span class=\"text-s\"><foxy-i18n infer=\"\" key=\"fees_explainer\"></foxy-i18n></span>\n </vcf-tooltip>\n <span>\n &#8203;\n </div>\n </div>\n </div>\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'pointer-events-none absolute inset-0 flex transition ease-in-out duration-150': true,\n 'opacity-0': this.in({ idle: 'snapshot' }),\n })}\n >\n <foxy-spinner\n state=${this.in('fail') ? 'error' : this.in({ idle: 'template' }) ? 'empty' : 'busy'}\n class=\"m-auto\"\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n\n ${this.renderTemplateOrSlot()}\n `;\n }\n\n private __getSummaryOptions() {\n if (this.data === null) return {};\n const items = this.data._embedded['fx:transaction_template']._embedded['fx:items'];\n\n return {\n most_expensive_item: [...items].sort((a, b) => a.price - b.price)[0],\n count_minus_one: items.length - 1,\n count: items.length,\n };\n }\n\n private __getPriceOptions() {\n if (this.data === null) return {};\n\n const cart = this.data._embedded['fx:transaction_template'];\n const amount = `${cart.total_order} ${cart.currency_code}`;\n return { ...parseFrequency(this.data.frequency), amount };\n }\n}\n"]}
1
+ {"version":3,"file":"SubscriptionCard.js","sourceRoot":"","sources":["../../../../src/elements/public/SubscriptionCard/SubscriptionCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { Data, Settings } from './types';\n\nimport { TemplateResult, html } from 'lit-html';\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 { parseFrequency } from '../../../utils/parse-frequency';\n\nimport {\n getExtendedSubscriptionStatus,\n getSubscriptionStatus,\n} from '../../../utils/get-subscription-status';\n\nconst NS = 'subscription-card';\nconst Base = ConfigurableMixin(\n ResponsiveMixin(ThemeableMixin(TranslatableMixin(NucleonElement, NS)))\n);\n\n/**\n * Card element displaying subscription summary.\n *\n * @element foxy-subscription-card\n * @since 1.4.0\n */\nexport class SubscriptionCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n settings: { type: Object },\n };\n }\n\n settings: Settings | null = null;\n\n render(): TemplateResult {\n const status = this.settings\n ? getExtendedSubscriptionStatus(this.data, this.settings)\n : getSubscriptionStatus(this.data);\n\n const isRed = status === 'failed';\n const isGreen = status?.startsWith('next_payment') || !!status?.startsWith('will_end');\n const isNormal = !isGreen && !isRed;\n\n return html`\n <div class=\"relative text-left\">\n <div\n class=${classMap({\n 'flex items-start sm-items-center space-x-m transition duration-150 ease-in-out': true,\n 'opacity-0': !this.in({ idle: 'snapshot' }),\n })}\n >\n <div\n class=${classMap({\n 'min-w-0 flex-shrink-0 rounded-full relative flex p-s': true,\n 'text-success bg-success-10': isGreen,\n 'text-body bg-contrast-5': isNormal,\n 'text-error bg-error-10': isRed,\n })}\n >\n <iron-icon\n class=\"m-auto\"\n icon=${isRed ? 'error-outline' : isGreen ? 'done' : 'done-all'}\n >\n </iron-icon>\n </div>\n\n <div class=\"flex-1 min-w-0 leading-xs flex flex-col sm-flex-row sm-items-center\">\n <div class=\"order-1 sm-order-0\">\n <div class=\"text-body font-medium origin-top-left text-m\">\n <foxy-i18n\n data-testid=\"summary\"\n options=${JSON.stringify(this.__getSummaryOptions())}\n lang=${this.lang}\n key=\"transaction_summary\"\n ns=${this.ns}\n >\n </foxy-i18n>\n &#8203;\n </div>\n\n <div\n class=${classMap({\n 'text-m': true,\n 'text-tertiary': isNormal,\n 'text-success': isGreen,\n 'text-error': isRed,\n })}\n >\n <foxy-i18n\n data-testid=\"status\"\n lang=${this.lang}\n key=\"status_${status}\"\n ns=${this.ns}\n .options=${this.data}\n >\n </foxy-i18n>\n &#8203;\n </div>\n </div>\n\n <div\n class=\"flex-1 leading-xs mb-xs sm-mb-0 sm-text-right order-0 sm-order-1\"\n >\n <foxy-i18n\n data-testid=\"price\"\n options=${JSON.stringify(this.__getPriceOptions())}\n class=\"text-xxs sm-text-l font-tnum tracking-wide sm-tracking-normal uppercase sm-normal-case font-medium text-secondary sm-text-body sm-block\"\n lang=${this.lang}\n key=\"price${\n this.settings?.cart_display_config.show_sub_frequency ?? true\n ? `_${this.data?.frequency === '.5m' ? 'twice_a_month' : 'recurring'}`\n : ''\n }\"\n ns=${this.ns}\n >\n </foxy-i18n>\n <span class=\"text-secondary font-medium sm-font-normal sm-block text-xxs sm-text-s\">\n <span class=\"sm-hidden\">(</span><span class=\"hidden sm-inline\">*</span><foxy-i18n infer=\"\" key=\"fees_hint\"></foxy-i18n><span class=\"sm-hidden\">)</span>\n <iron-icon id=\"hint\" icon=\"icons:info-outline\" class=\"icon-inline\"></iron-icon>\n <vcf-tooltip for=\"hint\" position=\"bottom\">\n <span class=\"text-s\"><foxy-i18n infer=\"\" key=\"fees_explainer\"></foxy-i18n></span>\n </vcf-tooltip>\n <span>\n &#8203;\n </div>\n </div>\n </div>\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'pointer-events-none absolute inset-0 flex transition ease-in-out duration-150': true,\n 'opacity-0': this.in({ idle: 'snapshot' }),\n })}\n >\n <foxy-spinner\n state=${this.in('fail') ? 'error' : this.in({ idle: 'template' }) ? 'empty' : 'busy'}\n class=\"m-auto\"\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n\n ${this.renderTemplateOrSlot()}\n `;\n }\n\n private __getSummaryOptions() {\n if (this.data === null) return {};\n const items = this.data._embedded['fx:transaction_template']._embedded['fx:items'];\n\n return {\n count_minus_one: items.length - 1,\n first_item: items[0],\n count: items.length,\n };\n }\n\n private __getPriceOptions() {\n if (this.data === null) return {};\n\n const cart = this.data._embedded['fx:transaction_template'];\n const amount = `${cart.total_order} ${cart.currency_code}`;\n return { ...parseFrequency(this.data.frequency), amount };\n }\n}\n"]}
@@ -35,8 +35,8 @@ SubscriptionsTable.summaryColumn = {
35
35
  cell: ctx => {
36
36
  const items = ctx.data._embedded['fx:transaction_template']._embedded['fx:items'];
37
37
  const options = {
38
- most_expensive_item: [...items].sort((a, b) => a.price - b.price)[0],
39
38
  count_minus_one: items.length - 1,
39
+ first_item: items[0],
40
40
  count: items.length,
41
41
  };
42
42
  return ctx.html `
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionsTable.js","sourceRoot":"","sources":["../../../../src/elements/public/SubscriptionsTable/SubscriptionsTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { Column } from '../Table/types';\nimport { Data } from './types';\nimport { Table } from '../Table/Table';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { parseFrequency } from '../../../utils/parse-frequency';\nimport { getSubscriptionStatus } from '../../../utils/get-subscription-status';\nimport { classMap } from '../../../utils/class-map';\n\nexport class SubscriptionsTable extends TranslatableMixin(Table, 'subscriptions-table')<Data> {\n static priceColumn: Column<Data> = {\n cell: ctx => {\n const cart = ctx.data._embedded['fx:transaction_template'];\n const amount = `${cart.total_order} ${cart.currency_code}`;\n\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n frequencies\"\n class=\"font-medium text-m font-tnum\"\n lang=${ctx.lang}\n key=\"price_${ctx.data.frequency === '.5m' ? 'twice_a_month' : 'recurring'}\"\n ns=${ctx.ns}\n .options=${{ ...parseFrequency(ctx.data.frequency), amount }}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static summaryColumn: Column<Data> = {\n cell: ctx => {\n const items = ctx.data._embedded['fx:transaction_template']._embedded['fx:items'];\n const options = {\n most_expensive_item: [...items].sort((a, b) => a.price - b.price)[0],\n count_minus_one: items.length - 1,\n count: items.length,\n };\n\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n summaries\"\n class=\"text-m\"\n lang=${ctx.lang}\n key=\"transaction_summary\"\n ns=${ctx.ns}\n .options=${options}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static statusColumn: Column<Data> = {\n hideBelow: 'sm',\n cell: ({ ns, lang, data, html }) => {\n const status = getSubscriptionStatus(data);\n const isRed = status === 'failed';\n const isGreen = status === 'next_payment' || !!status?.startsWith('will_end');\n const isNormal = !isGreen && !isRed;\n\n return html`\n <foxy-i18n\n data-testclass=\"i18n statuses\"\n class=${classMap({\n 'px-s py-xs text-m font-medium inline-block whitespace-normal rounded': true,\n 'text-secondary bg-contrast-5': isNormal,\n 'text-success bg-success-10': isGreen,\n 'text-error bg-error-10': isRed,\n })}\n lang=${lang}\n key=\"status_${status}\"\n ns=${ns}\n .options=${data}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static subTokenURLColumn: Column<Data> = {\n cell: ctx => {\n return ctx.html`\n <a\n data-testclass=\"links\"\n target=\"_blank\"\n class=\"text-m font-medium text-primary rounded hover-underline focus-outline-none focus-shadow-outline\"\n href=${ctx.data._links['fx:sub_token_url'].href}\n >\n <foxy-i18n\n data-testclass=\"i18n\"\n lang=${ctx.lang}\n key=\"update\"\n ns=${ctx.ns}\n >\n </foxy-i18n>\n </a>\n `;\n },\n };\n\n columns = [\n SubscriptionsTable.priceColumn,\n SubscriptionsTable.summaryColumn,\n SubscriptionsTable.statusColumn,\n SubscriptionsTable.subTokenURLColumn,\n ];\n}\n"]}
1
+ {"version":3,"file":"SubscriptionsTable.js","sourceRoot":"","sources":["../../../../src/elements/public/SubscriptionsTable/SubscriptionsTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { Column } from '../Table/types';\nimport { Data } from './types';\nimport { Table } from '../Table/Table';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { parseFrequency } from '../../../utils/parse-frequency';\nimport { getSubscriptionStatus } from '../../../utils/get-subscription-status';\nimport { classMap } from '../../../utils/class-map';\n\nexport class SubscriptionsTable extends TranslatableMixin(Table, 'subscriptions-table')<Data> {\n static priceColumn: Column<Data> = {\n cell: ctx => {\n const cart = ctx.data._embedded['fx:transaction_template'];\n const amount = `${cart.total_order} ${cart.currency_code}`;\n\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n frequencies\"\n class=\"font-medium text-m font-tnum\"\n lang=${ctx.lang}\n key=\"price_${ctx.data.frequency === '.5m' ? 'twice_a_month' : 'recurring'}\"\n ns=${ctx.ns}\n .options=${{ ...parseFrequency(ctx.data.frequency), amount }}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static summaryColumn: Column<Data> = {\n cell: ctx => {\n const items = ctx.data._embedded['fx:transaction_template']._embedded['fx:items'];\n const options = {\n count_minus_one: items.length - 1,\n first_item: items[0],\n count: items.length,\n };\n\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n summaries\"\n class=\"text-m\"\n lang=${ctx.lang}\n key=\"transaction_summary\"\n ns=${ctx.ns}\n .options=${options}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static statusColumn: Column<Data> = {\n hideBelow: 'sm',\n cell: ({ ns, lang, data, html }) => {\n const status = getSubscriptionStatus(data);\n const isRed = status === 'failed';\n const isGreen = status === 'next_payment' || !!status?.startsWith('will_end');\n const isNormal = !isGreen && !isRed;\n\n return html`\n <foxy-i18n\n data-testclass=\"i18n statuses\"\n class=${classMap({\n 'px-s py-xs text-m font-medium inline-block whitespace-normal rounded': true,\n 'text-secondary bg-contrast-5': isNormal,\n 'text-success bg-success-10': isGreen,\n 'text-error bg-error-10': isRed,\n })}\n lang=${lang}\n key=\"status_${status}\"\n ns=${ns}\n .options=${data}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static subTokenURLColumn: Column<Data> = {\n cell: ctx => {\n return ctx.html`\n <a\n data-testclass=\"links\"\n target=\"_blank\"\n class=\"text-m font-medium text-primary rounded hover-underline focus-outline-none focus-shadow-outline\"\n href=${ctx.data._links['fx:sub_token_url'].href}\n >\n <foxy-i18n\n data-testclass=\"i18n\"\n lang=${ctx.lang}\n key=\"update\"\n ns=${ctx.ns}\n >\n </foxy-i18n>\n </a>\n `;\n },\n };\n\n columns = [\n SubscriptionsTable.priceColumn,\n SubscriptionsTable.summaryColumn,\n SubscriptionsTable.statusColumn,\n SubscriptionsTable.subTokenURLColumn,\n ];\n}\n"]}
@@ -211,8 +211,8 @@ class TransactionCard extends Base {
211
211
  }
212
212
  if (items) {
213
213
  const options = {
214
- most_expensive_item: [...items].sort((a, b) => a.price - b.price)[0],
215
214
  count_minus_one: items.length - 1,
215
+ first_item: items[0],
216
216
  count: items.length,
217
217
  };
218
218
  content = html `<foxy-i18n .options=${options} infer="" key=${key}></foxy-i18n>`;
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionCard.js","sourceRoot":"","sources":["../../../../src/elements/public/TransactionCard/TransactionCard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,QAAQ,EAAE,oCAAiC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,kBAAkB,CAAC;AAC9B,MAAM,IAAI,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,eAAgB,SAAQ,IAAU;IAAxC;;QACU,sBAAiB,GAAG,EAAE,CAAC;IAkPjC,CAAC;IAhPC,UAAU;;QACR,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAA;;oBAEK,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;;;;qBAId,QAAQ,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1E,QAAQ,IAAI,SAAS;YACrB,CAAC,CAAC,IAAI,CAAA;;oBAEE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE;oBACzC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE;;eAE3C;YACH,CAAC,CAAC,EAAE;YACJ,cAAc,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE;YACzE,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE;;;;kBAIjE,QAAQ,CAAC;YACf,8DAA8D,EAAE,IAAI;YACpE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;SACzB,CAAC;;;;oBAIQ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;;mBAE7E,IAAI,CAAC,IAAI;kBACV,IAAI,CAAC,EAAE,IAAI,YAAA,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,0CAAE,SAAS,mCAAI,EAAE;;;;;KAK3E,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,QAAQ;;QACtB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,SAAS,SAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,0CAAE,IAAI,CAAC;QAEvD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YACjC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAuB,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;SACtF;aAAM;YACL,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;SACnC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,kBAAkB;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,OAAuB,CAAC;QAE5B,IAAI,IAAI,EAAE;YACR,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAC/C,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YAE5C,OAAO,GAAG,IAAI,CAAA;oCACgB,IAAI,CAAC,UAAU,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;UACjF,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,2BAA2B;gBACvE,CAAC,CAAC,IAAI,CAAA;;oCAEoB,OAAO;;aAE9B;gBACH,CAAC,CAAC,EAAE;UACJ,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,EACb,CAAC,CAAC,IAAI,CAAA;;;;;;;aAOH;gBACH,CAAC,CAAC,EAAE;OACP,CAAC;SACH;aAAM;YACL,OAAO,GAAG,IAAI,CAAA,kBAAkB,CAAC;SAClC;QAED,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;4DACS,OAAO;UACzD,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;;KAE7C,CAAC;IACJ,CAAC;IAEO,cAAc;;QACpB,MAAM,YAAY,GAA2B;YAC3C,UAAU,EAAE,YAAY;YACxB,SAAS,EAAE,YAAY;YACvB,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,YAAY;YAErB,SAAS,EAAE,gBAAgB;YAE3B,oBAAoB,EAAE,oBAAoB;YAC1C,QAAQ,EAAE,qBAAqB;YAC/B,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,oBAAoB;YAE7B,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,6BAA6B;SACtC,CAAC;QAEF,MAAM,aAAa,GAA2B;YAC5C,UAAU,EAAE,cAAc;YAC1B,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,cAAc;YACzB,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,cAAc;YAEvB,oBAAoB,EAAE,YAAY;YAClC,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,YAAY;SACtB,CAAC;QAEF,MAAM,MAAM,GAAG,OAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,KAAI,WAAW,CAAC;QAChD,MAAM,MAAM,eAAG,IAAI,CAAC,IAAI,0CAAE,MAAM,0CAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;QAEhE,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;;;YAGxC,OAAA,IAAI,CAAC,IAAI,0CAAE,gBAAgB,EAC3B,CAAC,CAAC,IAAI,CAAA;;;;;;;;;;eAUH;YACH,CAAC,CAAC,EAAE;YACJ,MAAM;YACN,CAAC,CAAC,IAAI,CAAA;;oDAEkC,MAAM;;2DAEC,MAAM;eAClD;YACH,CAAC,CAAC,EAAE;;;sBAGM,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,QAAE,IAAI,CAAC,IAAI,0CAAE,gBAAgB,EAAE,CAAC;mBACzD,IAAI,CAAC,IAAI;;iBAEX,IAAI,CAAC,EAAE;;;;;;uDAM+B,MAAA,aAAa,CAAC,MAAM,CAAC,mCAAI,eAAe;;mBAE5E,MAAA,YAAY,CAAC,MAAM,CAAC,mCAAI,gBAAgB;;;;;8CAKb,MAAM;;;;UAI1C,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;;KAE9C,CAAC;IACJ,CAAC;IAEO,eAAe;;QACrB,MAAM,KAAK,eAAG,IAAI,CAAC,IAAI,0CAAE,SAAS,0CAAG,UAAU,CAAC,CAAC;QACjD,MAAM,IAAI,SAAG,IAAI,CAAC,IAAI,0CAAE,IAAI,CAAC;QAE7B,IAAI,OAAuB,CAAC;QAC5B,IAAI,GAAW,CAAC;QAEhB,IAAI,IAAI,KAAK,YAAY,EAAE;YACzB,GAAG,GAAG,+BAA+B,CAAC;SACvC;aAAM,IAAI,IAAI,KAAK,2BAA2B,EAAE;YAC/C,GAAG,GAAG,mCAAmC,CAAC;SAC3C;aAAM,IAAI,IAAI,KAAK,2BAA2B,EAAE;YAC/C,GAAG,GAAG,mCAAmC,CAAC;SAC3C;aAAM;YACL,GAAG,GAAG,SAAS,CAAC;SACjB;QAED,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG;gBACd,mBAAmB,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpE,eAAe,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;gBACjC,KAAK,EAAE,KAAK,CAAC,MAAM;aACpB,CAAC;YAEF,OAAO,GAAG,IAAI,CAAA,uBAAuB,OAAO,iBAAiB,GAAG,eAAe,CAAC;SACjF;aAAM;YACL,OAAO,GAAG,IAAI,CAAA,kBAAkB,CAAC;SAClC;QAED,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;sDACH,OAAO;UACnD,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;;KAEnD,CAAC;IACJ,CAAC;IAEO,gBAAgB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI;YAClB,CAAC,CAAC,IAAI,CAAA,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,cAAc,GAAG;YACvF,CAAC,CAAC,IAAI,CAAA,kBAAkB,CAAC;QAE3B,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;qDACD,OAAO;UAClD,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;;KAEhD,CAAC;IACJ,CAAC;CACF;AAED,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { Data } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nimport { Resource, getResourceId } from '@foxy.io/sdk/core';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { classMap } from '../../../utils/class-map';\nimport { html } from 'lit-html';\n\nconst NS = 'transaction-card';\nconst Base = ConfigurableMixin(TranslatableMixin(InternalCard, NS));\n\n/**\n * Basic card displaying a transaction.\n *\n * @element foxy-transaction-card\n * @since 1.12.0\n */\nclass TransactionCard extends Base<Data> {\n private __currencyDisplay = '';\n\n renderBody(): TemplateResult {\n const hiddenSelector = this.hiddenSelector;\n const hasTotal = !hiddenSelector.matches('total', true);\n const hasStatus = !hiddenSelector.matches('status', true);\n\n return html`\n <div\n aria-busy=${this.in('busy')}\n aria-live=\"polite\"\n class=\"relative leading-s font-lumo text-m\"\n >\n <div class=${classMap({ 'transition-opacity': true, 'opacity-0': !this.data })}>\n ${hasTotal || hasStatus\n ? html`\n <div class=\"flex items-center justify-between gap-s\">\n ${hasTotal ? this.__renderIdAndTotal() : ''}\n ${hasStatus ? this.__renderStatus() : ''}\n </div>\n `\n : ''}\n ${hiddenSelector.matches('description', true) ? '' : this.__renderSummary()}\n ${hiddenSelector.matches('customer', true) ? '' : this.__renderCustomer()}\n </div>\n\n <div\n class=${classMap({\n 'pointer-events-none absolute inset-0 flex transition-opacity': true,\n 'opacity-0': !!this.data,\n })}\n >\n <foxy-spinner\n data-testid=\"spinner\"\n state=${this.in('fail') ? 'error' : this.in({ idle: 'template' }) ? 'empty' : 'busy'}\n class=\"m-auto\"\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n protected async _sendGet(): Promise<Data> {\n const transaction = await super._sendGet();\n const storeLink = transaction._links['fx:store']?.href;\n\n if (typeof storeLink === 'string') {\n const store = await super._fetch<Resource<Rels.Store>>(storeLink);\n this.__currencyDisplay = store.use_international_currency_symbol ? 'code' : 'symbol';\n } else {\n this.__currencyDisplay = 'symbol';\n }\n\n return transaction;\n }\n\n private __renderIdAndTotal() {\n const data = this.data;\n let content: TemplateResult;\n\n if (data) {\n const amount = `${data.total_order} ${data.currency_code}`;\n const currencyDisplay = this.__currencyDisplay;\n const options = { amount, currencyDisplay };\n\n content = html`\n <span class=\"truncate\">ID ${data.display_id || getResourceId(data._links.self.href)}</span>\n ${data.type !== 'updateinfo' && data.type !== 'subscription_cancellation'\n ? html`\n <span>&bull;</span>\n <foxy-i18n .options=${options} infer=\"\" class=\"whitespace-nowrap\" key=\"price\">\n </foxy-i18n>\n `\n : ''}\n ${data?.is_test\n ? html`\n <foxy-i18n\n infer=\"\"\n class=\"inline-block text-xs font-medium uppercase bg-contrast-5 text-tertiary rounded-s p-xs leading-none tracking-wider\"\n key=\"test\"\n >\n </foxy-i18n>\n `\n : ''}\n `;\n } else {\n content = html`&ZeroWidthSpace;`;\n }\n\n return html`\n <div class=\"min-w-0\" data-testid=\"total\">\n ${this.renderTemplateOrSlot('total:before')}\n <div class=\"font-medium flex items-center gap-xs\">${content}</div>\n ${this.renderTemplateOrSlot('total:after')}\n </div>\n `;\n }\n\n private __renderStatus() {\n const specialIcons: Record<string, string> = {\n authorized: 'icons:done',\n capturing: 'icons:done',\n captured: 'icons:done',\n approved: 'icons:done',\n pending: 'icons:done',\n\n completed: 'icons:done-all',\n\n pending_fraud_review: 'icons:info-outline',\n declined: 'icons:highlight-off',\n rejected: 'icons:highlight-off',\n problem: 'icons:info-outline',\n\n refunded: 'icons:restore',\n voided: 'icons:remove-circle-outline',\n };\n\n const specialColors: Record<string, string> = {\n authorized: 'text-success',\n completed: 'text-success',\n capturing: 'text-success',\n captured: 'text-success',\n approved: 'text-success',\n pending: 'text-success',\n\n pending_fraud_review: 'text-error',\n declined: 'text-error',\n rejected: 'text-error',\n problem: 'text-error',\n };\n\n const status = this.data?.status || 'completed';\n const source = this.data?.source?.substring(0, 3).toUpperCase();\n\n return html`\n <div class=\"flex-shrink-0\" data-testid=\"status\">\n ${this.renderTemplateOrSlot('status:before')}\n\n <div class=\"text-tertiary text-s flex items-center space-x-xs\">\n ${this.data?.hide_transaction\n ? html`\n <vcf-tooltip for=\"hidden\" theme=\"light\" position=\"top\">\n <foxy-i18n infer=\"\" key=\"hidden_hint\"></foxy-i18n>\n </vcf-tooltip>\n <iron-icon\n class=\"icon-inline cursor-default\"\n icon=\"icons:visibility-off\"\n id=\"hidden\"\n >\n </iron-icon>\n `\n : ''}\n ${source\n ? html`\n <vcf-tooltip for=\"source\" theme=\"light\" position=\"top\">\n <foxy-i18n infer=\"\" key=\"source_${source}\"></foxy-i18n>\n </vcf-tooltip>\n <span class=\"cursor-default\" id=\"source\">${source}</span>\n `\n : ''}\n\n <foxy-i18n\n options=${JSON.stringify({ value: this.data?.transaction_date })}\n lang=${this.lang}\n key=\"time\"\n ns=${this.ns}\n >\n </foxy-i18n>\n\n <iron-icon\n data-testid=\"status-icon\"\n class=\"icon-inline cursor-default text-l ${specialColors[status] ?? 'text-tertiary'}\"\n id=\"status\"\n icon=${specialIcons[status] ?? 'icons:schedule'}\n >\n </iron-icon>\n\n <vcf-tooltip for=\"status\" theme=\"light\" position=\"top\">\n <foxy-i18n infer=\"\" key=\"status_${status}\"></foxy-i18n>\n </vcf-tooltip>\n </div>\n\n ${this.renderTemplateOrSlot('status:after')}\n </div>\n `;\n }\n\n private __renderSummary() {\n const items = this.data?._embedded?.['fx:items'];\n const type = this.data?.type;\n\n let content: TemplateResult;\n let key: string;\n\n if (type === 'updateinfo') {\n key = 'summary_payment_method_change';\n } else if (type === 'subscription_modification') {\n key = 'summary_subscription_modification';\n } else if (type === 'subscription_cancellation') {\n key = 'summary_subscription_cancellation';\n } else {\n key = 'summary';\n }\n\n if (items) {\n const options = {\n most_expensive_item: [...items].sort((a, b) => a.price - b.price)[0],\n count_minus_one: items.length - 1,\n count: items.length,\n };\n\n content = html`<foxy-i18n .options=${options} infer=\"\" key=${key}></foxy-i18n>`;\n } else {\n content = html`&ZeroWidthSpace;`;\n }\n\n return html`\n <div data-testid=\"description\">\n ${this.renderTemplateOrSlot('description:before')}\n <div class=\"text-s text-secondary truncate\">${content}</div>\n ${this.renderTemplateOrSlot('description:after')}\n </div>\n `;\n }\n\n private __renderCustomer() {\n const data = this.data;\n const content = data\n ? html`${data.customer_first_name} ${data.customer_last_name} (${data.customer_email})`\n : html`&ZeroWidthSpace;`;\n\n return html`\n <div data-testid=\"customer\">\n ${this.renderTemplateOrSlot('customer:before')}\n <div class=\"text-tertiary truncate text-s\">${content}</div>\n ${this.renderTemplateOrSlot('customer:after')}\n </div>\n `;\n }\n}\n\nexport { TransactionCard };\n"]}
1
+ {"version":3,"file":"TransactionCard.js","sourceRoot":"","sources":["../../../../src/elements/public/TransactionCard/TransactionCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Data } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nimport { Resource, getResourceId } from '@foxy.io/sdk/core';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { classMap } from '../../../utils/class-map';\nimport { html } from 'lit-html';\n\nconst NS = 'transaction-card';\nconst Base = ConfigurableMixin(TranslatableMixin(InternalCard, NS));\n\n/**\n * Basic card displaying a transaction.\n *\n * @element foxy-transaction-card\n * @since 1.12.0\n */\nclass TransactionCard extends Base<Data> {\n private __currencyDisplay = '';\n\n renderBody(): TemplateResult {\n const hiddenSelector = this.hiddenSelector;\n const hasTotal = !hiddenSelector.matches('total', true);\n const hasStatus = !hiddenSelector.matches('status', true);\n\n return html`\n <div\n aria-busy=${this.in('busy')}\n aria-live=\"polite\"\n class=\"relative leading-s font-lumo text-m\"\n >\n <div class=${classMap({ 'transition-opacity': true, 'opacity-0': !this.data })}>\n ${hasTotal || hasStatus\n ? html`\n <div class=\"flex items-center justify-between gap-s\">\n ${hasTotal ? this.__renderIdAndTotal() : ''}\n ${hasStatus ? this.__renderStatus() : ''}\n </div>\n `\n : ''}\n ${hiddenSelector.matches('description', true) ? '' : this.__renderSummary()}\n ${hiddenSelector.matches('customer', true) ? '' : this.__renderCustomer()}\n </div>\n\n <div\n class=${classMap({\n 'pointer-events-none absolute inset-0 flex transition-opacity': true,\n 'opacity-0': !!this.data,\n })}\n >\n <foxy-spinner\n data-testid=\"spinner\"\n state=${this.in('fail') ? 'error' : this.in({ idle: 'template' }) ? 'empty' : 'busy'}\n class=\"m-auto\"\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n protected async _sendGet(): Promise<Data> {\n const transaction = await super._sendGet();\n const storeLink = transaction._links['fx:store']?.href;\n\n if (typeof storeLink === 'string') {\n const store = await super._fetch<Resource<Rels.Store>>(storeLink);\n this.__currencyDisplay = store.use_international_currency_symbol ? 'code' : 'symbol';\n } else {\n this.__currencyDisplay = 'symbol';\n }\n\n return transaction;\n }\n\n private __renderIdAndTotal() {\n const data = this.data;\n let content: TemplateResult;\n\n if (data) {\n const amount = `${data.total_order} ${data.currency_code}`;\n const currencyDisplay = this.__currencyDisplay;\n const options = { amount, currencyDisplay };\n\n content = html`\n <span class=\"truncate\">ID ${data.display_id || getResourceId(data._links.self.href)}</span>\n ${data.type !== 'updateinfo' && data.type !== 'subscription_cancellation'\n ? html`\n <span>&bull;</span>\n <foxy-i18n .options=${options} infer=\"\" class=\"whitespace-nowrap\" key=\"price\">\n </foxy-i18n>\n `\n : ''}\n ${data?.is_test\n ? html`\n <foxy-i18n\n infer=\"\"\n class=\"inline-block text-xs font-medium uppercase bg-contrast-5 text-tertiary rounded-s p-xs leading-none tracking-wider\"\n key=\"test\"\n >\n </foxy-i18n>\n `\n : ''}\n `;\n } else {\n content = html`&ZeroWidthSpace;`;\n }\n\n return html`\n <div class=\"min-w-0\" data-testid=\"total\">\n ${this.renderTemplateOrSlot('total:before')}\n <div class=\"font-medium flex items-center gap-xs\">${content}</div>\n ${this.renderTemplateOrSlot('total:after')}\n </div>\n `;\n }\n\n private __renderStatus() {\n const specialIcons: Record<string, string> = {\n authorized: 'icons:done',\n capturing: 'icons:done',\n captured: 'icons:done',\n approved: 'icons:done',\n pending: 'icons:done',\n\n completed: 'icons:done-all',\n\n pending_fraud_review: 'icons:info-outline',\n declined: 'icons:highlight-off',\n rejected: 'icons:highlight-off',\n problem: 'icons:info-outline',\n\n refunded: 'icons:restore',\n voided: 'icons:remove-circle-outline',\n };\n\n const specialColors: Record<string, string> = {\n authorized: 'text-success',\n completed: 'text-success',\n capturing: 'text-success',\n captured: 'text-success',\n approved: 'text-success',\n pending: 'text-success',\n\n pending_fraud_review: 'text-error',\n declined: 'text-error',\n rejected: 'text-error',\n problem: 'text-error',\n };\n\n const status = this.data?.status || 'completed';\n const source = this.data?.source?.substring(0, 3).toUpperCase();\n\n return html`\n <div class=\"flex-shrink-0\" data-testid=\"status\">\n ${this.renderTemplateOrSlot('status:before')}\n\n <div class=\"text-tertiary text-s flex items-center space-x-xs\">\n ${this.data?.hide_transaction\n ? html`\n <vcf-tooltip for=\"hidden\" theme=\"light\" position=\"top\">\n <foxy-i18n infer=\"\" key=\"hidden_hint\"></foxy-i18n>\n </vcf-tooltip>\n <iron-icon\n class=\"icon-inline cursor-default\"\n icon=\"icons:visibility-off\"\n id=\"hidden\"\n >\n </iron-icon>\n `\n : ''}\n ${source\n ? html`\n <vcf-tooltip for=\"source\" theme=\"light\" position=\"top\">\n <foxy-i18n infer=\"\" key=\"source_${source}\"></foxy-i18n>\n </vcf-tooltip>\n <span class=\"cursor-default\" id=\"source\">${source}</span>\n `\n : ''}\n\n <foxy-i18n\n options=${JSON.stringify({ value: this.data?.transaction_date })}\n lang=${this.lang}\n key=\"time\"\n ns=${this.ns}\n >\n </foxy-i18n>\n\n <iron-icon\n data-testid=\"status-icon\"\n class=\"icon-inline cursor-default text-l ${specialColors[status] ?? 'text-tertiary'}\"\n id=\"status\"\n icon=${specialIcons[status] ?? 'icons:schedule'}\n >\n </iron-icon>\n\n <vcf-tooltip for=\"status\" theme=\"light\" position=\"top\">\n <foxy-i18n infer=\"\" key=\"status_${status}\"></foxy-i18n>\n </vcf-tooltip>\n </div>\n\n ${this.renderTemplateOrSlot('status:after')}\n </div>\n `;\n }\n\n private __renderSummary() {\n const items = this.data?._embedded?.['fx:items'];\n const type = this.data?.type;\n\n let content: TemplateResult;\n let key: string;\n\n if (type === 'updateinfo') {\n key = 'summary_payment_method_change';\n } else if (type === 'subscription_modification') {\n key = 'summary_subscription_modification';\n } else if (type === 'subscription_cancellation') {\n key = 'summary_subscription_cancellation';\n } else {\n key = 'summary';\n }\n\n if (items) {\n const options = {\n count_minus_one: items.length - 1,\n first_item: items[0],\n count: items.length,\n };\n\n content = html`<foxy-i18n .options=${options} infer=\"\" key=${key}></foxy-i18n>`;\n } else {\n content = html`&ZeroWidthSpace;`;\n }\n\n return html`\n <div data-testid=\"description\">\n ${this.renderTemplateOrSlot('description:before')}\n <div class=\"text-s text-secondary truncate\">${content}</div>\n ${this.renderTemplateOrSlot('description:after')}\n </div>\n `;\n }\n\n private __renderCustomer() {\n const data = this.data;\n const content = data\n ? html`${data.customer_first_name} ${data.customer_last_name} (${data.customer_email})`\n : html`&ZeroWidthSpace;`;\n\n return html`\n <div data-testid=\"customer\">\n ${this.renderTemplateOrSlot('customer:before')}\n <div class=\"text-tertiary truncate text-s\">${content}</div>\n ${this.renderTemplateOrSlot('customer:after')}\n </div>\n `;\n }\n}\n\nexport { TransactionCard };\n"]}
@@ -33,8 +33,8 @@ TransactionsTable.summaryColumn = {
33
33
  if (!items)
34
34
  return '';
35
35
  const options = {
36
- most_expensive_item: [...items].sort((a, b) => a.price - b.price)[0],
37
36
  count_minus_one: items.length - 1,
37
+ first_item: items[0],
38
38
  count: items.length,
39
39
  };
40
40
  return ctx.html `
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionsTable.js","sourceRoot":"","sources":["../../../../src/elements/public/TransactionsTable/TransactionsTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { Column } from '../Table/types';\nimport { Data } from './types';\nimport { Table } from '../Table/Table';\nimport { TranslatableMixin } from '../../../mixins/translatable';\n\nexport class TransactionsTable extends TranslatableMixin(Table, 'transactions-table')<Data> {\n static priceColumn: Column<Data> = {\n cell: ctx => ctx.html`\n <foxy-i18n\n data-testclass=\"i18n totals\"\n class=\"text-m font-medium font-tnum\"\n lang=${ctx.lang}\n key=\"price\"\n ns=${ctx.ns}\n .options=${{ amount: `${ctx.data.total_order} ${ctx.data.currency_code}` }}\n >\n </foxy-i18n>\n `,\n };\n\n static summaryColumn: Column<Data> = {\n cell: ctx => {\n const items = ctx.data._embedded?.['fx:items'];\n if (!items) return '';\n\n const options = {\n most_expensive_item: [...items].sort((a, b) => a.price - b.price)[0],\n count_minus_one: items.length - 1,\n count: items.length,\n };\n\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n summaries\"\n class=\"text-m\"\n lang=${ctx.lang}\n key=\"transaction_summary\"\n ns=${ctx.ns}\n .options=${options}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static statusColumn: Column<Data> = {\n hideBelow: 'sm',\n cell: ctx => {\n const colors = {\n completed: 'bg-success-10 text-success',\n declined: 'bg-error-10 text-error',\n rejected: 'bg-error-10 text-error',\n };\n\n const status = ctx.data.status || 'completed';\n const defaultColor = 'bg-contrast-5 text-contrast';\n const color = status in colors ? colors[status as keyof typeof colors] : defaultColor;\n\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n statuses\"\n class=\"px-s py-xs text-m font-medium rounded ${color}\"\n lang=${ctx.lang}\n key=${`transaction_${status}`}\n ns=${ctx.ns}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static idColumn: Column<Data> = {\n hideBelow: 'sm',\n cell: ctx => {\n return ctx.html`\n <span class=\"text-m text-secondary font-tnum\" data-testclass=\"ids\">\n <span class=\"text-tertiary\">ID</span> ${ctx.data.id}\n </span>\n `;\n },\n };\n\n static dateColumn: Column<Data> = {\n hideBelow: 'sm' as const,\n cell: ctx => {\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n dates\"\n class=\"text-m text-secondary font-tnum\"\n lang=${ctx.lang}\n key=\"date\"\n ns=${ctx.ns}\n .options=${{ value: ctx.data.transaction_date }}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static receiptColumn: Column<Data> = {\n cell: ctx => {\n return ctx.html`\n <a\n data-testclass=\"links\"\n target=\"_blank\"\n class=\"text-m font-medium text-primary rounded hover-underline focus-outline-none focus-shadow-outline\"\n href=${ctx.data._links['fx:receipt'].href}\n >\n <foxy-i18n\n data-testclass=\"i18n\"\n ns=${ctx.ns}\n lang=${ctx.lang}\n key=\"receipt\"\n >\n </foxy-i18n>\n <iron-icon icon=\"icons:open-in-new\" class=\"icon-inline\"></iron-icon>\n </a>\n `;\n },\n };\n\n columns = [\n TransactionsTable.priceColumn,\n TransactionsTable.summaryColumn,\n TransactionsTable.statusColumn,\n TransactionsTable.idColumn,\n TransactionsTable.dateColumn,\n TransactionsTable.receiptColumn,\n ];\n\n private static __ns = 'transactions-table';\n}\n"]}
1
+ {"version":3,"file":"TransactionsTable.js","sourceRoot":"","sources":["../../../../src/elements/public/TransactionsTable/TransactionsTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { Column } from '../Table/types';\nimport { Data } from './types';\nimport { Table } from '../Table/Table';\nimport { TranslatableMixin } from '../../../mixins/translatable';\n\nexport class TransactionsTable extends TranslatableMixin(Table, 'transactions-table')<Data> {\n static priceColumn: Column<Data> = {\n cell: ctx => ctx.html`\n <foxy-i18n\n data-testclass=\"i18n totals\"\n class=\"text-m font-medium font-tnum\"\n lang=${ctx.lang}\n key=\"price\"\n ns=${ctx.ns}\n .options=${{ amount: `${ctx.data.total_order} ${ctx.data.currency_code}` }}\n >\n </foxy-i18n>\n `,\n };\n\n static summaryColumn: Column<Data> = {\n cell: ctx => {\n const items = ctx.data._embedded?.['fx:items'];\n if (!items) return '';\n\n const options = {\n count_minus_one: items.length - 1,\n first_item: items[0],\n count: items.length,\n };\n\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n summaries\"\n class=\"text-m\"\n lang=${ctx.lang}\n key=\"transaction_summary\"\n ns=${ctx.ns}\n .options=${options}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static statusColumn: Column<Data> = {\n hideBelow: 'sm',\n cell: ctx => {\n const colors = {\n completed: 'bg-success-10 text-success',\n declined: 'bg-error-10 text-error',\n rejected: 'bg-error-10 text-error',\n };\n\n const status = ctx.data.status || 'completed';\n const defaultColor = 'bg-contrast-5 text-contrast';\n const color = status in colors ? colors[status as keyof typeof colors] : defaultColor;\n\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n statuses\"\n class=\"px-s py-xs text-m font-medium rounded ${color}\"\n lang=${ctx.lang}\n key=${`transaction_${status}`}\n ns=${ctx.ns}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static idColumn: Column<Data> = {\n hideBelow: 'sm',\n cell: ctx => {\n return ctx.html`\n <span class=\"text-m text-secondary font-tnum\" data-testclass=\"ids\">\n <span class=\"text-tertiary\">ID</span> ${ctx.data.id}\n </span>\n `;\n },\n };\n\n static dateColumn: Column<Data> = {\n hideBelow: 'sm' as const,\n cell: ctx => {\n return ctx.html`\n <foxy-i18n\n data-testclass=\"i18n dates\"\n class=\"text-m text-secondary font-tnum\"\n lang=${ctx.lang}\n key=\"date\"\n ns=${ctx.ns}\n .options=${{ value: ctx.data.transaction_date }}\n >\n </foxy-i18n>\n `;\n },\n };\n\n static receiptColumn: Column<Data> = {\n cell: ctx => {\n return ctx.html`\n <a\n data-testclass=\"links\"\n target=\"_blank\"\n class=\"text-m font-medium text-primary rounded hover-underline focus-outline-none focus-shadow-outline\"\n href=${ctx.data._links['fx:receipt'].href}\n >\n <foxy-i18n\n data-testclass=\"i18n\"\n ns=${ctx.ns}\n lang=${ctx.lang}\n key=\"receipt\"\n >\n </foxy-i18n>\n <iron-icon icon=\"icons:open-in-new\" class=\"icon-inline\"></iron-icon>\n </a>\n `;\n },\n };\n\n columns = [\n TransactionsTable.priceColumn,\n TransactionsTable.summaryColumn,\n TransactionsTable.statusColumn,\n TransactionsTable.idColumn,\n TransactionsTable.dateColumn,\n TransactionsTable.receiptColumn,\n ];\n\n private static __ns = 'transactions-table';\n}\n"]}
@@ -2120,12 +2120,6 @@ option{
2120
2120
  color: var(--lumo-body-text-color, hsla(214, 40%, 16%, 0.94));
2121
2121
  }
2122
2122
 
2123
- @media (hover: hover) {
2124
- .group:hover .group-hover-text-body {
2125
- color: var(--lumo-body-text-color, hsla(214, 40%, 16%, 0.94));
2126
- }
2127
- }
2128
-
2129
2123
  .focus-within-text-primary-contrast:focus-within {
2130
2124
  color: var(--lumo-primary-contrast-color, #fff);
2131
2125
  }