@propbinder/mobile-design 0.1.18 → 0.1.20
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.
|
@@ -42,8 +42,8 @@ const DEFAULT_CONFIG = {
|
|
|
42
42
|
* Initialize with custom config:
|
|
43
43
|
* ```typescript
|
|
44
44
|
* whitelabelService.initialize({
|
|
45
|
-
* logoUrl: '/
|
|
46
|
-
* logoMarkUrl: '/
|
|
45
|
+
* logoUrl: '/Assets/logos/acme-logo.svg',
|
|
46
|
+
* logoMarkUrl: '/Assets/logos/acme-mark.svg',
|
|
47
47
|
* primaryColor: '#2563eb',
|
|
48
48
|
* secondaryColor: '#3b82f6',
|
|
49
49
|
* organizationName: 'Acme Corp'
|
|
@@ -4710,7 +4710,7 @@ class DsMobileTabBarComponent {
|
|
|
4710
4710
|
/>
|
|
4711
4711
|
</div>
|
|
4712
4712
|
</ion-tab-bar>
|
|
4713
|
-
`, isInline: true, styles: ["@media (min-width: 768px){:host{display:block}}@media (max-width: 767px){:host{display:contents}}ion-tabs.ds-tabs-wrapper{height:100%;background:var(--color-brand-secondary)}ion-tab-button:before,ion-tab-button:after{content:none!important;display:none!important}ion-tab-button[title]:before,ion-tab-button[title]:after{display:none!important}ion-tab-button::part(native):before,ion-tab-button::part(native):after{display:none!important}.ds-tab-bar{--background: var(--color-background-neutral-primary);transition:transform .2s ease-in-out}ion-tab-bar[slot=bottom]{border-top:1px solid var(--border-color-default);padding-top:8px;padding-bottom:max(8px,calc(var(--ion-safe-area-bottom, 0px) - 16px));padding-left:12px;padding-right:12px}@media (max-width: 767px){ion-tab-bar[slot=bottom]{position:fixed;bottom:0;left:0;right:0;z-index:100}}@media (max-width: 767px){:host-context(ion-tabs:has(ds-mobile-page-details)) .ds-tab-bar{transform:translateY(100%);transition:transform .3s ease}}.ds-tab-bar__logo,.ds-tab-bar__actions{display:none}.ds-tab-bar__tabs{display:flex;width:100%;justify-content:space-around;align-items:center}@media (min-width: 769px){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)}}@media (display-mode: standalone){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)!important}}@media (min-width: 768px){:host[slot=top]{order:-1!important}:host ion-tab-bar{position:relative!important;bottom:auto!important;top:0!important}ion-tab-bar[slot=top]{--background: var(--color-brand-secondary);position:relative!important;display:flex!important;align-items:center;padding:12px 24px;height:64px;max-width:none;bottom:auto!important;top:0!important}ion-tab-bar[slot=bottom]{position:relative!important;bottom:auto!important}ion-tabs>div:not([slot]){order:1!important}.ds-tab-bar__logo{display:flex;position:absolute;left:24px;align-items:center;color:var(--header-content-color, white)}.ds-tab-bar__actions{display:flex;position:absolute;right:24px;align-items:center;gap:12px}.ds-tab-bar__tabs{display:flex;gap:8px;align-items:center;max-width:640px;width:100%;margin:0 auto;justify-content:center;padding-left:var(--content-padding-md);padding-right:var(--content-padding-md)}.logomark{height:28px;width:auto;flex-shrink:0}}@media (min-width: 992px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg);justify-content:center}}@media (min-width: 1440px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}ion-tab-button{--color: var(--text-color-default-tertiary);--color-selected: var(--color-brand-base);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:visible;pointer-events:auto}ion-tab-button[title]:before{content:attr(title);position:absolute;opacity:0;pointer-events:none}.tab-icon-ripple{position:absolute;left:50%;top:50%;width:40px;height:40px;border-radius:50%;background:var(--color-brand-base);transform:translate(-50%,-50%) scale(0);opacity:0;pointer-events:none;transition:all .6s cubic-bezier(.36,1.2,.04,1.4);z-index:0}.tab-selected .tab-icon-ripple{transform:translate(-50%,-50%) scale(2);opacity:.05;animation:ripple-fade .6s cubic-bezier(.36,.5,.04,1.8) forwards}@keyframes ripple-fade{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}30%{opacity:.1}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}ion-tab-button::part(native){overflow:visible}ion-tab-button ion-ripple-effect{color:var(--color-brand-base);border-radius:1000px}ion-tab-button ion-label{font-size:var(--font-size-xs);font-weight:400;letter-spacing:-.3px;margin-top:0}.tab-icon-wrapper{position:relative;width:24px;height:24px;display:flex;align-items:center;justify-content:center;z-index:1;margin-bottom:4px}.tab-icon-inactive,.tab-icon-active{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);transition:all .8s cubic-bezier(.36,1,.04,1)}.tab-icon-inactive{opacity:1;transform:translate(-50%,-50%) scale(1)}.tab-icon-active{opacity:0;transform:translate(-50%,calc(-50% - 12px)) scale(.5)}.tab-selected .tab-icon-inactive{opacity:0;transform:translate(-50%,-50%) scale(.5)}.tab-selected .tab-icon-active{opacity:1;transform:translate(-50%,-50%) scale(1)}@media (min-width: 768px){.ds-tab-button{flex-direction:row;height:40px;padding:0 16px!important;border-radius:40px;transition:all .2s ease;width:-moz-fit-content;width:fit-content;min-width:
|
|
4713
|
+
`, isInline: true, styles: ["@media (min-width: 768px){:host{display:block}}@media (max-width: 767px){:host{display:contents}}ion-tabs.ds-tabs-wrapper{height:100%;background:var(--color-brand-secondary)}ion-tab-button:before,ion-tab-button:after{content:none!important;display:none!important}ion-tab-button[title]:before,ion-tab-button[title]:after{display:none!important}ion-tab-button::part(native):before,ion-tab-button::part(native):after{display:none!important}.ds-tab-bar{--background: var(--color-background-neutral-primary);transition:transform .2s ease-in-out}ion-tab-bar[slot=bottom]{border-top:1px solid var(--border-color-default);padding-top:8px;padding-bottom:max(8px,calc(var(--ion-safe-area-bottom, 0px) - 16px));padding-left:12px;padding-right:12px}@media (max-width: 767px){ion-tab-bar[slot=bottom]{position:fixed;bottom:0;left:0;right:0;z-index:100}}@media (max-width: 767px){:host-context(ion-tabs:has(ds-mobile-page-details)) .ds-tab-bar{transform:translateY(100%);transition:transform .3s ease}}.ds-tab-bar__logo,.ds-tab-bar__actions{display:none}.ds-tab-bar__tabs{display:flex;width:100%;justify-content:space-around;align-items:center}@media (min-width: 769px){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)}}@media (display-mode: standalone){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)!important}}@media (min-width: 768px){:host[slot=top]{order:-1!important}:host ion-tab-bar{position:relative!important;bottom:auto!important;top:0!important}ion-tab-bar[slot=top]{--background: var(--color-brand-secondary);position:relative!important;display:flex!important;align-items:center;padding:12px 24px;height:64px;max-width:none;bottom:auto!important;top:0!important}ion-tab-bar[slot=bottom]{position:relative!important;bottom:auto!important}ion-tabs>div:not([slot]){order:1!important}.ds-tab-bar__logo{display:flex;position:absolute;left:24px;align-items:center;color:var(--header-content-color, white)}.ds-tab-bar__actions{display:flex;position:absolute;right:24px;align-items:center;gap:12px}.ds-tab-bar__tabs{display:flex;gap:8px;align-items:center;max-width:640px;width:100%;margin:0 auto;justify-content:center;padding-left:var(--content-padding-md);padding-right:var(--content-padding-md)}.logomark{height:28px;width:auto;flex-shrink:0}}@media (min-width: 992px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg);justify-content:center}}@media (min-width: 1440px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}ion-tab-button{--color: var(--text-color-default-tertiary);--color-selected: var(--color-brand-base);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:visible;pointer-events:auto}ion-tab-button[title]:before{content:attr(title);position:absolute;opacity:0;pointer-events:none}.tab-icon-ripple{position:absolute;left:50%;top:50%;width:40px;height:40px;border-radius:50%;background:var(--color-brand-base);transform:translate(-50%,-50%) scale(0);opacity:0;pointer-events:none;transition:all .6s cubic-bezier(.36,1.2,.04,1.4);z-index:0}.tab-selected .tab-icon-ripple{transform:translate(-50%,-50%) scale(2);opacity:.05;animation:ripple-fade .6s cubic-bezier(.36,.5,.04,1.8) forwards}@keyframes ripple-fade{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}30%{opacity:.1}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}ion-tab-button::part(native){overflow:visible}ion-tab-button ion-ripple-effect{color:var(--color-brand-base);border-radius:1000px}ion-tab-button ion-label{font-size:var(--font-size-xs);font-weight:400;letter-spacing:-.3px;margin-top:0}.tab-icon-wrapper{position:relative;width:24px;height:24px;display:flex;align-items:center;justify-content:center;z-index:1;margin-bottom:4px}.tab-icon-inactive,.tab-icon-active{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);transition:all .8s cubic-bezier(.36,1,.04,1)}.tab-icon-inactive{opacity:1;transform:translate(-50%,-50%) scale(1)}.tab-icon-active{opacity:0;transform:translate(-50%,calc(-50% - 12px)) scale(.5)}.tab-selected .tab-icon-inactive{opacity:0;transform:translate(-50%,-50%) scale(.5)}.tab-selected .tab-icon-active{opacity:1;transform:translate(-50%,-50%) scale(1)}@media (min-width: 768px){.ds-tab-button{flex-direction:row;height:40px;padding:0 16px!important;border-radius:40px;transition:all .2s ease;width:-moz-fit-content;width:fit-content;min-width:-moz-fit-content;min-width:fit-content;flex:0 0 auto;--color: rgba(var(--color-secondary-content-rgb, 255, 255, 255), .7);--color-selected: var(--color-secondary-content, white);color:rgba(var(--color-secondary-content-rgb, 255, 255, 255),.7);background:rgba(var(--color-secondary-content-rgb, 255, 255, 255),.1);position:relative;overflow:hidden}.tab-icon-wrapper,.tab-icon-ripple{width:20px;height:20px}.ds-tab-button::part(native){border-radius:40px}.ds-tab-button:hover:not(.tab-selected){--color: var(--color-secondary-content, white);--color-selected: var(--color-secondary-content, white);color:var(--color-secondary-content, white)}.ds-tab-button:hover:not(.tab-selected) ion-label{color:var(--color-secondary-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon{--icon-color: var(--color-secondary-content, white);color:var(--color-secondary-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon svg{fill:var(--color-secondary-content, white)}.ds-tab-button.tab-selected,.ds-tab-button.tab-selected:hover{background:var(--color-background-brand);--color-selected: var(--color-primary-content, white);--color: var(--color-primary-content, white);color:var(--color-primary-content, white)}.ds-tab-button.tab-selected:hover ion-label{color:var(--color-primary-content, white)}.ds-tab-button.tab-selected:hover ds-icon{--icon-color: var(--color-primary-content, white);color:var(--color-primary-content, white)}.ds-tab-button.tab-selected:hover ds-icon svg{fill:var(--color-primary-content, white)}.ds-tab-button.tab-selected:hover .tab-icon-active{opacity:1!important;visibility:visible!important}.ds-tab-button.tab-selected:hover .tab-icon-inactive{opacity:0!important}.ds-tab-button.tab-selected ion-label{color:var(--color-primary-content, white)}.ds-tab-button.tab-selected ds-icon{--icon-color: var(--color-primary-content, white);color:var(--color-primary-content, white)}.ds-tab-button.tab-selected ds-icon svg{fill:var(--color-primary-content, white)}.ds-tab-button .button-native{width:auto;padding:0}.ds-tab-button ion-label{font-size:var(--font-size-sm);font-weight:500;margin:0;color:inherit}.ds-tab-button .tab-icon-wrapper{margin-right:4px;margin-bottom:0}.ds-tab-button ion-ripple-effect{color:rgba(var(--header-content-color-rgb, 255, 255, 255),.3);border-radius:1000px;transform:scale(1.5)}}@media (min-width: 768px){.ds-tab-bar__actions ds-avatar{cursor:pointer;transition:transform .2s ease}.ds-tab-bar__actions ds-avatar:hover{transform:scale(1.05)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonTabBar, selector: "ion-tab-bar", inputs: ["color", "mode", "selectedTab", "translucent"] }, { kind: "component", type: IonTabButton, selector: "ion-tab-button", inputs: ["disabled", "download", "href", "layout", "mode", "rel", "selected", "tab", "target"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsAvatarComponent, selector: "ds-avatar", inputs: ["type", "size", "initials", "src", "alt", "iconName", "iconColor"] }, { kind: "component", type: DsLogoComponent, selector: "ds-logo", inputs: ["variant", "size", "customHeight", "customWidth"] }] });
|
|
4714
4714
|
}
|
|
4715
4715
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: DsMobileTabBarComponent, decorators: [{
|
|
4716
4716
|
type: Component,
|
|
@@ -4772,7 +4772,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
4772
4772
|
/>
|
|
4773
4773
|
</div>
|
|
4774
4774
|
</ion-tab-bar>
|
|
4775
|
-
`, styles: ["@media (min-width: 768px){:host{display:block}}@media (max-width: 767px){:host{display:contents}}ion-tabs.ds-tabs-wrapper{height:100%;background:var(--color-brand-secondary)}ion-tab-button:before,ion-tab-button:after{content:none!important;display:none!important}ion-tab-button[title]:before,ion-tab-button[title]:after{display:none!important}ion-tab-button::part(native):before,ion-tab-button::part(native):after{display:none!important}.ds-tab-bar{--background: var(--color-background-neutral-primary);transition:transform .2s ease-in-out}ion-tab-bar[slot=bottom]{border-top:1px solid var(--border-color-default);padding-top:8px;padding-bottom:max(8px,calc(var(--ion-safe-area-bottom, 0px) - 16px));padding-left:12px;padding-right:12px}@media (max-width: 767px){ion-tab-bar[slot=bottom]{position:fixed;bottom:0;left:0;right:0;z-index:100}}@media (max-width: 767px){:host-context(ion-tabs:has(ds-mobile-page-details)) .ds-tab-bar{transform:translateY(100%);transition:transform .3s ease}}.ds-tab-bar__logo,.ds-tab-bar__actions{display:none}.ds-tab-bar__tabs{display:flex;width:100%;justify-content:space-around;align-items:center}@media (min-width: 769px){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)}}@media (display-mode: standalone){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)!important}}@media (min-width: 768px){:host[slot=top]{order:-1!important}:host ion-tab-bar{position:relative!important;bottom:auto!important;top:0!important}ion-tab-bar[slot=top]{--background: var(--color-brand-secondary);position:relative!important;display:flex!important;align-items:center;padding:12px 24px;height:64px;max-width:none;bottom:auto!important;top:0!important}ion-tab-bar[slot=bottom]{position:relative!important;bottom:auto!important}ion-tabs>div:not([slot]){order:1!important}.ds-tab-bar__logo{display:flex;position:absolute;left:24px;align-items:center;color:var(--header-content-color, white)}.ds-tab-bar__actions{display:flex;position:absolute;right:24px;align-items:center;gap:12px}.ds-tab-bar__tabs{display:flex;gap:8px;align-items:center;max-width:640px;width:100%;margin:0 auto;justify-content:center;padding-left:var(--content-padding-md);padding-right:var(--content-padding-md)}.logomark{height:28px;width:auto;flex-shrink:0}}@media (min-width: 992px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg);justify-content:center}}@media (min-width: 1440px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}ion-tab-button{--color: var(--text-color-default-tertiary);--color-selected: var(--color-brand-base);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:visible;pointer-events:auto}ion-tab-button[title]:before{content:attr(title);position:absolute;opacity:0;pointer-events:none}.tab-icon-ripple{position:absolute;left:50%;top:50%;width:40px;height:40px;border-radius:50%;background:var(--color-brand-base);transform:translate(-50%,-50%) scale(0);opacity:0;pointer-events:none;transition:all .6s cubic-bezier(.36,1.2,.04,1.4);z-index:0}.tab-selected .tab-icon-ripple{transform:translate(-50%,-50%) scale(2);opacity:.05;animation:ripple-fade .6s cubic-bezier(.36,.5,.04,1.8) forwards}@keyframes ripple-fade{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}30%{opacity:.1}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}ion-tab-button::part(native){overflow:visible}ion-tab-button ion-ripple-effect{color:var(--color-brand-base);border-radius:1000px}ion-tab-button ion-label{font-size:var(--font-size-xs);font-weight:400;letter-spacing:-.3px;margin-top:0}.tab-icon-wrapper{position:relative;width:24px;height:24px;display:flex;align-items:center;justify-content:center;z-index:1;margin-bottom:4px}.tab-icon-inactive,.tab-icon-active{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);transition:all .8s cubic-bezier(.36,1,.04,1)}.tab-icon-inactive{opacity:1;transform:translate(-50%,-50%) scale(1)}.tab-icon-active{opacity:0;transform:translate(-50%,calc(-50% - 12px)) scale(.5)}.tab-selected .tab-icon-inactive{opacity:0;transform:translate(-50%,-50%) scale(.5)}.tab-selected .tab-icon-active{opacity:1;transform:translate(-50%,-50%) scale(1)}@media (min-width: 768px){.ds-tab-button{flex-direction:row;height:40px;padding:0 16px!important;border-radius:40px;transition:all .2s ease;width:-moz-fit-content;width:fit-content;min-width:
|
|
4775
|
+
`, styles: ["@media (min-width: 768px){:host{display:block}}@media (max-width: 767px){:host{display:contents}}ion-tabs.ds-tabs-wrapper{height:100%;background:var(--color-brand-secondary)}ion-tab-button:before,ion-tab-button:after{content:none!important;display:none!important}ion-tab-button[title]:before,ion-tab-button[title]:after{display:none!important}ion-tab-button::part(native):before,ion-tab-button::part(native):after{display:none!important}.ds-tab-bar{--background: var(--color-background-neutral-primary);transition:transform .2s ease-in-out}ion-tab-bar[slot=bottom]{border-top:1px solid var(--border-color-default);padding-top:8px;padding-bottom:max(8px,calc(var(--ion-safe-area-bottom, 0px) - 16px));padding-left:12px;padding-right:12px}@media (max-width: 767px){ion-tab-bar[slot=bottom]{position:fixed;bottom:0;left:0;right:0;z-index:100}}@media (max-width: 767px){:host-context(ion-tabs:has(ds-mobile-page-details)) .ds-tab-bar{transform:translateY(100%);transition:transform .3s ease}}.ds-tab-bar__logo,.ds-tab-bar__actions{display:none}.ds-tab-bar__tabs{display:flex;width:100%;justify-content:space-around;align-items:center}@media (min-width: 769px){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)}}@media (display-mode: standalone){ion-tab-bar[slot=bottom]{padding-bottom:env(safe-area-inset-bottom,0px)!important}}@media (min-width: 768px){:host[slot=top]{order:-1!important}:host ion-tab-bar{position:relative!important;bottom:auto!important;top:0!important}ion-tab-bar[slot=top]{--background: var(--color-brand-secondary);position:relative!important;display:flex!important;align-items:center;padding:12px 24px;height:64px;max-width:none;bottom:auto!important;top:0!important}ion-tab-bar[slot=bottom]{position:relative!important;bottom:auto!important}ion-tabs>div:not([slot]){order:1!important}.ds-tab-bar__logo{display:flex;position:absolute;left:24px;align-items:center;color:var(--header-content-color, white)}.ds-tab-bar__actions{display:flex;position:absolute;right:24px;align-items:center;gap:12px}.ds-tab-bar__tabs{display:flex;gap:8px;align-items:center;max-width:640px;width:100%;margin:0 auto;justify-content:center;padding-left:var(--content-padding-md);padding-right:var(--content-padding-md)}.logomark{height:28px;width:auto;flex-shrink:0}}@media (min-width: 992px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-lg);padding-right:var(--content-padding-lg);justify-content:center}}@media (min-width: 1440px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-xl);padding-right:var(--content-padding-xl)}}@media (min-width: 1768px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-2xl);padding-right:var(--content-padding-2xl)}}@media (min-width: 1920px){.ds-tab-bar__tabs{max-width:640px;padding-left:var(--content-padding-3xl);padding-right:var(--content-padding-3xl)}}ion-tab-button{--color: var(--text-color-default-tertiary);--color-selected: var(--color-brand-base);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:visible;pointer-events:auto}ion-tab-button[title]:before{content:attr(title);position:absolute;opacity:0;pointer-events:none}.tab-icon-ripple{position:absolute;left:50%;top:50%;width:40px;height:40px;border-radius:50%;background:var(--color-brand-base);transform:translate(-50%,-50%) scale(0);opacity:0;pointer-events:none;transition:all .6s cubic-bezier(.36,1.2,.04,1.4);z-index:0}.tab-selected .tab-icon-ripple{transform:translate(-50%,-50%) scale(2);opacity:.05;animation:ripple-fade .6s cubic-bezier(.36,.5,.04,1.8) forwards}@keyframes ripple-fade{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}30%{opacity:.1}to{opacity:0;transform:translate(-50%,-50%) scale(2)}}ion-tab-button::part(native){overflow:visible}ion-tab-button ion-ripple-effect{color:var(--color-brand-base);border-radius:1000px}ion-tab-button ion-label{font-size:var(--font-size-xs);font-weight:400;letter-spacing:-.3px;margin-top:0}.tab-icon-wrapper{position:relative;width:24px;height:24px;display:flex;align-items:center;justify-content:center;z-index:1;margin-bottom:4px}.tab-icon-inactive,.tab-icon-active{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);transition:all .8s cubic-bezier(.36,1,.04,1)}.tab-icon-inactive{opacity:1;transform:translate(-50%,-50%) scale(1)}.tab-icon-active{opacity:0;transform:translate(-50%,calc(-50% - 12px)) scale(.5)}.tab-selected .tab-icon-inactive{opacity:0;transform:translate(-50%,-50%) scale(.5)}.tab-selected .tab-icon-active{opacity:1;transform:translate(-50%,-50%) scale(1)}@media (min-width: 768px){.ds-tab-button{flex-direction:row;height:40px;padding:0 16px!important;border-radius:40px;transition:all .2s ease;width:-moz-fit-content;width:fit-content;min-width:-moz-fit-content;min-width:fit-content;flex:0 0 auto;--color: rgba(var(--color-secondary-content-rgb, 255, 255, 255), .7);--color-selected: var(--color-secondary-content, white);color:rgba(var(--color-secondary-content-rgb, 255, 255, 255),.7);background:rgba(var(--color-secondary-content-rgb, 255, 255, 255),.1);position:relative;overflow:hidden}.tab-icon-wrapper,.tab-icon-ripple{width:20px;height:20px}.ds-tab-button::part(native){border-radius:40px}.ds-tab-button:hover:not(.tab-selected){--color: var(--color-secondary-content, white);--color-selected: var(--color-secondary-content, white);color:var(--color-secondary-content, white)}.ds-tab-button:hover:not(.tab-selected) ion-label{color:var(--color-secondary-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon{--icon-color: var(--color-secondary-content, white);color:var(--color-secondary-content, white)}.ds-tab-button:hover:not(.tab-selected) ds-icon svg{fill:var(--color-secondary-content, white)}.ds-tab-button.tab-selected,.ds-tab-button.tab-selected:hover{background:var(--color-background-brand);--color-selected: var(--color-primary-content, white);--color: var(--color-primary-content, white);color:var(--color-primary-content, white)}.ds-tab-button.tab-selected:hover ion-label{color:var(--color-primary-content, white)}.ds-tab-button.tab-selected:hover ds-icon{--icon-color: var(--color-primary-content, white);color:var(--color-primary-content, white)}.ds-tab-button.tab-selected:hover ds-icon svg{fill:var(--color-primary-content, white)}.ds-tab-button.tab-selected:hover .tab-icon-active{opacity:1!important;visibility:visible!important}.ds-tab-button.tab-selected:hover .tab-icon-inactive{opacity:0!important}.ds-tab-button.tab-selected ion-label{color:var(--color-primary-content, white)}.ds-tab-button.tab-selected ds-icon{--icon-color: var(--color-primary-content, white);color:var(--color-primary-content, white)}.ds-tab-button.tab-selected ds-icon svg{fill:var(--color-primary-content, white)}.ds-tab-button .button-native{width:auto;padding:0}.ds-tab-button ion-label{font-size:var(--font-size-sm);font-weight:500;margin:0;color:inherit}.ds-tab-button .tab-icon-wrapper{margin-right:4px;margin-bottom:0}.ds-tab-button ion-ripple-effect{color:rgba(var(--header-content-color-rgb, 255, 255, 255),.3);border-radius:1000px;transform:scale(1.5)}}@media (min-width: 768px){.ds-tab-bar__actions ds-avatar{cursor:pointer;transition:transform .2s ease}.ds-tab-bar__actions ds-avatar:hover{transform:scale(1.05)}}\n"] }]
|
|
4776
4776
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { tabs: [{
|
|
4777
4777
|
type: Input
|
|
4778
4778
|
}], avatarType: [{
|
|
@@ -6712,6 +6712,11 @@ class DsMobilePostDetailModalComponent {
|
|
|
6712
6712
|
bottomSheet;
|
|
6713
6713
|
// Post data passed from service
|
|
6714
6714
|
postData;
|
|
6715
|
+
// Current user info for comment composer
|
|
6716
|
+
currentUserName = '';
|
|
6717
|
+
currentUserInitialsInput = '';
|
|
6718
|
+
// Callback for submitting a new comment
|
|
6719
|
+
onSubmitComment;
|
|
6715
6720
|
/**
|
|
6716
6721
|
* Loading state - when true, shows loading indicator
|
|
6717
6722
|
* Set this to true while fetching post data from your API
|
|
@@ -6731,7 +6736,7 @@ class DsMobilePostDetailModalComponent {
|
|
|
6731
6736
|
authorRole: '',
|
|
6732
6737
|
timestamp: '',
|
|
6733
6738
|
content: '',
|
|
6734
|
-
comments: []
|
|
6739
|
+
comments: [],
|
|
6735
6740
|
}, ...(ngDevMode ? [{ debugName: "post" }] : []));
|
|
6736
6741
|
// Comment composer state
|
|
6737
6742
|
commentText = signal('', ...(ngDevMode ? [{ debugName: "commentText" }] : []));
|
|
@@ -6748,18 +6753,22 @@ class DsMobilePostDetailModalComponent {
|
|
|
6748
6753
|
// Add post author
|
|
6749
6754
|
users.push({
|
|
6750
6755
|
name: post.authorName,
|
|
6751
|
-
initials: post.avatarInitials ||
|
|
6752
|
-
|
|
6756
|
+
initials: post.avatarInitials ||
|
|
6757
|
+
post.authorName
|
|
6758
|
+
.split(' ')
|
|
6759
|
+
.map((n) => n[0])
|
|
6760
|
+
.join(''),
|
|
6761
|
+
role: post.authorRole,
|
|
6753
6762
|
});
|
|
6754
6763
|
// Add unique commenters
|
|
6755
6764
|
const commenterNames = new Set();
|
|
6756
|
-
post.comments?.forEach(comment => {
|
|
6765
|
+
post.comments?.forEach((comment) => {
|
|
6757
6766
|
if (!commenterNames.has(comment.authorName)) {
|
|
6758
6767
|
commenterNames.add(comment.authorName);
|
|
6759
6768
|
users.push({
|
|
6760
6769
|
name: comment.authorName,
|
|
6761
6770
|
initials: comment.avatarInitials,
|
|
6762
|
-
role: comment.authorRole
|
|
6771
|
+
role: comment.authorRole,
|
|
6763
6772
|
});
|
|
6764
6773
|
}
|
|
6765
6774
|
});
|
|
@@ -6770,7 +6779,7 @@ class DsMobilePostDetailModalComponent {
|
|
|
6770
6779
|
const query = this.mentionQuery().toLowerCase();
|
|
6771
6780
|
if (!query)
|
|
6772
6781
|
return this.availableUsers();
|
|
6773
|
-
return this.availableUsers().filter(user => user.name.toLowerCase().includes(query));
|
|
6782
|
+
return this.availableUsers().filter((user) => user.name.toLowerCase().includes(query));
|
|
6774
6783
|
}, ...(ngDevMode ? [{ debugName: "filteredUsers" }] : []));
|
|
6775
6784
|
constructor(modalController, lightbox, bottomSheet) {
|
|
6776
6785
|
this.modalController = modalController;
|
|
@@ -6782,6 +6791,21 @@ class DsMobilePostDetailModalComponent {
|
|
|
6782
6791
|
if (this.postData) {
|
|
6783
6792
|
this.post.set(this.postData);
|
|
6784
6793
|
}
|
|
6794
|
+
// Set current user initials
|
|
6795
|
+
if (this.currentUserInitialsInput) {
|
|
6796
|
+
this.currentUserInitials.set(this.currentUserInitialsInput);
|
|
6797
|
+
}
|
|
6798
|
+
else if (this.currentUserName) {
|
|
6799
|
+
// fallback: derive from name
|
|
6800
|
+
const initials = this.currentUserName
|
|
6801
|
+
.trim()
|
|
6802
|
+
.split(/\s+/)
|
|
6803
|
+
.map(p => p[0])
|
|
6804
|
+
.join('')
|
|
6805
|
+
.substring(0, 2)
|
|
6806
|
+
.toUpperCase();
|
|
6807
|
+
this.currentUserInitials.set(initials);
|
|
6808
|
+
}
|
|
6785
6809
|
// Set up keyboard listeners to update CSS variable for composer positioning
|
|
6786
6810
|
this.setupKeyboardListeners();
|
|
6787
6811
|
}
|
|
@@ -6807,22 +6831,22 @@ class DsMobilePostDetailModalComponent {
|
|
|
6807
6831
|
setupKeyboardListeners() {
|
|
6808
6832
|
Keyboard.addListener('keyboardWillShow', (info) => {
|
|
6809
6833
|
document.documentElement.style.setProperty('--keyboard-height', `${info.keyboardHeight}px`);
|
|
6810
|
-
}).catch(e => console.log('Keyboard listeners not available:', e));
|
|
6834
|
+
}).catch((e) => console.log('Keyboard listeners not available:', e));
|
|
6811
6835
|
Keyboard.addListener('keyboardWillHide', () => {
|
|
6812
6836
|
document.documentElement.style.setProperty('--keyboard-height', '0px');
|
|
6813
|
-
}).catch(e => console.log('Keyboard listeners not available:', e));
|
|
6837
|
+
}).catch((e) => console.log('Keyboard listeners not available:', e));
|
|
6814
6838
|
}
|
|
6815
6839
|
/**
|
|
6816
6840
|
* Clean up keyboard event listeners
|
|
6817
6841
|
*/
|
|
6818
6842
|
cleanupKeyboardListeners() {
|
|
6819
|
-
Keyboard.removeAllListeners().catch(e => console.log('Keyboard cleanup not available:', e));
|
|
6843
|
+
Keyboard.removeAllListeners().catch((e) => console.log('Keyboard cleanup not available:', e));
|
|
6820
6844
|
}
|
|
6821
6845
|
/**
|
|
6822
6846
|
* Show the keyboard when user interacts with input
|
|
6823
6847
|
*/
|
|
6824
6848
|
showKeyboard() {
|
|
6825
|
-
Keyboard.show().catch(e => console.log('Keyboard.show() not available'));
|
|
6849
|
+
Keyboard.show().catch((e) => console.log('Keyboard.show() not available'));
|
|
6826
6850
|
}
|
|
6827
6851
|
/**
|
|
6828
6852
|
* Focus the comment input when comment icon is tapped
|
|
@@ -6946,51 +6970,50 @@ class DsMobilePostDetailModalComponent {
|
|
|
6946
6970
|
if (!text)
|
|
6947
6971
|
return;
|
|
6948
6972
|
const currentPost = this.post();
|
|
6973
|
+
const postId = currentPost.postId;
|
|
6974
|
+
// Create new comment
|
|
6975
|
+
const finalText = this.replyingTo() ? `@${this.replyingTo().authorName} ${text}` : text;
|
|
6949
6976
|
// Check if we're editing an existing comment
|
|
6950
6977
|
if (this.editingComment()) {
|
|
6951
6978
|
console.log('[PostDetailModal] Updating comment:', text);
|
|
6952
6979
|
const editing = this.editingComment();
|
|
6953
6980
|
// Update the existing comment
|
|
6954
|
-
const updatedComments = currentPost.comments?.map(comment => {
|
|
6955
|
-
if (comment.authorName === editing.authorName &&
|
|
6956
|
-
comment.content === editing.originalContent &&
|
|
6957
|
-
comment.timestamp === editing.timestamp) {
|
|
6981
|
+
const updatedComments = currentPost.comments?.map((comment) => {
|
|
6982
|
+
if (comment.authorName === editing.authorName && comment.content === editing.originalContent && comment.timestamp === editing.timestamp) {
|
|
6958
6983
|
return {
|
|
6959
6984
|
...comment,
|
|
6960
6985
|
content: text,
|
|
6961
|
-
timestamp: 'Just now (edited)'
|
|
6986
|
+
timestamp: 'Just now (edited)',
|
|
6962
6987
|
};
|
|
6963
6988
|
}
|
|
6964
6989
|
return comment;
|
|
6965
6990
|
});
|
|
6966
6991
|
this.post.set({
|
|
6967
6992
|
...currentPost,
|
|
6968
|
-
comments: updatedComments
|
|
6993
|
+
comments: updatedComments,
|
|
6969
6994
|
});
|
|
6970
6995
|
// Clear edit state
|
|
6971
6996
|
this.editingComment.set(null);
|
|
6972
6997
|
}
|
|
6973
6998
|
else {
|
|
6974
|
-
|
|
6975
|
-
console.log('[PostDetailModal]
|
|
6999
|
+
console.log('[PostDetailModal] Submitting comment:', finalText);
|
|
7000
|
+
console.log('[PostDetailModal] onSubmitComment =', this.onSubmitComment);
|
|
6976
7001
|
const newComment = {
|
|
6977
|
-
authorName:
|
|
6978
|
-
authorRole: '
|
|
7002
|
+
authorName: this.currentUserName || 'Dig',
|
|
7003
|
+
authorRole: 'Dig',
|
|
6979
7004
|
timestamp: 'Just now',
|
|
6980
7005
|
avatarInitials: this.currentUserInitials(),
|
|
6981
|
-
content:
|
|
6982
|
-
? `@${this.replyingTo().authorName} ${text}`
|
|
6983
|
-
: text,
|
|
7006
|
+
content: finalText,
|
|
6984
7007
|
isLiked: false,
|
|
6985
7008
|
likeCount: 0,
|
|
6986
|
-
isOwnComment: true
|
|
7009
|
+
isOwnComment: true,
|
|
6987
7010
|
};
|
|
6988
7011
|
// Add comment to the list
|
|
6989
7012
|
const updatedComments = [...(currentPost.comments || []), newComment];
|
|
6990
7013
|
this.post.set({
|
|
6991
7014
|
...currentPost,
|
|
6992
7015
|
comments: updatedComments,
|
|
6993
|
-
commentCount: updatedComments.length
|
|
7016
|
+
commentCount: updatedComments.length,
|
|
6994
7017
|
});
|
|
6995
7018
|
// Clear reply state
|
|
6996
7019
|
this.replyingTo.set(null);
|
|
@@ -6998,16 +7021,19 @@ class DsMobilePostDetailModalComponent {
|
|
|
6998
7021
|
// Clear the input
|
|
6999
7022
|
this.commentText.set('');
|
|
7000
7023
|
this.showMentionMenu.set(false);
|
|
7001
|
-
// Reset textarea height to initial state
|
|
7002
7024
|
if (this.commentInput?.nativeElement) {
|
|
7025
|
+
// Reset textarea height to initial state
|
|
7003
7026
|
this.commentInput.nativeElement.style.height = 'auto';
|
|
7027
|
+
// Blur the input to hide the keyboard
|
|
7028
|
+
this.commentInput?.nativeElement.blur();
|
|
7004
7029
|
}
|
|
7005
|
-
// Blur the input to hide the keyboard
|
|
7006
|
-
this.commentInput?.nativeElement.blur();
|
|
7007
7030
|
// Hide keyboard explicitly
|
|
7008
|
-
Keyboard.hide().catch(
|
|
7031
|
+
Keyboard.hide().catch(() => { });
|
|
7009
7032
|
// In a real app, you would also send this to your backend
|
|
7010
7033
|
// this.commentService.addComment(currentPost.postId, text);
|
|
7034
|
+
if (this.onSubmitComment) {
|
|
7035
|
+
this.onSubmitComment({ postId, text: finalText });
|
|
7036
|
+
}
|
|
7011
7037
|
}
|
|
7012
7038
|
/**
|
|
7013
7039
|
* Open image in lightbox
|
|
@@ -7022,7 +7048,7 @@ class DsMobilePostDetailModalComponent {
|
|
|
7022
7048
|
avatarInitials: postData.avatarInitials || '',
|
|
7023
7049
|
avatarType: postData.avatarType || 'initials',
|
|
7024
7050
|
avatarSrc: postData.avatarSrc || '',
|
|
7025
|
-
timestamp: postData.timestamp
|
|
7051
|
+
timestamp: postData.timestamp,
|
|
7026
7052
|
};
|
|
7027
7053
|
this.lightbox.open({
|
|
7028
7054
|
images: [
|
|
@@ -7034,13 +7060,13 @@ class DsMobilePostDetailModalComponent {
|
|
|
7034
7060
|
description: postData.content,
|
|
7035
7061
|
isLiked: postData.isLiked || false,
|
|
7036
7062
|
likeCount: postData.likeCount || 0,
|
|
7037
|
-
commentCount: postData.commentCount || 0
|
|
7038
|
-
}
|
|
7063
|
+
commentCount: postData.commentCount || 0,
|
|
7064
|
+
},
|
|
7039
7065
|
],
|
|
7040
7066
|
author: authorMeta,
|
|
7041
7067
|
enableZoom: true,
|
|
7042
7068
|
showControls: false,
|
|
7043
|
-
showInfo: true
|
|
7069
|
+
showInfo: true,
|
|
7044
7070
|
});
|
|
7045
7071
|
}
|
|
7046
7072
|
/**
|
|
@@ -7050,13 +7076,13 @@ class DsMobilePostDetailModalComponent {
|
|
|
7050
7076
|
const sheet = await this.bottomSheet.create({
|
|
7051
7077
|
component: DsMobileActionsBottomSheetComponent,
|
|
7052
7078
|
componentProps: {
|
|
7053
|
-
isOwnContent: isOwnComment
|
|
7079
|
+
isOwnContent: isOwnComment,
|
|
7054
7080
|
},
|
|
7055
7081
|
breakpoints: [0, 1],
|
|
7056
7082
|
initialBreakpoint: 1,
|
|
7057
7083
|
handle: true,
|
|
7058
7084
|
backdropDismiss: true,
|
|
7059
|
-
cssClass: 'auto-height'
|
|
7085
|
+
cssClass: 'auto-height',
|
|
7060
7086
|
});
|
|
7061
7087
|
const result = await sheet.onWillDismiss();
|
|
7062
7088
|
if (result.role === 'select' && result.data) {
|
|
@@ -7066,13 +7092,13 @@ class DsMobilePostDetailModalComponent {
|
|
|
7066
7092
|
case 'like':
|
|
7067
7093
|
console.log('Like comment by', authorName);
|
|
7068
7094
|
// Find and toggle like on the comment
|
|
7069
|
-
const updatedComments = currentPost.comments?.map(comment => {
|
|
7095
|
+
const updatedComments = currentPost.comments?.map((comment) => {
|
|
7070
7096
|
if (comment.authorName === authorName && comment.content === content) {
|
|
7071
7097
|
const isLiked = !comment.isLiked;
|
|
7072
7098
|
return {
|
|
7073
7099
|
...comment,
|
|
7074
7100
|
isLiked,
|
|
7075
|
-
likeCount: isLiked ? (comment.likeCount || 0) + 1 : Math.max(0, (comment.likeCount || 0) - 1)
|
|
7101
|
+
likeCount: isLiked ? (comment.likeCount || 0) + 1 : Math.max(0, (comment.likeCount || 0) - 1),
|
|
7076
7102
|
};
|
|
7077
7103
|
}
|
|
7078
7104
|
return comment;
|
|
@@ -7086,7 +7112,7 @@ class DsMobilePostDetailModalComponent {
|
|
|
7086
7112
|
case 'edit':
|
|
7087
7113
|
console.log('Edit comment by', authorName);
|
|
7088
7114
|
// Find the full comment data to get timestamp
|
|
7089
|
-
const commentToEdit = currentPost.comments?.find(comment => comment.authorName === authorName && comment.content === content);
|
|
7115
|
+
const commentToEdit = currentPost.comments?.find((comment) => comment.authorName === authorName && comment.content === content);
|
|
7090
7116
|
if (commentToEdit) {
|
|
7091
7117
|
this.handleEditComment(authorName, content, commentToEdit.timestamp);
|
|
7092
7118
|
}
|
|
@@ -7095,11 +7121,11 @@ class DsMobilePostDetailModalComponent {
|
|
|
7095
7121
|
console.log('Delete comment by', authorName);
|
|
7096
7122
|
// Show confirmation before deleting
|
|
7097
7123
|
if (confirm('Are you sure you want to delete this comment?')) {
|
|
7098
|
-
const updatedCommentsAfterDelete = currentPost.comments?.filter(comment => !(comment.authorName === authorName && comment.content === content));
|
|
7124
|
+
const updatedCommentsAfterDelete = currentPost.comments?.filter((comment) => !(comment.authorName === authorName && comment.content === content));
|
|
7099
7125
|
this.post.set({
|
|
7100
7126
|
...currentPost,
|
|
7101
7127
|
comments: updatedCommentsAfterDelete,
|
|
7102
|
-
commentCount: updatedCommentsAfterDelete?.length || 0
|
|
7128
|
+
commentCount: updatedCommentsAfterDelete?.length || 0,
|
|
7103
7129
|
});
|
|
7104
7130
|
}
|
|
7105
7131
|
break;
|
|
@@ -7107,7 +7133,7 @@ class DsMobilePostDetailModalComponent {
|
|
|
7107
7133
|
}
|
|
7108
7134
|
}
|
|
7109
7135
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: DsMobilePostDetailModalComponent, deps: [{ token: i1.ModalController }, { token: DsMobileLightboxService }, { token: DsMobileBottomSheetService }], target: i0.ɵɵFactoryTarget.Component });
|
|
7110
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: DsMobilePostDetailModalComponent, isStandalone: true, selector: "ds-mobile-post-detail-modal", inputs: { postData: "postData", loading: "loading", error: "error" }, viewQueries: [{ propertyName: "commentInput", first: true, predicate: ["commentInput"], descendants: true }], ngImport: i0, template: `
|
|
7136
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: DsMobilePostDetailModalComponent, isStandalone: true, selector: "ds-mobile-post-detail-modal", inputs: { postData: "postData", currentUserName: "currentUserName", currentUserInitialsInput: "currentUserInitialsInput", onSubmitComment: "onSubmitComment", loading: "loading", error: "error" }, viewQueries: [{ propertyName: "commentInput", first: true, predicate: ["commentInput"], descendants: true }], ngImport: i0, template: `
|
|
7111
7137
|
<ion-content [fullscreen]="true" [scrollY]="true" class="post-modal-content">
|
|
7112
7138
|
<div class="post-modal-wrapper">
|
|
7113
7139
|
<!-- Header with post author info -->
|
|
@@ -7115,12 +7141,7 @@ class DsMobilePostDetailModalComponent {
|
|
|
7115
7141
|
<div class="header-content">
|
|
7116
7142
|
<!-- Post author info -->
|
|
7117
7143
|
<div class="post-author-info">
|
|
7118
|
-
<ds-avatar
|
|
7119
|
-
[initials]="post().avatarInitials || ''"
|
|
7120
|
-
[type]="post().avatarType || 'initials'"
|
|
7121
|
-
[src]="post().avatarSrc || ''"
|
|
7122
|
-
size="md"
|
|
7123
|
-
/>
|
|
7144
|
+
<ds-avatar [initials]="post().avatarInitials || ''" [type]="post().avatarType || 'initials'" [src]="post().avatarSrc || ''" size="md" />
|
|
7124
7145
|
<div class="author-details">
|
|
7125
7146
|
<div class="author-name">{{ post().authorName }}</div>
|
|
7126
7147
|
<div class="author-meta">
|
|
@@ -7130,34 +7151,27 @@ class DsMobilePostDetailModalComponent {
|
|
|
7130
7151
|
</div>
|
|
7131
7152
|
</div>
|
|
7132
7153
|
</div>
|
|
7133
|
-
|
|
7154
|
+
|
|
7134
7155
|
<!-- Close button -->
|
|
7135
|
-
<ds-icon-button
|
|
7136
|
-
icon="remixCloseLine"
|
|
7137
|
-
variant="secondary"
|
|
7138
|
-
size="lg"
|
|
7139
|
-
(click)="close()"
|
|
7140
|
-
class="close-button"
|
|
7141
|
-
aria-label="Luk opslag">
|
|
7142
|
-
</ds-icon-button>
|
|
7156
|
+
<ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (click)="close()" class="close-button" aria-label="Luk opslag"> </ds-icon-button>
|
|
7143
7157
|
</div>
|
|
7144
7158
|
</div>
|
|
7145
7159
|
|
|
7146
7160
|
<!-- Post content -->
|
|
7147
7161
|
<div class="post-detail-container">
|
|
7148
7162
|
@if (loading) {
|
|
7149
|
-
|
|
7150
|
-
|
|
7151
|
-
|
|
7152
|
-
|
|
7153
|
-
|
|
7163
|
+
<!-- Loading State -->
|
|
7164
|
+
<div class="post-loading-state">
|
|
7165
|
+
<div class="loading-spinner"></div>
|
|
7166
|
+
<p class="loading-text">Loading post...</p>
|
|
7167
|
+
</div>
|
|
7154
7168
|
} @else if (error) {
|
|
7155
|
-
|
|
7156
|
-
|
|
7157
|
-
|
|
7158
|
-
|
|
7159
|
-
|
|
7160
|
-
|
|
7169
|
+
<!-- Error State -->
|
|
7170
|
+
<div class="post-error-state">
|
|
7171
|
+
<ds-icon name="remixErrorWarningLine" size="48px" [style.color]="'var(--color-destructive-base)'" />
|
|
7172
|
+
<h3 class="error-state-title">Error loading post</h3>
|
|
7173
|
+
<p class="error-state-description">{{ error }}</p>
|
|
7174
|
+
</div>
|
|
7161
7175
|
} @else {
|
|
7162
7176
|
<!-- Post Section -->
|
|
7163
7177
|
<div class="post-section">
|
|
@@ -7166,154 +7180,124 @@ class DsMobilePostDetailModalComponent {
|
|
|
7166
7180
|
<div [innerHTML]="post().content"></div>
|
|
7167
7181
|
</post-text>
|
|
7168
7182
|
@if (post().imageSrc) {
|
|
7169
|
-
|
|
7170
|
-
|
|
7171
|
-
|
|
7172
|
-
[alt]="post().imageAlt || 'Post image'"
|
|
7173
|
-
class="clickable-image"
|
|
7174
|
-
(click)="openImageLightbox()"
|
|
7175
|
-
/>
|
|
7176
|
-
</post-media>
|
|
7183
|
+
<post-media>
|
|
7184
|
+
<img [src]="post().imageSrc" [alt]="post().imageAlt || 'Post image'" class="clickable-image" (click)="openImageLightbox()" />
|
|
7185
|
+
</post-media>
|
|
7177
7186
|
}
|
|
7178
7187
|
</div>
|
|
7179
|
-
|
|
7188
|
+
|
|
7180
7189
|
<!-- Post actions -->
|
|
7181
7190
|
<div class="post-actions">
|
|
7182
|
-
<action-like
|
|
7183
|
-
|
|
7184
|
-
[count]="post().likeCount || 0" />
|
|
7185
|
-
<action-comment
|
|
7186
|
-
[count]="post().commentCount || 0"
|
|
7187
|
-
(commentClick)="focusCommentInput()" />
|
|
7191
|
+
<action-like [active]="post().isLiked || false" [count]="post().likeCount || 0" />
|
|
7192
|
+
<action-comment [count]="post().commentCount || 0" (commentClick)="focusCommentInput()" />
|
|
7188
7193
|
</div>
|
|
7189
7194
|
</div>
|
|
7190
|
-
|
|
7191
|
-
|
|
7192
|
-
|
|
7193
|
-
|
|
7195
|
+
|
|
7196
|
+
<!-- Comments Section -->
|
|
7197
|
+
<div class="comments-section">
|
|
7198
|
+
@if (post().comments && post().comments!.length > 0) {
|
|
7194
7199
|
<h2 class="comments-header">{{ post().comments!.length }} {{ post().comments!.length === 1 ? 'reply' : 'replies' }}</h2>
|
|
7195
|
-
|
|
7200
|
+
|
|
7196
7201
|
<div class="comments-list">
|
|
7197
7202
|
@for (comment of post().comments!; track comment.authorName + comment.timestamp) {
|
|
7198
|
-
|
|
7199
|
-
|
|
7200
|
-
|
|
7201
|
-
|
|
7202
|
-
|
|
7203
|
-
|
|
7204
|
-
|
|
7205
|
-
|
|
7206
|
-
|
|
7207
|
-
|
|
7208
|
-
|
|
7209
|
-
|
|
7210
|
-
|
|
7203
|
+
<ds-mobile-comment
|
|
7204
|
+
[authorName]="comment.authorName"
|
|
7205
|
+
[authorRole]="comment.authorRole"
|
|
7206
|
+
[timestamp]="comment.timestamp"
|
|
7207
|
+
[avatarInitials]="comment.avatarInitials"
|
|
7208
|
+
[content]="comment.content"
|
|
7209
|
+
[isLiked]="comment.isLiked || false"
|
|
7210
|
+
[likeCount]="comment.likeCount || 0"
|
|
7211
|
+
[clickable]="true"
|
|
7212
|
+
[isOwnComment]="comment.isOwnComment || false"
|
|
7213
|
+
(replyClick)="handleReply(comment.authorName, comment.content)"
|
|
7214
|
+
(editClick)="handleEditComment(comment.authorName, comment.content, comment.timestamp)"
|
|
7215
|
+
(longPress)="handleCommentLongPress(comment.authorName, comment.content, comment.isOwnComment || false)" />
|
|
7211
7216
|
}
|
|
7212
7217
|
</div>
|
|
7213
|
-
|
|
7218
|
+
} @else {
|
|
7214
7219
|
<!-- Empty State -->
|
|
7215
7220
|
<div class="comments-empty-state">
|
|
7216
|
-
<img
|
|
7217
|
-
src="/Assets/Empty%20state-chat.png"
|
|
7218
|
-
alt="Ingen kommentarer endnu"
|
|
7219
|
-
class="empty-state-image"
|
|
7220
|
-
/>
|
|
7221
|
+
<img src="/Assets/Empty%20state-chat.png" alt="Ingen kommentarer endnu" class="empty-state-image" />
|
|
7221
7222
|
<h3 class="empty-state-title">Ingen svar endnu</h3>
|
|
7222
7223
|
<p class="empty-state-description">Vær den første til at svare på dette opslag</p>
|
|
7223
7224
|
</div>
|
|
7225
|
+
}
|
|
7226
|
+
|
|
7227
|
+
<!-- Bottom spacer for fixed composer -->
|
|
7228
|
+
<div class="composer-spacer"></div>
|
|
7229
|
+
</div>
|
|
7224
7230
|
}
|
|
7225
|
-
|
|
7226
|
-
<!-- Bottom spacer for fixed composer -->
|
|
7227
|
-
<div class="composer-spacer"></div>
|
|
7228
|
-
</div>
|
|
7229
|
-
}
|
|
7230
7231
|
</div>
|
|
7231
7232
|
</div>
|
|
7232
7233
|
</ion-content>
|
|
7233
|
-
|
|
7234
|
+
|
|
7234
7235
|
<!-- Fixed comment composer -->
|
|
7235
7236
|
@if (!loading && !error) {
|
|
7236
7237
|
<div class="comment-composer-fixed">
|
|
7237
7238
|
<div class="comment-composer">
|
|
7238
7239
|
<!-- Edit indicator -->
|
|
7239
7240
|
@if (editingComment()) {
|
|
7240
|
-
|
|
7241
|
-
|
|
7242
|
-
|
|
7243
|
-
|
|
7244
|
-
</div>
|
|
7245
|
-
<button class="cancel-edit" (click)="cancelEdit()">
|
|
7246
|
-
<ds-icon name="remixCloseLine" size="16px" />
|
|
7247
|
-
</button>
|
|
7241
|
+
<div class="edit-indicator">
|
|
7242
|
+
<div class="edit-indicator-content">
|
|
7243
|
+
<ds-icon name="remixEditLine" size="16px" />
|
|
7244
|
+
<span class="edit-text">Redigerer kommentar</span>
|
|
7248
7245
|
</div>
|
|
7246
|
+
<button class="cancel-edit" (click)="cancelEdit()">
|
|
7247
|
+
<ds-icon name="remixCloseLine" size="16px" />
|
|
7248
|
+
</button>
|
|
7249
|
+
</div>
|
|
7249
7250
|
} @else if (replyingTo()) {
|
|
7250
|
-
|
|
7251
|
-
|
|
7252
|
-
|
|
7253
|
-
|
|
7254
|
-
|
|
7255
|
-
|
|
7256
|
-
|
|
7257
|
-
</div>
|
|
7258
|
-
<button class="cancel-reply" (click)="cancelReply()">
|
|
7259
|
-
<ds-icon name="remixCloseLine" size="16px" />
|
|
7260
|
-
</button>
|
|
7251
|
+
<!-- Reply indicator -->
|
|
7252
|
+
<div class="reply-indicator">
|
|
7253
|
+
<div class="reply-indicator-content">
|
|
7254
|
+
<ds-icon name="remixReplyLine" size="16px" />
|
|
7255
|
+
<span class="reply-to-text">
|
|
7256
|
+
Svarer til <span class="reply-author">{{ replyingTo()!.authorName }}</span>
|
|
7257
|
+
</span>
|
|
7261
7258
|
</div>
|
|
7259
|
+
<button class="cancel-reply" (click)="cancelReply()">
|
|
7260
|
+
<ds-icon name="remixCloseLine" size="16px" />
|
|
7261
|
+
</button>
|
|
7262
|
+
</div>
|
|
7262
7263
|
}
|
|
7263
|
-
|
|
7264
|
+
|
|
7264
7265
|
<div class="composer-content">
|
|
7265
|
-
<ds-avatar
|
|
7266
|
-
[initials]="currentUserInitials()"
|
|
7267
|
-
[type]="'initials'"
|
|
7268
|
-
size="md"
|
|
7269
|
-
/>
|
|
7266
|
+
<ds-avatar [initials]="currentUserInitials()" [type]="'initials'" size="md" />
|
|
7270
7267
|
<div class="composer-input-wrapper">
|
|
7271
7268
|
<!-- Mention menu -->
|
|
7272
7269
|
@if (showMentionMenu() && filteredUsers().length > 0 && !editingComment()) {
|
|
7273
|
-
|
|
7274
|
-
|
|
7275
|
-
|
|
7276
|
-
|
|
7277
|
-
|
|
7278
|
-
|
|
7279
|
-
|
|
7280
|
-
|
|
7281
|
-
|
|
7282
|
-
|
|
7283
|
-
|
|
7284
|
-
<span class="mention-user-role">{{ user.role }}</span>
|
|
7285
|
-
</div>
|
|
7286
|
-
</button>
|
|
7287
|
-
}
|
|
7288
|
-
</div>
|
|
7270
|
+
<div class="mention-menu">
|
|
7271
|
+
@for (user of filteredUsers(); track user.name) {
|
|
7272
|
+
<button class="mention-menu-item" (click)="selectMention(user.name)">
|
|
7273
|
+
<ds-avatar [initials]="user.initials" [type]="'initials'" size="sm" />
|
|
7274
|
+
<div class="mention-user-info">
|
|
7275
|
+
<span class="mention-user-name">{{ user.name }}</span>
|
|
7276
|
+
<span class="mention-user-role">{{ user.role }}</span>
|
|
7277
|
+
</div>
|
|
7278
|
+
</button>
|
|
7279
|
+
}
|
|
7280
|
+
</div>
|
|
7289
7281
|
}
|
|
7290
|
-
|
|
7282
|
+
|
|
7291
7283
|
<textarea
|
|
7292
7284
|
#commentInput
|
|
7293
7285
|
class="composer-input"
|
|
7294
|
-
[placeholder]="editingComment() ? 'Rediger din kommentar...' :
|
|
7286
|
+
[placeholder]="editingComment() ? 'Rediger din kommentar...' : replyingTo() ? 'Tilføj et svar...' : 'Tilføj et svar...'"
|
|
7295
7287
|
[(ngModel)]="commentText"
|
|
7296
7288
|
(input)="handleInput($event)"
|
|
7297
7289
|
(focus)="showKeyboard()"
|
|
7298
7290
|
(click)="showKeyboard()"
|
|
7299
|
-
rows="1"
|
|
7300
|
-
></textarea>
|
|
7291
|
+
rows="1"></textarea>
|
|
7301
7292
|
</div>
|
|
7302
7293
|
@if (commentText().trim().length > 0) {
|
|
7303
|
-
|
|
7304
|
-
icon="remixCheckLine"
|
|
7305
|
-
variant="primary"
|
|
7306
|
-
size="sm"
|
|
7307
|
-
(clicked)="submitComment()"
|
|
7308
|
-
aria-label="Send kommentar"
|
|
7309
|
-
class="send-button-fixed">
|
|
7310
|
-
</ds-icon-button>
|
|
7294
|
+
<ds-icon-button icon="remixCheckLine" variant="primary" size="sm" (clicked)="submitComment()" aria-label="Send kommentar" class="send-button-fixed"> </ds-icon-button>
|
|
7311
7295
|
}
|
|
7312
7296
|
</div>
|
|
7313
7297
|
</div>
|
|
7314
7298
|
</div>
|
|
7315
7299
|
}
|
|
7316
|
-
`, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-sm);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}\n", ":host{display:block;position:relative;height:100%;width:100%}.post-modal-content{--background: var(--color-background-neutral-primary, #ffffff)}.post-modal-wrapper{display:flex;flex-direction:column;min-height:100%;min-height:100dvh;background:var(--color-background-neutral-primary, #ffffff)}.post-modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:0 16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:72px}.post-author-info{display:flex;align-items:center;gap:12px;flex:1;min-width:0}.author-details{display:flex;flex-direction:column;min-width:0;flex:1}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.post-detail-container{display:flex;flex-direction:column;gap:16px;width:100%;max-width:640px;margin:0 auto;padding:16px 0 20px;flex:1}.post-section{width:100%;border-bottom:1px solid var(--border-color-default);padding:0 0 16px}.post-content-only{font-size:var(--font-size-sm);line-height:24px;color:var(--color-text-primary, #1a1a1a);margin-bottom:16px;padding:0 20px}.post-content-only post-media{margin-top:16px}.post-actions{display:flex;align-items:center;gap:16px;padding:0 20px}.clickable-image{cursor:pointer;transition:transform .2s ease,opacity .2s ease;border-radius:8px;display:block;width:100%;aspect-ratio:16/9;object-fit:cover}.clickable-image:active{transform:scale(.98);opacity:.9}.comments-section{display:flex;flex-direction:column;margin-left:0;margin-right:0;padding:0 20px}.comments-header{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:24px;color:var(--color-text-primary, #1a1a1a);margin:0 0 16px;padding-left:0;padding-right:0}.comments-list{display:flex;flex-direction:column}.comments-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.empty-state-image{width:96px;height:96px;margin-bottom:24px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.composer-spacer{height:calc(81px + env(safe-area-inset-bottom,0px))}.bottom-spacer{height:0px}.comment-composer-fixed{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s ease-out;max-width:100vw}.comment-composer{pointer-events:auto;background:var(--color-background-neutral-primary, #ffffff);border-top:1px solid var(--border-color-default);padding:12px 16px;padding-bottom:max(12px,env(safe-area-inset-bottom,0px));width:100%;display:flex;flex-direction:column;gap:8px;box-shadow:100px 150px 0 150px var(--color-background-neutral-primary, #ffffff)}.edit-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-brand-subtle, #f0edfe);border-radius:8px;animation:slideDown .2s ease-out}.edit-indicator-content{display:flex;align-items:center;gap:8px;color:var(--color-brand-base, #6B5FF5);flex:1;min-width:0}.edit-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:18px;color:var(--color-brand-base, #6B5FF5)}.cancel-edit{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-brand-base, #6B5FF5);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-edit:active{background:var(--color-brand-subtle, #e0dbfe)}.reply-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:8px;animation:slideDown .2s ease-out}.reply-indicator-content{display:flex;align-items:center;gap:4px;color:var(--color-text-secondary, #737373);flex:1;min-width:0}.reply-to-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reply-author{color:var(--color-brand-base, #6B5FF5);font-weight:600}.cancel-reply{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary, #737373);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-reply:active{background:var(--color-background-neutral-secondary, #f5f5f5)}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.composer-content{display:flex;align-items:flex-start;gap:12px;width:100%;position:relative}.composer-content ds-avatar{position:relative;top:6px}.composer-input-wrapper{flex:1;display:flex;align-items:flex-start;gap:8px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:24px;padding:12px 48px 12px 16px;min-height:44px;position:relative}.mention-menu{position:absolute;bottom:100%;left:0;right:0;background:var(--color-background-neutral-primary, #ffffff);border-radius:12px;box-shadow:0 4px 12px #00000026;margin-bottom:8px;max-height:200px;overflow-y:auto;z-index:10;animation:slideUp .2s ease-out}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.mention-menu-item{display:flex;align-items:center;gap:12px;padding:12px;border:none;background:none;width:100%;text-align:left;cursor:pointer;transition:background .2s ease;border-bottom:1px solid var(--border-color-default)}.mention-menu-item:last-child{border-bottom:none}.mention-menu-item:active{background:var(--color-background-neutral-secondary, #f5f5f5)}.mention-user-info{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.mention-user-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;color:var(--color-text-primary, #1a1a1a)}.mention-user-role{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373)}.composer-input{flex:1;border:none;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:20px;color:var(--color-text-primary, #1a1a1a);outline:none;resize:none;min-height:20px;max-height:120px;overflow-y:auto;padding:0;margin:0}.composer-input::placeholder{color:var(--color-text-tertiary, #a0a0a0);font-size:var(--font-size-sm)}.send-button-fixed{position:absolute;top:6px;right:6px;z-index:10;flex-shrink:0;animation:slideInFromRight .2s ease-out}.send-button-fixed::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}.composer-input-wrapper ds-icon-button{flex-shrink:0;animation:slideInFromRight .2s ease-out}.composer-input-wrapper ds-icon-button::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}@keyframes slideInFromRight{0%{opacity:0;transform:translate(20px) scale(.8)}to{opacity:1;transform:translate(0) scale(1)}}@supports (padding: env(safe-area-inset-bottom)){.post-detail-container{padding-bottom:calc(20px + env(safe-area-inset-bottom))}}.post-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.post-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsAvatarComponent, selector: "ds-avatar", inputs: ["type", "size", "initials", "src", "alt", "iconName", "iconColor"] }, { kind: "component", type: PostTextComponent, selector: "post-text" }, { kind: "component", type: PostMediaComponent, selector: "post-media" }, { kind: "component", type: ActionLikeComponent, selector: "action-like", inputs: ["active", "count"], outputs: ["activeChange", "countChange", "likeClick"] }, { kind: "component", type: ActionCommentComponent, selector: "action-comment", inputs: ["count"], outputs: ["commentClick"] }, { kind: "component", type: DsMobileCommentComponent, selector: "ds-mobile-comment", inputs: ["authorName", "authorRole", "timestamp", "content", "avatarInitials", "avatarType", "clickable", "isOwnComment", "isLiked", "likeCount"], outputs: ["isLikedChange", "likeCountChange", "commentClick", "replyClick", "editClick", "longPress"] }] });
|
|
7300
|
+
`, isInline: true, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-sm);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}\n", ":host{display:block;position:relative;height:100%;width:100%}.post-modal-content{--background: var(--color-background-neutral-primary, #ffffff)}.post-modal-wrapper{display:flex;flex-direction:column;min-height:100%;min-height:100dvh;background:var(--color-background-neutral-primary, #ffffff)}.post-modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:0 16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:72px}.post-author-info{display:flex;align-items:center;gap:12px;flex:1;min-width:0}.author-details{display:flex;flex-direction:column;min-width:0;flex:1}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.post-detail-container{display:flex;flex-direction:column;gap:16px;width:100%;max-width:640px;margin:0 auto;padding:16px 0 20px;flex:1}.post-section{width:100%;border-bottom:1px solid var(--border-color-default);padding:0 0 16px}.post-content-only{font-size:var(--font-size-sm);line-height:24px;color:var(--color-text-primary, #1a1a1a);margin-bottom:16px;padding:0 20px}.post-content-only post-media{margin-top:16px}.post-actions{display:flex;align-items:center;gap:16px;padding:0 20px}.clickable-image{cursor:pointer;transition:transform .2s ease,opacity .2s ease;border-radius:8px;display:block;width:100%;aspect-ratio:16/9;object-fit:cover}.clickable-image:active{transform:scale(.98);opacity:.9}.comments-section{display:flex;flex-direction:column;margin-left:0;margin-right:0;padding:0 20px}.comments-header{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:24px;color:var(--color-text-primary, #1a1a1a);margin:0 0 16px;padding-left:0;padding-right:0}.comments-list{display:flex;flex-direction:column}.comments-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.empty-state-image{width:96px;height:96px;margin-bottom:24px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.composer-spacer{height:calc(81px + env(safe-area-inset-bottom,0px))}.bottom-spacer{height:0px}.comment-composer-fixed{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s ease-out;max-width:100vw}.comment-composer{pointer-events:auto;background:var(--color-background-neutral-primary, #ffffff);border-top:1px solid var(--border-color-default);padding:12px 16px;padding-bottom:max(12px,env(safe-area-inset-bottom,0px));width:100%;display:flex;flex-direction:column;gap:8px;box-shadow:100px 150px 0 150px var(--color-background-neutral-primary, #ffffff)}.edit-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-brand-subtle, #f0edfe);border-radius:8px;animation:slideDown .2s ease-out}.edit-indicator-content{display:flex;align-items:center;gap:8px;color:var(--color-brand-base, #6b5ff5);flex:1;min-width:0}.edit-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:18px;color:var(--color-brand-base, #6b5ff5)}.cancel-edit{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-brand-base, #6b5ff5);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-edit:active{background:var(--color-brand-subtle, #e0dbfe)}.reply-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:8px;animation:slideDown .2s ease-out}.reply-indicator-content{display:flex;align-items:center;gap:4px;color:var(--color-text-secondary, #737373);flex:1;min-width:0}.reply-to-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reply-author{color:var(--color-brand-base, #6b5ff5);font-weight:600}.cancel-reply{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary, #737373);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-reply:active{background:var(--color-background-neutral-secondary, #f5f5f5)}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.composer-content{display:flex;align-items:flex-start;gap:12px;width:100%;position:relative}.composer-content ds-avatar{position:relative;top:6px}.composer-input-wrapper{flex:1;display:flex;align-items:flex-start;gap:8px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:24px;padding:12px 48px 12px 16px;min-height:44px;position:relative}.mention-menu{position:absolute;bottom:100%;left:0;right:0;background:var(--color-background-neutral-primary, #ffffff);border-radius:12px;box-shadow:0 4px 12px #00000026;margin-bottom:8px;max-height:200px;overflow-y:auto;z-index:10;animation:slideUp .2s ease-out}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.mention-menu-item{display:flex;align-items:center;gap:12px;padding:12px;border:none;background:none;width:100%;text-align:left;cursor:pointer;transition:background .2s ease;border-bottom:1px solid var(--border-color-default)}.mention-menu-item:last-child{border-bottom:none}.mention-menu-item:active{background:var(--color-background-neutral-secondary, #f5f5f5)}.mention-user-info{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.mention-user-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;color:var(--color-text-primary, #1a1a1a)}.mention-user-role{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373)}.composer-input{flex:1;border:none;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:20px;color:var(--color-text-primary, #1a1a1a);outline:none;resize:none;min-height:20px;max-height:120px;overflow-y:auto;padding:0;margin:0}.composer-input::placeholder{color:var(--color-text-tertiary, #a0a0a0);font-size:var(--font-size-sm)}.send-button-fixed{position:absolute;top:6px;right:6px;z-index:10;flex-shrink:0;animation:slideInFromRight .2s ease-out}.send-button-fixed::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}.composer-input-wrapper ds-icon-button{flex-shrink:0;animation:slideInFromRight .2s ease-out}.composer-input-wrapper ds-icon-button::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}@keyframes slideInFromRight{0%{opacity:0;transform:translate(20px) scale(.8)}to{opacity:1;transform:translate(0) scale(1)}}@supports (padding: env(safe-area-inset-bottom)){.post-detail-container{padding-bottom:calc(20px + env(safe-area-inset-bottom))}}.post-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.post-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }, { kind: "component", type: DsAvatarComponent, selector: "ds-avatar", inputs: ["type", "size", "initials", "src", "alt", "iconName", "iconColor"] }, { kind: "component", type: PostTextComponent, selector: "post-text" }, { kind: "component", type: PostMediaComponent, selector: "post-media" }, { kind: "component", type: ActionLikeComponent, selector: "action-like", inputs: ["active", "count"], outputs: ["activeChange", "countChange", "likeClick"] }, { kind: "component", type: ActionCommentComponent, selector: "action-comment", inputs: ["count"], outputs: ["commentClick"] }, { kind: "component", type: DsMobileCommentComponent, selector: "ds-mobile-comment", inputs: ["authorName", "authorRole", "timestamp", "content", "avatarInitials", "avatarType", "clickable", "isOwnComment", "isLiked", "likeCount"], outputs: ["isLikedChange", "likeCountChange", "commentClick", "replyClick", "editClick", "longPress"] }] });
|
|
7317
7301
|
}
|
|
7318
7302
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: DsMobilePostDetailModalComponent, decorators: [{
|
|
7319
7303
|
type: Component,
|
|
@@ -7328,7 +7312,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
7328
7312
|
PostMediaComponent,
|
|
7329
7313
|
ActionLikeComponent,
|
|
7330
7314
|
ActionCommentComponent,
|
|
7331
|
-
DsMobileCommentComponent
|
|
7315
|
+
DsMobileCommentComponent,
|
|
7332
7316
|
], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: `
|
|
7333
7317
|
<ion-content [fullscreen]="true" [scrollY]="true" class="post-modal-content">
|
|
7334
7318
|
<div class="post-modal-wrapper">
|
|
@@ -7337,12 +7321,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
7337
7321
|
<div class="header-content">
|
|
7338
7322
|
<!-- Post author info -->
|
|
7339
7323
|
<div class="post-author-info">
|
|
7340
|
-
<ds-avatar
|
|
7341
|
-
[initials]="post().avatarInitials || ''"
|
|
7342
|
-
[type]="post().avatarType || 'initials'"
|
|
7343
|
-
[src]="post().avatarSrc || ''"
|
|
7344
|
-
size="md"
|
|
7345
|
-
/>
|
|
7324
|
+
<ds-avatar [initials]="post().avatarInitials || ''" [type]="post().avatarType || 'initials'" [src]="post().avatarSrc || ''" size="md" />
|
|
7346
7325
|
<div class="author-details">
|
|
7347
7326
|
<div class="author-name">{{ post().authorName }}</div>
|
|
7348
7327
|
<div class="author-meta">
|
|
@@ -7352,34 +7331,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
7352
7331
|
</div>
|
|
7353
7332
|
</div>
|
|
7354
7333
|
</div>
|
|
7355
|
-
|
|
7334
|
+
|
|
7356
7335
|
<!-- Close button -->
|
|
7357
|
-
<ds-icon-button
|
|
7358
|
-
icon="remixCloseLine"
|
|
7359
|
-
variant="secondary"
|
|
7360
|
-
size="lg"
|
|
7361
|
-
(click)="close()"
|
|
7362
|
-
class="close-button"
|
|
7363
|
-
aria-label="Luk opslag">
|
|
7364
|
-
</ds-icon-button>
|
|
7336
|
+
<ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (click)="close()" class="close-button" aria-label="Luk opslag"> </ds-icon-button>
|
|
7365
7337
|
</div>
|
|
7366
7338
|
</div>
|
|
7367
7339
|
|
|
7368
7340
|
<!-- Post content -->
|
|
7369
7341
|
<div class="post-detail-container">
|
|
7370
7342
|
@if (loading) {
|
|
7371
|
-
|
|
7372
|
-
|
|
7373
|
-
|
|
7374
|
-
|
|
7375
|
-
|
|
7343
|
+
<!-- Loading State -->
|
|
7344
|
+
<div class="post-loading-state">
|
|
7345
|
+
<div class="loading-spinner"></div>
|
|
7346
|
+
<p class="loading-text">Loading post...</p>
|
|
7347
|
+
</div>
|
|
7376
7348
|
} @else if (error) {
|
|
7377
|
-
|
|
7378
|
-
|
|
7379
|
-
|
|
7380
|
-
|
|
7381
|
-
|
|
7382
|
-
|
|
7349
|
+
<!-- Error State -->
|
|
7350
|
+
<div class="post-error-state">
|
|
7351
|
+
<ds-icon name="remixErrorWarningLine" size="48px" [style.color]="'var(--color-destructive-base)'" />
|
|
7352
|
+
<h3 class="error-state-title">Error loading post</h3>
|
|
7353
|
+
<p class="error-state-description">{{ error }}</p>
|
|
7354
|
+
</div>
|
|
7383
7355
|
} @else {
|
|
7384
7356
|
<!-- Post Section -->
|
|
7385
7357
|
<div class="post-section">
|
|
@@ -7388,156 +7360,132 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
7388
7360
|
<div [innerHTML]="post().content"></div>
|
|
7389
7361
|
</post-text>
|
|
7390
7362
|
@if (post().imageSrc) {
|
|
7391
|
-
|
|
7392
|
-
|
|
7393
|
-
|
|
7394
|
-
[alt]="post().imageAlt || 'Post image'"
|
|
7395
|
-
class="clickable-image"
|
|
7396
|
-
(click)="openImageLightbox()"
|
|
7397
|
-
/>
|
|
7398
|
-
</post-media>
|
|
7363
|
+
<post-media>
|
|
7364
|
+
<img [src]="post().imageSrc" [alt]="post().imageAlt || 'Post image'" class="clickable-image" (click)="openImageLightbox()" />
|
|
7365
|
+
</post-media>
|
|
7399
7366
|
}
|
|
7400
7367
|
</div>
|
|
7401
|
-
|
|
7368
|
+
|
|
7402
7369
|
<!-- Post actions -->
|
|
7403
7370
|
<div class="post-actions">
|
|
7404
|
-
<action-like
|
|
7405
|
-
|
|
7406
|
-
[count]="post().likeCount || 0" />
|
|
7407
|
-
<action-comment
|
|
7408
|
-
[count]="post().commentCount || 0"
|
|
7409
|
-
(commentClick)="focusCommentInput()" />
|
|
7371
|
+
<action-like [active]="post().isLiked || false" [count]="post().likeCount || 0" />
|
|
7372
|
+
<action-comment [count]="post().commentCount || 0" (commentClick)="focusCommentInput()" />
|
|
7410
7373
|
</div>
|
|
7411
7374
|
</div>
|
|
7412
|
-
|
|
7413
|
-
|
|
7414
|
-
|
|
7415
|
-
|
|
7375
|
+
|
|
7376
|
+
<!-- Comments Section -->
|
|
7377
|
+
<div class="comments-section">
|
|
7378
|
+
@if (post().comments && post().comments!.length > 0) {
|
|
7416
7379
|
<h2 class="comments-header">{{ post().comments!.length }} {{ post().comments!.length === 1 ? 'reply' : 'replies' }}</h2>
|
|
7417
|
-
|
|
7380
|
+
|
|
7418
7381
|
<div class="comments-list">
|
|
7419
7382
|
@for (comment of post().comments!; track comment.authorName + comment.timestamp) {
|
|
7420
|
-
|
|
7421
|
-
|
|
7422
|
-
|
|
7423
|
-
|
|
7424
|
-
|
|
7425
|
-
|
|
7426
|
-
|
|
7427
|
-
|
|
7428
|
-
|
|
7429
|
-
|
|
7430
|
-
|
|
7431
|
-
|
|
7432
|
-
|
|
7383
|
+
<ds-mobile-comment
|
|
7384
|
+
[authorName]="comment.authorName"
|
|
7385
|
+
[authorRole]="comment.authorRole"
|
|
7386
|
+
[timestamp]="comment.timestamp"
|
|
7387
|
+
[avatarInitials]="comment.avatarInitials"
|
|
7388
|
+
[content]="comment.content"
|
|
7389
|
+
[isLiked]="comment.isLiked || false"
|
|
7390
|
+
[likeCount]="comment.likeCount || 0"
|
|
7391
|
+
[clickable]="true"
|
|
7392
|
+
[isOwnComment]="comment.isOwnComment || false"
|
|
7393
|
+
(replyClick)="handleReply(comment.authorName, comment.content)"
|
|
7394
|
+
(editClick)="handleEditComment(comment.authorName, comment.content, comment.timestamp)"
|
|
7395
|
+
(longPress)="handleCommentLongPress(comment.authorName, comment.content, comment.isOwnComment || false)" />
|
|
7433
7396
|
}
|
|
7434
7397
|
</div>
|
|
7435
|
-
|
|
7398
|
+
} @else {
|
|
7436
7399
|
<!-- Empty State -->
|
|
7437
7400
|
<div class="comments-empty-state">
|
|
7438
|
-
<img
|
|
7439
|
-
src="/Assets/Empty%20state-chat.png"
|
|
7440
|
-
alt="Ingen kommentarer endnu"
|
|
7441
|
-
class="empty-state-image"
|
|
7442
|
-
/>
|
|
7401
|
+
<img src="/Assets/Empty%20state-chat.png" alt="Ingen kommentarer endnu" class="empty-state-image" />
|
|
7443
7402
|
<h3 class="empty-state-title">Ingen svar endnu</h3>
|
|
7444
7403
|
<p class="empty-state-description">Vær den første til at svare på dette opslag</p>
|
|
7445
7404
|
</div>
|
|
7405
|
+
}
|
|
7406
|
+
|
|
7407
|
+
<!-- Bottom spacer for fixed composer -->
|
|
7408
|
+
<div class="composer-spacer"></div>
|
|
7409
|
+
</div>
|
|
7446
7410
|
}
|
|
7447
|
-
|
|
7448
|
-
<!-- Bottom spacer for fixed composer -->
|
|
7449
|
-
<div class="composer-spacer"></div>
|
|
7450
|
-
</div>
|
|
7451
|
-
}
|
|
7452
7411
|
</div>
|
|
7453
7412
|
</div>
|
|
7454
7413
|
</ion-content>
|
|
7455
|
-
|
|
7414
|
+
|
|
7456
7415
|
<!-- Fixed comment composer -->
|
|
7457
7416
|
@if (!loading && !error) {
|
|
7458
7417
|
<div class="comment-composer-fixed">
|
|
7459
7418
|
<div class="comment-composer">
|
|
7460
7419
|
<!-- Edit indicator -->
|
|
7461
7420
|
@if (editingComment()) {
|
|
7462
|
-
|
|
7463
|
-
|
|
7464
|
-
|
|
7465
|
-
|
|
7466
|
-
</div>
|
|
7467
|
-
<button class="cancel-edit" (click)="cancelEdit()">
|
|
7468
|
-
<ds-icon name="remixCloseLine" size="16px" />
|
|
7469
|
-
</button>
|
|
7421
|
+
<div class="edit-indicator">
|
|
7422
|
+
<div class="edit-indicator-content">
|
|
7423
|
+
<ds-icon name="remixEditLine" size="16px" />
|
|
7424
|
+
<span class="edit-text">Redigerer kommentar</span>
|
|
7470
7425
|
</div>
|
|
7426
|
+
<button class="cancel-edit" (click)="cancelEdit()">
|
|
7427
|
+
<ds-icon name="remixCloseLine" size="16px" />
|
|
7428
|
+
</button>
|
|
7429
|
+
</div>
|
|
7471
7430
|
} @else if (replyingTo()) {
|
|
7472
|
-
|
|
7473
|
-
|
|
7474
|
-
|
|
7475
|
-
|
|
7476
|
-
|
|
7477
|
-
|
|
7478
|
-
|
|
7479
|
-
</div>
|
|
7480
|
-
<button class="cancel-reply" (click)="cancelReply()">
|
|
7481
|
-
<ds-icon name="remixCloseLine" size="16px" />
|
|
7482
|
-
</button>
|
|
7431
|
+
<!-- Reply indicator -->
|
|
7432
|
+
<div class="reply-indicator">
|
|
7433
|
+
<div class="reply-indicator-content">
|
|
7434
|
+
<ds-icon name="remixReplyLine" size="16px" />
|
|
7435
|
+
<span class="reply-to-text">
|
|
7436
|
+
Svarer til <span class="reply-author">{{ replyingTo()!.authorName }}</span>
|
|
7437
|
+
</span>
|
|
7483
7438
|
</div>
|
|
7439
|
+
<button class="cancel-reply" (click)="cancelReply()">
|
|
7440
|
+
<ds-icon name="remixCloseLine" size="16px" />
|
|
7441
|
+
</button>
|
|
7442
|
+
</div>
|
|
7484
7443
|
}
|
|
7485
|
-
|
|
7444
|
+
|
|
7486
7445
|
<div class="composer-content">
|
|
7487
|
-
<ds-avatar
|
|
7488
|
-
[initials]="currentUserInitials()"
|
|
7489
|
-
[type]="'initials'"
|
|
7490
|
-
size="md"
|
|
7491
|
-
/>
|
|
7446
|
+
<ds-avatar [initials]="currentUserInitials()" [type]="'initials'" size="md" />
|
|
7492
7447
|
<div class="composer-input-wrapper">
|
|
7493
7448
|
<!-- Mention menu -->
|
|
7494
7449
|
@if (showMentionMenu() && filteredUsers().length > 0 && !editingComment()) {
|
|
7495
|
-
|
|
7496
|
-
|
|
7497
|
-
|
|
7498
|
-
|
|
7499
|
-
|
|
7500
|
-
|
|
7501
|
-
|
|
7502
|
-
|
|
7503
|
-
|
|
7504
|
-
|
|
7505
|
-
|
|
7506
|
-
<span class="mention-user-role">{{ user.role }}</span>
|
|
7507
|
-
</div>
|
|
7508
|
-
</button>
|
|
7509
|
-
}
|
|
7510
|
-
</div>
|
|
7450
|
+
<div class="mention-menu">
|
|
7451
|
+
@for (user of filteredUsers(); track user.name) {
|
|
7452
|
+
<button class="mention-menu-item" (click)="selectMention(user.name)">
|
|
7453
|
+
<ds-avatar [initials]="user.initials" [type]="'initials'" size="sm" />
|
|
7454
|
+
<div class="mention-user-info">
|
|
7455
|
+
<span class="mention-user-name">{{ user.name }}</span>
|
|
7456
|
+
<span class="mention-user-role">{{ user.role }}</span>
|
|
7457
|
+
</div>
|
|
7458
|
+
</button>
|
|
7459
|
+
}
|
|
7460
|
+
</div>
|
|
7511
7461
|
}
|
|
7512
|
-
|
|
7462
|
+
|
|
7513
7463
|
<textarea
|
|
7514
7464
|
#commentInput
|
|
7515
7465
|
class="composer-input"
|
|
7516
|
-
[placeholder]="editingComment() ? 'Rediger din kommentar...' :
|
|
7466
|
+
[placeholder]="editingComment() ? 'Rediger din kommentar...' : replyingTo() ? 'Tilføj et svar...' : 'Tilføj et svar...'"
|
|
7517
7467
|
[(ngModel)]="commentText"
|
|
7518
7468
|
(input)="handleInput($event)"
|
|
7519
7469
|
(focus)="showKeyboard()"
|
|
7520
7470
|
(click)="showKeyboard()"
|
|
7521
|
-
rows="1"
|
|
7522
|
-
></textarea>
|
|
7471
|
+
rows="1"></textarea>
|
|
7523
7472
|
</div>
|
|
7524
7473
|
@if (commentText().trim().length > 0) {
|
|
7525
|
-
|
|
7526
|
-
icon="remixCheckLine"
|
|
7527
|
-
variant="primary"
|
|
7528
|
-
size="sm"
|
|
7529
|
-
(clicked)="submitComment()"
|
|
7530
|
-
aria-label="Send kommentar"
|
|
7531
|
-
class="send-button-fixed">
|
|
7532
|
-
</ds-icon-button>
|
|
7474
|
+
<ds-icon-button icon="remixCheckLine" variant="primary" size="sm" (clicked)="submitComment()" aria-label="Send kommentar" class="send-button-fixed"> </ds-icon-button>
|
|
7533
7475
|
}
|
|
7534
7476
|
</div>
|
|
7535
7477
|
</div>
|
|
7536
7478
|
</div>
|
|
7537
7479
|
}
|
|
7538
|
-
`, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-sm);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}\n", ":host{display:block;position:relative;height:100%;width:100%}.post-modal-content{--background: var(--color-background-neutral-primary, #ffffff)}.post-modal-wrapper{display:flex;flex-direction:column;min-height:100%;min-height:100dvh;background:var(--color-background-neutral-primary, #ffffff)}.post-modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:0 16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:72px}.post-author-info{display:flex;align-items:center;gap:12px;flex:1;min-width:0}.author-details{display:flex;flex-direction:column;min-width:0;flex:1}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.post-detail-container{display:flex;flex-direction:column;gap:16px;width:100%;max-width:640px;margin:0 auto;padding:16px 0 20px;flex:1}.post-section{width:100%;border-bottom:1px solid var(--border-color-default);padding:0 0 16px}.post-content-only{font-size:var(--font-size-sm);line-height:24px;color:var(--color-text-primary, #1a1a1a);margin-bottom:16px;padding:0 20px}.post-content-only post-media{margin-top:16px}.post-actions{display:flex;align-items:center;gap:16px;padding:0 20px}.clickable-image{cursor:pointer;transition:transform .2s ease,opacity .2s ease;border-radius:8px;display:block;width:100%;aspect-ratio:16/9;object-fit:cover}.clickable-image:active{transform:scale(.98);opacity:.9}.comments-section{display:flex;flex-direction:column;margin-left:0;margin-right:0;padding:0 20px}.comments-header{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:24px;color:var(--color-text-primary, #1a1a1a);margin:0 0 16px;padding-left:0;padding-right:0}.comments-list{display:flex;flex-direction:column}.comments-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.empty-state-image{width:96px;height:96px;margin-bottom:24px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.composer-spacer{height:calc(81px + env(safe-area-inset-bottom,0px))}.bottom-spacer{height:0px}.comment-composer-fixed{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s ease-out;max-width:100vw}.comment-composer{pointer-events:auto;background:var(--color-background-neutral-primary, #ffffff);border-top:1px solid var(--border-color-default);padding:12px 16px;padding-bottom:max(12px,env(safe-area-inset-bottom,0px));width:100%;display:flex;flex-direction:column;gap:8px;box-shadow:100px 150px 0 150px var(--color-background-neutral-primary, #ffffff)}.edit-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-brand-subtle, #f0edfe);border-radius:8px;animation:slideDown .2s ease-out}.edit-indicator-content{display:flex;align-items:center;gap:8px;color:var(--color-brand-base, #6B5FF5);flex:1;min-width:0}.edit-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:18px;color:var(--color-brand-base, #6B5FF5)}.cancel-edit{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-brand-base, #6B5FF5);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-edit:active{background:var(--color-brand-subtle, #e0dbfe)}.reply-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:8px;animation:slideDown .2s ease-out}.reply-indicator-content{display:flex;align-items:center;gap:4px;color:var(--color-text-secondary, #737373);flex:1;min-width:0}.reply-to-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reply-author{color:var(--color-brand-base, #6B5FF5);font-weight:600}.cancel-reply{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary, #737373);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-reply:active{background:var(--color-background-neutral-secondary, #f5f5f5)}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.composer-content{display:flex;align-items:flex-start;gap:12px;width:100%;position:relative}.composer-content ds-avatar{position:relative;top:6px}.composer-input-wrapper{flex:1;display:flex;align-items:flex-start;gap:8px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:24px;padding:12px 48px 12px 16px;min-height:44px;position:relative}.mention-menu{position:absolute;bottom:100%;left:0;right:0;background:var(--color-background-neutral-primary, #ffffff);border-radius:12px;box-shadow:0 4px 12px #00000026;margin-bottom:8px;max-height:200px;overflow-y:auto;z-index:10;animation:slideUp .2s ease-out}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.mention-menu-item{display:flex;align-items:center;gap:12px;padding:12px;border:none;background:none;width:100%;text-align:left;cursor:pointer;transition:background .2s ease;border-bottom:1px solid var(--border-color-default)}.mention-menu-item:last-child{border-bottom:none}.mention-menu-item:active{background:var(--color-background-neutral-secondary, #f5f5f5)}.mention-user-info{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.mention-user-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;color:var(--color-text-primary, #1a1a1a)}.mention-user-role{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373)}.composer-input{flex:1;border:none;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:20px;color:var(--color-text-primary, #1a1a1a);outline:none;resize:none;min-height:20px;max-height:120px;overflow-y:auto;padding:0;margin:0}.composer-input::placeholder{color:var(--color-text-tertiary, #a0a0a0);font-size:var(--font-size-sm)}.send-button-fixed{position:absolute;top:6px;right:6px;z-index:10;flex-shrink:0;animation:slideInFromRight .2s ease-out}.send-button-fixed::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}.composer-input-wrapper ds-icon-button{flex-shrink:0;animation:slideInFromRight .2s ease-out}.composer-input-wrapper ds-icon-button::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}@keyframes slideInFromRight{0%{opacity:0;transform:translate(20px) scale(.8)}to{opacity:1;transform:translate(0) scale(1)}}@supports (padding: env(safe-area-inset-bottom)){.post-detail-container{padding-bottom:calc(20px + env(safe-area-inset-bottom))}}.post-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.post-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}\n"] }]
|
|
7480
|
+
`, styles: [".author-details{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.author-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px;color:var(--color-text-primary, #1a1a1a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-meta{font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;color:var(--color-text-tertiary, #737373);display:flex;align-items:center;gap:6px}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.lightbox-context .author-name,.overlay-context .author-name{color:#fffffff2}.lightbox-context .author-meta,.overlay-context .author-meta{color:#ffffffb3}.lightbox-context .author-meta .separator,.overlay-context .author-meta .separator{color:#ffffff80}.section-headline{font-size:var(--font-size-sm);font-weight:600;color:var(--text-color-default-primary);padding:16px 0;margin:0;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--text-color-default-primary, #202227);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--text-color-default-secondary, #545B66);margin:0}\n", ":host{display:block;position:relative;height:100%;width:100%}.post-modal-content{--background: var(--color-background-neutral-primary, #ffffff)}.post-modal-wrapper{display:flex;flex-direction:column;min-height:100%;min-height:100dvh;background:var(--color-background-neutral-primary, #ffffff)}.post-modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:0 16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:72px}.post-author-info{display:flex;align-items:center;gap:12px;flex:1;min-width:0}.author-details{display:flex;flex-direction:column;min-width:0;flex:1}.author-meta .separator{color:var(--color-text-tertiary, #a0a0a0)}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.post-detail-container{display:flex;flex-direction:column;gap:16px;width:100%;max-width:640px;margin:0 auto;padding:16px 0 20px;flex:1}.post-section{width:100%;border-bottom:1px solid var(--border-color-default);padding:0 0 16px}.post-content-only{font-size:var(--font-size-sm);line-height:24px;color:var(--color-text-primary, #1a1a1a);margin-bottom:16px;padding:0 20px}.post-content-only post-media{margin-top:16px}.post-actions{display:flex;align-items:center;gap:16px;padding:0 20px}.clickable-image{cursor:pointer;transition:transform .2s ease,opacity .2s ease;border-radius:8px;display:block;width:100%;aspect-ratio:16/9;object-fit:cover}.clickable-image:active{transform:scale(.98);opacity:.9}.comments-section{display:flex;flex-direction:column;margin-left:0;margin-right:0;padding:0 20px}.comments-header{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:24px;color:var(--color-text-primary, #1a1a1a);margin:0 0 16px;padding-left:0;padding-right:0}.comments-list{display:flex;flex-direction:column}.comments-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.empty-state-image{width:96px;height:96px;margin-bottom:24px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0 0 8px}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.composer-spacer{height:calc(81px + env(safe-area-inset-bottom,0px))}.bottom-spacer{height:0px}.comment-composer-fixed{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s ease-out;max-width:100vw}.comment-composer{pointer-events:auto;background:var(--color-background-neutral-primary, #ffffff);border-top:1px solid var(--border-color-default);padding:12px 16px;padding-bottom:max(12px,env(safe-area-inset-bottom,0px));width:100%;display:flex;flex-direction:column;gap:8px;box-shadow:100px 150px 0 150px var(--color-background-neutral-primary, #ffffff)}.edit-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-brand-subtle, #f0edfe);border-radius:8px;animation:slideDown .2s ease-out}.edit-indicator-content{display:flex;align-items:center;gap:8px;color:var(--color-brand-base, #6b5ff5);flex:1;min-width:0}.edit-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:18px;color:var(--color-brand-base, #6b5ff5)}.cancel-edit{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-brand-base, #6b5ff5);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-edit:active{background:var(--color-brand-subtle, #e0dbfe)}.reply-indicator{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:8px;animation:slideDown .2s ease-out}.reply-indicator-content{display:flex;align-items:center;gap:4px;color:var(--color-text-secondary, #737373);flex:1;min-width:0}.reply-to-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reply-author{color:var(--color-brand-base, #6b5ff5);font-weight:600}.cancel-reply{background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary, #737373);border-radius:4px;transition:background .2s ease;flex-shrink:0}.cancel-reply:active{background:var(--color-background-neutral-secondary, #f5f5f5)}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.composer-content{display:flex;align-items:flex-start;gap:12px;width:100%;position:relative}.composer-content ds-avatar{position:relative;top:6px}.composer-input-wrapper{flex:1;display:flex;align-items:flex-start;gap:8px;background:var(--color-background-neutral-secondary, #f5f5f5);border-radius:24px;padding:12px 48px 12px 16px;min-height:44px;position:relative}.mention-menu{position:absolute;bottom:100%;left:0;right:0;background:var(--color-background-neutral-primary, #ffffff);border-radius:12px;box-shadow:0 4px 12px #00000026;margin-bottom:8px;max-height:200px;overflow-y:auto;z-index:10;animation:slideUp .2s ease-out}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.mention-menu-item{display:flex;align-items:center;gap:12px;padding:12px;border:none;background:none;width:100%;text-align:left;cursor:pointer;transition:background .2s ease;border-bottom:1px solid var(--border-color-default)}.mention-menu-item:last-child{border-bottom:none}.mention-menu-item:active{background:var(--color-background-neutral-secondary, #f5f5f5)}.mention-user-info{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.mention-user-name{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:20px;color:var(--color-text-primary, #1a1a1a)}.mention-user-role{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:18px;color:var(--color-text-secondary, #737373)}.composer-input{flex:1;border:none;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:20px;color:var(--color-text-primary, #1a1a1a);outline:none;resize:none;min-height:20px;max-height:120px;overflow-y:auto;padding:0;margin:0}.composer-input::placeholder{color:var(--color-text-tertiary, #a0a0a0);font-size:var(--font-size-sm)}.send-button-fixed{position:absolute;top:6px;right:6px;z-index:10;flex-shrink:0;animation:slideInFromRight .2s ease-out}.send-button-fixed::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}.composer-input-wrapper ds-icon-button{flex-shrink:0;animation:slideInFromRight .2s ease-out}.composer-input-wrapper ds-icon-button::ng-deep button{width:32px!important;height:32px!important;min-width:32px!important;min-height:32px!important;padding:0!important;border-radius:50%!important}@keyframes slideInFromRight{0%{opacity:0;transform:translate(20px) scale(.8)}to{opacity:1;transform:translate(0) scale(1)}}@supports (padding: env(safe-area-inset-bottom)){.post-detail-container{padding-bottom:calc(20px + env(safe-area-inset-bottom))}}.post-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.post-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}\n"] }]
|
|
7539
7481
|
}], ctorParameters: () => [{ type: i1.ModalController }, { type: DsMobileLightboxService }, { type: DsMobileBottomSheetService }], propDecorators: { postData: [{
|
|
7540
7482
|
type: Input
|
|
7483
|
+
}], currentUserName: [{
|
|
7484
|
+
type: Input
|
|
7485
|
+
}], currentUserInitialsInput: [{
|
|
7486
|
+
type: Input
|
|
7487
|
+
}], onSubmitComment: [{
|
|
7488
|
+
type: Input
|
|
7541
7489
|
}], loading: [{
|
|
7542
7490
|
type: Input
|
|
7543
7491
|
}], error: [{
|
|
@@ -7604,12 +7552,16 @@ class DsMobilePostDetailModalService {
|
|
|
7604
7552
|
*/
|
|
7605
7553
|
async open(postData, options) {
|
|
7606
7554
|
console.log('[PostDetailModal] Opening with data:', postData);
|
|
7555
|
+
console.log('[PostDetailModal] options.onSubmitComment =', options?.onSubmitComment);
|
|
7607
7556
|
const modal = await this.modalController.create({
|
|
7608
7557
|
component: DsMobilePostDetailModalComponent,
|
|
7609
7558
|
componentProps: {
|
|
7610
7559
|
postData: postData,
|
|
7611
7560
|
loading: options?.loading ?? false,
|
|
7612
|
-
error: options?.error
|
|
7561
|
+
error: options?.error,
|
|
7562
|
+
onSubmitComment: options?.onSubmitComment,
|
|
7563
|
+
currentUserName: options?.currentUserName ?? '',
|
|
7564
|
+
currentUserInitials: options?.currentUserInitials ?? '',
|
|
7613
7565
|
},
|
|
7614
7566
|
cssClass: 'ds-post-detail-modal',
|
|
7615
7567
|
mode: 'ios',
|
|
@@ -7620,7 +7572,7 @@ class DsMobilePostDetailModalService {
|
|
|
7620
7572
|
keyboardClose: true,
|
|
7621
7573
|
// Control the presenting element animation
|
|
7622
7574
|
enterAnimation: undefined, // Use default
|
|
7623
|
-
leaveAnimation: undefined // Use default
|
|
7575
|
+
leaveAnimation: undefined, // Use default
|
|
7624
7576
|
});
|
|
7625
7577
|
console.log('[PostDetailModal] Modal created, presenting...');
|
|
7626
7578
|
await modal.present();
|
|
@@ -7649,7 +7601,7 @@ class DsMobilePostDetailModalService {
|
|
|
7649
7601
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: DsMobilePostDetailModalService, decorators: [{
|
|
7650
7602
|
type: Injectable,
|
|
7651
7603
|
args: [{
|
|
7652
|
-
providedIn: 'root'
|
|
7604
|
+
providedIn: 'root',
|
|
7653
7605
|
}]
|
|
7654
7606
|
}], ctorParameters: () => [{ type: i1.ModalController }] });
|
|
7655
7607
|
|