@foxy.io/elements 1.26.0-beta.2 → 1.27.0-beta.1

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 (301) hide show
  1. package/dist/cdn/foxy-access-recovery-form.js +1 -1
  2. package/dist/cdn/foxy-address-card.js +1 -1
  3. package/dist/cdn/foxy-address-form.js +1 -1
  4. package/dist/cdn/foxy-admin-subscription-card.js +1 -1
  5. package/dist/cdn/foxy-api-browser.js +1 -1
  6. package/dist/cdn/foxy-applied-coupon-code-card.js +1 -1
  7. package/dist/cdn/foxy-applied-coupon-code-form.js +1 -1
  8. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  9. package/dist/cdn/foxy-attribute-card.js +1 -1
  10. package/dist/cdn/foxy-attribute-form.js +1 -1
  11. package/dist/cdn/foxy-billing-address-card.js +1 -1
  12. package/dist/cdn/foxy-cancellation-form.js +1 -1
  13. package/dist/cdn/foxy-cart-card.js +1 -1
  14. package/dist/cdn/foxy-cart-form.js +1 -1
  15. package/dist/cdn/foxy-client-card.js +1 -1
  16. package/dist/cdn/foxy-client-form.js +1 -1
  17. package/dist/cdn/foxy-collection-page.js +1 -1
  18. package/dist/cdn/foxy-collection-pages.js +1 -1
  19. package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
  20. package/dist/cdn/foxy-coupon-card.js +1 -1
  21. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  22. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  23. package/dist/cdn/foxy-coupon-detail-card.js +1 -1
  24. package/dist/cdn/foxy-coupon-form.js +1 -1
  25. package/dist/cdn/foxy-custom-field-card.js +1 -1
  26. package/dist/cdn/foxy-custom-field-form.js +1 -1
  27. package/dist/cdn/foxy-customer-api.js +1 -1
  28. package/dist/cdn/foxy-customer-card.js +1 -1
  29. package/dist/cdn/foxy-customer-form.js +1 -1
  30. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  31. package/dist/cdn/foxy-customer-portal.js +1 -1
  32. package/dist/cdn/foxy-customer.js +3 -3
  33. package/dist/cdn/foxy-customers-table.js +1 -1
  34. package/dist/cdn/foxy-discount-builder.js +1 -1
  35. package/dist/cdn/foxy-discount-card.js +1 -1
  36. package/dist/cdn/foxy-discount-detail-card.js +1 -1
  37. package/dist/cdn/foxy-donation.js +1 -1
  38. package/dist/cdn/foxy-downloadable-card.js +1 -1
  39. package/dist/cdn/foxy-downloadable-form.js +1 -1
  40. package/dist/cdn/foxy-email-template-card.js +1 -1
  41. package/dist/cdn/foxy-email-template-form.js +1 -1
  42. package/dist/cdn/foxy-error-entry-card.js +1 -1
  43. package/dist/cdn/foxy-filter-attribute-card.js +1 -1
  44. package/dist/cdn/foxy-filter-attribute-form.js +1 -1
  45. package/dist/cdn/foxy-form-dialog.js +1 -1
  46. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  47. package/dist/cdn/foxy-gift-card-card.js +1 -1
  48. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  49. package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
  50. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  51. package/dist/cdn/foxy-gift-card-form.js +1 -1
  52. package/dist/cdn/foxy-i18n-editor.js +2 -2
  53. package/dist/cdn/foxy-i18n.js +1 -1
  54. package/dist/cdn/foxy-integration-card.js +1 -1
  55. package/dist/cdn/foxy-integration-form.js +1 -1
  56. package/dist/cdn/foxy-item-card.js +1 -1
  57. package/dist/cdn/foxy-item-category-card.js +1 -1
  58. package/dist/cdn/foxy-item-category-form.js +1 -1
  59. package/dist/cdn/foxy-item-form.js +1 -1
  60. package/dist/cdn/foxy-item-option-card.js +1 -1
  61. package/dist/cdn/foxy-item-option-form.js +1 -1
  62. package/dist/cdn/foxy-items-form.js +1 -1
  63. package/dist/cdn/foxy-native-integration-card.js +1 -1
  64. package/dist/cdn/foxy-native-integration-form.js +1 -1
  65. package/dist/cdn/foxy-nucleon-element.js +1 -1
  66. package/dist/cdn/foxy-pagination.js +1 -1
  67. package/dist/cdn/foxy-passkey-card.js +1 -1
  68. package/dist/cdn/foxy-passkey-form.js +1 -1
  69. package/dist/cdn/foxy-payment-card.js +1 -1
  70. package/dist/cdn/foxy-payment-method-card.js +1 -1
  71. package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
  72. package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
  73. package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
  74. package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
  75. package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
  76. package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
  77. package/dist/cdn/foxy-payments-api.js +1 -1
  78. package/dist/cdn/foxy-query-builder.js +1 -1
  79. package/dist/cdn/foxy-report-form.js +5 -5
  80. package/dist/cdn/foxy-reports-table.js +1 -1
  81. package/dist/cdn/foxy-shipment-card.js +1 -1
  82. package/dist/cdn/foxy-shipping-method-card.js +1 -1
  83. package/dist/cdn/foxy-sign-in-form.js +1 -1
  84. package/dist/cdn/foxy-spinner.js +2 -2
  85. package/dist/cdn/foxy-store-card.js +1 -1
  86. package/dist/cdn/foxy-store-form.js +1 -1
  87. package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
  88. package/dist/cdn/foxy-subscription-card.js +1 -1
  89. package/dist/cdn/foxy-subscription-form.js +1 -1
  90. package/dist/cdn/foxy-subscription-settings-form.js +1 -1
  91. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  92. package/dist/cdn/foxy-swipe-actions.js +1 -1
  93. package/dist/cdn/foxy-table.js +1 -1
  94. package/dist/cdn/foxy-tax-card.js +1 -1
  95. package/dist/cdn/foxy-tax-form.js +1 -1
  96. package/dist/cdn/foxy-template-config-form.js +1 -1
  97. package/dist/cdn/foxy-template-form.js +1 -1
  98. package/dist/cdn/foxy-template-set-card.js +1 -1
  99. package/dist/cdn/foxy-template-set-form.js +1 -1
  100. package/dist/cdn/foxy-transaction-card.js +1 -1
  101. package/dist/cdn/foxy-transaction.js +1 -1
  102. package/dist/cdn/foxy-transactions-table.js +1 -1
  103. package/dist/cdn/foxy-user-card.js +1 -1
  104. package/dist/cdn/foxy-user-form.js +1 -1
  105. package/dist/cdn/foxy-users-table.js +1 -1
  106. package/dist/cdn/foxy-webhook-card.js +1 -1
  107. package/dist/cdn/foxy-webhook-form.js +1 -1
  108. package/dist/cdn/foxy-webhook-log-card.js +1 -1
  109. package/dist/cdn/foxy-webhook-status-card.js +1 -1
  110. package/dist/cdn/{shared-902b0773.js → shared-019ad470.js} +1 -1
  111. package/dist/cdn/{shared-19732959.js → shared-02883252.js} +1 -1
  112. package/dist/cdn/{shared-213c60d3.js → shared-062f3122.js} +1 -1
  113. package/dist/cdn/{shared-38499b40.js → shared-09ac8087.js} +1 -1
  114. package/dist/cdn/{shared-d7910e16.js → shared-0dcc1ea4.js} +1 -1
  115. package/dist/cdn/{shared-eaceb493.js → shared-0fdfc2c2.js} +1 -1
  116. package/dist/cdn/{shared-550f9cae.js → shared-13afcc16.js} +2 -2
  117. package/dist/cdn/{shared-aa4f6a25.js → shared-1af365fe.js} +1 -1
  118. package/dist/cdn/{shared-f7365ea5.js → shared-1bb9c21a.js} +1 -1
  119. package/dist/cdn/shared-20142d51.js +1 -0
  120. package/dist/cdn/{shared-f3b35364.js → shared-22ba9566.js} +1 -1
  121. package/dist/cdn/{shared-2d40129d.js → shared-24ceebec.js} +6 -6
  122. package/dist/cdn/{shared-d7be11de.js → shared-2bf89a21.js} +1 -1
  123. package/dist/cdn/{shared-8ed04343.js → shared-2d7cab3c.js} +1 -1
  124. package/dist/cdn/{shared-d2dc8486.js → shared-30f373f2.js} +1 -1
  125. package/dist/cdn/{shared-31b7a6ad.js → shared-36a09fe6.js} +1 -1
  126. package/dist/cdn/{shared-942ef1fc.js → shared-380c0453.js} +2 -2
  127. package/dist/cdn/{shared-1f8ae298.js → shared-3895091e.js} +1 -1
  128. package/dist/cdn/{shared-50a3cb63.js → shared-4345e9fd.js} +1 -1
  129. package/dist/cdn/{shared-f9180815.js → shared-51c4a6dd.js} +1 -1
  130. package/dist/cdn/{shared-ac62d098.js → shared-5ba412f7.js} +1 -1
  131. package/dist/cdn/{shared-16b391d9.js → shared-5ecc7f74.js} +1 -1
  132. package/dist/cdn/{shared-55f58244.js → shared-5f6d7cc6.js} +1 -1
  133. package/dist/cdn/shared-6310fdde.js +11 -0
  134. package/dist/cdn/{shared-51318b75.js → shared-6424d196.js} +1 -1
  135. package/dist/cdn/{shared-76812651.js → shared-648f62a1.js} +1 -1
  136. package/dist/cdn/{shared-d28b95c6.js → shared-67696f2f.js} +2 -2
  137. package/dist/cdn/{shared-bc113435.js → shared-708f960f.js} +1 -1
  138. package/dist/cdn/{shared-0838fad0.js → shared-74086729.js} +1 -1
  139. package/dist/cdn/{shared-bb05cfed.js → shared-8438d4ca.js} +1 -1
  140. package/dist/cdn/{shared-b06b1473.js → shared-8a92f939.js} +1 -1
  141. package/dist/cdn/{shared-8d51eaa6.js → shared-8addaf74.js} +1 -1
  142. package/dist/cdn/{shared-e7dffedb.js → shared-8b7ef8ec.js} +1 -1
  143. package/dist/cdn/{shared-c37707da.js → shared-8c937a7c.js} +1 -1
  144. package/dist/cdn/shared-8cc1f513.js +1 -0
  145. package/dist/cdn/{shared-360e1c8e.js → shared-8f706991.js} +1 -1
  146. package/dist/cdn/{shared-ee54f718.js → shared-921d4691.js} +1 -1
  147. package/dist/cdn/{shared-d3bf9ac0.js → shared-9803aa7c.js} +2 -2
  148. package/dist/cdn/{shared-11c2efc8.js → shared-99940888.js} +1 -1
  149. package/dist/cdn/{shared-027a9660.js → shared-9f41236b.js} +1 -1
  150. package/dist/cdn/{shared-b23c903e.js → shared-9f570db0.js} +1 -1
  151. package/dist/cdn/{shared-6a7f96c4.js → shared-a0435ec6.js} +1 -1
  152. package/dist/cdn/{shared-d519a301.js → shared-a0c6a159.js} +2 -2
  153. package/dist/cdn/{shared-533c0d6a.js → shared-a3ec1362.js} +1 -1
  154. package/dist/cdn/{shared-60e167ae.js → shared-a5ec3472.js} +1 -1
  155. package/dist/cdn/{shared-cadbb2e3.js → shared-adecdd5f.js} +1 -1
  156. package/dist/cdn/shared-b114fee0.js +1 -0
  157. package/dist/cdn/{shared-5407617a.js → shared-b17fcc8f.js} +1 -1
  158. package/dist/cdn/{shared-7d24a3f1.js → shared-b56daa27.js} +1 -1
  159. package/dist/cdn/{shared-c36477d7.js → shared-c0242421.js} +1 -1
  160. package/dist/cdn/{shared-6da29a49.js → shared-c0cbb20a.js} +1 -1
  161. package/dist/cdn/{shared-be5ef71d.js → shared-c692070c.js} +1 -1
  162. package/dist/cdn/{shared-a26d7f7a.js → shared-ce9795cd.js} +3 -3
  163. package/dist/cdn/{shared-87f81b69.js → shared-d070d509.js} +1 -1
  164. package/dist/cdn/{shared-a502026c.js → shared-d1ee06bb.js} +1 -1
  165. package/dist/cdn/{shared-2b68c60f.js → shared-d3e8c449.js} +1 -1
  166. package/dist/cdn/{shared-df8380e1.js → shared-d61d1d8d.js} +1 -1
  167. package/dist/cdn/{shared-dc8c202b.js → shared-d96312ed.js} +1 -1
  168. package/dist/cdn/{shared-2787655b.js → shared-d9f44257.js} +1 -1
  169. package/dist/cdn/shared-dbfccb3e.js +2 -0
  170. package/dist/cdn/{shared-7f33a83a.js → shared-dc73b9a5.js} +1 -1
  171. package/dist/cdn/{shared-1e3d7d40.js → shared-ded1248f.js} +1 -1
  172. package/dist/cdn/{shared-be8c90cc.js → shared-e1cade57.js} +11 -22
  173. package/dist/cdn/{shared-927fa880.js → shared-e260fc5a.js} +1 -1
  174. package/dist/cdn/{shared-69c67952.js → shared-e460ee3d.js} +1 -1
  175. package/dist/cdn/{shared-e8621807.js → shared-f0269599.js} +1 -1
  176. package/dist/cdn/{shared-9f039798.js → shared-f655b20d.js} +1 -1
  177. package/dist/cdn/{shared-4721aeb1.js → shared-fba9b7b3.js} +1 -1
  178. package/dist/cdn/{shared-de59c42c.js → shared-fcddc6cc.js} +1 -1
  179. package/dist/cdn/{shared-1c07b1be.js → shared-fe165f2e.js} +1 -1
  180. package/dist/cdn/{shared-f1ee9bf9.js → shared-ff35e803.js} +1 -1
  181. package/dist/cdn/translations/access-recovery-form/en.json +5 -2
  182. package/dist/cdn/translations/address-card/en.json +1 -1
  183. package/dist/cdn/translations/address-form/en.json +86 -26
  184. package/dist/cdn/translations/admin-subscription-card/en.json +1 -1
  185. package/dist/cdn/translations/applied-coupon-code-card/en.json +1 -1
  186. package/dist/cdn/translations/applied-coupon-code-form/en.json +2 -1
  187. package/dist/cdn/translations/applied-tax-card/en.json +1 -1
  188. package/dist/cdn/translations/attribute-card/en.json +1 -1
  189. package/dist/cdn/translations/attribute-form/en.json +36 -17
  190. package/dist/cdn/translations/billing-address-card/en.json +1 -1
  191. package/dist/cdn/translations/cancellation-form/en.json +2 -1
  192. package/dist/cdn/translations/cart-card/en.json +1 -1
  193. package/dist/cdn/translations/cart-form/en.json +51 -29
  194. package/dist/cdn/translations/client-card/en.json +1 -1
  195. package/dist/cdn/translations/client-form/en.json +2 -1
  196. package/dist/cdn/translations/coupon-card/en.json +1 -1
  197. package/dist/cdn/translations/coupon-code-form/en.json +2 -1
  198. package/dist/cdn/translations/coupon-codes-form/en.json +3 -2
  199. package/dist/cdn/translations/coupon-form/en.json +9 -5
  200. package/dist/cdn/translations/custom-field-card/en.json +1 -1
  201. package/dist/cdn/translations/custom-field-form/en.json +2 -1
  202. package/dist/cdn/translations/customer/en.json +143 -57
  203. package/dist/cdn/translations/customer-card/en.json +1 -1
  204. package/dist/cdn/translations/customer-form/en.json +2 -1
  205. package/dist/cdn/translations/customer-portal/en.json +106 -38
  206. package/dist/cdn/translations/customers-table/en.json +2 -1
  207. package/dist/cdn/translations/discount-card/en.json +1 -1
  208. package/dist/cdn/translations/downloadable-card/en.json +1 -1
  209. package/dist/cdn/translations/downloadable-form/en.json +2 -1
  210. package/dist/cdn/translations/email-template-card/en.json +1 -1
  211. package/dist/cdn/translations/email-template-form/en.json +2 -1
  212. package/dist/cdn/translations/filter-attribute-card/en.json +1 -1
  213. package/dist/cdn/translations/filter-attribute-form/en.json +2 -1
  214. package/dist/cdn/translations/generate-codes-form/en.json +2 -1
  215. package/dist/cdn/translations/gift-card-card/en.json +1 -1
  216. package/dist/cdn/translations/gift-card-code-form/en.json +4 -3
  217. package/dist/cdn/translations/gift-card-code-log-card/en.json +1 -1
  218. package/dist/cdn/translations/gift-card-codes-form/en.json +3 -2
  219. package/dist/cdn/translations/gift-card-form/en.json +11 -7
  220. package/dist/cdn/translations/i18n-editor/en.json +2 -1
  221. package/dist/cdn/translations/integration-card/en.json +1 -1
  222. package/dist/cdn/translations/integration-form/en.json +2 -1
  223. package/dist/cdn/translations/item-card/en.json +1 -1
  224. package/dist/cdn/translations/item-category-card/en.json +1 -1
  225. package/dist/cdn/translations/item-category-form/en.json +3 -2
  226. package/dist/cdn/translations/item-form/en.json +44 -23
  227. package/dist/cdn/translations/item-option-form/en.json +2 -1
  228. package/dist/cdn/translations/native-integration-card/en.json +1 -1
  229. package/dist/cdn/translations/native-integration-form/en.json +2 -1
  230. package/dist/cdn/translations/passkey-card/en.json +1 -1
  231. package/dist/cdn/translations/passkey-form/en.json +2 -1
  232. package/dist/cdn/translations/payment-card/en.json +1 -1
  233. package/dist/cdn/translations/payment-method-card/en.json +1 -1
  234. package/dist/cdn/translations/payments-api-fraud-protection-card/en.json +1 -1
  235. package/dist/cdn/translations/payments-api-fraud-protection-form/en.json +2 -1
  236. package/dist/cdn/translations/payments-api-payment-method-card/en.json +1 -1
  237. package/dist/cdn/translations/payments-api-payment-method-form/en.json +2 -1
  238. package/dist/cdn/translations/payments-api-payment-preset-card/en.json +1 -1
  239. package/dist/cdn/translations/payments-api-payment-preset-form/en.json +2 -1
  240. package/dist/cdn/translations/report-form/en.json +2 -1
  241. package/dist/cdn/translations/reports-table/en.json +2 -1
  242. package/dist/cdn/translations/shared/en.json +4 -0
  243. package/dist/cdn/translations/shared/es.json +3 -0
  244. package/dist/cdn/translations/shipment-card/en.json +1 -1
  245. package/dist/cdn/translations/shipping-method-card/en.json +1 -1
  246. package/dist/cdn/translations/sign-in-form/en.json +2 -1
  247. package/dist/cdn/translations/spinner/en.json +1 -1
  248. package/dist/cdn/translations/store-card/en.json +1 -1
  249. package/dist/cdn/translations/store-form/en.json +2 -1
  250. package/dist/cdn/translations/store-shipping-method-form/en.json +3 -2
  251. package/dist/cdn/translations/subscription-card/en.json +1 -1
  252. package/dist/cdn/translations/subscription-form/en.json +10 -7
  253. package/dist/cdn/translations/subscription-settings-form/en.json +2 -1
  254. package/dist/cdn/translations/subscriptions-table/en.json +2 -1
  255. package/dist/cdn/translations/tax-card/en.json +1 -1
  256. package/dist/cdn/translations/tax-form/en.json +2 -1
  257. package/dist/cdn/translations/template-config-form/en.json +2 -1
  258. package/dist/cdn/translations/template-form/en.json +2 -1
  259. package/dist/cdn/translations/template-set-card/en.json +1 -1
  260. package/dist/cdn/translations/template-set-form/en.json +4 -2
  261. package/dist/cdn/translations/transaction/en.json +177 -75
  262. package/dist/cdn/translations/transaction-card/en.json +1 -1
  263. package/dist/cdn/translations/transactions-table/en.json +2 -1
  264. package/dist/cdn/translations/user-card/en.json +1 -1
  265. package/dist/cdn/translations/user-form/en.json +2 -1
  266. package/dist/cdn/translations/users-table/en.json +4 -2
  267. package/dist/cdn/translations/webhook-card/en.json +1 -1
  268. package/dist/cdn/translations/webhook-form/en.json +4 -3
  269. package/dist/cdn/translations/webhook-log-card/en.json +1 -1
  270. package/dist/cdn/translations/webhook-status-card/en.json +1 -1
  271. package/dist/elements/internal/InternalForm/InternalForm.js +10 -3
  272. package/dist/elements/internal/InternalForm/InternalForm.js.map +1 -1
  273. package/dist/elements/internal/InternalSourceControl/InternalSourceControl.d.ts +1 -0
  274. package/dist/elements/internal/InternalSourceControl/InternalSourceControl.js +19 -4
  275. package/dist/elements/internal/InternalSourceControl/InternalSourceControl.js.map +1 -1
  276. package/dist/elements/public/AddressForm/AddressForm.d.ts +13 -24
  277. package/dist/elements/public/AddressForm/AddressForm.js +76 -275
  278. package/dist/elements/public/AddressForm/AddressForm.js.map +1 -1
  279. package/dist/elements/public/AddressForm/index.d.ts +3 -6
  280. package/dist/elements/public/AddressForm/index.js +3 -6
  281. package/dist/elements/public/AddressForm/index.js.map +1 -1
  282. package/dist/elements/public/AddressForm/types.d.ts +4 -15
  283. package/dist/elements/public/AddressForm/types.js.map +1 -1
  284. package/dist/elements/public/AttributeForm/AttributeForm.d.ts +15 -25
  285. package/dist/elements/public/AttributeForm/AttributeForm.js +35 -238
  286. package/dist/elements/public/AttributeForm/AttributeForm.js.map +1 -1
  287. package/dist/elements/public/AttributeForm/index.d.ts +3 -7
  288. package/dist/elements/public/AttributeForm/index.js +3 -7
  289. package/dist/elements/public/AttributeForm/index.js.map +1 -1
  290. package/dist/elements/public/AttributeForm/types.d.ts +4 -7
  291. package/dist/elements/public/AttributeForm/types.js.map +1 -1
  292. package/dist/elements/public/CustomerForm/CustomerForm.d.ts +0 -1
  293. package/dist/elements/public/CustomerForm/CustomerForm.js +5 -8
  294. package/dist/elements/public/CustomerForm/CustomerForm.js.map +1 -1
  295. package/dist/mixins/translatable.d.ts +6 -0
  296. package/dist/mixins/translatable.js +26 -8
  297. package/dist/mixins/translatable.js.map +1 -1
  298. package/package.json +1 -1
  299. package/dist/cdn/shared-132b2b71.js +0 -2
  300. package/dist/cdn/shared-6d34289d.js +0 -1
  301. package/dist/cdn/shared-f2eb454c.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CustomerForm.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerForm/CustomerForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { VanillaHCaptchaWebComponent } from 'vanilla-hcaptcha';\nimport type { Data, Templates, Settings } from './types';\nimport type { PropertyDeclarations } from 'lit-element';\nimport type { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\n\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { validate as isEmail } from 'email-validator';\nimport { classMap } from '../../../utils/class-map';\nimport { html } from 'lit-html';\n\nimport checkPasswordStrength from 'check-password-strength';\n\nconst NS = 'customer-form';\nconst Base = ScopedElementsMixin(TranslatableMixin(InternalForm, NS));\nconst passwordStrength = checkPasswordStrength.passwordStrength;\n\n/**\n * Form element for creating or editing customers.\n *\n * @slot first-name:before - **new in v1.4.0**\n * @slot first-name:after - **new in v1.4.0**\n *\n * @slot last-name:before - **new in v1.4.0**\n * @slot last-name:after - **new in v1.4.0**\n *\n * @slot email:before - **new in v1.4.0**\n * @slot email:after - **new in v1.4.0**\n *\n * @slot tax-id:before - **new in v1.4.0**\n * @slot tax-id:after - **new in v1.4.0**\n *\n * @slot is-anonymous:before - **new in v1.24.0**\n * @slot is-anonymous:after - **new in v1.24.0**\n *\n * @slot password:before - **new in v1.24.0**\n * @slot password:after - **new in v1.24.0**\n *\n * @slot password-old:before - **new in v1.24.0**\n * @slot password-old:after - **new in v1.24.0**\n *\n * @slot forgot-password:before - **new in v1.24.0**\n * @slot forgot-password:after - **new in v1.24.0**\n *\n * @slot legal-notice:before - **new in v1.24.0**\n * @slot legal-notice:after - **new in v1.24.0**\n *\n * @slot timestamps:before - **new in v1.4.0**\n * @slot timestamps:after - **new in v1.4.0**\n *\n * @slot create:before - **new in v1.4.0**\n * @slot create:after - **new in v1.4.0**\n *\n * @slot delete:before - **new in v1.4.0**\n * @slot delete:after - **new in v1.4.0**\n *\n * @element foxy-customer-form\n * @since 1.2.0\n */\nexport class CustomerForm extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'foxy-internal-customer-form-legal-notice-control': customElements.get(\n 'foxy-internal-customer-form-legal-notice-control'\n ),\n 'foxy-internal-radio-group-control': customElements.get('foxy-internal-radio-group-control'),\n 'foxy-internal-timestamps-control': customElements.get('foxy-internal-timestamps-control'),\n 'foxy-internal-password-control': customElements.get('foxy-internal-password-control'),\n 'foxy-internal-create-control': customElements.get('foxy-internal-create-control'),\n 'foxy-internal-delete-control': customElements.get('foxy-internal-delete-control'),\n 'foxy-internal-text-control': customElements.get('foxy-internal-text-control'),\n 'foxy-spinner': customElements.get('foxy-spinner'),\n 'foxy-i18n': customElements.get('foxy-i18n'),\n 'h-captcha': customElements.get('h-captcha'),\n 'vaadin-button': customElements.get('vaadin-button'),\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n passwordless: { type: Boolean },\n settings: { type: Object },\n };\n }\n\n static get v8n(): NucleonV8N<Data, CustomerForm> {\n return [\n ({ password, _links, is_anonymous = true }, host) => {\n if (host.passwordless) return true;\n return !_links && !is_anonymous && !password ? 'password:v8n_required' : true;\n },\n ({ password_old, password, _links }, host) => {\n if (!_links) return true;\n if (host.settings?.sign_up === undefined) return true;\n return password && !password_old ? 'password-old:v8n_required' : true;\n },\n ({ first_name: v }) => !v || v.length <= 50 || 'first-name:v8n_too_long',\n ({ last_name: v }) => !v || v.length <= 50 || 'last-name:v8n_too_long',\n ({ password: v }) => !v || passwordStrength(v).id >= 2 || 'password:v8n_too_weak',\n ({ password: v }) => !v || v.length <= 50 || 'password:v8n_too_long',\n ({ tax_id: v }) => !v || v.length <= 50 || 'tax-id:v8n_too_long',\n ({ email: v }) => (v && v.length > 0) || 'email:v8n_required',\n ({ email: v }) => !v || v.length <= 100 || 'email:v8n_too_long',\n ({ email: v }) => !v || isEmail(v) || 'email:v8n_invalid_email',\n ];\n }\n\n /** If true, won't require password when creating a customer. */\n passwordless = false;\n\n templates: Templates = {};\n\n /** Full `fx:customer_portal_settings` resource from Customer API. If present, switches this element into the Customer API mode, enabling client verification. */\n settings: Settings | null = null;\n\n private readonly __isAnonymousGetValue = () => {\n return this.form?.is_anonymous === false ? 'false' : 'true';\n };\n\n private readonly __isAnonymousSetValue = (newValue: string) => {\n const isAnonymous = newValue === 'true';\n this.edit({ is_anonymous: isAnonymous });\n if (isAnonymous && this.form.password) this.edit({ password: '' });\n if (isAnonymous && this.form.password_old) this.edit({ password_old: '' });\n if (isAnonymous && this.form.forgot_password) this.edit({ forgot_password: '' });\n };\n\n private readonly __isAnonymousOptions = [\n { value: 'true', label: 'option_true' },\n { value: 'false', label: 'option_false' },\n ];\n\n private __refreshInterval: NodeJS.Timeout | null = null;\n\n get readonlySelector(): BooleanSelector {\n const readonly = this.data ? ['is-anonymous'] : [];\n readonly.push(super.readonlySelector.toString());\n return new BooleanSelector(readonly.join(' ').trim());\n }\n\n get hiddenSelector(): BooleanSelector {\n const hidden = new Set<string>(super.hiddenSelector.toString().split(' '));\n\n if (this.settings) {\n hidden.add('forgot-password');\n hidden.add('is-anonymous');\n if (!this.form.password) hidden.add('password-old');\n if (this.settings.tos_checkbox_settings.usage === 'none') hidden.add('legal-notice');\n } else {\n if (this.form.is_anonymous !== false) {\n hidden.add('forgot-password');\n hidden.add('password');\n }\n hidden.add('password-old');\n hidden.add('legal-notice');\n }\n\n if (this.href) hidden.add('legal-notice');\n\n return new BooleanSelector(Array.from(hidden).join(' ').trim());\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n const interval = this.__refreshInterval;\n if (interval) clearInterval(interval);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n const interval = setInterval(() => this.requestUpdate(), 60 * 1000);\n this.__refreshInterval = interval;\n }\n\n renderBody(): TemplateResult {\n const isFirstNameHidden = this.hiddenSelector.matches('first-name', true);\n const isLastNameHidden = this.hiddenSelector.matches('last-name', true);\n\n return html`\n <div\n class=${classMap({\n 'grid-cols-2': !isFirstNameHidden && !isLastNameHidden,\n 'hidden': isFirstNameHidden && isLastNameHidden,\n 'gap-m': true,\n 'grid': !isFirstNameHidden || !isLastNameHidden,\n })}\n >\n <foxy-internal-text-control infer=\"first-name\"></foxy-internal-text-control>\n <foxy-internal-text-control infer=\"last-name\"></foxy-internal-text-control>\n </div>\n\n <foxy-internal-text-control infer=\"tax-id\"></foxy-internal-text-control>\n\n <foxy-internal-text-control helper-text=${this.__emailHelperText} infer=\"email\">\n </foxy-internal-text-control>\n\n <foxy-internal-radio-group-control\n infer=\"is-anonymous\"\n .getValue=${this.__isAnonymousGetValue}\n .setValue=${this.__isAnonymousSetValue}\n .options=${this.__isAnonymousOptions}\n >\n </foxy-internal-radio-group-control>\n\n <foxy-internal-password-control\n placeholder=${this.__passwordPlaceholder}\n helper-text=${this.__passwordHelperText}\n infer=\"password\"\n show-generator\n >\n </foxy-internal-password-control>\n\n <foxy-internal-password-control infer=\"password-old\"></foxy-internal-password-control>\n\n <foxy-internal-password-control\n helper-text=${this.__forgotPasswordHelperText}\n infer=\"forgot-password\"\n show-generator\n >\n </foxy-internal-password-control>\n\n <foxy-internal-customer-form-legal-notice-control infer=\"legal-notice\">\n </foxy-internal-customer-form-legal-notice-control>\n\n ${!this.data &&\n this.settings?.sign_up?.enabled &&\n this.settings?.sign_up?.verification.type === 'hcaptcha'\n ? html`\n <h-captcha\n site-key=${this.settings.sign_up.verification.site_key}\n class=\"hidden\"\n size=\"invisible\"\n hl=${this.lang}\n @verified=${({ token }: Record<'token' | 'eKey', string>) => {\n this.edit({ verification: { type: 'hcaptcha', token } });\n super.submit();\n }}\n >\n </h-captcha>\n `\n : ''}\n ${super.renderBody()}\n `;\n }\n\n submit(): void {\n if (this.settings?.sign_up?.verification?.type === 'hcaptcha' && !this.data) {\n this.__hcaptcha?.reset();\n this.__hcaptcha?.execute();\n } else {\n super.submit();\n }\n }\n\n protected async _sendPatch(edits: Partial<Data>): Promise<Data> {\n const data = await super._sendPatch(edits);\n\n if (edits.password) {\n const status = { key: 'password_change_success', options: { email: data.email } };\n this.status = status;\n }\n\n return data;\n }\n\n protected async _sendGet(): Promise<Data> {\n this.status = null;\n return await super._sendGet();\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 message;\n\n try {\n message = (await (err as Response).json())._embedded['fx:errors'][0].message;\n } catch {\n throw err;\n }\n\n if (message === 'Conflict' || message.startsWith('This email address is already in use')) {\n throw ['error:email_already_used'];\n } else if (message.startsWith('Customer registration is disabled')) {\n throw ['error:registration_disabled'];\n } else if (message.startsWith('Client verification failed')) {\n throw ['error:verification_failed'];\n } else if (message.startsWith('Provided password is incorrect')) {\n throw ['error:old_password_incorrect'];\n } else {\n throw err;\n }\n }\n }\n\n private get __forgotPasswordHelperText() {\n const createdOn = this.data?.forgot_password_timestamp;\n const password = this.data?.forgot_password;\n const i18nKey = 'forgot-password.helper_text';\n\n if (password && createdOn) {\n const expiresOn = new Date(new Date(createdOn).getTime() + 30 * 60 * 1000);\n const expiresInMin = Math.floor((expiresOn.getTime() - Date.now()) / 1000 / 60);\n if (expiresInMin <= 0) return this.t(`${i18nKey}_expired_on`, { expiresOn });\n return this.t(`${i18nKey}_expires_in`, { expiresInMin: `${expiresInMin}minutes` });\n } else {\n return this.t(i18nKey);\n }\n }\n\n private get __passwordPlaceholder() {\n return this.data ? this.t('password.placeholder_new') : this.t('password.placeholder');\n }\n\n private get __passwordHelperText() {\n return this.data ? this.t('password.helper_text_new') : this.t('password.helper_text');\n }\n\n private get __emailHelperText() {\n return this.data?.last_login_date\n ? this.t('email.helper_text_last_login_date', { date: this.data.last_login_date })\n : this.t('email.helper_text');\n }\n\n private get __hcaptcha() {\n return this.renderRoot.querySelector<VanillaHCaptchaWebComponent>('h-captcha');\n }\n}\n"]}
