@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
@@ -10,12 +10,14 @@ import { repeat } from 'lit-html/directives/repeat';
10
10
  export class InternalSourceControl extends InternalEditableControl {
11
11
  constructor() {
12
12
  super(...arguments);
13
+ this.__isErrorVisible = false;
13
14
  this.__hovered = false;
14
15
  this.__focused = false;
15
16
  }
16
17
  static get properties() {
17
18
  return {
18
19
  ...super.properties,
20
+ __isErrorVisible: { attribute: false },
19
21
  __hovered: { attribute: false },
20
22
  __focused: { attribute: false },
21
23
  };
@@ -110,20 +112,25 @@ textarea::selection{
110
112
  part="editor"
111
113
  >
112
114
  <div
113
- class="h-full transition-colors monospace leading-s text-s p-m text-right border-r ${lineNumbersClass}"
115
+ class="h-full transition-colors monospace leading-s text-s text-right border-r ${lineNumbersClass}"
116
+ style="padding: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)"
114
117
  >
115
- ${repeat((_a = this._value.split('\n')) !== null && _a !== void 0 ? _a : [], (_, i) => String(i), (_, i) => html `<div>${i + 1}</div>`)}
118
+ ${repeat((_a = this._value.split('\n')) !== null && _a !== void 0 ? _a : [], (_, i) => String(i), (_, i) => html `<div>${i < 9 ? html `<span class="opacity-0">0</span>` : ''}${i < 99 ? html `<span class="opacity-0">0</span>` : ''}<span>${i + 1}<span></div>`)}
116
119
  </div>
117
120
 
118
121
  <textarea
119
122
  placeholder=${this.placeholder}
120
- class="bg-base whitespace-pre leading-s text-s focus-outline-none monospace resize-none p-m block w-full select-text transition-colors ${textAreaClass}"
123
+ class="bg-base whitespace-pre leading-s text-s focus-outline-none monospace resize-none block w-full select-text transition-colors ${textAreaClass}"
124
+ style="padding: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)"
121
125
  rows="1"
122
126
  .value=${this._value}
123
127
  ?disabled=${this.disabled}
124
128
  ?readonly=${this.readonly}
125
129
  @focus=${() => (this.__focused = true)}
126
- @blur=${() => (this.__focused = false)}
130
+ @blur=${() => {
131
+ this.__focused = false;
132
+ this.__isErrorVisible = true;
133
+ }}
127
134
  @input=${(evt) => {
128
135
  const textarea = evt.currentTarget;
129
136
  this._value = textarea.value;
@@ -135,9 +142,17 @@ textarea::selection{
135
142
  <div
136
143
  class="mt-xs transition-colors leading-xs text-xs ${helperTextClass}"
137
144
  part="helper-text"
145
+ ?hidden=${!this.helperText}
138
146
  >
139
147
  ${this.helperText}
140
148
  </div>
149
+
150
+ <div
151
+ class="mt-xs text-xs leading-xs text-error"
152
+ ?hidden=${!this.__isErrorVisible || !this._errorMessage || this.disabled || this.readonly}
153
+ >
154
+ ${this._errorMessage}
155
+ </div>
141
156
  </label>
142
157
  `;
143
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InternalSourceControl.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalSourceControl/InternalSourceControl.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CSSResultArray, PropertyDeclarations, TemplateResult } from 'lit-element';\n\nimport { InternalEditableControl } from '../InternalEditableControl/InternalEditableControl';\nimport { html, css } from 'lit-element';\nimport { repeat } from 'lit-html/directives/repeat';\n\n/**\n * Internal control displaying editable source code.\n *\n * @since 1.23.0\n * @element foxy-internal-source-control\n */\nexport class InternalSourceControl extends InternalEditableControl {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __hovered: { attribute: false },\n __focused: { attribute: false },\n };\n }\n\n static get styles(): CSSResultArray {\n return [\n ...super.styles,\n css`\n .monospace {\n font-family: monospace;\n }\n\n .resize-none {\n resize: none;\n }\n\n .max-h-16em {\n max-height: 16em;\n }\n\n textarea::selection {\n background: var(--lumo-contrast-10pct);\n }\n `,\n ];\n }\n\n private __hovered = false;\n\n private __focused = false;\n\n renderControl(): TemplateResult {\n let lineNumbersClass: string;\n let helperTextClass: string;\n let containerClass: string;\n let textAreaClass: string;\n let labelClass: string;\n\n if (this.disabled) {\n lineNumbersClass = 'bg-contrast-5 text-disabled';\n helperTextClass = 'text-disabled';\n textAreaClass = 'text-disabled';\n labelClass = 'text-disabled';\n\n if (this.readonly) {\n lineNumbersClass += ' border-dashed border-contrast-20';\n containerClass = 'border-dashed border-contrast-30';\n } else {\n lineNumbersClass += ' border-transparent';\n containerClass = 'border-contrast-10';\n }\n } else if (this.readonly) {\n lineNumbersClass = 'border-dashed border-contrast-30 bg-transparent text-secondary';\n helperTextClass = 'text-secondary';\n containerClass = 'border-dashed border-contrast-30';\n textAreaClass = 'text-secondary';\n labelClass = 'text-secondary';\n if (this.__focused) containerClass += ' ring-2 ring-primary-50';\n } else if (this.__focused) {\n lineNumbersClass = 'border-transparent bg-contrast-10 text-tertiary';\n helperTextClass = 'text-secondary';\n containerClass = 'border-primary-50 ring-1 ring-primary-50';\n textAreaClass = 'text-body';\n labelClass = 'text-primary';\n } else if (this.__hovered) {\n lineNumbersClass = 'border-transparent bg-contrast-20 text-tertiary';\n helperTextClass = 'text-body';\n containerClass = 'border-contrast-20';\n textAreaClass = 'text-body';\n labelClass = 'text-body';\n } else {\n lineNumbersClass = 'border-transparent bg-contrast-10 text-tertiary';\n helperTextClass = 'text-secondary';\n containerClass = 'border-contrast-10';\n textAreaClass = 'text-body';\n labelClass = 'text-secondary';\n }\n\n return html`\n <label\n class=\"block h-full\"\n @mouseenter=${() => (this.__hovered = true)}\n @mouseleave=${() => (this.__hovered = false)}\n >\n <div\n class=\"mb-xs transition-colors leading-none text-s font-medium ${labelClass}\"\n part=\"label\"\n >\n ${this.label}\n </div>\n\n <div\n class=\"max-h-16em h-full transition-colors flex-1 flex bg-base rounded overflow-auto border ${containerClass}\"\n part=\"editor\"\n >\n <div\n class=\"h-full transition-colors monospace leading-s text-s p-m text-right border-r ${lineNumbersClass}\"\n >\n ${repeat(\n this._value.split('\\n') ?? [],\n (_, i) => String(i),\n (_, i) => html`<div>${i + 1}</div>`\n )}\n </div>\n\n <textarea\n placeholder=${this.placeholder}\n class=\"bg-base whitespace-pre leading-s text-s focus-outline-none monospace resize-none p-m block w-full select-text transition-colors ${textAreaClass}\"\n rows=\"1\"\n .value=${this._value}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n @focus=${() => (this.__focused = true)}\n @blur=${() => (this.__focused = false)}\n @input=${(evt: InputEvent) => {\n const textarea = evt.currentTarget as HTMLTextAreaElement;\n this._value = textarea.value;\n }}\n >\n </textarea>\n </div>\n\n <div\n class=\"mt-xs transition-colors leading-xs text-xs ${helperTextClass}\"\n part=\"helper-text\"\n >\n ${this.helperText}\n </div>\n </label>\n `;\n }\n\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n this.renderRoot.querySelectorAll('textarea').forEach(textarea => {\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n textarea.style.overflowY = 'hidden';\n });\n }\n\n protected get _value(): string {\n return (super._value as string | undefined) ?? '';\n }\n\n protected set _value(newValue: string) {\n super._value = newValue as unknown | undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"InternalSourceControl.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalSourceControl/InternalSourceControl.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CSSResultArray, PropertyDeclarations, TemplateResult } from 'lit-element';\n\nimport { InternalEditableControl } from '../InternalEditableControl/InternalEditableControl';\nimport { html, css } from 'lit-element';\nimport { repeat } from 'lit-html/directives/repeat';\n\n/**\n * Internal control displaying editable source code.\n *\n * @since 1.23.0\n * @element foxy-internal-source-control\n */\nexport class InternalSourceControl extends InternalEditableControl {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __isErrorVisible: { attribute: false },\n __hovered: { attribute: false },\n __focused: { attribute: false },\n };\n }\n\n static get styles(): CSSResultArray {\n return [\n ...super.styles,\n css`\n .monospace {\n font-family: monospace;\n }\n\n .resize-none {\n resize: none;\n }\n\n .max-h-16em {\n max-height: 16em;\n }\n\n textarea::selection {\n background: var(--lumo-contrast-10pct);\n }\n `,\n ];\n }\n\n private __isErrorVisible = false;\n\n private __hovered = false;\n\n private __focused = false;\n\n renderControl(): TemplateResult {\n let lineNumbersClass: string;\n let helperTextClass: string;\n let containerClass: string;\n let textAreaClass: string;\n let labelClass: string;\n\n if (this.disabled) {\n lineNumbersClass = 'bg-contrast-5 text-disabled';\n helperTextClass = 'text-disabled';\n textAreaClass = 'text-disabled';\n labelClass = 'text-disabled';\n\n if (this.readonly) {\n lineNumbersClass += ' border-dashed border-contrast-20';\n containerClass = 'border-dashed border-contrast-30';\n } else {\n lineNumbersClass += ' border-transparent';\n containerClass = 'border-contrast-10';\n }\n } else if (this.readonly) {\n lineNumbersClass = 'border-dashed border-contrast-30 bg-transparent text-secondary';\n helperTextClass = 'text-secondary';\n containerClass = 'border-dashed border-contrast-30';\n textAreaClass = 'text-secondary';\n labelClass = 'text-secondary';\n if (this.__focused) containerClass += ' ring-2 ring-primary-50';\n } else if (this.__focused) {\n lineNumbersClass = 'border-transparent bg-contrast-10 text-tertiary';\n helperTextClass = 'text-secondary';\n containerClass = 'border-primary-50 ring-1 ring-primary-50';\n textAreaClass = 'text-body';\n labelClass = 'text-primary';\n } else if (this.__hovered) {\n lineNumbersClass = 'border-transparent bg-contrast-20 text-tertiary';\n helperTextClass = 'text-body';\n containerClass = 'border-contrast-20';\n textAreaClass = 'text-body';\n labelClass = 'text-body';\n } else {\n lineNumbersClass = 'border-transparent bg-contrast-10 text-tertiary';\n helperTextClass = 'text-secondary';\n containerClass = 'border-contrast-10';\n textAreaClass = 'text-body';\n labelClass = 'text-secondary';\n }\n\n return html`\n <label\n class=\"block h-full\"\n @mouseenter=${() => (this.__hovered = true)}\n @mouseleave=${() => (this.__hovered = false)}\n >\n <div\n class=\"mb-xs transition-colors leading-none text-s font-medium ${labelClass}\"\n part=\"label\"\n >\n ${this.label}\n </div>\n\n <div\n class=\"max-h-16em h-full transition-colors flex-1 flex bg-base rounded overflow-auto border ${containerClass}\"\n part=\"editor\"\n >\n <div\n class=\"h-full transition-colors monospace leading-s text-s text-right border-r ${lineNumbersClass}\"\n style=\"padding: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n ${repeat(\n this._value.split('\\n') ?? [],\n (_, i) => String(i),\n (_, i) =>\n html`<div>${i < 9 ? html`<span class=\"opacity-0\">0</span>` : ''}${\n i < 99 ? html`<span class=\"opacity-0\">0</span>` : ''\n }<span>${i + 1}<span></div>`\n )}\n </div>\n\n <textarea\n placeholder=${this.placeholder}\n class=\"bg-base whitespace-pre leading-s text-s focus-outline-none monospace resize-none block w-full select-text transition-colors ${textAreaClass}\"\n style=\"padding: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n rows=\"1\"\n .value=${this._value}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n @focus=${() => (this.__focused = true)}\n @blur=${() => {\n this.__focused = false;\n this.__isErrorVisible = true;\n }}\n @input=${(evt: InputEvent) => {\n const textarea = evt.currentTarget as HTMLTextAreaElement;\n this._value = textarea.value;\n }}\n >\n </textarea>\n </div>\n\n <div\n class=\"mt-xs transition-colors leading-xs text-xs ${helperTextClass}\"\n part=\"helper-text\"\n ?hidden=${!this.helperText}\n >\n ${this.helperText}\n </div>\n\n <div\n class=\"mt-xs text-xs leading-xs text-error\"\n ?hidden=${!this.__isErrorVisible || !this._errorMessage || this.disabled || this.readonly}\n >\n ${this._errorMessage}\n </div>\n </label>\n `;\n }\n\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n this.renderRoot.querySelectorAll('textarea').forEach(textarea => {\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n textarea.style.overflowY = 'hidden';\n });\n }\n\n protected get _value(): string {\n return (super._value as string | undefined) ?? '';\n }\n\n protected set _value(newValue: string) {\n super._value = newValue as unknown | undefined;\n }\n}\n"]}
@@ -1,13 +1,11 @@
1
- import { Data, Templates } from './types';
2
- import { ScopedElementsMap } from '@open-wc/scoped-elements';
3
- import { TemplateResult } from 'lit-html';
4
- import { NucleonElement } from '../NucleonElement/NucleonElement';
5
- import { NucleonV8N } from '../NucleonElement/types';
6
- declare const Base: typeof NucleonElement & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
1
+ import type { Data, Templates } from './types';
2
+ import type { TemplateResult } from 'lit-html';
3
+ import type { NucleonV8N } from '../NucleonElement/types';
4
+ import { BooleanSelector } from '@foxy.io/sdk/core';
5
+ import { InternalForm } from '../../internal/InternalForm/InternalForm';
6
+ declare const Base: typeof InternalForm & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
7
7
  defaultNS: string;
8
- } & {
9
- styles: import("lit-element").CSSResultArray;
10
- } & import("lit-element").Constructor<import("../../../mixins/configurable").ConfigurableMixinHost> & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/src/types").ScopedElementsHost>;
8
+ };
11
9
  /**
12
10
  * Basic form displaying customer address.
13
11
  *
@@ -57,22 +55,13 @@ declare const Base: typeof NucleonElement & import("lit-element").Constructor<im
57
55
  * @since 1.2.0
58
56
  */
