@foxy.io/elements 1.15.0-beta.1 → 1.15.0-beta.2

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 (177) 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-applied-tax-card.js +1 -1
  5. package/dist/cdn/foxy-attribute-card.js +1 -1
  6. package/dist/cdn/foxy-attribute-form.js +1 -1
  7. package/dist/cdn/foxy-cancellation-form.js +1 -1
  8. package/dist/cdn/foxy-collection-page.js +1 -1
  9. package/dist/cdn/foxy-collection-pages.js +1 -1
  10. package/dist/cdn/foxy-coupon-card.js +1 -0
  11. package/dist/cdn/foxy-coupon-code-form.js +1 -0
  12. package/dist/cdn/foxy-coupon-codes-form.js +1 -0
  13. package/dist/cdn/foxy-coupon-form.js +1 -0
  14. package/dist/cdn/foxy-custom-field-card.js +1 -1
  15. package/dist/cdn/foxy-custom-field-form.js +1 -1
  16. package/dist/cdn/foxy-customer-api.js +1 -1
  17. package/dist/cdn/foxy-customer-card.js +1 -1
  18. package/dist/cdn/foxy-customer-form.js +1 -1
  19. package/dist/cdn/foxy-customer-portal-settings.js +4 -807
  20. package/dist/cdn/foxy-customer-portal.js +4 -4
  21. package/dist/cdn/foxy-customer.js +1 -1
  22. package/dist/cdn/foxy-customers-table.js +1 -1
  23. package/dist/cdn/foxy-discount-card.js +1 -1
  24. package/dist/cdn/foxy-donation.js +1 -1
  25. package/dist/cdn/foxy-email-template-form.js +1 -1
  26. package/dist/cdn/foxy-error-entry-card.js +1 -1
  27. package/dist/cdn/foxy-form-dialog.js +1 -1
  28. package/dist/cdn/foxy-generate-codes-form.js +1 -0
  29. package/dist/cdn/foxy-i18n.js +1 -1
  30. package/dist/cdn/foxy-items-form.js +1 -1
  31. package/dist/cdn/foxy-nucleon-element.js +1 -1
  32. package/dist/cdn/foxy-pagination.js +1 -0
  33. package/dist/cdn/foxy-payment-card.js +1 -1
  34. package/dist/cdn/foxy-payment-method-card.js +1 -1
  35. package/dist/cdn/foxy-query-builder.js +1 -69
  36. package/dist/cdn/foxy-sign-in-form.js +1 -1
  37. package/dist/cdn/foxy-spinner.js +1 -1
  38. package/dist/cdn/foxy-subscription-card.js +1 -1
  39. package/dist/cdn/foxy-subscription-form.js +3 -3
  40. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  41. package/dist/cdn/foxy-table.js +1 -1
  42. package/dist/cdn/foxy-tax-card.js +1 -1
  43. package/dist/cdn/foxy-tax-form.js +1 -1
  44. package/dist/cdn/foxy-template-config-form.js +1 -1
  45. package/dist/cdn/foxy-template-form.js +1 -1
  46. package/dist/cdn/foxy-transaction-card.js +1 -1
  47. package/dist/cdn/foxy-transactions-table.js +1 -1
  48. package/dist/cdn/foxy-user-form.js +1 -1
  49. package/dist/cdn/foxy-users-table.js +1 -1
  50. package/dist/cdn/{shared-5c8b531d.js → shared-0bda8ecb.js} +1 -1
  51. package/dist/cdn/{shared-07abcd7b.js → shared-0fcdd1c4.js} +1 -1
  52. package/dist/cdn/{shared-a46edf4b.js → shared-30131f76.js} +1 -1
  53. package/dist/cdn/shared-36629ded.js +131 -0
  54. package/dist/cdn/{shared-bc2bfe52.js → shared-4038cb18.js} +1 -1
  55. package/dist/cdn/{shared-44cfc617.js → shared-423a4840.js} +1 -1
  56. package/dist/cdn/shared-4fa5f144.js +1 -0
  57. package/dist/cdn/shared-51b5e223.js +1 -0
  58. package/dist/cdn/{shared-593f7e2c.js → shared-51e28c83.js} +1 -1
  59. package/dist/cdn/shared-710ed658.js +134 -0
  60. package/dist/cdn/shared-800a5471.js +1 -0
  61. package/dist/cdn/{shared-8a7bee0d.js → shared-8f7a66c4.js} +1 -1
  62. package/dist/cdn/{shared-91e768be.js → shared-9af7b5f0.js} +1 -1
  63. package/dist/cdn/{shared-7a42073a.js → shared-a11160e7.js} +5 -5
  64. package/dist/cdn/{shared-5f54e916.js → shared-a4e6ecb0.js} +1 -1
  65. package/dist/cdn/{shared-b5147166.js → shared-a8d96c23.js} +1 -1
  66. package/dist/cdn/{shared-322e60b1.js → shared-b03b6d72.js} +1 -1
  67. package/dist/cdn/shared-b2330475.js +1 -0
  68. package/dist/cdn/{shared-1761daef.js → shared-c1dadefe.js} +1 -1
  69. package/dist/cdn/shared-c6a4b2d6.js +1 -0
  70. package/dist/cdn/shared-ccea5a33.js +69 -0
  71. package/dist/cdn/shared-cd3c902e.js +1 -0
  72. package/dist/cdn/{shared-34b2c1e2.js → shared-d3831f99.js} +1 -1
  73. package/dist/cdn/shared-d9a260f0.js +1 -0
  74. package/dist/cdn/{shared-e5cbf291.js → shared-f875a4f8.js} +1 -1
  75. package/dist/cdn/{shared-e7f8ffe9.js → shared-fb403e1f.js} +1 -1
  76. package/dist/cdn/shared-ff149b55.js +804 -0
  77. package/dist/cdn/translations/shared/en.json +105 -0
  78. package/dist/elements/private/Checkbox/Checkbox.js +36 -22
  79. package/dist/elements/private/Checkbox/Checkbox.js.map +1 -1
  80. package/dist/elements/private/EditableList/EditableList.d.ts +20 -0
  81. package/dist/elements/private/EditableList/EditableList.js +123 -0
  82. package/dist/elements/private/EditableList/EditableList.js.map +1 -0
  83. package/dist/elements/public/CouponCard/CouponCard.d.ts +29 -0
  84. package/dist/elements/public/CouponCard/CouponCard.js +130 -0
  85. package/dist/elements/public/CouponCard/CouponCard.js.map +1 -0
  86. package/dist/elements/public/CouponCard/index.d.ts +5 -0
  87. package/dist/elements/public/CouponCard/index.js +7 -0
  88. package/dist/elements/public/CouponCard/index.js.map +1 -0
  89. package/dist/elements/public/CouponCard/types.d.ts +15 -0
  90. package/dist/elements/public/CouponCard/types.js +2 -0
  91. package/dist/elements/public/CouponCard/types.js.map +1 -0
  92. package/dist/elements/public/CouponCodeForm/CouponCodeForm.d.ts +45 -0
  93. package/dist/elements/public/CouponCodeForm/CouponCodeForm.js +218 -0
  94. package/dist/elements/public/CouponCodeForm/CouponCodeForm.js.map +1 -0
  95. package/dist/elements/public/CouponCodeForm/index.d.ts +8 -0
  96. package/dist/elements/public/CouponCodeForm/index.js +10 -0
  97. package/dist/elements/public/CouponCodeForm/index.js.map +1 -0
  98. package/dist/elements/public/CouponCodeForm/types.d.ts +15 -0
  99. package/dist/elements/public/CouponCodeForm/types.js +2 -0
  100. package/dist/elements/public/CouponCodeForm/types.js.map +1 -0
  101. package/dist/elements/public/CouponCodesForm/CouponCodesForm.d.ts +29 -0
  102. package/dist/elements/public/CouponCodesForm/CouponCodesForm.js +209 -0
  103. package/dist/elements/public/CouponCodesForm/CouponCodesForm.js.map +1 -0
  104. package/dist/elements/public/CouponCodesForm/index.d.ts +8 -0
  105. package/dist/elements/public/CouponCodesForm/index.js +12 -0
  106. package/dist/elements/public/CouponCodesForm/index.js.map +1 -0
  107. package/dist/elements/public/CouponCodesForm/internal/InternalCouponCodesFormListItem.d.ts +14 -0
  108. package/dist/elements/public/CouponCodesForm/internal/InternalCouponCodesFormListItem.js +48 -0
  109. package/dist/elements/public/CouponCodesForm/internal/InternalCouponCodesFormListItem.js.map +1 -0
  110. package/dist/elements/public/CouponCodesForm/types.d.ts +16 -0
  111. package/dist/elements/public/CouponCodesForm/types.js +2 -0
  112. package/dist/elements/public/CouponCodesForm/types.js.map +1 -0
  113. package/dist/elements/public/CouponForm/CouponForm.d.ts +77 -0
  114. package/dist/elements/public/CouponForm/CouponForm.js +1266 -0
  115. package/dist/elements/public/CouponForm/CouponForm.js.map +1 -0
  116. package/dist/elements/public/CouponForm/index.d.ts +19 -0
  117. package/dist/elements/public/CouponForm/index.js +21 -0
  118. package/dist/elements/public/CouponForm/index.js.map +1 -0
  119. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPage.d.ts +19 -0
  120. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPage.js +98 -0
  121. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPage.js.map +1 -0
  122. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItem.d.ts +19 -0
  123. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItem.js +51 -0
  124. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItem.js.map +1 -0
  125. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItemContent.d.ts +19 -0
  126. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItemContent.js +52 -0
  127. package/dist/elements/public/CouponForm/private/CategoryRestrictionsPageItemContent.js.map +1 -0
  128. package/dist/elements/public/CouponForm/types.d.ts +27 -0
  129. package/dist/elements/public/CouponForm/types.js +2 -0
  130. package/dist/elements/public/CouponForm/types.js.map +1 -0
  131. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js +19 -6
  132. package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js.map +1 -1
  133. package/dist/elements/public/GenerateCodesForm/GenerateCodesForm.d.ts +39 -0
  134. package/dist/elements/public/GenerateCodesForm/GenerateCodesForm.js +197 -0
  135. package/dist/elements/public/GenerateCodesForm/GenerateCodesForm.js.map +1 -0
  136. package/dist/elements/public/GenerateCodesForm/index.d.ts +8 -0
  137. package/dist/elements/public/GenerateCodesForm/index.js +10 -0
  138. package/dist/elements/public/GenerateCodesForm/index.js.map +1 -0
  139. package/dist/elements/public/GenerateCodesForm/types.d.ts +24 -0
  140. package/dist/elements/public/GenerateCodesForm/types.js +2 -0
  141. package/dist/elements/public/GenerateCodesForm/types.js.map +1 -0
  142. package/dist/elements/public/I18n/I18n.js +1 -1
  143. package/dist/elements/public/I18n/I18n.js.map +1 -1
  144. package/dist/elements/public/I18n/format/date.js +7 -6
  145. package/dist/elements/public/I18n/format/date.js.map +1 -1
  146. package/dist/elements/public/I18n/format/discount.d.ts +6 -0
  147. package/dist/elements/public/I18n/format/discount.js +20 -0
  148. package/dist/elements/public/I18n/format/discount.js.map +1 -0
  149. package/dist/elements/public/I18n/format/index.js +4 -0
  150. package/dist/elements/public/I18n/format/index.js.map +1 -1
  151. package/dist/elements/public/I18n/format/ordinal.d.ts +6 -0
  152. package/dist/elements/public/I18n/format/ordinal.js +9 -0
  153. package/dist/elements/public/I18n/format/ordinal.js.map +1 -0
  154. package/dist/elements/public/Pagination/Pagination.d.ts +37 -0
  155. package/dist/elements/public/Pagination/Pagination.js +154 -0
  156. package/dist/elements/public/Pagination/Pagination.js.map +1 -0
  157. package/dist/elements/public/Pagination/index.d.ts +6 -0
  158. package/dist/elements/public/Pagination/index.js +8 -0
  159. package/dist/elements/public/Pagination/index.js.map +1 -0
  160. package/dist/elements/public/Table/Table.js +20 -5
  161. package/dist/elements/public/Table/Table.js.map +1 -1
  162. package/dist/elements/public/index.d.ts +6 -0
  163. package/dist/elements/public/index.defined.d.ts +6 -0
  164. package/dist/elements/public/index.defined.js +6 -0
  165. package/dist/elements/public/index.defined.js.map +1 -1
  166. package/dist/elements/public/index.js +6 -0
  167. package/dist/elements/public/index.js.map +1 -1
  168. package/dist/mixins/themeable.js +80 -4
  169. package/dist/mixins/themeable.js.map +1 -1
  170. package/package.json +1 -1
  171. package/dist/cdn/shared-00563cb0.js +0 -1
  172. package/dist/cdn/shared-35dbd2c5.js +0 -1
  173. package/dist/cdn/shared-9a40309d.js +0 -1
  174. package/dist/cdn/shared-ce1da35d.js +0 -1
  175. package/dist/cdn/shared-d01d809a.js +0 -1
  176. package/dist/cdn/shared-d8ffb279.js +0 -264
  177. package/dist/cdn/shared-f1dc1c6c.js +0 -1
