@foxy.io/elements 1.18.0-beta.11 → 1.18.0-beta.13

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 (200) 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-api-browser.js +1 -1
  5. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  6. package/dist/cdn/foxy-attribute-card.js +1 -1
  7. package/dist/cdn/foxy-attribute-form.js +1 -1
  8. package/dist/cdn/foxy-cancellation-form.js +1 -1
  9. package/dist/cdn/foxy-collection-page.js +1 -1
  10. package/dist/cdn/foxy-collection-pages.js +1 -1
  11. package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
  12. package/dist/cdn/foxy-coupon-card.js +1 -1
  13. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  14. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  15. package/dist/cdn/foxy-coupon-detail-card.js +1 -1
  16. package/dist/cdn/foxy-coupon-form.js +1 -1
  17. package/dist/cdn/foxy-custom-field-card.js +1 -1
  18. package/dist/cdn/foxy-custom-field-form.js +1 -1
  19. package/dist/cdn/foxy-customer-api.js +1 -1
  20. package/dist/cdn/foxy-customer-card.js +1 -1
  21. package/dist/cdn/foxy-customer-form.js +1 -1
  22. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  23. package/dist/cdn/foxy-customer-portal.js +2 -2
  24. package/dist/cdn/foxy-customer.js +1 -1
  25. package/dist/cdn/foxy-customers-table.js +1 -1
  26. package/dist/cdn/foxy-discount-builder.js +1 -1
  27. package/dist/cdn/foxy-discount-card.js +1 -1
  28. package/dist/cdn/foxy-discount-detail-card.js +1 -1
  29. package/dist/cdn/foxy-donation.js +1 -1
  30. package/dist/cdn/foxy-email-template-card.js +1 -1
  31. package/dist/cdn/foxy-email-template-form.js +1 -1
  32. package/dist/cdn/foxy-error-entry-card.js +1 -1
  33. package/dist/cdn/foxy-form-dialog.js +1 -1
  34. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  35. package/dist/cdn/foxy-gift-card-card.js +1 -1
  36. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  37. package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
  38. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  39. package/dist/cdn/foxy-gift-card-form.js +1 -1
  40. package/dist/cdn/foxy-i18n.js +1 -1
  41. package/dist/cdn/foxy-item-card.js +1 -1
  42. package/dist/cdn/foxy-item-category-card.js +1 -1
  43. package/dist/cdn/foxy-item-category-form.js +1 -1
  44. package/dist/cdn/foxy-item-form.js +1 -1
  45. package/dist/cdn/foxy-item-option-card.js +1 -1
  46. package/dist/cdn/foxy-item-option-form.js +1 -1
  47. package/dist/cdn/foxy-items-form.js +1 -1
  48. package/dist/cdn/foxy-nucleon-element.js +1 -1
  49. package/dist/cdn/foxy-pagination.js +1 -1
  50. package/dist/cdn/foxy-payment-card.js +1 -1
  51. package/dist/cdn/foxy-payment-method-card.js +1 -1
  52. package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
  53. package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
  54. package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
  55. package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
  56. package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
  57. package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
  58. package/dist/cdn/foxy-query-builder.js +1 -1
  59. package/dist/cdn/foxy-report-form.js +1 -1
  60. package/dist/cdn/foxy-reports-table.js +5 -5
  61. package/dist/cdn/foxy-shipment-card.js +2 -2
  62. package/dist/cdn/foxy-sign-in-form.js +1 -1
  63. package/dist/cdn/foxy-spinner.js +1 -1
  64. package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
  65. package/dist/cdn/foxy-subscription-card.js +1 -1
  66. package/dist/cdn/foxy-subscription-form.js +4 -4
  67. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  68. package/dist/cdn/foxy-table.js +1 -1
  69. package/dist/cdn/foxy-tax-card.js +1 -1
  70. package/dist/cdn/foxy-tax-form.js +1 -1
  71. package/dist/cdn/foxy-template-card.js +1 -0
  72. package/dist/cdn/foxy-template-config-form.js +1 -1
  73. package/dist/cdn/foxy-template-form.js +1 -1
  74. package/dist/cdn/foxy-template-set-form.js +1 -0
  75. package/dist/cdn/foxy-transaction-card.js +1 -1
  76. package/dist/cdn/foxy-transaction.js +1 -1
  77. package/dist/cdn/foxy-transactions-table.js +1 -1
  78. package/dist/cdn/foxy-user-form.js +1 -1
  79. package/dist/cdn/foxy-users-table.js +1 -1
  80. package/dist/cdn/foxy-webhook-card.js +1 -1
  81. package/dist/cdn/foxy-webhook-form.js +1 -1
  82. package/dist/cdn/foxy-webhook-log-card.js +1 -1
  83. package/dist/cdn/foxy-webhook-status-card.js +1 -1
  84. package/dist/cdn/{shared-a6263179.js → shared-008ffb33.js} +1 -1
  85. package/dist/cdn/shared-0093ee59.js +6 -0
  86. package/dist/cdn/{shared-c566fe52.js → shared-015e5cb9.js} +1 -1
  87. package/dist/cdn/{shared-61174bec.js → shared-09a14740.js} +12 -17
  88. package/dist/cdn/{shared-74e79000.js → shared-0b67dae4.js} +7 -7
  89. package/dist/cdn/{shared-4e2e233c.js → shared-0f137ff8.js} +1 -1
  90. package/dist/cdn/{shared-dfdf021a.js → shared-10e7ddf5.js} +1 -1
  91. package/dist/cdn/{shared-164a791e.js → shared-156144ab.js} +1 -1
  92. package/dist/cdn/{shared-3214ee1b.js → shared-20b2223a.js} +1 -1
  93. package/dist/cdn/shared-26adbd9b.js +1 -0
  94. package/dist/cdn/{shared-de5fc645.js → shared-27aeabd9.js} +1 -1
  95. package/dist/cdn/{shared-a2efb819.js → shared-2a20ac6b.js} +1 -1
  96. package/dist/cdn/{shared-f00d31e0.js → shared-2e33702b.js} +1 -1
  97. package/dist/cdn/shared-2ec256d5.js +1 -0
  98. package/dist/cdn/{shared-0ca312eb.js → shared-34db34b2.js} +1 -1
  99. package/dist/cdn/{shared-5f751bfc.js → shared-35e929aa.js} +1 -1
  100. package/dist/cdn/{shared-6d175df8.js → shared-3909c1e5.js} +1 -1
  101. package/dist/cdn/shared-3fb5f380.js +1 -0
  102. package/dist/cdn/{shared-3c7489d6.js → shared-415c86b6.js} +1 -1
  103. package/dist/cdn/{shared-0ffa1afb.js → shared-4382f0cd.js} +1 -1
  104. package/dist/cdn/{shared-4a2e1638.js → shared-45cc4f44.js} +1 -1
  105. package/dist/cdn/{shared-b7787aae.js → shared-465cdd03.js} +3 -3
  106. package/dist/cdn/{shared-66a0263f.js → shared-5382ccfa.js} +1 -1
  107. package/dist/cdn/{shared-b1304f5b.js → shared-53cdff0b.js} +1 -1
  108. package/dist/cdn/{shared-3ba0d0e8.js → shared-57412bac.js} +1 -1
  109. package/dist/cdn/{shared-ad70817d.js → shared-58445db9.js} +1 -1
  110. package/dist/cdn/{shared-dc891fc4.js → shared-5bf3f8f1.js} +1 -1
  111. package/dist/cdn/{shared-14afc5c6.js → shared-68600caf.js} +1 -1
  112. package/dist/cdn/{shared-c99a75d8.js → shared-68fad60e.js} +1 -1
  113. package/dist/cdn/{shared-1c9fd2b1.js → shared-6a2cf3b9.js} +2 -2
  114. package/dist/cdn/{shared-0008cf8e.js → shared-7e690245.js} +1 -1
  115. package/dist/cdn/{shared-a93f4ae9.js → shared-8911c2e0.js} +1 -1
  116. package/dist/cdn/{shared-39cb3be1.js → shared-8a34457d.js} +1 -1
  117. package/dist/cdn/{shared-f0591b3e.js → shared-8c8853ab.js} +1 -1
  118. package/dist/cdn/{shared-02c6c308.js → shared-8c91f512.js} +1 -1
  119. package/dist/cdn/{shared-73ac094b.js → shared-9eff0743.js} +1 -1
  120. package/dist/cdn/shared-9f0606f2.js +1 -0
  121. package/dist/cdn/{shared-b866f3a7.js → shared-a0f6e39c.js} +1 -1
  122. package/dist/cdn/{shared-dbb66347.js → shared-aecb20d0.js} +1 -1
  123. package/dist/cdn/{shared-96695c93.js → shared-b54eb879.js} +1 -1
  124. package/dist/cdn/{shared-9aab51c0.js → shared-ba78987f.js} +1 -1
  125. package/dist/cdn/shared-be043b54.js +1 -0
  126. package/dist/cdn/shared-c00bff9d.js +1 -0
  127. package/dist/cdn/{shared-27089ebf.js → shared-c47571a6.js} +1 -1
  128. package/dist/cdn/{shared-ea58e244.js → shared-c60b6e1a.js} +1 -1
  129. package/dist/cdn/{shared-d9c5e26e.js → shared-c6f5602e.js} +1 -1
  130. package/dist/cdn/{shared-3fd94d2f.js → shared-c7fad58c.js} +1 -1
  131. package/dist/cdn/{shared-ccb96675.js → shared-cbff5e58.js} +1 -1
  132. package/dist/cdn/{shared-8dd640bf.js → shared-cd1bc9f5.js} +1 -1
  133. package/dist/cdn/shared-d6276c83.js +1 -0
  134. package/dist/cdn/{shared-5a823202.js → shared-d863e06b.js} +1 -1
  135. package/dist/cdn/{shared-54deb3dc.js → shared-da126678.js} +1 -1
  136. package/dist/cdn/{shared-6d69487b.js → shared-e46eb641.js} +1 -1
  137. package/dist/cdn/{shared-ba4053b3.js → shared-ef792142.js} +1 -1
  138. package/dist/cdn/{shared-19bdb896.js → shared-f38a79cc.js} +1 -1
  139. package/dist/cdn/{shared-3d245899.js → shared-f49ee631.js} +1 -1
  140. package/dist/cdn/{shared-d187b584.js → shared-fce199fa.js} +1 -1
  141. package/dist/cdn/shared-fff1815b.js +1 -0
  142. package/dist/cdn/translations/email-template-card/en.json +5 -1
  143. package/dist/cdn/translations/template-config-form/en.json +4 -0
  144. package/dist/cdn/translations/template-set-form/en.json +384 -0
  145. package/dist/elements/internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl.d.ts +1 -0
  146. package/dist/elements/internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl.js +15 -15
  147. package/dist/elements/internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl.js.map +1 -1
  148. package/dist/elements/internal/InternalSelectControl/InternalSelectControl.d.ts +2 -0
  149. package/dist/elements/internal/InternalSelectControl/InternalSelectControl.js +20 -9
  150. package/dist/elements/internal/InternalSelectControl/InternalSelectControl.js.map +1 -1
  151. package/dist/elements/public/AccessRecoveryForm/AccessRecoveryForm.js +5 -5
  152. package/dist/elements/public/AccessRecoveryForm/AccessRecoveryForm.js.map +1 -1
  153. package/dist/elements/public/EmailTemplateCard/EmailTemplateCard.js +11 -11
  154. package/dist/elements/public/EmailTemplateCard/EmailTemplateCard.js.map +1 -1
  155. package/dist/elements/public/NucleonElement/NucleonElement.js +13 -3
  156. package/dist/elements/public/NucleonElement/NucleonElement.js.map +1 -1
  157. package/dist/elements/public/NucleonElement/UpdateEvent.d.ts +10 -2
  158. package/dist/elements/public/NucleonElement/UpdateEvent.js +8 -2
  159. package/dist/elements/public/NucleonElement/UpdateEvent.js.map +1 -1
  160. package/dist/elements/public/TemplateCard/TemplateCard.d.ts +10 -0
  161. package/dist/elements/public/TemplateCard/TemplateCard.js +18 -0
  162. package/dist/elements/public/TemplateCard/TemplateCard.js.map +1 -0
  163. package/dist/elements/public/TemplateCard/index.d.ts +4 -0
  164. package/dist/elements/public/TemplateCard/index.js +6 -0
  165. package/dist/elements/public/TemplateCard/index.js.map +1 -0
  166. package/dist/elements/public/TemplateCard/types.d.ts +3 -0
  167. package/dist/elements/public/TemplateCard/types.js +2 -0
  168. package/dist/elements/public/TemplateCard/types.js.map +1 -0
  169. package/dist/elements/public/TemplateConfigForm/TemplateConfigForm.d.ts +1 -0
  170. package/dist/elements/public/TemplateConfigForm/TemplateConfigForm.js +56 -7
  171. package/dist/elements/public/TemplateConfigForm/TemplateConfigForm.js.map +1 -1
  172. package/dist/elements/public/TemplateConfigForm/index.d.ts +1 -0
  173. package/dist/elements/public/TemplateConfigForm/index.js +1 -0
  174. package/dist/elements/public/TemplateConfigForm/index.js.map +1 -1
  175. package/dist/elements/public/TemplateSetForm/TemplateSetForm.d.ts +44 -0
  176. package/dist/elements/public/TemplateSetForm/TemplateSetForm.js +360 -0
  177. package/dist/elements/public/TemplateSetForm/TemplateSetForm.js.map +1 -0
  178. package/dist/elements/public/TemplateSetForm/index.d.ts +15 -0
  179. package/dist/elements/public/TemplateSetForm/index.js +17 -0
  180. package/dist/elements/public/TemplateSetForm/index.js.map +1 -0
  181. package/dist/elements/public/TemplateSetForm/types.d.ts +3 -0
  182. package/dist/elements/public/TemplateSetForm/types.js +2 -0
  183. package/dist/elements/public/TemplateSetForm/types.js.map +1 -0
  184. package/dist/elements/public/index.d.ts +2 -0
  185. package/dist/elements/public/index.defined.d.ts +2 -0
  186. package/dist/elements/public/index.defined.js +2 -0
  187. package/dist/elements/public/index.defined.js.map +1 -1
  188. package/dist/elements/public/index.js +2 -0
  189. package/dist/elements/public/index.js.map +1 -1
  190. package/dist/mixins/configurable.js +9 -0
  191. package/dist/mixins/configurable.js.map +1 -1
  192. package/dist/mixins/themeable.js +56 -0
  193. package/dist/mixins/themeable.js.map +1 -1
  194. package/package.json +1 -1
  195. package/dist/cdn/shared-24d650cd.js +0 -1
  196. package/dist/cdn/shared-425d906a.js +0 -1
  197. package/dist/cdn/shared-4a4eab8b.js +0 -1
  198. package/dist/cdn/shared-7684cb05.js +0 -1
  199. package/dist/cdn/shared-d5ef2683.js +0 -1
  200. package/dist/cdn/shared-ff31023c.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AccessRecoveryForm.js","sourceRoot":"","sources":["../../../../src/elements/public/AccessRecoveryForm/AccessRecoveryForm.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AAEjE,OAAO,EAAE,cAAc,EAAE,4CAAyC;AAElE,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,QAAQ,EAAE,oCAAiC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,EAAE,GAAG,sBAAsB,CAAC;AAClC,MAAM,IAAI,GAAG,cAAc,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAEtF;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,kBAAmB,SAAQ,IAAU;IAAlD;;QAQE,cAAS,GAAc,EAAE,CAAC;QAET,yBAAoB,GAAG,GAAG,EAAE;YAC3C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC;QAEe,kBAAa,GAAG,GAAG,EAAE;;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAE/B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/E,MAAM,iBAAiB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAExF,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAE,EAAE;gBAC3C,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO;oBAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACzC,CAAC,CAAC;YAEF,MAAM,WAAW,GAAG,CAAC,GAAe,EAAE,EAAE;gBACtC,IAAI,CAAC,IAAI,CAAC;oBACR,MAAM,EAAE,EAAE,KAAK,EAAG,GAAG,CAAC,MAA4B,CAAC,KAAK,EAAE;oBAC1D,IAAI,EAAE,OAAO;iBACd,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;;;0BAGzB,iBAAiB;;;kBAGzB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;kBAC1B,SAAS,OAAC,IAAI,CAAC,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC;sBAC9B,MAAM,IAAI,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;sBAClE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;2BACvC,IAAI,CAAC,oBAAoB;mBACjC,WAAW;qBACT,aAAa;;;;UAIxB,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;;KAE7C,CAAC;QACJ,CAAC,CAAC;QAEe,oBAAe,GAAG,GAAG,EAAE;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,4BAA4B,CAAC;YACjF,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;YAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC;YAElE,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;;kEAEa,KAAK;0EACG,IAAI;4BAClD,IAAI,CAAC,IAAI,QAAQ,GAAG,OAAO,IAAI,CAAC,EAAE;;;UAGpD,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;;KAE/C,CAAC;QACJ,CAAC,CAAC;QAEe,mBAAc,GAAG,GAAG,EAAE;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAE/B,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;;;;;;sBAM9B,MAAM;gBAClB,CAAC,OAAO;gBACR,QAAQ;gBACR,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;mBACpC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;;4BAEV,IAAI,CAAC,IAAI,4BAA4B,IAAI,CAAC,EAAE;;;UAG9D,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;;KAE9C,CAAC;QACJ,CAAC,CAAC;IAqCJ,CAAC;IAzIC,MAAM,KAAK,GAAG;QACZ,OAAO;YACL,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,KAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,gBAAgB;YACvE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,WAAC,OAAA,OAAO,OAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,mCAAI,EAAE,CAAC,IAAI,qBAAqB,CAAA,EAAA;SACpE,CAAC;IACJ,CAAC;IAiGD,MAAM;;QACJ,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAA;;;;oBAIK,MAAM;;;UAGhB,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE;UACjE,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE;UAChF,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE;;;;kBAI3D,QAAQ,CAAC;YACf,2DAA2D,EAAE,IAAI;YACjE,+BAA+B,EAAE,CAAC,MAAM;SACzC,CAAC;;;;;;mBAMO,IAAI,CAAC,IAAI;kBACV,IAAI,CAAC,EAAE,IAAI,YAAA,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,0CAAE,SAAS,mCAAI,EAAE;;;;;KAK3E,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { Data, Templates } from './types';\nimport { TemplateResult, html } from 'lit-element';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { EmailFieldElement } from '@vaadin/vaadin-text-field/vaadin-email-field';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { NucleonV8N } from '../NucleonElement/types';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { validate as isEmail } from 'email-validator';\n\nconst NS = 'access-recovery-form';\nconst Base = ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)));\n\n/**\n * Email-based \"forgot password\" form.\n *\n * @slot email:before\n * @slot email:after\n *\n * @slot message:before\n * @slot message:after\n *\n * @slot submit:before\n * @slot submit:after\n *\n * @element foxy-access-recovery-form\n * @since 1.4.0\n */\nexport class AccessRecoveryForm extends Base<Data> {\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ detail: d }) => (d?.email && d.email.length > 0) || 'email_required',\n ({ detail: d }) => isEmail(d?.email ?? '') || 'email_invalid_email',\n ];\n }\n\n templates: Templates = {};\n\n private readonly __checkEmailValidity = () => {\n return !this.errors.some(err => err.startsWith('email'));\n };\n\n private readonly __renderEmail = () => {\n const isFailed = this.in('fail');\n const isBusy = this.in('busy');\n\n const emailErrors = this.errors.filter(error => error.startsWith('email'));\n const emailErrorKeys = emailErrors.map(error => error.replace('email', 'v8n'));\n const emailErrorMessage = emailErrorKeys[0] ? this.t(emailErrorKeys[0]).toString() : '';\n\n const handleKeyDown = (evt: KeyboardEvent) => {\n if (evt.key === 'Enter') this.submit();\n };\n\n const handleInput = (evt: InputEvent) => {\n this.edit({\n detail: { email: (evt.target as EmailFieldElement).value },\n type: 'email',\n });\n };\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('email:before')}\n\n <vaadin-email-field\n error-message=${emailErrorMessage}\n data-testid=\"email\"\n class=\"w-full\"\n label=${this.t('email').toString()}\n value=${ifDefined(this.form.detail?.email)}\n ?disabled=${isBusy || isFailed || this.disabledSelector.matches('email', true)}\n ?readonly=${this.readonlySelector.matches('email', true)}\n .checkValidity=${this.__checkEmailValidity}\n @input=${handleInput}\n @keydown=${handleKeyDown}\n >\n </vaadin-email-field>\n\n ${this.renderTemplateOrSlot('email:after')}\n </div>\n `;\n };\n\n private readonly __renderMessage = () => {\n const isFailed = this.in('fail');\n const color = isFailed ? 'bg-error-10 text-error' : 'bg-success-10 text-success';\n const icon = isFailed ? 'lumo:error' : 'lumo:cog';\n const key = isFailed ? 'unknown_error' : 'recover_access_success';\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('message:before')}\n\n <p class=\"leading-s flex items-start text-s rounded p-s ${color}\">\n <iron-icon class=\"flex-shrink-0 icon-inline text-l mr-s\" icon=${icon}></iron-icon>\n <foxy-i18n lang=${this.lang} key=${key} ns=${this.ns} data-testid=\"message\"></foxy-i18n>\n </p>\n\n ${this.renderTemplateOrSlot('message:after')}\n </div>\n `;\n };\n\n private readonly __renderSubmit = () => {\n const isFailed = this.in('fail');\n const isValid = this.errors.length === 0;\n const isBusy = this.in('busy');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('submit:before')}\n\n <vaadin-button\n data-testid=\"submit\"\n class=\"w-full\"\n theme=\"primary\"\n ?disabled=${isBusy ||\n !isValid ||\n isFailed ||\n this.disabledSelector.matches('submit', true)}\n @click=${() => this.submit()}\n >\n <foxy-i18n lang=${this.lang} key=\"recover_access\" ns=${this.ns}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('submit:after')}\n </div>\n `;\n };\n\n render(): TemplateResult {\n const hiddenSelector = this.hiddenSelector;\n const isDone = this.in({ idle: 'snapshot' }) || this.in('fail');\n const isBusy = this.in('busy');\n\n return html`\n <main\n data-testid=\"wrapper\"\n aria-live=\"polite\"\n aria-busy=${isBusy}\n class=\"relative font-lumo text-m leading-m space-y-m\"\n >\n ${hiddenSelector.matches('email', true) ? '' : this.__renderEmail()}\n ${hiddenSelector.matches('message', true) || !isDone ? '' : this.__renderMessage()}\n ${hiddenSelector.matches('submit', true) ? '' : this.__renderSubmit()}\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': !isBusy,\n })}\n >\n <foxy-spinner\n layout=\"vertical\"\n class=\"m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l\"\n state=\"busy\"\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </main>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"AccessRecoveryForm.js","sourceRoot":"","sources":["../../../../src/elements/public/AccessRecoveryForm/AccessRecoveryForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { Data, Templates } from './types';\nimport { TemplateResult, html } from 'lit-element';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { EmailFieldElement } from '@vaadin/vaadin-text-field/vaadin-email-field';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { NucleonV8N } from '../NucleonElement/types';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { validate as isEmail } from 'email-validator';\n\nconst NS = 'access-recovery-form';\nconst Base = ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)));\n\n/**\n * Email-based \"forgot password\" form.\n *\n * @slot email:before\n * @slot email:after\n *\n * @slot message:before\n * @slot message:after\n *\n * @slot submit:before\n * @slot submit:after\n *\n * @element foxy-access-recovery-form\n * @since 1.4.0\n */\nexport class AccessRecoveryForm extends Base<Data> {\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ detail: d }) => (d?.email && d.email.length > 0) || 'email_required',\n ({ detail: d }) => isEmail(d?.email ?? '') || 'email_invalid_email',\n ];\n }\n\n templates: Templates = {};\n\n private readonly __checkEmailValidity = () => {\n return !this.errors.some(err => err.startsWith('email'));\n };\n\n private readonly __renderEmail = () => {\n const isFailed = this.in('fail');\n const isBusy = this.in('busy');\n const isDone = this.in({ idle: 'snapshot' });\n\n const emailErrors = this.errors.filter(error => error.startsWith('email'));\n const emailErrorKeys = emailErrors.map(error => error.replace('email', 'v8n'));\n const emailErrorMessage = emailErrorKeys[0] ? this.t(emailErrorKeys[0]).toString() : '';\n\n const handleKeyDown = (evt: KeyboardEvent) => {\n if (evt.key === 'Enter') this.submit();\n };\n\n const handleInput = (evt: InputEvent) => {\n this.edit({\n detail: { email: (evt.target as EmailFieldElement).value },\n type: 'email',\n });\n };\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('email:before')}\n\n <vaadin-email-field\n error-message=${emailErrorMessage}\n data-testid=\"email\"\n class=\"w-full\"\n label=${this.t('email').toString()}\n value=${ifDefined(this.form.detail?.email)}\n ?disabled=${isBusy || isDone || isFailed || this.disabledSelector.matches('email', true)}\n ?readonly=${this.readonlySelector.matches('email', true)}\n .checkValidity=${this.__checkEmailValidity}\n @input=${handleInput}\n @keydown=${handleKeyDown}\n >\n </vaadin-email-field>\n\n ${this.renderTemplateOrSlot('email:after')}\n </div>\n `;\n };\n\n private readonly __renderMessage = () => {\n const isFailed = this.in('fail');\n const color = isFailed ? 'bg-error-10 text-error' : 'bg-success-10 text-success';\n const icon = isFailed ? 'lumo:error' : 'lumo:cog';\n const key = isFailed ? 'unknown_error' : 'recover_access_success';\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('message:before')}\n\n <p class=\"leading-s flex items-start text-s rounded p-s ${color}\">\n <iron-icon class=\"flex-shrink-0 icon-inline text-l mr-s\" icon=${icon}></iron-icon>\n <foxy-i18n lang=${this.lang} key=${key} ns=${this.ns} data-testid=\"message\"></foxy-i18n>\n </p>\n\n ${this.renderTemplateOrSlot('message:after')}\n </div>\n `;\n };\n\n private readonly __renderSubmit = () => {\n const isFailed = this.in('fail');\n const isValid = this.errors.length === 0;\n const isBusy = this.in('busy');\n const isDone = this.in({ idle: 'snapshot' });\n const isDisabledByForm = isBusy || isDone || !isValid || isFailed;\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('submit:before')}\n\n <vaadin-button\n data-testid=\"submit\"\n class=\"w-full\"\n theme=\"primary\"\n ?disabled=${isDisabledByForm || this.disabledSelector.matches('submit', true)}\n @click=${() => this.submit()}\n >\n <foxy-i18n lang=${this.lang} key=\"recover_access\" ns=${this.ns}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('submit:after')}\n </div>\n `;\n };\n\n render(): TemplateResult {\n const hiddenSelector = this.hiddenSelector;\n const isDone = this.in({ idle: 'snapshot' }) || this.in('fail');\n const isBusy = this.in('busy');\n\n return html`\n <main\n data-testid=\"wrapper\"\n aria-live=\"polite\"\n aria-busy=${isBusy}\n class=\"relative font-lumo text-m leading-m space-y-m\"\n >\n ${hiddenSelector.matches('email', true) ? '' : this.__renderEmail()}\n ${hiddenSelector.matches('message', true) || !isDone ? '' : this.__renderMessage()}\n ${hiddenSelector.matches('submit', true) ? '' : this.__renderSubmit()}\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': !isBusy,\n })}\n >\n <foxy-spinner\n layout=\"vertical\"\n class=\"m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l\"\n state=\"busy\"\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </main>\n `;\n }\n}\n"]}
