@foxy.io/elements 1.21.3 → 1.22.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 (308) hide show
  1. package/dist/cdn/foxy-access-recovery-form.js +1 -1
  2. package/dist/cdn/foxy-address-card.js +3 -85
  3. package/dist/cdn/foxy-address-form.js +1 -1
  4. package/dist/cdn/foxy-admin-subscription-card.js +1 -1
  5. package/dist/cdn/foxy-api-browser.js +2 -2
  6. package/dist/cdn/foxy-applied-coupon-code-card.js +1 -1
  7. package/dist/cdn/foxy-applied-coupon-code-form.js +1 -1
  8. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  9. package/dist/cdn/foxy-attribute-card.js +1 -1
  10. package/dist/cdn/foxy-attribute-form.js +1 -1
  11. package/dist/cdn/foxy-cancellation-form.js +1 -1
  12. package/dist/cdn/foxy-cart-card.js +1 -1
  13. package/dist/cdn/foxy-cart-form.js +1 -1
  14. package/dist/cdn/foxy-collection-page.js +1 -1
  15. package/dist/cdn/foxy-collection-pages.js +1 -1
  16. package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
  17. package/dist/cdn/foxy-coupon-card.js +1 -1
  18. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  19. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  20. package/dist/cdn/foxy-coupon-detail-card.js +1 -1
  21. package/dist/cdn/foxy-coupon-form.js +1 -1
  22. package/dist/cdn/foxy-custom-field-card.js +1 -1
  23. package/dist/cdn/foxy-custom-field-form.js +1 -1
  24. package/dist/cdn/foxy-customer-card.js +1 -1
  25. package/dist/cdn/foxy-customer-form.js +1 -1
  26. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  27. package/dist/cdn/foxy-customer-portal.js +4 -4
  28. package/dist/cdn/foxy-customer.js +5 -5
  29. package/dist/cdn/foxy-customers-table.js +1 -1
  30. package/dist/cdn/foxy-discount-builder.js +1 -1
  31. package/dist/cdn/foxy-discount-card.js +1 -1
  32. package/dist/cdn/foxy-discount-detail-card.js +1 -1
  33. package/dist/cdn/foxy-donation.js +1 -1
  34. package/dist/cdn/foxy-email-template-card.js +1 -1
  35. package/dist/cdn/foxy-email-template-form.js +1 -1
  36. package/dist/cdn/foxy-error-entry-card.js +1 -1
  37. package/dist/cdn/foxy-form-dialog.js +1 -1
  38. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  39. package/dist/cdn/foxy-gift-card-card.js +1 -1
  40. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  41. package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
  42. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  43. package/dist/cdn/foxy-gift-card-form.js +1 -1
  44. package/dist/cdn/foxy-i18n-editor.js +2 -2
  45. package/dist/cdn/foxy-i18n.js +1 -1
  46. package/dist/cdn/foxy-integration-card.js +1 -1
  47. package/dist/cdn/foxy-integration-form.js +1 -1
  48. package/dist/cdn/foxy-item-card.js +1 -1
  49. package/dist/cdn/foxy-item-category-card.js +1 -1
  50. package/dist/cdn/foxy-item-category-form.js +1 -1
  51. package/dist/cdn/foxy-item-form.js +1 -1
  52. package/dist/cdn/foxy-item-option-card.js +1 -1
  53. package/dist/cdn/foxy-item-option-form.js +1 -1
  54. package/dist/cdn/foxy-items-form.js +1 -1
  55. package/dist/cdn/foxy-pagination.js +1 -1
  56. package/dist/cdn/foxy-payment-card.js +1 -1
  57. package/dist/cdn/foxy-payment-method-card.js +1 -1
  58. package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
  59. package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
  60. package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
  61. package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
  62. package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
  63. package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
  64. package/dist/cdn/foxy-query-builder.js +1 -1
  65. package/dist/cdn/foxy-report-form.js +2 -2
  66. package/dist/cdn/foxy-reports-table.js +1 -1
  67. package/dist/cdn/foxy-shipment-card.js +3 -2
  68. package/dist/cdn/foxy-shipping-method-card.js +1 -1
  69. package/dist/cdn/foxy-sign-in-form.js +1 -1
  70. package/dist/cdn/foxy-spinner.js +2 -2
  71. package/dist/cdn/foxy-store-card.js +1 -0
  72. package/dist/cdn/foxy-store-form.js +1 -1
  73. package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
  74. package/dist/cdn/foxy-subscription-card.js +1 -1
  75. package/dist/cdn/foxy-subscription-form.js +4 -4
  76. package/dist/cdn/foxy-subscription-settings-form.js +1 -1
  77. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  78. package/dist/cdn/foxy-table.js +1 -1
  79. package/dist/cdn/foxy-tax-card.js +1 -1
  80. package/dist/cdn/foxy-tax-form.js +1 -1
  81. package/dist/cdn/foxy-template-config-form.js +1 -1
  82. package/dist/cdn/foxy-template-form.js +1 -1
  83. package/dist/cdn/foxy-template-set-card.js +1 -1
  84. package/dist/cdn/foxy-template-set-form.js +1 -1
  85. package/dist/cdn/foxy-transaction-card.js +1 -1
  86. package/dist/cdn/foxy-transaction.js +1 -1
  87. package/dist/cdn/foxy-transactions-table.js +6 -6
  88. package/dist/cdn/foxy-user-card.js +1 -0
  89. package/dist/cdn/foxy-user-form.js +1 -1
  90. package/dist/cdn/foxy-users-table.js +1 -1
  91. package/dist/cdn/foxy-webhook-card.js +1 -1
  92. package/dist/cdn/foxy-webhook-form.js +1 -1
  93. package/dist/cdn/foxy-webhook-log-card.js +1 -1
  94. package/dist/cdn/foxy-webhook-status-card.js +1 -1
  95. package/dist/cdn/{shared-5378bd8c.js → shared-01e0a79c.js} +1 -1
  96. package/dist/cdn/{shared-f7e4cd67.js → shared-0327faba.js} +1 -1
  97. package/dist/cdn/{shared-5ea18e60.js → shared-083622c5.js} +1 -1
  98. package/dist/cdn/{shared-6cb1015f.js → shared-0b1ffad9.js} +1 -1
  99. package/dist/cdn/shared-118ec530.js +1 -0
  100. package/dist/cdn/{shared-62c088b7.js → shared-18569685.js} +1 -1
  101. package/dist/cdn/shared-18aec36f.js +1 -0
  102. package/dist/cdn/{shared-a01b5597.js → shared-1e27ecef.js} +1 -1
  103. package/dist/cdn/{shared-62d636b5.js → shared-203b10f4.js} +1 -1
  104. package/dist/cdn/{shared-d8dc97f0.js → shared-2be4c804.js} +1 -1
  105. package/dist/cdn/shared-2d2dd2fa.js +1 -0
  106. package/dist/cdn/{shared-08156595.js → shared-2e34b6f3.js} +1 -1
  107. package/dist/cdn/{shared-9f436277.js → shared-3d9c4ca7.js} +1 -1
  108. package/dist/cdn/{shared-bc814810.js → shared-3f814c12.js} +1 -1
  109. package/dist/cdn/{shared-8c11a711.js → shared-40ceb4b6.js} +1 -1
  110. package/dist/cdn/shared-522fcb23.js +1 -0
  111. package/dist/cdn/{shared-ee5a7812.js → shared-558a9b8a.js} +1 -1
  112. package/dist/cdn/{shared-2092d86f.js → shared-5616c0d2.js} +1 -1
  113. package/dist/cdn/{shared-404aa9cc.js → shared-573c1e43.js} +1 -1
  114. package/dist/cdn/{shared-be66c2e7.js → shared-59270327.js} +1 -1
  115. package/dist/cdn/{shared-5c804971.js → shared-594848f3.js} +1 -1
  116. package/dist/cdn/{shared-61e74612.js → shared-5dc0d461.js} +5 -5
  117. package/dist/cdn/{shared-ed0dee03.js → shared-60fae9ab.js} +3 -3
  118. package/dist/cdn/{shared-7097364f.js → shared-6192121c.js} +1 -1
  119. package/dist/cdn/{shared-242b3ee9.js → shared-63133859.js} +1 -1
  120. package/dist/cdn/{shared-ca87cf22.js → shared-65253f91.js} +1 -1
  121. package/dist/cdn/{shared-88c4cfec.js → shared-7351db30.js} +1 -1
  122. package/dist/cdn/{shared-d807ae5c.js → shared-740ad9e6.js} +2 -2
  123. package/dist/cdn/{shared-d3bf404a.js → shared-77530b46.js} +1 -1
  124. package/dist/cdn/{shared-81f9dc9a.js → shared-79ed860e.js} +1 -1
  125. package/dist/cdn/shared-8955b88b.js +82 -0
  126. package/dist/cdn/{shared-71d8d167.js → shared-89af5026.js} +1 -1
  127. package/dist/cdn/{shared-3dbe9aaa.js → shared-8b4c0403.js} +1 -1
  128. package/dist/cdn/shared-90e96bea.js +1 -0
  129. package/dist/cdn/{shared-639c666f.js → shared-93252c06.js} +1 -1
  130. package/dist/cdn/shared-9cc0b441.js +1 -0
  131. package/dist/cdn/{shared-83596b46.js → shared-9fcc093e.js} +1 -1
  132. package/dist/cdn/{shared-cbdf08d8.js → shared-a12723f2.js} +1 -1
  133. package/dist/cdn/{shared-2cc638ad.js → shared-a14b401b.js} +2 -2
  134. package/dist/cdn/{shared-4849ef5b.js → shared-a622c91a.js} +1 -1
  135. package/dist/cdn/{shared-7d4fb1a2.js → shared-a9a49319.js} +1 -1
  136. package/dist/cdn/{shared-5a4829e3.js → shared-abf20a0e.js} +1 -1
  137. package/dist/cdn/{shared-454f172e.js → shared-afc4b9ad.js} +1 -1
  138. package/dist/cdn/{shared-747b6d74.js → shared-b10c7b82.js} +1 -1
  139. package/dist/cdn/{shared-8f8abcd6.js → shared-b3bc4a12.js} +1 -1
  140. package/dist/cdn/{shared-bd252323.js → shared-b4d435fb.js} +1 -1
  141. package/dist/cdn/shared-c108e672.js +1 -0
  142. package/dist/cdn/{shared-0ce006b9.js → shared-d1aefbeb.js} +1 -1
  143. package/dist/cdn/{shared-a2d619b4.js → shared-d39285f6.js} +1 -1
  144. package/dist/cdn/{shared-3d241b7f.js → shared-d411ad01.js} +1 -1
  145. package/dist/cdn/{shared-f621ccee.js → shared-e21b7917.js} +2 -2
  146. package/dist/cdn/{shared-e262920d.js → shared-e8eaf692.js} +1 -1
  147. package/dist/cdn/{shared-be99323d.js → shared-eb29e8ef.js} +1 -1
  148. package/dist/cdn/{shared-08e27fe9.js → shared-ee3fd376.js} +1 -1
  149. package/dist/cdn/{shared-6f5c3101.js → shared-f885ce63.js} +1 -1
  150. package/dist/cdn/{shared-274c49b0.js → shared-f9b50bcb.js} +1 -1
  151. package/dist/cdn/{shared-c8f5c306.js → shared-fbd5a173.js} +1 -1
  152. package/dist/cdn/translations/store-card/en.json +7 -0
  153. package/dist/cdn/translations/subscription-form/en.json +7 -0
  154. package/dist/cdn/translations/user-card/en.json +8 -0
  155. package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.d.ts +3 -1
  156. package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.js +27 -11
  157. package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.js.map +1 -1
  158. package/dist/elements/internal/InternalDetails/InternalDetails.js +1 -1
  159. package/dist/elements/internal/InternalDetails/InternalDetails.js.map +1 -1
  160. package/dist/elements/internal/InternalEditableListControl/index.d.ts +2 -0
  161. package/dist/elements/internal/InternalEditableListControl/index.js +2 -0
  162. package/dist/elements/internal/InternalEditableListControl/index.js.map +1 -1
  163. package/dist/elements/private/Dialog/Dialog.d.ts +3 -0
  164. package/dist/elements/private/Dialog/Dialog.js +24 -3
  165. package/dist/elements/private/Dialog/Dialog.js.map +1 -1
  166. package/dist/elements/private/Dialog/DialogWindow.d.ts +11 -3
  167. package/dist/elements/private/Dialog/DialogWindow.js +15 -1
  168. package/dist/elements/private/Dialog/DialogWindow.js.map +1 -1
  169. package/dist/elements/private/Page/Page.js +1 -1
  170. package/dist/elements/private/Page/Page.js.map +1 -1
  171. package/dist/elements/private/Section/Section.js +1 -1
  172. package/dist/elements/private/Section/Section.js.map +1 -1
  173. package/dist/elements/private/Switch/Switch.js +1 -1
  174. package/dist/elements/private/Switch/Switch.js.map +1 -1
  175. package/dist/elements/private/Tabs/Tabs.js +1 -1
  176. package/dist/elements/private/Tabs/Tabs.js.map +1 -1
  177. package/dist/elements/public/AddressCard/AddressCard.js +1 -1
  178. package/dist/elements/public/AddressCard/AddressCard.js.map +1 -1
  179. package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.js +1 -1
  180. package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.js.map +1 -1
  181. package/dist/elements/public/ApiBrowser/internal/InternalApiBrowserResourceForm/InternalApiBrowserResourceForm.js +2 -2
  182. package/dist/elements/public/ApiBrowser/internal/InternalApiBrowserResourceForm/InternalApiBrowserResourceForm.js.map +1 -1
  183. package/dist/elements/public/CartCard/CartCard.js +1 -1
  184. package/dist/elements/public/CartCard/CartCard.js.map +1 -1
  185. package/dist/elements/public/CartForm/CartForm.js +4 -4
  186. package/dist/elements/public/CartForm/CartForm.js.map +1 -1
  187. package/dist/elements/public/CouponCard/CouponCard.js +1 -1
  188. package/dist/elements/public/CouponCard/CouponCard.js.map +1 -1
  189. package/dist/elements/public/CouponForm/CouponForm.js +3 -3
  190. package/dist/elements/public/CouponForm/CouponForm.js.map +1 -1
  191. package/dist/elements/public/CustomFieldCard/TwoLineCard.js +1 -1
  192. package/dist/elements/public/CustomFieldCard/TwoLineCard.js.map +1 -1
  193. package/dist/elements/public/Customer/Customer.js +4 -4
  194. package/dist/elements/public/Customer/Customer.js.map +1 -1
  195. package/dist/elements/public/CustomerCard/CustomerCard.js +13 -2
  196. package/dist/elements/public/CustomerCard/CustomerCard.js.map +1 -1
  197. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedOutView.js +2 -2
  198. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedOutView.js.map +1 -1
  199. package/dist/elements/public/CustomerPortal/InternalCustomerPortalSubscriptions.js +2 -2
  200. package/dist/elements/public/CustomerPortal/InternalCustomerPortalSubscriptions.js.map +1 -1
  201. package/dist/elements/public/CustomerPortal/InternalCustomerPortalTransactions.js +1 -1
  202. package/dist/elements/public/CustomerPortal/InternalCustomerPortalTransactions.js.map +1 -1
  203. package/dist/elements/public/DiscountBuilder/DiscountBuilder.js +3 -3
  204. package/dist/elements/public/DiscountBuilder/DiscountBuilder.js.map +1 -1
  205. package/dist/elements/public/ErrorEntryCard/ErrorEntryCard.js +4 -4
  206. package/dist/elements/public/ErrorEntryCard/ErrorEntryCard.js.map +1 -1
  207. package/dist/elements/public/GiftCardCard/GiftCardCard.js +1 -1
  208. package/dist/elements/public/GiftCardCard/GiftCardCard.js.map +1 -1
  209. package/dist/elements/public/GiftCardCodeLogCard/GiftCardCodeLogCard.js +1 -1
  210. package/dist/elements/public/GiftCardCodeLogCard/GiftCardCodeLogCard.js.map +1 -1
  211. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/InternalI18nEditorEntry.js +3 -3
  212. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/InternalI18nEditorEntry.js.map +1 -1
  213. package/dist/elements/public/IntegrationCard/IntegrationCard.js +3 -3
  214. package/dist/elements/public/IntegrationCard/IntegrationCard.js.map +1 -1
  215. package/dist/elements/public/IntegrationForm/IntegrationForm.js +3 -3
  216. package/dist/elements/public/IntegrationForm/IntegrationForm.js.map +1 -1
  217. package/dist/elements/public/ItemCard/ItemCard.js +1 -1
  218. package/dist/elements/public/ItemCard/ItemCard.js.map +1 -1
  219. package/dist/elements/public/PaymentCard/PaymentCard.js +3 -3
  220. package/dist/elements/public/PaymentCard/PaymentCard.js.map +1 -1
  221. package/dist/elements/public/PaymentsApiFraudProtectionForm/PaymentsApiFraudProtectionForm.js +3 -3
  222. package/dist/elements/public/PaymentsApiFraudProtectionForm/PaymentsApiFraudProtectionForm.js.map +1 -1
  223. package/dist/elements/public/PaymentsApiPaymentMethodForm/PaymentsApiPaymentMethodForm.js +4 -4
  224. package/dist/elements/public/PaymentsApiPaymentMethodForm/PaymentsApiPaymentMethodForm.js.map +1 -1
  225. package/dist/elements/public/QueryBuilder/components/Group.js +1 -1
  226. package/dist/elements/public/QueryBuilder/components/Group.js.map +1 -1
  227. package/dist/elements/public/ReportsTable/ReportsTable.js +1 -1
  228. package/dist/elements/public/ReportsTable/ReportsTable.js.map +1 -1
  229. package/dist/elements/public/ShipmentCard/ShipmentCard.d.ts +0 -1
  230. package/dist/elements/public/ShipmentCard/ShipmentCard.js +18 -19
  231. package/dist/elements/public/ShipmentCard/ShipmentCard.js.map +1 -1
  232. package/dist/elements/public/ShipmentCard/index.d.ts +2 -1
  233. package/dist/elements/public/ShipmentCard/index.js +2 -1
  234. package/dist/elements/public/ShipmentCard/index.js.map +1 -1
  235. package/dist/elements/public/ShippingMethodCard/ShippingMethodCard.js +1 -1
  236. package/dist/elements/public/ShippingMethodCard/ShippingMethodCard.js.map +1 -1
  237. package/dist/elements/public/SignInForm/SignInForm.js +1 -1
  238. package/dist/elements/public/SignInForm/SignInForm.js.map +1 -1
  239. package/dist/elements/public/StoreCard/StoreCard.d.ts +26 -0
  240. package/dist/elements/public/StoreCard/StoreCard.js +41 -0
  241. package/dist/elements/public/StoreCard/StoreCard.js.map +1 -0
  242. package/dist/elements/public/StoreCard/index.d.ts +5 -0
  243. package/dist/elements/public/StoreCard/index.js +7 -0
  244. package/dist/elements/public/StoreCard/index.js.map +1 -0
  245. package/dist/elements/public/StoreCard/types.d.ts +3 -0
  246. package/dist/elements/public/StoreCard/types.js +2 -0
  247. package/dist/elements/public/StoreCard/types.js.map +1 -0
  248. package/dist/elements/public/StoreForm/StoreForm.js +1 -1
  249. package/dist/elements/public/StoreForm/StoreForm.js.map +1 -1
  250. package/dist/elements/public/SubscriptionCard/SubscriptionCard.js +2 -2
  251. package/dist/elements/public/SubscriptionCard/SubscriptionCard.js.map +1 -1
  252. package/dist/elements/public/SubscriptionForm/SubscriptionForm.d.ts +3 -1
  253. package/dist/elements/public/SubscriptionForm/SubscriptionForm.js +39 -5
  254. package/dist/elements/public/SubscriptionForm/SubscriptionForm.js.map +1 -1
  255. package/dist/elements/public/SubscriptionForm/index.d.ts +1 -0
  256. package/dist/elements/public/SubscriptionForm/index.js +1 -0
  257. package/dist/elements/public/SubscriptionForm/index.js.map +1 -1
  258. package/dist/elements/public/SubscriptionForm/types.d.ts +1 -0
  259. package/dist/elements/public/SubscriptionForm/types.js.map +1 -1
  260. package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js +4 -4
  261. package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js.map +1 -1
  262. package/dist/elements/public/TaxCard/TaxCard.js +1 -1
  263. package/dist/elements/public/TaxCard/TaxCard.js.map +1 -1
  264. package/dist/elements/public/Transaction/internal/InternalTransactionSummaryControl/InternalTransactionSummaryControl.js +2 -2
  265. package/dist/elements/public/Transaction/internal/InternalTransactionSummaryControl/InternalTransactionSummaryControl.js.map +1 -1
  266. package/dist/elements/public/TransactionCard/TransactionCard.js +1 -1
  267. package/dist/elements/public/TransactionCard/TransactionCard.js.map +1 -1
  268. package/dist/elements/public/TransactionsTable/TransactionsTable.js +5 -5
  269. package/dist/elements/public/TransactionsTable/TransactionsTable.js.map +1 -1
  270. package/dist/elements/public/UserCard/UserCard.d.ts +22 -0
  271. package/dist/elements/public/UserCard/UserCard.js +29 -0
  272. package/dist/elements/public/UserCard/UserCard.js.map +1 -0
  273. package/dist/elements/public/UserCard/index.d.ts +5 -0
  274. package/dist/elements/public/UserCard/index.js +7 -0
  275. package/dist/elements/public/UserCard/index.js.map +1 -0
  276. package/dist/elements/public/UserCard/types.d.ts +3 -0
  277. package/dist/elements/public/UserCard/types.js +2 -0
  278. package/dist/elements/public/UserCard/types.js.map +1 -0
  279. package/dist/elements/public/UserForm/UserForm.d.ts +32 -9
  280. package/dist/elements/public/UserForm/UserForm.js +116 -82
  281. package/dist/elements/public/UserForm/UserForm.js.map +1 -1
  282. package/dist/elements/public/UserForm/index.d.ts +1 -0
  283. package/dist/elements/public/UserForm/index.js +1 -0
  284. package/dist/elements/public/UserForm/index.js.map +1 -1
  285. package/dist/elements/public/UserForm/types.d.ts +22 -3
  286. package/dist/elements/public/UserForm/types.js.map +1 -1
  287. package/dist/elements/public/WebhookCard/WebhookCard.js +1 -1
  288. package/dist/elements/public/WebhookCard/WebhookCard.js.map +1 -1
  289. package/dist/elements/public/WebhookLogCard/WebhookLogCard.js +1 -1
  290. package/dist/elements/public/WebhookLogCard/WebhookLogCard.js.map +1 -1
  291. package/dist/elements/public/WebhookStatusCard/WebhookStatusCard.js +1 -1
  292. package/dist/elements/public/WebhookStatusCard/WebhookStatusCard.js.map +1 -1
  293. package/dist/elements/public/index.d.ts +2 -0
  294. package/dist/elements/public/index.defined.d.ts +2 -0
  295. package/dist/elements/public/index.defined.js +2 -0
  296. package/dist/elements/public/index.defined.js.map +1 -1
  297. package/dist/elements/public/index.js +2 -0
  298. package/dist/elements/public/index.js.map +1 -1
  299. package/dist/mixins/themeable.js +8 -8
  300. package/dist/mixins/themeable.js.map +1 -1
  301. package/package.json +2 -2
  302. package/dist/cdn/shared-1433fc29.js +0 -1
  303. package/dist/cdn/shared-45926e43.js +0 -1
  304. package/dist/cdn/shared-94fc438b.js +0 -1
  305. package/dist/cdn/shared-9f905d9f.js +0 -1
  306. package/dist/cdn/shared-a29b600a.js +0 -1
  307. package/dist/cdn/shared-c6a01446.js +0 -1
  308. package/dist/cdn/shared-efc1aeae.js +0 -1
