@foxy.io/elements 1.50.0-beta.3 → 1.51.0

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 (213) hide show
  1. package/dist/cdn/foxy-access-recovery-form.js +1 -1
  2. package/dist/cdn/foxy-address-card.js +1 -1
  3. package/dist/cdn/foxy-address-form.js +1 -1
  4. package/dist/cdn/foxy-admin-subscription-card.js +1 -1
  5. package/dist/cdn/foxy-admin-subscription-form.js +1 -1
  6. package/dist/cdn/foxy-admin-transaction-card.js +1 -1
  7. package/dist/cdn/foxy-api-browser.js +1 -1
  8. package/dist/cdn/foxy-applied-coupon-code-card.js +1 -1
  9. package/dist/cdn/foxy-applied-coupon-code-form.js +1 -1
  10. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  11. package/dist/cdn/foxy-attribute-card.js +1 -1
  12. package/dist/cdn/foxy-attribute-form.js +1 -1
  13. package/dist/cdn/foxy-billing-address-card.js +1 -1
  14. package/dist/cdn/foxy-cancellation-form.js +1 -1
  15. package/dist/cdn/foxy-cart-card.js +1 -1
  16. package/dist/cdn/foxy-cart-form.js +2 -2
  17. package/dist/cdn/foxy-client-card.js +1 -1
  18. package/dist/cdn/foxy-client-form.js +1 -1
  19. package/dist/cdn/foxy-collection-page.js +1 -1
  20. package/dist/cdn/foxy-collection-pages.js +1 -1
  21. package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
  22. package/dist/cdn/foxy-coupon-card.js +1 -1
  23. package/dist/cdn/foxy-coupon-code-card.js +1 -1
  24. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  25. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  26. package/dist/cdn/foxy-coupon-detail-card.js +1 -1
  27. package/dist/cdn/foxy-coupon-form.js +1 -1
  28. package/dist/cdn/foxy-custom-field-card.js +1 -1
  29. package/dist/cdn/foxy-custom-field-form.js +1 -1
  30. package/dist/cdn/foxy-customer-card.js +1 -1
  31. package/dist/cdn/foxy-customer-form.js +1 -1
  32. package/dist/cdn/foxy-customer-portal-settings-form.js +1 -1
  33. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  34. package/dist/cdn/foxy-customer-portal.js +1 -1
  35. package/dist/cdn/foxy-customer.js +1 -1
  36. package/dist/cdn/foxy-customers-table.js +1 -1
  37. package/dist/cdn/foxy-discount-builder.js +1 -1
  38. package/dist/cdn/foxy-discount-card.js +1 -1
  39. package/dist/cdn/foxy-discount-detail-card.js +1 -1
  40. package/dist/cdn/foxy-donation.js +1 -1
  41. package/dist/cdn/foxy-downloadable-card.js +1 -1
  42. package/dist/cdn/foxy-downloadable-form.js +1 -1
  43. package/dist/cdn/foxy-email-template-card.js +1 -1
  44. package/dist/cdn/foxy-email-template-form.js +1 -1
  45. package/dist/cdn/foxy-error-entry-card.js +1 -1
  46. package/dist/cdn/foxy-experimental-add-to-cart-builder.js +1 -1
  47. package/dist/cdn/foxy-filter-attribute-card.js +1 -1
  48. package/dist/cdn/foxy-filter-attribute-form.js +1 -1
  49. package/dist/cdn/foxy-form-dialog.js +1 -1
  50. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  51. package/dist/cdn/foxy-gift-card-card.js +1 -1
  52. package/dist/cdn/foxy-gift-card-code-card.js +1 -1
  53. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  54. package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
  55. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  56. package/dist/cdn/foxy-gift-card-form.js +1 -1
  57. package/dist/cdn/foxy-i18n-editor.js +1 -1
  58. package/dist/cdn/foxy-i18n.js +1 -1
  59. package/dist/cdn/foxy-integration-card.js +1 -1
  60. package/dist/cdn/foxy-integration-form.js +1 -1
  61. package/dist/cdn/foxy-item-card.js +1 -1
  62. package/dist/cdn/foxy-item-category-card.js +1 -1
  63. package/dist/cdn/foxy-item-category-form.js +1 -1
  64. package/dist/cdn/foxy-item-form.js +1 -1
  65. package/dist/cdn/foxy-item-option-card.js +1 -1
  66. package/dist/cdn/foxy-item-option-form.js +1 -1
  67. package/dist/cdn/foxy-items-form.js +1 -1
  68. package/dist/cdn/foxy-native-integration-card.js +1 -1
  69. package/dist/cdn/foxy-native-integration-form.js +1 -1
  70. package/dist/cdn/foxy-pagination.js +1 -1
  71. package/dist/cdn/foxy-passkey-card.js +1 -1
  72. package/dist/cdn/foxy-passkey-form.js +1 -1
  73. package/dist/cdn/foxy-payment-card-embed.js +1 -1
  74. package/dist/cdn/foxy-payment-card.js +1 -1
  75. package/dist/cdn/foxy-payment-method-card.js +1 -1
  76. package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
  77. package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
  78. package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
  79. package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
  80. package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
  81. package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
  82. package/dist/cdn/foxy-query-builder.js +1 -1
  83. package/dist/cdn/foxy-report-form.js +1 -195
  84. package/dist/cdn/foxy-reports-table.js +1 -1
  85. package/dist/cdn/foxy-shipment-card.js +1 -1
  86. package/dist/cdn/foxy-shipping-container-card.js +1 -1
  87. package/dist/cdn/foxy-shipping-drop-type-card.js +1 -1
  88. package/dist/cdn/foxy-shipping-method-card.js +1 -1
  89. package/dist/cdn/foxy-shipping-service-card.js +1 -1
  90. package/dist/cdn/foxy-sign-in-form.js +1 -1
  91. package/dist/cdn/foxy-spinner.js +1 -1
  92. package/dist/cdn/foxy-store-card.js +1 -1
  93. package/dist/cdn/foxy-store-form.js +1 -1
  94. package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
  95. package/dist/cdn/foxy-store-transaction-folder-card.js +1 -1
  96. package/dist/cdn/foxy-store-transaction-folder-form.js +1 -1
  97. package/dist/cdn/foxy-subscription-card.js +1 -1
  98. package/dist/cdn/foxy-subscription-form.js +1 -1
  99. package/dist/cdn/foxy-subscription-settings-form.js +1 -1
  100. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  101. package/dist/cdn/foxy-table.js +1 -1
  102. package/dist/cdn/foxy-tax-card.js +1 -1
  103. package/dist/cdn/foxy-tax-form.js +1 -1
  104. package/dist/cdn/foxy-template-config-form.js +1 -1
  105. package/dist/cdn/foxy-template-form.js +1 -1
  106. package/dist/cdn/foxy-template-set-card.js +1 -1
  107. package/dist/cdn/foxy-template-set-form.js +1 -1
  108. package/dist/cdn/foxy-transaction-card.js +1 -1
  109. package/dist/cdn/foxy-transaction.js +1 -1
  110. package/dist/cdn/foxy-transactions-table.js +1 -1
  111. package/dist/cdn/foxy-update-payment-method-form.js +1 -1
  112. package/dist/cdn/foxy-user-card.js +1 -1
  113. package/dist/cdn/foxy-user-form.js +1 -1
  114. package/dist/cdn/foxy-user-invitation-card.js +1 -1
  115. package/dist/cdn/foxy-user-invitation-form.js +1 -1
  116. package/dist/cdn/foxy-users-table.js +1 -1
  117. package/dist/cdn/foxy-webhook-card.js +1 -1
  118. package/dist/cdn/foxy-webhook-form.js +1 -1
  119. package/dist/cdn/foxy-webhook-log-card.js +1 -1
  120. package/dist/cdn/foxy-webhook-status-card.js +1 -1
  121. package/dist/cdn/{shared-910d49eb.js → shared-02fb8ce3.js} +1 -1
  122. package/dist/cdn/{shared-b0453b08.js → shared-03519cae.js} +1 -1
  123. package/dist/cdn/{shared-a9a8eb7c.js → shared-040485bb.js} +1 -1
  124. package/dist/cdn/{shared-de4ec7bb.js → shared-0682a41b.js} +1 -1
  125. package/dist/cdn/{shared-d74aac59.js → shared-09acffe6.js} +1 -1
  126. package/dist/cdn/{shared-f7965314.js → shared-211bd1dd.js} +1 -1
  127. package/dist/cdn/{shared-8dd6e5cc.js → shared-2463790e.js} +1 -1
  128. package/dist/cdn/{shared-4cc1fb20.js → shared-2a5c640b.js} +1 -1
  129. package/dist/cdn/{shared-1fa1abbd.js → shared-300bf21a.js} +1 -1
  130. package/dist/cdn/{shared-bb2b7d41.js → shared-35f59eae.js} +1 -1
  131. package/dist/cdn/{shared-e9d87207.js → shared-36010fae.js} +1 -1
  132. package/dist/cdn/{shared-490dadf8.js → shared-375d2c8b.js} +1 -1
  133. package/dist/cdn/{shared-7c5881c1.js → shared-3be57b19.js} +1 -1
  134. package/dist/cdn/{shared-462566b0.js → shared-3e37477f.js} +1 -1
  135. package/dist/cdn/{shared-31e75a4a.js → shared-40475d9c.js} +1 -1
  136. package/dist/cdn/{shared-2a84ee72.js → shared-45fd1dc1.js} +1 -1
  137. package/dist/cdn/{shared-aa258319.js → shared-462820a3.js} +1 -1
  138. package/dist/cdn/{shared-0ea24ca2.js → shared-4818631e.js} +1 -1
  139. package/dist/cdn/{shared-67aeac0f.js → shared-49c77c18.js} +1 -1
  140. package/dist/cdn/{shared-1da8110b.js → shared-4f162d81.js} +1 -1
  141. package/dist/cdn/{shared-097487d0.js → shared-52d5b281.js} +1 -1
  142. package/dist/cdn/{shared-328aa161.js → shared-54380337.js} +1 -1
  143. package/dist/cdn/{shared-ad470adf.js → shared-58fdefe5.js} +2 -2
  144. package/dist/cdn/{shared-f05c924a.js → shared-5ac5253b.js} +1 -1
  145. package/dist/cdn/{shared-021fbb51.js → shared-5b1ad45f.js} +2 -2
  146. package/dist/cdn/{shared-68c69a0f.js → shared-5ded9f39.js} +4 -4
  147. package/dist/cdn/shared-5e07ca45.js +1 -0
  148. package/dist/cdn/{shared-9a454e09.js → shared-650b8749.js} +1 -1
  149. package/dist/cdn/{shared-47ce4456.js → shared-6545a38f.js} +4 -4
  150. package/dist/cdn/{shared-fc6e64a4.js → shared-70e64227.js} +2 -2
  151. package/dist/cdn/{shared-add0286c.js → shared-75c1ce85.js} +1 -1
  152. package/dist/cdn/{shared-334b7e24.js → shared-7c099d54.js} +1 -1
  153. package/dist/cdn/{shared-084e1772.js → shared-822537f7.js} +1 -1
  154. package/dist/cdn/{shared-0a7a4660.js → shared-86f4e737.js} +1 -1
  155. package/dist/cdn/{shared-986bcd05.js → shared-891e2675.js} +1 -1
  156. package/dist/cdn/{shared-8f61408a.js → shared-8dd5edce.js} +1 -1
  157. package/dist/cdn/{shared-3c0e3876.js → shared-91fbd884.js} +4 -4
  158. package/dist/cdn/{shared-8bf38c47.js → shared-9c308061.js} +1 -1
  159. package/dist/cdn/{shared-9a291941.js → shared-9cf7a458.js} +1 -1
  160. package/dist/cdn/{shared-a18827a4.js → shared-9d0432c3.js} +1 -1
  161. package/dist/cdn/{shared-83613f15.js → shared-9dc6233c.js} +1 -1
  162. package/dist/cdn/{shared-ba43928a.js → shared-9ee4873a.js} +1 -1
  163. package/dist/cdn/{shared-be071e3d.js → shared-a1d07d0c.js} +1 -1
  164. package/dist/cdn/{shared-d01853e2.js → shared-a7ea2b28.js} +1 -1
  165. package/dist/cdn/{shared-4dc0bd88.js → shared-acfe37e7.js} +1 -1
  166. package/dist/cdn/shared-af6ccc54.js +1 -0
  167. package/dist/cdn/{shared-7e1a3361.js → shared-b142e823.js} +1 -1
  168. package/dist/cdn/{shared-18e301f2.js → shared-b7f25c69.js} +1 -1
  169. package/dist/cdn/{shared-1492fa1c.js → shared-bb5a2cdf.js} +1 -1
  170. package/dist/cdn/{shared-b0db52f7.js → shared-bc110f4a.js} +1 -1
  171. package/dist/cdn/shared-beabe645.js +1 -0
  172. package/dist/cdn/shared-bf03e2e9.js +1 -0
  173. package/dist/cdn/{shared-1301af85.js → shared-c9d67ca3.js} +1 -1
  174. package/dist/cdn/{shared-56a16e03.js → shared-ceeffa02.js} +1 -1
  175. package/dist/cdn/{shared-ddc1c32f.js → shared-d0af0d8d.js} +1 -1
  176. package/dist/cdn/{shared-f9bb0924.js → shared-d3205195.js} +1 -1
  177. package/dist/cdn/{shared-d48e260f.js → shared-d53f94a0.js} +1 -1
  178. package/dist/cdn/{shared-ee752063.js → shared-d80549b6.js} +1 -1
  179. package/dist/cdn/{shared-3c53446d.js → shared-d91ec395.js} +1 -1
  180. package/dist/cdn/{shared-591ee1bf.js → shared-dae65afe.js} +1 -1
  181. package/dist/cdn/{shared-7a5d645f.js → shared-e54c8946.js} +1 -1
  182. package/dist/cdn/shared-e650caf3.js +1 -0
  183. package/dist/cdn/{shared-bc8a1435.js → shared-e8571c37.js} +1 -1
  184. package/dist/cdn/{shared-43fb8242.js → shared-ee677138.js} +1 -1
  185. package/dist/cdn/{shared-6880e1f6.js → shared-f4738502.js} +1 -1
  186. package/dist/cdn/{shared-5fbbaea2.js → shared-fe73af3a.js} +1 -1
  187. package/dist/cdn/translations/report-form/en.json +83 -33
  188. package/dist/cdn/translations/reports-table/en.json +1 -0
  189. package/dist/elements/internal/InternalNativeDateControl/InternalNativeDateControl.d.ts +18 -0
  190. package/dist/elements/internal/InternalNativeDateControl/InternalNativeDateControl.js +109 -0
  191. package/dist/elements/internal/InternalNativeDateControl/InternalNativeDateControl.js.map +1 -0
  192. package/dist/elements/internal/InternalNativeDateControl/index.d.ts +3 -0
  193. package/dist/elements/internal/InternalNativeDateControl/index.js +5 -0
  194. package/dist/elements/internal/InternalNativeDateControl/index.js.map +1 -0
  195. package/dist/elements/public/ReportForm/ReportForm.d.ts +20 -18
  196. package/dist/elements/public/ReportForm/ReportForm.js +126 -339
  197. package/dist/elements/public/ReportForm/ReportForm.js.map +1 -1
  198. package/dist/elements/public/ReportForm/index.d.ts +5 -9
  199. package/dist/elements/public/ReportForm/index.js +5 -9
  200. package/dist/elements/public/ReportForm/index.js.map +1 -1
  201. package/dist/elements/public/ReportForm/utils.d.ts +1 -0
  202. package/dist/elements/public/ReportForm/utils.js +4 -0
  203. package/dist/elements/public/ReportForm/utils.js.map +1 -1
  204. package/dist/mixins/themeable.js +0 -8
  205. package/dist/mixins/themeable.js.map +1 -1
  206. package/dist/utils/safe-date.js +7 -1
  207. package/dist/utils/safe-date.js.map +1 -1
  208. package/package.json +1 -1
  209. package/dist/cdn/shared-04277241.js +0 -1
  210. package/dist/cdn/shared-200aa12d.js +0 -1
  211. package/dist/cdn/shared-26b55da2.js +0 -1
  212. package/dist/cdn/shared-55fa26c2.js +0 -1
  213. package/dist/cdn/shared-e6c743bd.js +0 -1