@@ -8,12 +8,20 @@
8
8
  "address2": "Address Line 2",
9
9
  "address_name": "Address name",
10
10
  "address_plural": "Addresses",
11
+ "allow": "Allow",
11
12
  "allowlist": "Allow all except",
13
+ "allunits_price_amount_discount_summary": "{{adjustment}}¤ each after {{from}}",
14
+ "allunits_price_percentage_discount_summary": "{{adjustment, percent}} after {{from}}",
15
+ "allunits_quantity_amount_discount_summary": "{{adjustment}}¤ each on orders of {{from}}+",
16
+ "allunits_quantity_percentage_discount_summary": "{{adjustment, percent}} on orders of {{from}}+",
17
+ "apply_taxes_before_coupon": "Apply taxes before this coupon",
18
+ "apply_taxes_before_coupon_explainer": "Calculate taxes before applying this coupon.",
12
19
  "attribute_plural": "Attributes",
13
20
  "back": "Back",
14
21
  "backend_developer": "Backend developer",
15
22
  "backend_developer_explainer": "Manages server-side code in PHP, Python, Ruby, etc.",
16
23
  "billing": "Billing",
24
+ "block": "Block",
17
25
  "blocklist": "Ban all except",
18
26
  "cache": "Cache",
19
27
  "cancel": "Cancel",