@@ -20,7 +20,6 @@ export declare class ShipmentCard extends Base<Data> {
20
20
  __editable: boolean;
21
21
  __currency: string;
22
22
  __coupons: string;
23
- get hiddenSelector(): BooleanSelector;
24
23
  get readonlySelector(): BooleanSelector;
25
24
  renderBody(): TemplateResult;
26
25
  protected _sendGet(): Promise<Data>;
@@ -33,9 +33,6 @@ export class ShipmentCard extends Base {
33
33
  __coupons: { attribute: false },
34
34
  };
35
35
  }
36
- get hiddenSelector() {
37
- return new BooleanSelector(`address:not=full-address ${super.hiddenSelector.toString()}`);
38
- }
39
36
  get readonlySelector() {
40
37
  return this.__editable ? super.readonlySelector : BooleanSelector.True;
41
38
  }
@@ -60,33 +57,35 @@ export class ShipmentCard extends Base {
60
57
  parent=${dialog.parent}
61
58
  href=${dialog.href}
62
59
  infer=""
60
+ id="form"
63
61
  @fetch=${handleFetch}
64
62
  @update=${handleUpdate}
65
63
  >
66
64
  </foxy-item-form>
67
65
  `;
66
+ const { address_name, address1, address2, city, region, postal_code } = (_a = this.data) !== null && _a !== void 0 ? _a : {};
67
+ const addressOptions = { address_name, address1, address2, city, region, postal_code };
68
+ const amount = `${(_b = this.data) === null || _b === void 0 ? void 0 : _b.total_shipping} ${this.__currency}`;
69
+ const currencyDisplay = this.__currencyDisplay;
70
+ const priceOptions = { amount, currencyDisplay };
68
71
  return html `
69
72
  <div class="space-y-m">
70
- <foxy-address-card
71
- infer="address"
72
- href=${ifDefined((_a = this.data) === null || _a === void 0 ? void 0 : _a._links['fx:customer_address'].href)}
73
- >
74
- <div slot="full-address:after" class="flex items-center text-m space-x-s text-secondary">
73
+ <div>
74
+ <div class="flex items-center text-m space-x-s text-secondary">
75
+ <iron-icon icon="maps:place" class="icon-inline flex-shrink-0"></iron-icon>
76
+ <span class="truncate">
77
+ <foxy-i18n infer="address" key="full_address" .options=${addressOptions}></foxy-i18n>
78
+ </span>
79
+ </div>
80
+
81
+ <div class="flex items-center text-m space-x-s text-secondary">
75
82
  <iron-icon icon="maps:local-shipping" class="icon-inline flex-shrink-0"></iron-icon>
76
83
  <span class="truncate">
77
- ${(_b = this.data) === null || _b === void 0 ? void 0 : _b.shipping_service_description} &bull;
78
- <foxy-i18n
79
- options=${JSON.stringify({
80
- amount: `${(_c = this.data) === null || _c === void 0 ? void 0 : _c.total_shipping} ${this.__currency}`,
81
- currencyDisplay: this.__currencyDisplay,
82
- })}
83
- key="price"
84
- infer=""
85
- >
86
- </foxy-i18n>
84
+ ${(_c = this.data) === null || _c === void 0 ? void 0 : _c.shipping_service_description} &bull;
85
+ <foxy-i18n key="price" infer="address" .options=${priceOptions}></foxy-i18n>
87
86
  </span>
88
87
  </div>
89
- </foxy-address-card>
88
+ </div>
90
89
 
91
90
  <foxy-internal-async-details-control
92
91
  infer="items"
@@ -1 +1 @@
1
- {"version":3,"file":"ShipmentCard.js","sourceRoot":"","sources":["../../../../src/elements/public/ShipmentCard/ShipmentCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TemplateResult } from 'lit-html';\nimport type { Data } from './types';\n\nimport { html } from 'lit-html';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector, Resource } from '@foxy.io/sdk/core';\nimport { Rels } from '@foxy.io/sdk/backend';\nimport { PropertyDeclarations } from 'lit-element';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { FormRenderer } from '../FormDialog/types';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\n\nconst NS = 'shipment-card';\nconst Base = ConfigurableMixin(TranslatableMixin(InternalCard, NS));\n\n/**\n * Basic card displaying a shipment.\n *\n * @element foxy-shipment-card\n * @since 1.17.0\n */\nexport class ShipmentCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __customerAddresses: { attribute: false },\n __currencyDisplay: { attribute: false },\n __itemCategories: { attribute: false },\n __editable: { attribute: false },\n __currency: { attribute: false },\n __coupons: { attribute: false },\n };\n }\n\n __customerAddresses = '';\n\n __currencyDisplay = '';\n\n __itemCategories = '';\n\n __editable = false;\n\n __currency = '';\n\n __coupons = '';\n\n get hiddenSelector(): BooleanSelector {\n return new BooleanSelector(`address:not=full-address ${super.hiddenSelector.toString()}`);\n }\n\n get readonlySelector(): BooleanSelector {\n return this.__editable ? super.readonlySelector : BooleanSelector.True;\n }\n\n renderBody(): TemplateResult {\n let itemsLink: string | undefined = undefined;\n\n if (this.data) {\n try {\n const url = new URL(this.data._links['fx:items'].href);\n url.searchParams.set('zoom', 'item_options');\n itemsLink = url.toString();\n } catch {\n //\n }\n }\n\n const itemFormRenderer: FormRenderer = ({ html, dialog, handleFetch, handleUpdate }) => html`\n <foxy-item-form\n customer-addresses=${this.__customerAddresses}\n item-categories=${this.__itemCategories}\n coupons=${this.__coupons}\n parent=${dialog.parent}\n href=${dialog.href}\n infer=\"\"\n @fetch=${handleFetch}\n @update=${handleUpdate}\n >\n </foxy-item-form>\n `;\n\n return html`\n <div class=\"space-y-m\">\n <foxy-address-card\n infer=\"address\"\n href=${ifDefined(this.data?._links['fx:customer_address'].href)}\n >\n <div slot=\"full-address:after\" class=\"flex items-center text-m space-x-s text-secondary\">\n <iron-icon icon=\"maps:local-shipping\" class=\"icon-inline flex-shrink-0\"></iron-icon>\n <span class=\"truncate\">\n ${this.data?.shipping_service_description} &bull;\n <foxy-i18n\n options=${JSON.stringify({\n amount: `${this.data?.total_shipping} ${this.__currency}`,\n currencyDisplay: this.__currencyDisplay,\n })}\n key=\"price\"\n infer=\"\"\n >\n </foxy-i18n>\n </span>\n </div>\n </foxy-address-card>\n\n <foxy-internal-async-details-control\n infer=\"items\"\n first=${ifDefined(itemsLink)}\n limit=\"5\"\n item=\"foxy-item-card\"\n open\n .form=${itemFormRenderer as any}\n >\n </foxy-internal-async-details-control>\n </div>\n `;\n }\n\n protected async _sendGet(): Promise<Data> {\n type Transaction = Resource<Rels.Transaction>;\n type Customer = Resource<Rels.Customer>;\n type Store = Resource<Rels.Store>;\n\n const shipment = await super._sendGet();\n const [transaction, customer, store] = await Promise.all([\n super._fetch<Transaction>(shipment._links['fx:transaction'].href),\n super._fetch<Customer>(shipment._links['fx:customer'].href),\n super._fetch<Store>(shipment._links['fx:store'].href),\n ]);\n\n this.__customerAddresses = customer._links['fx:customer_addresses'].href;\n this.__currencyDisplay = store.use_international_currency_symbol ? 'code' : 'symbol';\n this.__itemCategories = store._links['fx:item_categories'].href;\n this.__currency = transaction.currency_code;\n this.__editable = !!transaction._links['fx:void'] || !!transaction._links['fx:refund'];\n this.__coupons = store._links['fx:coupons'].href;\n\n return shipment;\n }\n}\n"]}
1
+ {"version":3,"file":"ShipmentCard.js","sourceRoot":"","sources":["../../../../src/elements/public/ShipmentCard/ShipmentCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TemplateResult } from 'lit-html';\nimport type { Data } from './types';\n\nimport { html } from 'lit-html';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector, Resource } from '@foxy.io/sdk/core';\nimport { Rels } from '@foxy.io/sdk/backend';\nimport { PropertyDeclarations } from 'lit-element';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { FormRenderer } from '../FormDialog/types';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\n\nconst NS = 'shipment-card';\nconst Base = ConfigurableMixin(TranslatableMixin(InternalCard, NS));\n\n/**\n * Basic card displaying a shipment.\n *\n * @element foxy-shipment-card\n * @since 1.17.0\n */\nexport class ShipmentCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __customerAddresses: { attribute: false },\n __currencyDisplay: { attribute: false },\n __itemCategories: { attribute: false },\n __editable: { attribute: false },\n __currency: { attribute: false },\n __coupons: { attribute: false },\n };\n }\n\n __customerAddresses = '';\n\n __currencyDisplay = '';\n\n __itemCategories = '';\n\n __editable = false;\n\n __currency = '';\n\n __coupons = '';\n\n get readonlySelector(): BooleanSelector {\n return this.__editable ? super.readonlySelector : BooleanSelector.True;\n }\n\n renderBody(): TemplateResult {\n let itemsLink: string | undefined = undefined;\n\n if (this.data) {\n try {\n const url = new URL(this.data._links['fx:items'].href);\n url.searchParams.set('zoom', 'item_options');\n itemsLink = url.toString();\n } catch {\n //\n }\n }\n\n const itemFormRenderer: FormRenderer = ({ html, dialog, handleFetch, handleUpdate }) => html`\n <foxy-item-form\n customer-addresses=${this.__customerAddresses}\n item-categories=${this.__itemCategories}\n coupons=${this.__coupons}\n parent=${dialog.parent}\n href=${dialog.href}\n infer=\"\"\n id=\"form\"\n @fetch=${handleFetch}\n @update=${handleUpdate}\n >\n </foxy-item-form>\n `;\n\n const { address_name, address1, address2, city, region, postal_code } = this.data ?? {};\n const addressOptions = { address_name, address1, address2, city, region, postal_code };\n\n const amount = `${this.data?.total_shipping} ${this.__currency}`;\n const currencyDisplay = this.__currencyDisplay;\n const priceOptions = { amount, currencyDisplay };\n\n return html`\n <div class=\"space-y-m\">\n <div>\n <div class=\"flex items-center text-m space-x-s text-secondary\">\n <iron-icon icon=\"maps:place\" class=\"icon-inline flex-shrink-0\"></iron-icon>\n <span class=\"truncate\">\n <foxy-i18n infer=\"address\" key=\"full_address\" .options=${addressOptions}></foxy-i18n>\n </span>\n </div>\n\n <div class=\"flex items-center text-m space-x-s text-secondary\">\n <iron-icon icon=\"maps:local-shipping\" class=\"icon-inline flex-shrink-0\"></iron-icon>\n <span class=\"truncate\">\n ${this.data?.shipping_service_description} &bull;\n <foxy-i18n key=\"price\" infer=\"address\" .options=${priceOptions}></foxy-i18n>\n </span>\n </div>\n </div>\n\n <foxy-internal-async-details-control\n infer=\"items\"\n first=${ifDefined(itemsLink)}\n limit=\"5\"\n item=\"foxy-item-card\"\n open\n .form=${itemFormRenderer as any}\n >\n </foxy-internal-async-details-control>\n </div>\n `;\n }\n\n protected async _sendGet(): Promise<Data> {\n type Transaction = Resource<Rels.Transaction>;\n type Customer = Resource<Rels.Customer>;\n type Store = Resource<Rels.Store>;\n\n const shipment = await super._sendGet();\n const [transaction, customer, store] = await Promise.all([\n super._fetch<Transaction>(shipment._links['fx:transaction'].href),\n super._fetch<Customer>(shipment._links['fx:customer'].href),\n super._fetch<Store>(shipment._links['fx:store'].href),\n ]);\n\n this.__customerAddresses = customer._links['fx:customer_addresses'].href;\n this.__currencyDisplay = store.use_international_currency_symbol ? 'code' : 'symbol';\n this.__itemCategories = store._links['fx:item_categories'].href;\n this.__currency = transaction.currency_code;\n this.__editable = !!transaction._links['fx:void'] || !!transaction._links['fx:refund'];\n this.__coupons = store._links['fx:coupons'].href;\n\n return shipment;\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
- import '../AddressCard/index';
1
+ import '@polymer/iron-icons/maps-icons';
2
+ import '@polymer/iron-icon';
2
3
  import '../ItemForm/index';
3
4
  import '../ItemCard/index';
4
5
  import '../I18n/index';
@@ -1,4 +1,5 @@
1
- import "../AddressCard/index.js";
1
+ import '@polymer/iron-icons/maps-icons';
2
+ import '@polymer/iron-icon';
2
3
  import "../ItemForm/index.js";
3
4
  import "../ItemCard/index.js";
4
5
  import "../I18n/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/ShipmentCard/index.ts"],"names":[],"mappings":"AAAA,iCAA8B;AAC9B,8BAA2B;AAC3B,8BAA2B;AAC3B,0BAAuB;AAEvB,6DAA0D;AAC1D,8CAA2C;AAE3C,OAAO,EAAE,YAAY,EAAE,0BAAuB;AAE9C,cAAc,CAAC,MAAM,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import '../AddressCard/index';\nimport '../ItemForm/index';\nimport '../ItemCard/index';\nimport '../I18n/index';\n\nimport '../../internal/InternalAsyncDetailsControl/index';\nimport '../../internal/InternalCard/index';\n\nimport { ShipmentCard } from './ShipmentCard';\n\ncustomElements.define('foxy-shipment-card', ShipmentCard);\n\nexport { ShipmentCard };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/ShipmentCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,oBAAoB,CAAC;AAE5B,8BAA2B;AAC3B,8BAA2B;AAC3B,0BAAuB;AAEvB,6DAA0D;AAC1D,8CAA2C;AAE3C,OAAO,EAAE,YAAY,EAAE,0BAAuB;AAE9C,cAAc,CAAC,MAAM,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import '@polymer/iron-icons/maps-icons';\nimport '@polymer/iron-icon';\n\nimport '../ItemForm/index';\nimport '../ItemCard/index';\nimport '../I18n/index';\n\nimport '../../internal/InternalAsyncDetailsControl/index';\nimport '../../internal/InternalCard/index';\n\nimport { ShipmentCard } from './ShipmentCard';\n\ncustomElements.define('foxy-shipment-card', ShipmentCard);\n\nexport { ShipmentCard };\n"]}