@@ -1,18 +1,9 @@
1
- import { Choice, Group, Metadata } from "../../private/index.js";
2
- import { html } from 'lit-element';
3
- import { ScopedElementsMixin } from '@open-wc/scoped-elements';
4
- import { getCurrentMonth, getCurrentQuarter, getCurrentYear, getLast30Days, getLast365Days, getPreviousMonth, getPreviousQuarter, getPreviousYear, toAPIDateTime, toDatePickerValue, toDateTimePickerValue, } from "./utils.js";
5
- import { ChoiceChangeEvent } from "../../private/Choice/ChoiceChangeEvent.js";
6
- import { ConfigurableMixin } from "../../../mixins/configurable.js";
7
- import { NucleonElement } from "../NucleonElement/NucleonElement.js";
8
- import { ResponsiveMixin } from "../../../mixins/responsive.js";
9
- import { ThemeableMixin } from "../../../mixins/themeable.js";
1
+ import { getCurrentMonth, getCurrentQuarter, getCurrentYear, getLast30Days, getLast365Days, getPreviousMonth, getPreviousQuarter, getPreviousYear, toAPIDateTime, toDatePickerValue, toNativeDateTimePickerValue, } from "./utils.js";
10
2
  import { TranslatableMixin } from "../../../mixins/translatable.js";
