@foxy.io/elements 1.18.0-beta.15 → 1.18.0-beta.17

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 (243) 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-api-browser.js +3 -3
  5. package/dist/cdn/foxy-applied-tax-card.js +1 -1
  6. package/dist/cdn/foxy-attribute-card.js +1 -1
  7. package/dist/cdn/foxy-attribute-form.js +1 -1
  8. package/dist/cdn/foxy-cancellation-form.js +1 -1
  9. package/dist/cdn/foxy-collection-page.js +1 -1
  10. package/dist/cdn/foxy-collection-pages.js +1 -1
  11. package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
  12. package/dist/cdn/foxy-coupon-card.js +1 -1
  13. package/dist/cdn/foxy-coupon-code-form.js +1 -1
  14. package/dist/cdn/foxy-coupon-codes-form.js +1 -1
  15. package/dist/cdn/foxy-coupon-detail-card.js +1 -1
  16. package/dist/cdn/foxy-coupon-form.js +1 -1
  17. package/dist/cdn/foxy-custom-field-card.js +1 -1
  18. package/dist/cdn/foxy-custom-field-form.js +1 -1
  19. package/dist/cdn/foxy-customer-api.js +1 -1
  20. package/dist/cdn/foxy-customer-card.js +1 -1
  21. package/dist/cdn/foxy-customer-form.js +1 -1
  22. package/dist/cdn/foxy-customer-portal-settings.js +1 -1
  23. package/dist/cdn/foxy-customer-portal.js +2 -2
  24. package/dist/cdn/foxy-customer.js +1 -1
  25. package/dist/cdn/foxy-customers-table.js +1 -1
  26. package/dist/cdn/foxy-discount-builder.js +1 -1
  27. package/dist/cdn/foxy-discount-card.js +1 -1
  28. package/dist/cdn/foxy-discount-detail-card.js +1 -1
  29. package/dist/cdn/foxy-donation.js +1 -1
  30. package/dist/cdn/foxy-email-template-card.js +1 -1
  31. package/dist/cdn/foxy-email-template-form.js +1 -1
  32. package/dist/cdn/foxy-error-entry-card.js +1 -1
  33. package/dist/cdn/foxy-form-dialog.js +1 -1
  34. package/dist/cdn/foxy-generate-codes-form.js +1 -1
  35. package/dist/cdn/foxy-gift-card-card.js +1 -1
  36. package/dist/cdn/foxy-gift-card-code-form.js +1 -1
  37. package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
  38. package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
  39. package/dist/cdn/foxy-gift-card-form.js +1 -1
  40. package/dist/cdn/foxy-i18n-editor.js +2 -0
  41. package/dist/cdn/foxy-i18n.js +1 -1
  42. package/dist/cdn/foxy-integration-card.js +1 -0
  43. package/dist/cdn/foxy-integration-form.js +1 -0
  44. package/dist/cdn/foxy-item-card.js +1 -1
  45. package/dist/cdn/foxy-item-category-card.js +1 -1
  46. package/dist/cdn/foxy-item-category-form.js +1 -1
  47. package/dist/cdn/foxy-item-form.js +1 -1
  48. package/dist/cdn/foxy-item-option-card.js +1 -1
  49. package/dist/cdn/foxy-item-option-form.js +1 -1
  50. package/dist/cdn/foxy-items-form.js +1 -1
  51. package/dist/cdn/foxy-nucleon-element.js +1 -1
  52. package/dist/cdn/foxy-pagination.js +1 -1
  53. package/dist/cdn/foxy-payment-card.js +1 -1
  54. package/dist/cdn/foxy-payment-method-card.js +1 -1
  55. package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
  56. package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
  57. package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
  58. package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
  59. package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
  60. package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
  61. package/dist/cdn/foxy-payments-api.js +1 -1
  62. package/dist/cdn/foxy-query-builder.js +1 -1
  63. package/dist/cdn/foxy-report-form.js +1 -1
  64. package/dist/cdn/foxy-reports-table.js +1 -1
  65. package/dist/cdn/foxy-shipment-card.js +1 -1
  66. package/dist/cdn/foxy-shipping-method-card.js +1 -1
  67. package/dist/cdn/foxy-sign-in-form.js +1 -1
  68. package/dist/cdn/foxy-spinner.js +2 -2
  69. package/dist/cdn/foxy-store-form.js +1 -1
  70. package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
  71. package/dist/cdn/foxy-subscription-card.js +1 -1
  72. package/dist/cdn/foxy-subscription-form.js +4 -4
  73. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  74. package/dist/cdn/foxy-table.js +1 -1
  75. package/dist/cdn/foxy-tax-card.js +1 -1
  76. package/dist/cdn/foxy-tax-form.js +1 -1
  77. package/dist/cdn/foxy-template-card.js +1 -1
  78. package/dist/cdn/foxy-template-config-form.js +1 -1
  79. package/dist/cdn/foxy-template-form.js +1 -1
  80. package/dist/cdn/foxy-template-set-card.js +1 -1
  81. package/dist/cdn/foxy-template-set-form.js +1 -1
  82. package/dist/cdn/foxy-transaction-card.js +1 -1
  83. package/dist/cdn/foxy-transaction.js +1 -1
  84. package/dist/cdn/foxy-transactions-table.js +1 -1
  85. package/dist/cdn/foxy-user-form.js +1 -1
  86. package/dist/cdn/foxy-users-table.js +1 -1
  87. package/dist/cdn/foxy-webhook-card.js +1 -1
  88. package/dist/cdn/foxy-webhook-form.js +1 -1
  89. package/dist/cdn/foxy-webhook-log-card.js +1 -1
  90. package/dist/cdn/foxy-webhook-status-card.js +1 -1
  91. package/dist/cdn/shared-002b788f.js +15 -0
  92. package/dist/cdn/shared-0672e78b.js +1 -0
  93. package/dist/cdn/{shared-d58e7670.js → shared-162fc285.js} +1 -1
  94. package/dist/cdn/shared-1b3e1a0d.js +1 -0
  95. package/dist/cdn/{shared-45418f3b.js → shared-2215e6c8.js} +5 -5
  96. package/dist/cdn/shared-236d9b7e.js +1 -0
  97. package/dist/cdn/{shared-890a22af.js → shared-29376ba1.js} +1 -1
  98. package/dist/cdn/{shared-a5000f1f.js → shared-29e21467.js} +3 -3
  99. package/dist/cdn/{shared-4ff7174f.js → shared-2c842660.js} +1 -1
  100. package/dist/cdn/{shared-23e0d67e.js → shared-2d3027f4.js} +1 -1
  101. package/dist/cdn/{shared-0d91f648.js → shared-2f1e04ae.js} +1 -1
  102. package/dist/cdn/{shared-398b3c49.js → shared-34b11d34.js} +1 -1
  103. package/dist/cdn/{shared-0953a0e7.js → shared-3a3878c9.js} +1 -1
  104. package/dist/cdn/{shared-5c837b54.js → shared-40537775.js} +1 -1
  105. package/dist/cdn/{shared-38df92f3.js → shared-40d82f6b.js} +1 -1
  106. package/dist/cdn/{shared-abf68928.js → shared-4457dc27.js} +1 -1
  107. package/dist/cdn/{shared-760cc838.js → shared-4975f86f.js} +1 -1
  108. package/dist/cdn/{shared-ffea7639.js → shared-4c338ca6.js} +1 -1
  109. package/dist/cdn/shared-515f00b1.js +1 -0
  110. package/dist/cdn/{shared-8704e701.js → shared-5504f415.js} +2 -2
  111. package/dist/cdn/{shared-dee53530.js → shared-55e20d5b.js} +1 -1
  112. package/dist/cdn/{shared-a8966936.js → shared-5ad8c9a0.js} +1 -1
  113. package/dist/cdn/{shared-b6a37360.js → shared-5b55627c.js} +1 -1
  114. package/dist/cdn/{shared-2a56246b.js → shared-6003864d.js} +1 -1
  115. package/dist/cdn/shared-6b8874a7.js +1 -0
  116. package/dist/cdn/shared-6bf8883f.js +1 -0
  117. package/dist/cdn/{shared-fd124dfd.js → shared-6d2064e9.js} +3 -3
  118. package/dist/cdn/{shared-7ab9beb2.js → shared-6e6ed30a.js} +1 -1
  119. package/dist/cdn/shared-71deb26e.js +1 -0
  120. package/dist/cdn/{shared-3425791b.js → shared-74277a73.js} +5 -5
  121. package/dist/cdn/{shared-f22d1ed9.js → shared-7661b51a.js} +15 -15
  122. package/dist/cdn/{shared-7ca327ea.js → shared-7b167fe9.js} +1 -1
  123. package/dist/cdn/{shared-93c15291.js → shared-85f9051e.js} +1 -1
  124. package/dist/cdn/{shared-a6339611.js → shared-8a5e01ae.js} +1 -1
  125. package/dist/cdn/shared-8d533e0c.js +1 -0
  126. package/dist/cdn/shared-923da875.js +6 -0
  127. package/dist/cdn/shared-92926b1d.js +1 -0
  128. package/dist/cdn/{shared-081ad02f.js → shared-92bd849f.js} +1 -1
  129. package/dist/cdn/shared-a46a2f49.js +1 -0
  130. package/dist/cdn/{shared-8dee6348.js → shared-a86761d3.js} +2 -2
  131. package/dist/cdn/{shared-0565ecbc.js → shared-ad8141c4.js} +1 -1
  132. package/dist/cdn/{shared-a8ada44e.js → shared-b28dbc68.js} +27 -51
  133. package/dist/cdn/{shared-4610cbdb.js → shared-b5cbbdd8.js} +1 -1
  134. package/dist/cdn/{shared-15278fe0.js → shared-b7423eab.js} +1 -1
  135. package/dist/cdn/{shared-63671948.js → shared-b7f7f15f.js} +1 -1
  136. package/dist/cdn/{shared-3ef5c283.js → shared-b8e9b536.js} +1 -1
  137. package/dist/cdn/{shared-88924652.js → shared-bb522838.js} +1 -1
  138. package/dist/cdn/{shared-34cd3a01.js → shared-bd194cdf.js} +1 -1
  139. package/dist/cdn/{shared-6dafebaf.js → shared-c484320b.js} +1 -1
  140. package/dist/cdn/{shared-86be537c.js → shared-c52d3772.js} +1 -1
  141. package/dist/cdn/{shared-6b471536.js → shared-cced7800.js} +1 -1
  142. package/dist/cdn/{shared-bd4b0759.js → shared-cfec6ec1.js} +1 -1
  143. package/dist/cdn/{shared-9195959e.js → shared-d302ad2c.js} +1 -1
  144. package/dist/cdn/{shared-eefa4103.js → shared-d43fc5cc.js} +1 -1
  145. package/dist/cdn/shared-dc798bf4.js +1 -0
  146. package/dist/cdn/{shared-4a796610.js → shared-dcbf57e0.js} +1 -1
  147. package/dist/cdn/{shared-1d34726a.js → shared-e119731e.js} +1 -1
  148. package/dist/cdn/shared-e396ec04.js +25 -0
  149. package/dist/cdn/{shared-d1b62ccd.js → shared-e3ce88dc.js} +12 -17
  150. package/dist/cdn/{shared-74b7438a.js → shared-ea316e64.js} +1 -1
  151. package/dist/cdn/{shared-cd14b0cc.js → shared-ef0fc329.js} +1 -1
  152. package/dist/cdn/{shared-8328826e.js → shared-f022673a.js} +7 -7
  153. package/dist/cdn/{shared-d8b14272.js → shared-f23d122e.js} +3 -3
  154. package/dist/cdn/{shared-8033b140.js → shared-f2d19582.js} +1 -1
  155. package/dist/cdn/{shared-a861c770.js → shared-facfe95a.js} +4 -4
  156. package/dist/cdn/{shared-779795c5.js → shared-ff2f84c7.js} +1 -1
  157. package/dist/cdn/translations/api-browser/en.json +1 -0
  158. package/dist/cdn/translations/email-template-form/en.json +5 -0
  159. package/dist/cdn/translations/i18n-editor/en.json +10 -0
  160. package/dist/cdn/translations/integration-card/en.json +13 -0
  161. package/dist/cdn/translations/integration-form/en.json +41 -0
  162. package/dist/cdn/translations/store-form/en.json +1 -1
  163. package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.d.ts +4 -0
  164. package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.js +33 -17
  165. package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.js.map +1 -1
  166. package/dist/elements/public/ApiBrowser/ApiBrowser.d.ts +2 -1
  167. package/dist/elements/public/ApiBrowser/ApiBrowser.js +38 -15
  168. package/dist/elements/public/ApiBrowser/ApiBrowser.js.map +1 -1
  169. package/dist/elements/public/EmailTemplateForm/EmailTemplateForm.d.ts +1 -0
  170. package/dist/elements/public/EmailTemplateForm/EmailTemplateForm.js +22 -13
  171. package/dist/elements/public/EmailTemplateForm/EmailTemplateForm.js.map +1 -1
  172. package/dist/elements/public/EmailTemplateForm/index.d.ts +1 -0
  173. package/dist/elements/public/EmailTemplateForm/index.js +1 -0
  174. package/dist/elements/public/EmailTemplateForm/index.js.map +1 -1
  175. package/dist/elements/public/I18n/format/date.js +5 -4
  176. package/dist/elements/public/I18n/format/date.js.map +1 -1
  177. package/dist/elements/public/I18nEditor/I18nEditor.d.ts +18 -0
  178. package/dist/elements/public/I18nEditor/I18nEditor.js +173 -0
  179. package/dist/elements/public/I18nEditor/I18nEditor.js.map +1 -0
  180. package/dist/elements/public/I18nEditor/index.d.ts +7 -0
  181. package/dist/elements/public/I18nEditor/index.js +9 -0
  182. package/dist/elements/public/I18nEditor/index.js.map +1 -0
  183. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/InternalI18nEditorEntry.d.ts +17 -0
  184. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/InternalI18nEditorEntry.js +169 -0
  185. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/InternalI18nEditorEntry.js.map +1 -0
  186. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/index.d.ts +6 -0
  187. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/index.js +8 -0
  188. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/index.js.map +1 -0
  189. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/types.d.ts +3 -0
  190. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/types.js +2 -0
  191. package/dist/elements/public/I18nEditor/internal/InternalI18nEditorEntry/types.js.map +1 -0
  192. package/dist/elements/public/I18nEditor/types.d.ts +4 -0
  193. package/dist/elements/public/I18nEditor/types.js +2 -0
  194. package/dist/elements/public/I18nEditor/types.js.map +1 -0
  195. package/dist/elements/public/IntegrationCard/IntegrationCard.d.ts +10 -0
  196. package/dist/elements/public/IntegrationCard/IntegrationCard.js +49 -0
  197. package/dist/elements/public/IntegrationCard/IntegrationCard.js.map +1 -0
  198. package/dist/elements/public/IntegrationCard/index.d.ts +4 -0
  199. package/dist/elements/public/IntegrationCard/index.js +6 -0
  200. package/dist/elements/public/IntegrationCard/index.js.map +1 -0
  201. package/dist/elements/public/IntegrationCard/types.d.ts +3 -0
  202. package/dist/elements/public/IntegrationCard/types.js +2 -0
  203. package/dist/elements/public/IntegrationCard/types.js.map +1 -0
  204. package/dist/elements/public/IntegrationForm/IntegrationForm.d.ts +18 -0
  205. package/dist/elements/public/IntegrationForm/IntegrationForm.js +220 -0
  206. package/dist/elements/public/IntegrationForm/IntegrationForm.js.map +1 -0
  207. package/dist/elements/public/IntegrationForm/index.d.ts +10 -0
  208. package/dist/elements/public/IntegrationForm/index.js +12 -0
  209. package/dist/elements/public/IntegrationForm/index.js.map +1 -0
  210. package/dist/elements/public/IntegrationForm/types.d.ts +21 -0
  211. package/dist/elements/public/IntegrationForm/types.js +2 -0
  212. package/dist/elements/public/IntegrationForm/types.js.map +1 -0
  213. package/dist/elements/public/ItemCategoryForm/internal/InternalItemCategoryFormTaxesControlItem/InternalItemCategoryFormTaxesControlItem.js +0 -2
  214. package/dist/elements/public/ItemCategoryForm/internal/InternalItemCategoryFormTaxesControlItem/InternalItemCategoryFormTaxesControlItem.js.map +1 -1
  215. package/dist/elements/public/StoreForm/StoreForm.js +2 -10
  216. package/dist/elements/public/StoreForm/StoreForm.js.map +1 -1
  217. package/dist/elements/public/TemplateSetForm/TemplateSetForm.d.ts +1 -0
  218. package/dist/elements/public/TemplateSetForm/TemplateSetForm.js +29 -18
  219. package/dist/elements/public/TemplateSetForm/TemplateSetForm.js.map +1 -1
  220. package/dist/elements/public/TemplateSetForm/index.d.ts +1 -0
  221. package/dist/elements/public/TemplateSetForm/index.js +1 -0
  222. package/dist/elements/public/TemplateSetForm/index.js.map +1 -1
  223. package/dist/elements/public/index.d.ts +3 -0
  224. package/dist/elements/public/index.defined.d.ts +3 -0
  225. package/dist/elements/public/index.defined.js +3 -0
  226. package/dist/elements/public/index.defined.js.map +1 -1
  227. package/dist/elements/public/index.js +3 -0
  228. package/dist/elements/public/index.js.map +1 -1
  229. package/dist/mixins/responsive.js +3 -3
  230. package/dist/mixins/responsive.js.map +1 -1
  231. package/dist/mixins/themeable.js +280 -0
  232. package/dist/mixins/themeable.js.map +1 -1
  233. package/package.json +2 -2
  234. package/dist/cdn/shared-10dbb9d7.js +0 -1
  235. package/dist/cdn/shared-2af327d0.js +0 -15
  236. package/dist/cdn/shared-5606cd36.js +0 -1
  237. package/dist/cdn/shared-8ab29d7d.js +0 -1
  238. package/dist/cdn/shared-a420358e.js +0 -1
  239. package/dist/cdn/shared-b567541a.js +0 -1
  240. package/dist/cdn/shared-b98f0ad9.js +0 -1
  241. package/dist/cdn/shared-c29811ec.js +0 -1
  242. package/dist/cdn/shared-d82f3ba0.js +0 -1
  243. package/dist/cdn/shared-fdf6ca55.js +0 -1
