valtech-components 2.0.1015 → 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.
- package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +9 -4
- package/esm2022/lib/components/organisms/org-info-sheet/org-info-sheet.component.mjs +52 -40
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +38 -15
- package/esm2022/lib/components/organisms/organization-view/organization-view.i18n.mjs +11 -3
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +107 -59
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/org-info-sheet/org-info-sheet.component.d.ts +7 -1
- package/lib/components/organisms/organization-view/organization-view.component.d.ts +1 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -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.
|
|
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;
|
|
@@ -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
|
-
|
|
46177
|
-
<div class="info-
|
|
46178
|
-
<
|
|
46179
|
-
|
|
46180
|
-
<div
|
|
46181
|
-
|
|
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
|
-
|
|
46184
|
-
|
|
46185
|
-
|
|
46186
|
-
|
|
46187
|
-
|
|
46188
|
-
|
|
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
|
-
|
|
46191
|
-
|
|
46192
|
-
|
|
46193
|
-
|
|
46194
|
-
|
|
46195
|
-
|
|
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
|
-
|
|
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
|
-
|
|
46246
|
-
<div class="info-
|
|
46247
|
-
<
|
|
46248
|
-
|
|
46249
|
-
<div
|
|
46250
|
-
|
|
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
|
-
|
|
46253
|
-
|
|
46254
|
-
|
|
46255
|
-
|
|
46256
|
-
|
|
46257
|
-
|
|
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
|
-
|
|
46260
|
-
|
|
46261
|
-
|
|
46262
|
-
|
|
46263
|
-
|
|
46264
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)="
|
|
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)="
|
|
51044
|
+
<button class="org-more-info-link" type="button" (click)="onApiKeysInfo()">
|
|
51002
51045
|
{{ tt('apiKeysMoreInfo') }}
|
|
51003
51046
|
</button>
|
|
51004
51047
|
</div>
|
|
@@ -53913,6 +53956,11 @@ addIcons({
|
|
|
53913
53956
|
const DEFAULT_NAMESPACE = 'Settings.About';
|
|
53914
53957
|
const DEFAULT_BRAND_NAME = 'Valtech';
|
|
53915
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';
|
|
53916
53964
|
const DEFAULT_RATING_ENTITY_ID = 'experience';
|
|
53917
53965
|
/**
|
|
53918
53966
|
* `val-about-view` — vista About full-feature autocontenida (organism).
|
|
@@ -53961,7 +54009,7 @@ class AboutViewComponent {
|
|
|
53961
54009
|
brand: {
|
|
53962
54010
|
name: merged.brand?.name ?? DEFAULT_BRAND_NAME,
|
|
53963
54011
|
logoSrc: merged.brand?.logoSrc ?? DEFAULT_LOGO_SRC,
|
|
53964
|
-
logoVar: merged.brand?.logoVar ??
|
|
54012
|
+
logoVar: merged.brand?.logoVar ?? DEFAULT_LOGO_VAR,
|
|
53965
54013
|
},
|
|
53966
54014
|
version: merged.version ?? '',
|
|
53967
54015
|
socialLinks: merged.socialLinks ?? [],
|
|
@@ -54103,7 +54151,7 @@ class AboutViewComponent {
|
|
|
54103
54151
|
class="about-hero__logo about-hero__logo--var"
|
|
54104
54152
|
role="img"
|
|
54105
54153
|
[attr.aria-label]="brandName()"
|
|
54106
|
-
[style.background-image]="'var(' + logoVar() + ')'"
|
|
54154
|
+
[style.background-image]="'var(' + logoVar() + ', url(' + logoSrc() + '))'"
|
|
54107
54155
|
></div>
|
|
54108
54156
|
} @else {
|
|
54109
54157
|
<img class="about-hero__logo" [src]="logoSrc()" [alt]="brandName()" />
|
|
@@ -54225,7 +54273,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
54225
54273
|
class="about-hero__logo about-hero__logo--var"
|
|
54226
54274
|
role="img"
|
|
54227
54275
|
[attr.aria-label]="brandName()"
|
|
54228
|
-
[style.background-image]="'var(' + logoVar() + ')'"
|
|
54276
|
+
[style.background-image]="'var(' + logoVar() + ', url(' + logoSrc() + '))'"
|
|
54229
54277
|
></div>
|
|
54230
54278
|
} @else {
|
|
54231
54279
|
<img class="about-hero__logo" [src]="logoSrc()" [alt]="brandName()" />
|