valtech-components 2.0.1014 → 2.0.1016

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 (32) hide show
  1. package/esm2022/lib/components/molecules/content-reaction/content-reaction.component.mjs +16 -4
  2. package/esm2022/lib/components/molecules/content-reaction/types.mjs +1 -1
  3. package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +32 -5
  4. package/esm2022/lib/components/organisms/about-view/types.mjs +1 -1
  5. package/esm2022/lib/components/organisms/org-info-sheet/org-info-sheet.component.mjs +52 -40
  6. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +38 -15
  7. package/esm2022/lib/components/organisms/organization-view/organization-view.i18n.mjs +11 -3
  8. package/esm2022/lib/components/organisms/settings-hub/settings-menu.mjs +2 -2
  9. package/esm2022/lib/components/templates/docs-page/docs-page.component.mjs +1 -1
  10. package/esm2022/lib/version.mjs +2 -2
  11. package/fesm2022/valtech-components.mjs +144 -64
  12. package/fesm2022/valtech-components.mjs.map +1 -1
  13. package/lib/components/molecules/content-reaction/content-reaction.component.d.ts +12 -1
  14. package/lib/components/molecules/content-reaction/types.d.ts +8 -0
  15. package/lib/components/organisms/about-view/about-view.component.d.ts +1 -0
  16. package/lib/components/organisms/about-view/types.d.ts +9 -0
  17. package/lib/components/organisms/org-info-sheet/org-info-sheet.component.d.ts +7 -1
  18. package/lib/components/organisms/organization-view/organization-view.component.d.ts +1 -0
  19. package/lib/version.d.ts +1 -1
  20. package/package.json +1 -1
  21. package/src/lib/assets/fonts/Khula/khula-300-latin-ext.woff2 +0 -0
  22. package/src/lib/assets/fonts/Khula/khula-300-latin.woff2 +0 -0
  23. package/src/lib/assets/fonts/Khula/khula-400-latin-ext.woff2 +0 -0
  24. package/src/lib/assets/fonts/Khula/khula-400-latin.woff2 +0 -0
  25. package/src/lib/assets/fonts/Khula/khula-600-latin-ext.woff2 +0 -0
  26. package/src/lib/assets/fonts/Khula/khula-600-latin.woff2 +0 -0
  27. package/src/lib/assets/fonts/Khula/khula-700-latin-ext.woff2 +0 -0
  28. package/src/lib/assets/fonts/Khula/khula-700-latin.woff2 +0 -0
  29. package/src/lib/assets/fonts/Khula/khula-800-latin-ext.woff2 +0 -0
  30. package/src/lib/assets/fonts/Khula/khula-800-latin.woff2 +0 -0
  31. package/src/lib/services/firebase/firebase-messaging-sw.js +145 -0
  32. package/styles/fonts.scss +35 -3
@@ -1,9 +1,9 @@
1
1
  export const VALTECH_SETTINGS_MENU_LINKS = [
2
2
  { textKey: 'menuGeneral', route: ['/app/settings/general'] },
3
3
  { textKey: 'menuAccount', route: ['/app/settings/account'] },
4
+ { textKey: 'menuOrganization', route: ['/app/settings/organization'] },
4
5
  { textKey: 'menuProfile', route: ['/app/settings/profile'] },
5
6
  { textKey: 'menuSettingsNotifications', route: ['/app/settings/notifications'] },
6
7
  { textKey: 'menuSecurity', route: ['/app/settings/security'] },
7
- { textKey: 'menuOrganization', route: ['/app/settings/organization'] },
8
8
  ];
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MtbWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvc2V0dGluZ3MtaHViL3NldHRpbmdzLW1lbnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJBLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUF1QjtJQUM3RCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRTtJQUM1RCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRTtJQUM1RCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRTtJQUM1RCxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO0lBQ2hGLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO0lBQzlELEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLDRCQUE0QixDQUFDLEVBQUU7Q0FDdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGlua3MgY2Fuw7NuaWNvcyBkZWwgc3VibWVuw7ogXCJQcmVmZXJlbmNpYXNcIiBkZWwgc2lkZS1tZW51IGRlbCBmYWN0b3J5LlxuICpcbiAqIE1pc21hIGZ1ZW50ZSBkZSB2ZXJkYWQgcXVlIGxhcyBjYXJkcyBkZWwgSFVCIChgdmFsLXNldHRpbmdzLWh1YmApOiBUT0RBUyBsYXNcbiAqIGFwcHMgZGVsIGZhY3RvcnkgY29uc3VtZW4gZXN0YSBsaXN0YSBlbiBzdSBtZW7DuiBsYXRlcmFsIHBhcmEgcXVlIGVsIHN1Ym1lbsO6IGRlXG4gKiBwcmVmZXJlbmNpYXMgc2VhIElEw4lOVElDTyBlbnRyZSBhcHBzIChzaG93Y2FzZSwgYmluZ28sIOKApikgeSBjb25zaXN0ZW50ZSBjb24gZWxcbiAqIGh1Yi4gTG8gw7puaWNvIGFwcC1zcGVjaWZpYyBzb24gbGFzIGxhYmVscyAoaTE4biBuYW1lc3BhY2UgYE1lbnVgLCBxdWUgY2FkYSBhcHBcbiAqIHJlZ2lzdHJhKSDigJQgbGEgZXN0cnVjdHVyYS9ydXRhcyB2aWVuZW4gZGUgbGEgbGliLlxuICpcbiAqIE5vIGluY2x1eWUgYGFib3V0YCAoZXMgdW4gw610ZW0gdG9wLWxldmVsIGRlbCBtZW7Duiwgbm8gZGVsIHN1Ym1lbsO6KSwgbmkgYGxvZ291dGBcbiAqIChubyBlcyBsaW5rKSwgbmkgYHByZWZlcmVuY2VzYCAoZXMgZWwgaHViIG1pc21vKS4gU8OtIGluY2x1eWUgYGdlbmVyYWxgICg9IGxhXG4gKiB2aXN0YSBkZSBwcmVmZXJlbmNpYXMgVUkpLCBhY2NvdW50LCBwcm9maWxlLCBub3RpZmljYXRpb25zLCBzZWN1cml0eSB5XG4gKiBvcmdhbml6YXRpb24gKHNlY2Npw7NuIGNvcmUsIHZlciBzZXR0aW5ncy1zZWN0aW9ucy50cykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dGluZ3NNZW51TGluayB7XG4gIC8qKiBpMThuIGtleSBkZSBsYSBsYWJlbCAobmFtZXNwYWNlIGBNZW51YCBkZSBsYSBhcHApLiAqL1xuICB0ZXh0S2V5OiBzdHJpbmc7XG4gIC8qKiBSdXRhIGRlIG5hdmVnYWNpw7NuIChiYWpvIGVsIHNoZWxsIGAvYXBwYCkuICovXG4gIHJvdXRlOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFZBTFRFQ0hfU0VUVElOR1NfTUVOVV9MSU5LUzogU2V0dGluZ3NNZW51TGlua1tdID0gW1xuICB7IHRleHRLZXk6ICdtZW51R2VuZXJhbCcsIHJvdXRlOiBbJy9hcHAvc2V0dGluZ3MvZ2VuZXJhbCddIH0sXG4gIHsgdGV4dEtleTogJ21lbnVBY2NvdW50Jywgcm91dGU6IFsnL2FwcC9zZXR0aW5ncy9hY2NvdW50J10gfSxcbiAgeyB0ZXh0S2V5OiAnbWVudVByb2ZpbGUnLCByb3V0ZTogWycvYXBwL3NldHRpbmdzL3Byb2ZpbGUnXSB9LFxuICB7IHRleHRLZXk6ICdtZW51U2V0dGluZ3NOb3RpZmljYXRpb25zJywgcm91dGU6IFsnL2FwcC9zZXR0aW5ncy9ub3RpZmljYXRpb25zJ10gfSxcbiAgeyB0ZXh0S2V5OiAnbWVudVNlY3VyaXR5Jywgcm91dGU6IFsnL2FwcC9zZXR0aW5ncy9zZWN1cml0eSddIH0sXG4gIHsgdGV4dEtleTogJ21lbnVPcmdhbml6YXRpb24nLCByb3V0ZTogWycvYXBwL3NldHRpbmdzL29yZ2FuaXphdGlvbiddIH0sXG5dO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MtbWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvc2V0dGluZ3MtaHViL3NldHRpbmdzLW1lbnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJBLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUF1QjtJQUM3RCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRTtJQUM1RCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRTtJQUM1RCxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFO0lBQ3RFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO0lBQzVELEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLEtBQUssRUFBRSxDQUFDLDZCQUE2QixDQUFDLEVBQUU7SUFDaEYsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLHdCQUF3QixDQUFDLEVBQUU7Q0FDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGlua3MgY2Fuw7NuaWNvcyBkZWwgc3VibWVuw7ogXCJQcmVmZXJlbmNpYXNcIiBkZWwgc2lkZS1tZW51IGRlbCBmYWN0b3J5LlxuICpcbiAqIE1pc21hIGZ1ZW50ZSBkZSB2ZXJkYWQgcXVlIGxhcyBjYXJkcyBkZWwgSFVCIChgdmFsLXNldHRpbmdzLWh1YmApOiBUT0RBUyBsYXNcbiAqIGFwcHMgZGVsIGZhY3RvcnkgY29uc3VtZW4gZXN0YSBsaXN0YSBlbiBzdSBtZW7DuiBsYXRlcmFsIHBhcmEgcXVlIGVsIHN1Ym1lbsO6IGRlXG4gKiBwcmVmZXJlbmNpYXMgc2VhIElEw4lOVElDTyBlbnRyZSBhcHBzIChzaG93Y2FzZSwgYmluZ28sIOKApikgeSBjb25zaXN0ZW50ZSBjb24gZWxcbiAqIGh1Yi4gTG8gw7puaWNvIGFwcC1zcGVjaWZpYyBzb24gbGFzIGxhYmVscyAoaTE4biBuYW1lc3BhY2UgYE1lbnVgLCBxdWUgY2FkYSBhcHBcbiAqIHJlZ2lzdHJhKSDigJQgbGEgZXN0cnVjdHVyYS9ydXRhcyB2aWVuZW4gZGUgbGEgbGliLlxuICpcbiAqIE5vIGluY2x1eWUgYGFib3V0YCAoZXMgdW4gw610ZW0gdG9wLWxldmVsIGRlbCBtZW7Duiwgbm8gZGVsIHN1Ym1lbsO6KSwgbmkgYGxvZ291dGBcbiAqIChubyBlcyBsaW5rKSwgbmkgYHByZWZlcmVuY2VzYCAoZXMgZWwgaHViIG1pc21vKS4gU8OtIGluY2x1eWUgYGdlbmVyYWxgICg9IGxhXG4gKiB2aXN0YSBkZSBwcmVmZXJlbmNpYXMgVUkpLCBhY2NvdW50LCBwcm9maWxlLCBub3RpZmljYXRpb25zLCBzZWN1cml0eSB5XG4gKiBvcmdhbml6YXRpb24gKHNlY2Npw7NuIGNvcmUsIHZlciBzZXR0aW5ncy1zZWN0aW9ucy50cykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dGluZ3NNZW51TGluayB7XG4gIC8qKiBpMThuIGtleSBkZSBsYSBsYWJlbCAobmFtZXNwYWNlIGBNZW51YCBkZSBsYSBhcHApLiAqL1xuICB0ZXh0S2V5OiBzdHJpbmc7XG4gIC8qKiBSdXRhIGRlIG5hdmVnYWNpw7NuIChiYWpvIGVsIHNoZWxsIGAvYXBwYCkuICovXG4gIHJvdXRlOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFZBTFRFQ0hfU0VUVElOR1NfTUVOVV9MSU5LUzogU2V0dGluZ3NNZW51TGlua1tdID0gW1xuICB7IHRleHRLZXk6ICdtZW51R2VuZXJhbCcsIHJvdXRlOiBbJy9hcHAvc2V0dGluZ3MvZ2VuZXJhbCddIH0sXG4gIHsgdGV4dEtleTogJ21lbnVBY2NvdW50Jywgcm91dGU6IFsnL2FwcC9zZXR0aW5ncy9hY2NvdW50J10gfSxcbiAgeyB0ZXh0S2V5OiAnbWVudU9yZ2FuaXphdGlvbicsIHJvdXRlOiBbJy9hcHAvc2V0dGluZ3Mvb3JnYW5pemF0aW9uJ10gfSxcbiAgeyB0ZXh0S2V5OiAnbWVudVByb2ZpbGUnLCByb3V0ZTogWycvYXBwL3NldHRpbmdzL3Byb2ZpbGUnXSB9LFxuICB7IHRleHRLZXk6ICdtZW51U2V0dGluZ3NOb3RpZmljYXRpb25zJywgcm91dGU6IFsnL2FwcC9zZXR0aW5ncy9ub3RpZmljYXRpb25zJ10gfSxcbiAgeyB0ZXh0S2V5OiAnbWVudVNlY3VyaXR5Jywgcm91dGU6IFsnL2FwcC9zZXR0aW5ncy9zZWN1cml0eSddIH0sXG5dO1xuIl19
@@ -194,7 +194,7 @@ export class DocsPageComponent {
194
194
  </aside>
195
195
  }