11
- import { classMap } from "../../../utils/class-map.js";
12
- import { ifDefined } from 'lit-html/directives/if-defined';
13
- import { live } from 'lit-html/directives/live';
14
- import { render } from 'lit-html';
15
- const Base = ScopedElementsMixin(ResponsiveMixin(ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, 'report-form')))));
3
+ import { BooleanSelector } from '@foxy.io/sdk/core';
4
+ import { InternalForm } from "../../internal/InternalForm/InternalForm.js";
5
+ import { html } from 'lit-element';
6
+ const Base = TranslatableMixin(InternalForm, 'report-form');
16
7
  /**
17
8
  * Form element for creating or editing reports (`fx:report`).
18
9
  *
@@ -23,21 +14,73 @@ export class ReportForm extends Base {
23
14
  constructor() {
24
15
  super(...arguments);
25
16
  this.__showRangeTime = false;
26
- }
27
- static get scopedElements() {
28
- return {
29
- 'vaadin-date-time-picker': customElements.get('vaadin-date-time-picker'),
30
- 'vaadin-date-picker': customElements.get('vaadin-date-picker'),
31
- 'vaadin-checkbox': customElements.get('vaadin-checkbox'),
32
- 'vaadin-select': customElements.get('vaadin-select'),
33
- 'vaadin-button': customElements.get('vaadin-button'),
34
- 'foxy-internal-confirm-dialog': customElements.get('foxy-internal-confirm-dialog'),
35
- 'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),
36
- 'foxy-spinner': customElements.get('foxy-spinner'),
37
- 'foxy-i18n': customElements.get('foxy-i18n'),
38
- 'x-metadata': Metadata,
39
- 'x-choice': Choice,
40
- 'x-group': Group,
17
+ this.__rawPresetOptions = [
18
+ { value: '0', label: 'option_previous_quarter', ...getPreviousQuarter() },
19
+ { value: '1', label: 'option_previous_month', ...getPreviousMonth() },
20
+ { value: '2', label: 'option_previous_year', ...getPreviousYear() },
21
+ { value: '3', label: 'option_this_quarter', ...getCurrentQuarter() },
22
+ { value: '4', label: 'option_this_month', ...getCurrentMonth() },
23
+ { value: '5', label: 'option_this_year', ...getCurrentYear() },
24
+ { value: '6', label: 'option_last_365_days', ...getLast365Days() },
25
+ { value: '7', label: 'option_last_30_days', ...getLast30Days() },
26
+ ];
27
+ this.__presetOptions = JSON.stringify([
28
+ ...this.__rawPresetOptions,
29
+ { value: 'custom', label: 'option_custom' },
30
+ ]);
31
+ this.__nameOptions = JSON.stringify([
32
+ { value: 'complete', label: 'option_complete' },
33
+ { value: 'customers', label: 'option_customers' },
34
+ { value: 'customers_ltv', label: 'option_customers_ltv' },
35
+ { value: 'transactions', label: 'option_transactions' },
36
+ ]);
37
+ this.__datetimePreciseGetValue = () => {
38
+ return this.__showRangeTime;
39
+ };
40
+ this.__datetimePreciseSetValue = (value) => {
41
+ this.__showRangeTime = value;
42
+ };
43
+ this.__datetimeStartGetValue = () => {
44
+ const value = this.form.datetime_start;
45
+ return value
46
+ ? this.__showRangeTime || this.data
47
+ ? toNativeDateTimePickerValue(value)
48
+ : toDatePickerValue(value)
49
+ : '';
50
+ };
51
+ this.__datetimeStartSetValue = (value) => {
52
+ var _a;
53
+ const time = this.__showRangeTime ? `${(_a = value.split('T')[1]) !== null && _a !== void 0 ? _a : '00:00'}:00` : '00:00:00';
54
+ this.edit({ datetime_start: `${value.split('T')[0]}T${time}` });
55
+ };
56
+ this.__datetimeEndGetValue = () => {
57
+ const value = this.form.datetime_end;
58
+ return value
59
+ ? this.__showRangeTime || this.data
60
+ ? toNativeDateTimePickerValue(value)
61
+ : toDatePickerValue(value)
62
+ : '';
63
+ };
64
+ this.__datetimeEndSetValue = (value) => {
65
+ var _a;
66
+ const time = this.__showRangeTime ? `${(_a = value.split('T')[1]) !== null && _a !== void 0 ? _a : '23:59'}:59` : '23:59:59';
67
+ this.edit({ datetime_end: `${value.split('T')[0]}T${time}` });
68
+ };
69
+ this.__presetGetValue = () => {
70
+ var _a, _b;
71
+ return ((_b = (_a = this.__rawPresetOptions.find(option => {
72
+ const { datetime_end: end, datetime_start: start } = this.form;
73
+ return (start && end && toAPIDateTime(option.start) === start && toAPIDateTime(option.end) === end);
74
+ })) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 'custom');
75
+ };
76
+ this.__presetSetValue = (value) => {
77
+ const option = this.__rawPresetOptions.find(option => option.value === value);
78
+ if (option) {
79
+ this.edit({
80
+ datetime_start: toAPIDateTime(option.start),
81
+ datetime_end: toAPIDateTime(option.end),
82
+ });
83
+ }
41
84
  };
42
85
  }
43
86
  static get properties() {
@@ -48,330 +91,74 @@ export class ReportForm extends Base {
48
91
  }
49
92
  static get v8n() {
50
93
  return [
51
- ({ name: v }) => !!v || 'name_required',
52
- ({ datetime_start: v }) => !!v || 'datetime_start_required',
53
- ({ datetime_end: v }) => !!v || 'datetime_end_required',
94
+ ({ datetime_start: v }) => !!v || 'datetime-start:v8n_required',
95
+ ({ datetime_end: v }) => !!v || 'datetime-end:v8n_required',
96
+ ({ name: v }) => !!v || 'name:v8n_required',
54
97
  ];
55
98
  }
56
- render() {
57
- var _a, _b;
58
- const hidden = this.hiddenSelector;
59
- return html `
60
- <div
61
- data-testid="wrapper"
62
- aria-busy=${this.in('busy')}
63
- aria-live="polite"
64
- class="space-y-l relative"
65
- >
66
- <div class="space-y-m">
67
- ${hidden.matches('name', true) ? '' : this.__renderName()}
68
- ${hidden.matches('range', true) ? '' : this.__renderRange()}
69
- ${hidden.matches('timestamps', true) || !this.data ? '' : this.__renderTimestamps()}
70
- ${hidden.matches('create', true) || this.data ? '' : this.__renderCreate()}
71
- ${hidden.matches('delete', true) || !this.data ? '' : this.__renderDelete()}
72
- </div>
73
-
74
- <div
75
- data-testid="spinner"
76
- class=${classMap({
77
- 'transition duration-500 ease-in-out absolute inset-0 flex': true,
78
- 'opacity-0 pointer-events-none': this.in('idle'),
79
- })}
80
- >
81
- <foxy-spinner
82
- layout="vertical"
83
- class="m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l"
84
- state=${this.in('fail') ? 'error' : this.in('busy') ? 'busy' : 'empty'}
85
- lang=${this.lang}
86
- ns="${this.ns} ${(_b = (_a = customElements.get('foxy-spinner')) === null || _a === void 0 ? void 0 : _a.defaultNS) !== null && _b !== void 0 ? _b : ''}"
87
- >
88
- </foxy-spinner>
89
- </div>
90
- </div>
91
- `;
99
+ get readonlySelector() {
100
+ const alwaysMatch = [super.readonlySelector.toString()];
101
+ if (this.data) {
102
+ alwaysMatch.unshift('name', 'preset', 'datetime-precise', 'datetime-start', 'datetime-end');
103
+ }
104
+ return new BooleanSelector(alwaysMatch.join(' ').trim());
92
105
  }
93
- __renderName() {
94
- const scope = 'name';
95
- const items = ['complete', 'customers', 'customers_ltv'];
96
- const isDisabled = !this.in('idle') || this.disabledSelector.matches(scope);
97
- const isReadonly = this.readonlySelector.matches(scope);
98
- return html `
99
- <div data-testid=${scope}>
100
- ${this.renderTemplateOrSlot(`${scope}:before`)}
101
-
102
- <x-group frame>
103
- <foxy-i18n lang=${this.lang} slot="header" key="name" ns=${this.ns}></foxy-i18n>
104
-
105
- <x-choice
106
- data-testid="name-choice"
107
- .value=${this.form.name}
108
- .items=${items}
109
- ?readonly=${isReadonly}
110
- ?disabled=${isDisabled}
111
- @change=${(evt) => {
112
- if (evt instanceof ChoiceChangeEvent) {
113
- this.edit({ name: evt.detail });
114
- }
115
- }}
116
- >
117
- ${items.map(value => {
118
- return html `
119
- <div slot="${value}-label" class="py-s leading-s">
120
- <foxy-i18n class="block" lang=${this.lang} key="name_${value}" ns=${this.ns}>
121
- </foxy-i18n>
122
-
123
- <foxy-i18n
124
- class="block text-s opacity-70"
125
- lang=${this.lang}
126
- key="name_${value}_explainer"
127
- ns=${this.ns}
128
- >
129
- </foxy-i18n>
130
- </div>
131
- `;
132
- })}
133
- </x-choice>
134
- </x-group>
135
-
136
- ${this.renderTemplateOrSlot(`${scope}:after`)}
137
- </div>
138
- `;
106
+ get hiddenSelector() {
107
+ const alwaysMatch = [super.hiddenSelector.toString()];
108
+ if (this.data)
109
+ alwaysMatch.unshift('preset', 'datetime-precise');
110
+ return new BooleanSelector(alwaysMatch.join(' ').trim());
139
111
  }
140
- __renderRangePreset() {
112
+ renderBody() {
141
113
  var _a;
142
- const options = [
143
- [
144
- { value: '0', label: 'preset_previous_quarter', ...getPreviousQuarter() },
145
- { value: '1', label: 'preset_previous_month', ...getPreviousMonth() },
146
- { value: '2', label: 'preset_previous_year', ...getPreviousYear() },
147
- ],
148
- [
149
- { value: '3', label: 'preset_this_quarter', ...getCurrentQuarter() },
150
- { value: '4', label: 'preset_this_month', ...getCurrentMonth() },
151
- { value: '5', label: 'preset_this_year', ...getCurrentYear() },
152
- ],
153
- [
154
- { value: '6', label: 'preset_last_365_days', ...getLast365Days() },
155
- { value: '7', label: 'preset_last_30_days', ...getLast30Days() },
156
- ],
157
- ];
158
- const currentOption = options.flat(1).find(option => {
159
- const { datetime_end: end, datetime_start: start } = this.form;
160
- return (start && end && toAPIDateTime(option.start) === start && toAPIDateTime(option.end) === end);
161
- });
162
- const renderer = (root) => {
163
- const custom = html `<vaadin-item value="custom">${this.t('preset_custom')}</vaadin-item>`;
164
- const separator = html `<hr />`;
165
- const predefined = options.map(group => {
166
- const items = group.map(({ value, label }) => {
167
- return html `<vaadin-item value=${value}>${this.t(label)}</vaadin-item>`;
168
- });
169
- return html `${items}${separator}`;
170
- });
171
- if (!root.firstElementChild)
172
- root.appendChild(document.createElement('vaadin-list-box'));
173
- render(html `${predefined}${custom}`, root.firstElementChild);
174
- };
175
114
  return html `
176
- <div>
177
- <vaadin-select
178
- data-testid="range:preset"
179
- label=${this.t('preset')}
180
- class="w-full -mt-m -mb-xs"
181
- ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
182
- ?readonly=${this.readonlySelector.matches('range', true)}
183
- .value=${live((_a = currentOption === null || currentOption === void 0 ? void 0 : currentOption.value) !== null && _a !== void 0 ? _a : 'custom')}
184
- .renderer=${renderer}
185
- @change=${(evt) => {
186
- const select = evt.currentTarget;
187
- const option = options.flat(1).find(option => option.value === select.value);
188
- if (option) {
189
- this.edit({
190
- datetime_start: toAPIDateTime(option.start),
191
- datetime_end: toAPIDateTime(option.end),
192
- });
193
- }
194
- }}
115
+ ${this.renderHeader()}
116
+
117
+ <foxy-internal-summary-control infer="" label="" helper-text="">
118
+ <foxy-internal-select-control
119
+ helper-text=${this.t(`name.helper_text_${(_a = this.form.name) !== null && _a !== void 0 ? _a : 'none'}`)}
120
+ options=${this.__nameOptions}
121
+ layout="summary-item"
122
+ infer="name"
195
123
  >
196
- </vaadin-select>
197
- </div>
198
- `;
199
- }
200
- __renderRangeDateTimePicker(type) {
201
- const field = type === 'end' ? 'datetime_end' : 'datetime_start';
202
- const error = this.errors.find(error => error.startsWith(`${field}_`));
203
- const value = this.form[field];
204
- return html `
205
- <vaadin-date-time-picker
206
- date-placeholder=${this.t('select_date')}
207
- time-placeholder=${this.t('select_time')}
208
- error-message=${ifDefined(error ? this.t(error) : undefined)}
209
- data-testid="range:${type}"
210
- class="w-full"
211
- label=${this.t(type)}
212
- step="1"
213
- ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
214
- ?readonly=${this.readonlySelector.matches('range', true)}
215
- .checkValidity=${() => !error}
216
- .value=${value ? toDateTimePickerValue(value) : ''}
217
- @keydown=${(evt) => evt.key === 'Enter' && this.submit()}
218
- @change=${(evt) => {
219
- const picker = evt.currentTarget;
220
- this.edit({ [field]: picker.value });
221
- }}
222
- >
223
- </vaadin-date-time-picker>
224
- `;
225
- }
226
- __renderRangeDatePicker(type) {
227
- const field = type === 'end' ? 'datetime_end' : 'datetime_start';
228
- const error = this.errors.find(error => error.startsWith(`${field}_`));
229
- const value = this.form[field];
230
- return html `
231
- <vaadin-date-picker
232
- error-message=${ifDefined(error ? this.t(error) : undefined)}
233
- placeholder=${this.t('select_date')}
234
- data-testid="range:${type}"
235
- class="w-full"
236
- label=${this.t(type)}
237
- step="1"
238
- ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
239
- ?readonly=${this.readonlySelector.matches('range', true)}
240
- .checkValidity=${() => !error}
241
- .value=${value ? toDatePickerValue(value) : ''}
242
- @keydown=${(evt) => evt.key === 'Enter' && this.submit()}
243
- @change=${(evt) => {
244
- const picker = evt.currentTarget;
245
- const time = type === 'end' ? '23:59:59' : '00:00:00';
246
- this.edit({ [field]: `${picker.value}T${time}` });
247
- }}
248
- >
249
- </vaadin-date-picker>
250
- `;
251
- }
252
- __renderRange() {
253
- const renderer = this.__showRangeTime
254
- ? this.__renderRangeDateTimePicker
255
- : this.__renderRangeDatePicker;
256
- return html `
257
- <div data-testid="range">
258
- ${this.renderTemplateOrSlot('range:before')}
259
-
260
- <x-group frame>
261
- <foxy-i18n slot="header" lang=${this.lang} key="range" ns=${this.ns}></foxy-i18n>
262
-
263
- <div
264
- style="--lumo-border-radius: var(--lumo-border-radius-s)"
265
- class="p-m grid gap-m ${this.__showRangeTime ? 'grid-cols-1' : 'sm-grid-cols-2'}"
266
- >
267
- <div class=${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}>
268
- ${this.__renderRangePreset()}
269
- </div>
270
-
271
- ${renderer.call(this, 'start')} ${renderer.call(this, 'end')}
272
-
273
- <vaadin-checkbox
274
- data-testid="range:toggle"
275
- class="-my-xs w-full ${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}"
276
- ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}
277
- ?checked=${this.__showRangeTime}
278
- @change=${(evt) => {
279
- const checkbox = evt.currentTarget;
280
- this.__showRangeTime = checkbox.checked;
281
- }}
282
- >
283
- <foxy-i18n lang=${this.lang} key="use_precise_time" ns=${this.ns}></foxy-i18n>
284
- </vaadin-checkbox>
285
- </div>
286
- </x-group>
287
-
288
- ${this.renderTemplateOrSlot('range:after')}
289
- </div>
290
- `;
291
- }
292
- __renderTimestamps() {
293
- return html `
294
- <div>
295
- ${this.renderTemplateOrSlot('timestamps:before')}
296
-
297
- <x-metadata
298
- data-testid="timestamps"
299
- .items=${['date_modified', 'date_created'].map(field => {
300
- var _a;
301
- return ({
302
- name: this.t(field),
303
- value: ((_a = this.data) === null || _a === void 0 ? void 0 : _a[field]) ? this.t('date', { value: new Date(this.data[field]) })
304
- : '',
305
- });
306
- })}
124
+ </foxy-internal-select-control>
125
+
126
+ <foxy-internal-select-control
127
+ options=${this.__presetOptions}
128
+ layout="summary-item"
129
+ infer="preset"
130
+ .getValue=${this.__presetGetValue}
131
+ .setValue=${this.__presetSetValue}
307
132
  >
308
- </x-metadata>
309
-
310
- ${this.renderTemplateOrSlot('timestamps:after')}
311
- </div>
312
- `;
313
- }
314
- __renderCreate() {
315
- const isCleanTemplateInvalid = this.in({ idle: { template: { clean: 'invalid' } } });
316
- const isDirtyTemplateInvalid = this.in({ idle: { template: { dirty: 'invalid' } } });
317
- const isCleanSnapshotInvalid = this.in({ idle: { snapshot: { clean: 'invalid' } } });
318
- const isDirtySnapshotInvalid = this.in({ idle: { snapshot: { dirty: 'invalid' } } });
319
- const isTemplateInvalid = isCleanTemplateInvalid || isDirtyTemplateInvalid;
320
- const isSnaphotInvalid = isCleanSnapshotInvalid || isDirtySnapshotInvalid;
321
- const isInvalid = isTemplateInvalid || isSnaphotInvalid;
322
- const isIdle = this.in('idle');
323
- return html `
324
- <div>
325
- ${this.renderTemplateOrSlot('create:before')}
326
-
327
- <vaadin-button
328
- data-testid="create"
329
- class="w-full"
330
- theme="primary success"
331
- ?disabled=${!isIdle || isInvalid || this.disabledSelector.matches('create', true)}
332
- @click=${this.submit}
133
+ </foxy-internal-select-control>
134
+ </foxy-internal-summary-control>
135
+
136
+ <foxy-internal-summary-control infer="" label="" helper-text="">
137
+ <foxy-internal-native-date-control
138
+ format=${this.__showRangeTime || this.data ? 'datetime-local' : 'date'}
139
+ infer="datetime-start"
140
+ .getValue=${this.__datetimeStartGetValue}
141
+ .setValue=${this.__datetimeStartSetValue}
333
142
  >
334
- <foxy-i18n ns=${this.ns} key="create" lang=${this.lang}></foxy-i18n>
335
- </vaadin-button>
143
+ </foxy-internal-native-date-control>
336
144
 
337
- ${this.renderTemplateOrSlot('create:after')}
338
- </div>
339
- `;
340
- }
341
- __renderDelete() {
342
- return html `
343
- <div>
344
- <foxy-internal-confirm-dialog
345
- data-testid="confirm"
346
- message="delete_prompt"
347
- confirm="delete"
348
- cancel="cancel"
349
- header="delete"
350
- theme="primary error"
351
- lang=${this.lang}
352
- ns=${this.ns}
353
- id="confirm"
354
- @hide=${(evt) => !evt.detail.cancelled && this.delete()}
145
+ <foxy-internal-native-date-control
146
+ format=${this.__showRangeTime || this.data ? 'datetime-local' : 'date'}
147
+ infer="datetime-end"
148
+ .getValue=${this.__datetimeEndGetValue}
149
+ .setValue=${this.__datetimeEndSetValue}
355
150
  >
356
- </foxy-internal-confirm-dialog>
357
-
358
- ${this.renderTemplateOrSlot('delete:before')}
151
+ </foxy-internal-native-date-control>
359
152
 
360
- <vaadin-button
361
- data-testid="delete"
362
- theme="error"
363
- class="w-full"
364
- ?disabled=${!this.in('idle') || this.disabledSelector.matches('delete', true)}
365
- @click=${(evt) => {
366
- const confirm = this.renderRoot.querySelector('#confirm');
367
- confirm.show(evt.currentTarget);
368
- }}
153
+ <foxy-internal-switch-control
154
+ infer="datetime-precise"
155
+ .getValue=${this.__datetimePreciseGetValue}
156
+ .setValue=${this.__datetimePreciseSetValue}
369
157
  >
370
- <foxy-i18n ns=${this.ns} key="delete" lang=${this.lang}></foxy-i18n>
371
- </vaadin-button>
158
+ </foxy-internal-switch-control>
159
+ </foxy-internal-summary-control>
372
160
 
373
- ${this.renderTemplateOrSlot('delete:after')}
374
- </div>
161
+ ${super.renderBody()}
375
162
  `;
376
163
  }
377
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReportForm.js","sourceRoot":"","sources":["../../../../src/elements/public/ReportForm/ReportForm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,+BAA4B;AAE9D,OAAO,EAAwC,IAAI,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAqB,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,qBAAqB,GACtB,mBAAgB;AAIjB,OAAO,EAAE,iBAAiB,EAAE,kDAA+C;AAC3E,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AAIjE,OAAO,EAAE,cAAc,EAAE,4CAAyC;AAElE,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAE7D,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,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,IAAI,GAAG,mBAAmB,CAC9B,eAAe,CACb,cAAc,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,CACpF,CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,OAAO,UAAW,SAAQ,IAAU;IAA1C;;QAmCU,oBAAe,GAAG,KAAK,CAAC;IAqVlC,CAAC;IAvXC,MAAM,KAAK,cAAc;QACvB,OAAO;YACL,yBAAyB,EAAE,cAAc,CAAC,GAAG,CAAC,yBAAyB,CAAC;YACxE,oBAAoB,EAAE,cAAc,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAC9D,iBAAiB,EAAE,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACxD,eAAe,EAAE,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;YACpD,eAAe,EAAE,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;YAEpD,8BAA8B,EAAE,cAAc,CAAC,GAAG,CAAC,8BAA8B,CAAC;YAClF,uBAAuB,EAAE,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;YACpE,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC;YAClD,WAAW,EAAE,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC;YAE5C,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,MAAM;YAClB,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,eAAe,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SACtC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,OAAO;YACL,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe;YACvC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,yBAAyB;YAC3D,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,uBAAuB;SACxD,CAAC;IACJ,CAAC;IAID,MAAM;;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;QAEnC,OAAO,IAAI,CAAA;;;oBAGK,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;;;;;YAKvB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;YACvD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE;YACzD,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACjF,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE;YACxE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE;;;;;kBAKnE,QAAQ,CAAC;YACf,2DAA2D,EAAE,IAAI;YACjE,+BAA+B,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;SACjD,CAAC;;;;;oBAKQ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;mBAC/D,IAAI,CAAC,IAAI;kBACV,IAAI,CAAC,EAAE,IAAI,YAAA,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,0CAAE,SAAS,mCAAI,EAAE;;;;;KAK3E,CAAC;IACJ,CAAC;IAEO,YAAY;QAClB,MAAM,KAAK,GAAG,MAAM,CAAC;QACrB,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAExD,OAAO,IAAI,CAAA;yBACU,KAAK;UACpB,IAAI,CAAC,oBAAoB,CAAC,GAAG,KAAK,SAAS,CAAC;;;4BAG1B,IAAI,CAAC,IAAI,gCAAgC,IAAI,CAAC,EAAE;;;;qBAIvD,IAAI,CAAC,IAAI,CAAC,IAAI;qBACd,KAAK;wBACF,UAAU;wBACV,UAAU;sBACZ,CAAC,GAAU,EAAE,EAAE;YACvB,IAAI,GAAG,YAAY,iBAAiB,EAAE;gBACpC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAsB,EAAE,CAAC,CAAC;aACjD;QACH,CAAC;;cAEC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAClB,OAAO,IAAI,CAAA;6BACI,KAAK;kDACgB,IAAI,CAAC,IAAI,cAAc,KAAK,QAAQ,IAAI,CAAC,EAAE;;;;;2BAKlE,IAAI,CAAC,IAAI;gCACJ,KAAK;yBACZ,IAAI,CAAC,EAAE;;;;eAIjB,CAAC;QACJ,CAAC,CAAC;;;;UAIJ,IAAI,CAAC,oBAAoB,CAAC,GAAG,KAAK,QAAQ,CAAC;;KAEhD,CAAC;IACJ,CAAC;IAEO,mBAAmB;;QACzB,MAAM,OAAO,GAAG;YACd;gBACE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,yBAAyB,EAAE,GAAG,kBAAkB,EAAE,EAAE;gBACzE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,uBAAuB,EAAE,GAAG,gBAAgB,EAAE,EAAE;gBACrE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,eAAe,EAAE,EAAE;aACpE;YACD;gBACE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,iBAAiB,EAAE,EAAE;gBACpE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,eAAe,EAAE,EAAE;gBAChE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,cAAc,EAAE,EAAE;aAC/D;YACD;gBACE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,cAAc,EAAE,EAAE;gBAClE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,aAAa,EAAE,EAAE;aACjE;SACF,CAAC;QAEF,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAClD,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YAC/D,OAAO,CACL,KAAK,IAAI,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAC3F,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,IAAI,CAAA,+BAA+B,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC;YAC1F,MAAM,SAAS,GAAG,IAAI,CAAA,QAAQ,CAAC;YAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;oBAC3C,OAAO,IAAI,CAAA,sBAAsB,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBAC1E,CAAC,CAAC,CAAC;gBAEH,OAAO,IAAI,CAAA,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,iBAAiB;gBAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACzF,MAAM,CAAC,IAAI,CAAA,GAAG,UAAU,GAAG,MAAM,EAAE,EAAE,IAAI,CAAC,iBAA4B,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,OAAO,IAAI,CAAA;;;;kBAIG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;;sBAEZ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;sBAChE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;mBAC/C,IAAI,OAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,mCAAI,QAAQ,CAAC;sBACnC,QAAQ;oBACV,CAAC,GAAgB,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,aAA8B,CAAC;YAClD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;YAE7E,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,IAAI,CAAC;oBACR,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC3C,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxC,CAAC,CAAC;aACJ;QACH,CAAC;;;;KAIN,CAAC;IACJ,CAAC;IAEO,2BAA2B,CAAC,IAAqB;QACvD,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAmB,CAAW,CAAC;QAEvD,OAAO,IAAI,CAAA;;2BAEY,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;2BACrB,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;wBACxB,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;6BACvC,IAAI;;gBAEjB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;;oBAER,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;oBAChE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;yBACvC,GAAG,EAAE,CAAC,CAAC,KAAK;iBACpB,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;mBACvC,CAAC,GAAkB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;kBAC7D,CAAC,GAAgB,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,aAA+B,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;;;KAGJ,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAAC,IAAqB;QACnD,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAmB,CAAW,CAAC;QAEvD,OAAO,IAAI,CAAA;;wBAES,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;sBAC9C,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;6BACd,IAAI;;gBAEjB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;;oBAER,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;oBAChE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;yBACvC,GAAG,EAAE,CAAC,CAAC,KAAK;iBACpB,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;mBACnC,CAAC,GAAkB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;kBAC7D,CAAC,GAAgB,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,aAA+B,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;YAEtD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC;;;KAGJ,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe;YACnC,CAAC,CAAC,IAAI,CAAC,2BAA2B;YAClC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC;QAEjC,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;;;0CAGT,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,EAAE;;;;oCAIzC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB;;yBAElE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;gBAC9D,IAAI,CAAC,mBAAmB,EAAE;;;cAG5B,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;;;;qCAInC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;0BAChE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;yBACjE,IAAI,CAAC,eAAe;wBACrB,CAAC,GAAgB,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAgC,CAAC;YACtD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC1C,CAAC;;gCAEiB,IAAI,CAAC,IAAI,8BAA8B,IAAI,CAAC,EAAE;;;;;UAKpE,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;;KAE7C,CAAC;IACJ,CAAC;IAEO,kBAAkB;QACxB,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;;;;mBAIpC,CAAC,eAAe,EAAE,cAAc,CAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;YAAC,OAAA,CAAC;gBAClE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnB,KAAK,EAAE,OAAA,IAAI,CAAC,IAAI,0CAAG,KAAK,GACtB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAW,CAAC,EAAE,CAAC;oBACjE,CAAC,CAAC,EAAE;aACP,CAAC,CAAA;SAAA,CAAC;;;;UAIH,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC;;KAElD,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,MAAM,sBAAsB,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACrF,MAAM,sBAAsB,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACrF,MAAM,sBAAsB,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACrF,MAAM,sBAAsB,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACrF,MAAM,iBAAiB,GAAG,sBAAsB,IAAI,sBAAsB,CAAC;QAC3E,MAAM,gBAAgB,GAAG,sBAAsB,IAAI,sBAAsB,CAAC;QAC1E,MAAM,SAAS,GAAG,iBAAiB,IAAI,gBAAgB,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;;;;;;sBAM9B,CAAC,MAAM,IAAI,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;mBACxE,IAAI,CAAC,MAAM;;0BAEJ,IAAI,CAAC,EAAE,sBAAsB,IAAI,CAAC,IAAI;;;UAGtD,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;;KAE9C,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,OAAO,IAAI,CAAA;;;;;;;;;iBASE,IAAI,CAAC,IAAI;eACX,IAAI,CAAC,EAAE;;kBAEJ,CAAC,GAAoB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;;;;UAIxE,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;;;;;;sBAM9B,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;mBACpE,CAAC,GAAgB,EAAE,EAAE;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAA0B,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,aAA8B,CAAC,CAAC;QACnD,CAAC;;0BAEe,IAAI,CAAC,EAAE,sBAAsB,IAAI,CAAC,IAAI;;;UAGtD,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;;KAE9C,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { Choice, Group, Metadata } from '../../private/index';\nimport { Data } from './types';\nimport { PropertyDeclarations, TemplateResult, html } from 'lit-element';\nimport { ScopedElementsMap, ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport {\n getCurrentMonth,\n getCurrentQuarter,\n getCurrentYear,\n getLast30Days,\n getLast365Days,\n getPreviousMonth,\n getPreviousQuarter,\n getPreviousYear,\n toAPIDateTime,\n toDatePickerValue,\n toDateTimePickerValue,\n} from './utils';\n\nimport { ButtonElement } from '@vaadin/vaadin-button';\nimport { CheckboxElement } from '@vaadin/vaadin-checkbox';\nimport { ChoiceChangeEvent } from '../../private/Choice/ChoiceChangeEvent';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { DateTimePicker } from '@vaadin/vaadin-date-time-picker';\nimport { DialogHideEvent } from '../../private/Dialog/DialogHideEvent';\nimport { InternalConfirmDialog } from '../../internal/InternalConfirmDialog/InternalConfirmDialog';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { NucleonV8N } from '../NucleonElement/types';\nimport { ResponsiveMixin } from '../../../mixins/responsive';\nimport { SelectElement } from '@vaadin/vaadin-select';\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 { live } from 'lit-html/directives/live';\nimport { render } from 'lit-html';\n\nconst Base = ScopedElementsMixin(\n ResponsiveMixin(\n ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, 'report-form')))\n )\n);\n\n/**\n * Form element for creating or editing reports (`fx:report`).\n *\n * @element foxy-report-form\n * @since 1.16.0\n */\nexport class ReportForm extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'vaadin-date-time-picker': customElements.get('vaadin-date-time-picker'),\n 'vaadin-date-picker': customElements.get('vaadin-date-picker'),\n 'vaadin-checkbox': customElements.get('vaadin-checkbox'),\n 'vaadin-select': customElements.get('vaadin-select'),\n 'vaadin-button': customElements.get('vaadin-button'),\n\n 'foxy-internal-confirm-dialog': customElements.get('foxy-internal-confirm-dialog'),\n 'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),\n 'foxy-spinner': customElements.get('foxy-spinner'),\n 'foxy-i18n': customElements.get('foxy-i18n'),\n\n 'x-metadata': Metadata,\n 'x-choice': Choice,\n 'x-group': Group,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __showRangeTime: { attribute: false },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ name: v }) => !!v || 'name_required',\n ({ datetime_start: v }) => !!v || 'datetime_start_required',\n ({ datetime_end: v }) => !!v || 'datetime_end_required',\n ];\n }\n\n private __showRangeTime = false;\n\n render(): TemplateResult {\n const hidden = this.hiddenSelector;\n\n return html`\n <div\n data-testid=\"wrapper\"\n aria-busy=${this.in('busy')}\n aria-live=\"polite\"\n class=\"space-y-l relative\"\n >\n <div class=\"space-y-m\">\n ${hidden.matches('name', true) ? '' : this.__renderName()}\n ${hidden.matches('range', true) ? '' : this.__renderRange()}\n ${hidden.matches('timestamps', true) || !this.data ? '' : this.__renderTimestamps()}\n ${hidden.matches('create', true) || this.data ? '' : this.__renderCreate()}\n ${hidden.matches('delete', true) || !this.data ? '' : this.__renderDelete()}\n </div>\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': this.in('idle'),\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=${this.in('fail') ? 'error' : this.in('busy') ? 'busy' : 'empty'}\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n private __renderName() {\n const scope = 'name';\n const items = ['complete', 'customers', 'customers_ltv'];\n const isDisabled = !this.in('idle') || this.disabledSelector.matches(scope);\n const isReadonly = this.readonlySelector.matches(scope);\n\n return html`\n <div data-testid=${scope}>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <x-group frame>\n <foxy-i18n lang=${this.lang} slot=\"header\" key=\"name\" ns=${this.ns}></foxy-i18n>\n\n <x-choice\n data-testid=\"name-choice\"\n .value=${this.form.name}\n .items=${items}\n ?readonly=${isReadonly}\n ?disabled=${isDisabled}\n @change=${(evt: Event) => {\n if (evt instanceof ChoiceChangeEvent) {\n this.edit({ name: evt.detail as Data['name'] });\n }\n }}\n >\n ${items.map(value => {\n return html`\n <div slot=\"${value}-label\" class=\"py-s leading-s\">\n <foxy-i18n class=\"block\" lang=${this.lang} key=\"name_${value}\" ns=${this.ns}>\n </foxy-i18n>\n\n <foxy-i18n\n class=\"block text-s opacity-70\"\n lang=${this.lang}\n key=\"name_${value}_explainer\"\n ns=${this.ns}\n >\n </foxy-i18n>\n </div>\n `;\n })}\n </x-choice>\n </x-group>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n }\n\n private __renderRangePreset() {\n const options = [\n [\n { value: '0', label: 'preset_previous_quarter', ...getPreviousQuarter() },\n { value: '1', label: 'preset_previous_month', ...getPreviousMonth() },\n { value: '2', label: 'preset_previous_year', ...getPreviousYear() },\n ],\n [\n { value: '3', label: 'preset_this_quarter', ...getCurrentQuarter() },\n { value: '4', label: 'preset_this_month', ...getCurrentMonth() },\n { value: '5', label: 'preset_this_year', ...getCurrentYear() },\n ],\n [\n { value: '6', label: 'preset_last_365_days', ...getLast365Days() },\n { value: '7', label: 'preset_last_30_days', ...getLast30Days() },\n ],\n ];\n\n const currentOption = options.flat(1).find(option => {\n const { datetime_end: end, datetime_start: start } = this.form;\n return (\n start && end && toAPIDateTime(option.start) === start && toAPIDateTime(option.end) === end\n );\n });\n\n const renderer = (root: Element) => {\n const custom = html`<vaadin-item value=\"custom\">${this.t('preset_custom')}</vaadin-item>`;\n const separator = html`<hr />`;\n const predefined = options.map(group => {\n const items = group.map(({ value, label }) => {\n return html`<vaadin-item value=${value}>${this.t(label)}</vaadin-item>`;\n });\n\n return html`${items}${separator}`;\n });\n\n if (!root.firstElementChild) root.appendChild(document.createElement('vaadin-list-box'));\n render(html`${predefined}${custom}`, root.firstElementChild as Element);\n };\n\n return html`\n <div>\n <vaadin-select\n data-testid=\"range:preset\"\n label=${this.t('preset')}\n class=\"w-full -mt-m -mb-xs\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}\n ?readonly=${this.readonlySelector.matches('range', true)}\n .value=${live(currentOption?.value ?? 'custom')}\n .renderer=${renderer}\n @change=${(evt: CustomEvent) => {\n const select = evt.currentTarget as SelectElement;\n const option = options.flat(1).find(option => option.value === select.value);\n\n if (option) {\n this.edit({\n datetime_start: toAPIDateTime(option.start),\n datetime_end: toAPIDateTime(option.end),\n });\n }\n }}\n >\n </vaadin-select>\n </div>\n `;\n }\n\n private __renderRangeDateTimePicker(type: 'start' | 'end') {\n const field = type === 'end' ? 'datetime_end' : 'datetime_start';\n const error = this.errors.find(error => error.startsWith(`${field}_`));\n const value = this.form[field as keyof Data] as string;\n\n return html`\n <vaadin-date-time-picker\n date-placeholder=${this.t('select_date')}\n time-placeholder=${this.t('select_time')}\n error-message=${ifDefined(error ? this.t(error) : undefined)}\n data-testid=\"range:${type}\"\n class=\"w-full\"\n label=${this.t(type)}\n step=\"1\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}\n ?readonly=${this.readonlySelector.matches('range', true)}\n .checkValidity=${() => !error}\n .value=${value ? toDateTimePickerValue(value) : ''}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @change=${(evt: CustomEvent) => {\n const picker = evt.currentTarget as DateTimePicker;\n this.edit({ [field]: picker.value });\n }}\n >\n </vaadin-date-time-picker>\n `;\n }\n\n private __renderRangeDatePicker(type: 'start' | 'end') {\n const field = type === 'end' ? 'datetime_end' : 'datetime_start';\n const error = this.errors.find(error => error.startsWith(`${field}_`));\n const value = this.form[field as keyof Data] as string;\n\n return html`\n <vaadin-date-picker\n error-message=${ifDefined(error ? this.t(error) : undefined)}\n placeholder=${this.t('select_date')}\n data-testid=\"range:${type}\"\n class=\"w-full\"\n label=${this.t(type)}\n step=\"1\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}\n ?readonly=${this.readonlySelector.matches('range', true)}\n .checkValidity=${() => !error}\n .value=${value ? toDatePickerValue(value) : ''}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @change=${(evt: CustomEvent) => {\n const picker = evt.currentTarget as DateTimePicker;\n const time = type === 'end' ? '23:59:59' : '00:00:00';\n\n this.edit({ [field]: `${picker.value}T${time}` });\n }}\n >\n </vaadin-date-picker>\n `;\n }\n\n private __renderRange() {\n const renderer = this.__showRangeTime\n ? this.__renderRangeDateTimePicker\n : this.__renderRangeDatePicker;\n\n return html`\n <div data-testid=\"range\">\n ${this.renderTemplateOrSlot('range:before')}\n\n <x-group frame>\n <foxy-i18n slot=\"header\" lang=${this.lang} key=\"range\" ns=${this.ns}></foxy-i18n>\n\n <div\n style=\"--lumo-border-radius: var(--lumo-border-radius-s)\"\n class=\"p-m grid gap-m ${this.__showRangeTime ? 'grid-cols-1' : 'sm-grid-cols-2'}\"\n >\n <div class=${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}>\n ${this.__renderRangePreset()}\n </div>\n\n ${renderer.call(this, 'start')} ${renderer.call(this, 'end')}\n\n <vaadin-checkbox\n data-testid=\"range:toggle\"\n class=\"-my-xs w-full ${this.__showRangeTime ? 'col-span-1' : 'sm-col-span-2'}\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('range', true)}\n ?checked=${this.__showRangeTime}\n @change=${(evt: CustomEvent) => {\n const checkbox = evt.currentTarget as CheckboxElement;\n this.__showRangeTime = checkbox.checked;\n }}\n >\n <foxy-i18n lang=${this.lang} key=\"use_precise_time\" ns=${this.ns}></foxy-i18n>\n </vaadin-checkbox>\n </div>\n </x-group>\n\n ${this.renderTemplateOrSlot('range:after')}\n </div>\n `;\n }\n\n private __renderTimestamps() {\n return html`\n <div>\n ${this.renderTemplateOrSlot('timestamps:before')}\n\n <x-metadata\n data-testid=\"timestamps\"\n .items=${(['date_modified', 'date_created'] as const).map(field => ({\n name: this.t(field),\n value: this.data?.[field]\n ? this.t('date', { value: new Date(this.data[field] as string) })\n : '',\n }))}\n >\n </x-metadata>\n\n ${this.renderTemplateOrSlot('timestamps:after')}\n </div>\n `;\n }\n\n private __renderCreate() {\n const isCleanTemplateInvalid = this.in({ idle: { template: { clean: 'invalid' } } });\n const isDirtyTemplateInvalid = this.in({ idle: { template: { dirty: 'invalid' } } });\n const isCleanSnapshotInvalid = this.in({ idle: { snapshot: { clean: 'invalid' } } });\n const isDirtySnapshotInvalid = this.in({ idle: { snapshot: { dirty: 'invalid' } } });\n const isTemplateInvalid = isCleanTemplateInvalid || isDirtyTemplateInvalid;\n const isSnaphotInvalid = isCleanSnapshotInvalid || isDirtySnapshotInvalid;\n const isInvalid = isTemplateInvalid || isSnaphotInvalid;\n const isIdle = this.in('idle');\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('create:before')}\n\n <vaadin-button\n data-testid=\"create\"\n class=\"w-full\"\n theme=\"primary success\"\n ?disabled=${!isIdle || isInvalid || this.disabledSelector.matches('create', true)}\n @click=${this.submit}\n >\n <foxy-i18n ns=${this.ns} key=\"create\" lang=${this.lang}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('create:after')}\n </div>\n `;\n }\n\n private __renderDelete() {\n return html`\n <div>\n <foxy-internal-confirm-dialog\n data-testid=\"confirm\"\n message=\"delete_prompt\"\n confirm=\"delete\"\n cancel=\"cancel\"\n header=\"delete\"\n theme=\"primary error\"\n lang=${this.lang}\n ns=${this.ns}\n id=\"confirm\"\n @hide=${(evt: DialogHideEvent) => !evt.detail.cancelled && this.delete()}\n >\n </foxy-internal-confirm-dialog>\n\n ${this.renderTemplateOrSlot('delete:before')}\n\n <vaadin-button\n data-testid=\"delete\"\n theme=\"error\"\n class=\"w-full\"\n ?disabled=${!this.in('idle') || this.disabledSelector.matches('delete', true)}\n @click=${(evt: CustomEvent) => {\n const confirm = this.renderRoot.querySelector('#confirm') as InternalConfirmDialog;\n confirm.show(evt.currentTarget as ButtonElement);\n }}\n >\n <foxy-i18n ns=${this.ns} key=\"delete\" lang=${this.lang}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('delete:after')}\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"ReportForm.js","sourceRoot":"","sources":["../../../../src/elements/public/ReportForm/ReportForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations, TemplateResult } from 'lit-element';\nimport type { Data } from './types';\n\nimport {\n getCurrentMonth,\n getCurrentQuarter,\n getCurrentYear,\n getLast30Days,\n getLast365Days,\n getPreviousMonth,\n getPreviousQuarter,\n getPreviousYear,\n toAPIDateTime,\n toDatePickerValue,\n toNativeDateTimePickerValue,\n} from './utils';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { NucleonV8N } from '../NucleonElement/types';\nimport { html } from 'lit-element';\n\nconst Base = TranslatableMixin(InternalForm, 'report-form');\n\n/**\n * Form element for creating or editing reports (`fx:report`).\n *\n * @element foxy-report-form\n * @since 1.16.0\n */\nexport class ReportForm extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __showRangeTime: { attribute: false },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ datetime_start: v }) => !!v || 'datetime-start:v8n_required',\n ({ datetime_end: v }) => !!v || 'datetime-end:v8n_required',\n ({ name: v }) => !!v || 'name:v8n_required',\n ];\n }\n\n private __showRangeTime = false;\n\n private readonly __rawPresetOptions = [\n { value: '0', label: 'option_previous_quarter', ...getPreviousQuarter() },\n { value: '1', label: 'option_previous_month', ...getPreviousMonth() },\n { value: '2', label: 'option_previous_year', ...getPreviousYear() },\n { value: '3', label: 'option_this_quarter', ...getCurrentQuarter() },\n { value: '4', label: 'option_this_month', ...getCurrentMonth() },\n { value: '5', label: 'option_this_year', ...getCurrentYear() },\n { value: '6', label: 'option_last_365_days', ...getLast365Days() },\n { value: '7', label: 'option_last_30_days', ...getLast30Days() },\n ];\n\n private readonly __presetOptions = JSON.stringify([\n ...this.__rawPresetOptions,\n { value: 'custom', label: 'option_custom' },\n ]);\n\n private readonly __nameOptions = JSON.stringify([\n { value: 'complete', label: 'option_complete' },\n { value: 'customers', label: 'option_customers' },\n { value: 'customers_ltv', label: 'option_customers_ltv' },\n { value: 'transactions', label: 'option_transactions' },\n ]);\n\n private readonly __datetimePreciseGetValue = () => {\n return this.__showRangeTime;\n };\n\n private readonly __datetimePreciseSetValue = (value: boolean) => {\n this.__showRangeTime = value;\n };\n\n private readonly __datetimeStartGetValue = () => {\n const value = this.form.datetime_start;\n return value\n ? this.__showRangeTime || this.data\n ? toNativeDateTimePickerValue(value)\n : toDatePickerValue(value)\n : '';\n };\n\n private readonly __datetimeStartSetValue = (value: string) => {\n const time = this.__showRangeTime ? `${value.split('T')[1] ?? '00:00'}:00` : '00:00:00';\n this.edit({ datetime_start: `${value.split('T')[0]}T${time}` });\n };\n\n private readonly __datetimeEndGetValue = () => {\n const value = this.form.datetime_end;\n return value\n ? this.__showRangeTime || this.data\n ? toNativeDateTimePickerValue(value)\n : toDatePickerValue(value)\n : '';\n };\n\n private readonly __datetimeEndSetValue = (value: string) => {\n const time = this.__showRangeTime ? `${value.split('T')[1] ?? '23:59'}:59` : '23:59:59';\n this.edit({ datetime_end: `${value.split('T')[0]}T${time}` });\n };\n\n private readonly __presetGetValue = () => {\n return (\n this.__rawPresetOptions.find(option => {\n const { datetime_end: end, datetime_start: start } = this.form;\n return (\n start && end && toAPIDateTime(option.start) === start && toAPIDateTime(option.end) === end\n );\n })?.value ?? 'custom'\n );\n };\n\n private readonly __presetSetValue = (value: string) => {\n const option = this.__rawPresetOptions.find(option => option.value === value);\n\n if (option) {\n this.edit({\n datetime_start: toAPIDateTime(option.start),\n datetime_end: toAPIDateTime(option.end),\n });\n }\n };\n\n get readonlySelector(): BooleanSelector {\n const alwaysMatch = [super.readonlySelector.toString()];\n if (this.data) {\n alwaysMatch.unshift('name', 'preset', 'datetime-precise', 'datetime-start', 'datetime-end');\n }\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = [super.hiddenSelector.toString()];\n if (this.data) alwaysMatch.unshift('preset', 'datetime-precise');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n return html`\n ${this.renderHeader()}\n\n <foxy-internal-summary-control infer=\"\" label=\"\" helper-text=\"\">\n <foxy-internal-select-control\n helper-text=${this.t(`name.helper_text_${this.form.name ?? 'none'}`)}\n options=${this.__nameOptions}\n layout=\"summary-item\"\n infer=\"name\"\n >\n </foxy-internal-select-control>\n\n <foxy-internal-select-control\n options=${this.__presetOptions}\n layout=\"summary-item\"\n infer=\"preset\"\n .getValue=${this.__presetGetValue}\n .setValue=${this.__presetSetValue}\n >\n </foxy-internal-select-control>\n </foxy-internal-summary-control>\n\n <foxy-internal-summary-control infer=\"\" label=\"\" helper-text=\"\">\n <foxy-internal-native-date-control\n format=${this.__showRangeTime || this.data ? 'datetime-local' : 'date'}\n infer=\"datetime-start\"\n .getValue=${this.__datetimeStartGetValue}\n .setValue=${this.__datetimeStartSetValue}\n >\n </foxy-internal-native-date-control>\n\n <foxy-internal-native-date-control\n format=${this.__showRangeTime || this.data ? 'datetime-local' : 'date'}\n infer=\"datetime-end\"\n .getValue=${this.__datetimeEndGetValue}\n .setValue=${this.__datetimeEndSetValue}\n >\n </foxy-internal-native-date-control>\n\n <foxy-internal-switch-control\n infer=\"datetime-precise\"\n .getValue=${this.__datetimePreciseGetValue}\n .setValue=${this.__datetimePreciseSetValue}\n >\n </foxy-internal-switch-control>\n </foxy-internal-summary-control>\n\n ${super.renderBody()}\n `;\n }\n}\n"]}
@@ -1,11 +1,7 @@
1
- import '@vaadin/vaadin-date-time-picker';
2
- import '@vaadin/vaadin-date-picker';
3
- import '@vaadin/vaadin-checkbox';
4
- import '@vaadin/vaadin-button';
5
- import '@vaadin/vaadin-select';
6
- import '../../internal/InternalConfirmDialog/index';
7
- import '../../internal/InternalSandbox/index';
8
- import '../Spinner/index';
9
- import '../I18n/index';
1
+ import '../../internal/InternalNativeDateControl/index';
2
+ import '../../internal/InternalSummaryControl/index';
3
+ import '../../internal/InternalSwitchControl/index';
4
+ import '../../internal/InternalSelectControl/index';
5
+ import '../../internal/InternalForm/index';
10
6
  import { ReportForm } from './ReportForm';
