@foxy.io/elements 1.22.0-beta.4 → 1.22.0-beta.6

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 (228) hide show
  1. package/dist/cdn/foxy-access-recovery-form.js +1 -1
  2. package/dist/cdn/foxy-address-card.js +2 -2
  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-cancellation-form.js +1 -1
  12. package/dist/cdn/foxy-cart-card.js +1 -1
  13. package/dist/cdn/foxy-cart-form.js +1 -1
  14. package/dist/cdn/foxy-collection-page.js +1 -1
  15. package/dist/cdn/foxy-collection-pages.js +1 -1
  16. package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
  17. package/dist/cdn/foxy-coupon-card.js +1 -1
  18. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  19. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  20. package/dist/cdn/foxy-coupon-detail-card.js +1 -1
  21. package/dist/cdn/foxy-coupon-form.js +1 -1
  22. package/dist/cdn/foxy-custom-field-card.js +1 -1
  23. package/dist/cdn/foxy-custom-field-form.js +1 -1
  24. package/dist/cdn/foxy-customer-card.js +1 -1
  25. package/dist/cdn/foxy-customer-form.js +1 -1
  26. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  27. package/dist/cdn/foxy-customer-portal.js +16 -15
  28. package/dist/cdn/foxy-customer.js +1 -1
  29. package/dist/cdn/foxy-customers-table.js +1 -1
  30. package/dist/cdn/foxy-discount-builder.js +1 -1
  31. package/dist/cdn/foxy-discount-card.js +1 -1
  32. package/dist/cdn/foxy-discount-detail-card.js +1 -1
  33. package/dist/cdn/foxy-donation.js +1 -1
  34. package/dist/cdn/foxy-downloadable-card.js +1 -0
  35. package/dist/cdn/foxy-downloadable-form.js +505 -0
  36. package/dist/cdn/foxy-email-template-card.js +1 -1
  37. package/dist/cdn/foxy-email-template-form.js +1 -1
  38. package/dist/cdn/foxy-error-entry-card.js +1 -1
  39. package/dist/cdn/foxy-form-dialog.js +1 -1
  40. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  41. package/dist/cdn/foxy-gift-card-card.js +1 -1
  42. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  43. package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
  44. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  45. package/dist/cdn/foxy-gift-card-form.js +1 -1
  46. package/dist/cdn/foxy-i18n-editor.js +2 -2
  47. package/dist/cdn/foxy-i18n.js +1 -1
  48. package/dist/cdn/foxy-integration-card.js +1 -1
  49. package/dist/cdn/foxy-integration-form.js +1 -1
  50. package/dist/cdn/foxy-item-card.js +1 -1
  51. package/dist/cdn/foxy-item-category-card.js +1 -1
  52. package/dist/cdn/foxy-item-category-form.js +1 -1
  53. package/dist/cdn/foxy-item-form.js +1 -1
  54. package/dist/cdn/foxy-item-option-card.js +1 -1
  55. package/dist/cdn/foxy-item-option-form.js +1 -1
  56. package/dist/cdn/foxy-items-form.js +1 -1
  57. package/dist/cdn/foxy-pagination.js +1 -1
  58. package/dist/cdn/foxy-payment-card.js +1 -1
  59. package/dist/cdn/foxy-payment-method-card.js +1 -1
  60. package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
  61. package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
  62. package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
  63. package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
  64. package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
  65. package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
  66. package/dist/cdn/foxy-query-builder.js +1 -1
  67. package/dist/cdn/foxy-report-form.js +2 -2
  68. package/dist/cdn/foxy-reports-table.js +1 -1
  69. package/dist/cdn/foxy-shipment-card.js +1 -1
  70. package/dist/cdn/foxy-shipping-method-card.js +1 -1
  71. package/dist/cdn/foxy-sign-in-form.js +1 -1
  72. package/dist/cdn/foxy-spinner.js +2 -2
  73. package/dist/cdn/foxy-store-card.js +1 -1
  74. package/dist/cdn/foxy-store-form.js +1 -1
  75. package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
  76. package/dist/cdn/foxy-subscription-card.js +1 -1
  77. package/dist/cdn/foxy-subscription-form.js +1 -1
  78. package/dist/cdn/foxy-subscription-settings-form.js +1 -1
  79. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  80. package/dist/cdn/foxy-table.js +1 -1
  81. package/dist/cdn/foxy-tax-card.js +1 -1
  82. package/dist/cdn/foxy-tax-form.js +1 -1
  83. package/dist/cdn/foxy-template-config-form.js +1 -1
  84. package/dist/cdn/foxy-template-form.js +1 -1
  85. package/dist/cdn/foxy-template-set-card.js +1 -1
  86. package/dist/cdn/foxy-template-set-form.js +1 -1
  87. package/dist/cdn/foxy-transaction-card.js +1 -1
  88. package/dist/cdn/foxy-transaction.js +1 -1
  89. package/dist/cdn/foxy-transactions-table.js +7 -7
  90. package/dist/cdn/foxy-user-card.js +1 -1
  91. package/dist/cdn/foxy-user-form.js +1 -1
  92. package/dist/cdn/foxy-users-table.js +1 -1
  93. package/dist/cdn/foxy-webhook-card.js +1 -1
  94. package/dist/cdn/foxy-webhook-form.js +1 -1
  95. package/dist/cdn/foxy-webhook-log-card.js +1 -1
  96. package/dist/cdn/foxy-webhook-status-card.js +1 -1
  97. package/dist/cdn/shared-014f1513.js +1 -0
  98. package/dist/cdn/{shared-e6d3d6f5.js → shared-01ad847f.js} +1 -1
  99. package/dist/cdn/{shared-698c9002.js → shared-03858aee.js} +1 -1
  100. package/dist/cdn/{shared-a306168b.js → shared-055ca9db.js} +1 -1
  101. package/dist/cdn/{shared-a19ce620.js → shared-06c64816.js} +1 -1
  102. package/dist/cdn/{shared-685ca959.js → shared-15c94a90.js} +1 -1
  103. package/dist/cdn/{shared-f628a723.js → shared-178f7222.js} +1 -1
  104. package/dist/cdn/{shared-aa5785d9.js → shared-1a6fb0f3.js} +1 -1
  105. package/dist/cdn/{shared-1bd28b9c.js → shared-1a9496d4.js} +1 -1
  106. package/dist/cdn/{shared-b590adb2.js → shared-1f4b9c6b.js} +1 -1
  107. package/dist/cdn/{shared-5c5d13bd.js → shared-24a762c1.js} +1 -1
  108. package/dist/cdn/{shared-f42077ab.js → shared-2c6ea96d.js} +1 -1
  109. package/dist/cdn/{shared-50c6daa1.js → shared-38ed7905.js} +1 -1
  110. package/dist/cdn/{shared-87405fc7.js → shared-3b8b5eda.js} +3 -3
  111. package/dist/cdn/{shared-26390fea.js → shared-3b9b9427.js} +1 -1
  112. package/dist/cdn/{shared-67790b63.js → shared-4055f94a.js} +1 -1
  113. package/dist/cdn/{shared-cf49ce0c.js → shared-473aaeff.js} +1 -1
  114. package/dist/cdn/{shared-fad30ff5.js → shared-499c6db5.js} +1 -1
  115. package/dist/cdn/{shared-5a09ad7e.js → shared-49b65f1e.js} +1 -1
  116. package/dist/cdn/{shared-ccfb87fb.js → shared-4ac2a677.js} +1 -1
  117. package/dist/cdn/{shared-9e18688d.js → shared-533c3914.js} +3 -3
  118. package/dist/cdn/{shared-83a12835.js → shared-5425e3d3.js} +3 -3
  119. package/dist/cdn/{shared-468eb208.js → shared-57c6cfd1.js} +2 -2
  120. package/dist/cdn/{shared-493b8bc1.js → shared-590d8dae.js} +1 -1
  121. package/dist/cdn/{shared-7163796c.js → shared-5fbda766.js} +1 -1
  122. package/dist/cdn/{shared-445dda5a.js → shared-668947de.js} +1 -1
  123. package/dist/cdn/{shared-ffb6c2d3.js → shared-6f4005e5.js} +1 -1
  124. package/dist/cdn/{shared-308e67f3.js → shared-72817759.js} +1 -1
  125. package/dist/cdn/{shared-a6deb2a4.js → shared-7e9c240a.js} +1 -1
  126. package/dist/cdn/{shared-5cf7e764.js → shared-809df8d2.js} +1 -1
  127. package/dist/cdn/{shared-53af541e.js → shared-82f873bd.js} +1 -1
  128. package/dist/cdn/{shared-6860c8d1.js → shared-8b0c77a7.js} +1 -1
  129. package/dist/cdn/{shared-d7b778b7.js → shared-9271a609.js} +1 -1
  130. package/dist/cdn/{shared-00d2cbe9.js → shared-950875f2.js} +1 -1
  131. package/dist/cdn/{shared-f8bcab5c.js → shared-963c4a87.js} +1 -1
  132. package/dist/cdn/{shared-5a445ebd.js → shared-9725c399.js} +1 -1
  133. package/dist/cdn/{shared-dfe7652e.js → shared-9e04b9c3.js} +1 -1
  134. package/dist/cdn/{shared-b2d6bbad.js → shared-9e8bff76.js} +1 -1
  135. package/dist/cdn/shared-b137f17a.js +1 -0
  136. package/dist/cdn/{shared-5897f089.js → shared-b23ccea9.js} +1 -1
  137. package/dist/cdn/{shared-2b1c3f7a.js → shared-b2474263.js} +1 -1
  138. package/dist/cdn/{shared-c5fe5675.js → shared-bc36bc72.js} +1 -1
  139. package/dist/cdn/{shared-643791c8.js → shared-bcc4cf7f.js} +1 -1
  140. package/dist/cdn/{shared-2bae351a.js → shared-be591e92.js} +1 -1
  141. package/dist/cdn/shared-c0816371.js +1 -0
  142. package/dist/cdn/{shared-5ec39f11.js → shared-c0ec65fa.js} +1 -1
  143. package/dist/cdn/{shared-2a9718a9.js → shared-c1dd32b6.js} +1 -1
  144. package/dist/cdn/{shared-01dd0fd6.js → shared-c27aaa05.js} +1 -1
  145. package/dist/cdn/{shared-3c20c295.js → shared-c2cfc26d.js} +1 -1
  146. package/dist/cdn/{shared-394981eb.js → shared-c2ec3291.js} +1 -1
  147. package/dist/cdn/{shared-46c6d1e6.js → shared-c3fa6df1.js} +1 -1
  148. package/dist/cdn/{shared-10f92654.js → shared-c5106979.js} +1 -1
  149. package/dist/cdn/shared-cb34d19f.js +1 -0
  150. package/dist/cdn/{shared-aa678ec4.js → shared-e2f4962c.js} +1 -1
  151. package/dist/cdn/{shared-14f0cf8e.js → shared-e9c81269.js} +1 -1
  152. package/dist/cdn/{shared-3a329baf.js → shared-f8e3be56.js} +1 -1
  153. package/dist/cdn/{shared-8db9452f.js → shared-fcce5337.js} +1 -1
  154. package/dist/cdn/translations/downloadable-card/en.json +7 -0
  155. package/dist/cdn/translations/downloadable-form/en.json +65 -0
  156. package/dist/elements/private/Choice/Choice.d.ts +3 -2
  157. package/dist/elements/private/Choice/Choice.js +5 -0
  158. package/dist/elements/private/Choice/Choice.js.map +1 -1
  159. package/dist/elements/private/Choice/machine.js +33 -0
  160. package/dist/elements/private/Choice/machine.js.map +1 -1
  161. package/dist/elements/public/CouponForm/CouponForm.d.ts +1 -5
  162. package/dist/elements/public/CouponForm/CouponForm.js +27 -289
  163. package/dist/elements/public/CouponForm/CouponForm.js.map +1 -1
  164. package/dist/elements/public/CouponForm/index.d.ts +1 -0
  165. package/dist/elements/public/CouponForm/index.js +1 -0
  166. package/dist/elements/public/CouponForm/index.js.map +1 -1
  167. package/dist/elements/public/CouponForm/types.d.ts +0 -24
  168. package/dist/elements/public/CouponForm/types.js.map +1 -1
  169. package/dist/elements/public/CustomerPortal/CustomerPortal.d.ts +3 -0
  170. package/dist/elements/public/CustomerPortal/CustomerPortal.js +12 -0
  171. package/dist/elements/public/CustomerPortal/CustomerPortal.js.map +1 -1
  172. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.d.ts +2 -0
  173. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js +3 -0
  174. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js.map +1 -1
  175. package/dist/elements/public/CustomerPortal/InternalCustomerPortalTransactions.d.ts +2 -0
  176. package/dist/elements/public/CustomerPortal/InternalCustomerPortalTransactions.js +3 -0
  177. package/dist/elements/public/CustomerPortal/InternalCustomerPortalTransactions.js.map +1 -1
  178. package/dist/elements/public/DiscountBuilder/DiscountBuilder.js +8 -4
  179. package/dist/elements/public/DiscountBuilder/DiscountBuilder.js.map +1 -1
  180. package/dist/elements/public/Donation/Donation.js +3 -3
  181. package/dist/elements/public/Donation/Donation.js.map +1 -1
  182. package/dist/elements/public/DownloadableCard/DownloadableCard.d.ts +21 -0
  183. package/dist/elements/public/DownloadableCard/DownloadableCard.js +84 -0
  184. package/dist/elements/public/DownloadableCard/DownloadableCard.js.map +1 -0
  185. package/dist/elements/public/DownloadableCard/index.d.ts +6 -0
  186. package/dist/elements/public/DownloadableCard/index.js +8 -0
  187. package/dist/elements/public/DownloadableCard/index.js.map +1 -0
  188. package/dist/elements/public/DownloadableCard/types.d.ts +8 -0
  189. package/dist/elements/public/DownloadableCard/types.js +2 -0
  190. package/dist/elements/public/DownloadableCard/types.js.map +1 -0
  191. package/dist/elements/public/DownloadableForm/DownloadableForm.d.ts +54 -0
  192. package/dist/elements/public/DownloadableForm/DownloadableForm.js +149 -0
  193. package/dist/elements/public/DownloadableForm/DownloadableForm.js.map +1 -0
  194. package/dist/elements/public/DownloadableForm/index.d.ts +8 -0
  195. package/dist/elements/public/DownloadableForm/index.js +10 -0
  196. package/dist/elements/public/DownloadableForm/index.js.map +1 -0
  197. package/dist/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/InternalDownloadableFormUploadControl.d.ts +11 -0
  198. package/dist/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/InternalDownloadableFormUploadControl.js +124 -0
  199. package/dist/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/InternalDownloadableFormUploadControl.js.map +1 -0
  200. package/dist/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/index.d.ts +6 -0
  201. package/dist/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/index.js +8 -0
  202. package/dist/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/index.js.map +1 -0
  203. package/dist/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/style.d.ts +1 -0
  204. package/dist/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/style.js +42 -0
  205. package/dist/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/style.js.map +1 -0
  206. package/dist/elements/public/DownloadableForm/types.d.ts +11 -0
  207. package/dist/elements/public/DownloadableForm/types.js +2 -0
  208. package/dist/elements/public/DownloadableForm/types.js.map +1 -0
  209. package/dist/elements/public/FormDialog/FormDialog.d.ts +4 -0
  210. package/dist/elements/public/FormDialog/FormDialog.js +18 -7
  211. package/dist/elements/public/FormDialog/FormDialog.js.map +1 -1
  212. package/dist/elements/public/I18n/format/discount.js +1 -1
  213. package/dist/elements/public/I18n/format/discount.js.map +1 -1
  214. package/dist/elements/public/I18n/format/percent.js +4 -3
  215. package/dist/elements/public/I18n/format/percent.js.map +1 -1
  216. package/dist/elements/public/index.d.ts +2 -0
  217. package/dist/elements/public/index.defined.d.ts +2 -0
  218. package/dist/elements/public/index.defined.js +2 -0
  219. package/dist/elements/public/index.defined.js.map +1 -1
  220. package/dist/elements/public/index.js +2 -0
  221. package/dist/elements/public/index.js.map +1 -1
  222. package/dist/mixins/themeable.js +4 -0
  223. package/dist/mixins/themeable.js.map +1 -1
  224. package/package.json +1 -1
  225. package/dist/cdn/shared-095ad002.js +0 -1
  226. package/dist/cdn/shared-349bbd7e.js +0 -1
  227. package/dist/cdn/shared-7f47c677.js +0 -1
  228. package/dist/cdn/shared-9eeb2bec.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/DownloadableCard/index.ts"],"names":[],"mappings":"AAAA,iDAA8C;AAC9C,8CAA2C;AAC3C,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,gBAAgB,EAAE,8BAA2B;AAEtD,cAAc,CAAC,MAAM,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import '../../internal/InternalSandbox/index';\nimport '../../internal/InternalCard/index';\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport { DownloadableCard } from './DownloadableCard';\n\ncustomElements.define('foxy-downloadable-card', DownloadableCard);\n\nexport { DownloadableCard };\n"]}