59
57
  export declare class AddressForm extends Base<Data> {
60
- static get scopedElements(): ScopedElementsMap;
61
58
  static get v8n(): NucleonV8N<Data>;
62
59
  templates: Templates;
63
- private readonly __getValidator;
64
- private readonly __bindField;
65
- private readonly __maybeRenderCountry;
66
- private readonly __maybeRenderRegion;
67
- private readonly __maybeRenderTextField;
68
- private readonly __renderTimestamps;
69
- private readonly __renderAction;
70
- connectedCallback(): void;
71
- render(): TemplateResult;
72
- disconnectedCallback(): void;
73
- private __handleKeyDown;
74
- private __getErrorMessage;
75
- private __handleActionClick;
76
- private __handleConfirmHide;
60
+ private __countrySetValue;
61
+ get readonlySelector(): BooleanSelector;
62
+ get disabledSelector(): BooleanSelector;
63
+ renderBody(): TemplateResult;
64
+ private get __countryOptions();
65
+ private get __regionOptions();
77
66
  }
78
67
  export {};
@@ -1,16 +1,10 @@
1
- import { ScopedElementsMixin } from '@open-wc/scoped-elements';
2
- import { html } from 'lit-html';
3
- import { ConfigurableMixin } from "../../../mixins/configurable.js";
4
- import { NucleonElement } from "../NucleonElement/NucleonElement.js";
5
- import { Metadata } from "../../private/Metadata/Metadata.js";
6
- import { ThemeableMixin } from "../../../mixins/themeable.js";
7
1
  import { TranslatableMixin } from "../../../mixins/translatable.js";