196
196
  </div>
197
- `, isInline: true, styles: [".docs-page{display:grid;grid-template-columns:1fr;gap:2rem;max-width:1400px;margin:0 auto;padding:2rem 1.5rem}@media (min-width: 1200px){.docs-page{grid-template-columns:1fr 220px;padding:2rem}}.docs-page__content{min-width:0;max-width:900px}val-docs-breadcrumb{display:block;margin-bottom:1rem}.docs-page__header{margin-bottom:2rem}.docs-page__title-row{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.docs-page__title{margin:0;font-size:2rem;font-weight:700;color:var(--ion-text-color, #1a1a1a);line-height:1.2}@media (min-width: 768px){.docs-page__title{font-size:2.5rem}}.docs-page__badge{display:inline-flex;align-items:center;padding:.25rem .5rem;font-size:.6875rem;font-weight:500;text-transform:uppercase;letter-spacing:.03em;border-radius:4px;background:#0000000a;color:#888}.docs-page__badge--success{background:#0000000a;color:#888}.docs-page__badge--warning{background:var(--ion-color-warning-tint, #fff3e0);color:var(--ion-color-warning-shade, #e65100)}.docs-page__badge--danger{background:var(--ion-color-danger-tint, #ffebee);color:var(--ion-color-danger-shade, #c62828)}.docs-page__lead{margin:1rem 0 0;font-size:1.125rem;line-height:1.7;color:var(--ion-color-medium, #666)}.docs-page__sections>*:last-child{margin-bottom:0}.docs-page__feedback{margin-top:3rem;padding-top:2rem;border-top:1px solid rgba(0,0,0,.08);display:flex;justify-content:center}.docs-page__toc{display:none}@media (min-width: 1200px){.docs-page__toc{display:block;position:sticky;top:2rem;height:fit-content;max-height:calc(100vh - 4rem);overflow-y:auto}}.docs-page__sections h2{font-size:1.5rem;font-weight:600;margin:0 0 1rem;color:var(--ion-text-color, #1a1a1a);scroll-margin-top:2rem}.docs-page__sections h3{font-size:1.125rem;font-weight:600;margin:1.5rem 0 1rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections h4{font-size:1rem;font-weight:600;margin:1.25rem 0 .75rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections p{line-height:1.7;color:var(--ion-text-color, #1a1a1a);margin:0 0 1rem}.docs-page__sections ul,.docs-page__sections ol{padding-left:1.5rem;margin:0 0 1rem}.docs-page__sections li{margin-bottom:.5rem;line-height:1.6;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections a{color:var(--ion-color-primary, #3880ff);text-decoration:none}.docs-page__sections a:hover{text-decoration:underline}.docs-page__sections code:not([class*=language-]){background:#0000000f;padding:.125rem .375rem;border-radius:4px;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.875em}.docs-page__sections pre:not([class*=language-]){background:#0000000a;padding:1rem;border-radius:8px;overflow-x:auto;margin:0 0 1rem}.docs-page__sections pre:not([class*=language-]) code{background:none;padding:0}.docs-page__sections table{width:100%;border-collapse:collapse;margin:0 0 1rem;font-size:.875rem}.docs-page__sections th,.docs-page__sections td{padding:.75rem;text-align:left;border-bottom:1px solid rgba(0,0,0,.1)}.docs-page__sections th{font-weight:600;background:#00000005}.docs-page__sections blockquote{margin:0 0 1rem;padding:1rem 1.5rem;border-left:4px solid var(--ion-color-primary, #3880ff);background:#00000005;border-radius:0 8px 8px 0}.docs-page__sections blockquote p:last-child{margin-bottom:0}.docs-page__sections img{max-width:100%;height:auto;border-radius:8px}.docs-page__sections hr{border:none;border-top:1px solid rgba(0,0,0,.1);margin:2rem 0}.docs-page__sections strong{font-weight:600}.docs-page__sections section{margin-bottom:2rem}:host-context(.dark) .docs-page__badge,:host-context([color-scheme=\"dark\"]) .docs-page__badge{background:#ffffff0f;color:#999}:host-context(.dark) .docs-page__badge--success,:host-context([color-scheme=\"dark\"]) .docs-page__badge--success{background:#ffffff0f;color:#999}:host-context(.dark) .docs-page__badge--warning,:host-context([color-scheme=\"dark\"]) .docs-page__badge--warning{background:#e6510033;color:#ffb74d}:host-context(.dark) .docs-page__badge--danger,:host-context([color-scheme=\"dark\"]) .docs-page__badge--danger{background:#c6282833;color:#e57373}:host-context(.dark) .docs-page__sections code:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections code:not([class*=language-]){background:#ffffff1a}:host-context(.dark) .docs-page__sections pre:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections pre:not([class*=language-]){background:#ffffff0f}:host-context(.dark) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections th{background:#ffffff0a}:host-context(.dark) .docs-page__sections th,:host-context(.dark) .docs-page__sections td,:host-context([color-scheme=\"dark\"]) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections td{border-color:#ffffff1a}:host-context(.dark) .docs-page__sections blockquote,:host-context([color-scheme=\"dark\"]) .docs-page__sections blockquote{background:#ffffff0a}:host-context(.dark) .docs-page__sections hr,:host-context([color-scheme=\"dark\"]) .docs-page__sections hr{border-color:#ffffff1a}:host-context(.dark) .docs-page__feedback,:host-context([color-scheme=\"dark\"]) .docs-page__feedback{border-color:#ffffff1a}@media (max-width: 768px){.docs-page__feedback{margin-top:2rem;padding-top:1.5rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DocsBreadcrumbComponent, selector: "val-docs-breadcrumb", inputs: ["props"], outputs: ["navigate"] }, { kind: "component", type: DocsNavLinksComponent, selector: "val-docs-nav-links", inputs: ["props"], outputs: ["navigate"] }, { kind: "component", type: DocsTocComponent, selector: "val-docs-toc", inputs: ["props"], outputs: ["sectionChange"] }, { kind: "component", type: ContentReactionComponent, selector: "val-content-reaction", inputs: ["props"], outputs: ["reactionSubmit", "reactionChange"] }] }); }
197
+ `, isInline: true, styles: [".docs-page{display:grid;grid-template-columns:1fr;gap:2rem;max-width:1400px;margin:0 auto;padding:2rem 1.5rem}@media (min-width: 1200px){.docs-page{grid-template-columns:1fr 220px;padding:2rem}}.docs-page__content{min-width:0;max-width:900px}val-docs-breadcrumb{display:block;margin-bottom:1rem}.docs-page__header{margin-bottom:2rem}.docs-page__title-row{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.docs-page__title{margin:0;font-size:2rem;font-weight:700;color:var(--ion-text-color, #1a1a1a);line-height:1.2}@media (min-width: 768px){.docs-page__title{font-size:2.5rem}}.docs-page__badge{display:inline-flex;align-items:center;padding:.25rem .5rem;font-size:.6875rem;font-weight:500;text-transform:uppercase;letter-spacing:.03em;border-radius:4px;background:#0000000a;color:#888}.docs-page__badge--success{background:#0000000a;color:#888}.docs-page__badge--warning{background:var(--ion-color-warning-tint, #fff3e0);color:var(--ion-color-warning-shade, #e65100)}.docs-page__badge--danger{background:var(--ion-color-danger-tint, #ffebee);color:var(--ion-color-danger-shade, #c62828)}.docs-page__lead{margin:1rem 0 0;font-size:1.125rem;line-height:1.7;color:var(--ion-color-medium, #666)}.docs-page__sections>*:last-child{margin-bottom:0}.docs-page__feedback{margin-top:3rem;padding-top:2rem;border-top:1px solid rgba(0,0,0,.08);display:flex;justify-content:center}.docs-page__toc{display:none}@media (min-width: 1200px){.docs-page__toc{display:block;position:sticky;top:2rem;height:fit-content;max-height:calc(100vh - 4rem);overflow-y:auto}}.docs-page__sections h2{font-size:1.5rem;font-weight:600;margin:0 0 1rem;color:var(--ion-text-color, #1a1a1a);scroll-margin-top:2rem}.docs-page__sections h3{font-size:1.125rem;font-weight:600;margin:1.5rem 0 1rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections h4{font-size:1rem;font-weight:600;margin:1.25rem 0 .75rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections p{line-height:1.7;color:var(--ion-text-color, #1a1a1a);margin:0 0 1rem}.docs-page__sections ul,.docs-page__sections ol{padding-left:1.5rem;margin:0 0 1rem}.docs-page__sections li{margin-bottom:.5rem;line-height:1.6;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections a{color:var(--ion-color-primary, #3880ff);text-decoration:none}.docs-page__sections a:hover{text-decoration:underline}.docs-page__sections code:not([class*=language-]){background:#0000000f;padding:.125rem .375rem;border-radius:4px;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.875em}.docs-page__sections pre:not([class*=language-]){background:#0000000a;padding:1rem;border-radius:8px;overflow-x:auto;margin:0 0 1rem}.docs-page__sections pre:not([class*=language-]) code{background:none;padding:0}.docs-page__sections table{width:100%;border-collapse:collapse;margin:0 0 1rem;font-size:.875rem}.docs-page__sections th,.docs-page__sections td{padding:.75rem;text-align:left;border-bottom:1px solid rgba(0,0,0,.1)}.docs-page__sections th{font-weight:600;background:#00000005}.docs-page__sections blockquote{margin:0 0 1rem;padding:1rem 1.5rem;border-left:4px solid var(--ion-color-primary, #3880ff);background:#00000005;border-radius:0 8px 8px 0}.docs-page__sections blockquote p:last-child{margin-bottom:0}.docs-page__sections img{max-width:100%;height:auto;border-radius:8px}.docs-page__sections hr{border:none;border-top:1px solid rgba(0,0,0,.1);margin:2rem 0}.docs-page__sections strong{font-weight:600}.docs-page__sections section{margin-bottom:2rem}:host-context(.dark) .docs-page__badge,:host-context([color-scheme=\"dark\"]) .docs-page__badge{background:#ffffff0f;color:#999}:host-context(.dark) .docs-page__badge--success,:host-context([color-scheme=\"dark\"]) .docs-page__badge--success{background:#ffffff0f;color:#999}:host-context(.dark) .docs-page__badge--warning,:host-context([color-scheme=\"dark\"]) .docs-page__badge--warning{background:#e6510033;color:#ffb74d}:host-context(.dark) .docs-page__badge--danger,:host-context([color-scheme=\"dark\"]) .docs-page__badge--danger{background:#c6282833;color:#e57373}:host-context(.dark) .docs-page__sections code:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections code:not([class*=language-]){background:#ffffff1a}:host-context(.dark) .docs-page__sections pre:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections pre:not([class*=language-]){background:#ffffff0f}:host-context(.dark) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections th{background:#ffffff0a}:host-context(.dark) .docs-page__sections th,:host-context(.dark) .docs-page__sections td,:host-context([color-scheme=\"dark\"]) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections td{border-color:#ffffff1a}:host-context(.dark) .docs-page__sections blockquote,:host-context([color-scheme=\"dark\"]) .docs-page__sections blockquote{background:#ffffff0a}:host-context(.dark) .docs-page__sections hr,:host-context([color-scheme=\"dark\"]) .docs-page__sections hr{border-color:#ffffff1a}:host-context(.dark) .docs-page__feedback,:host-context([color-scheme=\"dark\"]) .docs-page__feedback{border-color:#ffffff1a}@media (max-width: 768px){.docs-page__feedback{margin-top:2rem;padding-top:1.5rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DocsBreadcrumbComponent, selector: "val-docs-breadcrumb", inputs: ["props"], outputs: ["navigate"] }, { kind: "component", type: DocsNavLinksComponent, selector: "val-docs-nav-links", inputs: ["props"], outputs: ["navigate"] }, { kind: "component", type: DocsTocComponent, selector: "val-docs-toc", inputs: ["props"], outputs: ["sectionChange"] }, { kind: "component", type: ContentReactionComponent, selector: "val-content-reaction", inputs: ["props", "_modalRef"], outputs: ["reactionSubmit", "reactionChange"] }] }); }
198
198
  }