@@ -40,6 +40,13 @@ export class EmailTemplateForm extends Base {
40
40
  this.templates = {};
41
41
  this.__cacheState = 'idle';
42
42
  this.__contentChoice = 'default';
43
+ this.__templateLanguageOptions = [
44
+ { label: 'Nunjucks', value: 'nunjucks' },
45
+ { label: 'Handlebars', value: 'handlebars' },
46
+ { label: 'Pug', value: 'pug' },
47
+ { label: 'Twig', value: 'twig' },
48
+ { label: 'EJS', value: 'ejs' },
49
+ ];
43
50
  }
44
51
  static get properties() {
45
52
  return {
@@ -73,7 +80,7 @@ export class EmailTemplateForm extends Base {
73
80
  };
74
81
  }
75
82
  render() {
76
- var _a, _b;
83
+ var _a, _b, _c;
77
84
  const { hiddenSelector, href, lang, ns } = this;
78
85
  const action = href ? 'delete' : 'create';
79
86
  const isBusy = this.in('busy');
@@ -82,17 +89,19 @@ export class EmailTemplateForm extends Base {
82
89
  <div class="space-y-m">
83
90
  ${hiddenSelector.matches('description', true) ? '' : this.__renderDescription()}
84
91
 
85
- <foxy-internal-select-control
86
- infer="template-language"
87
- .options=${[
88
- { label: 'Nunjucks', value: 'nunjucks' },
89
- { label: 'Handlebars', value: 'handlebars' },
90
- { label: 'Pug', value: 'pug' },
91
- { label: 'Twig', value: 'twig' },
92
- { label: 'EJS', value: 'ejs' },
93
- ]}
94
- >
95
- </foxy-internal-select-control>
92
+ <foxy-internal-text-control infer="subject"></foxy-internal-text-control>
93
+
94
+ ${((_a = this.data) === null || _a === void 0 ? void 0 : _a.description) === 'Email Receipt Template'
95
+ ? ''
96
+ : html `
97
+ <foxy-internal-select-control
98
+ infer="template-language"
99
+ .options=${this.__templateLanguageOptions}
100
+ >
101
+ </foxy-internal-select-control>
102
+ `}
103
+
104
+ <!-- -->
96
105
 
97
106
  ${hiddenSelector.matches('content', true) ? '' : this.__renderContent()}
98
107
  ${hiddenSelector.matches('timestamps', true) || !href ? '' : this.__renderTimestamps()}
@@ -110,7 +119,7 @@ export class EmailTemplateForm extends Base {
110
119
  class="m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l"
111
120
  state=${isFail ? 'error' : isBusy ? 'busy' : 'empty'}
112
121
  lang=${lang}
113
- ns="${ns} ${(_b = (_a = customElements.get('foxy-spinner')) === null || _a === void 0 ? void 0 : _a.defaultNS) !== null && _b !== void 0 ? _b : ''}"
122
+ ns="${ns} ${(_c = (_b = customElements.get('foxy-spinner')) === null || _b === void 0 ? void 0 : _b.defaultNS) !== null && _c !== void 0 ? _c : ''}"
114
123
  >
115
124
  </foxy-spinner>
116
125
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"EmailTemplateForm.js","sourceRoot":"","sources":["../../../../src/elements/public/EmailTemplateForm/EmailTemplateForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { CSSResultArray, PropertyDeclarations, TemplateResult, css, html } from 'lit-element';\nimport { Choice, Group, PropertyTable } from '../../private/index';\nimport { Data, Templates } from './types';\nimport { ScopedElementsMap, ScopedElementsMixin } from '@open-wc/scoped-elements';\n\nimport { ChoiceChangeEvent } from '../../private/events';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { DialogHideEvent } from '../../private/Dialog/DialogHideEvent';\nimport { InternalConfirmDialog } from '../../internal/InternalConfirmDialog/InternalConfirmDialog';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { TextAreaElement } from '@vaadin/vaadin-text-field/vaadin-text-area';\nimport { TextFieldElement } from '@vaadin/vaadin-text-field';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { ifDefined } from 'lit-html/directives/if-defined';\n\nconst NS = 'email-template-form';\nconst Base = ScopedElementsMixin(\n ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)))\n);\n\n/**\n * Form element for creating or editing email templates (`fx:email_template`).\n *\n * @slot description:before\n * @slot description:after\n *\n * @slot template-language:before\n * @slot template-language:after\n *\n * @slot content:before\n * @slot content: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-email-template-form\n * @since 1.14.0\n */\nexport class EmailTemplateForm extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __cacheState: { attribute: false },\n __contentChoice: { attribute: false },\n };\n }\n\n static get styles(): CSSResultArray {\n return [\n ...super.styles,\n css`\n #cached-content::part(input-field) {\n max-height: 15em;\n }\n `,\n ];\n }\n\n static get scopedElements(): ScopedElementsMap {\n return {\n 'foxy-internal-select-control': customElements.get('foxy-internal-select-control'),\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 'vaadin-text-field': customElements.get('vaadin-text-field'),\n 'vaadin-text-area': customElements.get('vaadin-text-area'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-property-table': PropertyTable,\n 'x-choice': Choice,\n 'x-group': Group,\n };\n }\n\n templates: Templates = {};\n\n private __cacheState: 'idle' | 'busy' | 'fail' = 'idle';\n\n private __contentChoice: 'default' | 'url' | 'clipboard' = 'default';\n\n render(): TemplateResult {\n const { hiddenSelector, href, lang, ns } = this;\n const action = href ? 'delete' : 'create';\n const isBusy = this.in('busy');\n const isFail = this.in('fail');\n\n return html`\n <div class=\"space-y-m\">\n ${hiddenSelector.matches('description', true) ? '' : this.__renderDescription()}\n\n <foxy-internal-select-control\n infer=\"template-language\"\n .options=${[\n { label: 'Nunjucks', value: 'nunjucks' },\n { label: 'Handlebars', value: 'handlebars' },\n { label: 'Pug', value: 'pug' },\n { label: 'Twig', value: 'twig' },\n { label: 'EJS', value: 'ejs' },\n ]}\n >\n </foxy-internal-select-control>\n\n ${hiddenSelector.matches('content', true) ? '' : this.__renderContent()}\n ${hiddenSelector.matches('timestamps', true) || !href ? '' : this.__renderTimestamps()}\n ${hiddenSelector.matches(action) ? '' : this.__renderAction(action)}\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': !isBusy && !isFail,\n })}\n >\n <foxy-spinner\n layout=\"vertical\"\n class=\"m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l\"\n state=${isFail ? 'error' : isBusy ? 'busy' : 'empty'}\n lang=${lang}\n ns=\"${ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n private __renderDescription() {\n const scope = 'description';\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <vaadin-text-field\n data-testid=${scope}\n class=\"w-full mb-s\"\n label=${this.t(scope)}\n ?disabled=${!this.in('idle') || this.disabledSelector.matches(scope)}\n ?readonly=${this.readonlySelector.matches(scope)}\n .value=${this.form?.description ?? ''}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: CustomEvent) => {\n this.edit({ description: (evt.currentTarget as TextFieldElement).value });\n }}\n >\n </vaadin-text-field>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n }\n\n private __renderContent() {\n return html`\n <div data-testid=\"content\">\n ${this.renderTemplateOrSlot('content:before')}\n\n <div class=\"space-y-l\">\n ${this.__renderContentVariant('content_text_url', 'content_text', 'text_template')}\n ${this.__renderContentVariant('content_html_url', 'content_html', 'html_template')}\n </div>\n\n ${this.renderTemplateOrSlot('content:after')}\n </div>\n `;\n }\n\n private __renderContentVariant(\n urlPath: 'content_text_url' | 'content_html_url',\n textPath: 'content_text' | 'content_html',\n header: string\n ) {\n const isDisabled = !this.in('idle') || this.disabledSelector.matches('content', true);\n const isReadonly = this.readonlySelector.matches('content', true);\n const contentChoice = this.form[urlPath]\n ? 'url'\n : this.form[textPath]\n ? 'clipboard'\n : this.__contentChoice;\n\n return html`\n <x-group frame>\n <foxy-i18n\n class=${classMap({ 'transition-colors': true, 'text-disabled': isDisabled })}\n lang=${this.lang}\n slot=\"header\"\n key=${header}\n ns=${this.ns}\n >\n </foxy-i18n>\n\n <x-choice\n data-testid=\"${textPath.replace('_', '-')}-type\"\n .value=${contentChoice}\n .items=${['default', 'url', 'clipboard']}\n ?readonly=${isReadonly}\n ?disabled=${isDisabled}\n @change=${(evt: Event) => {\n if (evt instanceof ChoiceChangeEvent) {\n this.edit({ [textPath]: '', [urlPath]: '' });\n this.__contentChoice = evt.detail as 'url' | 'clipboard' | 'default';\n }\n }}\n >\n ${['default', 'url', 'clipboard'].map(value => {\n return html`\n <div slot=\"${value}-label\" class=\"py-s leading-s\">\n <foxy-i18n class=\"block\" lang=${this.lang} key=\"template_${value}\" ns=${this.ns}>\n </foxy-i18n>\n\n <foxy-i18n\n class=\"block text-s opacity-70\"\n lang=${this.lang}\n key=\"template_${value}_explainer\"\n ns=${this.ns}\n >\n </foxy-i18n>\n </div>\n `;\n })}\n\n <div slot=\"url\" ?hidden=${contentChoice !== 'url'}>\n <div class=\"flex items-center mt-0 mb-m\">\n <vaadin-text-field\n data-testid=\"${textPath.replace('_', '-')}-url\"\n value=${ifDefined(this.form[urlPath])}\n class=\"mr-s flex-grow\"\n ?readonly=${isReadonly}\n ?disabled=${isDisabled}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: CustomEvent) => {\n const value = (evt.currentTarget as TextFieldElement).value;\n this.edit({ [textPath]: '', [urlPath]: value });\n }}\n >\n </vaadin-text-field>\n\n <vaadin-button\n data-testid=\"${textPath.replace('_', '-')}-cache\"\n class=\"relative\"\n ?disabled=${isDisabled || this.__cacheState === 'busy'}\n ?hidden=${isReadonly || this.form[urlPath] !== this.data?.[urlPath]}\n @click=${this.__cache}\n >\n <foxy-i18n\n class=${classMap({\n 'relative transition-opacity': true,\n 'opacity-0': this.__cacheState !== 'idle',\n })}\n lang=${this.lang}\n key=\"cache\"\n ns=${this.ns}\n >\n </foxy-i18n>\n\n <div\n class=${classMap({\n 'absolute inset-0 flex transition-opacity': true,\n 'opacity-0': this.__cacheState === 'idle',\n })}\n >\n <foxy-spinner\n layout=\"no-label\"\n class=\"m-auto\"\n state=${this.__cacheState === 'fail' ? 'error' : 'busy'}\n lang=${this.lang}\n ns=${this.ns}\n >\n </foxy-spinner>\n </div>\n </vaadin-button>\n </div>\n </div>\n\n <div slot=\"clipboard\" ?hidden=${contentChoice !== 'clipboard'}>\n <vaadin-text-area\n data-testid=\"${textPath.replace('_', '-')}-clipboard\"\n id=\"cached-content\"\n class=\"w-full mb-m\"\n ?readonly=${isReadonly}\n ?disabled=${isDisabled}\n .value=${this.form[textPath]}\n @input=${(evt: CustomEvent) => {\n const value = (evt.currentTarget as TextAreaElement).value;\n this.edit({ [textPath]: value, [urlPath]: '' });\n }}\n >\n </vaadin-text-area>\n </div>\n </x-choice>\n </x-group>\n `;\n }\n\n private __renderTimestamps() {\n const scope = 'timestamps';\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <x-property-table\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-property-table>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n }\n\n private __renderAction(action: string) {\n const { disabledSelector, href, lang, ns } = this;\n\n const isTemplateValid = this.in({ idle: { template: { dirty: 'valid' } } });\n const isSnapshotValid = this.in({ idle: { snapshot: { dirty: 'valid' } } });\n const isDisabled = !this.in('idle') || disabledSelector.matches(action, true);\n const isValid = isTemplateValid || isSnapshotValid;\n\n const handleClick = (evt: Event) => {\n if (action === 'delete') {\n const confirm = this.renderRoot.querySelector('#confirm');\n (confirm as InternalConfirmDialog).show(evt.currentTarget as HTMLElement);\n } else {\n this.submit();\n }\n };\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${action}:before`)}\n\n <foxy-internal-confirm-dialog\n message=\"delete_prompt\"\n confirm=\"delete\"\n cancel=\"cancel\"\n header=\"delete\"\n theme=\"primary error\"\n lang=${lang}\n ns=${ns}\n id=\"confirm\"\n data-testid=\"confirm\"\n @hide=${(evt: DialogHideEvent) => {\n if (!evt.detail.cancelled) this.delete();\n }}\n >\n </foxy-internal-confirm-dialog>\n\n <vaadin-button\n class=\"w-full\"\n theme=${this.in('idle') ? `primary ${href ? 'error' : 'success'}` : ''}\n data-testid=${action}\n ?disabled=${(this.in({ idle: 'template' }) && !isValid) || isDisabled}\n @click=${handleClick}\n >\n <foxy-i18n ns=${ns} key=${action} lang=${lang}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot(`${action}:after`)}\n </div>\n `;\n }\n\n private async __cache(): Promise<void> {\n this.__cacheState = 'busy';\n\n try {\n const url = this.data?._links['fx:cache'].href ?? '';\n const response = await new EmailTemplateForm.API(this).fetch(url, { method: 'POST' });\n\n this.__cacheState = response.ok ? 'idle' : 'fail';\n } catch {\n this.__cacheState = 'fail';\n }\n }\n}\n"]}
1
+ {"version":3,"file":"EmailTemplateForm.js","sourceRoot":"","sources":["../../../../src/elements/public/EmailTemplateForm/EmailTemplateForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { CSSResultArray, PropertyDeclarations, TemplateResult, css, html } from 'lit-element';\nimport { Choice, Group, PropertyTable } from '../../private/index';\nimport { Data, Templates } from './types';\nimport { ScopedElementsMap, ScopedElementsMixin } from '@open-wc/scoped-elements';\n\nimport { ChoiceChangeEvent } from '../../private/events';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { DialogHideEvent } from '../../private/Dialog/DialogHideEvent';\nimport { InternalConfirmDialog } from '../../internal/InternalConfirmDialog/InternalConfirmDialog';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { TextAreaElement } from '@vaadin/vaadin-text-field/vaadin-text-area';\nimport { TextFieldElement } from '@vaadin/vaadin-text-field';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { ifDefined } from 'lit-html/directives/if-defined';\n\nconst NS = 'email-template-form';\nconst Base = ScopedElementsMixin(\n ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)))\n);\n\n/**\n * Form element for creating or editing email templates (`fx:email_template`).\n *\n * @slot description:before\n * @slot description:after\n *\n * @slot template-language:before\n * @slot template-language:after\n *\n * @slot content:before\n * @slot content: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-email-template-form\n * @since 1.14.0\n */\nexport class EmailTemplateForm extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __cacheState: { attribute: false },\n __contentChoice: { attribute: false },\n };\n }\n\n static get styles(): CSSResultArray {\n return [\n ...super.styles,\n css`\n #cached-content::part(input-field) {\n max-height: 15em;\n }\n `,\n ];\n }\n\n static get scopedElements(): ScopedElementsMap {\n return {\n 'foxy-internal-select-control': customElements.get('foxy-internal-select-control'),\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 'vaadin-text-field': customElements.get('vaadin-text-field'),\n 'vaadin-text-area': customElements.get('vaadin-text-area'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-property-table': PropertyTable,\n 'x-choice': Choice,\n 'x-group': Group,\n };\n }\n\n templates: Templates = {};\n\n private __cacheState: 'idle' | 'busy' | 'fail' = 'idle';\n\n private __contentChoice: 'default' | 'url' | 'clipboard' = 'default';\n\n private __templateLanguageOptions = [\n { label: 'Nunjucks', value: 'nunjucks' },\n { label: 'Handlebars', value: 'handlebars' },\n { label: 'Pug', value: 'pug' },\n { label: 'Twig', value: 'twig' },\n { label: 'EJS', value: 'ejs' },\n ];\n\n render(): TemplateResult {\n const { hiddenSelector, href, lang, ns } = this;\n const action = href ? 'delete' : 'create';\n const isBusy = this.in('busy');\n const isFail = this.in('fail');\n\n return html`\n <div class=\"space-y-m\">\n ${hiddenSelector.matches('description', true) ? '' : this.__renderDescription()}\n\n <foxy-internal-text-control infer=\"subject\"></foxy-internal-text-control>\n\n ${this.data?.description === 'Email Receipt Template'\n ? ''\n : html`\n <foxy-internal-select-control\n infer=\"template-language\"\n .options=${this.__templateLanguageOptions}\n >\n </foxy-internal-select-control>\n `}\n\n <!-- -->\n\n ${hiddenSelector.matches('content', true) ? '' : this.__renderContent()}\n ${hiddenSelector.matches('timestamps', true) || !href ? '' : this.__renderTimestamps()}\n ${hiddenSelector.matches(action) ? '' : this.__renderAction(action)}\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': !isBusy && !isFail,\n })}\n >\n <foxy-spinner\n layout=\"vertical\"\n class=\"m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l\"\n state=${isFail ? 'error' : isBusy ? 'busy' : 'empty'}\n lang=${lang}\n ns=\"${ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n private __renderDescription() {\n const scope = 'description';\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <vaadin-text-field\n data-testid=${scope}\n class=\"w-full mb-s\"\n label=${this.t(scope)}\n ?disabled=${!this.in('idle') || this.disabledSelector.matches(scope)}\n ?readonly=${this.readonlySelector.matches(scope)}\n .value=${this.form?.description ?? ''}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: CustomEvent) => {\n this.edit({ description: (evt.currentTarget as TextFieldElement).value });\n }}\n >\n </vaadin-text-field>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n }\n\n private __renderContent() {\n return html`\n <div data-testid=\"content\">\n ${this.renderTemplateOrSlot('content:before')}\n\n <div class=\"space-y-l\">\n ${this.__renderContentVariant('content_text_url', 'content_text', 'text_template')}\n ${this.__renderContentVariant('content_html_url', 'content_html', 'html_template')}\n </div>\n\n ${this.renderTemplateOrSlot('content:after')}\n </div>\n `;\n }\n\n private __renderContentVariant(\n urlPath: 'content_text_url' | 'content_html_url',\n textPath: 'content_text' | 'content_html',\n header: string\n ) {\n const isDisabled = !this.in('idle') || this.disabledSelector.matches('content', true);\n const isReadonly = this.readonlySelector.matches('content', true);\n const contentChoice = this.form[urlPath]\n ? 'url'\n : this.form[textPath]\n ? 'clipboard'\n : this.__contentChoice;\n\n return html`\n <x-group frame>\n <foxy-i18n\n class=${classMap({ 'transition-colors': true, 'text-disabled': isDisabled })}\n lang=${this.lang}\n slot=\"header\"\n key=${header}\n ns=${this.ns}\n >\n </foxy-i18n>\n\n <x-choice\n data-testid=\"${textPath.replace('_', '-')}-type\"\n .value=${contentChoice}\n .items=${['default', 'url', 'clipboard']}\n ?readonly=${isReadonly}\n ?disabled=${isDisabled}\n @change=${(evt: Event) => {\n if (evt instanceof ChoiceChangeEvent) {\n this.edit({ [textPath]: '', [urlPath]: '' });\n this.__contentChoice = evt.detail as 'url' | 'clipboard' | 'default';\n }\n }}\n >\n ${['default', 'url', 'clipboard'].map(value => {\n return html`\n <div slot=\"${value}-label\" class=\"py-s leading-s\">\n <foxy-i18n class=\"block\" lang=${this.lang} key=\"template_${value}\" ns=${this.ns}>\n </foxy-i18n>\n\n <foxy-i18n\n class=\"block text-s opacity-70\"\n lang=${this.lang}\n key=\"template_${value}_explainer\"\n ns=${this.ns}\n >\n </foxy-i18n>\n </div>\n `;\n })}\n\n <div slot=\"url\" ?hidden=${contentChoice !== 'url'}>\n <div class=\"flex items-center mt-0 mb-m\">\n <vaadin-text-field\n data-testid=\"${textPath.replace('_', '-')}-url\"\n value=${ifDefined(this.form[urlPath])}\n class=\"mr-s flex-grow\"\n ?readonly=${isReadonly}\n ?disabled=${isDisabled}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.submit()}\n @input=${(evt: CustomEvent) => {\n const value = (evt.currentTarget as TextFieldElement).value;\n this.edit({ [textPath]: '', [urlPath]: value });\n }}\n >\n </vaadin-text-field>\n\n <vaadin-button\n data-testid=\"${textPath.replace('_', '-')}-cache\"\n class=\"relative\"\n ?disabled=${isDisabled || this.__cacheState === 'busy'}\n ?hidden=${isReadonly || this.form[urlPath] !== this.data?.[urlPath]}\n @click=${this.__cache}\n >\n <foxy-i18n\n class=${classMap({\n 'relative transition-opacity': true,\n 'opacity-0': this.__cacheState !== 'idle',\n })}\n lang=${this.lang}\n key=\"cache\"\n ns=${this.ns}\n >\n </foxy-i18n>\n\n <div\n class=${classMap({\n 'absolute inset-0 flex transition-opacity': true,\n 'opacity-0': this.__cacheState === 'idle',\n })}\n >\n <foxy-spinner\n layout=\"no-label\"\n class=\"m-auto\"\n state=${this.__cacheState === 'fail' ? 'error' : 'busy'}\n lang=${this.lang}\n ns=${this.ns}\n >\n </foxy-spinner>\n </div>\n </vaadin-button>\n </div>\n </div>\n\n <div slot=\"clipboard\" ?hidden=${contentChoice !== 'clipboard'}>\n <vaadin-text-area\n data-testid=\"${textPath.replace('_', '-')}-clipboard\"\n id=\"cached-content\"\n class=\"w-full mb-m\"\n ?readonly=${isReadonly}\n ?disabled=${isDisabled}\n .value=${this.form[textPath]}\n @input=${(evt: CustomEvent) => {\n const value = (evt.currentTarget as TextAreaElement).value;\n this.edit({ [textPath]: value, [urlPath]: '' });\n }}\n >\n </vaadin-text-area>\n </div>\n </x-choice>\n </x-group>\n `;\n }\n\n private __renderTimestamps() {\n const scope = 'timestamps';\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${scope}:before`)}\n\n <x-property-table\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-property-table>\n\n ${this.renderTemplateOrSlot(`${scope}:after`)}\n </div>\n `;\n }\n\n private __renderAction(action: string) {\n const { disabledSelector, href, lang, ns } = this;\n\n const isTemplateValid = this.in({ idle: { template: { dirty: 'valid' } } });\n const isSnapshotValid = this.in({ idle: { snapshot: { dirty: 'valid' } } });\n const isDisabled = !this.in('idle') || disabledSelector.matches(action, true);\n const isValid = isTemplateValid || isSnapshotValid;\n\n const handleClick = (evt: Event) => {\n if (action === 'delete') {\n const confirm = this.renderRoot.querySelector('#confirm');\n (confirm as InternalConfirmDialog).show(evt.currentTarget as HTMLElement);\n } else {\n this.submit();\n }\n };\n\n return html`\n <div>\n ${this.renderTemplateOrSlot(`${action}:before`)}\n\n <foxy-internal-confirm-dialog\n message=\"delete_prompt\"\n confirm=\"delete\"\n cancel=\"cancel\"\n header=\"delete\"\n theme=\"primary error\"\n lang=${lang}\n ns=${ns}\n id=\"confirm\"\n data-testid=\"confirm\"\n @hide=${(evt: DialogHideEvent) => {\n if (!evt.detail.cancelled) this.delete();\n }}\n >\n </foxy-internal-confirm-dialog>\n\n <vaadin-button\n class=\"w-full\"\n theme=${this.in('idle') ? `primary ${href ? 'error' : 'success'}` : ''}\n data-testid=${action}\n ?disabled=${(this.in({ idle: 'template' }) && !isValid) || isDisabled}\n @click=${handleClick}\n >\n <foxy-i18n ns=${ns} key=${action} lang=${lang}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot(`${action}:after`)}\n </div>\n `;\n }\n\n private async __cache(): Promise<void> {\n this.__cacheState = 'busy';\n\n try {\n const url = this.data?._links['fx:cache'].href ?? '';\n const response = await new EmailTemplateForm.API(this).fetch(url, { method: 'POST' });\n\n this.__cacheState = response.ok ? 'idle' : 'fail';\n } catch {\n this.__cacheState = 'fail';\n }\n }\n}\n"]}
@@ -3,6 +3,7 @@ import '@vaadin/vaadin-text-field/vaadin-text-area';
3
3
  import '@vaadin/vaadin-button';
4
4
  import '../../internal/InternalSelectControl/index';
5
5
  import '../../internal/InternalConfirmDialog/index';
6
+ import '../../internal/InternalTextControl/index';
6
7
  import '../../internal/InternalSandbox/index';
7
8
  import '../Spinner/index';
8
9
  import '../I18n/index';
@@ -3,6 +3,7 @@ import '@vaadin/vaadin-text-field/vaadin-text-area';
3
3
  import '@vaadin/vaadin-button';
4
4
  import "../../internal/InternalSelectControl/index.js";
5
5
  import "../../internal/InternalConfirmDialog/index.js";
6
+ import "../../internal/InternalTextControl/index.js";
6
7
  import "../../internal/InternalSandbox/index.js";
7
8
  import "../Spinner/index.js";
8
9
  import "../I18n/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/EmailTemplateForm/index.ts"],"names":[],"mappings":"AAAA,OAAO,6CAA6C,CAAC;AACrD,OAAO,4CAA4C,CAAC;AACpD,OAAO,uBAAuB,CAAC;AAE/B,uDAAoD;AACpD,uDAAoD;AACpD,iDAA8C;AAE9C,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,iBAAiB,EAAE,+BAA4B;AAExD,cAAc,CAAC,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import '@vaadin/vaadin-text-field/vaadin-text-field';\nimport '@vaadin/vaadin-text-field/vaadin-text-area';\nimport '@vaadin/vaadin-button';\n\nimport '../../internal/InternalSelectControl/index';\nimport '../../internal/InternalConfirmDialog/index';\nimport '../../internal/InternalSandbox/index';\n\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport { EmailTemplateForm } from './EmailTemplateForm';\n\ncustomElements.define('foxy-email-template-form', EmailTemplateForm);\n\nexport { EmailTemplateForm };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/EmailTemplateForm/index.ts"],"names":[],"mappings":"AAAA,OAAO,6CAA6C,CAAC;AACrD,OAAO,4CAA4C,CAAC;AACpD,OAAO,uBAAuB,CAAC;AAE/B,uDAAoD;AACpD,uDAAoD;AACpD,qDAAkD;AAClD,iDAA8C;AAE9C,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,iBAAiB,EAAE,+BAA4B;AAExD,cAAc,CAAC,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import '@vaadin/vaadin-text-field/vaadin-text-field';\nimport '@vaadin/vaadin-text-field/vaadin-text-area';\nimport '@vaadin/vaadin-button';\n\nimport '../../internal/InternalSelectControl/index';\nimport '../../internal/InternalConfirmDialog/index';\nimport '../../internal/InternalTextControl/index';\nimport '../../internal/InternalSandbox/index';\n\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport { EmailTemplateForm } from './EmailTemplateForm';\n\ncustomElements.define('foxy-email-template-form', EmailTemplateForm);\n\nexport { EmailTemplateForm };\n"]}