@@ -25,6 +33,8 @@
25
33
  "cart_type_default_explainer": "Default cart appearance in version 2.0",
26
34
  "cart_type_fullpage": "Full page",
27
35
  "cart_type_fullpage_explainer": "Send all customers to a full page cart while still including minicart functionality",
36
+ "category_restrictions": "Category restrictions",
37
+ "category_restrictions_helper_text": "Select which item categories this coupon can be applied to. If you’d like this coupon to be available to all items regardless of the category, keep your selection empty. All changes are saved automatically.",
28
38
  "checked_by_default": "Checked by default",
29
39
  "checkout_type": "Accounts",
30
40
  "checkout_type_account_only": "Allow customer accounts only",
@@ -33,16 +43,30 @@
33
43
  "checkout_type_guest_only": "Allow guests only",
34
44
  "checkout_type_helper_text": "If you select $t(checkout_type_guest_only), your store will not be able to use subscriptions.",
35
45
  "city": "City",
46
+ "clear_filters": "Clear filters",
36
47
  "client": "Client",
37
48
  "close": "Close",
38
49
  "close_icon": "Close icon",
50
+ "code": "Code",
51
+ "code_import_hint": "Paste multiple space-separated codes in the field above to add all of them at once. Importing duplicate codes clears their usage stats.",
52
+ "code_plural": "Codes",
53
+ "combinable": "Combine with other coupons",
54
+ "combinable_explainer": "Let customers apply this coupon when there are other coupons in the cart.",
55
+ "combine_with_category_discounts": "Combine with category discounts",
56
+ "combine_with_category_discounts_explainer": "Let customers apply this coupon when category discounts are applied to the cart.",
57
+ "combine_with_line_discounts": "Combine with line item discounts",
58
+ "combine_with_line_discounts_explainer": "Let customers apply this coupon when line item discounts are applied to the cart.",
39
59
  "company": "Company",
40
60
  "consent": "Consent",
61
+ "copied": "Copied",
62
+ "copy": "Copy",
41
63
  "country": "Country",
42
64
  "coupon_entry": "Coupon code",
65
+ "coupon_name_helper_text": "Coupon name is visible to the customers.",
43
66
  "create": "Create",
44
67
  "custom_config": "Custom config",
45
68
  "custom_config_helper_text": "If you have any custom values you'd like to make available to your twig template, you can add them here as a valid JSON string.",
69
+ "custom_discount": "Custom discount",
46
70
  "custom_fields": "Custom fields",
47
71
  "custom_fields_helper_text": "If you have information you'd like to collect from the customer on the checkout page, you can add custom form fields here which will be added to the checkout form. We recommend you follow the same HTML container structure used on other checkout fields for consistency. You can use Twig syntax here.",
48
72
  "custom_footer": "Custom footer",
@@ -55,6 +79,10 @@
55
79
  "date": "{{value, date}}",
56
80
  "date_created": "Created on",
57
81
  "date_modified": "Last updated",
82
+ "date_range_any": "Ongoing",
83
+ "date_range_complete": "{{start, date}} – {{end, date}}",
84
+ "date_range_from": "From {{start, date}}",
85
+ "date_range_until": "Until {{end, date}}",
58
86
  "day": "Day",
59
87
  "day_plural": "Days",
60
88
  "default": "Default",
@@ -66,19 +94,25 @@
66
94
  "designer": "Designer",
67
95
  "designer_explainer": "Manages appearance, art and user interface.",
68
96
  "disabled": "Disabled",
97
+ "discount_preset": "Discount preset",
98
+ "discount_summary": "{{params, discount}}",
69
99
  "display_sdta": "Display a Secure Data Transfer agreement to EU customers",
70
100
  "display_sdta_explainer": "If you have customers in the European Union, enable this feature so they can opt in to sending their data to our secure servers in the United States.",
71
101
  "display_tos_link": "Display a link to Terms & Conditions",
72
102
  "display_tos_link_explainer": "Include a checkbox to ask your customers to agree to your Terms of Service.",
103
+ "duplicate": "Duplicate",
73
104
  "email": "Email",
74
105
  "enable_postcode_lookup": "Offer city and state suggestions based on postcode",
75
106
  "enabled": "Enabled",
76
107
  "end_date": "End date",
77
108
  "end_subscription": "End subscription",
78
109
  "end_subscription_explainer": "Your subscription will remain active until the selected end date. You might have to resubscribe if you decide to resume this subscription later.",
110
+ "error": "Error",
79
111
  "expires": "Expires",
80
112
  "field": "Field",
81
113
  "field_plural": "Fields",
114
+ "filter": "Filter",
115
+ "first": "First",
82
116
  "first_name": "First name",
83
117
  "foxycomplete": "Location autocomplete",
84
118
  "foxycomplete_combobox": "Combo Box",
@@ -99,17 +133,31 @@
99
133
  "ga_account_id_explainer": "You can find the ID in the Admin section of your Analytics in Tracking info > Tracking code.",
100
134
  "ga_include_on_site": "Include via loader.js",
101
135
  "ga_include_on_site_explainer": "Enable Google Analytics on any page where the loader.js file is included.",
136
+ "generate": "Generate",
137
+ "generate_codes_done": "All done! We've added new codes for you.",
102
138
  "hidden": "Hidden",
139
+ "hidden_codes_explainer": "We’ve hidden some of your codes because there were too many of them. Don’t worry – we’ll import them anyway.",
140
+ "hidden_codes_header": "{{count}} code is hidden",
141
+ "hidden_codes_header_plural": "{{count}} codes are hidden",
103
142
  "hidden_fields": "Hidden fields",
104
143
  "html_template": "HTML template",
144
+ "import": "Import",
145
+ "import_codes_done": "All done! We've imported your codes into the system.",
146
+ "incremental_price_amount_discount_summary": "{{adjustment}}¤ each on orders of {{from}}+",
147
+ "incremental_price_percentage_discount_summary": "{{adjustment, percent}} on orders of {{from}}+",
148
+ "incremental_quantity_amount_discount_summary": "{{adjustment}}¤ each on items {{from}}+",
149
+ "incremental_quantity_percentage_discount_summary": "{{adjustment, percent}} on items {{from}}+",
105
150
  "invalid_credential_error": "Incorrect email or password. Please check your credentials and try again.",