8
- import { classMap } from "../../../utils/class-map.js";
2
+ import { BooleanSelector } from '@foxy.io/sdk/core';
3
+ import { InternalForm } from "../../internal/InternalForm/InternalForm.js";
9
4
  import { countries } from "./countries.js";
10
- import { ifDefined } from 'lit-html/directives/if-defined';
11
- import memoize from 'lodash-es/memoize';
5
+ import { html } from 'lit-html';
12
6
  const NS = 'address-form';
13
- const Base = ScopedElementsMixin(ConfigurableMixin(ThemeableMixin(TranslatableMixin(NucleonElement, NS))));
7
+ const Base = TranslatableMixin(InternalForm, NS);
14
8
  /**
15
9
  * Basic form displaying customer address.
16
10
  *
@@ -63,287 +57,94 @@ export class AddressForm extends Base {
63
57
  constructor() {
64
58
  super(...arguments);
65
59
  this.templates = {};
66
- this.__getValidator = memoize((prefix) => () => {
67
- return !this.errors.some(err => err.startsWith(prefix));
68
- });
69
- this.__bindField = memoize((key) => {
70
- return (evt) => {
71
- const target = evt.currentTarget;
72
- this.edit({ [key]: target.value });
73
- };
74
- });
75
- this.__maybeRenderCountry = () => {
76
- var _a, _b;
77
- const field = 'country';
78
- if (this.hiddenSelector.matches(field))
79
- return '';
80
- const source = Object.keys(countries);
81
- return html `
82
- <div>
83
- ${this.renderTemplateOrSlot(`${field}:before`)}
84
-
85
- <vaadin-combo-box
86
- class="w-full"
87
- label=${this.t(field).toString()}
88
- value=${ifDefined((_b = (_a = this.form) === null || _a === void 0 ? void 0 : _a[field]) === null || _b === void 0 ? void 0 : _b.toString())}
89
- error-message=${this.__getErrorMessage(field)}
90
- data-testid=${field}
91
- item-value-path="code"
92
- item-label-path="text"
93
- .checkValidity=${this.__getValidator(field)}
94
- .items=${source.map(code => ({
95
- text: this.t(`country_${code.toLowerCase()}`),
96
- code,
97
- }))}
98
- ?readonly=${this.readonlySelector.matches(field, true)}
99
- ?disabled=${!this.in('idle') || this.disabledSelector.matches(field, true)}
100
- @change=${(evt) => {
101
- const target = evt.currentTarget;
102
- this.edit({ country: target.value, region: '' });
103
- }}
104
- >
105
- </vaadin-combo-box>
106
-
107
- ${this.renderTemplateOrSlot(`${field}:after`)}
108
- </div>
109
- `;
110
- };
111
- this.__maybeRenderRegion = () => {
112
- var _a, _b, _c, _d, _e;
113
- const field = 'region';
114
- if (this.hiddenSelector.matches(field))
115
- return '';
116
- const source = (_b = countries[(_a = this.form.country) !== null && _a !== void 0 ? _a : '']) !== null && _b !== void 0 ? _b : [];
117
- const country = (_c = this.form.country) !== null && _c !== void 0 ? _c : '';
118
- return html `
119
- <div>
120
- ${this.renderTemplateOrSlot(`${field}:before`)}
121
-
122
- <vaadin-combo-box
123
- class="w-full"
124
- label=${this.t(field).toString()}
125
- value=${ifDefined((_e = (_d = this.form) === null || _d === void 0 ? void 0 : _d[field]) === null || _e === void 0 ? void 0 : _e.toString())}
126
- error-message=${this.__getErrorMessage(field)}
127
- data-testid=${field}
128
- item-value-path="code"
129
- item-label-path="text"
130
- .checkValidity=${this.__getValidator(field)}
131
- .items=${source.map(code => ({
132
- text: this.t(`country_${country.toLowerCase()}_region_${code.toLowerCase()}`),
133
- code,
134
- }))}
135
- ?allow-custom-value=${source.length === 0}
136
- ?readonly=${this.readonlySelector.matches(field, true)}
137
- ?disabled=${!this.in('idle') || this.disabledSelector.matches(field, true)}
138
- @change=${this.__bindField(field)}
139
- >
140
- </vaadin-combo-box>
141
-
142
- ${this.renderTemplateOrSlot(`${field}:after`)}
143
- </div>
144
- `;
145
- };
146
- this.__maybeRenderTextField = (params) => {
147
- var _a, _b;
148
- const { field, wide = false, readonly = false, required = false } = params;
149
- const bsid = field.replace(/_/, '-').replace('1', '-one').replace('2', '-two');
150
- if (this.hiddenSelector.matches(bsid))
151
- return '';
152
- return html `
153
- <div class=${classMap({ 'col-span-2': wide })}>
154
- ${this.renderTemplateOrSlot(`${bsid}:before`)}
155
-
156
- <vaadin-text-field
157
- class="w-full"
158
- label=${this.t(field).toString()}
159
- value=${ifDefined((_b = (_a = this.form) === null || _a === void 0 ? void 0 : _a[field]) === null || _b === void 0 ? void 0 : _b.toString())}
160
- error-message=${this.__getErrorMessage(field)}
161
- data-testid=${bsid}
162
- .checkValidity=${this.__getValidator(field)}
163
- ?disabled=${!this.in('idle') || this.disabledSelector.matches(bsid)}
164
- ?required=${required}
165
- ?readonly=${readonly || this.readonlySelector.matches(bsid)}
166
- @input=${this.__bindField(field)}
167
- @keydown=${this.__handleKeyDown}
168
- >
169
- </vaadin-text-field>
170
-
171
- ${this.renderTemplateOrSlot(`${bsid}:after`)}
172
- </div>
173
- `;
174
- };
175
- this.__renderTimestamps = () => {
176
- const items = ['date_modified', 'date_created'].map(field => {
177
- var _a;
178
- return ({
179
- name: this.t(field),
180
- value: ((_a = this.data) === null || _a === void 0 ? void 0 : _a[field]) ? this.t('date', { value: new Date(this.data[field]) })
181
- : '',
182
- });
183
- });
184
- return html `
185
- <div>
186
- ${this.renderTemplateOrSlot('timestamps:before')}
187
- <x-metadata .items=${items} data-testid="timestamps"></x-metadata>
188
- ${this.renderTemplateOrSlot('timestamps:after')}
189
- </div>
190
- `;
191
- };
192
- this.__renderAction = (action) => {
193
- var _a, _b;
194
- const isTemplateValid = this.in({ idle: { template: { dirty: 'valid' } } });
195
- const isSnapshotValid = this.in({ idle: { snapshot: { dirty: 'valid' } } });
196
- const isDisabled = !this.in('idle') || this.disabledSelector.matches(action, true);
197
- const isDefaultShipping = !!((_a = this.form) === null || _a === void 0 ? void 0 : _a.is_default_shipping);
198
- const isDefaultBilling = !!((_b = this.form) === null || _b === void 0 ? void 0 : _b.is_default_billing);
199
- const isDefault = isDefaultShipping || isDefaultBilling;
200
- const isValid = isTemplateValid || isSnapshotValid;
201
- return html `
202
- <div>
203
- ${this.renderTemplateOrSlot(`${action}:before`)}
204
-
205
- <vaadin-button
206
- class="w-full"
207
- theme=${this.in('idle') ? `${this.href ? 'error' : 'primary success'}` : ''}
208
- data-testid=${action}
209
- ?disabled=${(this.in({ idle: 'template' }) && !isValid) || isDisabled || isDefault}
210
- @click=${this.__handleActionClick}
211
- >
212
- <foxy-i18n ns=${this.ns} key=${action} lang=${this.lang}></foxy-i18n>
213
- </vaadin-button>
214
-
215
- ${this.renderTemplateOrSlot(`${action}:after`)}
216
- </div>
217
- `;
218
- };
219
- }
220
- static get scopedElements() {
221
- return {
222
- 'foxy-internal-confirm-dialog': customElements.get('foxy-internal-confirm-dialog'),
223
- 'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),
224
- 'vaadin-text-field': customElements.get('vaadin-text-field'),
225
- 'vaadin-combo-box': customElements.get('vaadin-combo-box'),
226
- 'x-metadata': Metadata,
227
- 'vaadin-button': customElements.get('vaadin-button'),
228
- 'foxy-spinner': customElements.get('foxy-spinner'),
229
- 'foxy-i18n': customElements.get('foxy-i18n'),
60
+ this.__countrySetValue = (newValue) => {
61
+ this.edit({ country: newValue, region: '' });
230
62
  };
231
63
  }
232
64
  static get v8n() {
233
65
  return [
234
- ({ address_name: v }) => (v && v.length > 0) || 'address_name_required',
235
- ({ address_name: v }) => !v || v.length <= 100 || 'address_name_too_long',
236
- ({ first_name: v }) => !v || v.length <= 50 || 'first_name_too_long',
237
- ({ last_name: v }) => !v || v.length <= 50 || 'last_name_too_long',
238
- ({ region: v }) => !v || v.length <= 50 || 'region_too_long',
239
- ({ city: v }) => !v || v.length <= 50 || 'city_too_long',
240
- ({ phone: v }) => !v || v.length <= 50 || 'phone_too_long',
241
- ({ company: v }) => !v || v.length <= 50 || 'company_too_long',
242
- ({ address2: v }) => !v || v.length <= 100 || 'address2_too_long',
243
- ({ address1: v }) => (v && v.length > 0) || 'address1_required',
244
- ({ address1: v }) => (v && v.length <= 100) || 'address1_too_long',
245
- ({ postal_code: v }) => !v || v.length <= 50 || 'postal_code_too_long',
66
+ ({ address_name: v }) => (v && v.length > 0) || 'address-name:v8n_required',
67
+ ({ address_name: v }) => !v || v.length <= 100 || 'address-name:v8n_too_long',
68
+ ({ first_name: v }) => !v || v.length <= 50 || 'first-name:v8n_too_long',
69
+ ({ last_name: v }) => !v || v.length <= 50 || 'last-name:v8n_too_long',
70
+ ({ region: v }) => !v || v.length <= 50 || 'region:v8n_too_long',
71
+ ({ city: v }) => !v || v.length <= 50 || 'city:v8n_too_long',
72
+ ({ phone: v }) => !v || v.length <= 50 || 'phone:v8n_too_long',
73
+ ({ company: v }) => !v || v.length <= 50 || 'company:v8n_too_long',
74
+ ({ address2: v }) => !v || v.length <= 100 || 'address-two:v8n_too_long',
75
+ ({ address1: v }) => (v && v.length > 0) || 'address-one:v8n_required',
76
+ ({ address1: v }) => !v || v.length <= 100 || 'address-one:v8n_too_long',
77
+ ({ postal_code: v }) => !v || v.length <= 50 || 'postal-code:v8n_too_long',
246
78
  ];
247
79
  }
248
- connectedCallback() {
249
- super.connectedCallback();
250
- customElements.get('foxy-i18n').i18next.loadNamespaces(['country', 'region']);
80
+ get readonlySelector() {
81
+ var _a, _b;
82
+ const alwaysReadonly = [super.readonlySelector.toString()];
83
+ const isDefault = !!((_a = this.data) === null || _a === void 0 ? void 0 : _a.is_default_shipping) || !!((_b = this.data) === null || _b === void 0 ? void 0 : _b.is_default_billing);
84
+ if (isDefault)
85
+ alwaysReadonly.unshift('address-name');
86
+ return new BooleanSelector(alwaysReadonly.join(' ').trim());
87
+ }
88
+ get disabledSelector() {
89
+ var _a, _b;
90
+ const alwaysDisabled = [super.disabledSelector.toString()];
91
+ const isDefault = !!((_a = this.data) === null || _a === void 0 ? void 0 : _a.is_default_shipping) || !!((_b = this.data) === null || _b === void 0 ? void 0 : _b.is_default_billing);
92
+ if (isDefault)
93
+ alwaysDisabled.unshift('delete');
94
+ return new BooleanSelector(alwaysDisabled.join(' ').trim());
251
95
  }
252
- render() {
253
- var _a, _b, _c, _d;
254
- const { hiddenSelector, lang, ns } = this;
255
- const action = this.href ? 'delete' : 'create';
256
- const isDefaultShipping = !!((_a = this.form) === null || _a === void 0 ? void 0 : _a.is_default_shipping);
257
- const isDefaultBilling = !!((_b = this.form) === null || _b === void 0 ? void 0 : _b.is_default_billing);
258
- const isDefault = isDefaultShipping || isDefaultBilling;
259
- const isBusy = this.in('busy');
260
- const isFail = this.in('fail');
96
+ renderBody() {
97
+ const regionOptions = this.__regionOptions;
261
98
  return html `
262
- <foxy-internal-confirm-dialog
263
- message="delete_prompt"
264
- confirm="delete"
265
- cancel="cancel"
266
- header="delete"
267
- theme="primary error"
268
- lang=${lang}
269
- ns=${ns}
270
- id="confirm"
271
- data-testid="confirm"
272
- @hide=${this.__handleConfirmHide}
273
- >
274
- </foxy-internal-confirm-dialog>
99
+ <div class="grid grid-cols-2 gap-m">
100
+ <foxy-internal-text-control class="col-span-2" infer="address-name">
101
+ </foxy-internal-text-control>
102
+
103
+ <foxy-internal-text-control infer="first-name"></foxy-internal-text-control>
104
+ <foxy-internal-text-control infer="last-name"></foxy-internal-text-control>
105
+ <foxy-internal-text-control infer="company"></foxy-internal-text-control>
106
+ <foxy-internal-text-control infer="phone"></foxy-internal-text-control>
275
107
 
276
- <div
277
- class="space-y-l font-lumo text-m leading-m text-body relative"
278
- aria-busy=${this.in('busy')}
279
- aria-live="polite"
280
- data-testid="wrapper"
281
- >
282
- <div class="grid grid-cols-2 gap-m">
283
- ${this.__maybeRenderTextField({
284
- field: 'address_name',
285
- wide: true,
286
- readonly: isDefault,
287
- required: true,
288
- })}
289
- ${this.__maybeRenderTextField({ field: 'first_name' })}
290
- ${this.__maybeRenderTextField({ field: 'last_name' })}
291
- ${this.__maybeRenderTextField({ field: 'company' })}
292
- ${this.__maybeRenderTextField({ field: 'phone' })}
293
- ${this.__maybeRenderTextField({ field: 'address1', wide: true, required: true })}
294
- ${this.__maybeRenderTextField({ field: 'address2', wide: true })}
295
- ${this.__maybeRenderCountry()} ${this.__maybeRenderRegion()}
296
- ${this.__maybeRenderTextField({ field: 'city' })}
297
- ${this.__maybeRenderTextField({ field: 'postal_code' })}
298
- </div>
108
+ <foxy-internal-text-control class="col-span-2" infer="address-one" property="address1">
109
+ </foxy-internal-text-control>
299
110
 
300
- ${!this.data || hiddenSelector.matches('timestamps', true) ? '' : this.__renderTimestamps()}
301
- ${hiddenSelector.matches(action, true) ? '' : this.__renderAction(action)}
111
+ <foxy-internal-text-control class="col-span-2" infer="address-two" property="address2">
112
+ </foxy-internal-text-control>
302
113
 
303
- <div
304
- data-testid="spinner"
305
- class=${classMap({
306
- 'transition duration-500 ease-in-out absolute inset-0 flex': true,
307
- 'opacity-0 pointer-events-none': !isBusy && !isFail,
308
- })}
114
+ <foxy-internal-select-control
115
+ infer="country"
116
+ .options=${this.__countryOptions}
117
+ .setValue=${this.__countrySetValue}
309
118
  >
310
- <foxy-spinner
311
- layout="vertical"
312
- class="m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l"
313
- state=${isFail ? 'error' : isBusy ? 'busy' : 'empty'}
314
- lang=${lang}
315
- ns="${this.ns} ${(_d = (_c = customElements.get('foxy-spinner')) === null || _c === void 0 ? void 0 : _c.defaultNS) !== null && _d !== void 0 ? _d : ''}"
316
- >
317
- </foxy-spinner>
318
- </div>
119
+ </foxy-internal-select-control>
120
+
121
+ ${regionOptions.length > 0
122
+ ? html `
123
+ <foxy-internal-select-control infer="region" .options=${regionOptions}>
124
+ </foxy-internal-select-control>
125
+ `
126
+ : html `<foxy-internal-text-control infer="region"></foxy-internal-text-control>`}
127
+
128
+ <foxy-internal-text-control infer="city"></foxy-internal-text-control>
129
+ <foxy-internal-text-control infer="postal-code"></foxy-internal-text-control>
319
130
  </div>
131
+ ${super.renderBody()}
320
132
  `;
321
133
  }
322
- disconnectedCallback() {
323
- var _a, _b;
324
- super.disconnectedCallback();
325
- (_b = (_a = this.__getValidator.cache).clear) === null || _b === void 0 ? void 0 : _b.call(_a);
326
- }
327
- __handleKeyDown(evt) {
328
- if (evt.key === 'Enter')
329
- this.submit();
330
- }
331
- __getErrorMessage(prefix) {
332
- const error = this.errors.find(err => err.startsWith(prefix));
333
- return error ? this.t(error.replace(prefix, 'v8n')).toString() : '';
134
+ get __countryOptions() {
135
+ return Object.keys(countries).map(code => ({
136
+ label: this.t(`country_${code.toLowerCase()}`),
137
+ value: code,
138
+ }));
334
139
  }
335
- __handleActionClick(evt) {
336
- if (this.in({ idle: 'snapshot' })) {
337
- const confirm = this.renderRoot.querySelector('#confirm');
338
- confirm.show(evt.currentTarget);
339
- }
340
- else {
341
- this.submit();
342
- }
343
- }
344
- __handleConfirmHide(evt) {
345
- if (!evt.detail.cancelled)
346
- this.delete();
140
+ get __regionOptions() {
141
+ var _a, _b;
142
+ const country = (_a = this.form.country) !== null && _a !== void 0 ? _a : '';
143
+ const source = (_b = countries[country]) !== null && _b !== void 0 ? _b : [];
144
+ return source.map(code => ({
145
+ label: this.t(`country_${country.toLowerCase()}_region_${code.toLowerCase()}`),
146
+ value: code,
147
+ }));
347
148
  }
348
149
  }
349
150
  //# sourceMappingURL=AddressForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddressForm.js","sourceRoot":"","sources":["../../../../src/elements/public/AddressForm/AddressForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { Data, Templates, TextFieldParams } from './types';\nimport { ScopedElementsMap, ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { TemplateResult, html } from 'lit-html';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { DialogHideEvent } from '../../private/Dialog/DialogHideEvent';\nimport { InternalConfirmDialog } from '../../internal/InternalConfirmDialog/InternalConfirmDialog';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { NucleonV8N } from '../NucleonElement/types';\nimport { Metadata } from '../../private/Metadata/Metadata';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { countries } from './countries';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport memoize from 'lodash-es/memoize';\n\nconst NS = 'address-form';\nconst Base = ScopedElementsMixin(\n ConfigurableMixin(ThemeableMixin(TranslatableMixin(NucleonElement, NS)))\n);\n\n/**\n * Basic form displaying customer address.\n *\n * @slot address-name:before - **new in v1.4.0**\n * @slot address-name:after - **new in v1.4.0**\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 region:before - **new in v1.4.0**\n * @slot region:after - **new in v1.4.0**\n *\n * @slot city:before - **new in v1.4.0**\n * @slot city:after - **new in v1.4.0**\n *\n * @slot phone:before - **new in v1.4.0**\n * @slot phone:after - **new in v1.4.0**\n *\n * @slot company:before - **new in v1.4.0**\n * @slot company:after - **new in v1.4.0**\n *\n * @slot address-one:before - **new in v1.4.0**\n * @slot address-one:after - **new in v1.4.0**\n *\n * @slot address-two:before - **new in v1.4.0**\n * @slot address-two:after - **new in v1.4.0**\n *\n * @slot country:before - **new in v1.4.0**\n * @slot country:after - **new in v1.4.0**\n *\n * @slot postal-code:before - **new in v1.4.0**\n * @slot postal-code:after - **new in v1.4.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-address-form\n * @since 1.2.0\n */\nexport class AddressForm extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'foxy-internal-confirm-dialog': customElements.get('foxy-internal-confirm-dialog'),\n 'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),\n 'vaadin-text-field': customElements.get('vaadin-text-field'),\n 'vaadin-combo-box': customElements.get('vaadin-combo-box'),\n 'x-metadata': Metadata,\n 'vaadin-button': customElements.get('vaadin-button'),\n 'foxy-spinner': customElements.get('foxy-spinner'),\n 'foxy-i18n': customElements.get('foxy-i18n'),\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ address_name: v }) => (v && v.length > 0) || 'address_name_required',\n ({ address_name: v }) => !v || v.length <= 100 || 'address_name_too_long',\n ({ first_name: v }) => !v || v.length <= 50 || 'first_name_too_long',\n ({ last_name: v }) => !v || v.length <= 50 || 'last_name_too_long',\n ({ region: v }) => !v || v.length <= 50 || 'region_too_long',\n ({ city: v }) => !v || v.length <= 50 || 'city_too_long',\n ({ phone: v }) => !v || v.length <= 50 || 'phone_too_long',\n ({ company: v }) => !v || v.length <= 50 || 'company_too_long',\n ({ address2: v }) => !v || v.length <= 100 || 'address2_too_long',\n ({ address1: v }) => (v && v.length > 0) || 'address1_required',\n ({ address1: v }) => (v && v.length <= 100) || 'address1_too_long',\n ({ postal_code: v }) => !v || v.length <= 50 || 'postal_code_too_long',\n ];\n }\n\n templates: Templates = {};\n\n private readonly __getValidator = memoize((prefix: string) => () => {\n return !this.errors.some(err => err.startsWith(prefix));\n });\n\n private readonly __bindField = memoize((key: keyof Data) => {\n return (evt: CustomEvent) => {\n const target = evt.currentTarget as HTMLInputElement;\n this.edit({ [key]: target.value });\n };\n });\n\n private readonly __maybeRenderCountry = () => {\n const field = 'country';\n if (this.hiddenSelector.matches(field)) return '';\n const source = Object.keys(countries);\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${field}:before`)}\n\n <vaadin-combo-box\n class=\"w-full\"\n label=${this.t(field).toString()}\n value=${ifDefined(this.form?.[field]?.toString())}\n error-message=${this.__getErrorMessage(field)}\n data-testid=${field}\n item-value-path=\"code\"\n item-label-path=\"text\"\n .checkValidity=${this.__getValidator(field)}\n .items=${source.map(code => ({\n text: this.t(`country_${code.toLowerCase()}`),\n code,\n }))}\n ?readonly=${this.readonlySelector.matches(field, true)}\n ?disabled=${!this.in('idle') || this.disabledSelector.matches(field, true)}\n @change=${(evt: CustomEvent) => {\n const target = evt.currentTarget as HTMLInputElement;\n this.edit({ country: target.value, region: '' });\n }}\n >\n </vaadin-combo-box>\n\n ${this.renderTemplateOrSlot(`${field}:after`)}\n </div>\n `;\n };\n\n private readonly __maybeRenderRegion = () => {\n const field = 'region';\n if (this.hiddenSelector.matches(field)) return '';\n const source = countries[this.form.country ?? ''] ?? [];\n const country = this.form.country ?? '';\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${field}:before`)}\n\n <vaadin-combo-box\n class=\"w-full\"\n label=${this.t(field).toString()}\n value=${ifDefined(this.form?.[field]?.toString())}\n error-message=${this.__getErrorMessage(field)}\n data-testid=${field}\n item-value-path=\"code\"\n item-label-path=\"text\"\n .checkValidity=${this.__getValidator(field)}\n .items=${source.map(code => ({\n text: this.t(`country_${country.toLowerCase()}_region_${code.toLowerCase()}`),\n code,\n }))}\n ?allow-custom-value=${source.length === 0}\n ?readonly=${this.readonlySelector.matches(field, true)}\n ?disabled=${!this.in('idle') || this.disabledSelector.matches(field, true)}\n @change=${this.__bindField(field)}\n >\n </vaadin-combo-box>\n\n ${this.renderTemplateOrSlot(`${field}:after`)}\n </div>\n `;\n };\n\n private readonly __maybeRenderTextField = (params: TextFieldParams) => {\n const { field, wide = false, readonly = false, required = false } = params;\n const bsid = field.replace(/_/, '-').replace('1', '-one').replace('2', '-two');\n if (this.hiddenSelector.matches(bsid)) return '';\n\n return html`\n <div class=${classMap({ 'col-span-2': wide })}>\n ${this.renderTemplateOrSlot(`${bsid}:before`)}\n\n <vaadin-text-field\n class=\"w-full\"\n label=${this.t(field).toString()}\n value=${ifDefined(this.form?.[field]?.toString())}\n error-message=${this.__getErrorMessage(field)}\n data-testid=${bsid}\n .checkValidity=${this.__getValidator(field)}\n ?disabled=${!this.in('idle') || this.disabledSelector.matches(bsid)}\n ?required=${required}\n ?readonly=${readonly || this.readonlySelector.matches(bsid)}\n @input=${this.__bindField(field)}\n @keydown=${this.__handleKeyDown}\n >\n </vaadin-text-field>\n\n ${this.renderTemplateOrSlot(`${bsid}:after`)}\n </div>\n `;\n };\n\n private readonly __renderTimestamps = () => {\n const items = (['date_modified', 'date_created'] as const).map(field => ({\n name: this.t(field),\n value: this.data?.[field]\n ? this.t('date', { value: new Date(this.data[field] as string) })\n : '',\n }));\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('timestamps:before')}\n <x-metadata .items=${items} data-testid=\"timestamps\"></x-metadata>\n ${this.renderTemplateOrSlot('timestamps:after')}\n </div>\n `;\n };\n\n private readonly __renderAction = (action: string) => {\n const isTemplateValid = this.in({ idle: { template: { dirty: 'valid' } } });\n const isSnapshotValid = this.in({ idle: { snapshot: { dirty: 'valid' } } });\n const isDisabled = !this.in('idle') || this.disabledSelector.matches(action, true);\n const isDefaultShipping = !!this.form?.is_default_shipping;\n const isDefaultBilling = !!this.form?.is_default_billing;\n const isDefault = isDefaultShipping || isDefaultBilling;\n const isValid = isTemplateValid || isSnapshotValid;\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${action}:before`)}\n\n <vaadin-button\n class=\"w-full\"\n theme=${this.in('idle') ? `${this.href ? 'error' : 'primary success'}` : ''}\n data-testid=${action}\n ?disabled=${(this.in({ idle: 'template' }) && !isValid) || isDisabled || isDefault}\n @click=${this.__handleActionClick}\n >\n <foxy-i18n ns=${this.ns} key=${action} lang=${this.lang}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot(`${action}:after`)}\n </div>\n `;\n };\n\n connectedCallback(): void {\n super.connectedCallback();\n customElements.get('foxy-i18n').i18next.loadNamespaces(['country', 'region']);\n }\n\n render(): TemplateResult {\n const { hiddenSelector, lang, ns } = this;\n const action = this.href ? 'delete' : 'create';\n\n const isDefaultShipping = !!this.form?.is_default_shipping;\n const isDefaultBilling = !!this.form?.is_default_billing;\n const isDefault = isDefaultShipping || isDefaultBilling;\n const isBusy = this.in('busy');\n const isFail = this.in('fail');\n\n return html`\n <foxy-internal-confirm-dialog\n message=\"delete_prompt\"\n confirm=\"delete\"\n cancel=\"cancel\"\n header=\"delete\"\n theme=\"primary error\"\n lang=${lang}\n ns=${ns}\n id=\"confirm\"\n data-testid=\"confirm\"\n @hide=${this.__handleConfirmHide}\n >\n </foxy-internal-confirm-dialog>\n\n <div\n class=\"space-y-l font-lumo text-m leading-m text-body relative\"\n aria-busy=${this.in('busy')}\n aria-live=\"polite\"\n data-testid=\"wrapper\"\n >\n <div class=\"grid grid-cols-2 gap-m\">\n ${this.__maybeRenderTextField({\n field: 'address_name',\n wide: true,\n readonly: isDefault,\n required: true,\n })}\n ${this.__maybeRenderTextField({ field: 'first_name' })}\n ${this.__maybeRenderTextField({ field: 'last_name' })}\n ${this.__maybeRenderTextField({ field: 'company' })}\n ${this.__maybeRenderTextField({ field: 'phone' })}\n ${this.__maybeRenderTextField({ field: 'address1', wide: true, required: true })}\n ${this.__maybeRenderTextField({ field: 'address2', wide: true })}\n ${this.__maybeRenderCountry()} ${this.__maybeRenderRegion()}\n ${this.__maybeRenderTextField({ field: 'city' })}\n ${this.__maybeRenderTextField({ field: 'postal_code' })}\n </div>\n\n ${!this.data || hiddenSelector.matches('timestamps', true) ? '' : this.__renderTimestamps()}\n ${hiddenSelector.matches(action, true) ? '' : this.__renderAction(action)}\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 && !isFail,\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=${isFail ? 'error' : isBusy ? 'busy' : 'empty'}\n lang=${lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.__getValidator.cache.clear?.();\n }\n\n private __handleKeyDown(evt: KeyboardEvent) {\n if (evt.key === 'Enter') this.submit();\n }\n\n private __getErrorMessage(prefix: string) {\n const error = this.errors.find(err => err.startsWith(prefix));\n return error ? this.t(error.replace(prefix, 'v8n')).toString() : '';\n }\n\n private __handleActionClick(evt: Event) {\n if (this.in({ idle: 'snapshot' })) {\n const confirm = this.renderRoot.querySelector('#confirm');\n (confirm as InternalConfirmDialog).show(evt.currentTarget as HTMLElement);\n } else {\n this.submit();\n }\n }\n\n private __handleConfirmHide(evt: DialogHideEvent) {\n if (!evt.detail.cancelled) this.delete();\n }\n}\n"]}
