osi-cards-lib 1.5.9 → 1.5.10
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/fesm2022/osi-cards-lib.mjs +39 -11
- package/fesm2022/osi-cards-lib.mjs.map +1 -1
- package/index.d.ts +16 -0
- package/package.json +1 -1
|
@@ -5985,8 +5985,8 @@ function getSectionsRequiringExternalLibs() {
|
|
|
5985
5985
|
* Manifest metadata
|
|
5986
5986
|
*/
|
|
5987
5987
|
const MANIFEST_META = {
|
|
5988
|
-
generatedAt: '2025-12-05T12:
|
|
5989
|
-
registryVersion: '1.5.
|
|
5988
|
+
generatedAt: '2025-12-05T12:32:26.384Z',
|
|
5989
|
+
registryVersion: '1.5.9',
|
|
5990
5990
|
totalSections: 22,
|
|
5991
5991
|
publicSections: 22
|
|
5992
5992
|
};
|
|
@@ -8802,7 +8802,21 @@ class EmailHandlerService {
|
|
|
8802
8802
|
params.push(`body=${encodeURIComponent(config.body)}`);
|
|
8803
8803
|
}
|
|
8804
8804
|
const queryString = params.length > 0 ? `?${params.join('&')}` : '';
|
|
8805
|
-
|
|
8805
|
+
const mailtoUrl = `mailto:${encodeURIComponent(config.to)}${queryString}`;
|
|
8806
|
+
// Convert to Outlook URL scheme (works on both Windows and Mac)
|
|
8807
|
+
return this.convertToOutlookUrl(mailtoUrl);
|
|
8808
|
+
}
|
|
8809
|
+
/**
|
|
8810
|
+
* Convert mailto URL to Outlook URL scheme
|
|
8811
|
+
* Uses ms-outlook: scheme which works on both Windows and Mac
|
|
8812
|
+
*
|
|
8813
|
+
* @param mailtoUrl - Standard mailto URL
|
|
8814
|
+
* @returns Outlook URL scheme
|
|
8815
|
+
*/
|
|
8816
|
+
convertToOutlookUrl(mailtoUrl) {
|
|
8817
|
+
// ms-outlook: scheme works on both Windows and Mac
|
|
8818
|
+
// Format: ms-outlook:mailto:email@example.com?subject=...&body=...
|
|
8819
|
+
return `ms-outlook:${mailtoUrl}`;
|
|
8806
8820
|
}
|
|
8807
8821
|
normalizeMailAction(action) {
|
|
8808
8822
|
// Check if it's already a proper mail action
|
|
@@ -16838,12 +16852,24 @@ class ContactCardSectionComponent extends BaseSectionComponent {
|
|
|
16838
16852
|
}
|
|
16839
16853
|
return name[0]?.toUpperCase() || '?';
|
|
16840
16854
|
}
|
|
16855
|
+
/**
|
|
16856
|
+
* Convert email address to Outlook URL scheme
|
|
16857
|
+
* Uses ms-outlook: scheme which works on both Windows and Mac
|
|
16858
|
+
*
|
|
16859
|
+
* @param email - Email address
|
|
16860
|
+
* @returns Outlook URL scheme
|
|
16861
|
+
*/
|
|
16862
|
+
getOutlookEmailUrl(email) {
|
|
16863
|
+
// ms-outlook: scheme works on both Windows and Mac
|
|
16864
|
+
// Format: ms-outlook:mailto:email@example.com
|
|
16865
|
+
return `ms-outlook:mailto:${email}`;
|
|
16866
|
+
}
|
|
16841
16867
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: ContactCardSectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
16842
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: ContactCardSectionComponent, isStandalone: true, selector: "lib-contact-card-section", usesInheritance: true, ngImport: i0, template: "<div class=\"contacts\">\n <lib-section-header *ngIf=\"section.title\" [title]=\"section.title\" [description]=\"section.description\">\n </lib-section-header>\n\n <div class=\"grid\" *ngIf=\"section.fields?.length\">\n <div class=\"card\" *ngFor=\"let c of section.fields\">\n <div class=\"avatar\">\n <img [src]=\"getAvatar(c)\" [alt]=\"getContactName(c)\" *ngIf=\"getAvatar(c)\" loading=\"lazy\" />\n <span class=\"initials\" *ngIf=\"!getAvatar(c)\">{{ getInitials(getContactName(c)) }}</span>\n </div>\n <h4 class=\"name\">{{ getContactName(c) }}</h4>\n <p class=\"role\" *ngIf=\"getContactRole(c)\">{{ getContactRole(c) }}</p>\n <lib-badge *ngIf=\"c.department\" class=\"dept\" variant=\"primary\" size=\"sm\">{{ c.department }}</lib-badge>\n <div class=\"actions\">\n <a [href]=\"'mailto:' + c.email\" class=\"action\" *ngIf=\"c.email\" title=\"Email\">\uD83D\uDCE7</a>\n <a [href]=\"'tel:' + c.phone\" class=\"action\" *ngIf=\"c.phone\" title=\"Call\">\uD83D\uDCDE</a>\n <a [href]=\"c.linkedIn\" class=\"action\" target=\"_blank\" rel=\"noopener\" *ngIf=\"c.linkedIn\" title=\"LinkedIn\">\uD83D\uDCBC</a>\n </div>\n </div>\n </div>\n\n <lib-empty-state *ngIf=\"!section.fields?.length\" message=\"No contacts\" icon=\"\uD83D\uDC64\" variant=\"compact\"> </lib-empty-state>\n</div>\n", styles: [":root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}:host{display:block;width:100%}.contacts{display:flex;flex-direction:column;gap:var(--osi-spacing-compact-md, 12px)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--osi-spacing-compact-sm, 6px)}@media (max-width: 768px){.grid{gap:var(--osi-spacing-compact-xs, 2px)}}@media (max-width: 640px){.grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 380px){.grid{grid-template-columns:1fr}}.card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease;transition:var(--transition-shadow),var(--transition-transform);position:relative;overflow:hidden;padding:var(--osi-spacing-compact-md, 12px);text-align:center;min-height:140px;background:var(--surface);display:flex;flex-direction:column;align-items:center;gap:var(--osi-spacing-compact-xs, 2px);transition:all .3s var(--ease-out)}.card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.card{transition:none}}.card:active{transform:translateY(0);box-shadow:var(--shadow-md)}@media (prefers-reduced-motion: reduce){.card:hover,.card:active{transform:none}}.card:after{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.1) 50%,transparent 100%);transition:left var(--duration-slower) var(--ease-out);pointer-events:none}.card:hover:after{left:100%}@media (prefers-reduced-motion: reduce){.card:after{display:none}}.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.card:hover .avatar{transform:scale(1.06);box-shadow:0 6px 12px #00000026}.card:hover .name{color:var(--accent)}.avatar{width:48px;height:48px;border-radius:var(--radius-lg);border:2px solid var(--border);overflow:hidden;transition:all .3s var(--ease-out);box-shadow:var(--shadow-sm);flex-shrink:0;margin-bottom:var(--osi-spacing-compact-xs, 2px)}.avatar img{width:100%;height:100%;object-fit:cover}.initials{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:var(--surface-hover);font-size:1rem;font-weight:var(--font-semibold);color:var(--foreground)}.name{font-size:var(--text-base);font-weight:var(--font-semibold);line-height:var(--leading-normal);color:var(--foreground);margin:0;transition:color .2s var(--ease-out)}.role{font-size:var(--text-xs);font-weight:var(--font-normal);line-height:var(--leading-normal);color:var(--muted-foreground)}.actions{display:flex;gap:var(--osi-spacing-compact-xs, 2px);margin-top:auto;padding-top:var(--osi-spacing-compact-sm, 6px);border-top:1px solid var(--border);width:100%;justify-content:center}.action{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);background:var(--surface-hover);text-decoration:none;transition:all .2s var(--ease-out);border:1px solid transparent}.action:hover{background:var(--accent);border-color:var(--accent);transform:translateY(-1px);box-shadow:var(--shadow-sm)}@media (max-width: 480px){.card{padding:var(--osi-spacing-compact-sm, 6px)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SectionHeaderComponent, selector: "lib-section-header", inputs: ["title", "description", "level", "headerClass", "titleClass", "descriptionClass"] }, { kind: "component", type: EmptyStateComponent, selector: "lib-empty-state", inputs: ["message", "icon", "actionLabel", "variant", "size", "containerClass"], outputs: ["action"] }, { kind: "component", type: BadgeComponent, selector: "lib-badge", inputs: ["variant", "size", "outlined", "pill", "dot", "badgeClass", "icon", "interactive", "ariaLabel"] }] }); }
|
|
16868
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: ContactCardSectionComponent, isStandalone: true, selector: "lib-contact-card-section", usesInheritance: true, ngImport: i0, template: "<div class=\"contacts\">\n <lib-section-header *ngIf=\"section.title\" [title]=\"section.title\" [description]=\"section.description\">\n </lib-section-header>\n\n <div class=\"grid\" *ngIf=\"section.fields?.length\">\n <div class=\"card\" *ngFor=\"let c of section.fields\">\n <div class=\"avatar\">\n <img [src]=\"getAvatar(c)\" [alt]=\"getContactName(c)\" *ngIf=\"getAvatar(c)\" loading=\"lazy\" />\n <span class=\"initials\" *ngIf=\"!getAvatar(c)\">{{ getInitials(getContactName(c)) }}</span>\n </div>\n <h4 class=\"name\">{{ getContactName(c) }}</h4>\n <p class=\"role\" *ngIf=\"getContactRole(c)\">{{ getContactRole(c) }}</p>\n <lib-badge *ngIf=\"c.department\" class=\"dept\" variant=\"primary\" size=\"sm\">{{ c.department }}</lib-badge>\n <div class=\"actions\">\n <a [href]=\"getOutlookEmailUrl(c.email)\" class=\"action\" *ngIf=\"c.email\" title=\"Email\">\uD83D\uDCE7</a>\n <a [href]=\"'tel:' + c.phone\" class=\"action\" *ngIf=\"c.phone\" title=\"Call\">\uD83D\uDCDE</a>\n <a [href]=\"c.linkedIn\" class=\"action\" target=\"_blank\" rel=\"noopener\" *ngIf=\"c.linkedIn\" title=\"LinkedIn\">\uD83D\uDCBC</a>\n </div>\n </div>\n </div>\n\n <lib-empty-state *ngIf=\"!section.fields?.length\" message=\"No contacts\" icon=\"\uD83D\uDC64\" variant=\"compact\"> </lib-empty-state>\n</div>\n", styles: [":root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}:host{display:block;width:100%}.contacts{display:flex;flex-direction:column;gap:var(--osi-spacing-compact-md, 12px)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--osi-spacing-compact-sm, 6px)}@media (max-width: 768px){.grid{gap:var(--osi-spacing-compact-xs, 2px)}}@media (max-width: 640px){.grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 380px){.grid{grid-template-columns:1fr}}.card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease;transition:var(--transition-shadow),var(--transition-transform);position:relative;overflow:hidden;padding:var(--osi-spacing-compact-md, 12px);text-align:center;min-height:140px;background:var(--surface);display:flex;flex-direction:column;align-items:center;gap:var(--osi-spacing-compact-xs, 2px);transition:all .3s var(--ease-out)}.card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.card{transition:none}}.card:active{transform:translateY(0);box-shadow:var(--shadow-md)}@media (prefers-reduced-motion: reduce){.card:hover,.card:active{transform:none}}.card:after{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.1) 50%,transparent 100%);transition:left var(--duration-slower) var(--ease-out);pointer-events:none}.card:hover:after{left:100%}@media (prefers-reduced-motion: reduce){.card:after{display:none}}.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.card:hover .avatar{transform:scale(1.06);box-shadow:0 6px 12px #00000026}.card:hover .name{color:var(--accent)}.avatar{width:48px;height:48px;border-radius:var(--radius-lg);border:2px solid var(--border);overflow:hidden;transition:all .3s var(--ease-out);box-shadow:var(--shadow-sm);flex-shrink:0;margin-bottom:var(--osi-spacing-compact-xs, 2px)}.avatar img{width:100%;height:100%;object-fit:cover}.initials{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:var(--surface-hover);font-size:1rem;font-weight:var(--font-semibold);color:var(--foreground)}.name{font-size:var(--text-base);font-weight:var(--font-semibold);line-height:var(--leading-normal);color:var(--foreground);margin:0;transition:color .2s var(--ease-out)}.role{font-size:var(--text-xs);font-weight:var(--font-normal);line-height:var(--leading-normal);color:var(--muted-foreground)}.actions{display:flex;gap:var(--osi-spacing-compact-xs, 2px);margin-top:auto;padding-top:var(--osi-spacing-compact-sm, 6px);border-top:1px solid var(--border);width:100%;justify-content:center}.action{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);background:var(--surface-hover);text-decoration:none;transition:all .2s var(--ease-out);border:1px solid transparent}.action:hover{background:var(--accent);border-color:var(--accent);transform:translateY(-1px);box-shadow:var(--shadow-sm)}@media (max-width: 480px){.card{padding:var(--osi-spacing-compact-sm, 6px)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SectionHeaderComponent, selector: "lib-section-header", inputs: ["title", "description", "level", "headerClass", "titleClass", "descriptionClass"] }, { kind: "component", type: EmptyStateComponent, selector: "lib-empty-state", inputs: ["message", "icon", "actionLabel", "variant", "size", "containerClass"], outputs: ["action"] }, { kind: "component", type: BadgeComponent, selector: "lib-badge", inputs: ["variant", "size", "outlined", "pill", "dot", "badgeClass", "icon", "interactive", "ariaLabel"] }] }); }
|
|
16843
16869
|
}
|
|
16844
16870
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: ContactCardSectionComponent, decorators: [{
|
|
16845
16871
|
type: Component,
|
|
16846
|
-
args: [{ selector: 'lib-contact-card-section', standalone: true, imports: [CommonModule, SectionHeaderComponent, EmptyStateComponent, BadgeComponent], template: "<div class=\"contacts\">\n <lib-section-header *ngIf=\"section.title\" [title]=\"section.title\" [description]=\"section.description\">\n </lib-section-header>\n\n <div class=\"grid\" *ngIf=\"section.fields?.length\">\n <div class=\"card\" *ngFor=\"let c of section.fields\">\n <div class=\"avatar\">\n <img [src]=\"getAvatar(c)\" [alt]=\"getContactName(c)\" *ngIf=\"getAvatar(c)\" loading=\"lazy\" />\n <span class=\"initials\" *ngIf=\"!getAvatar(c)\">{{ getInitials(getContactName(c)) }}</span>\n </div>\n <h4 class=\"name\">{{ getContactName(c) }}</h4>\n <p class=\"role\" *ngIf=\"getContactRole(c)\">{{ getContactRole(c) }}</p>\n <lib-badge *ngIf=\"c.department\" class=\"dept\" variant=\"primary\" size=\"sm\">{{ c.department }}</lib-badge>\n <div class=\"actions\">\n <a [href]=\"'mailto:' + c.email\" class=\"action\" *ngIf=\"c.email\" title=\"Email\">\uD83D\uDCE7</a>\n <a [href]=\"'tel:' + c.phone\" class=\"action\" *ngIf=\"c.phone\" title=\"Call\">\uD83D\uDCDE</a>\n <a [href]=\"c.linkedIn\" class=\"action\" target=\"_blank\" rel=\"noopener\" *ngIf=\"c.linkedIn\" title=\"LinkedIn\">\uD83D\uDCBC</a>\n </div>\n </div>\n </div>\n\n <lib-empty-state *ngIf=\"!section.fields?.length\" message=\"No contacts\" icon=\"\uD83D\uDC64\" variant=\"compact\"> </lib-empty-state>\n</div>\n", styles: [":root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}:host{display:block;width:100%}.contacts{display:flex;flex-direction:column;gap:var(--osi-spacing-compact-md, 12px)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--osi-spacing-compact-sm, 6px)}@media (max-width: 768px){.grid{gap:var(--osi-spacing-compact-xs, 2px)}}@media (max-width: 640px){.grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 380px){.grid{grid-template-columns:1fr}}.card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease;transition:var(--transition-shadow),var(--transition-transform);position:relative;overflow:hidden;padding:var(--osi-spacing-compact-md, 12px);text-align:center;min-height:140px;background:var(--surface);display:flex;flex-direction:column;align-items:center;gap:var(--osi-spacing-compact-xs, 2px);transition:all .3s var(--ease-out)}.card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.card{transition:none}}.card:active{transform:translateY(0);box-shadow:var(--shadow-md)}@media (prefers-reduced-motion: reduce){.card:hover,.card:active{transform:none}}.card:after{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.1) 50%,transparent 100%);transition:left var(--duration-slower) var(--ease-out);pointer-events:none}.card:hover:after{left:100%}@media (prefers-reduced-motion: reduce){.card:after{display:none}}.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.card:hover .avatar{transform:scale(1.06);box-shadow:0 6px 12px #00000026}.card:hover .name{color:var(--accent)}.avatar{width:48px;height:48px;border-radius:var(--radius-lg);border:2px solid var(--border);overflow:hidden;transition:all .3s var(--ease-out);box-shadow:var(--shadow-sm);flex-shrink:0;margin-bottom:var(--osi-spacing-compact-xs, 2px)}.avatar img{width:100%;height:100%;object-fit:cover}.initials{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:var(--surface-hover);font-size:1rem;font-weight:var(--font-semibold);color:var(--foreground)}.name{font-size:var(--text-base);font-weight:var(--font-semibold);line-height:var(--leading-normal);color:var(--foreground);margin:0;transition:color .2s var(--ease-out)}.role{font-size:var(--text-xs);font-weight:var(--font-normal);line-height:var(--leading-normal);color:var(--muted-foreground)}.actions{display:flex;gap:var(--osi-spacing-compact-xs, 2px);margin-top:auto;padding-top:var(--osi-spacing-compact-sm, 6px);border-top:1px solid var(--border);width:100%;justify-content:center}.action{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);background:var(--surface-hover);text-decoration:none;transition:all .2s var(--ease-out);border:1px solid transparent}.action:hover{background:var(--accent);border-color:var(--accent);transform:translateY(-1px);box-shadow:var(--shadow-sm)}@media (max-width: 480px){.card{padding:var(--osi-spacing-compact-sm, 6px)}}\n"] }]
|
|
16872
|
+
args: [{ selector: 'lib-contact-card-section', standalone: true, imports: [CommonModule, SectionHeaderComponent, EmptyStateComponent, BadgeComponent], template: "<div class=\"contacts\">\n <lib-section-header *ngIf=\"section.title\" [title]=\"section.title\" [description]=\"section.description\">\n </lib-section-header>\n\n <div class=\"grid\" *ngIf=\"section.fields?.length\">\n <div class=\"card\" *ngFor=\"let c of section.fields\">\n <div class=\"avatar\">\n <img [src]=\"getAvatar(c)\" [alt]=\"getContactName(c)\" *ngIf=\"getAvatar(c)\" loading=\"lazy\" />\n <span class=\"initials\" *ngIf=\"!getAvatar(c)\">{{ getInitials(getContactName(c)) }}</span>\n </div>\n <h4 class=\"name\">{{ getContactName(c) }}</h4>\n <p class=\"role\" *ngIf=\"getContactRole(c)\">{{ getContactRole(c) }}</p>\n <lib-badge *ngIf=\"c.department\" class=\"dept\" variant=\"primary\" size=\"sm\">{{ c.department }}</lib-badge>\n <div class=\"actions\">\n <a [href]=\"getOutlookEmailUrl(c.email)\" class=\"action\" *ngIf=\"c.email\" title=\"Email\">\uD83D\uDCE7</a>\n <a [href]=\"'tel:' + c.phone\" class=\"action\" *ngIf=\"c.phone\" title=\"Call\">\uD83D\uDCDE</a>\n <a [href]=\"c.linkedIn\" class=\"action\" target=\"_blank\" rel=\"noopener\" *ngIf=\"c.linkedIn\" title=\"LinkedIn\">\uD83D\uDCBC</a>\n </div>\n </div>\n </div>\n\n <lib-empty-state *ngIf=\"!section.fields?.length\" message=\"No contacts\" icon=\"\uD83D\uDC64\" variant=\"compact\"> </lib-empty-state>\n</div>\n", styles: [":root{--spacing-none: 0;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-base: 16px;--spacing-lg: 20px;--spacing-xl: 28px;--spacing-2xl: 40px;--spacing-3xl: 56px;--spacing-compact-xs: 3px;--spacing-compact-sm: 6px;--spacing-compact-md: 9px;--spacing-compact-base: 12px;--spacing-compact-lg: 16px;--section-card-min-height: 110px;--section-card-compact-height: 90px;--section-header-gap: var(--spacing-md);--section-content-gap: var(--spacing-sm);--section-card-gap: var(--spacing-md);--section-card-padding: var(--spacing-md)}:root{--text-xs: .6875rem;--text-sm: .75rem;--text-base: .8125rem;--text-md: .875rem;--text-lg: 1.0625rem;--text-xl: 1.1875rem;--text-2xl: 1.375rem;--text-3xl: 1.625rem;--text-4xl: 2rem;--font-light: 300;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--font-bold: 700;--font-extrabold: 800;--leading-tight: 1.2;--leading-snug: 1.3;--leading-normal: 1.4;--leading-relaxed: 1.5;--leading-loose: 1.75}:root{--radius-none: 0;--radius-xs: 2px;--radius-sm: 3px;--radius-md: 5px;--radius-lg: 7px;--radius-xl: 10px;--radius-2xl: 14px;--radius-full: 9999px}:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, .25);--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--glow-sm: 0 0 10px rgba(var(--accent-rgb), .15);--glow-md: 0 0 20px rgba(var(--accent-rgb), .2);--glow-lg: 0 0 30px rgba(var(--accent-rgb), .25)}@media (prefers-color-scheme: dark){:root{--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, .3), 0 1px 2px -1px rgba(0, 0, 0, .3);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .3), 0 2px 4px -2px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .4), 0 4px 6px -4px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .5), 0 8px 10px -6px rgba(0, 0, 0, .5)}}:root{--duration-fast: .15s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .5s;--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--ease-smooth: cubic-bezier(.4, 0, .6, 1);--transition-base: all var(--duration-base) var(--ease-out);--transition-fast: all var(--duration-fast) var(--ease-out);--transition-slow: all var(--duration-slow) var(--ease-out);--transition-colors: background-color var(--duration-base) var(--ease-out), border-color var(--duration-base) var(--ease-out), color var(--duration-base) var(--ease-out);--transition-shadow: box-shadow var(--duration-base) var(--ease-out);--transition-transform: transform var(--duration-base) var(--ease-out)}:root{--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-fixed: 300;--z-modal-backdrop: 400;--z-modal: 500;--z-popover: 600;--z-tooltip: 700;--z-toast: 800;--z-max: 9999}:root{--blur-none: 0;--blur-sm: 4px;--blur-md: 8px;--blur-lg: 16px;--blur-xl: 24px;--glass-bg: rgba(255, 255, 255, .7);--glass-border: rgba(255, 255, 255, .2);--glass-blur: var(--blur-md)}@media (prefers-color-scheme: dark){:root{--glass-bg: rgba(0, 0, 0, .4);--glass-border: rgba(255, 255, 255, .1)}}:root{--opacity-0: 0;--opacity-5: .05;--opacity-10: .1;--opacity-20: .2;--opacity-30: .3;--opacity-40: .4;--opacity-50: .5;--opacity-60: .6;--opacity-70: .7;--opacity-80: .8;--opacity-90: .9;--opacity-100: 1}:root{--surface-base: var(--section-item-background);--surface-raised: var(--section-item-background-hover);--surface-overlay: var(--glass-bg);--border-light: rgba(var(--foreground-rgb), .08);--border-base: var(--border);--border-strong: rgba(var(--foreground-rgb), .2);--state-hover-opacity: .08;--state-active-opacity: .12;--state-focus-opacity: .16;--state-disabled-opacity: .5}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.unified-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.unified-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.unified-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.unified-card{transition:none}}.section-card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);display:flex;flex-direction:column;gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;position:relative;overflow:hidden;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease}.section-card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.section-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.section-card{transition:none}}.status--completed,.status--success{color:#22c55e;background:#22c55e1a}.status--active,.status--in-progress{color:var(--accent);background:#ff79001a}.status--pending,.status--warning{color:#f59e0b;background:#f59e0b1a}.status--blocked,.status--cancelled,.status--delayed,.status--inactive,.status--error{color:#ef4444;background:#ef44441a}.status--default{color:var(--muted-foreground);background:var(--muted)}.priority--high{color:#ef4444;background:#ef44441a}.priority--medium{color:#f59e0b;background:#f59e0b1a}.priority--low{color:#22c55e;background:#22c55e1a}.priority--default{color:var(--muted-foreground);background:var(--muted)}@media (prefers-reduced-motion: reduce){.unified-card,.section-card,[class*=__card],[class*=-card],[class*=__item],[class*=-item]{transition:none;animation:none}}@keyframes section-item-stream{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}:host{display:block;width:100%}.contacts{display:flex;flex-direction:column;gap:var(--osi-spacing-compact-md, 12px)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--osi-spacing-compact-sm, 6px)}@media (max-width: 768px){.grid{gap:var(--osi-spacing-compact-xs, 2px)}}@media (max-width: 640px){.grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 380px){.grid{grid-template-columns:1fr}}.card{background:var(--section-item-background);border:var(--section-item-border);border-radius:var(--section-item-border-radius);box-shadow:var(--section-item-box-shadow);padding:var(--card-padding);gap:var(--card-gap);min-height:var(--card-min-height, auto);cursor:pointer;box-sizing:border-box;text-align:left;transition:background .2s ease,box-shadow .2s ease,border-color .2s ease;transition:var(--transition-shadow),var(--transition-transform);position:relative;overflow:hidden;padding:var(--osi-spacing-compact-md, 12px);text-align:center;min-height:140px;background:var(--surface);display:flex;flex-direction:column;align-items:center;gap:var(--osi-spacing-compact-xs, 2px);transition:all .3s var(--ease-out)}.card:hover{background:var(--section-item-background-hover);border-color:var(--section-item-border-hover);box-shadow:var(--section-item-box-shadow-hover)}.card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){.card{transition:none}}.card:active{transform:translateY(0);box-shadow:var(--shadow-md)}@media (prefers-reduced-motion: reduce){.card:hover,.card:active{transform:none}}.card:after{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.1) 50%,transparent 100%);transition:left var(--duration-slower) var(--ease-out);pointer-events:none}.card:hover:after{left:100%}@media (prefers-reduced-motion: reduce){.card:after{display:none}}.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.card:hover .avatar{transform:scale(1.06);box-shadow:0 6px 12px #00000026}.card:hover .name{color:var(--accent)}.avatar{width:48px;height:48px;border-radius:var(--radius-lg);border:2px solid var(--border);overflow:hidden;transition:all .3s var(--ease-out);box-shadow:var(--shadow-sm);flex-shrink:0;margin-bottom:var(--osi-spacing-compact-xs, 2px)}.avatar img{width:100%;height:100%;object-fit:cover}.initials{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:var(--surface-hover);font-size:1rem;font-weight:var(--font-semibold);color:var(--foreground)}.name{font-size:var(--text-base);font-weight:var(--font-semibold);line-height:var(--leading-normal);color:var(--foreground);margin:0;transition:color .2s var(--ease-out)}.role{font-size:var(--text-xs);font-weight:var(--font-normal);line-height:var(--leading-normal);color:var(--muted-foreground)}.actions{display:flex;gap:var(--osi-spacing-compact-xs, 2px);margin-top:auto;padding-top:var(--osi-spacing-compact-sm, 6px);border-top:1px solid var(--border);width:100%;justify-content:center}.action{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);background:var(--surface-hover);text-decoration:none;transition:all .2s var(--ease-out);border:1px solid transparent}.action:hover{background:var(--accent);border-color:var(--accent);transform:translateY(-1px);box-shadow:var(--shadow-sm)}@media (max-width: 480px){.card{padding:var(--osi-spacing-compact-sm, 6px)}}\n"] }]
|
|
16847
16873
|
}] });
|
|
16848
16874
|
|
|
16849
16875
|
var contactCardSection_component = /*#__PURE__*/Object.freeze({
|
|
@@ -27072,6 +27098,8 @@ class AICardRendererComponent {
|
|
|
27072
27098
|
// Construct mailto link
|
|
27073
27099
|
const queryString = params.length > 0 ? '?' + params.join('&') : '';
|
|
27074
27100
|
const mailtoLink = `mailto:${recipientEmail}${queryString}`;
|
|
27101
|
+
// Convert to Outlook URL scheme (works on both Windows and Mac)
|
|
27102
|
+
const outlookLink = `ms-outlook:${mailtoLink}`;
|
|
27075
27103
|
// Detect Edge browser for specific handling
|
|
27076
27104
|
const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : '';
|
|
27077
27105
|
const isEdgeChromium = /Edg/i.test(userAgent) && !/OPR/i.test(userAgent);
|
|
@@ -27080,12 +27108,12 @@ class AICardRendererComponent {
|
|
|
27080
27108
|
// Use window.location.href as primary method for Edge, anchor click for others
|
|
27081
27109
|
if (isEdgeChromium) {
|
|
27082
27110
|
// For Edge, use window.location.href directly (most reliable)
|
|
27083
|
-
window.location.href =
|
|
27111
|
+
window.location.href = outlookLink;
|
|
27084
27112
|
}
|
|
27085
27113
|
else if (typeof document !== 'undefined' && document.body) {
|
|
27086
27114
|
// For other browsers, try anchor click method first
|
|
27087
27115
|
const anchor = document.createElement('a');
|
|
27088
|
-
anchor.href =
|
|
27116
|
+
anchor.href = outlookLink;
|
|
27089
27117
|
// Edge may require the element to be in the DOM and visible (even briefly)
|
|
27090
27118
|
// Use a more Edge-compatible approach: minimal visibility
|
|
27091
27119
|
anchor.style.position = 'absolute';
|
|
@@ -27103,7 +27131,7 @@ class AICardRendererComponent {
|
|
|
27103
27131
|
catch (clickError) {
|
|
27104
27132
|
// If click fails, fall back to window.location
|
|
27105
27133
|
console.warn('Anchor click failed, using window.location fallback:', clickError);
|
|
27106
|
-
window.location.href =
|
|
27134
|
+
window.location.href = outlookLink;
|
|
27107
27135
|
}
|
|
27108
27136
|
// Remove anchor after a short delay
|
|
27109
27137
|
setTimeout(() => {
|
|
@@ -27115,20 +27143,20 @@ class AICardRendererComponent {
|
|
|
27115
27143
|
}
|
|
27116
27144
|
else {
|
|
27117
27145
|
// Fallback: use window.location if document.body is not available
|
|
27118
|
-
window.location.href =
|
|
27146
|
+
window.location.href = outlookLink;
|
|
27119
27147
|
}
|
|
27120
27148
|
}
|
|
27121
27149
|
catch (error) {
|
|
27122
27150
|
console.error('Failed to open email client:', error);
|
|
27123
27151
|
// Final fallback: try direct window.location
|
|
27124
27152
|
try {
|
|
27125
|
-
window.location.href =
|
|
27153
|
+
window.location.href = outlookLink;
|
|
27126
27154
|
}
|
|
27127
27155
|
catch (fallbackError) {
|
|
27128
27156
|
console.error('Failed to open email client with fallback method:', fallbackError);
|
|
27129
27157
|
// Last resort: try window.open (may be blocked by popup blockers)
|
|
27130
27158
|
try {
|
|
27131
|
-
const mailtoWindow = window.open(
|
|
27159
|
+
const mailtoWindow = window.open(outlookLink, '_blank');
|
|
27132
27160
|
if (!mailtoWindow) {
|
|
27133
27161
|
console.warn('Popup blocked. Please allow popups for this site to use email functionality.');
|
|
27134
27162
|
}
|