106
151
  "is_defined_false": "Not defined",
107
152
  "is_defined_true": "Defined",
108
153
  "item": "Item",
109
154
  "item_plural": "Items",
155
+ "last": "Last",
110
156
  "last_4_digits": "Last 4 digits",
111
157
  "last_login_date": "Last login",
112
158
  "last_name": "Last name",
159
+ "leave_empty_for_random_codes": "Leave empty to generate completely random codes.",
160
+ "length": "Length",
113
161
  "load_more": "Load more",
114
162
  "loading_busy": "Loading",
115
163
  "loading_empty": "No data",
@@ -129,13 +177,17 @@
129
177
  "month_plural": "Months",
130
178
  "monthly": "Monthly",
131
179
  "monthly_plural": "Every {{count}} months",
180
+ "multiple_codes_allowed": "Allow multiple codes per customer",
181
+ "multiple_codes_allowed_explainer": "Let customers apply this coupon multiple times to the same order.",
132
182
  "name": "Name",
133
183
  "new_password": "New password",
134
184
  "new_password_format_error": "The new password you've chosen is too weak. Please enter a secure new password.",
135
185
  "new_password_required_error": "To keep your account secure, please change your password before logging in this time.",
136
186
  "newsletter_subscribe": "Allow users to sign up for your newsletter",
137
187
  "newsletter_subscribe_explainer": "This includes a checkbox on your checkout to allow customers to choose to sign up to your newsletter, available in the transaction reports, the API and webhooks.",
188
+ "next": "Next",
138
189
  "next_transaction_date": "Next transaction date",
190
+ "number_of_codes": "Number of codes",
139
191
  "open_icon": "Open icon",
140
192
  "operator_equal": "Equal",
141
193
  "operator_greaterthan": "Greater than",
@@ -145,20 +197,32 @@
145
197
  "operator_lessthan": "Less than",
146
198
  "operator_lessthanorequal": "Less than or equal",
147
199
  "operator_not": "Not equal",
200
+ "option_plural": "Options",
148
201
  "optional": "Optional",
149
202
  "or": "Or",
203
+ "ordinal_few": "rd",
204
+ "ordinal_many": "th",
205
+ "ordinal_one": "st",
206
+ "ordinal_other": "th",
207
+ "ordinal_two": "nd",
208
+ "ordinal_zero": "th",
209
+ "pagination": "{{from}}-{{to}} out of {{total}}",
150
210
  "password": "Password",
151
211
  "payment_method_plural": "Payment methods",
152
212
  "percent": "{{fraction, percent}}",
153
213
  "phone": "Phone",
154
214
  "postal_code": "Postal code",
215
+ "prefix": "Prefix",
155
216
  "preview": "Preview",
217
+ "previous": "Previous",
156
218
  "price": "{{amount, price}}",
157
219
  "price_recurring": "{{amount, price}} $t(frequency, { \"count\": \"{{count}}\", \"units\": \"{{units}}\" })",
158
220
  "price_twice_a_month": "{{amount, price}} $t(twice_a_month)",
159
221
  "product_category": "Product category",
160
222
  "product_code": "Product code",
161
223
  "product_options": "Product options",
224
+ "product_restrictions": "Product restrictions",
225
+ "product_restrictions_explainer": "If you want to limit which products can use this coupon, you can enter full product codes or partial product codes using * as a wild card at the beginning or end of the value. So abc123, fun_*, *-small would match abc123, fun_ and fun_times, and example-small. It wouldn't match abc12, abc1234, fun, or good-smalls.",
162
226
  "product_weight": "Product weight",
163
227
  "query_builder_group": "Group of filters",
164
228
  "query_builder_rule": "Filter",
@@ -169,20 +233,33 @@
169
233
  "recover_access_hint": "Enter your email and we'll send you a temporary password",
170
234
  "recover_access_success": "Done! Please check your email for further instructions.",
171
235
  "region": "Region",
236
+ "repeat_price_amount_discount_summary": "for each {{from}}, {{adjustment}}¤ on the next item",
237
+ "repeat_price_percentage_discount_summary": "for each {{from}}, {{adjustment, percent}} on the next item",
238
+ "repeat_quantity_amount_discount_summary": "{{adjustment}}¤ on each {{from, ordinal}} item",
239
+ "repeat_quantity_percentage_discount_summary": "{{adjustment, percent}} on each {{from, ordinal}} item",
172
240
  "request": "Request",
173
241
  "require_consent": "Require consent to proceed",
174
242
  "required": "Required",
243
+ "rule_plural": "Rules",
175
244
  "same_as_shipping": "Same as shipping",
176
245
  "save": "Save",
246
+ "select": "Select...",
247
+ "set_time_constraints": "Set time constraints",
248
+ "set_time_constraints_explainer": "Limit when your customers can apply this coupon.",
177
249
  "shipping": "Shipping",
178
250
  "show_country_flags": "Show country flags",
179
251
  "show_on_receipt": "Show on receipt",
180
252
  "sign_in": "Sign in",
181
253
  "sign_in_hint": "Please enter your email and password",
254
+ "single_price_amount_discount_summary": "{{adjustment}}¤ after {{from}}",
255
+ "single_price_percentage_discount_summary": "{{adjustment, percent}} after {{from}}",
256
+ "single_quantity_amount_discount_summary": "{{adjustment}}¤ after {{from}} items",
257
+ "single_quantity_percentage_discount_summary": "{{adjustment, percent}} after {{from}} items",
182
258
  "sio_account_id": "Write Key",
183
259
  "sio_account_id_explainer": "You can find the write key in your project set up guide or in the source’s settings.",
184
260
  "skip_csc_for_saved": "Skip CSC for saved cards",
185
261
  "skip_csc_for_sso": "Skip CSC for single sign-on",
262
+ "start_date": "Start date",
186
263
  "sub_enddate": "Subscription end date",
187
264
  "sub_frequency": "Subscription frequency",
188
265
  "sub_nextdate": "Subscription next date",
@@ -219,6 +296,14 @@
219
296
  "template_url": "From URL",
220
297
  "template_url_explainer": "Fetch the template from a public URL",
221
298
  "text_template": "Text template",
299
+ "tier": "Tier",
300
+ "tier_allunits": "price of each item",
301
+ "tier_by": "by",
302
+ "tier_if": "if",
303
+ "tier_incremental": "price of additional items",
304
+ "tier_repeat": "price of next item",
305
+ "tier_single": "order total",
306
+ "tier_then": "then",
222
307
  "time": "{{value, time}}",
223
308
  "transaction": "Transaction",
224
309
  "transaction_approved": "Approved",
@@ -242,16 +327,36 @@
242
327
  "type_any": "Field of unknown type",
243
328
  "type_attribute": "Key-value resource",
244
329
  "type_date": "Date field",
330
+ "type_here": "Type here...",
245
331
  "type_number": "Numeric field",