@@ -0,0 +1,8 @@
1
+ import type { Resource } from '@foxy.io/sdk/core';
2
+ import type { Rels } from '@foxy.io/sdk/backend';
3
+ export declare type Downloadable = Rels.Downloadable & {
4
+ links: {
5
+ 'fx:create_upload_url': any;
6
+ };
7
+ };
8
+ export declare type Data = Resource<Downloadable>;
@@ -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/DownloadableCard/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nexport type Downloadable = Rels.Downloadable & { links: { 'fx:create_upload_url': any } };\nexport type Data = Resource<Downloadable>;\n"]}
@@ -0,0 +1,54 @@
1
+ import type { PropertyDeclarations } from 'lit-element';
2
+ import type { TemplateResult } from 'lit-html';
3
+ import type { NucleonV8N } from '../NucleonElement/types';
4
+ import type { Data } from './types';
5
+ import { BooleanSelector } from '@foxy.io/sdk/core';
6
+ import { InternalForm } from '../../internal/InternalForm/InternalForm';
7
+ declare const Base: typeof InternalForm & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
8
+ defaultNS: string;
9
+ };
10
+ /**
11
+ * Basic form for managing `fx:downloadable` resources.
12
+ * This element requires an augmented version of hAPI currently limited
13
+ * only to the new Foxy Admin.
14
+ *
15
+ * @slot item-category-uri:before
16
+ * @slot item-category-uri:after
17
+ *
18
+ * @slot name:before
19
+ * @slot name:after
20
+ *
21
+ * @slot code:before
22
+ * @slot code:after
23
+ *
24
+ * @slot price:before
25
+ * @slot price:after
26
+ *
27
+ * @slot upload:before
28
+ * @slot upload:after
29
+ *
30
+ * @slot timestamps:before
31
+ * @slot timestamps:after
32
+ *
33
+ * @slot create:before
34
+ * @slot create:after
35
+ *
36
+ * @slot delete:before
37
+ * @slot delete:after
38
+ *
39
+ * @element foxy-downloadable-form
40
+ * @since 1.22.0
41
+ */
42
+ export declare class DownloadableForm extends Base<Data> {
43
+ static get properties(): PropertyDeclarations;
44
+ static get v8n(): NucleonV8N<Data>;
45
+ /** URL of the `fx:downloadable_item_categories` collection for the store. */
46
+ downloadableItemCategories: string | null;
47
+ private readonly __downloadableItemCategoryLoaderId;
48
+ get disabledSelector(): BooleanSelector;
49
+ renderBody(): TemplateResult;
50
+ protected _sendPatch(edits: Partial<Data>): Promise<Data>;
51
+ protected _sendPost(edits: Partial<Data>): Promise<Data>;
52
+ private get __downloadableItemCategoryLoader();
53
+ }
54
+ export {};
@@ -0,0 +1,149 @@
1
+ import { TranslatableMixin } from "../../../mixins/translatable.js";
2
+ import { BooleanSelector } from '@foxy.io/sdk/core';
3
+ import { InternalForm } from "../../internal/InternalForm/InternalForm.js";
4
+ import { ifDefined } from 'lit-html/directives/if-defined';
5
+ import { html } from 'lit-element';
6
+ const NS = 'downloadable-form';
7
+ const Base = TranslatableMixin(InternalForm, NS);
8
+ /**
9
+ * Basic form for managing `fx:downloadable` resources.
10
+ * This element requires an augmented version of hAPI currently limited
11
+ * only to the new Foxy Admin.
12
+ *
13
+ * @slot item-category-uri:before
14
+ * @slot item-category-uri:after
15
+ *
16
+ * @slot name:before
17
+ * @slot name:after
18
+ *
19
+ * @slot code:before
20
+ * @slot code:after
21
+ *
22
+ * @slot price:before
23
+ * @slot price:after
24
+ *
25
+ * @slot upload:before
26
+ * @slot upload:after
27
+ *
28
+ * @slot timestamps:before
29
+ * @slot timestamps:after
30
+ *
31
+ * @slot create:before
32
+ * @slot create:after
33
+ *
34
+ * @slot delete:before
35
+ * @slot delete:after
36
+ *
37
+ * @element foxy-downloadable-form
38
+ * @since 1.22.0
39
+ */
40
+ export class DownloadableForm extends Base {
41
+ constructor() {
42
+ super(...arguments);
43
+ /** URL of the `fx:downloadable_item_categories` collection for the store. */
44
+ this.downloadableItemCategories = null;
45
+ this.__downloadableItemCategoryLoaderId = 'downloadableItemCategoryLoader';
46
+ }
47
+ static get properties() {
48
+ return {
49
+ ...super.properties,
50
+ downloadableItemCategories: { attribute: 'downloadable-item-categories' },
51
+ };
52
+ }
53
+ static get v8n() {
54
+ return [
55
+ ({ item_category_uri: v }) => !!v || 'item-category-uri:v8n_required',
56
+ ({ file_name: v }) => !!v || 'upload:v8n_required',
57
+ ({ price: v }) => typeof v === 'number' || 'price:v8n_required',
58
+ ({ price: v }) => !v || v >= 0 || 'price:v8n_negative',
59
+ ({ name: v }) => !!v || 'name:v8n_required',
60
+ ({ name: v }) => !v || v.length <= 100 || 'name:v8n_too_long',
61
+ ({ code: v }) => !!v || 'code:v8n_required',
62
+ ({ code: v }) => !v || v.length <= 50 || 'code:v8n_too_long',
63
+ ];
64
+ }
65
+ get disabledSelector() {
66
+ const alwaysDisabled = [];
67
+ const loader = this.__downloadableItemCategoryLoader;
68
+ if (!(loader === null || loader === void 0 ? void 0 : loader.in('idle')))
69
+ alwaysDisabled.push('item-category-uri');
70
+ return new BooleanSelector(`${alwaysDisabled.join(' ')}${super.disabledSelector}`);
71
+ }
72
+ renderBody() {
73
+ var _a, _b;
74
+ return html `
75
+ <foxy-nucleon
76
+ class="hidden"
77
+ infer=""
78
+ href=${ifDefined(this.form.item_category_uri || void 0)}
79
+ id=${this.__downloadableItemCategoryLoaderId}
80
+ @update=${() => this.requestUpdate()}
81
+ >
82
+ </foxy-nucleon>
83
+
84
+ <foxy-internal-async-combo-box-control
85
+ item-label-path="name"
86
+ item-value-path="_links.self.href"
87
+ item-id-path="_links.self.href"
88
+ infer="item-category-uri"
89
+ first=${ifDefined((_a = this.downloadableItemCategories) !== null && _a !== void 0 ? _a : void 0)}
90
+ .selectedItem=${(_b = this.__downloadableItemCategoryLoader) === null || _b === void 0 ? void 0 : _b.data}
91
+ .setValue=${(newValue) => {
92
+ var _a;
93
+ this.edit({ item_category_uri: newValue });
94
+ const newID = parseInt((_a = newValue.split('/').pop()) !== null && _a !== void 0 ? _a : '');
95
+ if (!isNaN(newID))
96
+ this.edit({ item_category_id: newID });
97
+ }}
98
+ >
99
+ </foxy-internal-async-combo-box-control>
100
+
101
+ <foxy-internal-text-control infer="name"></foxy-internal-text-control>
102
+ <foxy-internal-text-control infer="code"></foxy-internal-text-control>
103
+ <foxy-internal-number-control infer="price" min="0"></foxy-internal-number-control>
104
+
105
+ <foxy-internal-downloadable-form-upload-control infer="upload">
106
+ </foxy-internal-downloadable-form-upload-control>
107
+
108
+ ${super.renderBody()}
109
+ `;
110
+ }
111
+ async _sendPatch(edits) {
112
+ const data = await super._sendPatch(edits);
113
+ const createUploadUrl = data._links['fx:create_upload_url'].href;
114
+ const root = this.renderRoot;
115
+ const control = root.querySelector('[infer="upload"]');
116
+ const upload = control === null || control === void 0 ? void 0 : control.uploadElement;
117
+ if (upload && upload.files.length === 1) {
118
+ const file = upload.files[0];
119
+ const url = await this._fetch(createUploadUrl, {
120
+ method: 'POST',
121
+ body: JSON.stringify({ type: file.type }),
122
+ });
123
+ upload.files[0].uploadTarget = url.upload_url;
124
+ upload.uploadFiles();
125
+ }
126
+ return data;
127
+ }
128
+ async _sendPost(edits) {
129
+ const data = await super._sendPost(edits);
130
+ const createUploadUrl = data._links['fx:create_upload_url'].href;
131
+ const root = this.renderRoot;
132
+ const control = root.querySelector('[infer="upload"]');
133
+ const upload = control === null || control === void 0 ? void 0 : control.uploadElement;
134
+ if (upload && upload.files.length === 1) {
135
+ const file = upload.files[0];
136
+ const url = await this._fetch(createUploadUrl, {
137
+ method: 'POST',
138
+ body: JSON.stringify({ type: file.type }),
139
+ });
140
+ upload.files[0].uploadTarget = url.upload_url;
141
+ upload.uploadFiles();
142
+ }
143
+ return data;
144
+ }
145
+ get __downloadableItemCategoryLoader() {
146
+ return this.renderRoot.querySelector(`#${this.__downloadableItemCategoryLoaderId}`);
147
+ }
148
+ }
149
+ //# sourceMappingURL=DownloadableForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DownloadableForm.js","sourceRoot":"","sources":["../../../../src/elements/public/DownloadableForm/DownloadableForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalDownloadableFormUploadControl } from './internal/InternalDownloadableFormUploadControl';\nimport type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonElement } from '../NucleonElement';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-element';\n\nconst NS = 'downloadable-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\n/**\n * Basic form for managing `fx:downloadable` resources.\n * This element requires an augmented version of hAPI currently limited\n * only to the new Foxy Admin.\n *\n * @slot item-category-uri:before\n * @slot item-category-uri:after\n *\n * @slot name:before\n * @slot name:after\n *\n * @slot code:before\n * @slot code:after\n *\n * @slot price:before\n * @slot price:after\n *\n * @slot upload:before\n * @slot upload:after\n *\n * @slot timestamps:before\n * @slot timestamps:after\n *\n * @slot create:before\n * @slot create:after\n *\n * @slot delete:before\n * @slot delete:after\n *\n * @element foxy-downloadable-form\n * @since 1.22.0\n */\nexport class DownloadableForm extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n downloadableItemCategories: { attribute: 'downloadable-item-categories' },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ item_category_uri: v }) => !!v || 'item-category-uri:v8n_required',\n ({ file_name: v }) => !!v || 'upload:v8n_required',\n ({ price: v }) => typeof v === 'number' || 'price:v8n_required',\n ({ price: v }) => !v || v >= 0 || 'price:v8n_negative',\n ({ name: v }) => !!v || 'name:v8n_required',\n ({ name: v }) => !v || v.length <= 100 || 'name:v8n_too_long',\n ({ code: v }) => !!v || 'code:v8n_required',\n ({ code: v }) => !v || v.length <= 50 || 'code:v8n_too_long',\n ];\n }\n\n /** URL of the `fx:downloadable_item_categories` collection for the store. */\n downloadableItemCategories: string | null = null;\n\n private readonly __downloadableItemCategoryLoaderId = 'downloadableItemCategoryLoader';\n\n get disabledSelector(): BooleanSelector {\n const alwaysDisabled: string[] = [];\n const loader = this.__downloadableItemCategoryLoader;\n if (!loader?.in('idle')) alwaysDisabled.push('item-category-uri');\n return new BooleanSelector(`${alwaysDisabled.join(' ')}${super.disabledSelector}`);\n }\n\n renderBody(): TemplateResult {\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.form.item_category_uri || void 0)}\n id=${this.__downloadableItemCategoryLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-internal-async-combo-box-control\n item-label-path=\"name\"\n item-value-path=\"_links.self.href\"\n item-id-path=\"_links.self.href\"\n infer=\"item-category-uri\"\n first=${ifDefined(this.downloadableItemCategories ?? void 0)}\n .selectedItem=${this.__downloadableItemCategoryLoader?.data}\n .setValue=${(newValue: string) => {\n this.edit({ item_category_uri: newValue });\n const newID = parseInt(newValue.split('/').pop() ?? '');\n if (!isNaN(newID)) this.edit({ item_category_id: newID });\n }}\n >\n </foxy-internal-async-combo-box-control>\n\n <foxy-internal-text-control infer=\"name\"></foxy-internal-text-control>\n <foxy-internal-text-control infer=\"code\"></foxy-internal-text-control>\n <foxy-internal-number-control infer=\"price\" min=\"0\"></foxy-internal-number-control>\n\n <foxy-internal-downloadable-form-upload-control infer=\"upload\">\n </foxy-internal-downloadable-form-upload-control>\n\n ${super.renderBody()}\n `;\n }\n\n protected async _sendPatch(edits: Partial<Data>): Promise<Data> {\n type UploadUrl = { upload_url: string };\n\n const data = await super._sendPatch(edits);\n const createUploadUrl = data._links['fx:create_upload_url'].href;\n const root = this.renderRoot;\n const control = root.querySelector<InternalDownloadableFormUploadControl>('[infer=\"upload\"]');\n const upload = control?.uploadElement;\n\n if (upload && upload.files.length === 1) {\n const file = upload.files[0];\n const url = await this._fetch<UploadUrl>(createUploadUrl, {\n method: 'POST',\n body: JSON.stringify({ type: file.type }),\n });\n\n upload.files[0].uploadTarget = url.upload_url;\n upload.uploadFiles();\n }\n\n return data;\n }\n\n protected async _sendPost(edits: Partial<Data>): Promise<Data> {\n type UploadUrl = { upload_url: string };\n\n const data = await super._sendPost(edits);\n const createUploadUrl = data._links['fx:create_upload_url'].href;\n const root = this.renderRoot;\n const control = root.querySelector<InternalDownloadableFormUploadControl>('[infer=\"upload\"]');\n const upload = control?.uploadElement;\n\n if (upload && upload.files.length === 1) {\n const file = upload.files[0];\n const url = await this._fetch<UploadUrl>(createUploadUrl, {\n method: 'POST',\n body: JSON.stringify({ type: file.type }),\n });\n\n upload.files[0].uploadTarget = url.upload_url;\n upload.uploadFiles();\n }\n\n return data;\n }\n\n private get __downloadableItemCategoryLoader() {\n type Loader = NucleonElement<Resource<Rels.ItemCategory>>;\n return this.renderRoot.querySelector<Loader>(`#${this.__downloadableItemCategoryLoaderId}`);\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import './internal/InternalDownloadableFormUploadControl/index';
2
+ import '../../internal/InternalAsyncComboBoxControl/index';
3
+ import '../../internal/InternalNumberControl/index';
4
+ import '../../internal/InternalTextControl/index';
5
+ import '../../internal/InternalForm/index';
6
+ import '../NucleonElement/index';
7
+ import { DownloadableForm } from './DownloadableForm';
8
+ export { DownloadableForm };
@@ -0,0 +1,10 @@
1
+ import "./internal/InternalDownloadableFormUploadControl/index.js";
2
+ import "../../internal/InternalAsyncComboBoxControl/index.js";
3
+ import "../../internal/InternalNumberControl/index.js";
4
+ import "../../internal/InternalTextControl/index.js";
5
+ import "../../internal/InternalForm/index.js";
6
+ import "../NucleonElement/index.js";
7
+ import { DownloadableForm } from "./DownloadableForm.js";
8
+ customElements.define('foxy-downloadable-form', DownloadableForm);
9
+ export { DownloadableForm };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/DownloadableForm/index.ts"],"names":[],"mappings":"AAAA,mEAAgE;AAChE,8DAA2D;AAC3D,uDAAoD;AACpD,qDAAkD;AAClD,8CAA2C;AAC3C,oCAAiC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,8BAA2B;AAEtD,cAAc,CAAC,MAAM,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import './internal/InternalDownloadableFormUploadControl/index';\nimport '../../internal/InternalAsyncComboBoxControl/index';\nimport '../../internal/InternalNumberControl/index';\nimport '../../internal/InternalTextControl/index';\nimport '../../internal/InternalForm/index';\nimport '../NucleonElement/index';\n\nimport { DownloadableForm } from './DownloadableForm';\n\ncustomElements.define('foxy-downloadable-form', DownloadableForm);\n\nexport { DownloadableForm };\n"]}
@@ -0,0 +1,11 @@
1
+ import type { UploadElement } from '@vaadin/vaadin-upload';
2
+ import { TemplateResult } from 'lit-html';
3
+ import { InternalControl } from '../../../../internal/InternalControl/InternalControl';
4
+ export declare class InternalDownloadableFormUploadControl extends InternalControl {
5
+ get uploadElement(): UploadElement | null;
6
+ renderControl(): TemplateResult;
7
+ updated(changes: Map<keyof this, unknown>): void;
8
+ private get __uploadI18n();
9
+ private __handleUploadRequest;
10
+ private __handleFilesChanged;
11
+ }
@@ -0,0 +1,124 @@
1
+ import { html } from 'lit-html';
2
+ import { InternalControl } from "../../../../internal/InternalControl/InternalControl.js";
3
+ import { ifDefined } from 'lit-html/directives/if-defined';
4
+ import { classMap } from "../../../../../utils/class-map.js";
5
+ export class InternalDownloadableFormUploadControl extends InternalControl {
6
+ get uploadElement() {
7
+ return this.renderRoot.querySelector('vaadin-upload');
8
+ }
9
+ renderControl() {
10
+ return html `
11
+ <section
12
+ class=${classMap({
13
+ 'grid gap-xs group leading-xs transition-colors': true,
14
+ 'hover-text-body': !this.disabled && !this.readonly,
15
+ 'text-secondary': !this.disabled,
16
+ 'text-disabled': this.disabled,
17
+ })}
18
+ >
19
+ <foxy-i18n infer="" class="font-medium text-s" key="label"></foxy-i18n>
20
+
21
+ <vaadin-upload
22
+ max-file-size="524288000"
23
+ max-files=${ifDefined(this.disabled || this.readonly ? '0' : '2')}
24
+ style="padding: calc((0.625em + (var(--lumo-border-radius) / 4) - 1px) - var(--lumo-space-xs)) calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)"
25
+ class=${classMap({
26
+ 'rounded-t-l rounded-b-l border transition-colors': true,
27
+ 'border-dashed border-contrast-30': this.readonly,
28
+ 'border-solid border-contrast-10': !this.readonly,
29
+ 'group-hover-border-contrast-20': !this.disabled && !this.readonly,
30
+ 'foxy-downloadable-form-upload': true,
31
+ })}
32
+ method="PUT"
33
+ no-auto
34
+ ?disabled=${this.disabled}
35
+ ?readonly=${this.readonly}
36
+ .i18n=${this.__uploadI18n}
37
+ @files-changed=${this.__handleFilesChanged}
38
+ @upload-request=${this.__handleUploadRequest}
39
+ >
40
+ </vaadin-upload>
41
+
42
+ <foxy-i18n infer="" class="text-xs" key="helper_text"></foxy-i18n>
43
+ </section>
44
+ `;
45
+ }
46
+ updated(changes) {
47
+ super.updated(changes);
48
+ const nucleon = this.nucleon;
49
+ const upload = this.renderRoot.querySelector('vaadin-upload');
50
+ if (upload && nucleon) {
51
+ if (nucleon.in({ idle: { snapshot: 'clean' } }) && upload.files.length === 0) {
52
+ upload.files = [
53
+ // @ts-expect-error type doesn't match but it's ok because vaadin docs suggest this as a solution
54
+ {
55
+ complete: true,
56
+ progress: 100,
57
+ status: this.t('status_complete'),
58
+ name: nucleon.data.file_name,
59
+ },
60
+ ];
61
+ }
62
+ else if (nucleon.in({ idle: { template: 'clean' } })) {
63
+ upload.files = [];
64
+ }
65
+ }
66
+ }
67
+ get __uploadI18n() {
68
+ return {
69
+ dropFiles: {
70
+ one: this.t('drop_label'),
71
+ many: this.t('drop_label'),
72
+ },
73
+ addFiles: {
74
+ one: this.t('select_label'),
75
+ many: this.t('select_label'),
76
+ },
77
+ cancel: this.t('cancel'),
78
+ error: {
79
+ tooManyFiles: this.t('error_too_many_files'),
80
+ fileIsTooBig: this.t('error_too_big'),
81
+ incorrectFileType: '',
82
+ },
83
+ uploading: {
84
+ status: {
85
+ connecting: this.t('status_connecting'),
86
+ stalled: this.t('status_stalled'),
87
+ processing: this.t('status_processing'),
88
+ held: this.t('status_held'),
89
+ },
90
+ remainingTime: {
91
+ prefix: this.t('remaining_prefix'),
92
+ unknown: this.t('remaining_unknown'),
93
+ },
94
+ error: {
95
+ serverUnavailable: this.t('error_server_unavailable'),
96
+ unexpectedServerError: this.t('error_unexpected_server_error'),
97
+ forbidden: this.t('error_forbidden'),
98
+ },
99
+ },
100
+ units: {
101
+ size: ['B', 'KB', 'MB', 'GB'],
102
+ sizeBase: 1024,
103
+ },
104
+ };
105
+ }
106
+ __handleUploadRequest(evt) {
107
+ evt.preventDefault();
108
+ evt.detail.xhr.send(evt.detail.file);
109
+ }
110
+ __handleFilesChanged(evt) {
111
+ var _a, _b, _c;
112
+ const upload = evt.currentTarget;
113
+ const nucleon = this.nucleon;
114
+ const files = upload.files;
115
+ if (files.length > 1)
116
+ upload.files = [upload.files[0]];
117
+ if (((_a = files[0]) === null || _a === void 0 ? void 0 : _a.complete) && !files[0].status)
118
+ files[0].status = this.t('status_complete');
119
+ const newName = (_c = (_b = upload.files[0]) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '';
120
+ if (newName !== (nucleon === null || nucleon === void 0 ? void 0 : nucleon.form.file_name))
121
+ nucleon === null || nucleon === void 0 ? void 0 : nucleon.edit({ file_name: newName });
122
+ }
123
+ }
124
+ //# sourceMappingURL=InternalDownloadableFormUploadControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InternalDownloadableFormUploadControl.js","sourceRoot":"","sources":["../../../../../../src/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/InternalDownloadableFormUploadControl.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DownloadableForm } from '../../DownloadableForm';\nimport type { UploadElement } from '@vaadin/vaadin-upload';\n\nimport { html, TemplateResult } from 'lit-html';\nimport { InternalControl } from '../../../../internal/InternalControl/InternalControl';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { classMap } from '../../../../../utils/class-map';\n\nexport class InternalDownloadableFormUploadControl extends InternalControl {\n get uploadElement(): UploadElement | null {\n return this.renderRoot.querySelector<UploadElement>('vaadin-upload');\n }\n\n renderControl(): TemplateResult {\n return html`\n <section\n class=${classMap({\n 'grid gap-xs group leading-xs transition-colors': true,\n 'hover-text-body': !this.disabled && !this.readonly,\n 'text-secondary': !this.disabled,\n 'text-disabled': this.disabled,\n })}\n >\n <foxy-i18n infer=\"\" class=\"font-medium text-s\" key=\"label\"></foxy-i18n>\n\n <vaadin-upload\n max-file-size=\"524288000\"\n max-files=${ifDefined(this.disabled || this.readonly ? '0' : '2')}\n style=\"padding: calc((0.625em + (var(--lumo-border-radius) / 4) - 1px) - var(--lumo-space-xs)) calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n class=${classMap({\n 'rounded-t-l rounded-b-l border transition-colors': true,\n 'border-dashed border-contrast-30': this.readonly,\n 'border-solid border-contrast-10': !this.readonly,\n 'group-hover-border-contrast-20': !this.disabled && !this.readonly,\n 'foxy-downloadable-form-upload': true,\n })}\n method=\"PUT\"\n no-auto\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n .i18n=${this.__uploadI18n}\n @files-changed=${this.__handleFilesChanged}\n @upload-request=${this.__handleUploadRequest}\n >\n </vaadin-upload>\n\n <foxy-i18n infer=\"\" class=\"text-xs\" key=\"helper_text\"></foxy-i18n>\n </section>\n `;\n }\n\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n\n const nucleon = this.nucleon as DownloadableForm | null;\n const upload = this.renderRoot.querySelector<UploadElement>('vaadin-upload');\n\n if (upload && nucleon) {\n if (nucleon.in({ idle: { snapshot: 'clean' } }) && upload.files.length === 0) {\n upload.files = [\n // @ts-expect-error type doesn't match but it's ok because vaadin docs suggest this as a solution\n {\n complete: true,\n progress: 100,\n status: this.t('status_complete'),\n name: nucleon.data.file_name,\n },\n ];\n } else if (nucleon.in({ idle: { template: 'clean' } })) {\n upload.files = [];\n }\n }\n }\n\n private get __uploadI18n() {\n return {\n dropFiles: {\n one: this.t('drop_label'),\n many: this.t('drop_label'),\n },\n addFiles: {\n one: this.t('select_label'),\n many: this.t('select_label'),\n },\n cancel: this.t('cancel'),\n error: {\n tooManyFiles: this.t('error_too_many_files'),\n fileIsTooBig: this.t('error_too_big'),\n incorrectFileType: '',\n },\n uploading: {\n status: {\n connecting: this.t('status_connecting'),\n stalled: this.t('status_stalled'),\n processing: this.t('status_processing'),\n held: this.t('status_held'),\n },\n remainingTime: {\n prefix: this.t('remaining_prefix'),\n unknown: this.t('remaining_unknown'),\n },\n error: {\n serverUnavailable: this.t('error_server_unavailable'),\n unexpectedServerError: this.t('error_unexpected_server_error'),\n forbidden: this.t('error_forbidden'),\n },\n },\n units: {\n size: ['B', 'KB', 'MB', 'GB'],\n sizeBase: 1024,\n },\n };\n }\n\n private __handleUploadRequest(evt: CustomEvent<{ xhr: XMLHttpRequest; file: File }>) {\n evt.preventDefault();\n evt.detail.xhr.send(evt.detail.file);\n }\n\n private __handleFilesChanged(evt: CustomEvent) {\n const upload = evt.currentTarget as UploadElement;\n const nucleon = this.nucleon as DownloadableForm | null;\n\n const files = upload.files;\n if (files.length > 1) upload.files = [upload.files[0]];\n if (files[0]?.complete && !files[0].status) files[0].status = this.t('status_complete');\n\n const newName = upload.files[0]?.name ?? '';\n if (newName !== nucleon?.form.file_name) nucleon?.edit({ file_name: newName });\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import '../../../../internal/InternalControl/index';
2
+ import '@vaadin/vaadin-upload';
3
+ import '../../../I18n/index';
4
+ import './style';
5
+ import { InternalDownloadableFormUploadControl } from './InternalDownloadableFormUploadControl';
6
+ export { InternalDownloadableFormUploadControl };
@@ -0,0 +1,8 @@
1
+ import "../../../../internal/InternalControl/index.js";
2
+ import '@vaadin/vaadin-upload';
3
+ import "../../../I18n/index.js";
4
+ import "./style.js";
5
+ import { InternalDownloadableFormUploadControl } from "./InternalDownloadableFormUploadControl.js";
6
+ customElements.define('foxy-internal-downloadable-form-upload-control', InternalDownloadableFormUploadControl);
7
+ export { InternalDownloadableFormUploadControl };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/index.ts"],"names":[],"mappings":"AAAA,uDAAoD;AACpD,OAAO,uBAAuB,CAAC;AAC/B,gCAA6B;AAC7B,oBAAiB;AAEjB,OAAO,EAAE,qCAAqC,EAAE,mDAAgD;AAEhG,cAAc,CAAC,MAAM,CACnB,gDAAgD,EAChD,qCAAqC,CACtC,CAAC;AAEF,OAAO,EAAE,qCAAqC,EAAE,CAAC","sourcesContent":["import '../../../../internal/InternalControl/index';\nimport '@vaadin/vaadin-upload';\nimport '../../../I18n/index';\nimport './style';\n\nimport { InternalDownloadableFormUploadControl } from './InternalDownloadableFormUploadControl';\n\ncustomElements.define(\n 'foxy-internal-downloadable-form-upload-control',\n InternalDownloadableFormUploadControl\n);\n\nexport { InternalDownloadableFormUploadControl };\n"]}
@@ -0,0 +1,42 @@
1
+ import { registerStyles } from '@vaadin/vaadin-themable-mixin/register-styles';
2
+ import { css } from 'lit-element';
3
+ registerStyles('vaadin-upload', css `:host(.foxy-downloadable-form-upload) vaadin-upload-file{
4
+ padding:var(--lumo-space-xs) 0 0 0;
5
+ line-height:var(--lumo-line-height-xs);
6
+ }
7
+
8
+ :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(commands){
9
+ margin-right:-4px;
10
+ }
11
+
12
+ :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(progress){
13
+ margin-right:2px;
14
+ margin-left:0;
15
+ }
16
+
17
+ :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(start-button),
18
+ :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(clear-button),
19
+ :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(retry-button){
20
+ display:none;
21
+ }
22
+
23
+ :host(.foxy-downloadable-form-upload[disabled]) vaadin-upload-file::part(status){
24
+ color:var(--lumo-disabled-text-color);
25
+ }
26
+
27
+ :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(warning-icon),
28
+ :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(done-icon){
29
+ width:0;
30
+ margin:0;
31
+ opacity:0;
32
+ }
33
+
34
+ :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(info){
35
+ align-items:flex-start;
36
+ }
37
+
38
+ :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(name){
39
+ font-weight:500;
40
+ }
41
+ `);
42
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../../../../../src/elements/public/DownloadableForm/internal/InternalDownloadableFormUploadControl/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,cAAc,CACZ,eAAe,EACf,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCF,CACF,CAAC","sourcesContent":["import { registerStyles } from '@vaadin/vaadin-themable-mixin/register-styles';\nimport { css } from 'lit-element';\n\nregisterStyles(\n 'vaadin-upload',\n css`\n :host(.foxy-downloadable-form-upload) vaadin-upload-file {\n padding: var(--lumo-space-xs) 0 0 0;\n line-height: var(--lumo-line-height-xs);\n }\n\n :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(commands) {\n margin-right: -4px;\n }\n\n :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(progress) {\n margin-right: 2px;\n margin-left: 0;\n }\n\n :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(start-button),\n :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(clear-button),\n :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(retry-button) {\n display: none;\n }\n\n :host(.foxy-downloadable-form-upload[disabled]) vaadin-upload-file::part(status) {\n color: var(--lumo-disabled-text-color);\n }\n\n :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(warning-icon),\n :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(done-icon) {\n width: 0;\n margin: 0;\n opacity: 0;\n }\n\n :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(info) {\n align-items: flex-start;\n }\n\n :host(.foxy-downloadable-form-upload) vaadin-upload-file::part(name) {\n font-weight: 500;\n }\n `\n);\n"]}
@@ -0,0 +1,11 @@
1
+ import type { Resource } from '@foxy.io/sdk/core';
2
+ import type { Rels } from '@foxy.io/sdk/backend';
3
+ export declare type Downloadable = Rels.Downloadable & {
4
+ links: {
5
+ 'fx:create_upload_url': any;
6
+ };
7
+ props: {
8
+ item_category_id: number;
9
+ };
10
+ };
11
+ export declare type Data = Resource<Downloadable>;
@@ -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/DownloadableForm/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nexport type Downloadable = Rels.Downloadable & {\n links: { 'fx:create_upload_url': any };\n props: { item_category_id: number };\n};\nexport type Data = Resource<Downloadable>;\n"]}
@@ -13,6 +13,10 @@ import { FormRenderer } from './types';
13
13
  export declare class FormDialog extends Dialog {
14
14
  /** @readonly */
15
15
  static get properties(): PropertyDeclarations;
16
+ /** If true, FormDialog won't automatically close after the associated form deletes the resource. */
17
+ keepOpenOnDelete: boolean;
18
+ /** If true, FormDialog won't automatically close after the associated form creates a resource. */
19
+ keepOpenOnPost: boolean;
16
20
  /** Optional URI list of the related resources (passed to form). */
17
21
  related: string[];
18
22
  /** Optional URL of the collection this resource belongs to (passed to form). */
@@ -15,6 +15,10 @@ import { UpdateEvent } from "../NucleonElement/UpdateEvent.js";
15
15
  export class FormDialog extends Dialog {
16
16
  constructor() {
17
17
  super(...arguments);
18
+ /** If true, FormDialog won't automatically close after the associated form deletes the resource. */
19
+ this.keepOpenOnDelete = false;
20
+ /** If true, FormDialog won't automatically close after the associated form creates a resource. */
21
+ this.keepOpenOnPost = false;
18
22
  /** Optional URI list of the related resources (passed to form). */
19
23
  this.related = [];
20
24
  /** Optional URL of the collection this resource belongs to (passed to form). */
@@ -29,18 +33,23 @@ export class FormDialog extends Dialog {
29
33
  return;
30
34
  evt.stopImmediatePropagation();
31
35
  evt.preventDefault();
32
- evt.respondWith(new API(this).fetch(evt.request).then(response => {
33
- const wasDeleting = evt.request.url === this.href && evt.request.method === 'DELETE';
34
- const wasAdding = evt.request.url === this.parent && evt.request.method === 'POST';
35
- if (response.ok && (wasDeleting || wasAdding))
36
- this.open = false;
37
- return response;
38
- }));
36
+ evt.respondWith(new API(this).fetch(evt.request));
39
37
  };
40
38
  this.__handleUpdate = (evt) => {
39
+ var _a;
41
40
  if (!(evt instanceof UpdateEvent))
42
41
  return;
42
+ const result = (_a = evt.detail) === null || _a === void 0 ? void 0 : _a.result;
43
+ const Result = UpdateEvent.UpdateResult;
44
+ if (!this.keepOpenOnPost && result === Result.ResourceCreated)
45
+ this.open = false;
46
+ if (!this.keepOpenOnDelete && result === Result.ResourceDeleted)
47
+ this.open = false;
43
48
  const target = evt.currentTarget;
49
+ if (this.parent !== target.parent)
50
+ this.parent = target.parent;
51
+ if (this.href !== target.href)
52
+ this.href = target.href;
44
53
  this.closable = !target.in('busy');
45
54
  this.editable =
46
55
  target.in({ idle: { template: { clean: 'valid' } } }) ||
@@ -57,6 +66,8 @@ export class FormDialog extends Dialog {
57
66
  group: { type: String },
58
67
  parent: { type: String },
59
68
  related: { type: Array },
69
+ keepOpenOnPost: { type: Boolean, attribute: 'keep-open-on-post' },
70
+ keepOpenOnDelete: { type: Boolean, attribute: 'keep-open-on-delete' },
60
71
  };
61
72
  }
62
73
  /**