@@ -5,18 +5,18 @@ const NS = 'email-template-card';
5
5
  const Base = TranslatableMixin(InternalCard, NS);
6
6
  export class EmailTemplateCard extends Base {
7
7
  renderBody() {
8
- var _a, _b, _c, _d;
9
- // TODO remove the directive below once SDK has the types
10
- // @ts-expect-error definition for template_language is missing in SDK types
11
- const language = (_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.template_language) !== null && _b !== void 0 ? _b : 'nunjucks';
12
- const languageToExtension = { nunjucks: '.njk', handlebars: '.hbs' };
13
- const extension = (_c = languageToExtension[language]) !== null && _c !== void 0 ? _c : `.${language}`;
8
+ const data = this.data;
9
+ const type = (data === null || data === void 0 ? void 0 : data.content_html_url) && data.content_html_url
10
+ ? 'type_custom_url'
11
+ : (data === null || data === void 0 ? void 0 : data.content_html) && data.content_text
12
+ ? 'type_custom_text'
13
+ : (data === null || data === void 0 ? void 0 : data.content_html) || (data === null || data === void 0 ? void 0 : data.content_html_url) || (data === null || data === void 0 ? void 0 : data.content_text) || (data === null || data === void 0 ? void 0 : data.content_text_url)
14
+ ? 'type_mixed'
15
+ : 'type_default';
14
16
  return html `
15
- <div class="flex items-center justify-between">
16
- <div class="font-semibold">${(_d = this.data) === null || _d === void 0 ? void 0 : _d.description}&ZeroWidthSpace;</div>
17
- <div class="rounded-t-l rounded-b-l px-s py-xs bg-contrast-5">
18
- <span class="uppercase text-xs font-bold tracking-wide">${extension}</span>
19
- </div>
17
+ <div class="flex justify-between gap-s">
18
+ <foxy-i18n class="font-semibold truncate flex-shrink-0" infer="" key="title"></foxy-i18n>
19
+ <foxy-i18n class="truncate text-tertiary" infer="" key=${type}></foxy-i18n>
20
20
  </div>
21
21
  `;
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EmailTemplateCard.js","sourceRoot":"","sources":["../../../../src/elements/public/EmailTemplateCard/EmailTemplateCard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,qBAAqB,CAAC;AACjC,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAM,OAAO,iBAAkB,SAAQ,IAAU;IAC/C,UAAU;;QACR,yDAAyD;QACzD,4EAA4E;QAC5E,MAAM,QAAQ,eAAG,IAAI,CAAC,IAAI,0CAAE,iBAAiB,mCAAI,UAAU,CAAC;QAC5D,MAAM,mBAAmB,GAA2B,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAC7F,MAAM,SAAS,SAAG,mBAAmB,CAAC,QAAQ,CAAC,mCAAI,IAAI,QAAQ,EAAE,CAAC;QAElE,OAAO,IAAI,CAAA;;qCAEsB,MAAA,IAAI,CAAC,IAAI,0CAAE,WAAW;;oEAES,SAAS;;;KAGxE,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { TemplateResult } from 'lit-html';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { html } from 'lit-html';\n\nconst NS = 'email-template-card';\nconst Base = TranslatableMixin(InternalCard, NS);\n\nexport class EmailTemplateCard extends Base<Data> {\n renderBody(): TemplateResult {\n // TODO remove the directive below once SDK has the types\n // @ts-expect-error definition for template_language is missing in SDK types\n const language = this.data?.template_language ?? 'nunjucks';\n const languageToExtension: Record<string, string> = { nunjucks: '.njk', handlebars: '.hbs' };\n const extension = languageToExtension[language] ?? `.${language}`;\n\n return html`\n <div class=\"flex items-center justify-between\">\n <div class=\"font-semibold\">${this.data?.description}&ZeroWidthSpace;</div>\n <div class=\"rounded-t-l rounded-b-l px-s py-xs bg-contrast-5\">\n <span class=\"uppercase text-xs font-bold tracking-wide\">${extension}</span>\n </div>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"EmailTemplateCard.js","sourceRoot":"","sources":["../../../../src/elements/public/EmailTemplateCard/EmailTemplateCard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,qBAAqB,CAAC;AACjC,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAM,OAAO,iBAAkB,SAAQ,IAAU;IAC/C,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,IAAI,GACR,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,KAAI,IAAI,CAAC,gBAAgB;YAC7C,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,KAAI,IAAI,CAAC,YAAY;gBACzC,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,MAClB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,CAAA,KACtB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAA,KAClB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,CAAA;oBACxB,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,cAAc,CAAC;QAErB,OAAO,IAAI,CAAA;;;iEAGkD,IAAI;;KAEhE,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { TemplateResult } from 'lit-html';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { html } from 'lit-html';\n\nconst NS = 'email-template-card';\nconst Base = TranslatableMixin(InternalCard, NS);\n\nexport class EmailTemplateCard extends Base<Data> {\n renderBody(): TemplateResult {\n const data = this.data;\n const type =\n data?.content_html_url && data.content_html_url\n ? 'type_custom_url'\n : data?.content_html && data.content_text\n ? 'type_custom_text'\n : data?.content_html ||\n data?.content_html_url ||\n data?.content_text ||\n data?.content_text_url\n ? 'type_mixed'\n : 'type_default';\n\n return html`\n <div class=\"flex justify-between gap-s\">\n <foxy-i18n class=\"font-semibold truncate flex-shrink-0\" infer=\"\" key=\"title\"></foxy-i18n>\n <foxy-i18n class=\"truncate text-tertiary\" infer=\"\" key=${type}></foxy-i18n>\n </div>\n `;\n }\n}\n"]}
@@ -3,7 +3,7 @@ import { Nucleon, Rumour } from '@foxy.io/sdk/core';
3
3
  import { assign, interpret } from 'xstate';
4
4
  import { API } from "./API.js";
5
5
  import { FetchEvent } from "./FetchEvent.js";
6
- import { UpdateEvent } from "./UpdateEvent.js";
6
+ import { UpdateEvent, UpdateResult } from "./UpdateEvent.js";
7
7
  import memoize from 'lodash-es/memoize';
8
8
  import { serveFromCache } from "./serveFromCache.js";
9
9
  import { InferrableMixin } from "../../../mixins/inferrable.js";
@@ -304,10 +304,20 @@ export class NucleonElement extends InferrableMixin(LitElement) {
304
304
  }
305
305
  __createService() {
306
306
  this.__service.onTransition(state => {
307
+ var _a, _b;
307
308
  if (!state.changed)
308
309
  return;
310
+ let result = undefined;
311
+ if (state.matches('idle')) {
312
+ if ((_a = state.history) === null || _a === void 0 ? void 0 : _a.matches({ busy: 'deleting' })) {
313
+ result = UpdateResult.ResourceDeleted;
314
+ }
315
+ else if ((_b = state.history) === null || _b === void 0 ? void 0 : _b.matches({ busy: 'creating' })) {
316
+ result = UpdateResult.ResourceCreated;
317
+ }
318
+ }
309
319
  this.requestUpdate();
310
- this.dispatchEvent(new UpdateEvent());
320
+ this.dispatchEvent(new UpdateEvent('update', { detail: { result } }));
311
321
  if (!state.matches('busy'))
312
322
  this.__processFetchEventQueue();
313
323
  });
@@ -383,7 +393,7 @@ export class NucleonElement extends InferrableMixin(LitElement) {
383
393
  return;
384
394
  event.preventDefault();
385
395
  this.__fetchEventQueue.push(event);
386
- if (!this.in('busy'))
396
+ if (!this.__service.state.matches('busy'))
387
397
  this.__processFetchEventQueue();
388
398
  }
389
399
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NucleonElement.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/NucleonElement.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAwC,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,GAAG,EAAE,iBAAc;AAC5B,OAAO,EAAE,UAAU,EAAE,wBAAqB;AAC1C,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,4BAAyB;AAClD,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAE7D;;;;;;;;GAQG;AACH,MAAM,OAAO,cAA8C,SAAQ,eAAe,CAAC,UAAU,CAAC;IAsG5F;QACE,KAAK,EAAE,CAAC;QAtDV;;;WAGG;QACH,SAAI,GAAG,EAAE,CAAC;QAEV;;;WAGG;QACH,WAAM,GAAG,EAAE,CAAC;QAEZ;;;WAGG;QACH,YAAO,GAAa,EAAE,CAAC;QAEf,iBAAY,GAAkB,IAAI,CAAC;QAEnC,YAAO,GAAG,EAAE,CAAC;QAMb,sBAAiB,GAAiB,EAAE,CAAC;QAE5B,cAAS,GAAG,SAAS,CACnC,OAAO,CAAC,OAAiC,CAAC,UAAU,CAAC;YACpD,QAAQ,EAAE;gBACR,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;gBACpC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAM,CAAC;gBACjD,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC;gBAC/C,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;aAC/B;YAED,OAAO,EAAE;gBACP,QAAQ,EAAE,MAAM,CAAuD;oBACrE,MAAM,EAAE,OAAO,CAAC,EAAE;wBAChB,MAAM,KAAK,GAAI,IAAI,CAAC,WAAqC,CAAC,GAAG,CAAC;wBAC9D,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;wBAEnD,OAAO,KAAK;6BACT,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;6BAC/B,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC;6BAClD,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAa,CAAC;oBACjF,CAAC;iBACF,CAAC;aACH;SACF,CAAC,CACH,CAAC;QAIA,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAjFD,MAAM,KAAK,kBAAkB;QAC3B,OAAO,CAAC,GAAG,KAAK,CAAC,kBAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,gBAAgB;IAChB,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;YAC5D,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;YACxB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;YACzC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;YACxC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SACvB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,KAAK,GAAG;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IA4DD;;;;;;;;OAQG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACH,IAAI,IAAI;QACN,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QACrD,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAoB,CAAC;IACjD,CAAC;IAED;;;;;;OAMG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,IAAkB;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,CAAC,KAAa;QACrB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,IAAI,IAAI;;QACN,yBAAO,IAAI,CAAC,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,IAAI,mCAAI,IAAI,CAAC,YAAY,mCAAI,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,IAAI,CAAC,KAAa;QACpB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;SACxC;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SACvD;IACH,CAAC;IAED;;;OAGG;IACH,EAAE,CACA,UAAuB;QAEvB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,IAAoB;;QACvB,IAAI,cAAO,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,IAAI,CAAA,KAAK,QAAQ;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;IAED,gBAAgB;IAChB,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAE9B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB;IAChB,oBAAoB;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAE7B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,sBAAsB,CAAC,iCAAiC,CAAC,CAAC;QAE/D,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,uBAAuB,CAAC,OAA6B;;QACnD,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO;QAEhC,IAAI,CAAC,KAAK,SAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAwB,mCAAI,EAAE,CAAC;QAChE,IAAI,CAAC,IAAI,SAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAwB,mCAAI,EAAE,CAAC;IAChE,CAAC;IAED,8DAA8D;IACpD,KAAK,CAAC,MAAM,CAAkB,GAAG,IAAiC;QAC1E,MAAM,QAAQ,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,QAAQ,CAAC;QACjC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,gGAAgG;IACtF,KAAK,CAAC,SAAS,CAAC,KAAqB;QAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAE/D,OAAO,IAAI,CAAC;SACb;gBAAS;YACR,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;IACH,CAAC;IAED,0FAA0F;IAChF,KAAK,CAAC,QAAQ;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;SACb;gBAAS;YACR,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;IACH,CAAC;IAED,6FAA6F;IACnF,KAAK,CAAC,UAAU,CAAC,KAAqB;QAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAErE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAEjE,OAAO,IAAI,CAAC;SACb;gBAAS;YACR,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;IACH,CAAC;IAED,6FAA6F;IACnF,KAAK,CAAC,WAAW;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEnD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAEzD,OAAO,IAAI,CAAC;SACb;gBAAS;YACR,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;IACH,CAAC;IAED,iEAAiE;IACjE,IAAY,OAAO;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAc,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,OAAO;YAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;YAEtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,cAAc;QACpB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,CAAC;IAEO,eAAe;;QACrB,MAAA,IAAI,CAAC,uBAAuB,+CAA5B,IAAI,EAA6B;IACnC,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3D,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAEO,oBAAoB,CAAC,MAAwC;;QACnE,IAAI;YACF,MAAM,OAAO,SAAG,IAAI,CAAC,SAAS,CAAC,KAAK,0CAAE,OAAO,CAAC,IAAI,CAAC;YACnD,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,OAAO,KAAK,OAAO;gBAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;SACnF;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,MAAM,CAAC,WAAW,EAAE;gBACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;aAC1C;iBAAM;gBACL,MAAM,GAAG,CAAC;aACX;SACF;IACH,CAAC;IAEO,wBAAwB;QAC9B,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,iBAAiB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEhF,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAEtD,IAAI,aAAa,CAAC,EAAE,EAAE;gBACpB,OAAO,CAAC,KAAK,CACX,wBAAwB,IAAI,CAAC,SAAS,iBAAiB,OAAO,CAAC,GAAG,EAAE,EACpE,aAAa,EACb,uEAAuE,EACvE,EAAE,CACH,CAAC;aACH;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEO,sBAAsB,CAAC,YAAoB;QACjD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEO,kBAAkB,CAAC,KAAY;QACrC,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC;YAAE,OAAO;QAC3C,IAAI,KAAK,CAAC,gBAAgB;YAAE,OAAO;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO;QACpD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO;QAE7C,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACxD,CAAC;;AApcD;;;;;GAKG;AACa,0BAAW,GAAG,WAAW,CAAC;AAE1C;;;;;GAKG;AACa,qBAAM,GAAG,OAAO,CAA4B,GAAG,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;AAEhF;;;;GAIG;AACa,kBAAG,GAAG,GAAG,CAAC","sourcesContent":["import { ComputedElementProperties, HALJSONResource, NucleonMachine, NucleonV8N } from './types';\nimport { html, LitElement, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Nucleon, Rumour } from '@foxy.io/sdk/core';\nimport { assign, interpret } from 'xstate';\n\nimport { API } from './API';\nimport { FetchEvent } from './FetchEvent';\nimport { UpdateEvent } from './UpdateEvent';\nimport memoize from 'lodash-es/memoize';\nimport { serveFromCache } from './serveFromCache';\nimport { InferrableMixin } from '../../../mixins/inferrable';\n\n/**\n * Base class for custom elements working with remote HAL+JSON resources.\n *\n * @fires NucleonElement#update - Instance of `NucleonElement.UpdateEvent`. Dispatched on an element whenever it changes its state.\n * @fires NucleonElement#fetch - Instance of `NucleonElement.API.FetchEvent`. Emitted before each API request.\n *\n * @element foxy-nucleon\n * @since 1.1.0\n */\nexport class NucleonElement<TData extends HALJSONResource> extends InferrableMixin(LitElement) {\n /**\n * Instances of this event are dispatched on an element whenever it changes its\n * state (e.g. when going from `busy` to `idle` or on `form` data change).\n * This event isn't cancelable, and it does not bubble.\n * @readonly\n */\n static readonly UpdateEvent = UpdateEvent;\n\n /**\n * Creates a tagged [Rumour](https://sdk.foxy.dev/classes/_core_index_.rumour.html)\n * instance if it doesn't exist or returns cached one otherwise. NucleonElements\n * use empty Rumour group by default.\n * @readonly\n */\n static readonly Rumour = memoize<(group: string) => Rumour>(() => new Rumour());\n\n /**\n * Universal [API](https://sdk.foxy.dev/classes/_core_index_.api.html) client\n * that dispatches cancellable `FetchEvent` on an element before each request.\n * @readonly\n */\n static readonly API = API;\n\n static get inferredProperties(): string[] {\n return [...super.inferredProperties, 'group', 'lang'];\n }\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n __state: { type: String, reflect: true, attribute: 'state' },\n related: { type: Array },\n parent: { type: String },\n group: { type: String, noAccessor: true },\n href: { type: String, noAccessor: true },\n lang: { type: String },\n };\n }\n\n /**\n * Array of validation functions. Each function accepts `element.form` and must return\n * either an error code string if form data fails the check or `true` otherwise.\n * Error codes are collected in `element.errors`. Empty by default.\n */\n static get v8n(): NucleonV8N<any> {\n return [];\n }\n\n /**\n * Optional ISO 639-1 code describing the language element content is written in.\n * Changing the `lang` attribute will update the value of this property.\n */\n lang = '';\n\n /**\n * Optional URL of the collection this element's resource belongs to.\n * Changing the `parent` attribute will update the value of this property.\n */\n parent = '';\n\n /**\n * Optional URI list of the related resources. If Rumour encounters a related\n * resource on creation or deletion, it will be reloaded from source.\n */\n related: string[] = [];\n\n private __hrefToLoad: string | null = null;\n\n private __group = '';\n\n private __unsubscribeFromRumour!: () => void;\n\n private __fetchEventHandler!: (evt: Event) => void;\n\n private __fetchEventQueue: FetchEvent[] = [];\n\n private readonly __service = interpret(\n (Nucleon.machine as NucleonMachine<TData>).withConfig({\n services: {\n sendDelete: () => this._sendDelete(),\n sendPatch: ({ edits }) => this._sendPatch(edits!),\n sendPost: ({ edits }) => this._sendPost(edits!),\n sendGet: () => this._sendGet(),\n },\n\n actions: {\n validate: assign<Nucleon.Context<TData, string>, Nucleon.Event<TData>>({\n errors: context => {\n const rules = (this.constructor as typeof NucleonElement).v8n;\n const form = { ...context.data, ...context.edits };\n\n return rules\n .map(validate => validate(form))\n .filter(v8nResult => typeof v8nResult === 'string')\n .filter((err, errIndex, errs) => errs.indexOf(err) === errIndex) as string[];\n },\n }),\n },\n })\n );\n\n constructor() {\n super();\n this.__createService();\n }\n\n /**\n * If network request returns non-2XX code, the entire error response\n * will be available via this getter.\n *\n * This property is readonly. Changing failure records via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override error status.\n *\n * @since 1.4.0\n */\n get failure(): Response | null {\n return this.__service.state.context.failure;\n }\n\n /**\n * Array of validation errors returned from `NucleonElement.v8n` checks.\n *\n * This property is readonly. Adding or removing error codes via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override validity status.\n */\n get errors(): string[] {\n return this.__service.state.context.errors;\n }\n\n /**\n * Resource snapshot with edits applied. Empty object if unavailable.\n *\n * This property and its value are readonly. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please use `element.edit({ foo: 'bar' })` instead.\n * If you need to replace the entire data object, consider using `element.data`.\n */\n get form(): Partial<TData> {\n const { data, edits } = this.__service.state.context;\n return { ...data, ...edits } as Partial<TData>;\n }\n\n /**\n * Resource snapshot as-is, no edits applied. Null if unavailable.\n *\n * Returned value is not reactive. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please set the property instead: `element.data = { ...element.data, foo: 'bar' }`.\n * If you're processing user input, consider using `element.form` and `element.edit()` instead.\n */\n get data(): TData | null {\n return this.__service.state.context.data;\n }\n\n set data(data: TData | null) {\n this.__service.send({ type: 'SET_DATA', data });\n this.__hrefToLoad = null;\n }\n\n /**\n * Rumour group. Elements in different groups will not share updates. Empty by default.\n * @example element.group = 'my-group'\n */\n get group(): string {\n return this.__group;\n }\n\n set group(value: string) {\n this.__group = value;\n this.__destroyRumour();\n this.__createRumour();\n }\n\n /**\n * Optional URL of the resource to load. Switches element to `idle.template` state if empty (default).\n * @example element.href = 'https://demo.foxycart.com/s/customer/attributes/0'\n */\n get href(): string {\n return this.form._links?.self.href ?? this.__hrefToLoad ?? '';\n }\n\n set href(value: string) {\n if (value) {\n this.__hrefToLoad = value;\n this.__service.send({ type: 'FETCH' });\n } else {\n this.__hrefToLoad = null;\n this.__service.send({ type: 'SET_DATA', data: null });\n }\n }\n\n /**\n * Checks if this element is in the given state.\n * @example element.in({ idle: 'snapshot' })\n */\n in<TStateValue extends Nucleon.State<TData, string>['value']>(\n stateValue: TStateValue\n ): this is this & ComputedElementProperties<TData, TStateValue> {\n return this.__service.state.matches(stateValue);\n }\n\n /**\n * Clears all edits and emits the `update` event.\n * @example element.undo()\n */\n undo(): void {\n this.__service.send({ type: 'UNDO' });\n }\n\n /**\n * Applies an edit to the local resource snapshot or its template and emits the `update` event.\n * @example element.edit({ first_name: 'Alex' })\n */\n edit(data: Partial<TData>): void {\n if (typeof data._links?.self.href === 'string') this.__hrefToLoad = null;\n this.__service.send({ type: 'EDIT', data });\n }\n\n /**\n * Submits the form, updating the resource if href isn't empty or creating it otherwise.\n * Emits multiple `update` events as element state changes. Has no effect on invalid forms.\n * @example element.submit()\n */\n submit(): void {\n this.__service.send({ type: 'SUBMIT' });\n }\n\n /**\n * Sends a DELETE request to `element.href` and clears local data on success.\n * Emits multiple update events as element state changes.\n * @example element.delete()\n */\n delete(): void {\n this.__service.send({ type: 'DELETE' });\n }\n\n /**\n * Fetches data from `element.href` in background, keeping the edits and v8n errors.\n * @example element.refresh()\n */\n refresh(): void {\n this.__service.send({ type: 'REFRESH' });\n }\n\n render(): TemplateResult {\n return html`<slot></slot>`;\n }\n\n /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n if (this.href) this.refresh();\n\n this.__createRumour();\n this.__createServer();\n this.__processFetchEventQueue();\n\n this.dispatchEvent(new UpdateEvent());\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.__destroyRumour();\n this.__destroyServer();\n this.__flushFetchEventQueue('parent element was disconnected');\n\n this.dispatchEvent(new UpdateEvent());\n }\n\n applyInferredProperties(context: Map<string, unknown>): void {\n super.applyInferredProperties(context);\n\n if (this.infer === null) return;\n\n this.group = (context.get('group') as string | undefined) ?? '';\n this.lang = (context.get('lang') as string | undefined) ?? '';\n }\n\n /** Sends API request. Throws an error on non-2XX response. */\n protected async _fetch<TResult = TData>(...args: Parameters<Window['fetch']>): Promise<TResult> {\n const response = await new API(this).fetch(...args);\n if (!response.ok) throw response;\n return response.json();\n }\n\n /** POSTs to `element.parent`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPost(edits: Partial<TData>): Promise<TData> {\n this.__destroyRumour();\n\n try {\n const body = JSON.stringify(edits);\n const postData = await this._fetch(this.parent, { body, method: 'POST' });\n const data = await this._fetch(postData._links.self.href);\n\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n rumour.share({ data, related, source: data._links.self.href });\n\n return data;\n } finally {\n this.__createRumour();\n }\n }\n\n /** GETs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendGet(): Promise<TData> {\n this.__destroyRumour();\n\n try {\n const data = await this._fetch(this.href);\n NucleonElement.Rumour(this.group).share({ data, source: this.href });\n return data;\n } finally {\n this.__createRumour();\n }\n }\n\n /** PATCHes `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPatch(edits: Partial<TData>): Promise<TData> {\n this.__destroyRumour();\n\n try {\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.href, { body, method: 'PATCH' });\n\n const rumour = NucleonElement.Rumour(this.group);\n rumour.share({ data, source: this.href, related: this.related });\n\n return data;\n } finally {\n this.__createRumour();\n }\n }\n\n /** DELETEs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendDelete(): Promise<null> {\n this.__destroyRumour();\n\n try {\n await this._fetch(this.href, { method: 'DELETE' });\n\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n rumour.share({ data: null, source: this.href, related });\n\n return null;\n } finally {\n this.__createRumour();\n }\n }\n\n // this getter is used by LitElement to set the \"state\" attribute\n private get __state(): string {\n const state = this.__service.state;\n const flags = state.toStrings().reduce((p, c) => [...p, ...c.split('.')], [] as string[]);\n return [...new Set(flags)].join(' ');\n }\n\n private __createService() {\n this.__service.onTransition(state => {\n if (!state.changed) return;\n\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\n\n if (!state.matches('busy')) this.__processFetchEventQueue();\n });\n\n this.__service.onChange(() => {\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\n });\n\n this.__service.start();\n }\n\n private __createRumour() {\n const rumour = NucleonElement.Rumour(this.group);\n this.__unsubscribeFromRumour = rumour.track(update => this.__handleRumourUpdate(update));\n }\n\n private __destroyRumour() {\n this.__unsubscribeFromRumour?.();\n }\n\n private __createServer() {\n this.__fetchEventHandler = this.__handleFetchEvent.bind(this);\n this.addEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __destroyServer() {\n this.removeEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __handleRumourUpdate(update: (oldData: TData) => TData | null) {\n try {\n const oldData = this.__service.state?.context.data;\n if (!oldData) return;\n\n const newData = update(oldData);\n if (newData !== oldData) this.__service.send({ data: newData, type: 'SET_DATA' });\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n this.__service.send({ type: 'REFRESH' });\n } else {\n throw err;\n }\n }\n }\n\n private __processFetchEventQueue() {\n const api = new NucleonElement.API(this);\n\n this.__fetchEventQueue.forEach(event => {\n const request = event.request;\n const cacheResponse = serveFromCache(request.url, this.data);\n const whenResponseReady = cacheResponse.ok ? cacheResponse : api.fetch(request);\n\n event.respondWith(Promise.resolve(whenResponseReady));\n\n if (cacheResponse.ok) {\n console.debug(\n `%c@foxy.io/elements::${this.localName}\\n%c200%c GET ${request.url}`,\n 'color: gray',\n `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`,\n ''\n );\n }\n });\n\n this.__fetchEventQueue = [];\n }\n\n private __flushFetchEventQueue(errorMessage: string) {\n this.__fetchEventQueue.forEach(event => {\n event.respondWith(Promise.reject(new Error(errorMessage)));\n });\n\n this.__fetchEventQueue = [];\n }\n\n private __handleFetchEvent(event: Event) {\n if (!(event instanceof FetchEvent)) return;\n if (event.defaultPrevented) return;\n if (event.request.method !== 'GET') return;\n if (event.request.url.startsWith('foxy://')) return;\n if (event.composedPath()[0] === this) return;\n\n event.preventDefault();\n this.__fetchEventQueue.push(event);\n\n if (!this.in('busy')) this.__processFetchEventQueue();\n }\n}\n"]}
1
+ {"version":3,"file":"NucleonElement.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/NucleonElement.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComputedElementProperties, HALJSONResource, NucleonMachine, NucleonV8N } from './types';\nimport { html, LitElement, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Nucleon, Rumour } from '@foxy.io/sdk/core';\nimport { assign, interpret } from 'xstate';\n\nimport { API } from './API';\nimport { FetchEvent } from './FetchEvent';\nimport { UpdateEvent, UpdateResult } from './UpdateEvent';\nimport memoize from 'lodash-es/memoize';\nimport { serveFromCache } from './serveFromCache';\nimport { InferrableMixin } from '../../../mixins/inferrable';\n\n/**\n * Base class for custom elements working with remote HAL+JSON resources.\n *\n * @fires NucleonElement#update - Instance of `NucleonElement.UpdateEvent`. Dispatched on an element whenever it changes its state.\n * @fires NucleonElement#fetch - Instance of `NucleonElement.API.FetchEvent`. Emitted before each API request.\n *\n * @element foxy-nucleon\n * @since 1.1.0\n */\nexport class NucleonElement<TData extends HALJSONResource> extends InferrableMixin(LitElement) {\n /**\n * Instances of this event are dispatched on an element whenever it changes its\n * state (e.g. when going from `busy` to `idle` or on `form` data change).\n * This event isn't cancelable, and it does not bubble.\n * @readonly\n */\n static readonly UpdateEvent = UpdateEvent;\n\n /**\n * Creates a tagged [Rumour](https://sdk.foxy.dev/classes/_core_index_.rumour.html)\n * instance if it doesn't exist or returns cached one otherwise. NucleonElements\n * use empty Rumour group by default.\n * @readonly\n */\n static readonly Rumour = memoize<(group: string) => Rumour>(() => new Rumour());\n\n /**\n * Universal [API](https://sdk.foxy.dev/classes/_core_index_.api.html) client\n * that dispatches cancellable `FetchEvent` on an element before each request.\n * @readonly\n */\n static readonly API = API;\n\n static get inferredProperties(): string[] {\n return [...super.inferredProperties, 'group', 'lang'];\n }\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n __state: { type: String, reflect: true, attribute: 'state' },\n related: { type: Array },\n parent: { type: String },\n group: { type: String, noAccessor: true },\n href: { type: String, noAccessor: true },\n lang: { type: String },\n };\n }\n\n /**\n * Array of validation functions. Each function accepts `element.form` and must return\n * either an error code string if form data fails the check or `true` otherwise.\n * Error codes are collected in `element.errors`. Empty by default.\n */\n static get v8n(): NucleonV8N<any> {\n return [];\n }\n\n /**\n * Optional ISO 639-1 code describing the language element content is written in.\n * Changing the `lang` attribute will update the value of this property.\n */\n lang = '';\n\n /**\n * Optional URL of the collection this element's resource belongs to.\n * Changing the `parent` attribute will update the value of this property.\n */\n parent = '';\n\n /**\n * Optional URI list of the related resources. If Rumour encounters a related\n * resource on creation or deletion, it will be reloaded from source.\n */\n related: string[] = [];\n\n private __hrefToLoad: string | null = null;\n\n private __group = '';\n\n private __unsubscribeFromRumour!: () => void;\n\n private __fetchEventHandler!: (evt: Event) => void;\n\n private __fetchEventQueue: FetchEvent[] = [];\n\n private readonly __service = interpret(\n (Nucleon.machine as NucleonMachine<TData>).withConfig({\n services: {\n sendDelete: () => this._sendDelete(),\n sendPatch: ({ edits }) => this._sendPatch(edits!),\n sendPost: ({ edits }) => this._sendPost(edits!),\n sendGet: () => this._sendGet(),\n },\n\n actions: {\n validate: assign<Nucleon.Context<TData, string>, Nucleon.Event<TData>>({\n errors: context => {\n const rules = (this.constructor as typeof NucleonElement).v8n;\n const form = { ...context.data, ...context.edits };\n\n return rules\n .map(validate => validate(form))\n .filter(v8nResult => typeof v8nResult === 'string')\n .filter((err, errIndex, errs) => errs.indexOf(err) === errIndex) as string[];\n },\n }),\n },\n })\n );\n\n constructor() {\n super();\n this.__createService();\n }\n\n /**\n * If network request returns non-2XX code, the entire error response\n * will be available via this getter.\n *\n * This property is readonly. Changing failure records via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override error status.\n *\n * @since 1.4.0\n */\n get failure(): Response | null {\n return this.__service.state.context.failure;\n }\n\n /**\n * Array of validation errors returned from `NucleonElement.v8n` checks.\n *\n * This property is readonly. Adding or removing error codes via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override validity status.\n */\n get errors(): string[] {\n return this.__service.state.context.errors;\n }\n\n /**\n * Resource snapshot with edits applied. Empty object if unavailable.\n *\n * This property and its value are readonly. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please use `element.edit({ foo: 'bar' })` instead.\n * If you need to replace the entire data object, consider using `element.data`.\n */\n get form(): Partial<TData> {\n const { data, edits } = this.__service.state.context;\n return { ...data, ...edits } as Partial<TData>;\n }\n\n /**\n * Resource snapshot as-is, no edits applied. Null if unavailable.\n *\n * Returned value is not reactive. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please set the property instead: `element.data = { ...element.data, foo: 'bar' }`.\n * If you're processing user input, consider using `element.form` and `element.edit()` instead.\n */\n get data(): TData | null {\n return this.__service.state.context.data;\n }\n\n set data(data: TData | null) {\n this.__service.send({ type: 'SET_DATA', data });\n this.__hrefToLoad = null;\n }\n\n /**\n * Rumour group. Elements in different groups will not share updates. Empty by default.\n * @example element.group = 'my-group'\n */\n get group(): string {\n return this.__group;\n }\n\n set group(value: string) {\n this.__group = value;\n this.__destroyRumour();\n this.__createRumour();\n }\n\n /**\n * Optional URL of the resource to load. Switches element to `idle.template` state if empty (default).\n * @example element.href = 'https://demo.foxycart.com/s/customer/attributes/0'\n */\n get href(): string {\n return this.form._links?.self.href ?? this.__hrefToLoad ?? '';\n }\n\n set href(value: string) {\n if (value) {\n this.__hrefToLoad = value;\n this.__service.send({ type: 'FETCH' });\n } else {\n this.__hrefToLoad = null;\n this.__service.send({ type: 'SET_DATA', data: null });\n }\n }\n\n /**\n * Checks if this element is in the given state.\n * @example element.in({ idle: 'snapshot' })\n */\n in<TStateValue extends Nucleon.State<TData, string>['value']>(\n stateValue: TStateValue\n ): this is this & ComputedElementProperties<TData, TStateValue> {\n return this.__service.state.matches(stateValue);\n }\n\n /**\n * Clears all edits and emits the `update` event.\n * @example element.undo()\n */\n undo(): void {\n this.__service.send({ type: 'UNDO' });\n }\n\n /**\n * Applies an edit to the local resource snapshot or its template and emits the `update` event.\n * @example element.edit({ first_name: 'Alex' })\n */\n edit(data: Partial<TData>): void {\n if (typeof data._links?.self.href === 'string') this.__hrefToLoad = null;\n this.__service.send({ type: 'EDIT', data });\n }\n\n /**\n * Submits the form, updating the resource if href isn't empty or creating it otherwise.\n * Emits multiple `update` events as element state changes. Has no effect on invalid forms.\n * @example element.submit()\n */\n submit(): void {\n this.__service.send({ type: 'SUBMIT' });\n }\n\n /**\n * Sends a DELETE request to `element.href` and clears local data on success.\n * Emits multiple update events as element state changes.\n * @example element.delete()\n */\n delete(): void {\n this.__service.send({ type: 'DELETE' });\n }\n\n /**\n * Fetches data from `element.href` in background, keeping the edits and v8n errors.\n * @example element.refresh()\n */\n refresh(): void {\n this.__service.send({ type: 'REFRESH' });\n }\n\n render(): TemplateResult {\n return html`<slot></slot>`;\n }\n\n /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n if (this.href) this.refresh();\n\n this.__createRumour();\n this.__createServer();\n this.__processFetchEventQueue();\n\n this.dispatchEvent(new UpdateEvent());\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.__destroyRumour();\n this.__destroyServer();\n this.__flushFetchEventQueue('parent element was disconnected');\n\n this.dispatchEvent(new UpdateEvent());\n }\n\n applyInferredProperties(context: Map<string, unknown>): void {\n super.applyInferredProperties(context);\n\n if (this.infer === null) return;\n\n this.group = (context.get('group') as string | undefined) ?? '';\n this.lang = (context.get('lang') as string | undefined) ?? '';\n }\n\n /** Sends API request. Throws an error on non-2XX response. */\n protected async _fetch<TResult = TData>(...args: Parameters<Window['fetch']>): Promise<TResult> {\n const response = await new API(this).fetch(...args);\n if (!response.ok) throw response;\n return response.json();\n }\n\n /** POSTs to `element.parent`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPost(edits: Partial<TData>): Promise<TData> {\n this.__destroyRumour();\n\n try {\n const body = JSON.stringify(edits);\n const postData = await this._fetch(this.parent, { body, method: 'POST' });\n const data = await this._fetch(postData._links.self.href);\n\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n rumour.share({ data, related, source: data._links.self.href });\n\n return data;\n } finally {\n this.__createRumour();\n }\n }\n\n /** GETs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendGet(): Promise<TData> {\n this.__destroyRumour();\n\n try {\n const data = await this._fetch(this.href);\n NucleonElement.Rumour(this.group).share({ data, source: this.href });\n return data;\n } finally {\n this.__createRumour();\n }\n }\n\n /** PATCHes `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPatch(edits: Partial<TData>): Promise<TData> {\n this.__destroyRumour();\n\n try {\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.href, { body, method: 'PATCH' });\n\n const rumour = NucleonElement.Rumour(this.group);\n rumour.share({ data, source: this.href, related: this.related });\n\n return data;\n } finally {\n this.__createRumour();\n }\n }\n\n /** DELETEs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendDelete(): Promise<null> {\n this.__destroyRumour();\n\n try {\n await this._fetch(this.href, { method: 'DELETE' });\n\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n rumour.share({ data: null, source: this.href, related });\n\n return null;\n } finally {\n this.__createRumour();\n }\n }\n\n // this getter is used by LitElement to set the \"state\" attribute\n private get __state(): string {\n const state = this.__service.state;\n const flags = state.toStrings().reduce((p, c) => [...p, ...c.split('.')], [] as string[]);\n return [...new Set(flags)].join(' ');\n }\n\n private __createService() {\n this.__service.onTransition(state => {\n if (!state.changed) return;\n\n let result: UpdateResult | undefined = undefined;\n\n if (state.matches('idle')) {\n if (state.history?.matches({ busy: 'deleting' })) {\n result = UpdateResult.ResourceDeleted;\n } else if (state.history?.matches({ busy: 'creating' })) {\n result = UpdateResult.ResourceCreated;\n }\n }\n\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent('update', { detail: { result } }));\n\n if (!state.matches('busy')) this.__processFetchEventQueue();\n });\n\n this.__service.onChange(() => {\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\n });\n\n this.__service.start();\n }\n\n private __createRumour() {\n const rumour = NucleonElement.Rumour(this.group);\n this.__unsubscribeFromRumour = rumour.track(update => this.__handleRumourUpdate(update));\n }\n\n private __destroyRumour() {\n this.__unsubscribeFromRumour?.();\n }\n\n private __createServer() {\n this.__fetchEventHandler = this.__handleFetchEvent.bind(this);\n this.addEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __destroyServer() {\n this.removeEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __handleRumourUpdate(update: (oldData: TData) => TData | null) {\n try {\n const oldData = this.__service.state?.context.data;\n if (!oldData) return;\n\n const newData = update(oldData);\n if (newData !== oldData) this.__service.send({ data: newData, type: 'SET_DATA' });\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n this.__service.send({ type: 'REFRESH' });\n } else {\n throw err;\n }\n }\n }\n\n private __processFetchEventQueue() {\n const api = new NucleonElement.API(this);\n\n this.__fetchEventQueue.forEach(event => {\n const request = event.request;\n const cacheResponse = serveFromCache(request.url, this.data);\n const whenResponseReady = cacheResponse.ok ? cacheResponse : api.fetch(request);\n\n event.respondWith(Promise.resolve(whenResponseReady));\n\n if (cacheResponse.ok) {\n console.debug(\n `%c@foxy.io/elements::${this.localName}\\n%c200%c GET ${request.url}`,\n 'color: gray',\n `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`,\n ''\n );\n }\n });\n\n this.__fetchEventQueue = [];\n }\n\n private __flushFetchEventQueue(errorMessage: string) {\n this.__fetchEventQueue.forEach(event => {\n event.respondWith(Promise.reject(new Error(errorMessage)));\n });\n\n this.__fetchEventQueue = [];\n }\n\n private __handleFetchEvent(event: Event) {\n if (!(event instanceof FetchEvent)) return;\n if (event.defaultPrevented) return;\n if (event.request.method !== 'GET') return;\n if (event.request.url.startsWith('foxy://')) return;\n if (event.composedPath()[0] === this) return;\n\n event.preventDefault();\n this.__fetchEventQueue.push(event);\n\n if (!this.__service.state.matches('busy')) this.__processFetchEventQueue();\n }\n}\n"]}
@@ -1,3 +1,11 @@
1
- export declare class UpdateEvent extends CustomEvent<void> {
2
- constructor();
1
+ export declare enum UpdateResult {
2
+ ResourceCreated = 0,
3
+ ResourceDeleted = 1
4
+ }
5
+ export declare type UpdateEventDetail = {
6
+ result?: UpdateResult;
7
+ };
8
+ export declare class UpdateEvent extends CustomEvent<UpdateEventDetail> {
9
+ static readonly UpdateResult: typeof UpdateResult;
10
+ constructor(type?: string, eventInitDict?: CustomEventInit<UpdateEventDetail>);
3
11
  }
@@ -1,6 +1,12 @@
1
+ export var UpdateResult;
2
+ (function (UpdateResult) {
3
+ UpdateResult[UpdateResult["ResourceCreated"] = 0] = "ResourceCreated";
4
+ UpdateResult[UpdateResult["ResourceDeleted"] = 1] = "ResourceDeleted";
5
+ })(UpdateResult || (UpdateResult = {}));
1
6
  export class UpdateEvent extends CustomEvent {
2
- constructor() {
3
- super('update');
7
+ constructor(type = 'update', eventInitDict) {
8
+ super(type, eventInitDict);
4
9
  }
5
10
  }
11
+ UpdateEvent.UpdateResult = UpdateResult;
6
12
  //# sourceMappingURL=UpdateEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateEvent.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/UpdateEvent.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,WAAiB;IAChD;QACE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;CACF","sourcesContent":["export class UpdateEvent extends CustomEvent<void> {\n constructor() {\n super('update');\n }\n}\n"]}
1
+ {"version":3,"file":"UpdateEvent.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/UpdateEvent.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,qEAAe,CAAA;IACf,qEAAe,CAAA;AACjB,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAMD,MAAM,OAAO,WAAY,SAAQ,WAA8B;IAG7D,YAAY,IAAI,GAAG,QAAQ,EAAE,aAAkD;QAC7E,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC7B,CAAC;;AAJe,wBAAY,GAAG,YAAY,CAAC","sourcesContent":["export enum UpdateResult {\n ResourceCreated,\n ResourceDeleted,\n}\n\nexport type UpdateEventDetail = {\n result?: UpdateResult;\n};\n\nexport class UpdateEvent extends CustomEvent<UpdateEventDetail> {\n static readonly UpdateResult = UpdateResult;\n\n constructor(type = 'update', eventInitDict?: CustomEventInit<UpdateEventDetail>) {\n super(type, eventInitDict);\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { TemplateResult } from 'lit-html';
2
+ import type { Data } from './types';
3
+ import { InternalCard } from '../../internal/InternalCard/InternalCard';
4
+ declare const TemplateCard_base: typeof InternalCard & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
5
+ defaultNS: string;
6
+ };
7
+ export declare class TemplateCard extends TemplateCard_base<Data> {
8
+ renderBody(): TemplateResult;
9
+ }
10
+ export {};
@@ -0,0 +1,18 @@
1
+ import { TranslatableMixin } from "../../../mixins/translatable.js";
2
+ import { InternalCard } from "../../internal/InternalCard/InternalCard.js";
3
+ import { html } from 'lit-html';
4
+ export class TemplateCard extends TranslatableMixin(InternalCard) {
5
+ renderBody() {
6
+ const data = this.data;
7
+ const type = (data === null || data === void 0 ? void 0 : data.content_url) ? 'type_custom_url'
8
+ : (data === null || data === void 0 ? void 0 : data.content) ? 'type_custom_text'
9
+ : 'type_default';
10
+ return html `
11
+ <div class="flex justify-between gap-s">
12
+ <foxy-i18n class="font-semibold truncate flex-shrink-0" infer="" key="title"></foxy-i18n>
13
+ <foxy-i18n class="truncate text-tertiary" infer="" key=${type}></foxy-i18n>
14
+ </div>
15
+ `;
16
+ }
17
+ }
18
+ //# sourceMappingURL=TemplateCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateCard.js","sourceRoot":"","sources":["../../../../src/elements/public/TemplateCard/TemplateCard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,OAAO,YAAa,SAAQ,iBAAiB,CAAC,YAAY,CAAO;IACrE,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,IAAI,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,EAC5B,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,EACf,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,cAAc,CAAC;QAEnB,OAAO,IAAI,CAAA;;;iEAGkD,IAAI;;KAEhE,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { TemplateResult } from 'lit-html';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { html } from 'lit-html';\n\nexport class TemplateCard extends TranslatableMixin(InternalCard)<Data> {\n renderBody(): TemplateResult {\n const data = this.data;\n const type = data?.content_url\n ? 'type_custom_url'\n : data?.content\n ? 'type_custom_text'\n : 'type_default';\n\n return html`\n <div class=\"flex justify-between gap-s\">\n <foxy-i18n class=\"font-semibold truncate flex-shrink-0\" infer=\"\" key=\"title\"></foxy-i18n>\n <foxy-i18n class=\"truncate text-tertiary\" infer=\"\" key=${type}></foxy-i18n>\n </div>\n `;\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import '../../internal/InternalCard/index';
2
+ import '../I18n/index';
3
+ import { TemplateCard } from './TemplateCard';
4
+ export { TemplateCard };
@@ -0,0 +1,6 @@
1
+ import "../../internal/InternalCard/index.js";
2
+ import "../I18n/index.js";
3
+ import { TemplateCard } from "./TemplateCard.js";
4
+ customElements.define('foxy-template-card', TemplateCard);
5
+ export { TemplateCard };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/TemplateCard/index.ts"],"names":[],"mappings":"AAAA,8CAA2C;AAE3C,0BAAuB;AAEvB,OAAO,EAAE,YAAY,EAAE,0BAAuB;AAE9C,cAAc,CAAC,MAAM,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,CAAC","sourcesContent":["import '../../internal/InternalCard/index';\n\nimport '../I18n/index';\n\nimport { TemplateCard } from './TemplateCard';\n\ncustomElements.define('foxy-template-card', TemplateCard);\n\nexport { TemplateCard };\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Rels } from '@foxy.io/sdk/backend';
2
+ import type { Resource } from '@foxy.io/sdk/core';
3
+ export declare type Data = Resource<Rels.CartTemplate | Rels.ReceiptTemplate | Rels.CheckoutTemplate | Rels.CartIncludeTemplate>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/elements/public/TemplateCard/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Rels } from '@foxy.io/sdk/backend';\nimport type { Resource } from '@foxy.io/sdk/core';\n\nexport type Data = Resource<\n Rels.CartTemplate | Rels.ReceiptTemplate | Rels.CheckoutTemplate | Rels.CartIncludeTemplate\n>;\n"]}
@@ -68,6 +68,7 @@ export declare class TemplateConfigForm extends Base<Data> {
68
68
  /** URI of the `fx:regions` hAPI resource. */
69
69
  regions: string;
70
70
  private __addHiddenFieldInputValue;
71
+ private __currentTab;
71
72
  render(): TemplateResult;
72
73
  private __renderCartType;
73
74
  private __renderFoxycomplete;
@@ -1,7 +1,7 @@
1
1
  import * as logos from "../PaymentMethodCard/logos.js";
2
2
  import { ChoiceChangeEvent } from "../../private/events.js";
3
3
  import { ScopedElementsMixin } from '@open-wc/scoped-elements';
4
- import { html } from 'lit-html';
4
+ import { html, svg } from 'lit-html';
5
5
  import { Checkbox } from "../../private/Checkbox/Checkbox.js";
6
6
  import { Choice } from "../../private/Choice/Choice.js";
7
7
  import { ConfigurableMixin } from "../../../mixins/configurable.js";
@@ -16,6 +16,25 @@ import { getDefaultJSON } from "./defaults.js";
16
16
  import { live } from 'lit-html/directives/live';
17
17
  const NS = 'template-config-form';
18
18
  const Base = ScopedElementsMixin(ResponsiveMixin(ConfigurableMixin(ThemeableMixin(TranslatableMixin(NucleonElement, NS)))));
19
+ /* Tab icons by Heroicons (https://heroicons.com) */
20
+ const tabs = [
21
+ {
22
+ key: 'tab_checkout',
23
+ icon: svg `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" style="width: 1em; height: 1em"><path fill-rule="evenodd" d="M1 4a1 1 0 011-1h16a1 1 0 011 1v8a1 1 0 01-1 1H2a1 1 0 01-1-1V4zm12 4a3 3 0 11-6 0 3 3 0 016 0zM4 9a1 1 0 100-2 1 1 0 000 2zm13-1a1 1 0 11-2 0 1 1 0 012 0zM1.75 14.5a.75.75 0 000 1.5c4.417 0 8.693.603 12.749 1.73 1.111.309 2.251-.512 2.251-1.696v-.784a.75.75 0 00-1.5 0v.784a.272.272 0 01-.35.25A49.043 49.043 0 001.75 14.5z" clip-rule="evenodd" /></svg>`,
24
+ },
25
+ {
26
+ key: 'tab_cart',
27
+ icon: svg `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" style="width: 1em; height: 1em"><path d="M1 1.75A.75.75 0 011.75 1h1.628a1.75 1.75 0 011.734 1.51L5.18 3a65.25 65.25 0 0113.36 1.412.75.75 0 01.58.875 48.645 48.645 0 01-1.618 6.2.75.75 0 01-.712.513H6a2.503 2.503 0 00-2.292 1.5H17.25a.75.75 0 010 1.5H2.76a.75.75 0 01-.748-.807 4.002 4.002 0 012.716-3.486L3.626 2.716a.25.25 0 00-.248-.216H1.75A.75.75 0 011 1.75zM6 17.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM15.5 19a1.5 1.5 0 100-3 1.5 1.5 0 000 3z" /></svg>`,
28
+ },
29
+ {
30
+ key: 'tab_analytics',
31
+ icon: svg `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" style="width: 1em; height: 1em"><path fill-rule="evenodd" d="M6.111 11.89A5.5 5.5 0 1115.501 8 .75.75 0 1017 8a7 7 0 10-11.95 4.95.75.75 0 001.06-1.06zm2.121-5.658a2.5 2.5 0 000 3.536.75.75 0 11-1.06 1.06A4 4 0 1114 8a.75.75 0 01-1.5 0 2.5 2.5 0 00-4.268-1.768zm2.534 1.279a.75.75 0 00-1.37.364l-.492 6.861a.75.75 0 001.204.65l1.043-.799.985 3.678a.75.75 0 001.45-.388l-.978-3.646 1.292.204a.75.75 0 00.74-1.16l-3.874-5.764z" clip-rule="evenodd" /></svg>`,
32
+ },
33
+ {
34
+ key: 'tab_advanced',
35
+ icon: svg `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" style="width: 1em; height: 1em"><path fill-rule="evenodd" d="M14.5 10a4.5 4.5 0 004.284-5.882c-.105-.324-.51-.391-.752-.15L15.34 6.66a.454.454 0 01-.493.11 3.01 3.01 0 01-1.618-1.616.455.455 0 01.11-.494l2.694-2.692c.24-.241.174-.647-.15-.752a4.5 4.5 0 00-5.873 4.575c.055.873-.128 1.808-.8 2.368l-7.23 6.024a2.724 2.724 0 103.837 3.837l6.024-7.23c.56-.672 1.495-.855 2.368-.8.096.007.193.01.291.01zM5 16a1 1 0 11-2 0 1 1 0 012 0z" clip-rule="evenodd" /><path d="M14.5 11.5c.173 0 .345-.007.514-.022l3.754 3.754a2.5 2.5 0 01-3.536 3.536l-4.41-4.41 2.172-2.607c.052-.063.147-.138.342-.196.202-.06.469-.087.777-.067.128.008.257.012.387.012zM6 4.586l2.33 2.33a.452.452 0 01-.08.09L6.8 8.214 4.586 6H3.309a.5.5 0 01-.447-.276l-1.7-3.402a.5.5 0 01.093-.577l.49-.49a.5.5 0 01.577-.094l3.402 1.7A.5.5 0 016 3.31v1.277z" /></svg>`,
36
+ },
37
+ ];
19
38
  /**
20
39
  * Form element for creating or editing template configs (`fx:template_config`).
21
40
  *
@@ -76,11 +95,14 @@ export class TemplateConfigForm extends Base {
76
95
  /** URI of the `fx:regions` hAPI resource. */
77
96
  this.regions = '';
78
97
  this.__addHiddenFieldInputValue = '';
98
+ this.__currentTab = 0;
79
99
  }