246
332
  "type_string": "Text field",
247
333
  "undo_cancel": "Review",
248
334
  "undo_confirm": "Discard",
249
335
  "undo_header": "Unsaved changes",
250
336
  "undo_message": "Looks like you didn't save your changes! What would you like to do with them?",
337
+ "unique": "Unique",
338
+ "unknown": "Unknown",
251
339
  "unknown_error": "An unknown error has occured. Please try again later.",
340
+ "unlimited": "Unlimited",
252
341
  "update": "Update",
253
342
  "update_billing": "Update billing",
254
343
  "update_items": "Edit",
344
+ "url_parameter": "URL parameter",
345
+ "used_codes": "Codes used",
346
+ "uses_count": "{{count}} uses",
347
+ "uses_per_coupon": "Uses per coupon",
348
+ "uses_per_coupon_code": "Uses per code",
349
+ "uses_per_coupon_code_summary": "Each coupon code can be used only one time.",
350
+ "uses_per_coupon_code_summary_0": "Each coupon code can be used unlimited times.",
351
+ "uses_per_coupon_code_summary_plural": "Each coupon code can be used only {{count}} times.",
352
+ "uses_per_coupon_summary": "Only the first customer can use this coupon.",
353
+ "uses_per_coupon_summary_0": "All customers can use this coupon.",
354
+ "uses_per_coupon_summary_plural": "Only the first {{count}} customers can use this coupon.",
355
+ "uses_per_customer": "Uses per customer",
356
+ "uses_per_customer_summary": "Customers can use this coupon for one order only.",
357
+ "uses_per_customer_summary_0": "Customers can use this coupon for as many orders as they like.",
358
+ "uses_per_customer_summary_plural": "Customers can use this coupon for {{count}} orders only.",
359
+ "uses_to_total_count": "{{count}}/{{total}} uses",
255
360
  "v8n_format_error": "Invalid format",
256
361
  "v8n_invalid_email": "Invalid email",
257
362
  "v8n_required": "Required",
