@foxy.io/elements 1.8.0-beta.1 → 1.8.1-beta.1

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 (97) 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-attribute-card.js +1 -1
  5. package/dist/cdn/foxy-attribute-form.js +1 -1
  6. package/dist/cdn/foxy-cancellation-form.js +1 -1
  7. package/dist/cdn/foxy-collection-page.js +1 -1
  8. package/dist/cdn/foxy-collection-pages.js +1 -1
  9. package/dist/cdn/foxy-customer-api.js +1 -1
  10. package/dist/cdn/foxy-customer-form.js +1 -1
  11. package/dist/cdn/foxy-customer-portal-settings.js +3 -3
  12. package/dist/cdn/foxy-customer-portal.js +14 -14
  13. package/dist/cdn/foxy-customer.js +1 -1
  14. package/dist/cdn/foxy-customers-table.js +1 -1
  15. package/dist/cdn/foxy-donation.js +1 -1
  16. package/dist/cdn/foxy-error-entry-card.js +1 -1
  17. package/dist/cdn/foxy-form-dialog.js +1 -1
  18. package/dist/cdn/foxy-i18n.js +1 -1
  19. package/dist/cdn/foxy-items-form.js +1 -1
  20. package/dist/cdn/foxy-nucleon-element.js +1 -1
  21. package/dist/cdn/foxy-payment-method-card.js +1 -1
  22. package/dist/cdn/foxy-sign-in-form.js +230 -1
  23. package/dist/cdn/foxy-spinner.js +2 -2
  24. package/dist/cdn/foxy-subscription-card.js +1 -1
  25. package/dist/cdn/foxy-subscription-form.js +2 -2
  26. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  27. package/dist/cdn/foxy-table.js +1 -1
  28. package/dist/cdn/foxy-transactions-table.js +1 -1
  29. package/dist/cdn/foxy-user-form.js +1 -1
  30. package/dist/cdn/foxy-users-table.js +1 -1
  31. package/dist/cdn/{shared-3747bcc6.js → shared-090432b4.js} +1 -1
  32. package/dist/cdn/shared-1d0ef57d.js +1 -0
  33. package/dist/cdn/{shared-720656e1.js → shared-23966eed.js} +1 -1
  34. package/dist/cdn/{shared-0fab8117.js → shared-497fd63c.js} +1 -1
  35. package/dist/cdn/{shared-963eb150.js → shared-4b33c6d2.js} +2 -2
  36. package/dist/cdn/{shared-18f51b0f.js → shared-525dd8c8.js} +1 -1
  37. package/dist/cdn/{shared-654b4125.js → shared-6872bf5c.js} +1 -1
  38. package/dist/cdn/shared-69d0ca61.js +1 -0
  39. package/dist/cdn/{shared-0073399d.js → shared-6f84ea16.js} +1 -1
  40. package/dist/cdn/{shared-3fbdd8df.js → shared-77bdf956.js} +1 -1
  41. package/dist/cdn/shared-8057ee9c.js +1 -0
  42. package/dist/cdn/{shared-67b701fa.js → shared-84203d52.js} +1 -1
  43. package/dist/cdn/shared-851b97ef.js +1 -0
  44. package/dist/cdn/{shared-3eee4ff4.js → shared-8f34ce95.js} +1 -1
  45. package/dist/cdn/{shared-75c1b56a.js → shared-92d03925.js} +1 -1
  46. package/dist/cdn/{shared-4d16f087.js → shared-96de56d4.js} +1 -1
  47. package/dist/cdn/{shared-090ed5f4.js → shared-9f78e096.js} +1 -1
  48. package/dist/cdn/{shared-c7566461.js → shared-a5fbfdc7.js} +1 -1
  49. package/dist/cdn/{shared-4b3d6aeb.js → shared-a7709d26.js} +1 -1
  50. package/dist/cdn/{shared-b817761e.js → shared-aac9fed8.js} +1 -1
  51. package/dist/cdn/{shared-4b7b3564.js → shared-b13a5ed3.js} +1 -1
  52. package/dist/cdn/{shared-a67a2bc1.js → shared-bba615b8.js} +1 -1
  53. package/dist/cdn/{shared-3e548f74.js → shared-bf28ab5e.js} +1 -1
  54. package/dist/cdn/shared-c70d9713.js +1 -0
  55. package/dist/cdn/{shared-5bfca1d2.js → shared-e058cb87.js} +1 -1
  56. package/dist/cdn/{shared-97fc8fd7.js → shared-f06d08d5.js} +1 -1
  57. package/dist/cdn/translations/shared/en.json +3 -0
  58. package/dist/cdn/translations/shared/es.json +3 -0
  59. package/dist/elements/private/Dialog/DialogWindow.d.ts +3 -2
  60. package/dist/elements/private/Dialog/DialogWindow.js +11 -1
  61. package/dist/elements/private/Dialog/DialogWindow.js.map +1 -1
  62. package/dist/elements/public/CustomerApi/cookieStorage.js +2 -1
  63. package/dist/elements/public/CustomerApi/cookieStorage.js.map +1 -1
  64. package/dist/elements/public/CustomerPortalSettings/private/DisallowedDates/DisallowedDates.js +1 -1
  65. package/dist/elements/public/CustomerPortalSettings/private/DisallowedDates/DisallowedDates.js.map +1 -1
  66. package/dist/elements/public/CustomerPortalSettings/private/FrequencyList/FrequencyList.js +3 -2
  67. package/dist/elements/public/CustomerPortalSettings/private/FrequencyList/FrequencyList.js.map +1 -1
  68. package/dist/elements/public/CustomerPortalSettings/private/NextDateModificationRule/NextDateModificationRule.js +2 -2
  69. package/dist/elements/public/CustomerPortalSettings/private/NextDateModificationRule/NextDateModificationRule.js.map +1 -1
  70. package/dist/elements/public/CustomerPortalSettings/private/OriginsList/OriginsList.js +2 -1
  71. package/dist/elements/public/CustomerPortalSettings/private/OriginsList/OriginsList.js.map +1 -1
  72. package/dist/elements/public/SignInForm/SignInForm.d.ts +7 -0
  73. package/dist/elements/public/SignInForm/SignInForm.js +57 -2
  74. package/dist/elements/public/SignInForm/SignInForm.js.map +1 -1
  75. package/dist/elements/public/SignInForm/index.d.ts +1 -0
  76. package/dist/elements/public/SignInForm/index.js +1 -0
  77. package/dist/elements/public/SignInForm/index.js.map +1 -1
  78. package/dist/elements/public/SignInForm/types.d.ts +3 -0
  79. package/dist/elements/public/SignInForm/types.js.map +1 -1
  80. package/dist/elements/public/SubscriptionCard/SubscriptionCard.js +2 -2
  81. package/dist/elements/public/SubscriptionCard/SubscriptionCard.js.map +1 -1
  82. package/dist/elements/public/SubscriptionForm/SubscriptionForm.js +1 -1
  83. package/dist/elements/public/SubscriptionForm/SubscriptionForm.js.map +1 -1
  84. package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js +8 -2
  85. package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js.map +1 -1
  86. package/dist/mixins/themeable.js +30 -25
  87. package/dist/mixins/themeable.js.map +1 -1
  88. package/dist/mixins/translatable.d.ts +3 -4
  89. package/dist/mixins/translatable.js +2 -6
  90. package/dist/mixins/translatable.js.map +1 -1
  91. package/package.json +2 -2
  92. package/dist/cdn/shared-51f550e3.js +0 -1
  93. package/dist/cdn/shared-6dc6912f.js +0 -1
  94. package/dist/cdn/shared-75bde6c4.js +0 -1
  95. package/dist/cdn/shared-916991a9.js +0 -1
  96. package/dist/cdn/shared-a494131d.js +0 -1
  97. package/dist/cdn/shared-c7ab8ec5.js +0 -1
@@ -54,6 +54,8 @@
54
54
  "loading_paused": "En pausa",
55
55
  "merchant": "Comerciante",
56
56
  "merchant_explainer": "Maneja artículos, finanzas y esta tienda en general.",
57
+ "mfa_remember_device": "Confía en este dispositivo",
58
+ "mfa_remember_device_hint": "No requiera un código de verificación cuando inicie sesión desde este dispositivo en el futuro",
57
59
  "mfa_totp_code": "Código de una sola vez",
58
60
  "mfa_totp_code_hint": "Escanee la imagen a continuación con su aplicación de autenticación para recibir el código de verificación",
59
61
  "mfa_totp_code_invalid_error": "El código único que ingresó no es válido. Inténtalo de nuevo.",
@@ -86,6 +88,7 @@
86
88
  "subscription_active": "Próximo pago el {{date, date}}",
87
89
  "subscription_cancelled": "Finalizó el {{date, date}}",
88
90
  "subscription_failed": "Error en el pago el {{date, date}}",
91
+ "subscription_inactive": "Inactiva",
89
92
  "subscription_plural": "Suscripciones",
90
93
  "subscription_will_be_cancelled": "Finaliza el {{date, date}}",
91
94
  "tax_id": "Número de identificación fiscal",
@@ -1,7 +1,8 @@
1
- import { LitElement } from 'lit-element';
1
+ import { CSSResultArray, LitElement } from 'lit-element';
2
2
  declare const DialogWindow_base: typeof LitElement & {
3
- styles: import("lit-element").CSSResultArray;
3
+ styles: CSSResultArray;
4
4
  };
5
5
  export declare class DialogWindow extends DialogWindow_base {
6
+ static get styles(): CSSResultArray;
6
7
  }
7
8
  export {};
@@ -1,6 +1,16 @@
1
- import { LitElement } from 'lit-element';
1
+ import { LitElement, css } from 'lit-element';
2
2
  import { ResponsiveMixin } from "../../../mixins/responsive.js";