11
7
  export { ReportForm };
@@ -1,12 +1,8 @@
1
- import '@vaadin/vaadin-date-time-picker';
2
- import '@vaadin/vaadin-date-picker';
3
- import '@vaadin/vaadin-checkbox';
4
- import '@vaadin/vaadin-button';
5
- import '@vaadin/vaadin-select';
6
- import "../../internal/InternalConfirmDialog/index.js";
7
- import "../../internal/InternalSandbox/index.js";
8
- import "../Spinner/index.js";
9
- import "../I18n/index.js";
1
+ import "../../internal/InternalNativeDateControl/index.js";
2
+ import "../../internal/InternalSummaryControl/index.js";
3
+ import "../../internal/InternalSwitchControl/index.js";
4
+ import "../../internal/InternalSelectControl/index.js";
5
+ import "../../internal/InternalForm/index.js";
10
6
  import { ReportForm } from "./ReportForm.js";
11
7
  customElements.define('foxy-report-form', ReportForm);
12
8
  export { ReportForm };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/ReportForm/index.ts"],"names":[],"mappings":"AAAA,OAAO,iCAAiC,CAAC;AACzC,OAAO,4BAA4B,CAAC;AACpC,OAAO,yBAAyB,CAAC;AACjC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,uBAAuB,CAAC;AAC/B,uDAAoD;AACpD,iDAA8C;AAC9C,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,UAAU,EAAE,wBAAqB;AAE1C,cAAc,CAAC,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,CAAC","sourcesContent":["import '@vaadin/vaadin-date-time-picker';\nimport '@vaadin/vaadin-date-picker';\nimport '@vaadin/vaadin-checkbox';\nimport '@vaadin/vaadin-button';\nimport '@vaadin/vaadin-select';\nimport '../../internal/InternalConfirmDialog/index';\nimport '../../internal/InternalSandbox/index';\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport { ReportForm } from './ReportForm';\n\ncustomElements.define('foxy-report-form', ReportForm);\n\nexport { ReportForm };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/ReportForm/index.ts"],"names":[],"mappings":"AAAA,2DAAwD;AACxD,wDAAqD;AACrD,uDAAoD;AACpD,uDAAoD;AACpD,8CAA2C;AAE3C,OAAO,EAAE,UAAU,EAAE,wBAAqB;AAE1C,cAAc,CAAC,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,CAAC","sourcesContent":["import '../../internal/InternalNativeDateControl/index';\nimport '../../internal/InternalSummaryControl/index';\nimport '../../internal/InternalSwitchControl/index';\nimport '../../internal/InternalSelectControl/index';\nimport '../../internal/InternalForm/index';\n\nimport { ReportForm } from './ReportForm';\n\ncustomElements.define('foxy-report-form', ReportForm);\n\nexport { ReportForm };\n"]}