199
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsPageComponent, decorators: [{
200
200
  type: Component,
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '2.0.1014';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC4xMDE0JztcbiJdfQ==
5
+ export const VERSION = '2.0.1016';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC4xMDE2JztcbiJdfQ==
@@ -54,7 +54,7 @@ import 'prismjs/components/prism-json';
54
54
  * Current version of valtech-components.
55
55
  * This is automatically updated during the publish process.
56
56
  */
57
- const VERSION = '2.0.1014';
57
+ const VERSION = '2.0.1016';
58
58
 
59
59
  // Control de estado de refresco (singleton a nivel de módulo)
60
60
  let isRefreshing = false;
@@ -43466,10 +43466,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
43466
43466
  const VALTECH_SETTINGS_MENU_LINKS = [
43467
43467
  { textKey: 'menuGeneral', route: ['/app/settings/general'] },
43468
43468
  { textKey: 'menuAccount', route: ['/app/settings/account'] },
43469
+ { textKey: 'menuOrganization', route: ['/app/settings/organization'] },
43469
43470
  { textKey: 'menuProfile', route: ['/app/settings/profile'] },
43470
43471
  { textKey: 'menuSettingsNotifications', route: ['/app/settings/notifications'] },
43471
43472
  { textKey: 'menuSecurity', route: ['/app/settings/security'] },
43472
- { textKey: 'menuOrganization', route: ['/app/settings/organization'] },
43473
43473
  ];
43474
43474
 
43475
43475
  addIcons({ shieldCheckmarkOutline, checkmarkCircleOutline });
@@ -46129,6 +46129,12 @@ class OrgInfoSheetComponent {
46129
46129
  this.body = '';
46130
46130
  /** Label del botón cerrar (resuelto por el consumer). Fallback al namespace propio. */
46131
46131
  this.closeLabel = '';
46132
+ /**
46133
+ * Muestra las 3 feature-cards de organizaciones (colaboración / cambio rápido /
46134
+ * invitaciones). `false` → sheet article-style (solo título + subtítulo + cuerpo),
46135
+ * reusable como explainer genérico (ej. integraciones / API keys). Default `true`.
46136
+ */
46137
+ this.showFeatures = true;
46132
46138
  /** Props del botón cerrar del footer (el consumer puede pasar custom). */
46133
46139
  this.closeProps = {
46134
46140
  text: 'Cerrar',
@@ -46158,7 +46164,7 @@ class OrgInfoSheetComponent {
46158
46164
  return this.i18n.t(key, DEFAULT_NAMESPACE$d);
46159
46165
  }
46160
46166
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrgInfoSheetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: OrgInfoSheetComponent, isStandalone: true, selector: "val-org-info-sheet", inputs: { title: "title", subtitle: "subtitle", body: "body", closeLabel: "closeLabel", closeProps: "closeProps", _modalRef: "_modalRef" }, ngImport: i0, template: `
46167
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: OrgInfoSheetComponent, isStandalone: true, selector: "val-org-info-sheet", inputs: { title: "title", subtitle: "subtitle", body: "body", closeLabel: "closeLabel", showFeatures: "showFeatures", closeProps: "closeProps", _modalRef: "_modalRef" }, ngImport: i0, template: `
46162
46168
  <ion-header>
46163
46169
  <ion-toolbar>
46164
46170
  <ion-buttons slot="end">
@@ -46173,29 +46179,31 @@ class OrgInfoSheetComponent {
46173
46179
  <val-display [props]="{ content: resolvedTitle(), size: 'small', color: 'dark' }" />
46174
46180
  <val-title [props]="{ content: resolvedSubtitle(), size: 'large', color: '', bold: false }" />
46175
46181
 
46176
- <div class="info-features">
46177
- <div class="info-feature">
46178
- <ion-icon name="people-outline" class="info-feature__icon" />
46179
- <div>
46180
- <div class="info-feature__title">{{ tt('featureCollabTitle') }}</div>
46181
- <div class="info-feature__desc">{{ tt('featureCollabDesc') }}</div>
46182
+ @if (showFeatures) {
46183
+ <div class="info-features">
46184
+ <div class="info-feature">
46185
+ <ion-icon name="people-outline" class="info-feature__icon" />
46186
+ <div>
46187
+ <div class="info-feature__title">{{ tt('featureCollabTitle') }}</div>
46188
+ <div class="info-feature__desc">{{ tt('featureCollabDesc') }}</div>
46189
+ </div>
46182
46190
  </div>
46183
- </div>
46184
- <div class="info-feature">
46185
- <ion-icon name="swap-horizontal-outline" class="info-feature__icon" />
46186
- <div>
46187
- <div class="info-feature__title">{{ tt('featureSwitchTitle') }}</div>
46188
- <div class="info-feature__desc">{{ tt('featureSwitchDesc') }}</div>
46191
+ <div class="info-feature">
46192
+ <ion-icon name="swap-horizontal-outline" class="info-feature__icon" />
46193
+ <div>
46194
+ <div class="info-feature__title">{{ tt('featureSwitchTitle') }}</div>
46195
+ <div class="info-feature__desc">{{ tt('featureSwitchDesc') }}</div>
46196
+ </div>
46189
46197
  </div>
46190
- </div>
46191
- <div class="info-feature">
46192
- <ion-icon name="mail-outline" class="info-feature__icon" />
46193
- <div>
46194
- <div class="info-feature__title">{{ tt('featureInviteTitle') }}</div>
46195
- <div class="info-feature__desc">{{ tt('featureInviteDesc') }}</div>
46198
+ <div class="info-feature">
46199
+ <ion-icon name="mail-outline" class="info-feature__icon" />
46200
+ <div>
46201
+ <div class="info-feature__title">{{ tt('featureInviteTitle') }}</div>
46202
+ <div class="info-feature__desc">{{ tt('featureInviteDesc') }}</div>
46203
+ </div>
46196
46204
  </div>
46197
46205
  </div>
46198
- </div>
46206
+ }
46199
46207
 
46200
46208
  @for (para of paragraphs(); track $index) {
46201
46209
  <val-text
@@ -46242,29 +46250,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
46242
46250
  <val-display [props]="{ content: resolvedTitle(), size: 'small', color: 'dark' }" />
46243
46251
  <val-title [props]="{ content: resolvedSubtitle(), size: 'large', color: '', bold: false }" />
46244
46252
 
46245
- <div class="info-features">
46246
- <div class="info-feature">
46247
- <ion-icon name="people-outline" class="info-feature__icon" />
46248
- <div>
46249
- <div class="info-feature__title">{{ tt('featureCollabTitle') }}</div>
46250
- <div class="info-feature__desc">{{ tt('featureCollabDesc') }}</div>
46253
+ @if (showFeatures) {
46254
+ <div class="info-features">
46255
+ <div class="info-feature">
46256
+ <ion-icon name="people-outline" class="info-feature__icon" />
46257
+ <div>
46258
+ <div class="info-feature__title">{{ tt('featureCollabTitle') }}</div>
46259
+ <div class="info-feature__desc">{{ tt('featureCollabDesc') }}</div>
46260
+ </div>
46251
46261
  </div>
46252
- </div>
46253
- <div class="info-feature">
46254
- <ion-icon name="swap-horizontal-outline" class="info-feature__icon" />
46255
- <div>
46256
- <div class="info-feature__title">{{ tt('featureSwitchTitle') }}</div>
46257
- <div class="info-feature__desc">{{ tt('featureSwitchDesc') }}</div>
46262
+ <div class="info-feature">
46263
+ <ion-icon name="swap-horizontal-outline" class="info-feature__icon" />
46264
+ <div>
46265
+ <div class="info-feature__title">{{ tt('featureSwitchTitle') }}</div>
46266
+ <div class="info-feature__desc">{{ tt('featureSwitchDesc') }}</div>
46267
+ </div>
46258
46268
  </div>
46259
- </div>
46260
- <div class="info-feature">
46261
- <ion-icon name="mail-outline" class="info-feature__icon" />
46262
- <div>
46263
- <div class="info-feature__title">{{ tt('featureInviteTitle') }}</div>
46264
- <div class="info-feature__desc">{{ tt('featureInviteDesc') }}</div>
46269
+ <div class="info-feature">
46270
+ <ion-icon name="mail-outline" class="info-feature__icon" />
46271
+ <div>
46272
+ <div class="info-feature__title">{{ tt('featureInviteTitle') }}</div>
46273
+ <div class="info-feature__desc">{{ tt('featureInviteDesc') }}</div>
46274
+ </div>
46265
46275
  </div>
46266
46276
  </div>
46267
- </div>
46277
+ }
46268
46278
 
46269
46279
  @for (para of paragraphs(); track $index) {
46270
46280
  <val-text
@@ -46290,6 +46300,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
46290
46300
  type: Input
46291
46301
  }], closeLabel: [{
46292
46302
  type: Input
46303
+ }], showFeatures: [{
46304
+ type: Input
46293
46305
  }], closeProps: [{
46294
46306
  type: Input
46295
46307
  }], _modalRef: [{
@@ -49823,7 +49835,11 @@ const ORGANIZATION_VIEW_I18N = {
49823
49835
  apiKeysSectionTitle: 'Integraciones (API Keys)',
49824
49836
  apiKeysSectionHint: 'También puedes operar tu organización vía API: crea una Client API Key org-scopeada para integraciones máquina-a-máquina (por ejemplo, dar de alta miembros en masa desde tu propio sistema).',
49825
49837
  apiKeysMoreInfo: 'Más información',
49826
- orgsMoreInfo: 'Más información',
49838
+ apiKeysInfoTitle: 'Integraciones por API',
49839
+ apiKeysInfoSubtitle: 'Opera tu organización máquina-a-máquina',
49840
+ apiKeysInfoContent: 'Una API Key te permite operar tu organización desde tus propios sistemas, sin entrar a la app: dar de alta usuarios, asignar roles, leer datos y automatizar flujos.\n\nCada key es org-scopeada y lleva solo los permisos que le asignes — concede el mínimo necesario. Puedes revocarla en cualquier momento.\n\nEl secreto se muestra una sola vez al crearla: guárdalo en un lugar seguro. Si lo pierdes, genera una nueva key y revoca la anterior.',
49841
+ apiKeysInfoClose: 'Entendido',
49842
+ orgsMoreInfo: 'Aprender más sobre organizaciones',
49827
49843
  orgsInfoTitle: '¿Qué son las organizaciones?',
49828
49844
  orgsInfoSubtitle: 'Todo lo que necesitas saber',
49829
49845
  orgsInfoClose: 'Cerrar',
@@ -49902,7 +49918,11 @@ const ORGANIZATION_VIEW_I18N = {
49902
49918
  apiKeysSectionTitle: 'Integrations (API Keys)',
49903
49919
  apiKeysSectionHint: 'You can also operate your organization via API: create an org-scoped Client API Key for machine-to-machine integrations (for example, bulk-provisioning members from your own system).',
49904
49920
  apiKeysMoreInfo: 'More information',
49905
- orgsMoreInfo: 'More information',
49921
+ apiKeysInfoTitle: 'API integrations',
49922
+ apiKeysInfoSubtitle: 'Operate your organization machine-to-machine',
49923
+ apiKeysInfoContent: 'An API Key lets you operate your organization from your own systems, without opening the app: provision users, assign roles, read data, and automate flows.\n\nEach key is org-scoped and carries only the permissions you assign — grant the minimum needed. You can revoke it at any time.\n\nThe secret is shown only once at creation: store it somewhere safe. If you lose it, create a new key and revoke the old one.',
49924
+ apiKeysInfoClose: 'Got it',
49925
+ orgsMoreInfo: 'Learn more about organizations',
49906
49926
  orgsInfoTitle: 'What are organizations?',
49907
49927
  orgsInfoSubtitle: 'Everything you need to know',
49908
49928
  orgsInfoClose: 'Close',
@@ -50291,6 +50311,31 @@ class OrganizationViewComponent {
50291
50311
  backdropDismiss: true,
50292
50312
  });
50293
50313
  }
50314
+ // "Más información" de la sección Integraciones — abre un sheet EXPLICATIVO
50315
+ // (article-style, sin las feature-cards de org), NO el modal de gestión de API
50316
+ // keys. La gestión se abre con el botón "Gestionar" (onOpenApiKeys).
50317
+ onApiKeysInfo() {
50318
+ void this.modalService.open({
50319
+ component: OrgInfoSheetComponent,
50320
+ componentProps: {
50321
+ showFeatures: false,
50322
+ title: this.tt('apiKeysInfoTitle'),
50323
+ subtitle: this.tt('apiKeysInfoSubtitle'),
50324
+ body: this.tt('apiKeysInfoContent'),
50325
+ closeLabel: this.tt('apiKeysInfoClose'),
50326
+ closeProps: {
50327
+ text: this.tt('apiKeysInfoClose'),
50328
+ fill: 'outline',
50329
+ color: 'dark',
50330
+ size: 'default',
50331
+ expand: 'block',
50332
+ type: 'button',
50333
+ },
50334
+ },
50335
+ breakpoints: { breakpoints: [0, 0.85], initialBreakpoint: 0.85, showHandle: true },
50336
+ backdropDismiss: true,
50337
+ });
50338
+ }
50294
50339
  onViewPermissions() {
50295
50340
  this.nav.navigateByUrl(this.resolvedConfig().viewPermissionsRoute);
50296
50341
  }
@@ -50517,6 +50562,11 @@ class OrganizationViewComponent {
50517
50562
  content: pageDescription(),
50518
50563
  }"
50519
50564
  />
50565
+ <!-- "Aprender más sobre organizaciones" — bajo el título+subtítulo
50566
+ principal de la vista (abre el explainer org-info-sheet). -->
50567
+ <button class="org-more-info-link" type="button" (click)="onOrgInfo()">
50568
+ {{ tt('orgsMoreInfo') }}
50569
+ </button>
50520
50570
  </header>
50521
50571
 
50522
50572
  @if (resolvedConfig().showInfo) {
@@ -50536,12 +50586,6 @@ class OrganizationViewComponent {
50536
50586
  }
50537
50587
  </div>
50538
50588
 
50539
- <!-- "Más información" sobre organizaciones — disponible siempre (todo
50540
- user tiene org por defecto y no ve el empty-state de account). -->
50541
- <button class="org-more-info-link" type="button" (click)="onOrgInfo()">
50542
- {{ tt('orgsMoreInfo') }}
50543
- </button>
50544
-
50545
50589
  <div class="section-body">
50546
50590
  @if (loading()) {
50547
50591
  <val-skeleton-layout [props]="{ preset: 'detail', rows: 4 }" />
@@ -50694,7 +50738,7 @@ class OrganizationViewComponent {
50694
50738
  <div class="invite-cta__text">
50695
50739
  <val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: tt('apiKeysSectionTitle') }" />
50696
50740
  <val-text [props]="{ size: 'medium', color: 'dark', bold: false, content: tt('apiKeysSectionHint') }" />
50697
- <button class="org-more-info-link" type="button" (click)="onOpenApiKeys()">
50741
+ <button class="org-more-info-link" type="button" (click)="onApiKeysInfo()">
50698
50742
  {{ tt('apiKeysMoreInfo') }}
50699
50743
  </button>
50700
50744
  </div>
@@ -50821,6 +50865,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
50821
50865
  content: pageDescription(),
50822
50866
  }"
50823
50867
  />
50868
+ <!-- "Aprender más sobre organizaciones" — bajo el título+subtítulo
50869
+ principal de la vista (abre el explainer org-info-sheet). -->
50870
+ <button class="org-more-info-link" type="button" (click)="onOrgInfo()">
50871
+ {{ tt('orgsMoreInfo') }}
50872
+ </button>
50824
50873
  </header>
50825
50874
 
50826
50875
  @if (resolvedConfig().showInfo) {
@@ -50840,12 +50889,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
50840
50889
  }
50841
50890
  </div>
50842
50891
 
50843
- <!-- "Más información" sobre organizaciones — disponible siempre (todo
50844
- user tiene org por defecto y no ve el empty-state de account). -->
50845
- <button class="org-more-info-link" type="button" (click)="onOrgInfo()">
50846
- {{ tt('orgsMoreInfo') }}
50847
- </button>
50848
-
50849
50892
  <div class="section-body">
50850
50893
  @if (loading()) {
50851
50894
  <val-skeleton-layout [props]="{ preset: 'detail', rows: 4 }" />
@@ -50998,7 +51041,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
50998
51041
  <div class="invite-cta__text">
50999
51042
  <val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: tt('apiKeysSectionTitle') }" />
51000
51043
  <val-text [props]="{ size: 'medium', color: 'dark', bold: false, content: tt('apiKeysSectionHint') }" />
51001
- <button class="org-more-info-link" type="button" (click)="onOpenApiKeys()">
51044
+ <button class="org-more-info-link" type="button" (click)="onApiKeysInfo()">
51002
51045
  {{ tt('apiKeysMoreInfo') }}
51003
51046
  </button>
51004
51047
  </div>
@@ -53589,6 +53632,7 @@ const CONTENT_REACTION_I18N = {
53589
53632
  positiveLabel: 'Sí, mucho',
53590
53633
  negativeLabel: 'No tanto',
53591
53634
  negativeFeedbackTitle: '¿Cuéntanos qué no te gustó?',
53635
+ close: 'Cerrar',
53592
53636
  },
53593
53637
  en: {
53594
53638
  question: 'Was this content helpful?',
@@ -53601,6 +53645,7 @@ const CONTENT_REACTION_I18N = {
53601
53645
  positiveLabel: 'Yes, a lot',
53602
53646
  negativeLabel: 'Not really',
53603
53647
  negativeFeedbackTitle: "Tell us what you didn't like?",
53648
+ close: 'Close',
53604
53649
  },
53605
53650
  };
53606
53651
  /**
@@ -53655,6 +53700,7 @@ class ContentReactionComponent {
53655
53700
  readonly: this.props.readonly ?? false,
53656
53701
  // Variante: 'emoji' cuando se declara explícitamente o cuando se pasan emojis custom.
53657
53702
  variant: this.props.variant ?? (this.props.emojis ? 'emoji' : 'buttons'),
53703
+ showCloseButton: this.props.showCloseButton ?? false,
53658
53704
  }));
53659
53705
  this.activeReactionValues = computed(() => this.resolvedProps().emojis.length === 2 ? ['negative', 'positive'] : ['negative', 'neutral', 'positive']);
53660
53706
  this.showCommentField = computed(() => {
@@ -53667,6 +53713,7 @@ class ContentReactionComponent {
53667
53713
  return this.resolvedProps().showComment;
53668
53714
  });
53669
53715
  this.canSubmit = computed(() => this.state().selectedValue !== null && !this.state().isLoading);
53716
+ addIcons({ closeOutline });
53670
53717
  // Auto-registro de defaults i18n (es/en) si el consumer no proveyó el
53671
53718
  // namespace. Garantiza que `t()` nunca caiga en key faltante. Ver
53672
53719
  // CONTENT_REACTION_I18N. Idempotente: solo la 1ª instancia registra.
@@ -53674,6 +53721,10 @@ class ContentReactionComponent {
53674
53721
  this.i18n.registerContent('ContentReaction', CONTENT_REACTION_I18N);
53675
53722
  }
53676
53723
  }
53724
+ /** Cierra el modal/sheet contenedor (si el componente se abrió vía ModalService). */
53725
+ close() {
53726
+ void this._modalRef?.dismiss();
53727
+ }
53677
53728
  ngOnInit() {
53678
53729
  this.loadPreviousReaction();
53679
53730
  }
@@ -53813,13 +53864,15 @@ class ContentReactionComponent {
53813
53864
  return this.i18n.t(key, 'ContentReaction') || translations[key] || key;
53814
53865
  }
53815
53866
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ContentReactionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
53816
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ContentReactionComponent, isStandalone: true, selector: "val-content-reaction", inputs: { props: "props" }, outputs: { reactionSubmit: "reactionSubmit", reactionChange: "reactionChange" }, usesOnChanges: true, ngImport: i0, template: "@if (isConfigured()) {\n<div class=\"content-reaction\" [class.disabled]=\"resolvedProps().disabled\" [class.readonly]=\"resolvedProps().readonly\">\n <!-- Loading inicial -->\n @if (state().isLoading && !state().selectedValue) {\n <div class=\"loading-container\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @else {\n <!-- Pregunta -->\n <p class=\"question\">\n {{ state().selectedValue === 'negative' ? t('negativeFeedbackTitle') : resolvedProps().question }}\n </p>\n\n <!-- Botones de reacci\u00F3n \u2014 variante emoji (caras, estrellas, thumbs, \u2026) -->\n @if (resolvedProps().variant === 'emoji') {\n <div class=\"reaction-buttons reaction-buttons--emoji\">\n @for (value of activeReactionValues(); track value; let i = $index) {\n <ion-button\n fill=\"clear\"\n shape=\"round\"\n [class.selected]=\"isSelected(value)\"\n [attr.aria-label]=\"resolvedProps().emojiLabels[i]\"\n [attr.aria-pressed]=\"isSelected(value)\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction(value)\"\n >\n <span class=\"emoji-btn\">{{ resolvedProps().emojis[i] }}</span>\n </ion-button>\n }\n </div>\n } @else {\n <!-- Botones de reacci\u00F3n \u2014 variante texto (default) -->\n <div class=\"reaction-buttons\">\n <ion-button\n [fill]=\"isSelected('positive') ? 'solid' : 'outline'\"\n shape=\"round\"\n color=\"dark\"\n [attr.aria-pressed]=\"isSelected('positive')\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction('positive')\"\n >\n {{ t('positiveLabel') }}\n </ion-button>\n <ion-button\n [fill]=\"isSelected('negative') ? 'solid' : 'outline'\"\n shape=\"round\"\n color=\"dark\"\n [attr.aria-pressed]=\"isSelected('negative')\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction('negative')\"\n >\n {{ t('negativeLabel') }}\n </ion-button>\n </div>\n }\n\n <!-- Campo de comentario (solo si hay selecci\u00F3n) -->\n @if (showCommentField()) {\n <div class=\"comment-section\">\n <ion-textarea\n [value]=\"state().comment\"\n [placeholder]=\"resolvedProps().commentPlaceholder\"\n [maxlength]=\"resolvedProps().maxCommentLength\"\n [disabled]=\"resolvedProps().disabled\"\n [rows]=\"3\"\n class=\"comment-textarea\"\n (ionInput)=\"updateComment($event)\"\n ></ion-textarea>\n <span class=\"char-count\"> {{ state().comment.length }}/{{ resolvedProps().maxCommentLength }} </span>\n </div>\n }\n\n <!-- Bot\u00F3n de env\u00EDo -->\n @if (state().selectedValue && !state().isSubmitted) {\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"!canSubmit()\" (click)=\"submitReaction()\" class=\"submit-button\">\n @if (state().isLoading) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ state().hadPreviousReaction ? t('update') : t('submit') }} }\n </ion-button>\n }\n\n <!-- Mensaje de confirmaci\u00F3n -->\n @if (state().isSubmitted) {\n <p class=\"submitted-message\">{{ t('thankYou') }}</p>\n }\n\n <!-- Error -->\n @if (state().error) {\n <p class=\"error-message\">{{ state().error }}</p>\n } }\n</div>\n}\n", styles: [":host{display:block}.content-reaction{padding:16px;text-align:center}.content-reaction.disabled{opacity:.6;pointer-events:none}.content-reaction.readonly{pointer-events:none}.question{font-size:1.0625rem;font-weight:700;color:var(--ion-color-dark);margin:0 0 16px}.reaction-buttons{display:flex;justify-content:center;gap:12px;margin-bottom:20px}.reaction-buttons--emoji{gap:8px}.reaction-buttons--emoji ion-button{--padding-start: 4px;--padding-end: 4px;transition:transform .15s ease}.reaction-buttons--emoji ion-button.selected{transform:scale(1.25)}.reaction-buttons--emoji ion-button:not(.selected):not([disabled]){opacity:.55}.reaction-buttons--emoji ion-button:not(.selected):not([disabled]):hover{opacity:1}.emoji-btn{font-size:2rem;line-height:1;display:block}.comment-section{margin-top:16px;animation:slideIn .3s ease-out}.comment-section .comment-textarea{--background: transparent;--border-radius: 8px;--padding-start: 12px;--padding-end: 12px;width:100%}.comment-section .char-count{display:block;text-align:right;font-size:.75rem;color:var(--ion-color-medium);margin-top:4px}.submit-button{margin-top:16px}.submitted-message{margin-top:16px;color:var(--ion-color-success);font-weight:500;animation:fadeIn .3s ease-out}.error-message{margin-top:8px;color:var(--ion-color-danger);font-size:.875rem}.loading-container{display:flex;justify-content:center;padding:20px}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }] }); }
53867
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ContentReactionComponent, isStandalone: true, selector: "val-content-reaction", inputs: { props: "props", _modalRef: "_modalRef" }, outputs: { reactionSubmit: "reactionSubmit", reactionChange: "reactionChange" }, usesOnChanges: true, ngImport: i0, template: "@if (isConfigured()) {\n<div class=\"content-reaction\" [class.disabled]=\"resolvedProps().disabled\" [class.readonly]=\"resolvedProps().readonly\">\n <!-- Bot\u00F3n de cierre (solo en modo modal/sheet) -->\n @if (resolvedProps().showCloseButton) {\n <ion-button fill=\"clear\" color=\"dark\" class=\"close-button\" [attr.aria-label]=\"t('close')\" (click)=\"close()\">\n <ion-icon name=\"close-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n <!-- Loading inicial -->\n @if (state().isLoading && !state().selectedValue) {\n <div class=\"loading-container\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @else {\n <!-- Pregunta -->\n <p class=\"question\">\n {{ state().selectedValue === 'negative' ? t('negativeFeedbackTitle') : resolvedProps().question }}\n </p>\n\n <!-- Botones de reacci\u00F3n \u2014 variante emoji (caras, estrellas, thumbs, \u2026) -->\n @if (resolvedProps().variant === 'emoji') {\n <div class=\"reaction-buttons reaction-buttons--emoji\">\n @for (value of activeReactionValues(); track value; let i = $index) {\n <ion-button\n fill=\"clear\"\n shape=\"round\"\n [class.selected]=\"isSelected(value)\"\n [attr.aria-label]=\"resolvedProps().emojiLabels[i]\"\n [attr.aria-pressed]=\"isSelected(value)\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction(value)\"\n >\n <span class=\"emoji-btn\">{{ resolvedProps().emojis[i] }}</span>\n </ion-button>\n }\n </div>\n } @else {\n <!-- Botones de reacci\u00F3n \u2014 variante texto (default) -->\n <div class=\"reaction-buttons\">\n <ion-button\n [fill]=\"isSelected('positive') ? 'solid' : 'outline'\"\n shape=\"round\"\n color=\"dark\"\n [attr.aria-pressed]=\"isSelected('positive')\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction('positive')\"\n >\n {{ t('positiveLabel') }}\n </ion-button>\n <ion-button\n [fill]=\"isSelected('negative') ? 'solid' : 'outline'\"\n shape=\"round\"\n color=\"dark\"\n [attr.aria-pressed]=\"isSelected('negative')\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction('negative')\"\n >\n {{ t('negativeLabel') }}\n </ion-button>\n </div>\n }\n\n <!-- Campo de comentario (solo si hay selecci\u00F3n) -->\n @if (showCommentField()) {\n <div class=\"comment-section\">\n <ion-textarea\n [value]=\"state().comment\"\n [placeholder]=\"resolvedProps().commentPlaceholder\"\n [maxlength]=\"resolvedProps().maxCommentLength\"\n [disabled]=\"resolvedProps().disabled\"\n [rows]=\"3\"\n class=\"comment-textarea\"\n (ionInput)=\"updateComment($event)\"\n ></ion-textarea>\n <span class=\"char-count\"> {{ state().comment.length }}/{{ resolvedProps().maxCommentLength }} </span>\n </div>\n }\n\n <!-- Bot\u00F3n de env\u00EDo -->\n @if (state().selectedValue && !state().isSubmitted) {\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"!canSubmit()\" (click)=\"submitReaction()\" class=\"submit-button\">\n @if (state().isLoading) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ state().hadPreviousReaction ? t('update') : t('submit') }} }\n </ion-button>\n }\n\n <!-- Mensaje de confirmaci\u00F3n -->\n @if (state().isSubmitted) {\n <p class=\"submitted-message\">{{ t('thankYou') }}</p>\n }\n\n <!-- Error -->\n @if (state().error) {\n <p class=\"error-message\">{{ state().error }}</p>\n } }\n</div>\n}\n", styles: [":host{display:block}.content-reaction{position:relative;padding:16px;text-align:center}.content-reaction.disabled{opacity:.6;pointer-events:none}.content-reaction.readonly{pointer-events:none}.close-button{position:absolute;top:0;right:0;margin:0;--padding-start: 6px;--padding-end: 6px;--color: var(--ion-color-medium)}.close-button ion-icon{font-size:1.5rem}.question{font-size:1.0625rem;font-weight:700;color:var(--ion-color-dark);margin:0 0 16px}.reaction-buttons{display:flex;justify-content:center;gap:12px;margin-bottom:20px}.reaction-buttons--emoji{gap:8px}.reaction-buttons--emoji ion-button{--padding-start: 4px;--padding-end: 4px;transition:transform .15s ease}.reaction-buttons--emoji ion-button.selected{transform:scale(1.25)}.reaction-buttons--emoji ion-button:not(.selected):not([disabled]){opacity:.55}.reaction-buttons--emoji ion-button:not(.selected):not([disabled]):hover{opacity:1}.emoji-btn{font-size:2rem;line-height:1;display:block}.comment-section{margin-top:16px;animation:slideIn .3s ease-out}.comment-section .comment-textarea{--background: transparent;--border-radius: 8px;--padding-start: 12px;--padding-end: 12px;width:100%}.comment-section .char-count{display:block;text-align:right;font-size:.75rem;color:var(--ion-color-medium);margin-top:4px}.submit-button{margin-top:16px}.submitted-message{margin-top:16px;color:var(--ion-color-success);font-weight:500;animation:fadeIn .3s ease-out}.error-message{margin-top:8px;color:var(--ion-color-danger);font-size:.875rem}.loading-container{display:flex;justify-content:center;padding:20px}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }] }); }
53817
53868
  }
53818
53869
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ContentReactionComponent, decorators: [{
53819
53870
  type: Component,
53820
- args: [{ selector: 'val-content-reaction', standalone: true, imports: [CommonModule, FormsModule, IonButton, IonSpinner, IonTextarea], template: "@if (isConfigured()) {\n<div class=\"content-reaction\" [class.disabled]=\"resolvedProps().disabled\" [class.readonly]=\"resolvedProps().readonly\">\n <!-- Loading inicial -->\n @if (state().isLoading && !state().selectedValue) {\n <div class=\"loading-container\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @else {\n <!-- Pregunta -->\n <p class=\"question\">\n {{ state().selectedValue === 'negative' ? t('negativeFeedbackTitle') : resolvedProps().question }}\n </p>\n\n <!-- Botones de reacci\u00F3n \u2014 variante emoji (caras, estrellas, thumbs, \u2026) -->\n @if (resolvedProps().variant === 'emoji') {\n <div class=\"reaction-buttons reaction-buttons--emoji\">\n @for (value of activeReactionValues(); track value; let i = $index) {\n <ion-button\n fill=\"clear\"\n shape=\"round\"\n [class.selected]=\"isSelected(value)\"\n [attr.aria-label]=\"resolvedProps().emojiLabels[i]\"\n [attr.aria-pressed]=\"isSelected(value)\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction(value)\"\n >\n <span class=\"emoji-btn\">{{ resolvedProps().emojis[i] }}</span>\n </ion-button>\n }\n </div>\n } @else {\n <!-- Botones de reacci\u00F3n \u2014 variante texto (default) -->\n <div class=\"reaction-buttons\">\n <ion-button\n [fill]=\"isSelected('positive') ? 'solid' : 'outline'\"\n shape=\"round\"\n color=\"dark\"\n [attr.aria-pressed]=\"isSelected('positive')\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction('positive')\"\n >\n {{ t('positiveLabel') }}\n </ion-button>\n <ion-button\n [fill]=\"isSelected('negative') ? 'solid' : 'outline'\"\n shape=\"round\"\n color=\"dark\"\n [attr.aria-pressed]=\"isSelected('negative')\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction('negative')\"\n >\n {{ t('negativeLabel') }}\n </ion-button>\n </div>\n }\n\n <!-- Campo de comentario (solo si hay selecci\u00F3n) -->\n @if (showCommentField()) {\n <div class=\"comment-section\">\n <ion-textarea\n [value]=\"state().comment\"\n [placeholder]=\"resolvedProps().commentPlaceholder\"\n [maxlength]=\"resolvedProps().maxCommentLength\"\n [disabled]=\"resolvedProps().disabled\"\n [rows]=\"3\"\n class=\"comment-textarea\"\n (ionInput)=\"updateComment($event)\"\n ></ion-textarea>\n <span class=\"char-count\"> {{ state().comment.length }}/{{ resolvedProps().maxCommentLength }} </span>\n </div>\n }\n\n <!-- Bot\u00F3n de env\u00EDo -->\n @if (state().selectedValue && !state().isSubmitted) {\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"!canSubmit()\" (click)=\"submitReaction()\" class=\"submit-button\">\n @if (state().isLoading) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ state().hadPreviousReaction ? t('update') : t('submit') }} }\n </ion-button>\n }\n\n <!-- Mensaje de confirmaci\u00F3n -->\n @if (state().isSubmitted) {\n <p class=\"submitted-message\">{{ t('thankYou') }}</p>\n }\n\n <!-- Error -->\n @if (state().error) {\n <p class=\"error-message\">{{ state().error }}</p>\n } }\n</div>\n}\n", styles: [":host{display:block}.content-reaction{padding:16px;text-align:center}.content-reaction.disabled{opacity:.6;pointer-events:none}.content-reaction.readonly{pointer-events:none}.question{font-size:1.0625rem;font-weight:700;color:var(--ion-color-dark);margin:0 0 16px}.reaction-buttons{display:flex;justify-content:center;gap:12px;margin-bottom:20px}.reaction-buttons--emoji{gap:8px}.reaction-buttons--emoji ion-button{--padding-start: 4px;--padding-end: 4px;transition:transform .15s ease}.reaction-buttons--emoji ion-button.selected{transform:scale(1.25)}.reaction-buttons--emoji ion-button:not(.selected):not([disabled]){opacity:.55}.reaction-buttons--emoji ion-button:not(.selected):not([disabled]):hover{opacity:1}.emoji-btn{font-size:2rem;line-height:1;display:block}.comment-section{margin-top:16px;animation:slideIn .3s ease-out}.comment-section .comment-textarea{--background: transparent;--border-radius: 8px;--padding-start: 12px;--padding-end: 12px;width:100%}.comment-section .char-count{display:block;text-align:right;font-size:.75rem;color:var(--ion-color-medium);margin-top:4px}.submit-button{margin-top:16px}.submitted-message{margin-top:16px;color:var(--ion-color-success);font-weight:500;animation:fadeIn .3s ease-out}.error-message{margin-top:8px;color:var(--ion-color-danger);font-size:.875rem}.loading-container{display:flex;justify-content:center;padding:20px}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n"] }]
53871
+ args: [{ selector: 'val-content-reaction', standalone: true, imports: [CommonModule, FormsModule, IonButton, IonIcon, IonSpinner, IonTextarea], template: "@if (isConfigured()) {\n<div class=\"content-reaction\" [class.disabled]=\"resolvedProps().disabled\" [class.readonly]=\"resolvedProps().readonly\">\n <!-- Bot\u00F3n de cierre (solo en modo modal/sheet) -->\n @if (resolvedProps().showCloseButton) {\n <ion-button fill=\"clear\" color=\"dark\" class=\"close-button\" [attr.aria-label]=\"t('close')\" (click)=\"close()\">\n <ion-icon name=\"close-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n <!-- Loading inicial -->\n @if (state().isLoading && !state().selectedValue) {\n <div class=\"loading-container\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n } @else {\n <!-- Pregunta -->\n <p class=\"question\">\n {{ state().selectedValue === 'negative' ? t('negativeFeedbackTitle') : resolvedProps().question }}\n </p>\n\n <!-- Botones de reacci\u00F3n \u2014 variante emoji (caras, estrellas, thumbs, \u2026) -->\n @if (resolvedProps().variant === 'emoji') {\n <div class=\"reaction-buttons reaction-buttons--emoji\">\n @for (value of activeReactionValues(); track value; let i = $index) {\n <ion-button\n fill=\"clear\"\n shape=\"round\"\n [class.selected]=\"isSelected(value)\"\n [attr.aria-label]=\"resolvedProps().emojiLabels[i]\"\n [attr.aria-pressed]=\"isSelected(value)\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction(value)\"\n >\n <span class=\"emoji-btn\">{{ resolvedProps().emojis[i] }}</span>\n </ion-button>\n }\n </div>\n } @else {\n <!-- Botones de reacci\u00F3n \u2014 variante texto (default) -->\n <div class=\"reaction-buttons\">\n <ion-button\n [fill]=\"isSelected('positive') ? 'solid' : 'outline'\"\n shape=\"round\"\n color=\"dark\"\n [attr.aria-pressed]=\"isSelected('positive')\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction('positive')\"\n >\n {{ t('positiveLabel') }}\n </ion-button>\n <ion-button\n [fill]=\"isSelected('negative') ? 'solid' : 'outline'\"\n shape=\"round\"\n color=\"dark\"\n [attr.aria-pressed]=\"isSelected('negative')\"\n [disabled]=\"resolvedProps().disabled || resolvedProps().readonly\"\n (click)=\"selectReaction('negative')\"\n >\n {{ t('negativeLabel') }}\n </ion-button>\n </div>\n }\n\n <!-- Campo de comentario (solo si hay selecci\u00F3n) -->\n @if (showCommentField()) {\n <div class=\"comment-section\">\n <ion-textarea\n [value]=\"state().comment\"\n [placeholder]=\"resolvedProps().commentPlaceholder\"\n [maxlength]=\"resolvedProps().maxCommentLength\"\n [disabled]=\"resolvedProps().disabled\"\n [rows]=\"3\"\n class=\"comment-textarea\"\n (ionInput)=\"updateComment($event)\"\n ></ion-textarea>\n <span class=\"char-count\"> {{ state().comment.length }}/{{ resolvedProps().maxCommentLength }} </span>\n </div>\n }\n\n <!-- Bot\u00F3n de env\u00EDo -->\n @if (state().selectedValue && !state().isSubmitted) {\n <ion-button expand=\"block\" shape=\"round\" [disabled]=\"!canSubmit()\" (click)=\"submitReaction()\" class=\"submit-button\">\n @if (state().isLoading) {\n <ion-spinner name=\"crescent\"></ion-spinner>\n } @else { {{ state().hadPreviousReaction ? t('update') : t('submit') }} }\n </ion-button>\n }\n\n <!-- Mensaje de confirmaci\u00F3n -->\n @if (state().isSubmitted) {\n <p class=\"submitted-message\">{{ t('thankYou') }}</p>\n }\n\n <!-- Error -->\n @if (state().error) {\n <p class=\"error-message\">{{ state().error }}</p>\n } }\n</div>\n}\n", styles: [":host{display:block}.content-reaction{position:relative;padding:16px;text-align:center}.content-reaction.disabled{opacity:.6;pointer-events:none}.content-reaction.readonly{pointer-events:none}.close-button{position:absolute;top:0;right:0;margin:0;--padding-start: 6px;--padding-end: 6px;--color: var(--ion-color-medium)}.close-button ion-icon{font-size:1.5rem}.question{font-size:1.0625rem;font-weight:700;color:var(--ion-color-dark);margin:0 0 16px}.reaction-buttons{display:flex;justify-content:center;gap:12px;margin-bottom:20px}.reaction-buttons--emoji{gap:8px}.reaction-buttons--emoji ion-button{--padding-start: 4px;--padding-end: 4px;transition:transform .15s ease}.reaction-buttons--emoji ion-button.selected{transform:scale(1.25)}.reaction-buttons--emoji ion-button:not(.selected):not([disabled]){opacity:.55}.reaction-buttons--emoji ion-button:not(.selected):not([disabled]):hover{opacity:1}.emoji-btn{font-size:2rem;line-height:1;display:block}.comment-section{margin-top:16px;animation:slideIn .3s ease-out}.comment-section .comment-textarea{--background: transparent;--border-radius: 8px;--padding-start: 12px;--padding-end: 12px;width:100%}.comment-section .char-count{display:block;text-align:right;font-size:.75rem;color:var(--ion-color-medium);margin-top:4px}.submit-button{margin-top:16px}.submitted-message{margin-top:16px;color:var(--ion-color-success);font-weight:500;animation:fadeIn .3s ease-out}.error-message{margin-top:8px;color:var(--ion-color-danger);font-size:.875rem}.loading-container{display:flex;justify-content:center;padding:20px}@keyframes slideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n"] }]
53821
53872
  }], ctorParameters: () => [], propDecorators: { props: [{
53822
53873
  type: Input
53874
+ }], _modalRef: [{
53875
+ type: Input
53823
53876
  }], reactionSubmit: [{
53824
53877
  type: Output
53825
53878
  }], reactionChange: [{
@@ -53903,6 +53956,11 @@ addIcons({
53903
53956
  const DEFAULT_NAMESPACE = 'Settings.About';
53904
53957
  const DEFAULT_BRAND_NAME = 'Valtech';
53905
53958
  const DEFAULT_LOGO_SRC = 'assets/images/main-icon.png';
53959
+ // Por default el HERO usa la CSS var de marca del factory (`--main-logo-mini`),
53960
+ // que cada app define en su `theme/variables.scss` (theme-aware). Si la app no
53961
+ // la define, el `var(...)` cae al `logoSrc` (ver template). El consumer puede
53962
+ // pasar `brand.logoVar: ''` para forzar el `<img src=logoSrc>` clásico.
53963
+ const DEFAULT_LOGO_VAR = '--main-logo-mini';
53906
53964
  const DEFAULT_RATING_ENTITY_ID = 'experience';
53907
53965
  /**
53908
53966
  * `val-about-view` — vista About full-feature autocontenida (organism).
@@ -53951,6 +54009,7 @@ class AboutViewComponent {
53951
54009
  brand: {
53952
54010
  name: merged.brand?.name ?? DEFAULT_BRAND_NAME,
53953
54011
  logoSrc: merged.brand?.logoSrc ?? DEFAULT_LOGO_SRC,
54012
+ logoVar: merged.brand?.logoVar ?? DEFAULT_LOGO_VAR,
53954
54013
  },
53955
54014
  version: merged.version ?? '',
53956
54015
  socialLinks: merged.socialLinks ?? [],
@@ -53963,6 +54022,7 @@ class AboutViewComponent {
53963
54022
  });
53964
54023
  this.brandName = computed(() => this.resolvedConfig().brand.name);
53965
54024
  this.logoSrc = computed(() => this.resolvedConfig().brand.logoSrc);
54025
+ this.logoVar = computed(() => this.resolvedConfig().brand.logoVar ?? '');
53966
54026
  this.version = computed(() => this.resolvedConfig().version);
53967
54027
  this.socialLinks = computed(() => this.resolvedConfig().socialLinks);
53968
54028
  this.showRating = computed(() => this.resolvedConfig().showRating);
@@ -54066,6 +54126,8 @@ class AboutViewComponent {
54066
54126
  skipInitialCheck: true,
54067
54127
  emojis: ['😕', '🙂', '😍'],
54068
54128
  emojiLabels: [this.tt('rateBad'), this.tt('rateMid'), this.tt('rateGood')],
54129
+ // Sheet abierto vía ModalService: botón de cierre además del drag-handle.
54130
+ showCloseButton: true,
54069
54131
  };
54070
54132
  await this.modalService.open({
54071
54133
  component: ContentReactionComponent,
@@ -54084,7 +54146,16 @@ class AboutViewComponent {
54084
54146
  <ion-grid class="about-grid">
54085
54147
  <!-- HERO: logo + name + version -->
54086
54148
  <div class="about-hero">
54087
- <img class="about-hero__logo" [src]="logoSrc()" [alt]="brandName()" />
54149
+ @if (logoVar()) {
54150
+ <div
54151
+ class="about-hero__logo about-hero__logo--var"
54152
+ role="img"
54153
+ [attr.aria-label]="brandName()"
54154
+ [style.background-image]="'var(' + logoVar() + ', url(' + logoSrc() + '))'"
54155
+ ></div>
54156
+ } @else {
54157
+ <img class="about-hero__logo" [src]="logoSrc()" [alt]="brandName()" />
54158
+ }
54088
54159
  <val-title
54089
54160
  [props]="{
54090
54161
  content: brandName(),
@@ -54189,7 +54260,7 @@ class AboutViewComponent {
54189
54260
  />
54190
54261
  </footer>
54191
54262
  </ion-grid>
54192
- `, isInline: true, styles: [":host{display:block}.about-grid{padding:16px 0;max-width:720px;margin:0 auto}.about-hero{display:flex;flex-direction:column;align-items:center;gap:8px;padding:24px 0 16px;text-align:center}.about-hero__logo{height:96px;width:auto;display:block}.version-row{display:flex;align-items:center;gap:6px;cursor:pointer;opacity:.85;transition:opacity .15s ease}.version-row:hover{opacity:1}.version-copy-icon{font-size:14px;color:var(--ion-color-medium)}.about-section{padding:16px 0 8px;display:flex;flex-direction:column;gap:8px}.about-actions{display:flex;flex-direction:column;gap:8px}.about-section--reviews val-action-card{display:block}.about-section--reviews val-action-card ::ng-deep .action-card{background:var(--ion-color-light, #f4f5f8);box-shadow:none}.about-section--reviews val-action-card ::ng-deep .action-card__description{color:var(--ion-color-dark);opacity:.7}.about-social{display:flex;flex-wrap:wrap;gap:10px;padding-top:8px}.about-social .social-btn{--border-radius: 50%;--background: var(--ion-color-light, #f4f5f8);--color: var(--ion-color-dark);--padding-start: 0;--padding-end: 0;width:48px;height:48px;margin:0;transition:transform .15s ease}.about-social .social-btn:hover{--background: var(--ion-color-primary-tint, #8a4ce5);--color: #fff;transform:translateY(-2px)}.about-social .social-btn ion-icon{font-size:22px}.about-footer{display:flex;flex-direction:column;align-items:center;gap:4px;padding:24px 0;text-align:center}:host-context(body.dark) val-action-card ::ng-deep .action-card,:host-context(html.ion-palette-dark) val-action-card ::ng-deep .action-card,:host-context([data-theme=\"dark\"]) val-action-card ::ng-deep .action-card{background:#ffffff0a}:host-context(body.dark) .about-section--reviews val-action-card ::ng-deep .action-card:hover,:host-context(html.ion-palette-dark) .about-section--reviews val-action-card ::ng-deep .action-card:hover,:host-context([data-theme=\"dark\"]) .about-section--reviews val-action-card ::ng-deep .action-card:hover{background:#ffffff14}:host-context(body.dark) .about-social .social-btn,:host-context(html.ion-palette-dark) .about-social .social-btn,:host-context([data-theme=\"dark\"]) .about-social .social-btn{--background: rgba(255, 255, 255, .04)}\n"], dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: PillComponent, selector: "val-pill", inputs: ["preset", "props"], outputs: ["pillClick", "pillAction"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ActionCardComponent, selector: "val-action-card", inputs: ["props"], outputs: ["onClick"] }] }); }
54263
+ `, isInline: true, styles: [":host{display:block}.about-grid{padding:16px 0;max-width:720px;margin:0 auto}.about-hero{display:flex;flex-direction:column;align-items:center;gap:8px;padding:24px 0 16px;text-align:center}.about-hero__logo{height:96px;width:auto;display:block}.about-hero__logo--var{width:96px;height:96px;background-position:center;background-repeat:no-repeat;background-size:contain}.version-row{display:flex;align-items:center;gap:6px;cursor:pointer;opacity:.85;transition:opacity .15s ease}.version-row:hover{opacity:1}.version-copy-icon{font-size:14px;color:var(--ion-color-medium)}.about-section{padding:16px 0 8px;display:flex;flex-direction:column;gap:8px}.about-actions{display:flex;flex-direction:column;gap:8px}.about-section--reviews val-action-card{display:block}.about-section--reviews val-action-card ::ng-deep .action-card{background:var(--ion-color-light, #f4f5f8);box-shadow:none}.about-section--reviews val-action-card ::ng-deep .action-card__description{color:var(--ion-color-dark);opacity:.7}.about-social{display:flex;flex-wrap:wrap;gap:10px;padding-top:8px}.about-social .social-btn{--border-radius: 50%;--background: var(--ion-color-light, #f4f5f8);--color: var(--ion-color-dark);--padding-start: 0;--padding-end: 0;width:48px;height:48px;margin:0;transition:transform .15s ease}.about-social .social-btn:hover{--background: var(--ion-color-primary-tint, #8a4ce5);--color: #fff;transform:translateY(-2px)}.about-social .social-btn ion-icon{font-size:22px}.about-footer{display:flex;flex-direction:column;align-items:center;gap:4px;padding:24px 0;text-align:center}:host-context(body.dark) val-action-card ::ng-deep .action-card,:host-context(html.ion-palette-dark) val-action-card ::ng-deep .action-card,:host-context([data-theme=\"dark\"]) val-action-card ::ng-deep .action-card{background:#ffffff0a}:host-context(body.dark) .about-section--reviews val-action-card ::ng-deep .action-card:hover,:host-context(html.ion-palette-dark) .about-section--reviews val-action-card ::ng-deep .action-card:hover,:host-context([data-theme=\"dark\"]) .about-section--reviews val-action-card ::ng-deep .action-card:hover{background:#ffffff14}:host-context(body.dark) .about-social .social-btn,:host-context(html.ion-palette-dark) .about-social .social-btn,:host-context([data-theme=\"dark\"]) .about-social .social-btn{--background: rgba(255, 255, 255, .04)}\n"], dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: PillComponent, selector: "val-pill", inputs: ["preset", "props"], outputs: ["pillClick", "pillAction"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ActionCardComponent, selector: "val-action-card", inputs: ["props"], outputs: ["onClick"] }] }); }
54193
54264
  }
54194
54265
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AboutViewComponent, decorators: [{
54195
54266
  type: Component,
@@ -54197,7 +54268,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
54197
54268
  <ion-grid class="about-grid">
54198
54269
  <!-- HERO: logo + name + version -->
54199
54270
  <div class="about-hero">
54200
- <img class="about-hero__logo" [src]="logoSrc()" [alt]="brandName()" />
54271
+ @if (logoVar()) {
54272
+ <div
54273
+ class="about-hero__logo about-hero__logo--var"
54274
+ role="img"
54275
+ [attr.aria-label]="brandName()"
54276
+ [style.background-image]="'var(' + logoVar() + ', url(' + logoSrc() + '))'"
54277
+ ></div>
54278
+ } @else {
54279
+ <img class="about-hero__logo" [src]="logoSrc()" [alt]="brandName()" />
54280
+ }
54201
54281
  <val-title
54202
54282
  [props]="{
54203
54283
  content: brandName(),
@@ -54302,7 +54382,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
54302
54382
  />
54303
54383
  </footer>
54304
54384
  </ion-grid>
54305
- `, styles: [":host{display:block}.about-grid{padding:16px 0;max-width:720px;margin:0 auto}.about-hero{display:flex;flex-direction:column;align-items:center;gap:8px;padding:24px 0 16px;text-align:center}.about-hero__logo{height:96px;width:auto;display:block}.version-row{display:flex;align-items:center;gap:6px;cursor:pointer;opacity:.85;transition:opacity .15s ease}.version-row:hover{opacity:1}.version-copy-icon{font-size:14px;color:var(--ion-color-medium)}.about-section{padding:16px 0 8px;display:flex;flex-direction:column;gap:8px}.about-actions{display:flex;flex-direction:column;gap:8px}.about-section--reviews val-action-card{display:block}.about-section--reviews val-action-card ::ng-deep .action-card{background:var(--ion-color-light, #f4f5f8);box-shadow:none}.about-section--reviews val-action-card ::ng-deep .action-card__description{color:var(--ion-color-dark);opacity:.7}.about-social{display:flex;flex-wrap:wrap;gap:10px;padding-top:8px}.about-social .social-btn{--border-radius: 50%;--background: var(--ion-color-light, #f4f5f8);--color: var(--ion-color-dark);--padding-start: 0;--padding-end: 0;width:48px;height:48px;margin:0;transition:transform .15s ease}.about-social .social-btn:hover{--background: var(--ion-color-primary-tint, #8a4ce5);--color: #fff;transform:translateY(-2px)}.about-social .social-btn ion-icon{font-size:22px}.about-footer{display:flex;flex-direction:column;align-items:center;gap:4px;padding:24px 0;text-align:center}:host-context(body.dark) val-action-card ::ng-deep .action-card,:host-context(html.ion-palette-dark) val-action-card ::ng-deep .action-card,:host-context([data-theme=\"dark\"]) val-action-card ::ng-deep .action-card{background:#ffffff0a}:host-context(body.dark) .about-section--reviews val-action-card ::ng-deep .action-card:hover,:host-context(html.ion-palette-dark) .about-section--reviews val-action-card ::ng-deep .action-card:hover,:host-context([data-theme=\"dark\"]) .about-section--reviews val-action-card ::ng-deep .action-card:hover{background:#ffffff14}:host-context(body.dark) .about-social .social-btn,:host-context(html.ion-palette-dark) .about-social .social-btn,:host-context([data-theme=\"dark\"]) .about-social .social-btn{--background: rgba(255, 255, 255, .04)}\n"] }]
54385
+ `, styles: [":host{display:block}.about-grid{padding:16px 0;max-width:720px;margin:0 auto}.about-hero{display:flex;flex-direction:column;align-items:center;gap:8px;padding:24px 0 16px;text-align:center}.about-hero__logo{height:96px;width:auto;display:block}.about-hero__logo--var{width:96px;height:96px;background-position:center;background-repeat:no-repeat;background-size:contain}.version-row{display:flex;align-items:center;gap:6px;cursor:pointer;opacity:.85;transition:opacity .15s ease}.version-row:hover{opacity:1}.version-copy-icon{font-size:14px;color:var(--ion-color-medium)}.about-section{padding:16px 0 8px;display:flex;flex-direction:column;gap:8px}.about-actions{display:flex;flex-direction:column;gap:8px}.about-section--reviews val-action-card{display:block}.about-section--reviews val-action-card ::ng-deep .action-card{background:var(--ion-color-light, #f4f5f8);box-shadow:none}.about-section--reviews val-action-card ::ng-deep .action-card__description{color:var(--ion-color-dark);opacity:.7}.about-social{display:flex;flex-wrap:wrap;gap:10px;padding-top:8px}.about-social .social-btn{--border-radius: 50%;--background: var(--ion-color-light, #f4f5f8);--color: var(--ion-color-dark);--padding-start: 0;--padding-end: 0;width:48px;height:48px;margin:0;transition:transform .15s ease}.about-social .social-btn:hover{--background: var(--ion-color-primary-tint, #8a4ce5);--color: #fff;transform:translateY(-2px)}.about-social .social-btn ion-icon{font-size:22px}.about-footer{display:flex;flex-direction:column;align-items:center;gap:4px;padding:24px 0;text-align:center}:host-context(body.dark) val-action-card ::ng-deep .action-card,:host-context(html.ion-palette-dark) val-action-card ::ng-deep .action-card,:host-context([data-theme=\"dark\"]) val-action-card ::ng-deep .action-card{background:#ffffff0a}:host-context(body.dark) .about-section--reviews val-action-card ::ng-deep .action-card:hover,:host-context(html.ion-palette-dark) .about-section--reviews val-action-card ::ng-deep .action-card:hover,:host-context([data-theme=\"dark\"]) .about-section--reviews val-action-card ::ng-deep .action-card:hover{background:#ffffff14}:host-context(body.dark) .about-social .social-btn,:host-context(html.ion-palette-dark) .about-social .social-btn,:host-context([data-theme=\"dark\"]) .about-social .social-btn{--background: rgba(255, 255, 255, .04)}\n"] }]
54306
54386
  }], ctorParameters: () => [], propDecorators: { config: [{
54307
54387
  type: Input
54308
54388
  }] } });
@@ -62770,7 +62850,7 @@ class DocsPageComponent {
62770
62850
  </aside>
62771
62851
  }
62772
62852
  </div>
62773
- `, isInline: true, styles: [".docs-page{display:grid;grid-template-columns:1fr;gap:2rem;max-width:1400px;margin:0 auto;padding:2rem 1.5rem}@media (min-width: 1200px){.docs-page{grid-template-columns:1fr 220px;padding:2rem}}.docs-page__content{min-width:0;max-width:900px}val-docs-breadcrumb{display:block;margin-bottom:1rem}.docs-page__header{margin-bottom:2rem}.docs-page__title-row{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.docs-page__title{margin:0;font-size:2rem;font-weight:700;color:var(--ion-text-color, #1a1a1a);line-height:1.2}@media (min-width: 768px){.docs-page__title{font-size:2.5rem}}.docs-page__badge{display:inline-flex;align-items:center;padding:.25rem .5rem;font-size:.6875rem;font-weight:500;text-transform:uppercase;letter-spacing:.03em;border-radius:4px;background:#0000000a;color:#888}.docs-page__badge--success{background:#0000000a;color:#888}.docs-page__badge--warning{background:var(--ion-color-warning-tint, #fff3e0);color:var(--ion-color-warning-shade, #e65100)}.docs-page__badge--danger{background:var(--ion-color-danger-tint, #ffebee);color:var(--ion-color-danger-shade, #c62828)}.docs-page__lead{margin:1rem 0 0;font-size:1.125rem;line-height:1.7;color:var(--ion-color-medium, #666)}.docs-page__sections>*:last-child{margin-bottom:0}.docs-page__feedback{margin-top:3rem;padding-top:2rem;border-top:1px solid rgba(0,0,0,.08);display:flex;justify-content:center}.docs-page__toc{display:none}@media (min-width: 1200px){.docs-page__toc{display:block;position:sticky;top:2rem;height:fit-content;max-height:calc(100vh - 4rem);overflow-y:auto}}.docs-page__sections h2{font-size:1.5rem;font-weight:600;margin:0 0 1rem;color:var(--ion-text-color, #1a1a1a);scroll-margin-top:2rem}.docs-page__sections h3{font-size:1.125rem;font-weight:600;margin:1.5rem 0 1rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections h4{font-size:1rem;font-weight:600;margin:1.25rem 0 .75rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections p{line-height:1.7;color:var(--ion-text-color, #1a1a1a);margin:0 0 1rem}.docs-page__sections ul,.docs-page__sections ol{padding-left:1.5rem;margin:0 0 1rem}.docs-page__sections li{margin-bottom:.5rem;line-height:1.6;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections a{color:var(--ion-color-primary, #3880ff);text-decoration:none}.docs-page__sections a:hover{text-decoration:underline}.docs-page__sections code:not([class*=language-]){background:#0000000f;padding:.125rem .375rem;border-radius:4px;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.875em}.docs-page__sections pre:not([class*=language-]){background:#0000000a;padding:1rem;border-radius:8px;overflow-x:auto;margin:0 0 1rem}.docs-page__sections pre:not([class*=language-]) code{background:none;padding:0}.docs-page__sections table{width:100%;border-collapse:collapse;margin:0 0 1rem;font-size:.875rem}.docs-page__sections th,.docs-page__sections td{padding:.75rem;text-align:left;border-bottom:1px solid rgba(0,0,0,.1)}.docs-page__sections th{font-weight:600;background:#00000005}.docs-page__sections blockquote{margin:0 0 1rem;padding:1rem 1.5rem;border-left:4px solid var(--ion-color-primary, #3880ff);background:#00000005;border-radius:0 8px 8px 0}.docs-page__sections blockquote p:last-child{margin-bottom:0}.docs-page__sections img{max-width:100%;height:auto;border-radius:8px}.docs-page__sections hr{border:none;border-top:1px solid rgba(0,0,0,.1);margin:2rem 0}.docs-page__sections strong{font-weight:600}.docs-page__sections section{margin-bottom:2rem}:host-context(.dark) .docs-page__badge,:host-context([color-scheme=\"dark\"]) .docs-page__badge{background:#ffffff0f;color:#999}:host-context(.dark) .docs-page__badge--success,:host-context([color-scheme=\"dark\"]) .docs-page__badge--success{background:#ffffff0f;color:#999}:host-context(.dark) .docs-page__badge--warning,:host-context([color-scheme=\"dark\"]) .docs-page__badge--warning{background:#e6510033;color:#ffb74d}:host-context(.dark) .docs-page__badge--danger,:host-context([color-scheme=\"dark\"]) .docs-page__badge--danger{background:#c6282833;color:#e57373}:host-context(.dark) .docs-page__sections code:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections code:not([class*=language-]){background:#ffffff1a}:host-context(.dark) .docs-page__sections pre:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections pre:not([class*=language-]){background:#ffffff0f}:host-context(.dark) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections th{background:#ffffff0a}:host-context(.dark) .docs-page__sections th,:host-context(.dark) .docs-page__sections td,:host-context([color-scheme=\"dark\"]) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections td{border-color:#ffffff1a}:host-context(.dark) .docs-page__sections blockquote,:host-context([color-scheme=\"dark\"]) .docs-page__sections blockquote{background:#ffffff0a}:host-context(.dark) .docs-page__sections hr,:host-context([color-scheme=\"dark\"]) .docs-page__sections hr{border-color:#ffffff1a}:host-context(.dark) .docs-page__feedback,:host-context([color-scheme=\"dark\"]) .docs-page__feedback{border-color:#ffffff1a}@media (max-width: 768px){.docs-page__feedback{margin-top:2rem;padding-top:1.5rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DocsBreadcrumbComponent, selector: "val-docs-breadcrumb", inputs: ["props"], outputs: ["navigate"] }, { kind: "component", type: DocsNavLinksComponent, selector: "val-docs-nav-links", inputs: ["props"], outputs: ["navigate"] }, { kind: "component", type: DocsTocComponent, selector: "val-docs-toc", inputs: ["props"], outputs: ["sectionChange"] }, { kind: "component", type: ContentReactionComponent, selector: "val-content-reaction", inputs: ["props"], outputs: ["reactionSubmit", "reactionChange"] }] }); }
62853
+ `, isInline: true, styles: [".docs-page{display:grid;grid-template-columns:1fr;gap:2rem;max-width:1400px;margin:0 auto;padding:2rem 1.5rem}@media (min-width: 1200px){.docs-page{grid-template-columns:1fr 220px;padding:2rem}}.docs-page__content{min-width:0;max-width:900px}val-docs-breadcrumb{display:block;margin-bottom:1rem}.docs-page__header{margin-bottom:2rem}.docs-page__title-row{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.docs-page__title{margin:0;font-size:2rem;font-weight:700;color:var(--ion-text-color, #1a1a1a);line-height:1.2}@media (min-width: 768px){.docs-page__title{font-size:2.5rem}}.docs-page__badge{display:inline-flex;align-items:center;padding:.25rem .5rem;font-size:.6875rem;font-weight:500;text-transform:uppercase;letter-spacing:.03em;border-radius:4px;background:#0000000a;color:#888}.docs-page__badge--success{background:#0000000a;color:#888}.docs-page__badge--warning{background:var(--ion-color-warning-tint, #fff3e0);color:var(--ion-color-warning-shade, #e65100)}.docs-page__badge--danger{background:var(--ion-color-danger-tint, #ffebee);color:var(--ion-color-danger-shade, #c62828)}.docs-page__lead{margin:1rem 0 0;font-size:1.125rem;line-height:1.7;color:var(--ion-color-medium, #666)}.docs-page__sections>*:last-child{margin-bottom:0}.docs-page__feedback{margin-top:3rem;padding-top:2rem;border-top:1px solid rgba(0,0,0,.08);display:flex;justify-content:center}.docs-page__toc{display:none}@media (min-width: 1200px){.docs-page__toc{display:block;position:sticky;top:2rem;height:fit-content;max-height:calc(100vh - 4rem);overflow-y:auto}}.docs-page__sections h2{font-size:1.5rem;font-weight:600;margin:0 0 1rem;color:var(--ion-text-color, #1a1a1a);scroll-margin-top:2rem}.docs-page__sections h3{font-size:1.125rem;font-weight:600;margin:1.5rem 0 1rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections h4{font-size:1rem;font-weight:600;margin:1.25rem 0 .75rem;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections p{line-height:1.7;color:var(--ion-text-color, #1a1a1a);margin:0 0 1rem}.docs-page__sections ul,.docs-page__sections ol{padding-left:1.5rem;margin:0 0 1rem}.docs-page__sections li{margin-bottom:.5rem;line-height:1.6;color:var(--ion-text-color, #1a1a1a)}.docs-page__sections a{color:var(--ion-color-primary, #3880ff);text-decoration:none}.docs-page__sections a:hover{text-decoration:underline}.docs-page__sections code:not([class*=language-]){background:#0000000f;padding:.125rem .375rem;border-radius:4px;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:.875em}.docs-page__sections pre:not([class*=language-]){background:#0000000a;padding:1rem;border-radius:8px;overflow-x:auto;margin:0 0 1rem}.docs-page__sections pre:not([class*=language-]) code{background:none;padding:0}.docs-page__sections table{width:100%;border-collapse:collapse;margin:0 0 1rem;font-size:.875rem}.docs-page__sections th,.docs-page__sections td{padding:.75rem;text-align:left;border-bottom:1px solid rgba(0,0,0,.1)}.docs-page__sections th{font-weight:600;background:#00000005}.docs-page__sections blockquote{margin:0 0 1rem;padding:1rem 1.5rem;border-left:4px solid var(--ion-color-primary, #3880ff);background:#00000005;border-radius:0 8px 8px 0}.docs-page__sections blockquote p:last-child{margin-bottom:0}.docs-page__sections img{max-width:100%;height:auto;border-radius:8px}.docs-page__sections hr{border:none;border-top:1px solid rgba(0,0,0,.1);margin:2rem 0}.docs-page__sections strong{font-weight:600}.docs-page__sections section{margin-bottom:2rem}:host-context(.dark) .docs-page__badge,:host-context([color-scheme=\"dark\"]) .docs-page__badge{background:#ffffff0f;color:#999}:host-context(.dark) .docs-page__badge--success,:host-context([color-scheme=\"dark\"]) .docs-page__badge--success{background:#ffffff0f;color:#999}:host-context(.dark) .docs-page__badge--warning,:host-context([color-scheme=\"dark\"]) .docs-page__badge--warning{background:#e6510033;color:#ffb74d}:host-context(.dark) .docs-page__badge--danger,:host-context([color-scheme=\"dark\"]) .docs-page__badge--danger{background:#c6282833;color:#e57373}:host-context(.dark) .docs-page__sections code:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections code:not([class*=language-]){background:#ffffff1a}:host-context(.dark) .docs-page__sections pre:not([class*=language-]),:host-context([color-scheme=\"dark\"]) .docs-page__sections pre:not([class*=language-]){background:#ffffff0f}:host-context(.dark) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections th{background:#ffffff0a}:host-context(.dark) .docs-page__sections th,:host-context(.dark) .docs-page__sections td,:host-context([color-scheme=\"dark\"]) .docs-page__sections th,:host-context([color-scheme=\"dark\"]) .docs-page__sections td{border-color:#ffffff1a}:host-context(.dark) .docs-page__sections blockquote,:host-context([color-scheme=\"dark\"]) .docs-page__sections blockquote{background:#ffffff0a}:host-context(.dark) .docs-page__sections hr,:host-context([color-scheme=\"dark\"]) .docs-page__sections hr{border-color:#ffffff1a}:host-context(.dark) .docs-page__feedback,:host-context([color-scheme=\"dark\"]) .docs-page__feedback{border-color:#ffffff1a}@media (max-width: 768px){.docs-page__feedback{margin-top:2rem;padding-top:1.5rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DocsBreadcrumbComponent, selector: "val-docs-breadcrumb", inputs: ["props"], outputs: ["navigate"] }, { kind: "component", type: DocsNavLinksComponent, selector: "val-docs-nav-links", inputs: ["props"], outputs: ["navigate"] }, { kind: "component", type: DocsTocComponent, selector: "val-docs-toc", inputs: ["props"], outputs: ["sectionChange"] }, { kind: "component", type: ContentReactionComponent, selector: "val-content-reaction", inputs: ["props", "_modalRef"], outputs: ["reactionSubmit", "reactionChange"] }] }); }
62774
62854
  }
62775
62855
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsPageComponent, decorators: [{
62776
62856
  type: Component,