@@ -2,13 +2,14 @@
2
2
  * i18next formatter that localizes ISO date.
3
3
  * @see https://www.i18next.com/translation-function/formatting
4
4
  */
5
- export const date = (value, _, lang) => {
5
+ export const date = (value, _, lang, options) => {
6
+ var _a, _b, _c;
6
7
  if (!value)
7
8
  return '$t(unknown)';
8
9
  const valueAsDate = new Date(value);
9
- const month = 'long';
10
- const year = new Date().getFullYear() === valueAsDate.getFullYear() ? undefined : 'numeric';
11
- const day = 'numeric';
10
+ const month = (_a = options === null || options === void 0 ? void 0 : options.month) !== null && _a !== void 0 ? _a : 'long';
11
+ const year = ((_b = options === null || options === void 0 ? void 0 : options.year) !== null && _b !== void 0 ? _b : new Date().getFullYear() === valueAsDate.getFullYear()) ? undefined : 'numeric';
12
+ const day = (_c = options === null || options === void 0 ? void 0 : options.day) !== null && _c !== void 0 ? _c : 'numeric';
12
13
  return valueAsDate.toLocaleDateString(lang, { month, year, day });
13
14
  };
14
15
  //# sourceMappingURL=date.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../../../src/elements/public/I18n/format/date.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAmB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAU,EAAE;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,aAAa,CAAC;IAEjC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC;IACrB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,GAAG,GAAG,SAAS,CAAC;IAEtB,OAAO,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC","sourcesContent":["import { FormatFunction } from 'i18next';\n\n/**\n * i18next formatter that localizes ISO date.\n * @see https://www.i18next.com/translation-function/formatting\n */\nexport const date: FormatFunction = (value, _, lang): string => {\n if (!value) return '$t(unknown)';\n\n const valueAsDate = new Date(value);\n const month = 'long';\n const year = new Date().getFullYear() === valueAsDate.getFullYear() ? undefined : 'numeric';\n const day = 'numeric';\n\n return valueAsDate.toLocaleDateString(lang, { month, year, day });\n};\n"]}
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../../../src/elements/public/I18n/format/date.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAmB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAU,EAAE;;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO,aAAa,CAAC;IAEjC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,KAAK,SAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,MAAM,CAAC;IACvC,MAAM,IAAI,GACR,OAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,mCAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,GAAG,SAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,mCAAI,SAAS,CAAC;IAEtC,OAAO,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC","sourcesContent":["import { FormatFunction } from 'i18next';\n\n/**\n * i18next formatter that localizes ISO date.\n * @see https://www.i18next.com/translation-function/formatting\n */\nexport const date: FormatFunction = (value, _, lang, options): string => {\n if (!value) return '$t(unknown)';\n\n const valueAsDate = new Date(value);\n const month = options?.month ?? 'long';\n const year =\n options?.year ?? new Date().getFullYear() === valueAsDate.getFullYear() ? undefined : 'numeric';\n const day = options?.day ?? 'numeric';\n\n return valueAsDate.toLocaleDateString(lang, { month, year, day });\n};\n"]}
@@ -0,0 +1,18 @@
1
+ import type { PropertyDeclarations, TemplateResult } from 'lit-element';
2
+ import type { Data } from './types';
3
+ import { NucleonElement } from '../NucleonElement/NucleonElement';
4
+ declare const Base: typeof NucleonElement & {
5
+ styles: import("lit-element").CSSResultArray;
6
+ } & import("lit-element").Constructor<import("../../../mixins/configurable").ConfigurableMixinHost> & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
7
+ defaultNS: string;
8
+ };
9
+ export declare class I18nEditor extends Base<Data> {
10
+ static get properties(): PropertyDeclarations;
11
+ languageOverrides: string | null;
12
+ selectedLanguage: string | null;
13
+ private __selectedTabIndex;
14
+ render(): TemplateResult;
15
+ private get __tabs();
16
+ private __renderOverridesLoader;
17
+ }
18
+ export {};
@@ -0,0 +1,173 @@
1
+ import { ConfigurableMixin } from "../../../mixins/configurable.js";
2
+ import { TranslatableMixin } from "../../../mixins/translatable.js";
3
+ import { ThemeableMixin } from "../../../mixins/themeable.js";
4
+ import { NucleonElement } from "../NucleonElement/NucleonElement.js";
5
+ import { ifDefined } from 'lit-html/directives/if-defined';
6
+ import { classMap } from "../../../utils/class-map.js";
7
+ import { repeat } from 'lit-html/directives/repeat';
8
+ import { html } from 'lit-html';
9
+ const NS = 'i18n-editor';
10
+ const Base = TranslatableMixin(ConfigurableMixin(ThemeableMixin(NucleonElement)), NS);
11
+ export class I18nEditor extends Base {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.languageOverrides = 'https://demo.api/hapi/language_overrides';
15
+ this.selectedLanguage = 'english';
16
+ this.__selectedTabIndex = 0;
17
+ }
18
+ static get properties() {
19
+ return {
20
+ ...super.properties,
21
+ languageOverrides: { attribute: 'language-overrides' },
22
+ selectedLanguage: { attribute: 'selected-language' },
23
+ __selectedTabIndex: { attribute: false },
24
+ };
25
+ }
26
+ render() {
27
+ var _a, _b, _c;
28
+ const tabs = this.__tabs;
29
+ const prefix = tabs[this.__selectedTabIndex];
30
+ const valuesForLang = (_c = (_a = this.data) === null || _a === void 0 ? void 0 : _a.values[(_b = this.selectedLanguage) !== null && _b !== void 0 ? _b : '']) !== null && _c !== void 0 ? _c : {};
31
+ const filteredValues = {};
32
+ const isSpinnerVisible = !this.in({ idle: 'snapshot' });
33
+ if (prefix) {
34
+ if (prefix.includes('_')) {
35
+ const group = prefix.substring(0, prefix.indexOf('_'));
36
+ const subGroup = prefix.substring(prefix.indexOf('_') + 1);
37
+ const values = valuesForLang[group][subGroup];
38
+ for (const key in values) {
39
+ filteredValues[`${group}_${subGroup}_${key}`] = values[key];
40
+ }
41
+ }
42
+ else {
43
+ for (const key in valuesForLang) {
44
+ if (key.startsWith(prefix))
45
+ filteredValues[key] = valuesForLang[key];
46
+ }
47
+ }
48
+ }
49
+ const overridesLoader = this.__renderOverridesLoader();
50
+ const overrides = overridesLoader.overrides;
51
+ return html `
52
+ ${overridesLoader.template}
53
+
54
+ <div aria-busy=${this.in('busy')} aria-live="polite" class="relative">
55
+ <div
56
+ class=${classMap({
57
+ 'transition-opacity grid grid-cols-1 gap-s': true,
58
+ 'opacity-0 pointer-events-none': isSpinnerVisible,
59
+ })}
60
+ >
61
+ <vaadin-tabs
62
+ selected=${this.__selectedTabIndex}
63
+ class="-mx-l"
64
+ theme="minimal"
65
+ @selected-changed=${(evt) => {
66
+ var _a;
67
+ const tabsElement = evt.currentTarget;
68
+ this.__selectedTabIndex = (_a = tabsElement.selected) !== null && _a !== void 0 ? _a : 0;
69
+ }}
70
+ >
71
+ ${tabs.map(name => {
72
+ const shortName = name.substring(name.indexOf('_') + 1).replace(/_/g, ' ');
73
+ const label = html `<span class="capitalize">${shortName}</span>`;
74
+ return html `<vaadin-tab>${label}</vaadin-tab>`;
75
+ })}
76
+ </vaadin-tabs>
77
+
78
+ ${repeat(Object.entries(filteredValues), ([keyOrGroup]) => keyOrGroup, ([keyOrGroup, translationOrDictionary]) => {
79
+ var _a;
80
+ let code;
81
+ let gateway;
82
+ let override;
83
+ if (keyOrGroup.startsWith('gateways_')) {
84
+ code = keyOrGroup.substring(prefix.length + 1);
85
+ gateway = prefix.substring(9);
86
+ override = overrides.find(o => o.code === code && o.gateway === gateway);
87
+ }
88
+ else {
89
+ code = keyOrGroup;
90
+ gateway = undefined;
91
+ override = overrides.find(o => o.code === code);
92
+ }
93
+ return html `
94
+ <foxy-internal-i18n-editor-entry
95
+ default-value=${translationOrDictionary}
96
+ gateway=${ifDefined(gateway)}
97
+ parent=${ifDefined((_a = this.languageOverrides) !== null && _a !== void 0 ? _a : void 0)}
98
+ code=${code}
99
+ infer=""
100
+ .data=${override !== null && override !== void 0 ? override : null}
101
+ >
102
+ </foxy-internal-i18n-editor-entry>
103
+ `;
104
+ })}
105
+ </div>
106
+
107
+ <div
108
+ data-testid="spinner"
109
+ class=${classMap({
110
+ 'transition-opacity absolute inset-0 flex': true,
111
+ 'opacity-0 pointer-events-none': !isSpinnerVisible,
112
+ })}
113
+ >
114
+ <foxy-spinner
115
+ layout=${this.in('busy') ? 'no-label' : 'horizontal'}
116
+ class="m-auto"
117
+ state=${this.in('fail') ? 'error' : this.in({ idle: 'template' }) ? 'empty' : 'busy'}
118
+ infer="spinner"
119
+ >
120
+ </foxy-spinner>
121
+ </div>
122
+ </div>
123
+ `;
124
+ }
125
+ get __tabs() {
126
+ var _a;
127
+ const values = this.selectedLanguage ? (_a = this.data) === null || _a === void 0 ? void 0 : _a.values[this.selectedLanguage] : undefined;
128
+ const tabs = Object.entries(values !== null && values !== void 0 ? values : {}).reduce((allKeys, [key, value]) => {
129
+ if (typeof value === 'string') {
130
+ const prefix = key.substring(0, key.indexOf('_'));
131
+ allKeys.add(prefix || key);
132
+ }
133
+ else {
134
+ Object.entries(value).forEach(([subKey, subValue]) => {
135
+ if (Object.keys(subValue).length === 0)
136
+ return;
137
+ allKeys.add(`${key}_${subKey}`);
138
+ });
139
+ }
140
+ return allKeys;
141
+ }, new Set());
142
+ return Array.from(tabs);
143
+ }
144
+ __renderOverridesLoader() {
145
+ var _a;
146
+ const loaders = Array.from(this.renderRoot.querySelectorAll('foxy-nucleon'));
147
+ const overrides = loaders.reduce((result, loader) => { var _a, _b; return [...result, ...((_b = (_a = loader.data) === null || _a === void 0 ? void 0 : _a._embedded['fx:language_overrides']) !== null && _b !== void 0 ? _b : [])]; }, []);
148
+ const firstLoader = loaders[0];
149
+ const loaderTemplates = new Array(Math.ceil((((_a = firstLoader === null || firstLoader === void 0 ? void 0 : firstLoader.data) === null || _a === void 0 ? void 0 : _a.total_items) || 300) / 300))
150
+ .fill(0)
151
+ .map((_, index) => {
152
+ var _a;
153
+ try {
154
+ const url = new URL((_a = this.languageOverrides) !== null && _a !== void 0 ? _a : '');
155
+ url.searchParams.set('offset', String(index * 300));
156
+ url.searchParams.set('limit', '300');
157
+ return html `
158
+ <foxy-nucleon infer="" href=${url.toString()} @update=${() => this.requestUpdate()}>
159
+ </foxy-nucleon>
160
+ `;
161
+ }
162
+ catch (_b) {
163
+ return undefined;
164
+ }
165
+ });
166
+ return {
167
+ template: html `<div class="hidden">${loaderTemplates}</div>`,
168
+ overrides,
169
+ loaders,
170
+ };
171
+ }
172
+ }
173
+ //# sourceMappingURL=I18nEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"I18nEditor.js","sourceRoot":"","sources":["../../../../src/elements/public/I18nEditor/I18nEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations, TemplateResult } from 'lit-element';\nimport type { Data, Overrides } from './types';\nimport type { TabsElement } from '@vaadin/vaadin-tabs';\nimport type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { NucleonElement } from '../NucleonElement/NucleonElement';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { classMap } from '../../../utils/class-map';\nimport { repeat } from 'lit-html/directives/repeat';\nimport { html } from 'lit-html';\n\nconst NS = 'i18n-editor';\nconst Base = TranslatableMixin(ConfigurableMixin(ThemeableMixin(NucleonElement)), NS);\n\nexport class I18nEditor extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n languageOverrides: { attribute: 'language-overrides' },\n selectedLanguage: { attribute: 'selected-language' },\n __selectedTabIndex: { attribute: false },\n };\n }\n\n languageOverrides: string | null = 'https://demo.api/hapi/language_overrides';\n\n selectedLanguage: string | null = 'english';\n\n private __selectedTabIndex = 0;\n\n render(): TemplateResult {\n const tabs = this.__tabs;\n const prefix = tabs[this.__selectedTabIndex] as string | undefined;\n const valuesForLang = this.data?.values[this.selectedLanguage ?? ''] ?? {};\n const filteredValues: Record<string, string> = {};\n const isSpinnerVisible = !this.in({ idle: 'snapshot' });\n\n if (prefix) {\n if (prefix.includes('_')) {\n const group = prefix.substring(0, prefix.indexOf('_'));\n const subGroup = prefix.substring(prefix.indexOf('_') + 1);\n const values = (valuesForLang[group] as Record<string, Record<string, string>>)[subGroup];\n\n for (const key in values) {\n filteredValues[`${group}_${subGroup}_${key}`] = values[key];\n }\n } else {\n for (const key in valuesForLang) {\n if (key.startsWith(prefix)) filteredValues[key] = valuesForLang[key] as string;\n }\n }\n }\n\n const overridesLoader = this.__renderOverridesLoader();\n const overrides = overridesLoader.overrides;\n\n return html`\n ${overridesLoader.template}\n\n <div aria-busy=${this.in('busy')} aria-live=\"polite\" class=\"relative\">\n <div\n class=${classMap({\n 'transition-opacity grid grid-cols-1 gap-s': true,\n 'opacity-0 pointer-events-none': isSpinnerVisible,\n })}\n >\n <vaadin-tabs\n selected=${this.__selectedTabIndex}\n class=\"-mx-l\"\n theme=\"minimal\"\n @selected-changed=${(evt: CustomEvent) => {\n const tabsElement = evt.currentTarget as TabsElement;\n this.__selectedTabIndex = tabsElement.selected ?? 0;\n }}\n >\n ${tabs.map(name => {\n const shortName = name.substring(name.indexOf('_') + 1).replace(/_/g, ' ');\n const label = html`<span class=\"capitalize\">${shortName}</span>`;\n return html`<vaadin-tab>${label}</vaadin-tab>`;\n })}\n </vaadin-tabs>\n\n ${repeat(\n Object.entries(filteredValues),\n ([keyOrGroup]) => keyOrGroup,\n ([keyOrGroup, translationOrDictionary]) => {\n let code: string;\n let gateway: string | undefined;\n let override: Overrides['_embedded']['fx:language_overrides'][number] | undefined;\n\n if (keyOrGroup.startsWith('gateways_')) {\n code = keyOrGroup.substring(prefix!.length + 1);\n gateway = prefix!.substring(9);\n override = overrides.find(o => o.code === code && o.gateway === gateway);\n } else {\n code = keyOrGroup;\n gateway = undefined;\n override = overrides.find(o => o.code === code);\n }\n\n return html`\n <foxy-internal-i18n-editor-entry\n default-value=${translationOrDictionary}\n gateway=${ifDefined(gateway)}\n parent=${ifDefined(this.languageOverrides ?? void 0)}\n code=${code}\n infer=\"\"\n .data=${override ?? null}\n >\n </foxy-internal-i18n-editor-entry>\n `;\n }\n )}\n </div>\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition-opacity absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': !isSpinnerVisible,\n })}\n >\n <foxy-spinner\n layout=${this.in('busy') ? 'no-label' : 'horizontal'}\n class=\"m-auto\"\n state=${this.in('fail') ? 'error' : this.in({ idle: 'template' }) ? 'empty' : 'busy'}\n infer=\"spinner\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n private get __tabs() {\n const values = this.selectedLanguage ? this.data?.values[this.selectedLanguage] : undefined;\n\n const tabs = Object.entries(values ?? {}).reduce((allKeys, [key, value]) => {\n if (typeof value === 'string') {\n const prefix = key.substring(0, key.indexOf('_'));\n allKeys.add(prefix || key);\n } else {\n Object.entries(value).forEach(([subKey, subValue]) => {\n if (Object.keys(subValue).length === 0) return;\n allKeys.add(`${key}_${subKey}`);\n });\n }\n\n return allKeys;\n }, new Set<string>());\n\n return Array.from(tabs);\n }\n\n private __renderOverridesLoader() {\n type Loader = NucleonElement<Overrides>;\n\n const loaders = Array.from(this.renderRoot.querySelectorAll<Loader>('foxy-nucleon'));\n const overrides = loaders.reduce(\n (result, loader) => [...result, ...(loader.data?._embedded['fx:language_overrides'] ?? [])],\n [] as Resource<Rels.LanguageOverride>[]\n );\n\n const firstLoader = loaders[0] as Loader | undefined;\n\n const loaderTemplates = new Array(Math.ceil((firstLoader?.data?.total_items || 300) / 300))\n .fill(0)\n .map((_, index) => {\n try {\n const url = new URL(this.languageOverrides ?? '');\n\n url.searchParams.set('offset', String(index * 300));\n url.searchParams.set('limit', '300');\n\n return html`\n <foxy-nucleon infer=\"\" href=${url.toString()} @update=${() => this.requestUpdate()}>\n </foxy-nucleon>\n `;\n } catch {\n return undefined;\n }\n });\n\n return {\n template: html`<div class=\"hidden\">${loaderTemplates}</div>`,\n overrides,\n loaders,\n };\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import '@vaadin/vaadin-tabs';
2
+ import '../NucleonElement/index';
3
+ import '../Spinner/index';
4
+ import '../I18n/index';
5
+ import './internal/InternalI18nEditorEntry/index';
6
+ import { I18nEditor } from './I18nEditor';
7
+ export { I18nEditor };
@@ -0,0 +1,9 @@
1
+ import '@vaadin/vaadin-tabs';
2
+ import "../NucleonElement/index.js";
3
+ import "../Spinner/index.js";
4
+ import "../I18n/index.js";
5
+ import "./internal/InternalI18nEditorEntry/index.js";
6
+ import { I18nEditor } from "./I18nEditor.js";
7
+ customElements.define('foxy-i18n-editor', I18nEditor);
8
+ export { I18nEditor };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/I18nEditor/index.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B,oCAAiC;AACjC,6BAA0B;AAC1B,0BAAuB;AAEvB,qDAAkD;AAElD,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-tabs';\n\nimport '../NucleonElement/index';\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport './internal/InternalI18nEditorEntry/index';\n\nimport { I18nEditor } from './I18nEditor';\n\ncustomElements.define('foxy-i18n-editor', I18nEditor);\n\nexport { I18nEditor };\n"]}
@@ -0,0 +1,17 @@
1
+ import type { CSSResultArray, PropertyDeclarations, TemplateResult } from 'lit-element';
2
+ import type { Data } from './types';
3
+ import { NucleonElement } from '../../../NucleonElement/NucleonElement';
4
+ declare const Base: typeof NucleonElement & {
5
+ styles: CSSResultArray;
6
+ } & import("lit-element").Constructor<import("../../../../../mixins/configurable").ConfigurableMixinHost> & import("lit-element").Constructor<import("../../../../../mixins/translatable").TranslatableMixinHost> & {
7
+ defaultNS: string;
8
+ };
9
+ export declare class InternalI18nEditorEntry extends Base<Data> {
10
+ static get properties(): PropertyDeclarations;
11
+ static get styles(): CSSResultArray;
12
+ defaultValue: string | null;
13
+ gateway: string | null;
14
+ code: string | null;
15
+ render(): TemplateResult;
16
+ }
17
+ export {};