80
100
  static get scopedElements() {
81
101
  return {
82
102
  'vaadin-text-field': customElements.get('vaadin-text-field'),
83
103
  'vaadin-text-area': customElements.get('vaadin-text-area'),
104
+ 'vaadin-tabs': customElements.get('vaadin-tabs'),
105
+ 'vaadin-tab': customElements.get('vaadin-tab'),
84
106
  'iron-icon': customElements.get('iron-icon'),
85
107
  'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),
86
108
  'foxy-spinner': customElements.get('foxy-spinner'),
@@ -95,6 +117,7 @@ export class TemplateConfigForm extends Base {
95
117
  return {
96
118
  ...super.properties,
97
119
  __addHiddenFieldInputValue: { attribute: false },
120
+ __currentTab: { attribute: false },
98
121
  countries: { type: String },
99
122
  regions: { type: String },
100
123
  };
@@ -104,18 +127,44 @@ export class TemplateConfigForm extends Base {
104
127
  const hidden = this.hiddenSelector;
105
128
  const json = this.form.json ? JSON.parse(this.form.json) : getDefaultJSON();
106
129
  return html `
107
- <div class="relative" aria-busy=${this.in('busy')} aria-live="polite">
108
- <div class="space-y-l">
109
- ${hidden.matches('cart-type', true) ? '' : this.__renderCartType(json)}
110
- ${hidden.matches('foxycomplete', true) ? '' : this.__renderFoxycomplete(json)}
111
- ${hidden.matches('locations', true) ? '' : this.__renderLocations(json)}
112
- ${hidden.matches('hidden-fields', true) ? '' : this.__renderHiddenFields(json)}
130
+ <div class="relative grid gap-l" aria-busy=${this.in('busy')} aria-live="polite">
131
+ <vaadin-tabs
132
+ class="shadow-none -mx-l -my-s min-w-0"
133
+ theme="minimal"
134
+ @selected-changed=${(evt) => {
135
+ this.__currentTab = evt.detail.value;
136
+ }}
137
+ >
138
+ ${tabs.map(tab => html `
139
+ <vaadin-tab>
140
+ <div class="flex items-center gap-s">
141
+ ${tab.icon}
142
+ <foxy-i18n infer="" class="font-semibold" key=${tab.key}></foxy-i18n>
143
+ </div>
144
+ </vaadin-tab>
145
+ `)}
146
+ </vaadin-tabs>
147
+
148
+ <div class=${classMap({ 'space-y-l min-w-0': true, 'hidden': this.__currentTab !== 0 })}>
113
149
  ${hidden.matches('cards', true) ? '' : this.__renderCards(json)}
114
150
  ${hidden.matches('checkout-type', true) ? '' : this.__renderCheckoutType(json)}
115
151
  ${hidden.matches('consent', true) ? '' : this.__renderConsent(json)}
116
152
  ${hidden.matches('fields', true) ? '' : this.__renderFields(json)}
153
+ </div>
154
+
155
+ <div class=${classMap({ 'space-y-l min-w-0': true, 'hidden': this.__currentTab !== 1 })}>
156
+ ${hidden.matches('cart-type', true) ? '' : this.__renderCartType(json)}
157
+ ${hidden.matches('foxycomplete', true) ? '' : this.__renderFoxycomplete(json)}
158
+ ${hidden.matches('locations', true) ? '' : this.__renderLocations(json)}
159
+ ${hidden.matches('hidden-fields', true) ? '' : this.__renderHiddenFields(json)}
160
+ </div>
161
+
162
+ <div class=${classMap({ 'space-y-l min-w-0': true, 'hidden': this.__currentTab !== 2 })}>
117
163
  ${hidden.matches('google-analytics', true) ? '' : this.__renderGoogleAnalytics(json)}
118
164
  ${hidden.matches('segment-io', true) ? '' : this.__renderSegmentIo(json)}
165
+ </div>
166
+
167
+ <div class=${classMap({ 'space-y-l min-w-0': true, 'hidden': this.__currentTab !== 3 })}>
119
168
  ${hidden.matches('troubleshooting', true) ? '' : this.__renderTroubleshooting(json)}
120
169
  ${hidden.matches('custom-config', true) ? '' : this.__renderCustomConfig(json)}
121
170
  ${hidden.matches('header', true) ? '' : this.__renderHeader(json)}