@@ -59,7 +59,7 @@ export class ShippingMethodCard extends Base {
59
59
  />
60
60
 
61
61
  <figcaption class="min-w-0 flex-1 flex justify-between gap-s">
62
- <span class="font-semibold truncate flex-shrink-0">${data === null || data === void 0 ? void 0 : data.name}&ZeroWidthSpace;</span>
62
+ <span class="font-medium truncate flex-shrink-0">${data === null || data === void 0 ? void 0 : data.name}&ZeroWidthSpace;</span>
63
63
  ${isActive
64
64
  ? html `
65
65
  <foxy-i18n infer="" class="truncate text-tertiary" key="status_active"></foxy-i18n>
@@ -1 +1 @@
1
- {"version":3,"file":"ShippingMethodCard.js","sourceRoot":"","sources":["../../../../src/elements/public/ShippingMethodCard/ShippingMethodCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Data, StoreShippingMethods } from './types';\nimport type { PropertyDeclarations } from 'lit-element';\nimport type { NucleonElement } from '../NucleonElement/NucleonElement';\nimport type { TemplateResult } from 'lit-html';\nimport type { Resource } from '@foxy.io/sdk/core';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\nconst NS = 'shipping-method-card';\nconst Base = TranslatableMixin(InternalCard, NS);\n\n/**\n * Card element representing a shipping method (`fx:shipping_method`).\n *\n * @element foxy-shipping-method-card\n * @since 1.21.0\n */\nexport class ShippingMethodCard extends Base<Data> {\n static get defaultImageSrc(): string {\n return \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' fill='none' viewBox='0 0 40 40'%3E%3Cg clip-path='url(%23a)'%3E%3Cpath fill='%23E8E8E8' d='M0 0h40v40H0z'/%3E%3Cpath fill='%23fff' d='M0 14.81V7.88L7.88 0h6.93L0 14.81ZM0 0h6.47L0 6.47V0Zm16.22 0L0 16.22v6.93l9-9V14c0-.55.2-1.02.59-1.41.39-.4.86-.59 1.41-.59h.15l12-12h-6.93ZM9 15.57l-9 9v6.93l9-9v-6.93Zm.15 8.19L0 32.91v6.93l12.33-12.33a3.28 3.28 0 0 1-.46-.39A2.9 2.9 0 0 1 11 25c-.55 0-1.02-.2-1.41-.59a2 2 0 0 1-.44-.65Zm4.17 4.17L1.26 40h6.92L23 25.18V25h-6c0 .83-.3 1.54-.88 2.13A2.9 2.9 0 0 1 14 28a3.2 3.2 0 0 1-.68-.07Zm11.85-3.5.26-.26A.98.98 0 0 1 26 24c.28 0 .52.1.71.29.2.19.29.43.29.71 0 .28-.1.52-.29.71A.94.94 0 0 1 26 26a.97.97 0 0 1-.71-.29A.97.97 0 0 1 25 25a1 1 0 0 1 .17-.57Z'/%3E%3Cpath fill='%23fff' d='M23.29 26.31 9.59 40h6.94L40 16.53V9.6l-9.6 9.6.4.53c.07.08.12.17.15.27s.05.2.05.32V24c0 .28-.1.52-.29.71A.94.94 0 0 1 30 25h-1c0 .83-.3 1.54-.88 2.13A2.9 2.9 0 0 1 26 28a3 3 0 0 1-2.71-1.69Zm6.51-7.92L40 8.19V1.25L25.26 16h2.24a1 1 0 0 1 .45.1 1 1 0 0 1 .35.3l1.5 1.99ZM25 14.84 39.84 0h-6.93l-12 12H23c.55 0 1.02.2 1.41.59.4.39.59.86.59 1.41v.84ZM19.5 12l12-12h-6.93l-12 12h6.93Zm-1.56 28L40 17.94v6.93L24.87 40h-6.93ZM40 26.29 26.29 40h6.93L40 33.22v-6.93ZM34.63 40 40 34.63V40h-5.37ZM13 25c0 .28.1.52.29.71.19.2.43.29.71.29.28 0 .52-.1.71-.29.2-.19.29-.43.29-.71 0-.28-.1-.52-.29-.71A.97.97 0 0 0 14 24c-.07 0-.14 0-.2.02a.95.95 0 0 0-.51.27.95.95 0 0 0-.29.71Z'/%3E%3Cpath fill='%23fff' d='M25 18v3h4.21l-.85-1.18-.68-.91L27 18h-2Z'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath fill='%23fff' d='M0 0h40v40H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E\";\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n storeShippingMethods: { attribute: 'store-shipping-methods' },\n getImageSrc: { attribute: false },\n };\n }\n\n /**\n * URL of the `fx:store_shipping_methods` collection for a store.\n * If provided, the card will display Active status on active shipping methods.\n */\n storeShippingMethods: string | null = null;\n\n /**\n * Shipping method image/logo URL getter.\n * If left `null`, the card will display the default image.\n */\n getImageSrc: ((type: string) => string) | null = null;\n\n private readonly __storeShippingMethodsLoaderId = 'storeShippingMethods';\n\n renderBody(): TemplateResult {\n const defaultSrc = ShippingMethodCard.defaultImageSrc;\n const isActive = this.__storeShippingMethodsItems?.length === 1;\n const data = this.data;\n\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__storeShippingMethodsHref)}\n id=${this.__storeShippingMethodsLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <figure class=\"flex items-center gap-m h-m\">\n <img\n class=\"relative h-s w-s object-cover rounded-full bg-contrast-20 flex-shrink-0 shadow-xs\"\n src=${(data ? this.getImageSrc?.(data.code) : null) ?? defaultSrc}\n alt=${this.t('image_alt')}\n @error=${(evt: Event) => ((evt.currentTarget as HTMLImageElement).src = defaultSrc)}\n />\n\n <figcaption class=\"min-w-0 flex-1 flex justify-between gap-s\">\n <span class=\"font-semibold truncate flex-shrink-0\">${data?.name}&ZeroWidthSpace;</span>\n ${isActive\n ? html`\n <foxy-i18n infer=\"\" class=\"truncate text-tertiary\" key=\"status_active\"></foxy-i18n>\n `\n : ''}\n </figcaption>\n </figure>\n `;\n }\n\n get isBodyReady(): boolean {\n if (!super.isBodyReady) return false;\n return this.storeShippingMethods ? !!this.__storeShippingMethodsItems : true;\n }\n\n private get __storeShippingMethodsHref() {\n try {\n const url = new URL(this.storeShippingMethods!);\n url.searchParams.set('shipping_method_id', this.href.split('/').pop()!);\n url.searchParams.set('limit', '1');\n return url.toString();\n } catch {\n // ignore\n }\n }\n\n private get __storeShippingMethodsLoader() {\n type Loader = NucleonElement<Resource<StoreShippingMethods, { zoom: 'shipping_method' }>>;\n return this.renderRoot.querySelector<Loader>(`#${this.__storeShippingMethodsLoaderId}`);\n }\n\n private get __storeShippingMethodsItems() {\n return this.__storeShippingMethodsLoader?.data?._embedded['fx:store_shipping_methods'];\n }\n}\n"]}
1
+ {"version":3,"file":"ShippingMethodCard.js","sourceRoot":"","sources":["../../../../src/elements/public/ShippingMethodCard/ShippingMethodCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Data, StoreShippingMethods } from './types';\nimport type { PropertyDeclarations } from 'lit-element';\nimport type { NucleonElement } from '../NucleonElement/NucleonElement';\nimport type { TemplateResult } from 'lit-html';\nimport type { Resource } from '@foxy.io/sdk/core';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\nconst NS = 'shipping-method-card';\nconst Base = TranslatableMixin(InternalCard, NS);\n\n/**\n * Card element representing a shipping method (`fx:shipping_method`).\n *\n * @element foxy-shipping-method-card\n * @since 1.21.0\n */\nexport class ShippingMethodCard extends Base<Data> {\n static get defaultImageSrc(): string {\n return \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' fill='none' viewBox='0 0 40 40'%3E%3Cg clip-path='url(%23a)'%3E%3Cpath fill='%23E8E8E8' d='M0 0h40v40H0z'/%3E%3Cpath fill='%23fff' d='M0 14.81V7.88L7.88 0h6.93L0 14.81ZM0 0h6.47L0 6.47V0Zm16.22 0L0 16.22v6.93l9-9V14c0-.55.2-1.02.59-1.41.39-.4.86-.59 1.41-.59h.15l12-12h-6.93ZM9 15.57l-9 9v6.93l9-9v-6.93Zm.15 8.19L0 32.91v6.93l12.33-12.33a3.28 3.28 0 0 1-.46-.39A2.9 2.9 0 0 1 11 25c-.55 0-1.02-.2-1.41-.59a2 2 0 0 1-.44-.65Zm4.17 4.17L1.26 40h6.92L23 25.18V25h-6c0 .83-.3 1.54-.88 2.13A2.9 2.9 0 0 1 14 28a3.2 3.2 0 0 1-.68-.07Zm11.85-3.5.26-.26A.98.98 0 0 1 26 24c.28 0 .52.1.71.29.2.19.29.43.29.71 0 .28-.1.52-.29.71A.94.94 0 0 1 26 26a.97.97 0 0 1-.71-.29A.97.97 0 0 1 25 25a1 1 0 0 1 .17-.57Z'/%3E%3Cpath fill='%23fff' d='M23.29 26.31 9.59 40h6.94L40 16.53V9.6l-9.6 9.6.4.53c.07.08.12.17.15.27s.05.2.05.32V24c0 .28-.1.52-.29.71A.94.94 0 0 1 30 25h-1c0 .83-.3 1.54-.88 2.13A2.9 2.9 0 0 1 26 28a3 3 0 0 1-2.71-1.69Zm6.51-7.92L40 8.19V1.25L25.26 16h2.24a1 1 0 0 1 .45.1 1 1 0 0 1 .35.3l1.5 1.99ZM25 14.84 39.84 0h-6.93l-12 12H23c.55 0 1.02.2 1.41.59.4.39.59.86.59 1.41v.84ZM19.5 12l12-12h-6.93l-12 12h6.93Zm-1.56 28L40 17.94v6.93L24.87 40h-6.93ZM40 26.29 26.29 40h6.93L40 33.22v-6.93ZM34.63 40 40 34.63V40h-5.37ZM13 25c0 .28.1.52.29.71.19.2.43.29.71.29.28 0 .52-.1.71-.29.2-.19.29-.43.29-.71 0-.28-.1-.52-.29-.71A.97.97 0 0 0 14 24c-.07 0-.14 0-.2.02a.95.95 0 0 0-.51.27.95.95 0 0 0-.29.71Z'/%3E%3Cpath fill='%23fff' d='M25 18v3h4.21l-.85-1.18-.68-.91L27 18h-2Z'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath fill='%23fff' d='M0 0h40v40H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E\";\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n storeShippingMethods: { attribute: 'store-shipping-methods' },\n getImageSrc: { attribute: false },\n };\n }\n\n /**\n * URL of the `fx:store_shipping_methods` collection for a store.\n * If provided, the card will display Active status on active shipping methods.\n */\n storeShippingMethods: string | null = null;\n\n /**\n * Shipping method image/logo URL getter.\n * If left `null`, the card will display the default image.\n */\n getImageSrc: ((type: string) => string) | null = null;\n\n private readonly __storeShippingMethodsLoaderId = 'storeShippingMethods';\n\n renderBody(): TemplateResult {\n const defaultSrc = ShippingMethodCard.defaultImageSrc;\n const isActive = this.__storeShippingMethodsItems?.length === 1;\n const data = this.data;\n\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__storeShippingMethodsHref)}\n id=${this.__storeShippingMethodsLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <figure class=\"flex items-center gap-m h-m\">\n <img\n class=\"relative h-s w-s object-cover rounded-full bg-contrast-20 flex-shrink-0 shadow-xs\"\n src=${(data ? this.getImageSrc?.(data.code) : null) ?? defaultSrc}\n alt=${this.t('image_alt')}\n @error=${(evt: Event) => ((evt.currentTarget as HTMLImageElement).src = defaultSrc)}\n />\n\n <figcaption class=\"min-w-0 flex-1 flex justify-between gap-s\">\n <span class=\"font-medium truncate flex-shrink-0\">${data?.name}&ZeroWidthSpace;</span>\n ${isActive\n ? html`\n <foxy-i18n infer=\"\" class=\"truncate text-tertiary\" key=\"status_active\"></foxy-i18n>\n `\n : ''}\n </figcaption>\n </figure>\n `;\n }\n\n get isBodyReady(): boolean {\n if (!super.isBodyReady) return false;\n return this.storeShippingMethods ? !!this.__storeShippingMethodsItems : true;\n }\n\n private get __storeShippingMethodsHref() {\n try {\n const url = new URL(this.storeShippingMethods!);\n url.searchParams.set('shipping_method_id', this.href.split('/').pop()!);\n url.searchParams.set('limit', '1');\n return url.toString();\n } catch {\n // ignore\n }\n }\n\n private get __storeShippingMethodsLoader() {\n type Loader = NucleonElement<Resource<StoreShippingMethods, { zoom: 'shipping_method' }>>;\n return this.renderRoot.querySelector<Loader>(`#${this.__storeShippingMethodsLoaderId}`);\n }\n\n private get __storeShippingMethodsItems() {\n return this.__storeShippingMethodsLoader?.data?._embedded['fx:store_shipping_methods'];\n }\n}\n"]}
@@ -219,7 +219,7 @@ export class SignInForm extends Base {
219
219
  >
220
220
  </qr-code>
221
221
 
222
- <div class="break-all font-semibold leading-s text-xs tracking-widest">
222
+ <div class="break-all font-medium leading-s text-xs tracking-widest">
223
223
  ${mfaSecretCode}
224
224
  </div>
225
225
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"SignInForm.js","sourceRoot":"","sources":["../../../../src/elements/public/SignInForm/SignInForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { Data, Templates } from './types';\nimport { PropertyDeclarations, TemplateResult, html } from 'lit-element';\n\nimport { CheckboxElement } from '@vaadin/vaadin-checkbox';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { EmailFieldElement } from '@vaadin/vaadin-text-field/vaadin-email-field';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { NucleonV8N } from '../NucleonElement/types';\nimport { PasswordFieldElement } from '@vaadin/vaadin-text-field/vaadin-password-field';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { validate as isEmail } from 'email-validator';\n\nconst NS = 'sign-in-form';\nconst Base = ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)));\n\n/**\n * Form element for email/password sign in.\n *\n * @slot email:before\n * @slot email:after\n * @slot password:before\n * @slot password:after\n * @slot new-password:before\n * @slot new-password:after\n * @slot mfa-secret-code:before\n * @slot mfa-secret-code:after\n * @slot mfa-totp-code:before\n * @slot mfa-totp-code:after\n * @slot mfa-remember-device:before\n * @slot mfa-remember-device:after\n * @slot error:before\n * @slot error:after\n * @slot submit:before\n * @slot submit:after\n *\n * @element foxy-sign-in-form\n * @since 1.4.0\n */\nexport class SignInForm extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n issuer: { type: String },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ credential: c }) => !!c?.email || 'email_required',\n ({ credential: c }) => isEmail(c?.email ?? '') || 'email_invalid_email',\n ({ credential: c }) => !!c?.password || 'password_required',\n ({ credential: c }) => (c?.new_password?.length === 0 ? 'new_password_required' : true),\n ({ credential: c }) => (c?.mfa_totp_code?.length === 0 ? 'mfa_totp_code_required' : true),\n ];\n }\n\n templates: Templates = {};\n\n issuer = 'Unknown';\n\n private readonly __emailValidator = () => !this.errors.some(err => err.startsWith('email'));\n\n private readonly __passwordValidator = () => !this.errors.some(err => err.startsWith('password'));\n\n private readonly __newPasswordValidator = () => {\n return !this.errors.some(err => err.startsWith('new_password') && !err.endsWith('_error'));\n };\n\n private readonly __mfaTotpCodeValidator = () => {\n return !this.errors.some(err => err.startsWith('mfa_totp_code') && !err.endsWith('_error'));\n };\n\n private readonly __renderEmail = () => {\n const { disabledSelector, readonlySelector, errors } = this;\n\n const emailError = errors.find(err => err.startsWith('email'));\n const emailErrorKey = emailError?.replace('email', 'v8n');\n const emailErrorMessage = emailErrorKey ? this.t(emailErrorKey).toString() : '';\n\n const isBusy = this.in('busy');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('email:before')}\n\n <vaadin-email-field\n error-message=${emailErrorMessage}\n data-testid=\"email\"\n class=\"w-full mb-m\"\n label=${this.t('email').toString()}\n value=${ifDefined(this.form.credential?.email)}\n ?disabled=${isBusy || disabledSelector.matches('email', true)}\n ?readonly=${readonlySelector.matches('email', true)}\n .checkValidity=${this.__emailValidator}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: InputEvent) => {\n const email = (evt.target as EmailFieldElement).value;\n const password = this.form.credential?.password ?? '';\n this.edit({ credential: { email, password }, type: 'password' });\n }}\n >\n </vaadin-email-field>\n\n ${this.renderTemplateOrSlot('email:after')}\n </div>\n `;\n };\n\n private readonly __renderPassword = () => {\n const { disabledSelector, readonlySelector, errors } = this;\n\n const passwordError = errors.find(err => err.startsWith('password'));\n const passwordErrorKey = passwordError?.replace('password', 'v8n');\n const passwordErrorMessage = passwordErrorKey ? this.t(passwordErrorKey).toString() : '';\n\n const isBusy = this.in('busy');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('password:before')}\n\n <vaadin-password-field\n error-message=${passwordErrorMessage}\n data-testid=\"password\"\n class=\"w-full mb-m\"\n label=${this.t('password').toString()}\n value=${ifDefined(this.form.credential?.password)}\n ?disabled=${isBusy || disabledSelector.matches('password', true)}\n ?readonly=${readonlySelector.matches('password', true)}\n .checkValidity=${this.__passwordValidator}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: InputEvent) => {\n const email = this.form.credential?.email ?? '';\n const password = (evt.target as PasswordFieldElement).value;\n this.edit({ credential: { email, password }, type: 'password' });\n }}\n >\n </vaadin-password-field>\n\n ${this.renderTemplateOrSlot('password:after')}\n </div>\n `;\n };\n\n private readonly __renderNewPassword = () => {\n const { disabledSelector, readonlySelector, errors } = this;\n\n const error = errors.find(err => err.startsWith('new_password') && !err.endsWith('_error'));\n const errorKey = error?.replace('new_password', 'v8n');\n const errorMessage = errorKey ? this.t(errorKey).toString() : '';\n\n const isBusy = this.in('busy');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('new-password:before')}\n\n <vaadin-password-field\n error-message=${errorMessage}\n data-testid=\"new-password\"\n class=\"w-full mb-m\"\n label=${this.t('new_password').toString()}\n value=${ifDefined(this.form.credential?.new_password)}\n ?disabled=${isBusy || disabledSelector.matches('new-password', true)}\n ?readonly=${readonlySelector.matches('new-password', true)}\n .checkValidity=${this.__newPasswordValidator}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: InputEvent) => {\n this.edit({\n type: 'password',\n credential: {\n email: this.form.credential?.email ?? '',\n password: this.form.credential?.password ?? '',\n new_password: (evt.target as PasswordFieldElement).value,\n },\n });\n }}\n >\n </vaadin-password-field>\n\n ${this.renderTemplateOrSlot('new-password:after')}\n </div>\n `;\n };\n\n private readonly __renderMfaTotpCode = () => {\n const { disabledSelector, readonlySelector, errors } = this;\n\n const mfaSecretCode = this.__mfaSecretCode;\n const prefix = 'mfa_totp_code';\n const scope = 'mfa-totp-code';\n const error = errors.find(err => err.startsWith(prefix) && !err.endsWith('_error'));\n const errorKey = error?.replace(prefix, 'v8n');\n const errorMessage = errorKey ? this.t(errorKey).toString() : '';\n\n const isBusy = this.in('busy');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <vaadin-text-field\n error-message=${errorMessage}\n helper-text=${mfaSecretCode ? this.t('mfa_totp_code_hint') : ''}\n placeholder=\"123456\"\n data-testid=${scope}\n class=\"w-full mb-m\"\n label=${this.t(prefix).toString()}\n value=${ifDefined(this.form.credential?.mfa_totp_code)}\n ?disabled=${isBusy || disabledSelector.matches(scope, true)}\n ?readonly=${readonlySelector.matches(scope, true)}\n .checkValidity=${this.__mfaTotpCodeValidator}\n autofocus\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: InputEvent) => {\n const mfaTotpCode = (evt.target as PasswordFieldElement).value;\n const credential = { ...this.form.credential!, mfa_totp_code: mfaTotpCode };\n if (mfaSecretCode) credential.mfa_secret_code = mfaSecretCode;\n this.edit({ type: 'password', credential });\n }}\n >\n </vaadin-text-field>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n };\n\n private readonly __renderMfaSecretCode = () => {\n const scope = 'mfa-secret-code';\n const mfaSecretCode = this.__mfaSecretCode!;\n const issuer = encodeURIComponent(this.issuer);\n const email = encodeURIComponent(this.form.credential?.email ?? '');\n const otpauthUrl = new URL(`otpauth://totp/${issuer}:${email}`);\n\n otpauthUrl.searchParams.set('secret', mfaSecretCode);\n otpauthUrl.searchParams.set('issuer', this.issuer);\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <div\n data-testid=${scope}\n class=\"flex space-x-m overflow-hidden rounded border p-m mb-m border-contrast-10\"\n style=\"background: white; color: black;\"\n >\n <qr-code\n modulesize=\"2\"\n margin=\"0\"\n format=\"svg\"\n class=\"inline-flex\"\n data=${otpauthUrl.toString()}\n >\n </qr-code>\n\n <div class=\"break-all font-semibold leading-s text-xs tracking-widest\">\n ${mfaSecretCode}\n </div>\n </div>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n };\n\n private readonly __renderMfaRememberDevice = () => {\n const { __mfaSecretCode: mfaSecretCode, form, lang, ns } = this;\n const scope = 'mfa-remember-device';\n const isBusy = this.in('busy');\n const isDisabled = isBusy || this.disabledSelector.matches(scope, true);\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <vaadin-checkbox\n data-testid=${scope}\n class=\"mb-m\"\n ?disabled=${isDisabled}\n ?checked=${!!form.credential?.mfa_remember_device}\n @change=${(evt: CustomEvent) => {\n const target = evt.currentTarget as CheckboxElement;\n const credential = {\n ...form.credential!,\n mfa_remember_device: target.checked,\n mfa_totp_code: form.credential?.mfa_totp_code ?? '',\n };\n\n if (mfaSecretCode) credential.mfa_secret_code = mfaSecretCode;\n this.edit({ credential });\n }}\n >\n <foxy-i18n class=\"block\" lang=${lang} key=\"mfa_remember_device\" ns=${ns}></foxy-i18n>\n <foxy-i18n\n class=\"block text-xs ${isDisabled ? 'text-disabled' : 'text-secondary'}\"\n lang=${lang}\n key=\"mfa_remember_device_hint\"\n ns=${ns}\n >\n </foxy-i18n>\n </vaadin-checkbox>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n };\n\n private readonly __renderError = () => {\n return html`\n <div>\n ${this.renderTemplateOrSlot('error:before')}\n\n <p class=\"leading-s flex items-start text-s rounded p-s bg-error-10 text-error\">\n <iron-icon class=\"flex-shrink-0 mr-s icon-inline text-l\" icon=\"lumo:error\"></iron-icon>\n <foxy-i18n data-testid=\"error\" lang=${this.lang} key=${this.errors[0]} ns=${this.ns}>\n </foxy-i18n>\n </p>\n\n ${this.renderTemplateOrSlot('error:after')}\n </div>\n `;\n };\n\n private readonly __renderSubmit = () => {\n const isValid =\n this.in({ idle: { snapshot: { dirty: 'valid' } } }) ||\n this.in({ idle: { snapshot: { clean: 'valid' } } }) ||\n this.in({ idle: { template: { dirty: 'valid' } } }) ||\n this.in({ idle: { template: { clean: 'valid' } } });\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('submit:before')}\n\n <vaadin-button\n data-testid=\"submit\"\n class=\"w-full mt-m\"\n theme=\"primary\"\n ?disabled=${!isValid || this.in('busy') || this.disabledSelector.matches('submit', true)}\n @click=${() => this.submit()}\n >\n <foxy-i18n ns=${this.ns} lang=${this.lang} key=\"sign_in\"></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('submit:after')}\n </div>\n `;\n };\n\n render(): TemplateResult {\n const { hiddenSelector, errors, lang, form, ns } = this;\n const mfaSecretCode = this.__mfaSecretCode;\n const mfaTotpCode = form.credential?.mfa_totp_code;\n\n const isMfaRequired =\n !!mfaSecretCode || !!mfaTotpCode || errors.some(err => err.startsWith('mfa'));\n\n const isNewPasswordRequired =\n typeof this.form.credential?.new_password === 'string' ||\n errors.some(error => error.startsWith('new_password_'));\n\n const isMfaTotpCodeHidden =\n (!isMfaRequired && !mfaTotpCode) || hiddenSelector.matches('mfa-totp-code', true);\n\n const isMfaRememberDeviceHidden =\n !isMfaRequired ||\n (isMfaRequired && mfaSecretCode) ||\n hiddenSelector.matches('mfa-remember-device', true);\n\n const isMfaSecretCodeHidden = !mfaSecretCode || hiddenSelector.matches('mfa-secret-code', true);\n const isNewPasswordHidden = isMfaRequired || hiddenSelector.matches('new-password', true);\n const isFailed = errors.some(error => error.endsWith('_error'));\n const isBusy = this.in('busy');\n\n return html`\n <main aria-live=\"polite\" aria-busy=${isBusy} class=\"relative font-lumo text-m leading-m\">\n ${hiddenSelector.matches('email', true) ? '' : this.__renderEmail()}\n ${isMfaRequired || hiddenSelector.matches('password', true) ? '' : this.__renderPassword()}\n ${isNewPasswordHidden || !isNewPasswordRequired ? '' : this.__renderNewPassword()}\n ${isMfaTotpCodeHidden ? '' : this.__renderMfaTotpCode()}\n ${isMfaSecretCodeHidden ? '' : this.__renderMfaSecretCode()}\n ${isMfaRememberDeviceHidden ? '' : this.__renderMfaRememberDevice()}\n ${hiddenSelector.matches('error', true) || !isFailed ? '' : this.__renderError()}\n ${hiddenSelector.matches('submit', true) ? '' : this.__renderSubmit()}\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': !isBusy,\n })}\n >\n <foxy-spinner\n layout=\"vertical\"\n class=\"m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l\"\n state=\"busy\"\n lang=${lang}\n ns=\"${ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </main>\n `;\n }\n\n protected async _fetch<TResult = Data>(...args: Parameters<Window['fetch']>): Promise<TResult> {\n try {\n return await super._fetch(...args);\n } catch (err) {\n let v8nError = 'unknown_error';\n\n try {\n const code = (await (err as Response).json())._embedded['fx:errors'][0].code;\n if (typeof code === 'string') v8nError = code;\n } catch {\n // Unknown error format, ignoring.\n }\n\n throw [v8nError];\n }\n }\n\n private get __mfaSecretCode() {\n const storedSecret = this.form.credential?.mfa_secret_code;\n if (storedSecret) return storedSecret;\n\n const prefix = 'mfa_required';\n const mfaSetupError = this.errors.find(error => error.startsWith(prefix));\n return mfaSetupError?.replace(prefix, '').trim();\n }\n}\n"]}
1
+ {"version":3,"file":"SignInForm.js","sourceRoot":"","sources":["../../../../src/elements/public/SignInForm/SignInForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { Data, Templates } from './types';\nimport { PropertyDeclarations, TemplateResult, html } from 'lit-element';\n\nimport { CheckboxElement } from '@vaadin/vaadin-checkbox';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { EmailFieldElement } from '@vaadin/vaadin-text-field/vaadin-email-field';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { NucleonV8N } from '../NucleonElement/types';\nimport { PasswordFieldElement } from '@vaadin/vaadin-text-field/vaadin-password-field';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { validate as isEmail } from 'email-validator';\n\nconst NS = 'sign-in-form';\nconst Base = ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)));\n\n/**\n * Form element for email/password sign in.\n *\n * @slot email:before\n * @slot email:after\n * @slot password:before\n * @slot password:after\n * @slot new-password:before\n * @slot new-password:after\n * @slot mfa-secret-code:before\n * @slot mfa-secret-code:after\n * @slot mfa-totp-code:before\n * @slot mfa-totp-code:after\n * @slot mfa-remember-device:before\n * @slot mfa-remember-device:after\n * @slot error:before\n * @slot error:after\n * @slot submit:before\n * @slot submit:after\n *\n * @element foxy-sign-in-form\n * @since 1.4.0\n */\nexport class SignInForm extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n issuer: { type: String },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ credential: c }) => !!c?.email || 'email_required',\n ({ credential: c }) => isEmail(c?.email ?? '') || 'email_invalid_email',\n ({ credential: c }) => !!c?.password || 'password_required',\n ({ credential: c }) => (c?.new_password?.length === 0 ? 'new_password_required' : true),\n ({ credential: c }) => (c?.mfa_totp_code?.length === 0 ? 'mfa_totp_code_required' : true),\n ];\n }\n\n templates: Templates = {};\n\n issuer = 'Unknown';\n\n private readonly __emailValidator = () => !this.errors.some(err => err.startsWith('email'));\n\n private readonly __passwordValidator = () => !this.errors.some(err => err.startsWith('password'));\n\n private readonly __newPasswordValidator = () => {\n return !this.errors.some(err => err.startsWith('new_password') && !err.endsWith('_error'));\n };\n\n private readonly __mfaTotpCodeValidator = () => {\n return !this.errors.some(err => err.startsWith('mfa_totp_code') && !err.endsWith('_error'));\n };\n\n private readonly __renderEmail = () => {\n const { disabledSelector, readonlySelector, errors } = this;\n\n const emailError = errors.find(err => err.startsWith('email'));\n const emailErrorKey = emailError?.replace('email', 'v8n');\n const emailErrorMessage = emailErrorKey ? this.t(emailErrorKey).toString() : '';\n\n const isBusy = this.in('busy');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('email:before')}\n\n <vaadin-email-field\n error-message=${emailErrorMessage}\n data-testid=\"email\"\n class=\"w-full mb-m\"\n label=${this.t('email').toString()}\n value=${ifDefined(this.form.credential?.email)}\n ?disabled=${isBusy || disabledSelector.matches('email', true)}\n ?readonly=${readonlySelector.matches('email', true)}\n .checkValidity=${this.__emailValidator}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: InputEvent) => {\n const email = (evt.target as EmailFieldElement).value;\n const password = this.form.credential?.password ?? '';\n this.edit({ credential: { email, password }, type: 'password' });\n }}\n >\n </vaadin-email-field>\n\n ${this.renderTemplateOrSlot('email:after')}\n </div>\n `;\n };\n\n private readonly __renderPassword = () => {\n const { disabledSelector, readonlySelector, errors } = this;\n\n const passwordError = errors.find(err => err.startsWith('password'));\n const passwordErrorKey = passwordError?.replace('password', 'v8n');\n const passwordErrorMessage = passwordErrorKey ? this.t(passwordErrorKey).toString() : '';\n\n const isBusy = this.in('busy');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('password:before')}\n\n <vaadin-password-field\n error-message=${passwordErrorMessage}\n data-testid=\"password\"\n class=\"w-full mb-m\"\n label=${this.t('password').toString()}\n value=${ifDefined(this.form.credential?.password)}\n ?disabled=${isBusy || disabledSelector.matches('password', true)}\n ?readonly=${readonlySelector.matches('password', true)}\n .checkValidity=${this.__passwordValidator}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: InputEvent) => {\n const email = this.form.credential?.email ?? '';\n const password = (evt.target as PasswordFieldElement).value;\n this.edit({ credential: { email, password }, type: 'password' });\n }}\n >\n </vaadin-password-field>\n\n ${this.renderTemplateOrSlot('password:after')}\n </div>\n `;\n };\n\n private readonly __renderNewPassword = () => {\n const { disabledSelector, readonlySelector, errors } = this;\n\n const error = errors.find(err => err.startsWith('new_password') && !err.endsWith('_error'));\n const errorKey = error?.replace('new_password', 'v8n');\n const errorMessage = errorKey ? this.t(errorKey).toString() : '';\n\n const isBusy = this.in('busy');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('new-password:before')}\n\n <vaadin-password-field\n error-message=${errorMessage}\n data-testid=\"new-password\"\n class=\"w-full mb-m\"\n label=${this.t('new_password').toString()}\n value=${ifDefined(this.form.credential?.new_password)}\n ?disabled=${isBusy || disabledSelector.matches('new-password', true)}\n ?readonly=${readonlySelector.matches('new-password', true)}\n .checkValidity=${this.__newPasswordValidator}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: InputEvent) => {\n this.edit({\n type: 'password',\n credential: {\n email: this.form.credential?.email ?? '',\n password: this.form.credential?.password ?? '',\n new_password: (evt.target as PasswordFieldElement).value,\n },\n });\n }}\n >\n </vaadin-password-field>\n\n ${this.renderTemplateOrSlot('new-password:after')}\n </div>\n `;\n };\n\n private readonly __renderMfaTotpCode = () => {\n const { disabledSelector, readonlySelector, errors } = this;\n\n const mfaSecretCode = this.__mfaSecretCode;\n const prefix = 'mfa_totp_code';\n const scope = 'mfa-totp-code';\n const error = errors.find(err => err.startsWith(prefix) && !err.endsWith('_error'));\n const errorKey = error?.replace(prefix, 'v8n');\n const errorMessage = errorKey ? this.t(errorKey).toString() : '';\n\n const isBusy = this.in('busy');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <vaadin-text-field\n error-message=${errorMessage}\n helper-text=${mfaSecretCode ? this.t('mfa_totp_code_hint') : ''}\n placeholder=\"123456\"\n data-testid=${scope}\n class=\"w-full mb-m\"\n label=${this.t(prefix).toString()}\n value=${ifDefined(this.form.credential?.mfa_totp_code)}\n ?disabled=${isBusy || disabledSelector.matches(scope, true)}\n ?readonly=${readonlySelector.matches(scope, true)}\n .checkValidity=${this.__mfaTotpCodeValidator}\n autofocus\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: InputEvent) => {\n const mfaTotpCode = (evt.target as PasswordFieldElement).value;\n const credential = { ...this.form.credential!, mfa_totp_code: mfaTotpCode };\n if (mfaSecretCode) credential.mfa_secret_code = mfaSecretCode;\n this.edit({ type: 'password', credential });\n }}\n >\n </vaadin-text-field>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n };\n\n private readonly __renderMfaSecretCode = () => {\n const scope = 'mfa-secret-code';\n const mfaSecretCode = this.__mfaSecretCode!;\n const issuer = encodeURIComponent(this.issuer);\n const email = encodeURIComponent(this.form.credential?.email ?? '');\n const otpauthUrl = new URL(`otpauth://totp/${issuer}:${email}`);\n\n otpauthUrl.searchParams.set('secret', mfaSecretCode);\n otpauthUrl.searchParams.set('issuer', this.issuer);\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <div\n data-testid=${scope}\n class=\"flex space-x-m overflow-hidden rounded border p-m mb-m border-contrast-10\"\n style=\"background: white; color: black;\"\n >\n <qr-code\n modulesize=\"2\"\n margin=\"0\"\n format=\"svg\"\n class=\"inline-flex\"\n data=${otpauthUrl.toString()}\n >\n </qr-code>\n\n <div class=\"break-all font-medium leading-s text-xs tracking-widest\">\n ${mfaSecretCode}\n </div>\n </div>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n };\n\n private readonly __renderMfaRememberDevice = () => {\n const { __mfaSecretCode: mfaSecretCode, form, lang, ns } = this;\n const scope = 'mfa-remember-device';\n const isBusy = this.in('busy');\n const isDisabled = isBusy || this.disabledSelector.matches(scope, true);\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <vaadin-checkbox\n data-testid=${scope}\n class=\"mb-m\"\n ?disabled=${isDisabled}\n ?checked=${!!form.credential?.mfa_remember_device}\n @change=${(evt: CustomEvent) => {\n const target = evt.currentTarget as CheckboxElement;\n const credential = {\n ...form.credential!,\n mfa_remember_device: target.checked,\n mfa_totp_code: form.credential?.mfa_totp_code ?? '',\n };\n\n if (mfaSecretCode) credential.mfa_secret_code = mfaSecretCode;\n this.edit({ credential });\n }}\n >\n <foxy-i18n class=\"block\" lang=${lang} key=\"mfa_remember_device\" ns=${ns}></foxy-i18n>\n <foxy-i18n\n class=\"block text-xs ${isDisabled ? 'text-disabled' : 'text-secondary'}\"\n lang=${lang}\n key=\"mfa_remember_device_hint\"\n ns=${ns}\n >\n </foxy-i18n>\n </vaadin-checkbox>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n };\n\n private readonly __renderError = () => {\n return html`\n <div>\n ${this.renderTemplateOrSlot('error:before')}\n\n <p class=\"leading-s flex items-start text-s rounded p-s bg-error-10 text-error\">\n <iron-icon class=\"flex-shrink-0 mr-s icon-inline text-l\" icon=\"lumo:error\"></iron-icon>\n <foxy-i18n data-testid=\"error\" lang=${this.lang} key=${this.errors[0]} ns=${this.ns}>\n </foxy-i18n>\n </p>\n\n ${this.renderTemplateOrSlot('error:after')}\n </div>\n `;\n };\n\n private readonly __renderSubmit = () => {\n const isValid =\n this.in({ idle: { snapshot: { dirty: 'valid' } } }) ||\n this.in({ idle: { snapshot: { clean: 'valid' } } }) ||\n this.in({ idle: { template: { dirty: 'valid' } } }) ||\n this.in({ idle: { template: { clean: 'valid' } } });\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('submit:before')}\n\n <vaadin-button\n data-testid=\"submit\"\n class=\"w-full mt-m\"\n theme=\"primary\"\n ?disabled=${!isValid || this.in('busy') || this.disabledSelector.matches('submit', true)}\n @click=${() => this.submit()}\n >\n <foxy-i18n ns=${this.ns} lang=${this.lang} key=\"sign_in\"></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('submit:after')}\n </div>\n `;\n };\n\n render(): TemplateResult {\n const { hiddenSelector, errors, lang, form, ns } = this;\n const mfaSecretCode = this.__mfaSecretCode;\n const mfaTotpCode = form.credential?.mfa_totp_code;\n\n const isMfaRequired =\n !!mfaSecretCode || !!mfaTotpCode || errors.some(err => err.startsWith('mfa'));\n\n const isNewPasswordRequired =\n typeof this.form.credential?.new_password === 'string' ||\n errors.some(error => error.startsWith('new_password_'));\n\n const isMfaTotpCodeHidden =\n (!isMfaRequired && !mfaTotpCode) || hiddenSelector.matches('mfa-totp-code', true);\n\n const isMfaRememberDeviceHidden =\n !isMfaRequired ||\n (isMfaRequired && mfaSecretCode) ||\n hiddenSelector.matches('mfa-remember-device', true);\n\n const isMfaSecretCodeHidden = !mfaSecretCode || hiddenSelector.matches('mfa-secret-code', true);\n const isNewPasswordHidden = isMfaRequired || hiddenSelector.matches('new-password', true);\n const isFailed = errors.some(error => error.endsWith('_error'));\n const isBusy = this.in('busy');\n\n return html`\n <main aria-live=\"polite\" aria-busy=${isBusy} class=\"relative font-lumo text-m leading-m\">\n ${hiddenSelector.matches('email', true) ? '' : this.__renderEmail()}\n ${isMfaRequired || hiddenSelector.matches('password', true) ? '' : this.__renderPassword()}\n ${isNewPasswordHidden || !isNewPasswordRequired ? '' : this.__renderNewPassword()}\n ${isMfaTotpCodeHidden ? '' : this.__renderMfaTotpCode()}\n ${isMfaSecretCodeHidden ? '' : this.__renderMfaSecretCode()}\n ${isMfaRememberDeviceHidden ? '' : this.__renderMfaRememberDevice()}\n ${hiddenSelector.matches('error', true) || !isFailed ? '' : this.__renderError()}\n ${hiddenSelector.matches('submit', true) ? '' : this.__renderSubmit()}\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': !isBusy,\n })}\n >\n <foxy-spinner\n layout=\"vertical\"\n class=\"m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l\"\n state=\"busy\"\n lang=${lang}\n ns=\"${ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </main>\n `;\n }\n\n protected async _fetch<TResult = Data>(...args: Parameters<Window['fetch']>): Promise<TResult> {\n try {\n return await super._fetch(...args);\n } catch (err) {\n let v8nError = 'unknown_error';\n\n try {\n const code = (await (err as Response).json())._embedded['fx:errors'][0].code;\n if (typeof code === 'string') v8nError = code;\n } catch {\n // Unknown error format, ignoring.\n }\n\n throw [v8nError];\n }\n }\n\n private get __mfaSecretCode() {\n const storedSecret = this.form.credential?.mfa_secret_code;\n if (storedSecret) return storedSecret;\n\n const prefix = 'mfa_required';\n const mfaSetupError = this.errors.find(error => error.startsWith(prefix));\n return mfaSetupError?.replace(prefix, '').trim();\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import type { PropertyDeclarations } from 'lit-element';
2
+ import type { TemplateResult } from 'lit-html';
3
+ import type { Data } from './types';
4
+ import { TwoLineCard } from '../CustomFieldCard/TwoLineCard';
5
+ declare const Base: typeof TwoLineCard & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
6
+ defaultNS: string;
7
+ };
8
+ /**
9
+ * Card element representing a `fx:store` resource.
10
+ *
11
+ * @slot title:before
12
+ * @slot title:after
13
+ *
14
+ * @slot subtitle:before
15
+ * @slot subtitle:after
16
+ *
17
+ * @element foxy-store-card
18
+ * @since 1.22.0
19
+ */
20
+ export declare class StoreCard extends Base<Data> {
21
+ static get properties(): PropertyDeclarations;
22
+ /** Default host domain for stores that don't use a custom domain name, e.g. `foxycart.com`. */
23
+ defaultDomain: string | null;
24
+ renderBody(): TemplateResult;
25
+ }
26
+ export {};
@@ -0,0 +1,41 @@
1
+ import { TranslatableMixin } from "../../../mixins/translatable.js";
2
+ import { TwoLineCard } from "../CustomFieldCard/TwoLineCard.js";
3
+ import { html } from 'lit-html';
4
+ const NS = 'store-card';
5
+ const Base = TranslatableMixin(TwoLineCard, NS);
6
+ /**
7
+ * Card element representing a `fx:store` resource.
8
+ *
9
+ * @slot title:before
10
+ * @slot title:after
11
+ *
12
+ * @slot subtitle:before
13
+ * @slot subtitle:after
14
+ *
15
+ * @element foxy-store-card
16
+ * @since 1.22.0
17
+ */
18
+ export class StoreCard extends Base {
19
+ constructor() {
20
+ super(...arguments);
21
+ /** Default host domain for stores that don't use a custom domain name, e.g. `foxycart.com`. */
22
+ this.defaultDomain = null;
23
+ }
24
+ static get properties() {
25
+ return {
26
+ ...super.properties,
27
+ defaultDomain: { attribute: 'default-domain' },
28
+ };
29
+ }
30
+ renderBody() {
31
+ return super.renderBody({
32
+ title: data => html `${data.store_name}`,
33
+ subtitle: data => {
34
+ const defaultD = this.defaultDomain;
35
+ const domain = data === null || data === void 0 ? void 0 : data.store_domain;
36
+ return html `${(domain === null || domain === void 0 ? void 0 : domain.includes('.')) || !defaultD ? domain : `${domain}.${defaultD}`}`;
37
+ },
38
+ });
39
+ }
40
+ }
41
+ //# sourceMappingURL=StoreCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StoreCard.js","sourceRoot":"","sources":["../../../../src/elements/public/StoreCard/StoreCard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,WAAW,EAAE,0CAAuC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,YAAY,CAAC;AACxB,MAAM,IAAI,GAAG,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,SAAU,SAAQ,IAAU;IAAzC;;QAQE,+FAA+F;QAC/F,kBAAa,GAAkB,IAAI,CAAC;IAYtC,CAAC;IApBC,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,aAAa,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;SAC/C,CAAC;IACJ,CAAC;IAKD,UAAU;QACR,OAAO,KAAK,CAAC,UAAU,CAAC;YACtB,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA,GAAG,IAAI,CAAC,UAAU,EAAE;YACvC,QAAQ,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;gBACpC,MAAM,MAAM,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC;gBAClC,OAAO,IAAI,CAAA,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAC,GAAG,MAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,EAAE,EAAE,CAAC;YACxF,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { TwoLineCard } from '../CustomFieldCard/TwoLineCard';\nimport { html } from 'lit-html';\n\nconst NS = 'store-card';\nconst Base = TranslatableMixin(TwoLineCard, NS);\n\n/**\n * Card element representing a `fx:store` resource.\n *\n * @slot title:before\n * @slot title:after\n *\n * @slot subtitle:before\n * @slot subtitle:after\n *\n * @element foxy-store-card\n * @since 1.22.0\n */\nexport class StoreCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n defaultDomain: { attribute: 'default-domain' },\n };\n }\n\n /** Default host domain for stores that don't use a custom domain name, e.g. `foxycart.com`. */\n defaultDomain: string | null = null;\n\n renderBody(): TemplateResult {\n return super.renderBody({\n title: data => html`${data.store_name}`,\n subtitle: data => {\n const defaultD = this.defaultDomain;\n const domain = data?.store_domain;\n return html`${domain?.includes('.') || !defaultD ? domain : `${domain}.${defaultD}`}`;\n },\n });\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import '../../internal/InternalSandbox/index';
2
+ import '../Spinner/index';
3
+ import '../I18n/index';
4
+ import { StoreCard } from './StoreCard';
5
+ export { StoreCard };
@@ -0,0 +1,7 @@
1
+ import "../../internal/InternalSandbox/index.js";
2
+ import "../Spinner/index.js";
3
+ import "../I18n/index.js";
4
+ import { StoreCard } from "./StoreCard.js";
5
+ customElements.define('foxy-store-card', StoreCard);
6
+ export { StoreCard };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/StoreCard/index.ts"],"names":[],"mappings":"AAAA,iDAA8C;AAE9C,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,SAAS,EAAE,uBAAoB;AAExC,cAAc,CAAC,MAAM,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import '../../internal/InternalSandbox/index';\n\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport { StoreCard } from './StoreCard';\n\ncustomElements.define('foxy-store-card', StoreCard);\n\nexport { StoreCard };\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Resource } from '@foxy.io/sdk/core';
2
+ import type { Rels } from '@foxy.io/sdk/backend';
3
+ export declare type Data = Resource<Rels.Store>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/elements/public/StoreCard/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nexport type Data = Resource<Rels.Store>;\n"]}
@@ -1153,7 +1153,7 @@ export class StoreForm extends Base {
1153
1153
  ? html `
1154
1154
  <a
1155
1155
  target="_blank"
1156
- class="font-semibold hover-underline rounded focus-outline-none focus-ring-2 focus-ring-primary"
1156
+ class="font-medium hover-underline rounded focus-outline-none focus-ring-2 focus-ring-primary"
1157
1157
  href=${link.href}
1158
1158
  lang="en"
1159
1159
  >