3
3
  import { ThemeableMixin } from "../../../mixins/themeable.js";
4
4
  export class DialogWindow extends ThemeableMixin(ResponsiveMixin(LitElement)) {
5
+ static get styles() {
6
+ return [
7
+ super.styles,
8
+ css `:host{
9
+ position:relative;
10
+ z-index:1000;
11
+ }
12
+ `,
13
+ ];
14
+ }
5
15
  }
6
16
  //# sourceMappingURL=DialogWindow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DialogWindow.js","sourceRoot":"","sources":["../../../../src/elements/private/Dialog/DialogWindow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAC7D,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAE3D,MAAM,OAAO,YAAa,SAAQ,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;CAAG","sourcesContent":["import { LitElement } from 'lit-element';\nimport { ResponsiveMixin } from '../../../mixins/responsive';\nimport { ThemeableMixin } from '../../../mixins/themeable';\n\nexport class DialogWindow extends ThemeableMixin(ResponsiveMixin(LitElement)) {}\n"]}
1
+ {"version":3,"file":"DialogWindow.js","sourceRoot":"","sources":["../../../../src/elements/private/Dialog/DialogWindow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,UAAU,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAC7D,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAE3D,MAAM,OAAO,YAAa,SAAQ,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3E,MAAM,KAAK,MAAM;QACf,OAAO;YACL,KAAK,CAAC,MAAM;YACZ,GAAG;;;;OAKF;SACF,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { CSSResultArray, LitElement, css } from 'lit-element';\n\nimport { ResponsiveMixin } from '../../../mixins/responsive';\nimport { ThemeableMixin } from '../../../mixins/themeable';\n\nexport class DialogWindow extends ThemeableMixin(ResponsiveMixin(LitElement)) {\n static get styles(): CSSResultArray {\n return [\n super.styles,\n css`\n :host {\n position: relative;\n z-index: 1000;\n }\n `,\n ];\n }\n}\n"]}
@@ -45,7 +45,8 @@ class CustomCookieStorage extends CookieStorageModule.CookieStorage {
45
45
  setItem(name, value, options) {
46
46
  if (name === API.SESSION) {
47
47
  const session = JSON.parse(value);
48
- const expires = new Date(new Date(session.date_created).getTime() + session.expires_in);
48
+ const expiresInMs = session.expires_in * 1000;
49
+ const expires = new Date(new Date(session.date_created).getTime() + expiresInMs);
49
50
  super.setItem('fx.customer', session.session_token, { expires });
50
51
  super.setItem('fx.customer.jwt', session.jwt, { expires });
51
52
  super.setItem('fx.customer.start', session.date_created, { expires });
@@ -1 +1 @@
1
- {"version":3,"file":"cookieStorage.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerApi/cookieStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,mBAAmB,MAAM,gBAAgB,CAAC;AAKjD;;;;;;;;GAQG;AACH,MAAM,mBAAoB,SAAQ,mBAAmB,CAAC,aAAa;IACjE;QACE,KAAK,CAAC;YACJ,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,IAAI,IAAI,EAAE;YACnB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,QAAQ,CAAC,QAAQ;YACzB,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE;YACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAE7C,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAE1F,MAAM,KAAK,GAA0B;gBACnC,aAAa,EAAE,QAAQ;gBACvB,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBAC9B,GAAG;aACJ,CAAC;YAEF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAC7C,IAAI,GAAG,KAAK,IAAI;gBAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YAElC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC9B;aAAM;YACL,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5B;IACH,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,OAAuB;QAC1D,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAA0B,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YAExF,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3D,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACtE,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE/E,IAAI,OAAO,CAAC,GAAG;gBAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;SAC7E;aAAM;YACL,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SAC5C;IACH,CAAC;IAED,KAAK;QACH,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,GAAI;YACzC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAW,CAAC;YAExC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;gBAClC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACxB;iBAAM;gBACL,KAAK,EAAE,CAAC;aACT;SACF;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,mBAAmB,EAAE,CAAC","sourcesContent":["import { API } from '@foxy.io/sdk/customer';\nimport { CookieOptions } from 'cookie-storage/lib/cookie-options';\nimport CookieStorageModule from 'cookie-storage';\nimport { StoredSession } from '@foxy.io/sdk/dist/types/customer/types';\n\ntype ExtendedStoredSession = StoredSession & { sso?: string };\n\n/**\n * Compatibility solution for the 3rd-party code designed to work with the original beta\n * version of the customer portal (StencilJS-based). Supports only one key (`session`) and\n * and stores provided value in `fx.customer`, `fx.customer.jwt`, `fx.customer.sso` cookies.\n * Clearing the storage will result in removal of all cookies prefixed with `fx.customer`.\n *\n * This storage will be replaced with a better solution from v2 of our SDK in\n * the next major version of the elements package.\n */\nclass CustomCookieStorage extends CookieStorageModule.CookieStorage {\n constructor() {\n super({\n sameSite: 'Strict',\n expires: new Date(),\n secure: true,\n domain: location.hostname,\n path: '/',\n });\n }\n\n getItem(name: string): string | null {\n if (name === API.SESSION) {\n const customer = super.getItem('fx.customer');\n const duration = super.getItem('fx.customer.duration');\n const start = super.getItem('fx.customer.start');\n const jwt = super.getItem('fx.customer.jwt');\n\n if (customer === null || duration === null || start === null || jwt === null) return null;\n\n const value: ExtendedStoredSession = {\n session_token: customer,\n date_created: start,\n expires_in: parseInt(duration),\n jwt,\n };\n\n const sso = super.getItem('fx.customer.sso');\n if (sso !== null) value.sso = sso;\n\n return JSON.stringify(value);\n } else {\n return super.getItem(name);\n }\n }\n\n setItem(name: string, value: string, options?: CookieOptions): void {\n if (name === API.SESSION) {\n const session = JSON.parse(value) as ExtendedStoredSession;\n const expires = new Date(new Date(session.date_created).getTime() + session.expires_in);\n\n super.setItem('fx.customer', session.session_token, { expires });\n super.setItem('fx.customer.jwt', session.jwt, { expires });\n super.setItem('fx.customer.start', session.date_created, { expires });\n super.setItem('fx.customer.duration', String(session.expires_in), { expires });\n\n if (session.sso) super.setItem('fx.customer.sso', session.sso, { expires });\n } else {\n return super.setItem(name, value, options);\n }\n }\n\n clear(): void {\n for (let index = 0; index < this.length; ) {\n const name = super.key(index) as string;\n\n if (name.startsWith('fx.customer')) {\n super.removeItem(name);\n } else {\n index++;\n }\n }\n }\n}\n\nexport const cookieStorage = new CustomCookieStorage();\n"]}
1
+ {"version":3,"file":"cookieStorage.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerApi/cookieStorage.ts"],"names":[],"mappings":"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","sourcesContent":["import { API } from '@foxy.io/sdk/customer';\nimport { CookieOptions } from 'cookie-storage/lib/cookie-options';\nimport CookieStorageModule from 'cookie-storage';\nimport { StoredSession } from '@foxy.io/sdk/dist/types/customer/types';\n\ntype ExtendedStoredSession = StoredSession & { sso?: string };\n\n/**\n * Compatibility solution for the 3rd-party code designed to work with the original beta\n * version of the customer portal (StencilJS-based). Supports only one key (`session`) and\n * and stores provided value in `fx.customer`, `fx.customer.jwt`, `fx.customer.sso` cookies.\n * Clearing the storage will result in removal of all cookies prefixed with `fx.customer`.\n *\n * This storage will be replaced with a better solution from v2 of our SDK in\n * the next major version of the elements package.\n */\nclass CustomCookieStorage extends CookieStorageModule.CookieStorage {\n constructor() {\n super({\n sameSite: 'Strict',\n expires: new Date(),\n secure: true,\n domain: location.hostname,\n path: '/',\n });\n }\n\n getItem(name: string): string | null {\n if (name === API.SESSION) {\n const customer = super.getItem('fx.customer');\n const duration = super.getItem('fx.customer.duration');\n const start = super.getItem('fx.customer.start');\n const jwt = super.getItem('fx.customer.jwt');\n\n if (customer === null || duration === null || start === null || jwt === null) return null;\n\n const value: ExtendedStoredSession = {\n session_token: customer,\n date_created: start,\n expires_in: parseInt(duration),\n jwt,\n };\n\n const sso = super.getItem('fx.customer.sso');\n if (sso !== null) value.sso = sso;\n\n return JSON.stringify(value);\n } else {\n return super.getItem(name);\n }\n }\n\n setItem(name: string, value: string, options?: CookieOptions): void {\n if (name === API.SESSION) {\n const session = JSON.parse(value) as ExtendedStoredSession;\n const expiresInMs = session.expires_in * 1000;\n const expires = new Date(new Date(session.date_created).getTime() + expiresInMs);\n\n super.setItem('fx.customer', session.session_token, { expires });\n super.setItem('fx.customer.jwt', session.jwt, { expires });\n super.setItem('fx.customer.start', session.date_created, { expires });\n super.setItem('fx.customer.duration', String(session.expires_in), { expires });\n\n if (session.sso) super.setItem('fx.customer.sso', session.sso, { expires });\n } else {\n return super.setItem(name, value, options);\n }\n }\n\n clear(): void {\n for (let index = 0; index < this.length; ) {\n const name = super.key(index) as string;\n\n if (name.startsWith('fx.customer')) {\n super.removeItem(name);\n } else {\n index++;\n }\n }\n }\n}\n\nexport const cookieStorage = new CustomCookieStorage();\n"]}
@@ -95,7 +95,7 @@ export class DisallowedDates extends Translatable {
95
95
  .lang=${this.lang}
96
96
  key="ndmod.add_range_hint"
97
97
  class=${classMap({
98
- 'block text-xs mt-xs': true,
98
+ 'block text-xs mt-xs text-center sm-text-left': true,
99
99
  'text-tertiary': this.value.length < 20,
100
100
  'text-primary': this.value.length >= 20,
101
101
  })}
@@ -1 +1 @@
1
- {"version":3,"file":"DisallowedDates.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/DisallowedDates/DisallowedDates.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport { ScopedElementsHost } from '@open-wc/scoped-elements/src/types';\nimport '@polymer/iron-icon';\nimport '@polymer/iron-icons';\nimport { ButtonElement } from '@vaadin/vaadin-button';\nimport { DatePickerElement } from '@vaadin/vaadin-date-picker';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Translatable } from '../../../../../mixins/translatable';\nimport { classMap } from '../../../../../utils/class-map';\nimport { parseDate } from '../../../../../utils/parse-date';\nimport { translateDate } from '../../../../../utils/translate-date';\nimport { ListChangeEvent } from '../../../../private/events';\nimport { I18N, List, Skeleton } from '../../../../private/index';\nimport { DisallowedDatesChangeEvent } from './DisallowedDatesChangeEvent';\n\nexport class DisallowedDates extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'vaadin-date-picker': DatePickerElement,\n 'vaadin-button': ButtonElement,\n 'x-skeleton': Skeleton,\n 'iron-icon': customElements.get('iron-icon'),\n 'x-i18n': I18N,\n 'x-list': List,\n };\n }\n\n public static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n value: { type: Array },\n disabled: { type: Boolean },\n };\n }\n\n public value: string[] = [];\n\n public disabled = false;\n\n private __startValue = '';\n\n private __endValue = '';\n\n public render(): TemplateResult {\n const isInputDisabled = this.value.length >= 20 || this.disabled || !this._isI18nReady;\n\n return html`\n <x-list\n data-testid=\"list\"\n .value=${this.value}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${this.__handleListChange}\n >\n ${this.value.map((item, index) =>\n this._isI18nReady\n ? html`<span slot=${index} class=\"truncate\">${translateDate(item, this.lang)}</span>`\n : html`<x-skeleton slot=${index}>${item}</x-skeleton>`\n )}\n\n <div class=\"sm-flex sm-items-end\">\n <div class=\"grid grid-cols-2 gap-s\">\n <vaadin-date-picker\n data-testid=\"start\"\n .label=${this._t('ndmod.range_start').toString()}\n .value=${this.__startValue}\n .disabled=${isInputDisabled}\n .placeholder=${this._isI18nReady ? this._t('ndmod.select').toString() : ''}\n @change=${this.__handleStartValueChange}\n >\n </vaadin-date-picker>\n\n <vaadin-date-picker\n data-testid=\"end\"\n .min=${this.__startValue}\n .label=${this._t('ndmod.range_end').toString()}\n .value=${this.__endValue}\n .disabled=${isInputDisabled || !this.__startValue}\n .placeholder=${this._isI18nReady ? this._t('ndmod.select').toString() : ''}\n clear-button-visible\n @change=${this.__handleEndValueChange}\n >\n </vaadin-date-picker>\n </div>\n\n <vaadin-button\n .disabled=${isInputDisabled || !this.__startValue}\n data-testid=\"submit\"\n class=\"w-full mt-s sm-mt-0 sm-w-auto sm-ml-s\"\n @click=${this.__submit}\n >\n <x-i18n\n .lang=${this.lang}\n .key=\"ndmod.add_${this.__endValue ? 'range' : 'single'}\"\n .ns=${this.ns}\n >\n </x-i18n>\n <iron-icon icon=\"icons:add\" slot=\"suffix\"></iron-icon>\n </vaadin-button>\n </div>\n\n ${this.value.length > 0\n ? html`\n <x-i18n\n .ns=${this.ns}\n .lang=${this.lang}\n key=\"ndmod.add_range_hint\"\n class=${classMap({\n 'block text-xs mt-xs': true,\n 'text-tertiary': this.value.length < 20,\n 'text-primary': this.value.length >= 20,\n })}\n >\n </x-i18n>\n `\n : ''}\n </x-list>\n `;\n }\n\n public updated(): void {\n const globalName = 'vaadin-date-picker';\n const scopedName = (this.constructor as typeof ScopedElementsHost).getScopedTagName(globalName);\n const pickers = this.shadowRoot!.querySelectorAll(scopedName);\n\n Array.from(pickers).forEach(picker => (picker as DatePickerElement).validate());\n }\n\n private __handleStartValueChange(evt: InputEvent) {\n evt.stopPropagation();\n this.__startValue = (evt.target as DatePickerElement).value;\n\n const end = parseDate(this.__endValue);\n const start = parseDate(this.__startValue)!;\n if (end && end.getTime() < start.getTime()) this.__endValue = '';\n\n this.requestUpdate();\n }\n\n private __handleEndValueChange(evt: InputEvent) {\n evt.stopPropagation();\n this.__endValue = (evt.target as DatePickerElement).value;\n this.requestUpdate();\n }\n\n private __submit() {\n if (this.__startValue && this.__endValue) {\n this.value = [...this.value, [this.__startValue, this.__endValue].join('..')];\n } else {\n this.value = [...this.value, this.__startValue];\n }\n\n this.__sendChange();\n this.__startValue = '';\n this.__endValue = '';\n }\n\n private __handleListChange(evt: ListChangeEvent) {\n this.value = evt.detail;\n this.__sendChange();\n }\n\n private __sendChange() {\n this.dispatchEvent(new DisallowedDatesChangeEvent(this.value));\n }\n}\n"]}
1
+ {"version":3,"file":"DisallowedDates.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/DisallowedDates/DisallowedDates.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport { ScopedElementsHost } from '@open-wc/scoped-elements/src/types';\nimport '@polymer/iron-icon';\nimport '@polymer/iron-icons';\nimport { ButtonElement } from '@vaadin/vaadin-button';\nimport { DatePickerElement } from '@vaadin/vaadin-date-picker';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Translatable } from '../../../../../mixins/translatable';\nimport { classMap } from '../../../../../utils/class-map';\nimport { parseDate } from '../../../../../utils/parse-date';\nimport { translateDate } from '../../../../../utils/translate-date';\nimport { ListChangeEvent } from '../../../../private/events';\nimport { I18N, List, Skeleton } from '../../../../private/index';\nimport { DisallowedDatesChangeEvent } from './DisallowedDatesChangeEvent';\n\nexport class DisallowedDates extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'vaadin-date-picker': DatePickerElement,\n 'vaadin-button': ButtonElement,\n 'x-skeleton': Skeleton,\n 'iron-icon': customElements.get('iron-icon'),\n 'x-i18n': I18N,\n 'x-list': List,\n };\n }\n\n public static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n value: { type: Array },\n disabled: { type: Boolean },\n };\n }\n\n public value: string[] = [];\n\n public disabled = false;\n\n private __startValue = '';\n\n private __endValue = '';\n\n public render(): TemplateResult {\n const isInputDisabled = this.value.length >= 20 || this.disabled || !this._isI18nReady;\n\n return html`\n <x-list\n data-testid=\"list\"\n .value=${this.value}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${this.__handleListChange}\n >\n ${this.value.map((item, index) =>\n this._isI18nReady\n ? html`<span slot=${index} class=\"truncate\">${translateDate(item, this.lang)}</span>`\n : html`<x-skeleton slot=${index}>${item}</x-skeleton>`\n )}\n\n <div class=\"sm-flex sm-items-end\">\n <div class=\"grid grid-cols-2 gap-s\">\n <vaadin-date-picker\n data-testid=\"start\"\n .label=${this._t('ndmod.range_start').toString()}\n .value=${this.__startValue}\n .disabled=${isInputDisabled}\n .placeholder=${this._isI18nReady ? this._t('ndmod.select').toString() : ''}\n @change=${this.__handleStartValueChange}\n >\n </vaadin-date-picker>\n\n <vaadin-date-picker\n data-testid=\"end\"\n .min=${this.__startValue}\n .label=${this._t('ndmod.range_end').toString()}\n .value=${this.__endValue}\n .disabled=${isInputDisabled || !this.__startValue}\n .placeholder=${this._isI18nReady ? this._t('ndmod.select').toString() : ''}\n clear-button-visible\n @change=${this.__handleEndValueChange}\n >\n </vaadin-date-picker>\n </div>\n\n <vaadin-button\n .disabled=${isInputDisabled || !this.__startValue}\n data-testid=\"submit\"\n class=\"w-full mt-s sm-mt-0 sm-w-auto sm-ml-s\"\n @click=${this.__submit}\n >\n <x-i18n\n .lang=${this.lang}\n .key=\"ndmod.add_${this.__endValue ? 'range' : 'single'}\"\n .ns=${this.ns}\n >\n </x-i18n>\n <iron-icon icon=\"icons:add\" slot=\"suffix\"></iron-icon>\n </vaadin-button>\n </div>\n\n ${this.value.length > 0\n ? html`\n <x-i18n\n .ns=${this.ns}\n .lang=${this.lang}\n key=\"ndmod.add_range_hint\"\n class=${classMap({\n 'block text-xs mt-xs text-center sm-text-left': true,\n 'text-tertiary': this.value.length < 20,\n 'text-primary': this.value.length >= 20,\n })}\n >\n </x-i18n>\n `\n : ''}\n </x-list>\n `;\n }\n\n public updated(): void {\n const globalName = 'vaadin-date-picker';\n const scopedName = (this.constructor as typeof ScopedElementsHost).getScopedTagName(globalName);\n const pickers = this.shadowRoot!.querySelectorAll(scopedName);\n\n Array.from(pickers).forEach(picker => (picker as DatePickerElement).validate());\n }\n\n private __handleStartValueChange(evt: InputEvent) {\n evt.stopPropagation();\n this.__startValue = (evt.target as DatePickerElement).value;\n\n const end = parseDate(this.__endValue);\n const start = parseDate(this.__startValue)!;\n if (end && end.getTime() < start.getTime()) this.__endValue = '';\n\n this.requestUpdate();\n }\n\n private __handleEndValueChange(evt: InputEvent) {\n evt.stopPropagation();\n this.__endValue = (evt.target as DatePickerElement).value;\n this.requestUpdate();\n }\n\n private __submit() {\n if (this.__startValue && this.__endValue) {\n this.value = [...this.value, [this.__startValue, this.__endValue].join('..')];\n } else {\n this.value = [...this.value, this.__startValue];\n }\n\n this.__sendChange();\n this.__startValue = '';\n this.__endValue = '';\n }\n\n private __handleListChange(evt: ListChangeEvent) {\n this.value = evt.detail;\n this.__sendChange();\n }\n\n private __sendChange() {\n this.dispatchEvent(new DisallowedDatesChangeEvent(this.value));\n }\n}\n"]}
@@ -41,9 +41,10 @@ export class FrequencyList extends Translatable {
41
41
  ? html `<span slot=${index}>${this.__getText(item)}</span>`
42
42
  : html `<x-skeleton slot=${index}>${item}</x-skeleton>`)}