1
+ {"version":3,"file":"CustomerForm.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerForm/CustomerForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { VanillaHCaptchaWebComponent } from 'vanilla-hcaptcha';\nimport type { Data, Templates, Settings } from './types';\nimport type { PropertyDeclarations } from 'lit-element';\nimport type { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\n\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { validate as isEmail } from 'email-validator';\nimport { classMap } from '../../../utils/class-map';\nimport { html } from 'lit-html';\n\nimport checkPasswordStrength from 'check-password-strength';\n\nconst NS = 'customer-form';\nconst Base = ScopedElementsMixin(TranslatableMixin(InternalForm, NS));\nconst passwordStrength = checkPasswordStrength.passwordStrength;\n\n/**\n * Form element for creating or editing customers.\n *\n * @slot first-name:before - **new in v1.4.0**\n * @slot first-name:after - **new in v1.4.0**\n *\n * @slot last-name:before - **new in v1.4.0**\n * @slot last-name:after - **new in v1.4.0**\n *\n * @slot email:before - **new in v1.4.0**\n * @slot email:after - **new in v1.4.0**\n *\n * @slot tax-id:before - **new in v1.4.0**\n * @slot tax-id:after - **new in v1.4.0**\n *\n * @slot is-anonymous:before - **new in v1.24.0**\n * @slot is-anonymous:after - **new in v1.24.0**\n *\n * @slot password:before - **new in v1.24.0**\n * @slot password:after - **new in v1.24.0**\n *\n * @slot password-old:before - **new in v1.24.0**\n * @slot password-old:after - **new in v1.24.0**\n *\n * @slot forgot-password:before - **new in v1.24.0**\n * @slot forgot-password:after - **new in v1.24.0**\n *\n * @slot legal-notice:before - **new in v1.24.0**\n * @slot legal-notice:after - **new in v1.24.0**\n *\n * @slot timestamps:before - **new in v1.4.0**\n * @slot timestamps:after - **new in v1.4.0**\n *\n * @slot create:before - **new in v1.4.0**\n * @slot create:after - **new in v1.4.0**\n *\n * @slot delete:before - **new in v1.4.0**\n * @slot delete:after - **new in v1.4.0**\n *\n * @element foxy-customer-form\n * @since 1.2.0\n */\nexport class CustomerForm extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'foxy-internal-customer-form-legal-notice-control': customElements.get(\n 'foxy-internal-customer-form-legal-notice-control'\n ),\n 'foxy-internal-radio-group-control': customElements.get('foxy-internal-radio-group-control'),\n 'foxy-internal-timestamps-control': customElements.get('foxy-internal-timestamps-control'),\n 'foxy-internal-password-control': customElements.get('foxy-internal-password-control'),\n 'foxy-internal-create-control': customElements.get('foxy-internal-create-control'),\n 'foxy-internal-delete-control': customElements.get('foxy-internal-delete-control'),\n 'foxy-internal-text-control': customElements.get('foxy-internal-text-control'),\n 'foxy-spinner': customElements.get('foxy-spinner'),\n 'foxy-i18n': customElements.get('foxy-i18n'),\n 'h-captcha': customElements.get('h-captcha'),\n 'vaadin-button': customElements.get('vaadin-button'),\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n passwordless: { type: Boolean },\n settings: { type: Object },\n };\n }\n\n static get v8n(): NucleonV8N<Data, CustomerForm> {\n return [\n ({ password, _links, is_anonymous = true }, host) => {\n if (host.passwordless) return true;\n return !_links && !is_anonymous && !password ? 'password:v8n_required' : true;\n },\n ({ password_old, password, _links }, host) => {\n if (!_links) return true;\n if (host.settings?.sign_up === undefined) return true;\n return password && !password_old ? 'password-old:v8n_required' : true;\n },\n ({ first_name: v }) => !v || v.length <= 50 || 'first-name:v8n_too_long',\n ({ last_name: v }) => !v || v.length <= 50 || 'last-name:v8n_too_long',\n ({ password: v }) => !v || passwordStrength(v).id >= 2 || 'password:v8n_too_weak',\n ({ password: v }) => !v || v.length <= 50 || 'password:v8n_too_long',\n ({ tax_id: v }) => !v || v.length <= 50 || 'tax-id:v8n_too_long',\n ({ email: v }) => (v && v.length > 0) || 'email:v8n_required',\n ({ email: v }) => !v || v.length <= 100 || 'email:v8n_too_long',\n ({ email: v }) => !v || isEmail(v) || 'email:v8n_invalid_email',\n ];\n }\n\n /** If true, won't require password when creating a customer. */\n passwordless = false;\n\n templates: Templates = {};\n\n /** Full `fx:customer_portal_settings` resource from Customer API. If present, switches this element into the Customer API mode, enabling client verification. */\n settings: Settings | null = null;\n\n private readonly __isAnonymousGetValue = () => {\n return this.form?.is_anonymous === false ? 'false' : 'true';\n };\n\n private readonly __isAnonymousSetValue = (newValue: string) => {\n const isAnonymous = newValue === 'true';\n this.edit({ is_anonymous: isAnonymous });\n if (isAnonymous && this.form.password) this.edit({ password: '' });\n if (isAnonymous && this.form.password_old) this.edit({ password_old: '' });\n if (isAnonymous && this.form.forgot_password) this.edit({ forgot_password: '' });\n };\n\n private readonly __isAnonymousOptions = [\n { value: 'true', label: 'option_true' },\n { value: 'false', label: 'option_false' },\n ];\n\n private __refreshInterval: NodeJS.Timeout | null = null;\n\n get hiddenSelector(): BooleanSelector {\n const hidden = new Set<string>(super.hiddenSelector.toString().split(' '));\n\n if (this.settings) {\n hidden.add('forgot-password');\n hidden.add('is-anonymous');\n if (!this.form.password) hidden.add('password-old');\n if (this.settings.tos_checkbox_settings.usage === 'none') hidden.add('legal-notice');\n } else {\n if (this.form.is_anonymous !== false) {\n hidden.add('forgot-password');\n hidden.add('password');\n }\n hidden.add('password-old');\n hidden.add('legal-notice');\n }\n\n if (this.href) {\n hidden.add('is-anonymous');\n hidden.add('legal-notice');\n }\n\n return new BooleanSelector(Array.from(hidden).join(' ').trim());\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n const interval = this.__refreshInterval;\n if (interval) clearInterval(interval);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n const interval = setInterval(() => this.requestUpdate(), 60 * 1000);\n this.__refreshInterval = interval;\n }\n\n renderBody(): TemplateResult {\n const isFirstNameHidden = this.hiddenSelector.matches('first-name', true);\n const isLastNameHidden = this.hiddenSelector.matches('last-name', true);\n\n return html`\n <div\n class=${classMap({\n 'grid-cols-2': !isFirstNameHidden && !isLastNameHidden,\n 'hidden': isFirstNameHidden && isLastNameHidden,\n 'gap-m': true,\n 'grid': !isFirstNameHidden || !isLastNameHidden,\n })}\n >\n <foxy-internal-text-control infer=\"first-name\"></foxy-internal-text-control>\n <foxy-internal-text-control infer=\"last-name\"></foxy-internal-text-control>\n </div>\n\n <foxy-internal-text-control helper-text=${this.__emailHelperText} infer=\"email\">\n </foxy-internal-text-control>\n\n <foxy-internal-radio-group-control\n infer=\"is-anonymous\"\n .getValue=${this.__isAnonymousGetValue}\n .setValue=${this.__isAnonymousSetValue}\n .options=${this.__isAnonymousOptions}\n >\n </foxy-internal-radio-group-control>\n\n <foxy-internal-password-control\n placeholder=${this.__passwordPlaceholder}\n helper-text=${this.__passwordHelperText}\n infer=\"password\"\n show-generator\n >\n </foxy-internal-password-control>\n\n <foxy-internal-password-control infer=\"password-old\"></foxy-internal-password-control>\n\n <foxy-internal-password-control\n helper-text=${this.__forgotPasswordHelperText}\n infer=\"forgot-password\"\n show-generator\n >\n </foxy-internal-password-control>\n\n <foxy-internal-text-control infer=\"tax-id\"></foxy-internal-text-control>\n\n <foxy-internal-customer-form-legal-notice-control infer=\"legal-notice\">\n </foxy-internal-customer-form-legal-notice-control>\n\n ${!this.data &&\n this.settings?.sign_up?.enabled &&\n this.settings?.sign_up?.verification.type === 'hcaptcha'\n ? html`\n <h-captcha\n site-key=${this.settings.sign_up.verification.site_key}\n class=\"hidden\"\n size=\"invisible\"\n hl=${this.lang}\n @verified=${({ token }: Record<'token' | 'eKey', string>) => {\n this.edit({ verification: { type: 'hcaptcha', token } });\n super.submit();\n }}\n >\n </h-captcha>\n `\n : ''}\n ${super.renderBody()}\n `;\n }\n\n submit(): void {\n if (this.settings?.sign_up?.verification?.type === 'hcaptcha' && !this.data) {\n this.__hcaptcha?.reset();\n this.__hcaptcha?.execute();\n } else {\n super.submit();\n }\n }\n\n protected async _sendPatch(edits: Partial<Data>): Promise<Data> {\n const data = await super._sendPatch(edits);\n\n if (edits.password) {\n const status = { key: 'password_change_success', options: { email: data.email } };\n this.status = status;\n }\n\n return data;\n }\n\n protected async _sendGet(): Promise<Data> {\n this.status = null;\n return await super._sendGet();\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 message;\n\n try {\n message = (await (err as Response).json())._embedded['fx:errors'][0].message;\n } catch {\n throw err;\n }\n\n if (message === 'Conflict' || message.startsWith('This email address is already in use')) {\n throw ['error:email_already_used'];\n } else if (message.startsWith('Customer registration is disabled')) {\n throw ['error:registration_disabled'];\n } else if (message.startsWith('Client verification failed')) {\n throw ['error:verification_failed'];\n } else if (message.startsWith('Provided password is incorrect')) {\n throw ['error:old_password_incorrect'];\n } else {\n throw err;\n }\n }\n }\n\n private get __forgotPasswordHelperText() {\n const createdOn = this.data?.forgot_password_timestamp;\n const password = this.data?.forgot_password;\n const i18nKey = 'forgot-password.helper_text';\n\n if (password && createdOn) {\n const expiresOn = new Date(new Date(createdOn).getTime() + 30 * 60 * 1000);\n const expiresInMin = Math.floor((expiresOn.getTime() - Date.now()) / 1000 / 60);\n if (expiresInMin <= 0) return this.t(`${i18nKey}_expired_on`, { expiresOn });\n return this.t(`${i18nKey}_expires_in`, { expiresInMin: `${expiresInMin}minutes` });\n } else {\n return this.t(i18nKey);\n }\n }\n\n private get __passwordPlaceholder() {\n return this.data ? this.t('password.placeholder_new') : this.t('password.placeholder');\n }\n\n private get __passwordHelperText() {\n return this.data ? this.t('password.helper_text_new') : this.t('password.helper_text');\n }\n\n private get __emailHelperText() {\n return this.data?.last_login_date\n ? this.t('email.helper_text_last_login_date', { date: this.data.last_login_date })\n : this.t('email.helper_text');\n }\n\n private get __hcaptcha() {\n return this.renderRoot.querySelector<VanillaHCaptchaWebComponent>('h-captcha');\n }\n}\n"]}
@@ -71,6 +71,12 @@ declare type Base = Constructor<InferrableMixinHost> & Constructor<LitElement> &
71
71
  };