1
+ {"version":3,"file":"AddressForm.js","sourceRoot":"","sources":["../../../../src/elements/public/AddressForm/AddressForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Data, Templates } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { countries } from './countries';\nimport { html } from 'lit-html';\n\nconst NS = 'address-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\n/**\n * Basic form displaying customer address.\n *\n * @slot address-name:before - **new in v1.4.0**\n * @slot address-name:after - **new in v1.4.0**\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 region:before - **new in v1.4.0**\n * @slot region:after - **new in v1.4.0**\n *\n * @slot city:before - **new in v1.4.0**\n * @slot city:after - **new in v1.4.0**\n *\n * @slot phone:before - **new in v1.4.0**\n * @slot phone:after - **new in v1.4.0**\n *\n * @slot company:before - **new in v1.4.0**\n * @slot company:after - **new in v1.4.0**\n *\n * @slot address-one:before - **new in v1.4.0**\n * @slot address-one:after - **new in v1.4.0**\n *\n * @slot address-two:before - **new in v1.4.0**\n * @slot address-two:after - **new in v1.4.0**\n *\n * @slot country:before - **new in v1.4.0**\n * @slot country:after - **new in v1.4.0**\n *\n * @slot postal-code:before - **new in v1.4.0**\n * @slot postal-code:after - **new in v1.4.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-address-form\n * @since 1.2.0\n */\nexport class AddressForm extends Base<Data> {\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ address_name: v }) => (v && v.length > 0) || 'address-name:v8n_required',\n ({ address_name: v }) => !v || v.length <= 100 || 'address-name:v8n_too_long',\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 ({ region: v }) => !v || v.length <= 50 || 'region:v8n_too_long',\n ({ city: v }) => !v || v.length <= 50 || 'city:v8n_too_long',\n ({ phone: v }) => !v || v.length <= 50 || 'phone:v8n_too_long',\n ({ company: v }) => !v || v.length <= 50 || 'company:v8n_too_long',\n ({ address2: v }) => !v || v.length <= 100 || 'address-two:v8n_too_long',\n ({ address1: v }) => (v && v.length > 0) || 'address-one:v8n_required',\n ({ address1: v }) => !v || v.length <= 100 || 'address-one:v8n_too_long',\n ({ postal_code: v }) => !v || v.length <= 50 || 'postal-code:v8n_too_long',\n ];\n }\n\n templates: Templates = {};\n\n private __countrySetValue = (newValue: string) => {\n this.edit({ country: newValue, region: '' });\n };\n\n get readonlySelector(): BooleanSelector {\n const alwaysReadonly = [super.readonlySelector.toString()];\n const isDefault = !!this.data?.is_default_shipping || !!this.data?.is_default_billing;\n if (isDefault) alwaysReadonly.unshift('address-name');\n return new BooleanSelector(alwaysReadonly.join(' ').trim());\n }\n\n get disabledSelector(): BooleanSelector {\n const alwaysDisabled = [super.disabledSelector.toString()];\n const isDefault = !!this.data?.is_default_shipping || !!this.data?.is_default_billing;\n if (isDefault) alwaysDisabled.unshift('delete');\n return new BooleanSelector(alwaysDisabled.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n const regionOptions = this.__regionOptions;\n\n return html`\n <div class=\"grid grid-cols-2 gap-m\">\n <foxy-internal-text-control class=\"col-span-2\" infer=\"address-name\">\n </foxy-internal-text-control>\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 <foxy-internal-text-control infer=\"company\"></foxy-internal-text-control>\n <foxy-internal-text-control infer=\"phone\"></foxy-internal-text-control>\n\n <foxy-internal-text-control class=\"col-span-2\" infer=\"address-one\" property=\"address1\">\n </foxy-internal-text-control>\n\n <foxy-internal-text-control class=\"col-span-2\" infer=\"address-two\" property=\"address2\">\n </foxy-internal-text-control>\n\n <foxy-internal-select-control\n infer=\"country\"\n .options=${this.__countryOptions}\n .setValue=${this.__countrySetValue}\n >\n </foxy-internal-select-control>\n\n ${regionOptions.length > 0\n ? html`\n <foxy-internal-select-control infer=\"region\" .options=${regionOptions}>\n </foxy-internal-select-control>\n `\n : html`<foxy-internal-text-control infer=\"region\"></foxy-internal-text-control>`}\n\n <foxy-internal-text-control infer=\"city\"></foxy-internal-text-control>\n <foxy-internal-text-control infer=\"postal-code\"></foxy-internal-text-control>\n </div>\n ${super.renderBody()}\n `;\n }\n\n private get __countryOptions() {\n return Object.keys(countries).map(code => ({\n label: this.t(`country_${code.toLowerCase()}`),\n value: code,\n }));\n }\n\n private get __regionOptions() {\n const country = this.form.country ?? '';\n const source = countries[country] ?? [];\n\n return source.map(code => ({\n label: this.t(`country_${country.toLowerCase()}_region_${code.toLowerCase()}`),\n value: code,\n }));\n }\n}\n"]}