@@ -22,13 +22,25 @@ export class Checkbox extends ThemeableMixin(LitElement) {
22
22
  static get styles() {
23
23
  return [
24
24
  super.styles,
25
- css `.ml-xxl{
26
- margin-left:calc(var(--lumo-space-m) + 1.125rem);
25
+ css `:host{
26
+ --check-size:1.125rem;
27
+ }
28
+
29
+ label{
30
+ margin:calc(((1rem * var(--lumo-line-height-s)) - var(--check-size)) / -2) 0;
31
+ }
32
+
33
+ label > :first-child{
34
+ height:calc(1rem * var(--lumo-line-height-s));
35
+ }
36
+
37
+ .ml-xxl{
38
+ margin-left:calc(var(--lumo-space-m) + var(--check-size));
27
39
  }
28
40
 
29
41
  .check{
30
- height:1.125rem;
31
- width:1.125rem;
42
+ height:var(--check-size);
43
+ width:var(--check-size);
32
44
  }
33
45
  `,
34
46
  ];
@@ -37,15 +49,16 @@ export class Checkbox extends ThemeableMixin(LitElement) {
37
49
  return html `
38
50
  <label
39
51
  class=${classMap({
40
- 'flex group transition-colors': true,
52
+ 'flex items-start group transition-colors': true,
41
53
  'cursor-default': this.disabled || this.readonly,
42
54
  'text-disabled': this.disabled,
43
55
  'text-secondary': this.readonly,
44
56
  'cursor-pointer': !this.disabled,
45
57
  })}
46
58
  >
47
- <div
48
- class=${classMap({
59
+ <div class="flex items-center">
60
+ <div
61
+ class=${classMap({
49
62
  'flex-shrink-0 check transition-colors rounded-s border': true,
50
63
  'focus-within-shadow-outline': true,
51
64
  'bg-primary text-primary-contrast': !this.readonly && this.checked,
@@ -55,34 +68,35 @@ export class Checkbox extends ThemeableMixin(LitElement) {
55
68
  'text-secondary bg-contrast-20': !this.readonly && !this.checked,
56
69
  'group-hover-bg-contrast-30': !this.readonly && !this.checked,
57
70
  })}
58
- >
59
- <iron-icon
60
- icon="lumo:checkmark"
61
- class=${classMap({
71
+ >
72
+ <iron-icon
73
+ icon="lumo:checkmark"
74
+ class=${classMap({
62
75
  'block w-full h-full transition-transform transform': true,
63
76
  'scale-100': this.checked,
64
77
  'scale-0': !this.checked,
65
78
  })}
66
- >
67
- </iron-icon>
79
+ >
80
+ </iron-icon>
68
81
 
69
- <input
70
- type="checkbox"
71
- class="sr-only"
72
- .checked=${this.checked}
73
- ?disabled=${this.disabled}
74
- data-testid="input"
75
- @change=${(evt) => {
82
+ <input
83
+ type="checkbox"
84
+ class="sr-only"
85
+ .checked=${this.checked}
86
+ ?disabled=${this.disabled}
87
+ data-testid="input"
88
+ @change=${(evt) => {
76
89
  if (this.readonly)
77
90
  return evt.preventDefault();
78
91
  evt.stopPropagation();
79
92
  this.checked = !this.checked;
80
93
  this.dispatchEvent(new CheckboxChangeEvent(this.checked));
81
94
  }}
82
- />
95
+ />
96
+ </div>
83
97
  </div>
84
98
 
85
- <div class="flex-1 font-lumo leading-m -mt-xs ml-m">
99
+ <div class="flex-1 font-lumo leading-s ml-m">
86
100
  <slot></slot>
87
101
  </div>
88
102
  </label>
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../../src/elements/private/Checkbox/Checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,kCAAkC,CAAC;AAE1C,OAAO,EAEL,UAAU,EAGV,GAAG,EACH,IAAI,GACL,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAC3D,OAAO,EAAE,QAAQ,EAAE,oCAAiC;AAEpD,MAAM,OAAO,QAAS,SAAQ,cAAc,CAAC,UAAU,CAAC;IAAxD;;QA0BE,aAAQ,GAAG,KAAK,CAAC;QAEjB,aAAQ,GAAG,KAAK,CAAC;QAEjB,YAAO,GAAG,KAAK,CAAC;IAkElB,CAAC;IA/FC,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SAC3B,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO;YACL,KAAK,CAAC,MAAM;YACZ,GAAG;;;;;;;;OASF;SACF,CAAC;IACJ,CAAC;IAQD,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,QAAQ,CAAC;YACf,8BAA8B,EAAE,IAAI;YACpC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAChD,eAAe,EAAE,IAAI,CAAC,QAAQ;YAC9B,gBAAgB,EAAE,IAAI,CAAC,QAAQ;YAC/B,gBAAgB,EAAE,CAAC,IAAI,CAAC,QAAQ;SACjC,CAAC;;;kBAGQ,QAAQ,CAAC;YACf,wDAAwD,EAAE,IAAI;YAC9D,6BAA6B,EAAE,IAAI;YACnC,kCAAkC,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;YAClE,kCAAkC,EAAE,IAAI,CAAC,QAAQ;YACjD,oBAAoB,EAAE,CAAC,IAAI,CAAC,QAAQ;YACpC,YAAY,EAAE,IAAI,CAAC,QAAQ;YAC3B,+BAA+B,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO;YAChE,4BAA4B,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO;SAC9D,CAAC;;;;oBAIQ,QAAQ,CAAC;YACf,oDAAoD,EAAE,IAAI;YAC1D,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO;SACzB,CAAC;;;;;;;uBAOS,IAAI,CAAC,OAAO;wBACX,IAAI,CAAC,QAAQ;;sBAEf,CAAC,GAAU,EAAE,EAAE;YACvB,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC;YAE/C,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;;;;;;;;;;gBAUG,QAAQ,CAAC;YACf,oCAAoC,EAAE,IAAI;YAC1C,eAAe,EAAE,IAAI,CAAC,QAAQ;SAC/B,CAAC;;;;KAIL,CAAC;IACJ,CAAC;CACF","sourcesContent":["import '@polymer/iron-icon';\nimport '@vaadin/vaadin-lumo-styles/icons';\n\nimport {\n CSSResultArray,\n LitElement,\n PropertyDeclarations,\n TemplateResult,\n css,\n html,\n} from 'lit-element';\n\nimport { CheckboxChangeEvent } from './CheckboxChangeEvent';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { classMap } from '../../../utils/class-map';\n\nexport class Checkbox extends ThemeableMixin(LitElement) {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n readonly: { type: Boolean },\n disabled: { type: Boolean },\n checked: { type: Boolean },\n };\n }\n\n static get styles(): CSSResultArray {\n return [\n super.styles,\n css`\n .ml-xxl {\n margin-left: calc(var(--lumo-space-m) + 1.125rem);\n }\n\n .check {\n height: 1.125rem;\n width: 1.125rem;\n }\n `,\n ];\n }\n\n readonly = false;\n\n disabled = false;\n\n checked = false;\n\n render(): TemplateResult {\n return html`\n <label\n class=${classMap({\n 'flex group transition-colors': true,\n 'cursor-default': this.disabled || this.readonly,\n 'text-disabled': this.disabled,\n 'text-secondary': this.readonly,\n 'cursor-pointer': !this.disabled,\n })}\n >\n <div\n class=${classMap({\n 'flex-shrink-0 check transition-colors rounded-s border': true,\n 'focus-within-shadow-outline': true,\n 'bg-primary text-primary-contrast': !this.readonly && this.checked,\n 'border-dashed border-contrast-30': this.readonly,\n 'border-transparent': !this.readonly,\n 'opacity-50': this.disabled,\n 'text-secondary bg-contrast-20': !this.readonly && !this.checked,\n 'group-hover-bg-contrast-30': !this.readonly && !this.checked,\n })}\n >\n <iron-icon\n icon=\"lumo:checkmark\"\n class=${classMap({\n 'block w-full h-full transition-transform transform': true,\n 'scale-100': this.checked,\n 'scale-0': !this.checked,\n })}\n >\n </iron-icon>\n\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n .checked=${this.checked}\n ?disabled=${this.disabled}\n data-testid=\"input\"\n @change=${(evt: Event) => {\n if (this.readonly) return evt.preventDefault();\n\n evt.stopPropagation();\n this.checked = !this.checked;\n this.dispatchEvent(new CheckboxChangeEvent(this.checked));\n }}\n />\n </div>\n\n <div class=\"flex-1 font-lumo leading-m -mt-xs ml-m\">\n <slot></slot>\n </div>\n </label>\n\n <div\n class=${classMap({\n 'font-lumo ml-xxl transition-colors': true,\n 'text-disabled': this.disabled,\n })}\n >\n <slot name=\"content\"></slot>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../../src/elements/private/Checkbox/Checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,kCAAkC,CAAC;AAE1C,OAAO,EAEL,UAAU,EAGV,GAAG,EACH,IAAI,GACL,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAC3D,OAAO,EAAE,QAAQ,EAAE,oCAAiC;AAEpD,MAAM,OAAO,QAAS,SAAQ,cAAc,CAAC,UAAU,CAAC;IAAxD;;QAsCE,aAAQ,GAAG,KAAK,CAAC;QAEjB,aAAQ,GAAG,KAAK,CAAC;QAEjB,YAAO,GAAG,KAAK,CAAC;IAoElB,CAAC;IA7GC,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SAC3B,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO;YACL,KAAK,CAAC,MAAM;YACZ,GAAG;;;;;;;;;;;;;;;;;;;;OAqBF;SACF,CAAC;IACJ,CAAC;IAQD,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,QAAQ,CAAC;YACf,0CAA0C,EAAE,IAAI;YAChD,gBAAgB,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAChD,eAAe,EAAE,IAAI,CAAC,QAAQ;YAC9B,gBAAgB,EAAE,IAAI,CAAC,QAAQ;YAC/B,gBAAgB,EAAE,CAAC,IAAI,CAAC,QAAQ;SACjC,CAAC;;;;oBAIU,QAAQ,CAAC;YACf,wDAAwD,EAAE,IAAI;YAC9D,6BAA6B,EAAE,IAAI;YACnC,kCAAkC,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;YAClE,kCAAkC,EAAE,IAAI,CAAC,QAAQ;YACjD,oBAAoB,EAAE,CAAC,IAAI,CAAC,QAAQ;YACpC,YAAY,EAAE,IAAI,CAAC,QAAQ;YAC3B,+BAA+B,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO;YAChE,4BAA4B,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO;SAC9D,CAAC;;;;sBAIQ,QAAQ,CAAC;YACf,oDAAoD,EAAE,IAAI;YAC1D,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO;SACzB,CAAC;;;;;;;yBAOS,IAAI,CAAC,OAAO;0BACX,IAAI,CAAC,QAAQ;;wBAEf,CAAC,GAAU,EAAE,EAAE;YACvB,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC;YAE/C,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;;;;;;;;;;;gBAWC,QAAQ,CAAC;YACf,oCAAoC,EAAE,IAAI;YAC1C,eAAe,EAAE,IAAI,CAAC,QAAQ;SAC/B,CAAC;;;;KAIL,CAAC;IACJ,CAAC;CACF","sourcesContent":["import '@polymer/iron-icon';\nimport '@vaadin/vaadin-lumo-styles/icons';\n\nimport {\n CSSResultArray,\n LitElement,\n PropertyDeclarations,\n TemplateResult,\n css,\n html,\n} from 'lit-element';\n\nimport { CheckboxChangeEvent } from './CheckboxChangeEvent';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { classMap } from '../../../utils/class-map';\n\nexport class Checkbox extends ThemeableMixin(LitElement) {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n readonly: { type: Boolean },\n disabled: { type: Boolean },\n checked: { type: Boolean },\n };\n }\n\n static get styles(): CSSResultArray {\n return [\n super.styles,\n css`\n :host {\n --check-size: 1.125rem;\n }\n\n label {\n margin: calc(((1rem * var(--lumo-line-height-s)) - var(--check-size)) / -2) 0;\n }\n\n label > :first-child {\n height: calc(1rem * var(--lumo-line-height-s));\n }\n\n .ml-xxl {\n margin-left: calc(var(--lumo-space-m) + var(--check-size));\n }\n\n .check {\n height: var(--check-size);\n width: var(--check-size);\n }\n `,\n ];\n }\n\n readonly = false;\n\n disabled = false;\n\n checked = false;\n\n render(): TemplateResult {\n return html`\n <label\n class=${classMap({\n 'flex items-start group transition-colors': true,\n 'cursor-default': this.disabled || this.readonly,\n 'text-disabled': this.disabled,\n 'text-secondary': this.readonly,\n 'cursor-pointer': !this.disabled,\n })}\n >\n <div class=\"flex items-center\">\n <div\n class=${classMap({\n 'flex-shrink-0 check transition-colors rounded-s border': true,\n 'focus-within-shadow-outline': true,\n 'bg-primary text-primary-contrast': !this.readonly && this.checked,\n 'border-dashed border-contrast-30': this.readonly,\n 'border-transparent': !this.readonly,\n 'opacity-50': this.disabled,\n 'text-secondary bg-contrast-20': !this.readonly && !this.checked,\n 'group-hover-bg-contrast-30': !this.readonly && !this.checked,\n })}\n >\n <iron-icon\n icon=\"lumo:checkmark\"\n class=${classMap({\n 'block w-full h-full transition-transform transform': true,\n 'scale-100': this.checked,\n 'scale-0': !this.checked,\n })}\n >\n </iron-icon>\n\n <input\n type=\"checkbox\"\n class=\"sr-only\"\n .checked=${this.checked}\n ?disabled=${this.disabled}\n data-testid=\"input\"\n @change=${(evt: Event) => {\n if (this.readonly) return evt.preventDefault();\n\n evt.stopPropagation();\n this.checked = !this.checked;\n this.dispatchEvent(new CheckboxChangeEvent(this.checked));\n }}\n />\n </div>\n </div>\n\n <div class=\"flex-1 font-lumo leading-s ml-m\">\n <slot></slot>\n </div>\n </label>\n\n <div\n class=${classMap({\n 'font-lumo ml-xxl transition-colors': true,\n 'text-disabled': this.disabled,\n })}\n >\n <slot name=\"content\"></slot>\n </div>\n `;\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { LitElement, PropertyDeclarations, TemplateResult } from 'lit-element';
2
+ declare const EditableList_base: typeof LitElement & {
3
+ styles: import("lit-element").CSSResultArray;
4
+ } & import("lit-element").Constructor<import("../../../mixins/configurable").ConfigurableMixinHost> & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
5
+ defaultNS: string;
6
+ };
7
+ export declare class EditableList extends EditableList_base {
8
+ static get properties(): PropertyDeclarations;
9
+ options: {
10
+ label?: string;
11
+ value: string;
12
+ }[];
13
+ items: {
14
+ label?: string | TemplateResult;
15
+ value: string;
16
+ }[];
17
+ private __newItem;
18
+ render(): TemplateResult;
19
+ }
20
+ export {};
@@ -0,0 +1,123 @@
1
+ import { LitElement, html } from 'lit-element';
2
+ import { ConfigurableMixin } from "../../../mixins/configurable.js";
3
+ import { ThemeableMixin } from "../../../mixins/themeable.js";
4
+ import { TranslatableMixin } from "../../../mixins/translatable.js";
5
+ import { classMap } from "../../../utils/class-map.js";
6
+ import { live } from 'lit-html/directives/live';
7
+ import { repeat } from 'lit-html/directives/repeat';
8
+ export class EditableList extends TranslatableMixin(ConfigurableMixin(ThemeableMixin(LitElement))) {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.options = [];
12
+ this.items = [];
13
+ this.__newItem = '';
14
+ }
15
+ static get properties() {
16
+ return {
17
+ ...super.properties,
18
+ options: { type: Array },
19
+ items: { type: Array },
20
+ __newItem: { attribute: false },
21
+ };
22
+ }
23
+ render() {
24
+ const deleteButtonClass = classMap({
25
+ 'w-xs h-xs mr-xs rounded-full transition-colors flex-shrink-0': true,
26
+ 'focus-outline-none focus-ring-2 ring-inset ring-error-50': true,
27
+ 'text-tertiary hover-bg-error-10 hover-text-error': !this.disabled,
28
+ 'cursor-default text-disabled': this.disabled,
29
+ 'flex items-center justify-center': !this.readonly,
30
+ 'hidden': this.readonly,
31
+ });
32
+ const itemClass = classMap({
33
+ 'transition-colors h-l ml-m flex items-center': true,
34
+ 'text-secondary': this.readonly,
35
+ 'text-disabled': this.disabled,
36
+ });
37
+ const isAddButtonDisabled = this.disabled || !this.__newItem;
38
+ const addItem = () => {
39
+ if (!this.__newItem)
40
+ return;
41
+ this.items.push({ value: this.__newItem });
42
+ this.requestUpdate('items');
43
+ this.dispatchEvent(new CustomEvent('change'));
44
+ this.__newItem = '';
45
+ };
46
+ return html `
47
+ <slot></slot>
48
+
49
+ <ol class="divide-y divide-contrast-10">
50
+ ${repeat(this.items, item => item.value, (item, index) => {
51
+ var _a;
52
+ return html `
53
+ <li class=${itemClass}>
54
+ <div class="flex-1 mr-s">${(_a = item.label) !== null && _a !== void 0 ? _a : item.value}</div>
55
+
56
+ <button
57
+ aria-label=${this.t('delete')}
58
+ class=${deleteButtonClass}
59
+ ?disabled=${this.disabled}
60
+ @click=${() => {
61
+ this.items.splice(index, 1);
62
+ this.requestUpdate('items');
63
+ this.dispatchEvent(new CustomEvent('change'));
64
+ }}
65
+ >
66
+ <iron-icon icon="lumo:cross" class="icon-inline text-xl"></iron-icon>
67
+ </button>
68
+ </li>
69
+ `;
70
+ })}
71
+ </ol>
72
+
73
+ <div
74
+ class=${classMap({
75
+ 'ml-m h-l flex items-center': true,
76
+ 'border-t border-contrast-10': this.items.length > 0,
77
+ 'flex': !this.readonly,
78
+ 'hidden': this.readonly,
79
+ })}
80
+ >
81
+ <input
82
+ placeholder=${this.t('type_here')}
83
+ class="w-full bg-transparent appearance-none h-m focus-outline-none"
84
+ list="list"
85
+ .value=${live(this.__newItem)}
86
+ ?disabled=${this.disabled}
87
+ ?readonly=${this.readonly}
88
+ @keydown=${(evt) => evt.key === 'Enter' && addItem()}
89
+ @input=${(evt) => {
90
+ this.__newItem = evt.currentTarget.value.trim();
91
+ }}
92
+ />
93
+
94
+ <datalist id="list">
95
+ ${this.options.map(({ label, value }) => {
96
+ if (this.items.some(item => item.value === value))
97
+ return;
98
+ return html `<option value=${value}>${label !== null && label !== void 0 ? label : value}</option>`;
99
+ })}
100
+ </datalist>
101
+
102
+ <div class="transition-opacity ${this.__newItem ? 'opacity-100' : 'opacity-0'}">
103
+ <button
104
+ aria-label=${this.t('submit')}
105
+ class=${classMap({
106
+ 'w-xs h-xs mr-xs flex-shrink-0 ring-inset ring-success-50 focus-outline-none': true,
107
+ 'flex items-center justify-center rounded-full transition-colors': true,
108
+ 'bg-contrast-5 text-disabled cursor-default': isAddButtonDisabled,
109
+ 'bg-success-10 text-success cursor-pointer': !isAddButtonDisabled,
110
+ 'hover-bg-success hover-text-success-contrast': !isAddButtonDisabled,
111
+ 'focus-ring-2': !isAddButtonDisabled,
112
+ })}
113
+ ?disabled=${isAddButtonDisabled}
114
+ @click=${addItem}
115
+ >
116
+ <iron-icon icon="lumo:plus" class="icon-inline text-l"></iron-icon>
117
+ </button>
118
+ </div>
119
+ </div>
120
+ `;
121
+ }
122
+ }
123
+ //# sourceMappingURL=EditableList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditableList.js","sourceRoot":"","sources":["../../../../src/elements/private/EditableList/EditableList.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, PropertyDeclarations, TemplateResult, html } from 'lit-element';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { live } from 'lit-html/directives/live';\nimport { repeat } from 'lit-html/directives/repeat';\n\nexport class EditableList extends TranslatableMixin(ConfigurableMixin(ThemeableMixin(LitElement))) {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n options: { type: Array },\n items: { type: Array },\n __newItem: { attribute: false },\n };\n }\n\n options: { label?: string; value: string }[] = [];\n\n items: { label?: string | TemplateResult; value: string }[] = [];\n\n private __newItem = '';\n\n render(): TemplateResult {\n const deleteButtonClass = classMap({\n 'w-xs h-xs mr-xs rounded-full transition-colors flex-shrink-0': true,\n 'focus-outline-none focus-ring-2 ring-inset ring-error-50': true,\n 'text-tertiary hover-bg-error-10 hover-text-error': !this.disabled,\n 'cursor-default text-disabled': this.disabled,\n 'flex items-center justify-center': !this.readonly,\n 'hidden': this.readonly,\n });\n\n const itemClass = classMap({\n 'transition-colors h-l ml-m flex items-center': true,\n 'text-secondary': this.readonly,\n 'text-disabled': this.disabled,\n });\n\n const isAddButtonDisabled = this.disabled || !this.__newItem;\n\n const addItem = () => {\n if (!this.__newItem) return;\n this.items.push({ value: this.__newItem });\n this.requestUpdate('items');\n this.dispatchEvent(new CustomEvent('change'));\n this.__newItem = '';\n };\n\n return html`\n <slot></slot>\n\n <ol class=\"divide-y divide-contrast-10\">\n ${repeat(\n this.items,\n item => item.value,\n (item, index) => {\n return html`\n <li class=${itemClass}>\n <div class=\"flex-1 mr-s\">${item.label ?? item.value}</div>\n\n <button\n aria-label=${this.t('delete')}\n class=${deleteButtonClass}\n ?disabled=${this.disabled}\n @click=${() => {\n this.items.splice(index, 1);\n this.requestUpdate('items');\n this.dispatchEvent(new CustomEvent('change'));\n }}\n >\n <iron-icon icon=\"lumo:cross\" class=\"icon-inline text-xl\"></iron-icon>\n </button>\n </li>\n `;\n }\n )}\n </ol>\n\n <div\n class=${classMap({\n 'ml-m h-l flex items-center': true,\n 'border-t border-contrast-10': this.items.length > 0,\n 'flex': !this.readonly,\n 'hidden': this.readonly,\n })}\n >\n <input\n placeholder=${this.t('type_here')}\n class=\"w-full bg-transparent appearance-none h-m focus-outline-none\"\n list=\"list\"\n .value=${live(this.__newItem)}\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n @keydown=${(evt: KeyboardEvent) => evt.key === 'Enter' && addItem()}\n @input=${(evt: InputEvent) => {\n this.__newItem = (evt.currentTarget as HTMLInputElement).value.trim();\n }}\n />\n\n <datalist id=\"list\">\n ${this.options.map(({ label, value }) => {\n if (this.items.some(item => item.value === value)) return;\n return html`<option value=${value}>${label ?? value}</option>`;\n })}\n </datalist>\n\n <div class=\"transition-opacity ${this.__newItem ? 'opacity-100' : 'opacity-0'}\">\n <button\n aria-label=${this.t('submit')}\n class=${classMap({\n 'w-xs h-xs mr-xs flex-shrink-0 ring-inset ring-success-50 focus-outline-none': true,\n 'flex items-center justify-center rounded-full transition-colors': true,\n 'bg-contrast-5 text-disabled cursor-default': isAddButtonDisabled,\n 'bg-success-10 text-success cursor-pointer': !isAddButtonDisabled,\n 'hover-bg-success hover-text-success-contrast': !isAddButtonDisabled,\n 'focus-ring-2': !isAddButtonDisabled,\n })}\n ?disabled=${isAddButtonDisabled}\n @click=${addItem}\n >\n <iron-icon icon=\"lumo:plus\" class=\"icon-inline text-l\"></iron-icon>\n </button>\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import { Data, Templates } from './types';
2
+ import { TemplateResult } from 'lit-html';
3
+ import { NucleonElement } from '../NucleonElement/NucleonElement';
4
+ declare const Base: typeof NucleonElement & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
5
+ defaultNS: string;
6
+ } & import("lit-element").Constructor<import("../../../mixins/configurable").ConfigurableMixinHost> & {
7
+ styles: import("lit-element").CSSResultArray;
8
+ };
9
+ /**
10
+ * Basic card displaying a coupon.
11
+ *
12
+ * @slot title:before
13
+ * @slot title:after
14
+ * @slot description:before
15
+ * @slot description:after
16
+ * @slot status:before
17
+ * @slot status:after
18
+ *
19
+ * @element foxy-coupon-card
20
+ * @since 1.15.0
21
+ */
22
+ export declare class CouponCard extends Base<Data> {
23
+ templates: Templates;
24
+ render(): TemplateResult;
25
+ private __renderTitle;
26
+ private __renderDescription;
27
+ private __renderStatus;
28
+ }
29
+ export {};