72
72
  declare type Translator = (key: string, options?: StringMap) => string;
73
73
  export declare class TranslatableMixinHost {
74
+ /**
75
+ * If true, this element won't attempt to load separate files for nested namespaces.
76
+ * For example, if `ns` is set to `foo bar`, this element will only load `foo` and
77
+ * expect that file to contain all translations for the `bar` namespace.
78
+ */
79
+ simplifyNsLoading: boolean;
74
80
  /** Optional ISO 639-1 code describing the language element content is written in. */
75
81
  lang: string;
76
82
  /**
@@ -150,31 +150,39 @@ export const TranslatableMixin = (BaseElement, defaultNS = '') => {
150
150
  return class TranslatableElement extends BaseElement {
151
151
  constructor() {
152
152
  super(...arguments);
153
+ this.simplifyNsLoading = false;
153
154
  this.lang = '';
154
155
  this.ns = defaultNS;
155
156
  this.t = (key, options) => {
156
157
  const I18nElement = customElements.get('foxy-i18n');
157
158
  if (!I18nElement)
158
159
  return key;
159
- const keys = [
160
- ...this.ns
160
+ let keys;
161
+ if (this.simplifyNsLoading) {
162
+ const namespaces = this.ns.split(' ').filter(v => v.length > 0);
163
+ const path = [...namespaces.slice(1), key].join('.');
164
+ keys = namespaces[0] ? [`${namespaces[0]}:${path}`] : [path];
165
+ }
166
+ else {
167
+ keys = this.ns
161
168
  .split(' ')
162
169
  .reverse()
163
170
  .map(v => v.trim())
164
171
  .filter(v => v.length > 0)
165
172
  .reverse()
166
- .map((v, i, a) => `${v}:${[...a.slice(i + 1), key].join('.')}`),
167
- `shared:${key}`,
168
- ];
173
+ .map((v, i, a) => `${v}:${[...a.slice(i + 1), key].join('.')}`);
174
+ }
175
+ keys.push(key);
169
176
  return I18nElement.i18next.t(keys, { lng: this.lang, ...options }).toString();
170
177
  };
171
178
  }
172
179
  static get inferredProperties() {
173
- return [...super.inferredProperties, 'lang', 'ns'];
180
+ return [...super.inferredProperties, 'simplifyNsLoading', 'lang', 'ns'];
174
181
  }
175
182
  static get properties() {
176
183
  return {
177
184
  ...super.properties,
185
+ simplifyNsLoading: { type: Boolean, attribute: 'simplify-ns-loading' },
178
186
  lang: { type: String },
179
187
  ns: { type: String },
180
188
  };
@@ -195,8 +203,16 @@ export const TranslatableMixin = (BaseElement, defaultNS = '') => {
195
203
  return;
196
204
  if (changedProperties.has('lang'))
197
205
  I18nElement.i18next.loadLanguages(this.lang);
198
- if (changedProperties.has('ns'))
199
- I18nElement.i18next.loadNamespaces(this.ns.split(' '));
206
+ if (changedProperties.has('ns')) {
207
+ const namespaces = this.ns.split(' ').filter(v => v.length > 0);
208
+ if (this.simplifyNsLoading) {
209
+ if (namespaces[0])
210
+ I18nElement.i18next.loadNamespaces(namespaces[0]);
211
+ }
212
+ else {
213
+ I18nElement.i18next.loadNamespaces(namespaces);
214
+ }
215
+ }
200
216
  }
201
217
  disconnectedCallback() {
202
218
  var _a;
@@ -207,8 +223,10 @@ export const TranslatableMixin = (BaseElement, defaultNS = '') => {
207
223
  super.applyInferredProperties(context);
208
224
  if (this.infer === null)
209
225
  return;
226
+ const simplifyNsLoading = context.get('simplifyNsLoading');
210
227
  const lang = context.get('lang');
211
228
  const ns = context.get('ns');
229
+ this.simplifyNsLoading = simplifyNsLoading !== null && simplifyNsLoading !== void 0 ? simplifyNsLoading : false;
212
230
  this.lang = lang !== null && lang !== void 0 ? lang : '';
213
231
  this.ns = ns ? `${ns} ${this.infer}`.trim() : defaultNS;
214
232
  }
@@ -1 +1 @@
1
- {"version":3,"file":"translatable.js","sourceRoot":"","sources":["../../src/mixins/translatable.ts"],"names":[],"mappings":"AACA,OAAO,OAAuD,MAAM,SAAS,CAAC;AAE9E,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,uBAAoB;AACxC,OAAO,EAAE,GAAG,EAAE,kBAAe;AAG7B;;;;;;;GAOG;AACH,MAAM,OAAgB,YAAa,SAAQ,SAAS;IA+DlD;;;;;OAKG;IACH,YAAY,SAAS,GAAG,QAAQ;QAC9B,KAAK,EAAE,CAAC;QAXF,WAAM,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAwB,CAAC,CAAC,CAAC,CAAC;QAEzD,SAAI,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAuB,CAAC,CAAC,CAAC,CAAC;QAU5D,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACvD,CAAC;IAxED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;YACxC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;SACvC,CAAC;IACJ,CAAC;IAoED;;;;;;OAMG;IACH,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAW,IAAI,CAAC,KAAa;QAC3B,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,WAAW;YAAE,OAAO;QAC5C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACxC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAW,EAAE,CAAC,KAAa;QACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACzC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;gBAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,UAAU;QACvB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACtC,EAAE,EAAE,CAAC,QAAQ,CAAC;YACd,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;YACvF,aAAa,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE;YAC3C,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,QAAQ;YACpB,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE;gBACT,KAAK,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC;gBACnE,MAAM,EAAE,EAAE;aACX;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE,GAAG,GAAG,mCAAmC;aACpD;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;QAE7D,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAc,KAAK;;QACjB,aAAO,YAAY,CAAC,MAAM,mCAAI,YAAY,CAAC,UAAU,EAAE,CAAC;IAC1D,CAAC;IAED,IAAc,cAAc;QAC1B,OAAO,YAAY,CAAC,eAAe,CAAC;IACtC,CAAC;IAED,IAAc,YAAY;QACxB,OAAO,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC;IAED,IAAc,EAAE;QACd,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAoB,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;;AA/ID;;;GAGG;AACY,yBAAY,GAAmB,CAAC,KAAK,EAAU,EAAE;IAC9D,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;GAKG;AACY,oBAAO,GAAmB,CAAC,KAAK,EAAU,EAAE;IACzD,OAAQ,KAAkB;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACf,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;QACpD,OAAO,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;IACxB,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC,CAAC;AAEF;;;GAGG;AACY,gBAAG,GAAmB,CAAC,GAAG,IAAI,EAAU,EAAE;;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,OAAO,eAAG,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,GAAG,oCAAK,EAAE,CAAC;IAE1C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QACvC,QAAQ,MAAM,EAAE;YACd,KAAK,WAAW;gBACd,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC3C,KAAK,MAAM;gBACT,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtC;gBACE,OAAO,MAAM,CAAC;SACjB;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC;AAIa,0BAAa,GAAG,KAAK,CAAC;AA0HvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,WAAc,EACd,SAAS,GAAG,EAAE,EACkD,EAAE;IAClE,OAAO,MAAM,mBAAoB,SAAQ,WAAW;QAA7C;;YAiBL,SAAI,GAAG,EAAE,CAAC;YAEV,OAAE,GAAG,SAAS,CAAC;YAEf,MAAC,GAAe,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;gBAC/B,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAA4B,CAAC;gBAE/E,IAAI,CAAC,WAAW;oBAAE,OAAO,GAAG,CAAC;gBAE7B,MAAM,IAAI,GAAG;oBACX,GAAG,IAAI,CAAC,EAAE;yBACP,KAAK,CAAC,GAAG,CAAC;yBACV,OAAO,EAAE;yBACT,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;yBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;yBACzB,OAAO,EAAE;yBACT,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjE,UAAU,GAAG,EAAE;iBAChB,CAAC;gBAEF,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChF,CAAC,CAAC;QAoCJ,CAAC;QAzEC,MAAM,KAAK,kBAAkB;YAC3B,OAAO,CAAC,GAAG,KAAK,CAAC,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,KAAK,UAAU;YACnB,OAAO;gBACL,GAAG,KAAK,CAAC,UAAU;gBACnB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;gBACtB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;aACrB,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,SAAS;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QA2BD,iBAAiB;YACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAA4B,CAAC;YAC/E,IAAI,CAAC,qBAAqB,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,gBAAgB;QAChB,OAAO,CAAC,iBAA2C;YACjD,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAEjC,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAA4B,CAAC;YAC/E,IAAI,CAAC,WAAW;gBAAE,OAAO;YAEzB,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1F,CAAC;QAED,oBAAoB;;YAClB,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAC7B,MAAA,IAAI,CAAC,qBAAqB,+CAA1B,IAAI,EAA2B;QACjC,CAAC;QAED,uBAAuB,CAAC,OAA6B;YACnD,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;gBAAE,OAAO;YAEhC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAuB,CAAC;YACvD,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAuB,CAAC;YAEnD,IAAI,CAAC,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;YACvB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { Constructor, LitElement, PropertyDeclarations } from 'lit-element';\nimport i18next, { FormatFunction, StringMap, TFunction, i18n } from 'i18next';\n\nimport HttpApi from 'i18next-http-backend';\nimport { I18n } from '../elements/public/I18n/I18n';\nimport { Themeable } from './themeable';\nimport { cdn } from '../env';\nimport { InferrableMixinHost } from './inferrable';\n\n/**\n * One of the base classes for each rel-specific element in the collection,\n * providing internationalization capabilities to the derived components.\n * This class MUST NOT be used on its own (hence the `abstract` keyword) or\n * referenced externally (outside of the package).\n *\n * @deprecated\n */\nexport abstract class Translatable extends Themeable {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n lang: { type: String, noAccessor: true },\n ns: { type: String, noAccessor: true },\n };\n }\n\n /**\n * i18next formatter that converts given value to lowecase.\n * @see https://www.i18next.com/translation-function/formatting\n */\n private static __fLowercase: FormatFunction = (value): string => {\n return value.toLowerCase();\n };\n\n /**\n * i18next formatter that presents an array of serializable items\n * as `[0], [1], [...] and [length - 1]`. For example, given an array like\n * the following: `['a', 'b', 'c']`, it will output `'a, b and c'`.\n * @see https://www.i18next.com/translation-function/formatting\n */\n private static __fList: FormatFunction = (value): string => {\n return (value as string[])\n .map((v, i, a) => {\n if (i === 0) return v;\n const part = i === a.length - 1 ? ` $t(and) ` : ',';\n return `${part} ${v}`;\n })\n .join('');\n };\n\n /**\n * Chooses the right i18next formatter for the given template.\n * @see https://www.i18next.com/translation-function/formatting\n */\n private static __f: FormatFunction = (...args): string => {\n const value = args[0];\n const formats = args[1]?.split(' ') ?? [];\n\n return formats.reduce((result, format) => {\n switch (format) {\n case 'lowercase':\n return Translatable.__fLowercase(result);\n case 'list':\n return Translatable.__fList(result);\n default:\n return result;\n }\n }, value);\n };\n\n private static __whenI18NReady: Promise<TFunction>;\n\n private static __isI18NReady = false;\n\n private static __i18n: i18n;\n\n private __lang = (this._i18n.options.fallbackLng as string[])[0];\n\n private __ns = (this._i18n.options.fallbackNS as string[])[0];\n\n /**\n * Creates class instance and starts loading missing translations\n * in background. Triggers render when ready.\n *\n * @param defaultNS Name of the folder translations for this component are stored in. Usually a node name without vendor prefix.\n */\n constructor(defaultNS = 'global') {\n super();\n this.ns = defaultNS;\n this._whenI18nReady.then(() => this.requestUpdate());\n }\n\n /**\n * Contains the language this component presents its translatable\n * content in. Assigning a value to this property will load new\n * translations in background and trigger a render afterwards.\n *\n * **Example:** `\"en\"`\n */\n public get lang(): string {\n return this.__lang;\n }\n\n public set lang(value: string) {\n if (!value || value === 'undefined') return;\n this.__lang = value;\n this._i18n.loadLanguages(value).then(() => {\n if (this.__lang === value) this.requestUpdate();\n });\n }\n\n /**\n * The namespace to look for the translations in. We use this property to\n * sync namespace settings with the parent element and it's highly unlikely\n * that you'll ever need to set or read it in your code.\n *\n * **Example:** `\"admin\"`\n */\n public get ns(): string {\n return this.__ns;\n }\n\n public set ns(value: string) {\n this.__ns = value;\n this._i18n.loadNamespaces(value).then(() => {\n if (this.__ns === value) this.requestUpdate();\n });\n }\n\n private static __initI18N() {\n this.__i18n = i18next.createInstance();\n this.__i18n.use(HttpApi);\n\n this.__whenI18NReady = this.__i18n.init({\n ns: ['global'],\n supportedLngs: ['nl', 'en', 'es', 'sv', 'fi', 'fr', 'de', 'zh', 'no', 'it', 'pl', 'se'],\n interpolation: { format: Translatable.__f },\n fallbackLng: 'en',\n fallbackNS: 'global',\n defaultNS: 'global',\n detection: {\n order: ['querystring', 'navigator', 'htmlTag', 'path', 'subdomain'],\n caches: [],\n },\n backend: {\n loadPath: `${cdn}/translations/{{ns}}/{{lng}}.json`,\n },\n });\n\n this.__whenI18NReady.then(() => (this.__isI18NReady = true));\n\n return this.__i18n;\n }\n\n protected get _i18n(): i18n {\n return Translatable.__i18n ?? Translatable.__initI18N();\n }\n\n protected get _whenI18nReady(): Promise<TFunction> {\n return Translatable.__whenI18NReady;\n }\n\n protected get _isI18nReady(): boolean {\n return Translatable.__isI18NReady;\n }\n\n protected get _t(): TFunction {\n const ns = [this.__ns, this._i18n.options.fallbackNS as string];\n return this._i18n.getFixedT(this.__lang, ns);\n }\n}\n\ntype Base = Constructor<InferrableMixinHost> &\n Constructor<LitElement> & { properties?: PropertyDeclarations; inferredProperties: string[] };\n\ntype Translator = (key: string, options?: StringMap) => string;\n\nexport declare class TranslatableMixinHost {\n /** Optional ISO 639-1 code describing the language element content is written in. */\n lang: string;\n\n /**\n * Namespace used by this element.\n * @since 1.4.0\n */\n ns: string;\n\n /**\n * Translation function from i18next fixed to the current language and element namespace.\n * @since 1.4.0\n */\n get t(): Translator;\n}\n\nexport const TranslatableMixin = <T extends Base>(\n BaseElement: T,\n defaultNS = ''\n): T & Constructor<TranslatableMixinHost> & { defaultNS: string } => {\n return class TranslatableElement extends BaseElement {\n static get inferredProperties(): string[] {\n return [...super.inferredProperties, 'lang', 'ns'];\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n lang: { type: String },\n ns: { type: String },\n };\n }\n\n static get defaultNS(): string {\n return defaultNS;\n }\n\n lang = '';\n\n ns = defaultNS;\n\n t: Translator = (key, options) => {\n const I18nElement = customElements.get('foxy-i18n') as typeof I18n | undefined;\n\n if (!I18nElement) return key;\n\n const keys = [\n ...this.ns\n .split(' ')\n .reverse()\n .map(v => v.trim())\n .filter(v => v.length > 0)\n .reverse()\n .map((v, i, a) => `${v}:${[...a.slice(i + 1), key].join('.')}`),\n `shared:${key}`,\n ];\n\n return I18nElement.i18next.t(keys, { lng: this.lang, ...options }).toString();\n };\n\n private __untrackTranslations?: () => void;\n\n connectedCallback(): void {\n super.connectedCallback();\n const I18nElement = customElements.get('foxy-i18n') as typeof I18n | undefined;\n this.__untrackTranslations = I18nElement?.onTranslationChange(() => this.requestUpdate());\n }\n\n /** @readonly */\n updated(changedProperties: Map<keyof I18n, unknown>): void {\n super.updated(changedProperties);\n\n const I18nElement = customElements.get('foxy-i18n') as typeof I18n | undefined;\n if (!I18nElement) return;\n\n if (changedProperties.has('lang')) I18nElement.i18next.loadLanguages(this.lang);\n if (changedProperties.has('ns')) I18nElement.i18next.loadNamespaces(this.ns.split(' '));\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.__untrackTranslations?.();\n }\n\n applyInferredProperties(context: Map<string, unknown>): void {\n super.applyInferredProperties(context);\n if (this.infer === null) return;\n\n const lang = context.get('lang') as string | undefined;\n const ns = context.get('ns') as string | undefined;\n\n this.lang = lang ?? '';\n this.ns = ns ? `${ns} ${this.infer}`.trim() : defaultNS;\n }\n };\n};\n"]}
1
+ {"version":3,"file":"translatable.js","sourceRoot":"","sources":["../../src/mixins/translatable.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constructor, LitElement, PropertyDeclarations } from 'lit-element';\nimport i18next, { FormatFunction, StringMap, TFunction, i18n } from 'i18next';\n\nimport HttpApi from 'i18next-http-backend';\nimport { I18n } from '../elements/public/I18n/I18n';\nimport { Themeable } from './themeable';\nimport { cdn } from '../env';\nimport { InferrableMixinHost } from './inferrable';\n\n/**\n * One of the base classes for each rel-specific element in the collection,\n * providing internationalization capabilities to the derived components.\n * This class MUST NOT be used on its own (hence the `abstract` keyword) or\n * referenced externally (outside of the package).\n *\n * @deprecated\n */\nexport abstract class Translatable extends Themeable {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n lang: { type: String, noAccessor: true },\n ns: { type: String, noAccessor: true },\n };\n }\n\n /**\n * i18next formatter that converts given value to lowecase.\n * @see https://www.i18next.com/translation-function/formatting\n */\n private static __fLowercase: FormatFunction = (value): string => {\n return value.toLowerCase();\n };\n\n /**\n * i18next formatter that presents an array of serializable items\n * as `[0], [1], [...] and [length - 1]`. For example, given an array like\n * the following: `['a', 'b', 'c']`, it will output `'a, b and c'`.\n * @see https://www.i18next.com/translation-function/formatting\n */\n private static __fList: FormatFunction = (value): string => {\n return (value as string[])\n .map((v, i, a) => {\n if (i === 0) return v;\n const part = i === a.length - 1 ? ` $t(and) ` : ',';\n return `${part} ${v}`;\n })\n .join('');\n };\n\n /**\n * Chooses the right i18next formatter for the given template.\n * @see https://www.i18next.com/translation-function/formatting\n */\n private static __f: FormatFunction = (...args): string => {\n const value = args[0];\n const formats = args[1]?.split(' ') ?? [];\n\n return formats.reduce((result, format) => {\n switch (format) {\n case 'lowercase':\n return Translatable.__fLowercase(result);\n case 'list':\n return Translatable.__fList(result);\n default:\n return result;\n }\n }, value);\n };\n\n private static __whenI18NReady: Promise<TFunction>;\n\n private static __isI18NReady = false;\n\n private static __i18n: i18n;\n\n private __lang = (this._i18n.options.fallbackLng as string[])[0];\n\n private __ns = (this._i18n.options.fallbackNS as string[])[0];\n\n /**\n * Creates class instance and starts loading missing translations\n * in background. Triggers render when ready.\n *\n * @param defaultNS Name of the folder translations for this component are stored in. Usually a node name without vendor prefix.\n */\n constructor(defaultNS = 'global') {\n super();\n this.ns = defaultNS;\n this._whenI18nReady.then(() => this.requestUpdate());\n }\n\n /**\n * Contains the language this component presents its translatable\n * content in. Assigning a value to this property will load new\n * translations in background and trigger a render afterwards.\n *\n * **Example:** `\"en\"`\n */\n public get lang(): string {\n return this.__lang;\n }\n\n public set lang(value: string) {\n if (!value || value === 'undefined') return;\n this.__lang = value;\n this._i18n.loadLanguages(value).then(() => {\n if (this.__lang === value) this.requestUpdate();\n });\n }\n\n /**\n * The namespace to look for the translations in. We use this property to\n * sync namespace settings with the parent element and it's highly unlikely\n * that you'll ever need to set or read it in your code.\n *\n * **Example:** `\"admin\"`\n */\n public get ns(): string {\n return this.__ns;\n }\n\n public set ns(value: string) {\n this.__ns = value;\n this._i18n.loadNamespaces(value).then(() => {\n if (this.__ns === value) this.requestUpdate();\n });\n }\n\n private static __initI18N() {\n this.__i18n = i18next.createInstance();\n this.__i18n.use(HttpApi);\n\n this.__whenI18NReady = this.__i18n.init({\n ns: ['global'],\n supportedLngs: ['nl', 'en', 'es', 'sv', 'fi', 'fr', 'de', 'zh', 'no', 'it', 'pl', 'se'],\n interpolation: { format: Translatable.__f },\n fallbackLng: 'en',\n fallbackNS: 'global',\n defaultNS: 'global',\n detection: {\n order: ['querystring', 'navigator', 'htmlTag', 'path', 'subdomain'],\n caches: [],\n },\n backend: {\n loadPath: `${cdn}/translations/{{ns}}/{{lng}}.json`,\n },\n });\n\n this.__whenI18NReady.then(() => (this.__isI18NReady = true));\n\n return this.__i18n;\n }\n\n protected get _i18n(): i18n {\n return Translatable.__i18n ?? Translatable.__initI18N();\n }\n\n protected get _whenI18nReady(): Promise<TFunction> {\n return Translatable.__whenI18NReady;\n }\n\n protected get _isI18nReady(): boolean {\n return Translatable.__isI18NReady;\n }\n\n protected get _t(): TFunction {\n const ns = [this.__ns, this._i18n.options.fallbackNS as string];\n return this._i18n.getFixedT(this.__lang, ns);\n }\n}\n\ntype Base = Constructor<InferrableMixinHost> &\n Constructor<LitElement> & { properties?: PropertyDeclarations; inferredProperties: string[] };\n\ntype Translator = (key: string, options?: StringMap) => string;\n\nexport declare class TranslatableMixinHost {\n /**\n * If true, this element won't attempt to load separate files for nested namespaces.\n * For example, if `ns` is set to `foo bar`, this element will only load `foo` and\n * expect that file to contain all translations for the `bar` namespace.\n */\n simplifyNsLoading: boolean;\n\n /** Optional ISO 639-1 code describing the language element content is written in. */\n lang: string;\n\n /**\n * Namespace used by this element.\n * @since 1.4.0\n */\n ns: string;\n\n /**\n * Translation function from i18next fixed to the current language and element namespace.\n * @since 1.4.0\n */\n get t(): Translator;\n}\n\nexport const TranslatableMixin = <T extends Base>(\n BaseElement: T,\n defaultNS = ''\n): T & Constructor<TranslatableMixinHost> & { defaultNS: string } => {\n return class TranslatableElement extends BaseElement {\n static get inferredProperties(): string[] {\n return [...super.inferredProperties, 'simplifyNsLoading', 'lang', 'ns'];\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n simplifyNsLoading: { type: Boolean, attribute: 'simplify-ns-loading' },\n lang: { type: String },\n ns: { type: String },\n };\n }\n\n static get defaultNS(): string {\n return defaultNS;\n }\n\n simplifyNsLoading = false;\n\n lang = '';\n\n ns = defaultNS;\n\n t: Translator = (key, options) => {\n const I18nElement = customElements.get('foxy-i18n') as typeof I18n | undefined;\n\n if (!I18nElement) return key;\n\n let keys: string[];\n\n if (this.simplifyNsLoading) {\n const namespaces = this.ns.split(' ').filter(v => v.length > 0);\n const path = [...namespaces.slice(1), key].join('.');\n keys = namespaces[0] ? [`${namespaces[0]}:${path}`] : [path];\n } else {\n keys = this.ns\n .split(' ')\n .reverse()\n .map(v => v.trim())\n .filter(v => v.length > 0)\n .reverse()\n .map((v, i, a) => `${v}:${[...a.slice(i + 1), key].join('.')}`);\n }\n\n keys.push(key);\n\n return I18nElement.i18next.t(keys, { lng: this.lang, ...options }).toString();\n };\n\n private __untrackTranslations?: () => void;\n\n connectedCallback(): void {\n super.connectedCallback();\n const I18nElement = customElements.get('foxy-i18n') as typeof I18n | undefined;\n this.__untrackTranslations = I18nElement?.onTranslationChange(() => this.requestUpdate());\n }\n\n /** @readonly */\n updated(changedProperties: Map<keyof I18n, unknown>): void {\n super.updated(changedProperties);\n\n const I18nElement = customElements.get('foxy-i18n') as typeof I18n | undefined;\n\n if (!I18nElement) return;\n\n if (changedProperties.has('lang')) I18nElement.i18next.loadLanguages(this.lang);\n\n if (changedProperties.has('ns')) {\n const namespaces = this.ns.split(' ').filter(v => v.length > 0);\n\n if (this.simplifyNsLoading) {\n if (namespaces[0]) I18nElement.i18next.loadNamespaces(namespaces[0]);\n } else {\n I18nElement.i18next.loadNamespaces(namespaces);\n }\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.__untrackTranslations?.();\n }\n\n applyInferredProperties(context: Map<string, unknown>): void {\n super.applyInferredProperties(context);\n if (this.infer === null) return;\n\n const simplifyNsLoading = context.get('simplifyNsLoading') as boolean | undefined;\n const lang = context.get('lang') as string | undefined;\n const ns = context.get('ns') as string | undefined;\n\n this.simplifyNsLoading = simplifyNsLoading ?? false;\n this.lang = lang ?? '';\n this.ns = ns ? `${ns} ${this.infer}`.trim() : defaultNS;\n }\n };\n};\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@foxy.io/elements",
3
3
  "type": "module",
4
- "version": "1.26.0-beta.2",
4
+ "version": "1.27.0-beta.1",
5
5
  "description": "E-commerce web components by Foxy.",
6
6
  "repository": {
7
7
  "type": "git",
@@ -1,2 +0,0 @@
1
- import{I as e}from"./shared-9f039798.js";import{_ as t}from"./shared-1522d76f.js";import{c as r,h as s}from"./shared-7f33a83a.js";import{r as o}from"./shared-d519a301.js";let a,d,i,n=e=>e;customElements.define("foxy-internal-source-control",class extends e{constructor(){super(...arguments),this.__hovered=!1,this.__focused=!1}static get properties(){return t(t({},super.properties),{},{__hovered:{attribute:!1},__focused:{attribute:!1}})}static get styles(){return[...super.styles,r(a||(a=n`.monospace{font-family:monospace}.resize-none{resize:none}.max-h-16em{max-height:16em}textarea::selection{background:var(--lumo-contrast-10pct)}`))]}renderControl(){var e;let t,r,a,l,c;return this.disabled?(t="bg-contrast-5 text-disabled",r="text-disabled",l="text-disabled",c="text-disabled",this.readonly?(t+=" border-dashed border-contrast-20",a="border-dashed border-contrast-30"):(t+=" border-transparent",a="border-contrast-10")):this.readonly?(t="border-dashed border-contrast-30 bg-transparent text-secondary",r="text-secondary",a="border-dashed border-contrast-30",l="text-secondary",c="text-secondary",this.__focused&&(a+=" ring-2 ring-primary-50")):this.__focused?(t="border-transparent bg-contrast-10 text-tertiary",r="text-secondary",a="border-primary-50 ring-1 ring-primary-50",l="text-body",c="text-primary"):this.__hovered?(t="border-transparent bg-contrast-20 text-tertiary",r="text-body",a="border-contrast-20",l="text-body",c="text-body"):(t="border-transparent bg-contrast-10 text-tertiary",r="text-secondary",a="border-contrast-10",l="text-body",c="text-secondary"),s(d||(d=n` <label class="block h-full" @mouseenter="${0}" @mouseleave="${0}"> <div class="mb-xs transition-colors leading-none text-s font-medium ${0}" part="label"> ${0} </div> <div class="max-h-16em h-full transition-colors flex-1 flex bg-base rounded overflow-auto border ${0}" part="editor"> <div class="h-full transition-colors monospace leading-s text-s p-m text-right border-r ${0}"> ${0} </div> <textarea placeholder="${0}" class="bg-base whitespace-pre leading-s text-s focus-outline-none monospace resize-none p-m block w-full select-text transition-colors ${0}" rows="1" .value="${0}" ?disabled="${0}" ?readonly="${0}" @focus="${0}" @blur="${0}" @input="${0}">
2
- </textarea> </div> <div class="mt-xs transition-colors leading-xs text-xs ${0}" part="helper-text"> ${0} </div> </label> `),(()=>this.__hovered=!0),(()=>this.__hovered=!1),c,this.label,a,t,o(null!==(e=this._value.split("\n"))&&void 0!==e?e:[],((e,t)=>String(t)),((e,t)=>s(i||(i=n`<div>${0}</div>`),t+1))),this.placeholder,l,this._value,this.disabled,this.readonly,(()=>this.__focused=!0),(()=>this.__focused=!1),(e=>{const t=e.currentTarget;this._value=t.value}),r,this.helperText)}updated(e){super.updated(e),this.renderRoot.querySelectorAll("textarea").forEach((e=>{e.style.height="auto",e.style.height=`${e.scrollHeight}px`,e.style.overflowY="hidden"}))}get _value(){var e;return null!==(e=super._value)&&void 0!==e?e:""}set _value(e){super._value=e}});
@@ -1 +0,0 @@
1
- import"./shared-cadbb2e3.js";import"./shared-8d51eaa6.js";import{I as e}from"./shared-a502026c.js";import{h as t}from"./shared-7f33a83a.js";import{_ as r,Y as i}from"./shared-1522d76f.js";import"./shared-2787655b.js";import"./foxy-spinner.js";import{C as n}from"./shared-b23c903e.js";import{T as s}from"./shared-550f9cae.js";import{N as a}from"./shared-6a7f96c4.js";import{c as o}from"./shared-4e709717.js";let l,d=e=>e;customElements.define("foxy-internal-delete-control",class extends e{constructor(){super(...arguments),this.theme="error"}static get properties(){return r(r({},super.properties),{},{theme:{type:String}})}renderControl(){return t(l||(l=d` <foxy-internal-confirm-dialog message="delete_prompt" confirm="delete" cancel="cancel" header="delete" theme="primary error" infer="" id="confirm" @hide="${0}"> </foxy-internal-confirm-dialog> <vaadin-button data-testid="delete" theme="${0}" class="w-full" ?disabled="${0}" @click="${0}"> <foxy-i18n infer="" key="delete"></foxy-i18n> </vaadin-button> `),(e=>{var t;return!e.detail.cancelled&&(null===(t=this.nucleon)||void 0===t?void 0:t.delete())}),this.theme,this.disabled||this.readonly,(e=>{this.renderRoot.querySelector("#confirm").show(e.currentTarget)}))}});let c,u=e=>e;customElements.define("foxy-internal-create-control",class extends e{constructor(){super(...arguments),this.theme="primary success"}static get properties(){return r(r({},super.properties),{},{theme:{type:String}})}renderControl(){return t(c||(c=u` <vaadin-button class="w-full" theme="${0}" ?disabled="${0}" @click="${0}"> <foxy-i18n infer="" key="create"></foxy-i18n> </vaadin-button> `),this.theme,this.disabled||this.__isInvalid,(()=>{var e;return null===(e=this.nucleon)||void 0===e?void 0:e.submit()}))}get __isCleanTemplateInvalid(){var e;return!!(null===(e=this.nucleon)||void 0===e?void 0:e.in({idle:{template:{clean:"invalid"}}}))}get __isDirtyTemplateInvalid(){var e;return!!(null===(e=this.nucleon)||void 0===e?void 0:e.in({idle:{template:{dirty:"invalid"}}}))}get __isCleanSnapshotInvalid(){var e;return!!(null===(e=this.nucleon)||void 0===e?void 0:e.in({idle:{snapshot:{clean:"invalid"}}}))}get __isDirtySnapshotInvalid(){var e;return!!(null===(e=this.nucleon)||void 0===e?void 0:e.in({idle:{snapshot:{dirty:"invalid"}}}))}get __isTemplateInvalid(){return this.__isCleanTemplateInvalid||this.__isDirtyTemplateInvalid}get __isSnapshotInvalid(){return this.__isCleanSnapshotInvalid||this.__isDirtySnapshotInvalid}get __isInvalid(){return this.__isSnapshotInvalid||this.__isTemplateInvalid}});let p,f=e=>e;customElements.define("foxy-internal-timestamps-control",class extends e{renderControl(){return t(p||(p=f` <p class="font-lumo text-xs leading-s text-secondary"> <foxy-i18n infer="" key="date_created"></foxy-i18n> <foxy-i18n .options="${0}" infer="" key="date"> </foxy-i18n> <span>&bull;<span> <foxy-i18n infer="" key="date_modified"></foxy-i18n> <foxy-i18n .options="${0}" infer="" key="date"> </foxy-i18n> </span></span></p> `),{value:i(this,"nucleon.data.date_created")},{value:i(this,"nucleon.data.date_modified")})}});let h,m,y,v,x,_=e=>e;const g=n(s(a));class b extends g{constructor(){super(...arguments),this.status=null}static get properties(){return r(r({},super.properties),{},{status:{type:Object}})}renderBody(){return this.data?t(h||(h=_` <foxy-internal-timestamps-control infer="timestamps"></foxy-internal-timestamps-control> <foxy-internal-delete-control infer="delete"></foxy-internal-delete-control> `)):t(m||(m=_`<foxy-internal-create-control infer="create"></foxy-internal-create-control>`))}render(){const e=!(this.in("idle")||this.in({busy:"fetching"})&&this.data);return t(y||(y=_` <div aria-busy="${0}" aria-live="polite" class="relative"> <div class="${0}"> ${0} ${0} ${0} </div> <div data-testid="spinner" class="${0}"> <foxy-spinner layout="${0}" class="m-auto" state="${0}" infer="spinner"> </foxy-spinner> </div> </div> `),this.in("busy"),o({"grid grid-cols-1 gap-m":!0,"transition-opacity":!0,"opacity-0 pointer-events-none":e}),this.__generalErrors.map((e=>this.__renderGeneralError(e))),this.status?this.__renderStatus(this.status):"",this.renderBody(),o({"transition-opacity absolute inset-0 flex":!0,"opacity-0 pointer-events-none":!e}),this.in("fail")?"vertical":"no-label",this.in("fail")?"error":"busy")}get __generalErrors(){const e=this.constructor.generalErrorPrefix;return this.errors.filter((t=>t.startsWith(e)))}__renderGeneralError(e){return t(v||(v=_` <foxy-i18n class="leading-xs text-body rounded bg-error-10 block" style="padding:calc(.625em + (var(--lumo-border-radius)/ 4) - 1px)" infer="error" key="${0}"> </foxy-i18n> `),e.replace("error:",""))}__renderStatus({key:e,options:r}){return t(x||(x=_` <p data-testid="status" class="leading-xs text-body rounded bg-success-10 flex items-start gap-m" style="padding:calc(.625em + (var(--lumo-border-radius)/ 4) - 1px)"> <foxy-i18n class="flex-1" infer="status" key="${0}" .options="${0}"></foxy-i18n> <vaadin-button class="flex-shrink-0" theme="success tertiary-inline" @click="${0}"> <foxy-i18n class="flex-1" infer="status" key="close"></foxy-i18n> </vaadin-button> </p> `),e,r,(()=>this.status=null))}}b.generalErrorPrefix="error:",customElements.define("foxy-internal-form",b);export{b as I};
@@ -1 +0,0 @@
1
- import"./foxy-spinner.js";import{I as e}from"./shared-55f58244.js";customElements.define("foxy-internal-card",e);