43
43
 
44
- <div class="space-y-s md-space-y-0 md-space-x-s w-full md-flex">
44
+ <div class="w-full md-flex">
45
45
  <x-frequency-input
46
46
  data-testid="input"
47
+ class="mb-s md-mb-0 md-mr-s"
47
48
  .lang=${this.lang}
48
49
  .value=${this.__newValue}
49
50
  .disabled=${isInputDisabled}
@@ -69,7 +70,7 @@ export class FrequencyList extends Translatable {
69
70
  .lang=${this.lang}
70
71
  key="fmod.add_option_hint"
71
72
  class=${classMap({
72
- 'block text-xs mt-xs': true,
73
+ 'block text-xs mt-xs text-center md-text-left': true,
73
74
  'text-tertiary': this.value.length < 20,
74
75
  'text-primary': this.value.length >= 20,
75
76
  })}
@@ -1 +1 @@
1
- {"version":3,"file":"FrequencyList.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/FrequencyList/FrequencyList.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Translatable } from '../../../../../mixins/translatable';\nimport { classMap } from '../../../../../utils/class-map';\nimport { ListChangeEvent } from '../../../../private/events';\nimport { I18N, List, Skeleton } from '../../../../private/index';\nimport { FrequencyInput } from '../FrequencyInput/FrequencyInput';\nimport { FrequencyInputChangeEvent } from '../FrequencyInput/FrequencyInputChangeEvent';\nimport { FrequencyListChangeEvent } from './FrequencyListChangeEvent';\n\nexport class FrequencyList extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'iron-icon': customElements.get('iron-icon'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-frequency-input': FrequencyInput,\n 'x-skeleton': Skeleton,\n 'x-list': List,\n 'x-i18n': I18N,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n value: { type: Array },\n disabled: { type: Boolean },\n };\n }\n\n public value: string[] = [];\n\n public disabled = false;\n\n private __newValue = FrequencyInput.defaultValue;\n\n public constructor() {\n super('customer-portal-settings');\n }\n\n public render(): TemplateResult {\n const isInputDisabled = this.disabled || !this._isI18nReady || this.value.length >= 20;\n\n return html`\n <x-list\n data-testid=\"list\"\n .value=${this.value}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${this.__handleListChange}\n >\n ${this.value.map((item, index) =>\n this._isI18nReady\n ? html`<span slot=${index}>${this.__getText(item)}</span>`\n : html`<x-skeleton slot=${index}>${item}</x-skeleton>`\n )}\n\n <div class=\"space-y-s md-space-y-0 md-space-x-s w-full md-flex\">\n <x-frequency-input\n data-testid=\"input\"\n .lang=${this.lang}\n .value=${this.__newValue}\n .disabled=${isInputDisabled}\n @change=${this.__handleNewValueChange}\n >\n </x-frequency-input>\n\n <vaadin-button\n data-testid=\"button\"\n class=\"w-full md-w-auto\"\n .disabled=${isInputDisabled}\n @click=${this.__handleSubmit}\n >\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"fmod.add_option\"></x-i18n>\n <iron-icon icon=\"lumo:plus\" slot=\"suffix\"></iron-icon>\n </vaadin-button>\n </div>\n\n ${this.value.length > 0\n ? html`\n <x-i18n\n .ns=${this.ns}\n .lang=${this.lang}\n key=\"fmod.add_option_hint\"\n class=${classMap({\n 'block text-xs mt-xs': true,\n 'text-tertiary': this.value.length < 20,\n 'text-primary': this.value.length >= 20,\n })}\n >\n </x-i18n>\n `\n : ''}\n </x-list>\n `;\n }\n\n private __handleNewValueChange(evt: FrequencyInputChangeEvent) {\n this.__newValue = evt.detail as string;\n }\n\n private __handleListChange(evt: ListChangeEvent) {\n this.value = evt.detail;\n this.__sendChange();\n }\n\n private __handleSubmit() {\n this.value = [...this.value, this.__newValue];\n this.__newValue = FrequencyInput.defaultValue;\n this.__sendChange();\n }\n\n private __sendChange() {\n this.dispatchEvent(new FrequencyListChangeEvent(this.value));\n }\n\n private __getText(value: string) {\n const units = value[value.length - 1];\n const count = parseInt(value.replace(units, ''));\n return this._t('duration', { count, units: this._t(units, { count }) });\n }\n}\n"]}
1
+ {"version":3,"file":"FrequencyList.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/FrequencyList/FrequencyList.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Translatable } from '../../../../../mixins/translatable';\nimport { classMap } from '../../../../../utils/class-map';\nimport { ListChangeEvent } from '../../../../private/events';\nimport { I18N, List, Skeleton } from '../../../../private/index';\nimport { FrequencyInput } from '../FrequencyInput/FrequencyInput';\nimport { FrequencyInputChangeEvent } from '../FrequencyInput/FrequencyInputChangeEvent';\nimport { FrequencyListChangeEvent } from './FrequencyListChangeEvent';\n\nexport class FrequencyList extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'iron-icon': customElements.get('iron-icon'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-frequency-input': FrequencyInput,\n 'x-skeleton': Skeleton,\n 'x-list': List,\n 'x-i18n': I18N,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n value: { type: Array },\n disabled: { type: Boolean },\n };\n }\n\n public value: string[] = [];\n\n public disabled = false;\n\n private __newValue = FrequencyInput.defaultValue;\n\n public constructor() {\n super('customer-portal-settings');\n }\n\n public render(): TemplateResult {\n const isInputDisabled = this.disabled || !this._isI18nReady || this.value.length >= 20;\n\n return html`\n <x-list\n data-testid=\"list\"\n .value=${this.value}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${this.__handleListChange}\n >\n ${this.value.map((item, index) =>\n this._isI18nReady\n ? html`<span slot=${index}>${this.__getText(item)}</span>`\n : html`<x-skeleton slot=${index}>${item}</x-skeleton>`\n )}\n\n <div class=\"w-full md-flex\">\n <x-frequency-input\n data-testid=\"input\"\n class=\"mb-s md-mb-0 md-mr-s\"\n .lang=${this.lang}\n .value=${this.__newValue}\n .disabled=${isInputDisabled}\n @change=${this.__handleNewValueChange}\n >\n </x-frequency-input>\n\n <vaadin-button\n data-testid=\"button\"\n class=\"w-full md-w-auto\"\n .disabled=${isInputDisabled}\n @click=${this.__handleSubmit}\n >\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"fmod.add_option\"></x-i18n>\n <iron-icon icon=\"lumo:plus\" slot=\"suffix\"></iron-icon>\n </vaadin-button>\n </div>\n\n ${this.value.length > 0\n ? html`\n <x-i18n\n .ns=${this.ns}\n .lang=${this.lang}\n key=\"fmod.add_option_hint\"\n class=${classMap({\n 'block text-xs mt-xs text-center md-text-left': true,\n 'text-tertiary': this.value.length < 20,\n 'text-primary': this.value.length >= 20,\n })}\n >\n </x-i18n>\n `\n : ''}\n </x-list>\n `;\n }\n\n private __handleNewValueChange(evt: FrequencyInputChangeEvent) {\n this.__newValue = evt.detail as string;\n }\n\n private __handleListChange(evt: ListChangeEvent) {\n this.value = evt.detail;\n this.__sendChange();\n }\n\n private __handleSubmit() {\n this.value = [...this.value, this.__newValue];\n this.__newValue = FrequencyInput.defaultValue;\n this.__sendChange();\n }\n\n private __sendChange() {\n this.dispatchEvent(new FrequencyListChangeEvent(this.value));\n }\n\n private __getText(value: string) {\n const units = value[value.length - 1];\n const count = parseInt(value.replace(units, ''));\n return this._t('duration', { count, units: this._t(units, { count }) });\n }\n}\n"]}
@@ -106,8 +106,8 @@ export class NextDateModificationRule extends Translatable {
106
106
  </x-jsonata-input>
107
107
  </x-group>
108
108
 
109
- <div class="flex space-y-l md-space-y-0 flex-col md-flex-row">
110
- <div class="md-w-1-2 md-border-r md-border-contrast-10">
109
+ <div class="flex flex-col md-flex-row">
110
+ <div class="mb-l md-mb-0 md-w-1-2 md-border-r md-border-contrast-10">
111
111
  <x-offset-input
112
112
  data-testid="min"
113
113
  type="min"
@@ -1 +1 @@
1
- {"version":3,"file":"NextDateModificationRule.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/NextDateModificationRule/NextDateModificationRule.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Translatable } from '../../../../../mixins/translatable';\nimport { classMap } from '../../../../../utils/class-map';\nimport { concatTruthy } from '../../../../../utils/concat-truthy';\nimport { parseDuration } from '../../../../../utils/parse-duration';\nimport { prevent } from '../../../../../utils/prevent';\nimport { translateDate } from '../../../../../utils/translate-date';\nimport { translateWeekday } from '../../../../../utils/translate-weekday';\nimport { Group, I18N, Warning } from '../../../../private/index';\nimport { AllowedDays } from '../AllowedDays/AllowedDays';\nimport { AllowedDaysChangeEvent } from '../AllowedDays/AllowedDaysChangeEvent';\nimport { DisallowedDates } from '../DisallowedDates/DisallowedDates';\nimport { DisallowedDatesChangeEvent } from '../DisallowedDates/DisallowedDatesChangeEvent';\nimport { JSONataInput } from '../JSONataInput/JSONataInput';\nimport { JSONataInputChangeEvent } from '../JSONataInput/JSONataInputChangeEvent';\nimport { OffsetInput } from '../OffsetInput/OffsetInput';\nimport { OffsetInputChangeEvent } from '../OffsetInput/OffsetInputChangeEvent';\nimport { NextDateModificationRuleChangeEvent } from './NextDateModificationRuleChangeEvent';\nimport { NextDateModificationRuleRemoveEvent } from './NextDateModificationRuleRemoveEvent';\nimport { Rule } from './Rule';\n\nexport class NextDateModificationRule extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'x-disallowed-dates': DisallowedDates,\n 'x-jsonata-input': JSONataInput,\n 'x-offset-input': OffsetInput,\n 'x-allowed-days': AllowedDays,\n 'iron-icon': customElements.get('iron-icon'),\n 'x-warning': Warning,\n 'x-group': Group,\n 'x-i18n': I18N,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n disabled: { type: Boolean },\n value: { type: Object },\n open: { type: Boolean },\n };\n }\n\n public disabled = false;\n\n public value: Rule = { jsonataQuery: '*' };\n\n public open = false;\n\n public constructor() {\n super('customer-portal-settings');\n }\n\n public render(): TemplateResult {\n const { min, max, allowedDays, jsonataQuery, disallowedDates } = this.value;\n const hasOffset = min || max;\n const hasAllowed = allowedDays && allowedDays.days.length > 0;\n const hasDisallowed = disallowedDates && disallowedDates.length > 0;\n const openStyle = this.open ? '' : 'rounded-b-l';\n\n return html`\n <x-group frame>\n <details\n data-testid=\"details\"\n class=${classMap({ 'font-lumo': true, 'pointer-events-none': !this._isI18nReady })}\n ?open=${this.open}\n @toggle=${() => (this.open = !this.open)}\n >\n <summary\n class=\"${openStyle} cursor-pointer relative leading-s rounded-t-l focus-outline-none focus-shadow-outline\"\n >\n <div class=\"p-m mr-xl text-m text-header font-medium space-y-s\">\n <div>\n <x-i18n\n .ns=${this.ns}\n .lang=${this.lang}\n key=${`ndmod.${jsonataQuery === '*' ? 'all' : 'some'}Title`}\n >\n ${jsonataQuery !== '*' ? this.__renderJSONataSummary(jsonataQuery) : ''}\n </x-i18n>\n </div>\n\n ${hasOffset || hasAllowed || hasDisallowed\n ? html`\n <div>\n ${concatTruthy(\n hasOffset && this.__renderMinMaxSummary(min, max),\n hasAllowed && this.__renderAllowedSummary(allowedDays!),\n hasDisallowed && this.__renderDisallowedSummary(disallowedDates!)\n )}\n </div>\n `\n : ''}\n </div>\n\n <button\n data-testid=\"remove\"\n .disabled=${this.disabled || !this._isI18nReady}\n class=\"flex items-center justify-center rounded absolute top-0 right-0 text-tertiary hover-text-secondary disabled-text-tertiary disabled-opacity-50 disabled-cursor-default focus-outline-none focus-shadow-outline\"\n style=\"width: 54px; height: 54px\"\n @click=${prevent(() => this.dispatchEvent(new NextDateModificationRuleRemoveEvent()))}\n >\n <iron-icon icon=\"lumo:cross\"></iron-icon>\n </button>\n </summary>\n\n <article class=\"space-y-l\">\n <x-group>\n <x-i18n slot=\"header\" .ns=${this.ns} .lang=${this.lang} key=\"ndmod.match\"> </x-i18n>\n\n <x-jsonata-input\n data-testid=\"jsonata\"\n .ns=${this.ns}\n .lang=${this.lang}\n .value=${jsonataQuery}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: JSONataInputChangeEvent) => {\n this.value = { ...this.value, jsonataQuery: evt.detail as string };\n this.__sendUpdate();\n }}\n >\n </x-jsonata-input>\n </x-group>\n\n <div class=\"flex space-y-l md-space-y-0 flex-col md-flex-row\">\n <div class=\"md-w-1-2 md-border-r md-border-contrast-10\">\n <x-offset-input\n data-testid=\"min\"\n type=\"min\"\n .lang=${this.lang}\n .value=${min}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: OffsetInputChangeEvent) => {\n this.value = { ...this.value, min: evt.detail };\n this.__sendUpdate();\n }}\n >\n </x-offset-input>\n </div>\n\n <div class=\"md-w-1-2\">\n <x-offset-input\n data-testid=\"max\"\n type=\"max\"\n .lang=${this.lang}\n .value=${max}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: OffsetInputChangeEvent) => {\n this.value = { ...this.value, max: evt.detail };\n this.__sendUpdate();\n }}\n >\n </x-offset-input>\n </div>\n </div>\n\n ${this.__compareDurations(min, max) === -1\n ? html`\n <x-warning class=\"mx-m\" data-testid=\"warning\">\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.minWarning\"> </x-i18n>\n </x-warning>\n `\n : ''}\n\n <x-group>\n <x-i18n slot=\"header\" .ns=${this.ns} .lang=${this.lang} key=\"ndmod.allowed\"> </x-i18n>\n\n <x-allowed-days\n data-testid=\"allowed\"\n .lang=${this.lang}\n .value=${allowedDays}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: AllowedDaysChangeEvent) => {\n this.value = { ...this.value, allowedDays: evt.detail };\n this.__sendUpdate();\n }}\n >\n </x-allowed-days>\n </x-group>\n\n <x-group>\n <x-i18n slot=\"header\" .ns=${this.ns} .lang=${this.lang} key=\"ndmod.excluded\">\n </x-i18n>\n\n <x-disallowed-dates\n data-testid=\"disallowed\"\n .ns=${this.ns}\n .lang=${this.lang}\n .value=${disallowedDates ?? []}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: DisallowedDatesChangeEvent) => {\n this.value = { ...this.value, disallowedDates: evt.detail };\n this.__sendUpdate();\n }}\n >\n </x-disallowed-dates>\n </x-group>\n </article>\n </details>\n </x-group>\n `;\n }\n\n private __sendUpdate() {\n this.dispatchEvent(new NextDateModificationRuleChangeEvent(this.value));\n }\n\n private __getEstimatedDaysFrom(duration: string) {\n const { count, units } = parseDuration(duration);\n const multipliers = { y: 365, m: 31, w: 7, d: 1 };\n\n return count * multipliers[units as 'y' | 'm' | 'w' | 'd'];\n }\n\n private __compareDurations(a: string | undefined, b: string | undefined) {\n if (a === b) return 0;\n if (!a || !b) return 1;\n if (this.__getEstimatedDaysFrom(a) < this.__getEstimatedDaysFrom(b)) return 1;\n return -1;\n }\n\n private __renderJSONataSummary(content: string) {\n return html`\n <code class=\"inline-block rounded bg-success-10 text-success px-xs text-xs leading-s\">\n ${content}\n </code>\n `;\n }\n\n private __renderMinMaxContent(result?: ReturnType<typeof parseDuration>) {\n if (result) {\n const { count, units } = result;\n return html`\n ${count}\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=${units} .opts=${{ count }}></x-i18n>\n `;\n } else {\n return html`<x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.any\"></x-i18n>`;\n }\n }\n\n private __renderMinMaxSummary(min?: string, max?: string) {\n return html`\n <div class=\"text-s text-tertiary font-normal\">\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.range\">\n <span>:</span>\n <span class=\"text-secondary\">\n ${this.__renderMinMaxContent(min ? parseDuration(min) : undefined)} &mdash;\n ${this.__renderMinMaxContent(max ? parseDuration(max) : undefined)}\n </span>\n </x-i18n>\n </div>\n `;\n }\n\n private __renderAllowedSummary({ type, days }: Required<Rule>['allowedDays']) {\n return html`\n <div class=\"text-s text-tertiary font-normal\">\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.allowed\">\n <span>:</span>\n <span class=\"text-secondary\">\n ${type === 'month' ? days.join(', ') : ''}\n ${type === 'day'\n ? days.map(day => translateWeekday(day, this.lang, 'short')).join(', ')\n : ''}\n </span>\n </x-i18n>\n </div>\n `;\n }\n\n private __renderDisallowedSummary(dates: string[]) {\n return html`\n <div class=\"text-s text-tertiary font-normal\">\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.excluded\">\n <span>:</span>\n <span class=\"text-secondary\">\n ${dates.map(date => translateDate(date, this.lang)).join('; ')}\n </span>\n </x-i18n>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"NextDateModificationRule.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/NextDateModificationRule/NextDateModificationRule.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Translatable } from '../../../../../mixins/translatable';\nimport { classMap } from '../../../../../utils/class-map';\nimport { concatTruthy } from '../../../../../utils/concat-truthy';\nimport { parseDuration } from '../../../../../utils/parse-duration';\nimport { prevent } from '../../../../../utils/prevent';\nimport { translateDate } from '../../../../../utils/translate-date';\nimport { translateWeekday } from '../../../../../utils/translate-weekday';\nimport { Group, I18N, Warning } from '../../../../private/index';\nimport { AllowedDays } from '../AllowedDays/AllowedDays';\nimport { AllowedDaysChangeEvent } from '../AllowedDays/AllowedDaysChangeEvent';\nimport { DisallowedDates } from '../DisallowedDates/DisallowedDates';\nimport { DisallowedDatesChangeEvent } from '../DisallowedDates/DisallowedDatesChangeEvent';\nimport { JSONataInput } from '../JSONataInput/JSONataInput';\nimport { JSONataInputChangeEvent } from '../JSONataInput/JSONataInputChangeEvent';\nimport { OffsetInput } from '../OffsetInput/OffsetInput';\nimport { OffsetInputChangeEvent } from '../OffsetInput/OffsetInputChangeEvent';\nimport { NextDateModificationRuleChangeEvent } from './NextDateModificationRuleChangeEvent';\nimport { NextDateModificationRuleRemoveEvent } from './NextDateModificationRuleRemoveEvent';\nimport { Rule } from './Rule';\n\nexport class NextDateModificationRule extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'x-disallowed-dates': DisallowedDates,\n 'x-jsonata-input': JSONataInput,\n 'x-offset-input': OffsetInput,\n 'x-allowed-days': AllowedDays,\n 'iron-icon': customElements.get('iron-icon'),\n 'x-warning': Warning,\n 'x-group': Group,\n 'x-i18n': I18N,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n disabled: { type: Boolean },\n value: { type: Object },\n open: { type: Boolean },\n };\n }\n\n public disabled = false;\n\n public value: Rule = { jsonataQuery: '*' };\n\n public open = false;\n\n public constructor() {\n super('customer-portal-settings');\n }\n\n public render(): TemplateResult {\n const { min, max, allowedDays, jsonataQuery, disallowedDates } = this.value;\n const hasOffset = min || max;\n const hasAllowed = allowedDays && allowedDays.days.length > 0;\n const hasDisallowed = disallowedDates && disallowedDates.length > 0;\n const openStyle = this.open ? '' : 'rounded-b-l';\n\n return html`\n <x-group frame>\n <details\n data-testid=\"details\"\n class=${classMap({ 'font-lumo': true, 'pointer-events-none': !this._isI18nReady })}\n ?open=${this.open}\n @toggle=${() => (this.open = !this.open)}\n >\n <summary\n class=\"${openStyle} cursor-pointer relative leading-s rounded-t-l focus-outline-none focus-shadow-outline\"\n >\n <div class=\"p-m mr-xl text-m text-header font-medium space-y-s\">\n <div>\n <x-i18n\n .ns=${this.ns}\n .lang=${this.lang}\n key=${`ndmod.${jsonataQuery === '*' ? 'all' : 'some'}Title`}\n >\n ${jsonataQuery !== '*' ? this.__renderJSONataSummary(jsonataQuery) : ''}\n </x-i18n>\n </div>\n\n ${hasOffset || hasAllowed || hasDisallowed\n ? html`\n <div>\n ${concatTruthy(\n hasOffset && this.__renderMinMaxSummary(min, max),\n hasAllowed && this.__renderAllowedSummary(allowedDays!),\n hasDisallowed && this.__renderDisallowedSummary(disallowedDates!)\n )}\n </div>\n `\n : ''}\n </div>\n\n <button\n data-testid=\"remove\"\n .disabled=${this.disabled || !this._isI18nReady}\n class=\"flex items-center justify-center rounded absolute top-0 right-0 text-tertiary hover-text-secondary disabled-text-tertiary disabled-opacity-50 disabled-cursor-default focus-outline-none focus-shadow-outline\"\n style=\"width: 54px; height: 54px\"\n @click=${prevent(() => this.dispatchEvent(new NextDateModificationRuleRemoveEvent()))}\n >\n <iron-icon icon=\"lumo:cross\"></iron-icon>\n </button>\n </summary>\n\n <article class=\"space-y-l\">\n <x-group>\n <x-i18n slot=\"header\" .ns=${this.ns} .lang=${this.lang} key=\"ndmod.match\"> </x-i18n>\n\n <x-jsonata-input\n data-testid=\"jsonata\"\n .ns=${this.ns}\n .lang=${this.lang}\n .value=${jsonataQuery}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: JSONataInputChangeEvent) => {\n this.value = { ...this.value, jsonataQuery: evt.detail as string };\n this.__sendUpdate();\n }}\n >\n </x-jsonata-input>\n </x-group>\n\n <div class=\"flex flex-col md-flex-row\">\n <div class=\"mb-l md-mb-0 md-w-1-2 md-border-r md-border-contrast-10\">\n <x-offset-input\n data-testid=\"min\"\n type=\"min\"\n .lang=${this.lang}\n .value=${min}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: OffsetInputChangeEvent) => {\n this.value = { ...this.value, min: evt.detail };\n this.__sendUpdate();\n }}\n >\n </x-offset-input>\n </div>\n\n <div class=\"md-w-1-2\">\n <x-offset-input\n data-testid=\"max\"\n type=\"max\"\n .lang=${this.lang}\n .value=${max}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: OffsetInputChangeEvent) => {\n this.value = { ...this.value, max: evt.detail };\n this.__sendUpdate();\n }}\n >\n </x-offset-input>\n </div>\n </div>\n\n ${this.__compareDurations(min, max) === -1\n ? html`\n <x-warning class=\"mx-m\" data-testid=\"warning\">\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.minWarning\"> </x-i18n>\n </x-warning>\n `\n : ''}\n\n <x-group>\n <x-i18n slot=\"header\" .ns=${this.ns} .lang=${this.lang} key=\"ndmod.allowed\"> </x-i18n>\n\n <x-allowed-days\n data-testid=\"allowed\"\n .lang=${this.lang}\n .value=${allowedDays}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: AllowedDaysChangeEvent) => {\n this.value = { ...this.value, allowedDays: evt.detail };\n this.__sendUpdate();\n }}\n >\n </x-allowed-days>\n </x-group>\n\n <x-group>\n <x-i18n slot=\"header\" .ns=${this.ns} .lang=${this.lang} key=\"ndmod.excluded\">\n </x-i18n>\n\n <x-disallowed-dates\n data-testid=\"disallowed\"\n .ns=${this.ns}\n .lang=${this.lang}\n .value=${disallowedDates ?? []}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${(evt: DisallowedDatesChangeEvent) => {\n this.value = { ...this.value, disallowedDates: evt.detail };\n this.__sendUpdate();\n }}\n >\n </x-disallowed-dates>\n </x-group>\n </article>\n </details>\n </x-group>\n `;\n }\n\n private __sendUpdate() {\n this.dispatchEvent(new NextDateModificationRuleChangeEvent(this.value));\n }\n\n private __getEstimatedDaysFrom(duration: string) {\n const { count, units } = parseDuration(duration);\n const multipliers = { y: 365, m: 31, w: 7, d: 1 };\n\n return count * multipliers[units as 'y' | 'm' | 'w' | 'd'];\n }\n\n private __compareDurations(a: string | undefined, b: string | undefined) {\n if (a === b) return 0;\n if (!a || !b) return 1;\n if (this.__getEstimatedDaysFrom(a) < this.__getEstimatedDaysFrom(b)) return 1;\n return -1;\n }\n\n private __renderJSONataSummary(content: string) {\n return html`\n <code class=\"inline-block rounded bg-success-10 text-success px-xs text-xs leading-s\">\n ${content}\n </code>\n `;\n }\n\n private __renderMinMaxContent(result?: ReturnType<typeof parseDuration>) {\n if (result) {\n const { count, units } = result;\n return html`\n ${count}\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=${units} .opts=${{ count }}></x-i18n>\n `;\n } else {\n return html`<x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.any\"></x-i18n>`;\n }\n }\n\n private __renderMinMaxSummary(min?: string, max?: string) {\n return html`\n <div class=\"text-s text-tertiary font-normal\">\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.range\">\n <span>:</span>\n <span class=\"text-secondary\">\n ${this.__renderMinMaxContent(min ? parseDuration(min) : undefined)} &mdash;\n ${this.__renderMinMaxContent(max ? parseDuration(max) : undefined)}\n </span>\n </x-i18n>\n </div>\n `;\n }\n\n private __renderAllowedSummary({ type, days }: Required<Rule>['allowedDays']) {\n return html`\n <div class=\"text-s text-tertiary font-normal\">\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.allowed\">\n <span>:</span>\n <span class=\"text-secondary\">\n ${type === 'month' ? days.join(', ') : ''}\n ${type === 'day'\n ? days.map(day => translateWeekday(day, this.lang, 'short')).join(', ')\n : ''}\n </span>\n </x-i18n>\n </div>\n `;\n }\n\n private __renderDisallowedSummary(dates: string[]) {\n return html`\n <div class=\"text-s text-tertiary font-normal\">\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"ndmod.excluded\">\n <span>:</span>\n <span class=\"text-secondary\">\n ${dates.map(date => translateDate(date, this.lang)).join('; ')}\n </span>\n </x-i18n>\n </div>\n `;\n }\n}\n"]}
@@ -56,9 +56,10 @@ export class OriginsList extends Translatable {
56
56
  `
57
57
  : html `<x-skeleton slot=${index}>${item}</x-skeleton>`)}
58
58
 
59
- <div class="flex flex-col space-y-s sm-space-y-0 sm-flex-row sm-space-x-s sm-items-start">
59
+ <div class="flex flex-col sm-flex-row sm-items-start">
60
60
  <vaadin-text-field
61
61
  data-testid="input"
62
+ class="mb-s sm-mb-0 sm-mr-s"
62
63
  .placeholder=${this._isI18nReady ? 'https://foxy.io' : ''}
63
64
  .errorMessage=${this._t(`origins.${this.__errorCode}`).toString()}
64
65
  .disabled=${this.disabled || !this._isI18nReady}
@@ -1 +1 @@
1
- {"version":3,"file":"OriginsList.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/OriginsList/OriginsList.ts"],"names":[],"mappings":"AACA,OAAO,uBAAuB,CAAC;AAC/B,OAAO,6CAA6C,CAAC;AACrD,OAAO,EAAE,IAAI,EAAwC,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,8CAA2C;AAClE,OAAO,EAAE,QAAQ,EAAE,0CAAuC;AAE1D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,qCAAkC;AACxE,OAAO,EAAE,sBAAsB,EAAE,oCAAiC;AAElE,MAAM,OAAO,WAAY,SAAQ,YAAY;IAA7C;;QAsBS,UAAK,GAAa,EAAE,CAAC;QAErB,aAAQ,GAAG,KAAK,CAAC;QAEhB,gBAAW,GAA6B,SAAS,CAAC;QAElD,cAAS,GAAG,KAAK,CAAC;QAElB,eAAU,GAAG,EAAE,CAAC;IAgH1B,CAAC;IA7IQ,MAAM,KAAK,cAAc;QAC9B,OAAO;YACL,mBAAmB,EAAE,cAAc,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAC5D,eAAe,EAAE,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;YACpD,YAAY,EAAE,QAAQ;YACtB,WAAW,EAAE,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC;YAC5C,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IAEM,MAAM,KAAK,UAAU;QAC1B,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;YACtB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SAC5B,CAAC;IACJ,CAAC;IAYM,MAAM;QACX,OAAO,IAAI,CAAA;;;;sBAIO,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY;mBACtC,IAAI,CAAC,KAAK;oBACT,IAAI,CAAC,cAAc;;YAE3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC/B,IAAI,CAAC,YAAY;YACf,CAAC,CAAC,IAAI,CAAA;wDACoC,KAAK;;;;;uEAKU,IAAI;;sBAErD,IAAI;;iBAET;YACH,CAAC,CAAC,IAAI,CAAA,oBAAoB,KAAK,IAAI,IAAI,eAAe,CACzD;;;;;6BAKkB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;8BACzC,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE;0BACrD,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY;yBACpC,IAAI,CAAC,SAAS;uBAChB,IAAI,CAAC,UAAU;0BACZ,CAAC,GAAkB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;wBAChE,CAAC,GAAe,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE;uBAC3C,IAAI,CAAC,aAAa;;;;;;;;4BAQb,CAAC,IAAI,CAAC,YAAY;YAC9B,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,SAAS;YACd,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;yBACd,IAAI,CAAC,QAAQ;;8BAER,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,IAAI;;;;;wBAKhC,IAAI,CAAC,IAAI;sBACX,IAAI,CAAC,EAAE;;wBAEL,QAAQ,CAAC;YACf,mFAAmF,EACjF,IAAI;YACN,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;YACvC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;YACvC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;SAClC,CAAC;;;;;;;KAOb,CAAC;IACJ,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEO,aAAa,CAAC,GAAe;QACnC,IAAI,CAAC,UAAU,GAAI,GAAG,CAAC,MAA2B,CAAC,KAAK,CAAC;QAEzD,IAAI;YACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;YAC3C,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,KAAK,WAAW,CAAC;YAEjD,IAAI,CAAC,SAAS,GAAG,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC;YAC3C,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;SACjC;QAAC,WAAM;YACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;SAC9B;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,cAAc,CAAC,GAAoB;QACzC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;CACF","sourcesContent":["import { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport '@vaadin/vaadin-button';\nimport '@vaadin/vaadin-text-field/vaadin-text-field';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Translatable } from '../../../../../mixins/translatable';\nimport { classMap } from '../../../../../utils/class-map';\nimport { ListChangeEvent } from '../../../../private/events';\nimport { Group, I18N, List, Skeleton } from '../../../../private/index';\nimport { OriginsListChangeEvent } from './OriginsListChangeEvent';\n\nexport class OriginsList extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'vaadin-text-field': customElements.get('vaadin-text-field'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-skeleton': Skeleton,\n 'iron-icon': customElements.get('iron-icon'),\n 'x-group': Group,\n 'x-list': List,\n 'x-i18n': I18N,\n };\n }\n\n public static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n value: { type: Array },\n invalid: { type: Boolean },\n disabled: { type: Boolean },\n };\n }\n\n public value: string[] = [];\n\n public disabled = false;\n\n private __errorCode: 'invalid' | 'https_only' = 'invalid';\n\n private __invalid = false;\n\n private __newValue = '';\n\n public render(): TemplateResult {\n return html`\n <x-group frame>\n <x-list\n data-testid=\"list\"\n .disabled=${this.disabled || !this._isI18nReady}\n .value=${this.value}\n @change=${this.__handleChange}\n >\n ${this.value.map((item, index) =>\n this._isI18nReady\n ? html`\n <div class=\"flex items-center\" slot=${index}>\n <img\n height=\"16\"\n width=\"16\"\n class=\"mr-m\"\n src=\"https://www.google.com/s2/favicons?domain=${item}\"\n />\n ${item}\n </div>\n `\n : html`<x-skeleton slot=${index}>${item}</x-skeleton>`\n )}\n\n <div class=\"flex flex-col space-y-s sm-space-y-0 sm-flex-row sm-space-x-s sm-items-start\">\n <vaadin-text-field\n data-testid=\"input\"\n .placeholder=${this._isI18nReady ? 'https://foxy.io' : ''}\n .errorMessage=${this._t(`origins.${this.__errorCode}`).toString()}\n .disabled=${this.disabled || !this._isI18nReady}\n .invalid=${this.__invalid}\n .value=${this.__newValue}\n @keypress=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.__submit()}\n @change=${(evt: InputEvent) => evt.stopPropagation()}\n @input=${this.__handleInput}\n >\n </vaadin-text-field>\n\n <div class=\"sm-flex sm-items-center\">\n <vaadin-button\n class=\"w-full sm-w-auto\"\n data-testid=\"button\"\n .disabled=${!this._isI18nReady ||\n this.disabled ||\n this.__invalid ||\n this.value.length >= 10}\n @click=${this.__submit}\n >\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"origins.add\"></x-i18n>\n <iron-icon icon=\"lumo:plus\" slot=\"suffix\"></iron-icon>\n </vaadin-button>\n\n <x-i18n\n .lang=${this.lang}\n .ns=${this.ns}\n key=\"origins.add_hint\"\n class=${classMap({\n 'text-xs text-center block font-lumo mt-xs transition duration-200 sm-mt-0 sm-ml-m':\n true,\n 'text-tertiary': this.value.length < 10,\n 'text-primary': this.value.length >= 10,\n 'hidden': this.value.length === 0,\n })}\n >\n </x-i18n>\n </div>\n </div>\n </x-list>\n </x-group>\n `;\n }\n\n private __sendChange() {\n this.dispatchEvent(new OriginsListChangeEvent(this.value));\n }\n\n private __handleInput(evt: InputEvent) {\n this.__newValue = (evt.target as HTMLInputElement).value;\n\n try {\n const url = new URL(this.__newValue);\n const isSecure = url.protocol === 'https:';\n const isLocalhost = url.hostname === 'localhost';\n\n this.__invalid = !isLocalhost && !isSecure;\n this.__errorCode = 'https_only';\n } catch {\n this.__invalid = this.__newValue.length > 0;\n this.__errorCode = 'invalid';\n }\n\n this.requestUpdate();\n }\n\n private __submit() {\n if (this.__newValue.length > 0) {\n this.value = [...this.value, new URL(this.__newValue).origin];\n this.__newValue = '';\n this.__invalid = false;\n this.__sendChange();\n }\n\n this.requestUpdate();\n }\n\n private __handleChange(evt: ListChangeEvent) {\n this.value = evt.detail;\n this.__sendChange();\n }\n}\n"]}
1
+ {"version":3,"file":"OriginsList.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/OriginsList/OriginsList.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport '@vaadin/vaadin-button';\nimport '@vaadin/vaadin-text-field/vaadin-text-field';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Translatable } from '../../../../../mixins/translatable';\nimport { classMap } from '../../../../../utils/class-map';\nimport { ListChangeEvent } from '../../../../private/events';\nimport { Group, I18N, List, Skeleton } from '../../../../private/index';\nimport { OriginsListChangeEvent } from './OriginsListChangeEvent';\n\nexport class OriginsList extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'vaadin-text-field': customElements.get('vaadin-text-field'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-skeleton': Skeleton,\n 'iron-icon': customElements.get('iron-icon'),\n 'x-group': Group,\n 'x-list': List,\n 'x-i18n': I18N,\n };\n }\n\n public static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n value: { type: Array },\n invalid: { type: Boolean },\n disabled: { type: Boolean },\n };\n }\n\n public value: string[] = [];\n\n public disabled = false;\n\n private __errorCode: 'invalid' | 'https_only' = 'invalid';\n\n private __invalid = false;\n\n private __newValue = '';\n\n public render(): TemplateResult {\n return html`\n <x-group frame>\n <x-list\n data-testid=\"list\"\n .disabled=${this.disabled || !this._isI18nReady}\n .value=${this.value}\n @change=${this.__handleChange}\n >\n ${this.value.map((item, index) =>\n this._isI18nReady\n ? html`\n <div class=\"flex items-center\" slot=${index}>\n <img\n height=\"16\"\n width=\"16\"\n class=\"mr-m\"\n src=\"https://www.google.com/s2/favicons?domain=${item}\"\n />\n ${item}\n </div>\n `\n : html`<x-skeleton slot=${index}>${item}</x-skeleton>`\n )}\n\n <div class=\"flex flex-col sm-flex-row sm-items-start\">\n <vaadin-text-field\n data-testid=\"input\"\n class=\"mb-s sm-mb-0 sm-mr-s\"\n .placeholder=${this._isI18nReady ? 'https://foxy.io' : ''}\n .errorMessage=${this._t(`origins.${this.__errorCode}`).toString()}\n .disabled=${this.disabled || !this._isI18nReady}\n .invalid=${this.__invalid}\n .value=${this.__newValue}\n @keypress=${(evt: KeyboardEvent) => evt.key === 'Enter' && this.__submit()}\n @change=${(evt: InputEvent) => evt.stopPropagation()}\n @input=${this.__handleInput}\n >\n </vaadin-text-field>\n\n <div class=\"sm-flex sm-items-center\">\n <vaadin-button\n class=\"w-full sm-w-auto\"\n data-testid=\"button\"\n .disabled=${!this._isI18nReady ||\n this.disabled ||\n this.__invalid ||\n this.value.length >= 10}\n @click=${this.__submit}\n >\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"origins.add\"></x-i18n>\n <iron-icon icon=\"lumo:plus\" slot=\"suffix\"></iron-icon>\n </vaadin-button>\n\n <x-i18n\n .lang=${this.lang}\n .ns=${this.ns}\n key=\"origins.add_hint\"\n class=${classMap({\n 'text-xs text-center block font-lumo mt-xs transition duration-200 sm-mt-0 sm-ml-m':\n true,\n 'text-tertiary': this.value.length < 10,\n 'text-primary': this.value.length >= 10,\n 'hidden': this.value.length === 0,\n })}\n >\n </x-i18n>\n </div>\n </div>\n </x-list>\n </x-group>\n `;\n }\n\n private __sendChange() {\n this.dispatchEvent(new OriginsListChangeEvent(this.value));\n }\n\n private __handleInput(evt: InputEvent) {\n this.__newValue = (evt.target as HTMLInputElement).value;\n\n try {\n const url = new URL(this.__newValue);\n const isSecure = url.protocol === 'https:';\n const isLocalhost = url.hostname === 'localhost';\n\n this.__invalid = !isLocalhost && !isSecure;\n this.__errorCode = 'https_only';\n } catch {\n this.__invalid = this.__newValue.length > 0;\n this.__errorCode = 'invalid';\n }\n\n this.requestUpdate();\n }\n\n private __submit() {\n if (this.__newValue.length > 0) {\n this.value = [...this.value, new URL(this.__newValue).origin];\n this.__newValue = '';\n this.__invalid = false;\n this.__sendChange();\n }\n\n this.requestUpdate();\n }\n\n private __handleChange(evt: ListChangeEvent) {\n this.value = evt.detail;\n this.__sendChange();\n }\n}\n"]}
@@ -16,6 +16,12 @@ declare const Base: typeof NucleonElement & import("lit-element").Constructor<im
16
16
  * @slot password:after
17
17
  * @slot new-password:before
18
18
  * @slot new-password:after
19
+ * @slot mfa-secret-code:before
20
+ * @slot mfa-secret-code:after
21
+ * @slot mfa-totp-code:before
22
+ * @slot mfa-totp-code:after
23
+ * @slot mfa-remember-device:before
24
+ * @slot mfa-remember-device:after
19
25
  * @slot error:before
20
26
  * @slot error:after
21
27
  * @slot submit:before
@@ -38,6 +44,7 @@ export declare class SignInForm extends Base<Data> {
38
44
  private readonly __renderNewPassword;
39
45
  private readonly __renderMfaTotpCode;
40
46
  private readonly __renderMfaSecretCode;
47
+ private readonly __renderMfaRememberDevice;
41
48
  private readonly __renderError;
42
49
  private readonly __renderSubmit;
43
50
  render(): TemplateResult;
@@ -17,6 +17,12 @@ const Base = ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement,
17
17
  * @slot password:after
18
18
  * @slot new-password:before
19
19
  * @slot new-password:after
20
+ * @slot mfa-secret-code:before
21
+ * @slot mfa-secret-code:after
22
+ * @slot mfa-totp-code:before
23
+ * @slot mfa-totp-code:after
24
+ * @slot mfa-remember-device:before
25
+ * @slot mfa-remember-device:after
20
26
  * @slot error:before
21
27
  * @slot error:after
22
28
  * @slot submit:before
@@ -170,6 +176,7 @@ export class SignInForm extends Base {
170
176
  ?disabled=${isBusy || disabledSelector.matches(scope, true)}
171
177
  ?readonly=${readonlySelector.matches(scope, true)}
172
178
  .checkValidity=${this.__mfaTotpCodeValidator}
179
+ autofocus
173
180
  @keydown=${(evt) => evt.key === 'Enter' && this.submit()}
174
181
  @input=${(evt) => {
175
182
  const mfaTotpCode = evt.target.value;
@@ -187,6 +194,7 @@ export class SignInForm extends Base {
187
194
  };
188
195
  this.__renderMfaSecretCode = () => {
189
196
  var _a, _b;
197
+ const scope = 'mfa-secret-code';
190
198
  const mfaSecretCode = this.__mfaSecretCode;
191
199
  const issuer = encodeURIComponent(this.issuer);
192
200
  const email = encodeURIComponent((_b = (_a = this.form.credential) === null || _a === void 0 ? void 0 : _a.email) !== null && _b !== void 0 ? _b : '');
@@ -195,9 +203,10 @@ export class SignInForm extends Base {
195
203
  otpauthUrl.searchParams.set('issuer', this.issuer);
196
204
  return html `
197
205
  <div>
198
- ${this.renderTemplateOrSlot('mfa-totp-code:before')}
206
+ ${this.renderTemplateOrSlot(`${scope}:before`)}
199
207
 
200
208
  <div
209
+ data-testid=${scope}
201
210
  class="flex space-x-m overflow-hidden rounded border p-m mb-m border-contrast-10"
202
211
  style="background: white; color: black;"
203
212
  >
@@ -215,7 +224,49 @@ export class SignInForm extends Base {
215
224
  </div>
216
225
  </div>
217
226
 
218
- ${this.renderTemplateOrSlot('mfa-totp-code:after')}
227
+ ${this.renderTemplateOrSlot(`${scope}:after`)}
228
+ </div>
229
+ `;
230
+ };
231
+ this.__renderMfaRememberDevice = () => {
232
+ var _a;
233
+ const { __mfaSecretCode: mfaSecretCode, form, lang, ns } = this;
234
+ const scope = 'mfa-remember-device';
235
+ const isBusy = this.in('busy');
236
+ const isDisabled = isBusy || this.disabledSelector.matches(scope, true);
237
+ return html `
238
+ <div>
239
+ ${this.renderTemplateOrSlot(`${scope}:before`)}
240
+
241
+ <vaadin-checkbox
242
+ data-testid=${scope}
243
+ class="mb-m"
244
+ ?disabled=${isDisabled}
245
+ ?checked=${!!((_a = form.credential) === null || _a === void 0 ? void 0 : _a.mfa_remember_device)}
246
+ @change=${(evt) => {
247
+ var _a, _b;
248
+ const target = evt.currentTarget;
249
+ const credential = {
250
+ ...form.credential,
251
+ mfa_remember_device: target.checked,
252
+ mfa_totp_code: (_b = (_a = form.credential) === null || _a === void 0 ? void 0 : _a.mfa_totp_code) !== null && _b !== void 0 ? _b : '',
253
+ };
254
+ if (mfaSecretCode)
255
+ credential.mfa_secret_code = mfaSecretCode;
256
+ this.edit({ credential });
257
+ }}
258
+ >
259
+ <foxy-i18n class="block" lang=${lang} key="mfa_remember_device" ns=${ns}></foxy-i18n>
260
+ <foxy-i18n
261
+ class="block text-xs ${isDisabled ? 'text-disabled' : 'text-secondary'}"
262
+ lang=${lang}
263
+ key="mfa_remember_device_hint"
264
+ ns=${ns}
265
+ >
266
+ </foxy-i18n>
267
+ </vaadin-checkbox>
268
+
269
+ ${this.renderTemplateOrSlot(`${scope}:after`)}
219
270
  </div>
220
271
  `;
221
272
  };
@@ -282,6 +333,9 @@ export class SignInForm extends Base {
282
333
  const isNewPasswordRequired = typeof ((_b = this.form.credential) === null || _b === void 0 ? void 0 : _b.new_password) === 'string' ||
283
334
  errors.some(error => error.startsWith('new_password_'));
284
335
  const isMfaTotpCodeHidden = (!isMfaRequired && !mfaTotpCode) || hiddenSelector.matches('mfa-totp-code', true);
336
+ const isMfaRememberDeviceHidden = !isMfaRequired ||
337
+ (isMfaRequired && mfaSecretCode) ||
338
+ hiddenSelector.matches('mfa-remember-device', true);
285
339
  const isMfaSecretCodeHidden = !mfaSecretCode || hiddenSelector.matches('mfa-secret-code', true);
286
340
  const isNewPasswordHidden = isMfaRequired || hiddenSelector.matches('new-password', true);
287
341
  const isFailed = errors.some(error => error.endsWith('_error'));
@@ -293,6 +347,7 @@ export class SignInForm extends Base {
293
347
  ${isNewPasswordHidden || !isNewPasswordRequired ? '' : this.__renderNewPassword()}
294
348
  ${isMfaTotpCodeHidden ? '' : this.__renderMfaTotpCode()}
295
349
  ${isMfaSecretCodeHidden ? '' : this.__renderMfaSecretCode()}
350
+ ${isMfaRememberDeviceHidden ? '' : this.__renderMfaRememberDevice()}
296
351
  ${hiddenSelector.matches('error', true) || !isFailed ? '' : this.__renderError()}
297
352
  ${hiddenSelector.matches('submit', true) ? '' : this.__renderSubmit()}
298
353