@propbinder/mobile-design 0.2.86 → 0.2.87

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.
@@ -17,7 +17,7 @@ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
17
17
  import { Capacitor } from '@capacitor/core';
18
18
  import { Camera, CameraResultType, CameraSource } from '@capacitor/camera';
19
19
  import { FilePicker } from '@capawesome/capacitor-file-picker';
20
- import { Subject } from 'rxjs';
20
+ import { Subject, isObservable } from 'rxjs';
21
21
  import { createAnimation } from '@ionic/core';
22
22
  import { Share } from '@capacitor/share';
23
23
  import Swiper from 'swiper';
@@ -14582,7 +14582,7 @@ class DsMobileLightboxImageComponent {
14582
14582
  />
14583
14583
  </div>
14584
14584
  </div>
14585
- `, 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-base);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}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}:host{display:block;position:fixed;inset:0;width:100vw;height:100vh;z-index:10000}.lightbox-overlay{position:fixed;inset:0;width:100vw;height:100vh;background:#000000fa;z-index:10000;display:flex;flex-direction:column;touch-action:none;animation:fadeIn .2s ease-out}.lightbox-overlay.zoomed{overflow:hidden}.lightbox-content{display:block;height:100vh;width:100vw;position:absolute;inset:0}.lightbox-content::part(scroll){display:flex;flex-direction:column;height:100%;overflow:hidden}.lightbox-wrapper{position:absolute;inset:0;display:flex;flex-direction:column;width:100%;height:100%}.lightbox-content.zoomed{overflow:hidden}.lightbox-header{position:fixed;top:0;left:0;right:0;z-index:1000;padding:0 16px;background:linear-gradient(to bottom,rgba(0,0,0,.8) 0%,rgba(0,0,0,.4) 80%,transparent 100%);pointer-events:none}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;pointer-events:auto}.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-name{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px}.author-meta{color:#ffffffb3;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;display:flex;align-items:center;gap:6px}.author-meta .separator{color:#ffffff80}.close-button,.share-button{pointer-events:auto;flex-shrink:0;border-radius:50%}.close-button::ng-deep button,.share-button::ng-deep button{color:#fff!important;background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;border-radius:50%!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;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}.close-button::ng-deep button:hover,.share-button::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.close-button::ng-deep button:active,.share-button::ng-deep button:active{background:#fff3!important;transform:scale(.98)}.close-button::ng-deep svg,.share-button::ng-deep svg{color:#fff!important;fill:#fff!important}.swiper-container{position:absolute;inset:0;width:100%;height:100%;z-index:1}.swiper-wrapper{width:100%;height:100%}.swiper-slide{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.image-zoom-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.lightbox-image{max-width:min(640px,100%);max-height:100%;width:auto;height:auto;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none;transition:transform .3s ease-out;transform-origin:center center}.lightbox-overlay.zoomed .swiper-container{touch-action:none}.loading-spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10}.loading-spinner ion-spinner{--color: rgba(255, 255, 255, .8);width:48px;height:48px}.error-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;text-align:center;color:#fffc;font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:500;padding:20px;background:#00000080;border-radius:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.lightbox-bottom-section{position:fixed;bottom:0;left:0;right:0;z-index:100;display:flex;flex-direction:column;background:linear-gradient(to top,rgba(0,0,0,.8) 0%,rgba(0,0,0,.6) 50%,rgba(0,0,0,.4) 75%,transparent 100%);pointer-events:none}.lightbox-controls{display:flex;align-items:center;justify-content:center;gap:24px;padding:16px 20px 12px;pointer-events:none}.nav-button,.counter{pointer-events:auto}.nav-button{background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;padding:0;margin:0;outline:none}.nav-button:hover:not(:disabled){background:#fff3;transform:scale(1.05)}.nav-button:active:not(:disabled){transform:scale(.95)}.nav-button:disabled{opacity:.3;cursor:not-allowed}.nav-button svg{width:24px;height:24px}.counter{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:1;padding:10px 16px;background:#00000080;border-radius:100px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);white-space:nowrap}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-bottom-section{padding-bottom:env(safe-area-inset-bottom)}}.lightbox-footer{display:flex;padding:12px 20px 20px;pointer-events:none}.footer-actions{display:flex;align-items:center;justify-content:space-between;gap:16px;pointer-events:auto}.action-buttons-left{display:flex;align-items:center;gap:16px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-with-count::ng-deep button,.action-button-share::ng-deep button{background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;color:#fff!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease}.action-button-like::ng-deep button:hover,.action-button-comment::ng-deep button:hover,.action-button-with-count::ng-deep button:hover,.action-button-share::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.action-button-like::ng-deep button:active,.action-button-comment::ng-deep button:active,.action-button-with-count::ng-deep button:active,.action-button-share::ng-deep button:active{transform:scale(.98)}.action-button-like::ng-deep button svg,.action-button-comment::ng-deep button svg,.action-button-with-count::ng-deep button svg,.action-button-share::ng-deep button svg,.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon,.action-button-like::ng-deep button .btn__content,.action-button-comment::ng-deep button .btn__content,.action-button-with-count::ng-deep button .btn__content{color:#fff!important;fill:#fff!important}.action-button-like::ng-deep button .btn__icon svg,.action-button-comment::ng-deep button .btn__icon svg,.action-button-with-count::ng-deep button .btn__icon svg,.action-button-share::ng-deep button .btn__icon svg{color:#fff!important;fill:#fff!important;display:block!important;opacity:1!important;visibility:visible!important;width:20px!important;height:20px!important}.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon{display:flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.action-button-like[data-liked=true]::ng-deep button svg{fill:#f91880!important;color:#f91880!important}.action-button-like[data-liked=true]::ng-deep button{border-color:#f918804d!important}.action-button-like,.action-button-comment,.action-button-share{flex-shrink:0;border-radius:50%}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-share::ng-deep button{border-radius:50%!important;width:44px!important;height:44px!important;min-width:44px!important;min-height:44px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}@media (min-width: 768px){.lightbox-header{padding:24px}.close-button{width:48px;height:48px}.lightbox-controls{padding:20px 24px 16px}.nav-button{width:48px;height:48px}.counter{font-size:var(--font-size-base);padding:12px 20px}.lightbox-footer{padding:16px 24px 24px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button{height:48px;padding:0 20px}.action-button-share::ng-deep button{width:48px!important;height:48px!important;min-width:48px!important;min-height:48px!important}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes zoomIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.image-wrapper,.nav-button,.lightbox-caption{transition:none}}.nav-button:focus-visible{outline:2px solid white;outline-offset:2px}\n"], dependencies: [{ kind: "component", type: DsMobileGlassSpinnerComponent, selector: "ds-mobile-glass-spinner", inputs: ["spinnerSize", "borderRadius"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsMobileLightboxHeaderComponent, selector: "ds-mobile-lightbox-header", inputs: ["author", "showDownload"], outputs: ["closeClick", "shareClick", "downloadClick"] }, { kind: "component", type: DsMobileLightboxFooterComponent, selector: "ds-mobile-lightbox-footer", inputs: ["showNavigation", "currentIndex", "totalImages", "showActions", "isLiked", "likeCount", "commentCount"], outputs: ["prevClick", "nextClick", "likeClick", "commentClick"] }] });
14585
+ `, 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-base);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}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}:host{display:block;position:fixed;inset:0;width:100vw;height:100vh;z-index:10000}.lightbox-overlay{position:fixed;inset:0;width:100vw;height:100vh;background:#000000fa;z-index:10000;display:flex;flex-direction:column;touch-action:none;animation:fadeIn .2s ease-out}.lightbox-overlay.zoomed{overflow:hidden}.lightbox-content{display:block;height:100vh;width:100vw;position:absolute;inset:0}.lightbox-content::part(scroll){display:flex;flex-direction:column;height:100%;overflow:hidden}.lightbox-wrapper{position:absolute;inset:0;display:flex;flex-direction:column;width:100%;height:100%}.lightbox-content.zoomed{overflow:hidden}.lightbox-header{position:fixed;top:0;left:0;right:0;z-index:1000;padding:0 16px;background:linear-gradient(to bottom,rgba(0,0,0,.8) 0%,rgba(0,0,0,.4) 80%,transparent 100%);pointer-events:none}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;pointer-events:auto}.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-name{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px}.author-meta{color:#ffffffb3;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;display:flex;align-items:center;gap:6px}.author-meta .separator{color:#ffffff80}.close-button,.share-button{pointer-events:auto;flex-shrink:0;border-radius:50%}.close-button::ng-deep button,.share-button::ng-deep button{color:#fff!important;background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;border-radius:50%!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;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}.close-button::ng-deep button:hover,.share-button::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.close-button::ng-deep button:active,.share-button::ng-deep button:active{background:#fff3!important;transform:scale(.98)}.close-button::ng-deep svg,.share-button::ng-deep svg{color:#fff!important;fill:#fff!important}.swiper-container{position:absolute;inset:0;width:100%;height:100%;z-index:1}.swiper-wrapper{width:100%;height:100%}.swiper-slide{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.image-zoom-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.lightbox-image{max-width:min(640px,100%);max-height:100%;width:auto;height:auto;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none;transition:transform .3s ease-out;transform-origin:center center}.lightbox-overlay.zoomed .swiper-container{touch-action:none}.loading-spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10}.loading-spinner ion-spinner{--color: rgba(255, 255, 255, .8);width:48px;height:48px}.error-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;text-align:center;color:#fffc;font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:500;padding:20px;background:#00000080;border-radius:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.lightbox-bottom-section{position:fixed;bottom:0;left:0;right:0;z-index:100;display:flex;flex-direction:column;background:linear-gradient(to top,rgba(0,0,0,.8) 0%,rgba(0,0,0,.6) 50%,rgba(0,0,0,.4) 75%,transparent 100%);pointer-events:none}.lightbox-controls{display:flex;align-items:center;justify-content:center;gap:24px;padding:16px 20px 12px;pointer-events:none}.nav-button,.counter{pointer-events:auto}.nav-button{background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;padding:0;margin:0;outline:none}.nav-button:hover:not(:disabled){background:#fff3;transform:scale(1.05)}.nav-button:active:not(:disabled){transform:scale(.95)}.nav-button:disabled{opacity:.3;cursor:not-allowed}.nav-button svg{width:24px;height:24px}.counter{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:1;padding:10px 16px;background:#00000080;border-radius:100px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);white-space:nowrap}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-bottom-section{padding-bottom:env(safe-area-inset-bottom)}}.lightbox-footer{display:flex;padding:12px 20px 20px;pointer-events:none}.footer-actions{display:flex;align-items:center;justify-content:space-between;gap:16px;pointer-events:auto}.action-buttons-left{display:flex;align-items:center;gap:16px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-with-count::ng-deep button,.action-button-share::ng-deep button{background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;color:#fff!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease}.action-button-like::ng-deep button:hover,.action-button-comment::ng-deep button:hover,.action-button-with-count::ng-deep button:hover,.action-button-share::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.action-button-like::ng-deep button:active,.action-button-comment::ng-deep button:active,.action-button-with-count::ng-deep button:active,.action-button-share::ng-deep button:active{transform:scale(.98)}.action-button-like::ng-deep button svg,.action-button-comment::ng-deep button svg,.action-button-with-count::ng-deep button svg,.action-button-share::ng-deep button svg,.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon,.action-button-like::ng-deep button .btn__content,.action-button-comment::ng-deep button .btn__content,.action-button-with-count::ng-deep button .btn__content{color:#fff!important;fill:#fff!important}.action-button-like::ng-deep button .btn__icon svg,.action-button-comment::ng-deep button .btn__icon svg,.action-button-with-count::ng-deep button .btn__icon svg,.action-button-share::ng-deep button .btn__icon svg{color:#fff!important;fill:#fff!important;display:block!important;opacity:1!important;visibility:visible!important;width:20px!important;height:20px!important}.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon{display:flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.action-button-like[data-liked=true]::ng-deep button svg{fill:#f91880!important;color:#f91880!important}.action-button-like[data-liked=true]::ng-deep button{border-color:#f918804d!important}.action-button-like,.action-button-comment,.action-button-share{flex-shrink:0;border-radius:50%}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-share::ng-deep button{border-radius:50%!important;width:44px!important;height:44px!important;min-width:44px!important;min-height:44px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}@media (min-width: 768px){.lightbox-header{padding:24px}.close-button{width:48px;height:48px}.lightbox-controls{padding:20px 24px 16px}.nav-button{width:48px;height:48px}.counter{font-size:var(--font-size-base);padding:12px 20px}.lightbox-footer{padding:16px 24px 24px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button{height:48px;padding:0 20px}.action-button-share::ng-deep button{width:48px!important;height:48px!important;min-width:48px!important;min-height:48px!important}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes zoomIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.image-wrapper,.nav-button,.lightbox-caption{transition:none}}.nav-button:focus-visible{outline:2px solid white;outline-offset:2px}.lightbox-description-container{position:absolute;bottom:85px;left:16px;right:16px;max-height:30vh;overflow-y:auto;background:#fff;border-radius:16px;padding:16px;color:#111827;z-index:90;opacity:0;visibility:hidden;transition:all .3s ease;transform:translateY(10px);pointer-events:auto;box-shadow:0 4px 24px #00000040}.lightbox-description-container.show{opacity:1;visibility:visible;transform:translateY(0)}.description-loader{display:flex;align-items:center;justify-content:center;gap:12px;padding:12px 0}.description-loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:#6b7280}.description-error{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:12px 0}.description-error span{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:#111827}.description-error .retry-button{background:var(--color-accent, #6B5FF5);border:none;color:#fff;border-radius:20px;padding:6px 16px;font-size:var(--font-size-xs);cursor:pointer;font-family:Brockmann,sans-serif;transition:background .2s}.description-error .retry-button:active{background:var(--color-accent-dark, #5A4EE3)}.ai-description-header{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--color-accent, #6B5FF5);font-family:Brockmann,sans-serif;font-weight:600;font-size:var(--font-size-sm)}.ai-description-header ds-icon::ng-deep svg{fill:var(--color-accent, #6B5FF5);color:var(--color-accent, #6B5FF5)}.description-content p{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:1.5;color:#111827;white-space:pre-wrap;margin:0}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-description-container{bottom:calc(85px + env(safe-area-inset-bottom))}}\n"], dependencies: [{ kind: "component", type: DsMobileGlassSpinnerComponent, selector: "ds-mobile-glass-spinner", inputs: ["spinnerSize", "borderRadius"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsMobileLightboxHeaderComponent, selector: "ds-mobile-lightbox-header", inputs: ["author", "showDownload"], outputs: ["closeClick", "shareClick", "downloadClick"] }, { kind: "component", type: DsMobileLightboxFooterComponent, selector: "ds-mobile-lightbox-footer", inputs: ["showNavigation", "currentIndex", "totalImages", "showActions", "isLiked", "likeCount", "commentCount"], outputs: ["prevClick", "nextClick", "likeClick", "commentClick"] }] });
14586
14586
  }
14587
14587
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileLightboxImageComponent, decorators: [{
14588
14588
  type: Component,
@@ -14646,12 +14646,584 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
14646
14646
  />
14647
14647
  </div>
14648
14648
  </div>
14649
- `, 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-base);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}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}:host{display:block;position:fixed;inset:0;width:100vw;height:100vh;z-index:10000}.lightbox-overlay{position:fixed;inset:0;width:100vw;height:100vh;background:#000000fa;z-index:10000;display:flex;flex-direction:column;touch-action:none;animation:fadeIn .2s ease-out}.lightbox-overlay.zoomed{overflow:hidden}.lightbox-content{display:block;height:100vh;width:100vw;position:absolute;inset:0}.lightbox-content::part(scroll){display:flex;flex-direction:column;height:100%;overflow:hidden}.lightbox-wrapper{position:absolute;inset:0;display:flex;flex-direction:column;width:100%;height:100%}.lightbox-content.zoomed{overflow:hidden}.lightbox-header{position:fixed;top:0;left:0;right:0;z-index:1000;padding:0 16px;background:linear-gradient(to bottom,rgba(0,0,0,.8) 0%,rgba(0,0,0,.4) 80%,transparent 100%);pointer-events:none}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;pointer-events:auto}.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-name{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px}.author-meta{color:#ffffffb3;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;display:flex;align-items:center;gap:6px}.author-meta .separator{color:#ffffff80}.close-button,.share-button{pointer-events:auto;flex-shrink:0;border-radius:50%}.close-button::ng-deep button,.share-button::ng-deep button{color:#fff!important;background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;border-radius:50%!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;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}.close-button::ng-deep button:hover,.share-button::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.close-button::ng-deep button:active,.share-button::ng-deep button:active{background:#fff3!important;transform:scale(.98)}.close-button::ng-deep svg,.share-button::ng-deep svg{color:#fff!important;fill:#fff!important}.swiper-container{position:absolute;inset:0;width:100%;height:100%;z-index:1}.swiper-wrapper{width:100%;height:100%}.swiper-slide{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.image-zoom-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.lightbox-image{max-width:min(640px,100%);max-height:100%;width:auto;height:auto;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none;transition:transform .3s ease-out;transform-origin:center center}.lightbox-overlay.zoomed .swiper-container{touch-action:none}.loading-spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10}.loading-spinner ion-spinner{--color: rgba(255, 255, 255, .8);width:48px;height:48px}.error-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;text-align:center;color:#fffc;font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:500;padding:20px;background:#00000080;border-radius:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.lightbox-bottom-section{position:fixed;bottom:0;left:0;right:0;z-index:100;display:flex;flex-direction:column;background:linear-gradient(to top,rgba(0,0,0,.8) 0%,rgba(0,0,0,.6) 50%,rgba(0,0,0,.4) 75%,transparent 100%);pointer-events:none}.lightbox-controls{display:flex;align-items:center;justify-content:center;gap:24px;padding:16px 20px 12px;pointer-events:none}.nav-button,.counter{pointer-events:auto}.nav-button{background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;padding:0;margin:0;outline:none}.nav-button:hover:not(:disabled){background:#fff3;transform:scale(1.05)}.nav-button:active:not(:disabled){transform:scale(.95)}.nav-button:disabled{opacity:.3;cursor:not-allowed}.nav-button svg{width:24px;height:24px}.counter{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:1;padding:10px 16px;background:#00000080;border-radius:100px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);white-space:nowrap}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-bottom-section{padding-bottom:env(safe-area-inset-bottom)}}.lightbox-footer{display:flex;padding:12px 20px 20px;pointer-events:none}.footer-actions{display:flex;align-items:center;justify-content:space-between;gap:16px;pointer-events:auto}.action-buttons-left{display:flex;align-items:center;gap:16px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-with-count::ng-deep button,.action-button-share::ng-deep button{background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;color:#fff!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease}.action-button-like::ng-deep button:hover,.action-button-comment::ng-deep button:hover,.action-button-with-count::ng-deep button:hover,.action-button-share::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.action-button-like::ng-deep button:active,.action-button-comment::ng-deep button:active,.action-button-with-count::ng-deep button:active,.action-button-share::ng-deep button:active{transform:scale(.98)}.action-button-like::ng-deep button svg,.action-button-comment::ng-deep button svg,.action-button-with-count::ng-deep button svg,.action-button-share::ng-deep button svg,.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon,.action-button-like::ng-deep button .btn__content,.action-button-comment::ng-deep button .btn__content,.action-button-with-count::ng-deep button .btn__content{color:#fff!important;fill:#fff!important}.action-button-like::ng-deep button .btn__icon svg,.action-button-comment::ng-deep button .btn__icon svg,.action-button-with-count::ng-deep button .btn__icon svg,.action-button-share::ng-deep button .btn__icon svg{color:#fff!important;fill:#fff!important;display:block!important;opacity:1!important;visibility:visible!important;width:20px!important;height:20px!important}.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon{display:flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.action-button-like[data-liked=true]::ng-deep button svg{fill:#f91880!important;color:#f91880!important}.action-button-like[data-liked=true]::ng-deep button{border-color:#f918804d!important}.action-button-like,.action-button-comment,.action-button-share{flex-shrink:0;border-radius:50%}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-share::ng-deep button{border-radius:50%!important;width:44px!important;height:44px!important;min-width:44px!important;min-height:44px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}@media (min-width: 768px){.lightbox-header{padding:24px}.close-button{width:48px;height:48px}.lightbox-controls{padding:20px 24px 16px}.nav-button{width:48px;height:48px}.counter{font-size:var(--font-size-base);padding:12px 20px}.lightbox-footer{padding:16px 24px 24px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button{height:48px;padding:0 20px}.action-button-share::ng-deep button{width:48px!important;height:48px!important;min-width:48px!important;min-height:48px!important}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes zoomIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.image-wrapper,.nav-button,.lightbox-caption{transition:none}}.nav-button:focus-visible{outline:2px solid white;outline-offset:2px}\n"] }]
14649
+ `, 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-base);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}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}:host{display:block;position:fixed;inset:0;width:100vw;height:100vh;z-index:10000}.lightbox-overlay{position:fixed;inset:0;width:100vw;height:100vh;background:#000000fa;z-index:10000;display:flex;flex-direction:column;touch-action:none;animation:fadeIn .2s ease-out}.lightbox-overlay.zoomed{overflow:hidden}.lightbox-content{display:block;height:100vh;width:100vw;position:absolute;inset:0}.lightbox-content::part(scroll){display:flex;flex-direction:column;height:100%;overflow:hidden}.lightbox-wrapper{position:absolute;inset:0;display:flex;flex-direction:column;width:100%;height:100%}.lightbox-content.zoomed{overflow:hidden}.lightbox-header{position:fixed;top:0;left:0;right:0;z-index:1000;padding:0 16px;background:linear-gradient(to bottom,rgba(0,0,0,.8) 0%,rgba(0,0,0,.4) 80%,transparent 100%);pointer-events:none}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;pointer-events:auto}.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-name{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px}.author-meta{color:#ffffffb3;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;display:flex;align-items:center;gap:6px}.author-meta .separator{color:#ffffff80}.close-button,.share-button{pointer-events:auto;flex-shrink:0;border-radius:50%}.close-button::ng-deep button,.share-button::ng-deep button{color:#fff!important;background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;border-radius:50%!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;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}.close-button::ng-deep button:hover,.share-button::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.close-button::ng-deep button:active,.share-button::ng-deep button:active{background:#fff3!important;transform:scale(.98)}.close-button::ng-deep svg,.share-button::ng-deep svg{color:#fff!important;fill:#fff!important}.swiper-container{position:absolute;inset:0;width:100%;height:100%;z-index:1}.swiper-wrapper{width:100%;height:100%}.swiper-slide{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.image-zoom-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.lightbox-image{max-width:min(640px,100%);max-height:100%;width:auto;height:auto;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none;transition:transform .3s ease-out;transform-origin:center center}.lightbox-overlay.zoomed .swiper-container{touch-action:none}.loading-spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10}.loading-spinner ion-spinner{--color: rgba(255, 255, 255, .8);width:48px;height:48px}.error-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;text-align:center;color:#fffc;font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:500;padding:20px;background:#00000080;border-radius:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.lightbox-bottom-section{position:fixed;bottom:0;left:0;right:0;z-index:100;display:flex;flex-direction:column;background:linear-gradient(to top,rgba(0,0,0,.8) 0%,rgba(0,0,0,.6) 50%,rgba(0,0,0,.4) 75%,transparent 100%);pointer-events:none}.lightbox-controls{display:flex;align-items:center;justify-content:center;gap:24px;padding:16px 20px 12px;pointer-events:none}.nav-button,.counter{pointer-events:auto}.nav-button{background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;padding:0;margin:0;outline:none}.nav-button:hover:not(:disabled){background:#fff3;transform:scale(1.05)}.nav-button:active:not(:disabled){transform:scale(.95)}.nav-button:disabled{opacity:.3;cursor:not-allowed}.nav-button svg{width:24px;height:24px}.counter{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:1;padding:10px 16px;background:#00000080;border-radius:100px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);white-space:nowrap}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-bottom-section{padding-bottom:env(safe-area-inset-bottom)}}.lightbox-footer{display:flex;padding:12px 20px 20px;pointer-events:none}.footer-actions{display:flex;align-items:center;justify-content:space-between;gap:16px;pointer-events:auto}.action-buttons-left{display:flex;align-items:center;gap:16px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-with-count::ng-deep button,.action-button-share::ng-deep button{background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;color:#fff!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease}.action-button-like::ng-deep button:hover,.action-button-comment::ng-deep button:hover,.action-button-with-count::ng-deep button:hover,.action-button-share::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.action-button-like::ng-deep button:active,.action-button-comment::ng-deep button:active,.action-button-with-count::ng-deep button:active,.action-button-share::ng-deep button:active{transform:scale(.98)}.action-button-like::ng-deep button svg,.action-button-comment::ng-deep button svg,.action-button-with-count::ng-deep button svg,.action-button-share::ng-deep button svg,.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon,.action-button-like::ng-deep button .btn__content,.action-button-comment::ng-deep button .btn__content,.action-button-with-count::ng-deep button .btn__content{color:#fff!important;fill:#fff!important}.action-button-like::ng-deep button .btn__icon svg,.action-button-comment::ng-deep button .btn__icon svg,.action-button-with-count::ng-deep button .btn__icon svg,.action-button-share::ng-deep button .btn__icon svg{color:#fff!important;fill:#fff!important;display:block!important;opacity:1!important;visibility:visible!important;width:20px!important;height:20px!important}.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon{display:flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.action-button-like[data-liked=true]::ng-deep button svg{fill:#f91880!important;color:#f91880!important}.action-button-like[data-liked=true]::ng-deep button{border-color:#f918804d!important}.action-button-like,.action-button-comment,.action-button-share{flex-shrink:0;border-radius:50%}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-share::ng-deep button{border-radius:50%!important;width:44px!important;height:44px!important;min-width:44px!important;min-height:44px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}@media (min-width: 768px){.lightbox-header{padding:24px}.close-button{width:48px;height:48px}.lightbox-controls{padding:20px 24px 16px}.nav-button{width:48px;height:48px}.counter{font-size:var(--font-size-base);padding:12px 20px}.lightbox-footer{padding:16px 24px 24px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button{height:48px;padding:0 20px}.action-button-share::ng-deep button{width:48px!important;height:48px!important;min-width:48px!important;min-height:48px!important}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes zoomIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.image-wrapper,.nav-button,.lightbox-caption{transition:none}}.nav-button:focus-visible{outline:2px solid white;outline-offset:2px}.lightbox-description-container{position:absolute;bottom:85px;left:16px;right:16px;max-height:30vh;overflow-y:auto;background:#fff;border-radius:16px;padding:16px;color:#111827;z-index:90;opacity:0;visibility:hidden;transition:all .3s ease;transform:translateY(10px);pointer-events:auto;box-shadow:0 4px 24px #00000040}.lightbox-description-container.show{opacity:1;visibility:visible;transform:translateY(0)}.description-loader{display:flex;align-items:center;justify-content:center;gap:12px;padding:12px 0}.description-loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:#6b7280}.description-error{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:12px 0}.description-error span{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:#111827}.description-error .retry-button{background:var(--color-accent, #6B5FF5);border:none;color:#fff;border-radius:20px;padding:6px 16px;font-size:var(--font-size-xs);cursor:pointer;font-family:Brockmann,sans-serif;transition:background .2s}.description-error .retry-button:active{background:var(--color-accent-dark, #5A4EE3)}.ai-description-header{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--color-accent, #6B5FF5);font-family:Brockmann,sans-serif;font-weight:600;font-size:var(--font-size-sm)}.ai-description-header ds-icon::ng-deep svg{fill:var(--color-accent, #6B5FF5);color:var(--color-accent, #6B5FF5)}.description-content p{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:1.5;color:#111827;white-space:pre-wrap;margin:0}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-description-container{bottom:calc(85px + env(safe-area-inset-bottom))}}\n"] }]
14650
14650
  }], ctorParameters: () => [{ type: i1.GestureController }], propDecorators: { swiperContainer: [{
14651
14651
  type: ViewChild,
14652
14652
  args: ['swiperContainer', { read: ElementRef }]
14653
14653
  }] } });
14654
14654
 
14655
+ /**
14656
+ * DsMobileLightboxImageWithDescriptionComponent
14657
+ *
14658
+ * Full-screen image lightbox component with Swiper.js navigation, pinch-zoom, and AI descriptions.
14659
+ */
14660
+ class DsMobileLightboxImageWithDescriptionComponent {
14661
+ gestureCtrl;
14662
+ images = [];
14663
+ author;
14664
+ initialIndex = 0;
14665
+ enableZoom = true;
14666
+ showControls = true;
14667
+ enableSwipe = true;
14668
+ showInfo = true;
14669
+ showActions = false;
14670
+ showDownload = false;
14671
+ onDownload;
14672
+ animation = 'fade';
14673
+ onCloseRequested;
14674
+ swiperContainer;
14675
+ currentIndex = signal(0, ...(ngDevMode ? [{ debugName: "currentIndex" }] : []));
14676
+ isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
14677
+ isZoomed = signal(false, ...(ngDevMode ? [{ debugName: "isZoomed" }] : []));
14678
+ isSwiping = signal(false, ...(ngDevMode ? [{ debugName: "isSwiping" }] : []));
14679
+ isLiked = signal(false, ...(ngDevMode ? [{ debugName: "isLiked" }] : []));
14680
+ likeCount = signal(0, ...(ngDevMode ? [{ debugName: "likeCount" }] : []));
14681
+ commentCount = signal(0, ...(ngDevMode ? [{ debugName: "commentCount" }] : []));
14682
+ descriptionText = signal(null, ...(ngDevMode ? [{ debugName: "descriptionText" }] : []));
14683
+ descriptionError = signal(false, ...(ngDevMode ? [{ debugName: "descriptionError" }] : []));
14684
+ hasError = signal(false, ...(ngDevMode ? [{ debugName: "hasError" }] : []));
14685
+ descriptionSubscription;
14686
+ // Computed
14687
+ currentImage = computed(() => this.images[this.currentIndex()], ...(ngDevMode ? [{ debugName: "currentImage" }] : []));
14688
+ swiper;
14689
+ zoomData = new Map();
14690
+ constructor(gestureCtrl) {
14691
+ this.gestureCtrl = gestureCtrl;
14692
+ }
14693
+ ngOnInit() {
14694
+ // Set initial index from the passed property
14695
+ if (this.initialIndex !== undefined) {
14696
+ this.currentIndex.set(this.initialIndex);
14697
+ }
14698
+ // Initialize action states from current image
14699
+ const currentImg = this.images[this.currentIndex()];
14700
+ if (currentImg) {
14701
+ this.isLiked.set(currentImg.isLiked ?? false);
14702
+ this.likeCount.set(currentImg.likeCount ?? 0);
14703
+ this.commentCount.set(currentImg.commentCount ?? 0);
14704
+ }
14705
+ // Load description for initial image
14706
+ this.loadDescription(this.currentIndex());
14707
+ }
14708
+ ngAfterViewInit() {
14709
+ setTimeout(() => {
14710
+ this.initializeSwiper();
14711
+ this.initializeZoomGestures();
14712
+ }, 100);
14713
+ }
14714
+ ngOnDestroy() {
14715
+ // Clean up Swiper
14716
+ if (this.swiper) {
14717
+ this.swiper.destroy();
14718
+ this.swiper = undefined;
14719
+ }
14720
+ }
14721
+ /**
14722
+ * Initialize Swiper for image navigation
14723
+ */
14724
+ initializeSwiper() {
14725
+ if (!this.swiperContainer) {
14726
+ console.error('[Lightbox] Swiper container not found');
14727
+ return;
14728
+ }
14729
+ const swiperOptions = {
14730
+ initialSlide: this.initialIndex,
14731
+ speed: 300,
14732
+ resistance: true,
14733
+ resistanceRatio: 0.85,
14734
+ slidesPerView: 1,
14735
+ spaceBetween: 0,
14736
+ touchRatio: 1,
14737
+ longSwipesRatio: 0.5,
14738
+ threshold: 10,
14739
+ on: {
14740
+ slideChange: (swiper) => {
14741
+ this.currentIndex.set(swiper.activeIndex);
14742
+ this.updateActionStates();
14743
+ this.loadDescription(swiper.activeIndex);
14744
+ // Check if the image is already loaded
14745
+ const currentSlide = swiper.slides[swiper.activeIndex];
14746
+ const img = currentSlide?.querySelector('img');
14747
+ if (img && img.complete && img.naturalHeight !== 0) {
14748
+ // Image is already loaded
14749
+ this.isLoading.set(false);
14750
+ }
14751
+ },
14752
+ slideChangeTransitionStart: () => {
14753
+ // Don't show loading spinner if image is already loaded
14754
+ const currentSlide = this.swiper?.slides[this.swiper.activeIndex];
14755
+ const img = currentSlide?.querySelector('img');
14756
+ if (!img || !img.complete || img.naturalHeight === 0) {
14757
+ this.isLoading.set(true);
14758
+ }
14759
+ }
14760
+ }
14761
+ };
14762
+ this.swiper = new Swiper(this.swiperContainer.nativeElement, swiperOptions);
14763
+ // Check if the initial image is already loaded
14764
+ setTimeout(() => {
14765
+ const currentSlide = this.swiper?.slides[this.currentIndex()];
14766
+ const img = currentSlide?.querySelector('img');
14767
+ if (img && img.complete && img.naturalHeight !== 0) {
14768
+ this.isLoading.set(false);
14769
+ }
14770
+ }, 0);
14771
+ }
14772
+ /**
14773
+ * Initialize pinch-zoom gestures for all slides
14774
+ */
14775
+ initializeZoomGestures() {
14776
+ if (!this.enableZoom)
14777
+ return;
14778
+ const slides = this.swiperContainer.nativeElement.querySelectorAll('.image-zoom-container');
14779
+ slides.forEach((slide, index) => {
14780
+ this.initializeZoomForSlide(slide, index);
14781
+ });
14782
+ }
14783
+ /**
14784
+ * Initialize zoom gestures for a specific slide
14785
+ */
14786
+ initializeZoomForSlide(container, index) {
14787
+ let initialDistance = 0;
14788
+ let initialScale = 1;
14789
+ let currentScale = 1;
14790
+ let lastTap = 0;
14791
+ // Double-tap to zoom
14792
+ container.addEventListener('click', (event) => {
14793
+ const now = Date.now();
14794
+ const timeSinceLastTap = now - lastTap;
14795
+ if (timeSinceLastTap < 300 && timeSinceLastTap > 0) {
14796
+ event.preventDefault();
14797
+ this.toggleZoom(container, index);
14798
+ }
14799
+ lastTap = now;
14800
+ });
14801
+ // Pinch to zoom
14802
+ const getTouchDistance = (touches) => {
14803
+ const dx = touches[0].clientX - touches[1].clientX;
14804
+ const dy = touches[0].clientY - touches[1].clientY;
14805
+ return Math.sqrt(dx * dx + dy * dy);
14806
+ };
14807
+ container.addEventListener('touchstart', (event) => {
14808
+ if (event.touches.length === 2) {
14809
+ event.preventDefault();
14810
+ initialDistance = getTouchDistance(event.touches);
14811
+ const zoomData = this.zoomData.get(index) || { scale: 1, x: 0, y: 0 };
14812
+ initialScale = zoomData.scale;
14813
+ // Disable Swiper when zooming
14814
+ if (this.swiper) {
14815
+ this.swiper.allowTouchMove = false;
14816
+ }
14817
+ }
14818
+ }, { passive: false });
14819
+ container.addEventListener('touchmove', (event) => {
14820
+ if (event.touches.length === 2) {
14821
+ event.preventDefault();
14822
+ const currentDistance = getTouchDistance(event.touches);
14823
+ const pinchScale = currentDistance / initialDistance;
14824
+ currentScale = Math.max(1, Math.min(initialScale * pinchScale, 4));
14825
+ const img = container.querySelector('img');
14826
+ if (img) {
14827
+ img.style.transform = `scale(${currentScale})`;
14828
+ }
14829
+ if (currentScale > 1) {
14830
+ this.isZoomed.set(true);
14831
+ }
14832
+ else {
14833
+ this.isZoomed.set(false);
14834
+ }
14835
+ }
14836
+ }, { passive: false });
14837
+ container.addEventListener('touchend', (event) => {
14838
+ if (event.touches.length < 2) {
14839
+ // Save zoom state
14840
+ this.zoomData.set(index, { scale: currentScale, x: 0, y: 0 });
14841
+ // Re-enable Swiper if not zoomed
14842
+ if (this.swiper && currentScale <= 1) {
14843
+ this.swiper.allowTouchMove = true;
14844
+ }
14845
+ }
14846
+ });
14847
+ }
14848
+ /**
14849
+ * Toggle zoom on double-tap
14850
+ */
14851
+ toggleZoom(container, index) {
14852
+ const zoomData = this.zoomData.get(index) || { scale: 1, x: 0, y: 0 };
14853
+ const img = container.querySelector('img');
14854
+ if (!img)
14855
+ return;
14856
+ if (zoomData.scale > 1) {
14857
+ // Zoom out
14858
+ img.style.transform = 'scale(1)';
14859
+ this.zoomData.set(index, { scale: 1, x: 0, y: 0 });
14860
+ this.isZoomed.set(false);
14861
+ if (this.swiper) {
14862
+ this.swiper.allowTouchMove = true;
14863
+ }
14864
+ }
14865
+ else {
14866
+ // Zoom in
14867
+ img.style.transform = 'scale(2)';
14868
+ this.zoomData.set(index, { scale: 2, x: 0, y: 0 });
14869
+ this.isZoomed.set(true);
14870
+ if (this.swiper) {
14871
+ this.swiper.allowTouchMove = false;
14872
+ }
14873
+ }
14874
+ }
14875
+ /**
14876
+ * Update action states (like, comments) when slide changes
14877
+ */
14878
+ updateActionStates() {
14879
+ const currentImg = this.images[this.currentIndex()];
14880
+ if (currentImg) {
14881
+ this.isLiked.set(currentImg.isLiked ?? false);
14882
+ this.likeCount.set(currentImg.likeCount ?? 0);
14883
+ this.commentCount.set(currentImg.commentCount ?? 0);
14884
+ }
14885
+ }
14886
+ /**
14887
+ * Close the lightbox
14888
+ */
14889
+ close() {
14890
+ if (this.onCloseRequested) {
14891
+ this.onCloseRequested();
14892
+ }
14893
+ }
14894
+ /**
14895
+ * Load description for the current slide
14896
+ */
14897
+ async loadDescription(index) {
14898
+ const currentImg = this.images[index];
14899
+ // Reset state
14900
+ this.descriptionText.set(null);
14901
+ this.descriptionError.set(false);
14902
+ if (this.descriptionSubscription) {
14903
+ this.descriptionSubscription.unsubscribe();
14904
+ this.descriptionSubscription = undefined;
14905
+ }
14906
+ if (!currentImg || !currentImg.lazyDescription) {
14907
+ return;
14908
+ }
14909
+ try {
14910
+ const result = currentImg.lazyDescription();
14911
+ if (isObservable(result)) {
14912
+ this.descriptionSubscription = result.subscribe({
14913
+ next: (text) => {
14914
+ this.descriptionText.set(text);
14915
+ },
14916
+ error: (err) => {
14917
+ console.error('[Lightbox] Failed to load description via observable', err);
14918
+ this.descriptionError.set(true);
14919
+ }
14920
+ });
14921
+ }
14922
+ else {
14923
+ const text = await result;
14924
+ // Verify index is still the same after await
14925
+ if (this.currentIndex() === index) {
14926
+ this.descriptionText.set(text);
14927
+ }
14928
+ }
14929
+ }
14930
+ catch (err) {
14931
+ console.error('[Lightbox] Failed to load description', err);
14932
+ if (this.currentIndex() === index) {
14933
+ this.descriptionError.set(true);
14934
+ }
14935
+ }
14936
+ }
14937
+ /**
14938
+ * Handle share button click
14939
+ */
14940
+ async onShare() {
14941
+ console.log('[Lightbox] Share button clicked');
14942
+ const currentImg = this.currentImage();
14943
+ if (!currentImg?.src) {
14944
+ console.warn('[Lightbox] No image to share');
14945
+ return;
14946
+ }
14947
+ try {
14948
+ // Check if Web Share API is available (for browser)
14949
+ if (navigator.share) {
14950
+ await navigator.share({
14951
+ title: currentImg.title || 'Shared Image',
14952
+ text: currentImg.description || '',
14953
+ url: currentImg.src,
14954
+ });
14955
+ console.log('[Lightbox] Shared via Web Share API');
14956
+ }
14957
+ else {
14958
+ // Fallback to Capacitor Share API (for native apps)
14959
+ await Share.share({
14960
+ title: currentImg.title || 'Shared Image',
14961
+ url: currentImg.src,
14962
+ dialogTitle: 'Share Image',
14963
+ });
14964
+ console.log('[Lightbox] Shared via Capacitor Share API');
14965
+ }
14966
+ }
14967
+ catch (error) {
14968
+ // User cancellation is expected and not an error
14969
+ if (error?.message?.includes('cancel') || error?.code === 'USER_CANCELLED') {
14970
+ console.log('[Lightbox] Share cancelled by user');
14971
+ return;
14972
+ }
14973
+ console.error('[Lightbox] Share failed:', error);
14974
+ }
14975
+ }
14976
+ /**
14977
+ * Handle download action
14978
+ */
14979
+ onDownloadAction() {
14980
+ console.log('[Lightbox] Download button clicked');
14981
+ const currentImg = this.currentImage();
14982
+ if (!currentImg?.src) {
14983
+ console.warn('[Lightbox] No image to download');
14984
+ return;
14985
+ }
14986
+ if (this.onDownload) {
14987
+ this.onDownload(currentImg);
14988
+ }
14989
+ }
14990
+ /**
14991
+ * Handle like button toggle
14992
+ */
14993
+ onLikeToggle() {
14994
+ console.log('[Lightbox] Like button toggled');
14995
+ this.isLiked.update(liked => !liked);
14996
+ if (this.isLiked()) {
14997
+ this.likeCount.update(count => count + 1);
14998
+ }
14999
+ else {
15000
+ this.likeCount.update(count => Math.max(0, count - 1));
15001
+ }
15002
+ }
15003
+ /**
15004
+ * Handle reply/comment button click
15005
+ */
15006
+ onReply() {
15007
+ console.log('[Lightbox] Reply button clicked');
15008
+ if (this.onCloseRequested) {
15009
+ this.onCloseRequested();
15010
+ }
15011
+ }
15012
+ /**
15013
+ * Navigate to the next image
15014
+ */
15015
+ nextImage() {
15016
+ if (this.swiper && this.currentIndex() < this.images.length - 1) {
15017
+ this.swiper.slideNext();
15018
+ }
15019
+ }
15020
+ /**
15021
+ * Navigate to the previous image
15022
+ */
15023
+ previousImage() {
15024
+ if (this.swiper && this.currentIndex() > 0) {
15025
+ this.swiper.slidePrev();
15026
+ }
15027
+ }
15028
+ /**
15029
+ * Handle image load success
15030
+ */
15031
+ onImageLoad(index) {
15032
+ if (index === this.currentIndex()) {
15033
+ this.isLoading.set(false);
15034
+ }
15035
+ }
15036
+ /**
15037
+ * Handle image load error
15038
+ */
15039
+ onImageError(index) {
15040
+ if (index === this.currentIndex()) {
15041
+ console.error(`[Lightbox] Image ${index} failed to load`);
15042
+ this.isLoading.set(false);
15043
+ this.hasError.set(true);
15044
+ }
15045
+ }
15046
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileLightboxImageWithDescriptionComponent, deps: [{ token: i1.GestureController }], target: i0.ɵɵFactoryTarget.Component });
15047
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileLightboxImageWithDescriptionComponent, isStandalone: true, selector: "ds-mobile-lightbox-image-with-description", inputs: { images: "images", author: "author", initialIndex: "initialIndex", enableZoom: "enableZoom", showControls: "showControls", enableSwipe: "enableSwipe", showInfo: "showInfo", showActions: "showActions", showDownload: "showDownload", onDownload: "onDownload", animation: "animation", onCloseRequested: "onCloseRequested" }, viewQueries: [{ propertyName: "swiperContainer", first: true, predicate: ["swiperContainer"], descendants: true, read: ElementRef }], ngImport: i0, template: `
15048
+ <div class="lightbox-overlay"
15049
+ [class.zoomed]="isZoomed()">
15050
+
15051
+ <div class="lightbox-wrapper">
15052
+ <ds-mobile-lightbox-header
15053
+ [author]="author"
15054
+ [showDownload]="showDownload"
15055
+ (closeClick)="close()"
15056
+ (shareClick)="onShare()"
15057
+ (downloadClick)="onDownloadAction()"
15058
+ />
15059
+
15060
+ <div class="swiper-container" #swiperContainer>
15061
+ <div class="swiper-wrapper">
15062
+ @for (image of images; track image.src; let i = $index) {
15063
+ <div class="swiper-slide">
15064
+ <div class="image-zoom-container" [attr.data-index]="i">
15065
+ <img
15066
+ [src]="image.src"
15067
+ [alt]="image.alt || 'Lightbox image'"
15068
+ class="lightbox-image"
15069
+ (load)="onImageLoad(i)"
15070
+ (error)="onImageError(i)">
15071
+ </div>
15072
+ </div>
15073
+ }
15074
+ </div>
15075
+ </div>
15076
+
15077
+ @if (isLoading()) {
15078
+ <div class="loading-spinner">
15079
+ <ds-mobile-glass-spinner [spinnerSize]="32"></ds-mobile-glass-spinner>
15080
+ </div>
15081
+ }
15082
+
15083
+ <!-- AI Description Overlay -->
15084
+ <div class="lightbox-description-container"
15085
+ [class.show]="showInfo && !isSwiping() && (descriptionError() || (descriptionText() && descriptionText()!.trim().length > 0))">
15086
+ @if (descriptionError()) {
15087
+ <div class="description-error">
15088
+ <span>Kunne ikke hente beskrivelse.</span>
15089
+ <button class="retry-button" (click)="loadDescription(currentIndex())">Prøv igen</button>
15090
+ </div>
15091
+ } @else if (descriptionText() && descriptionText()!.trim().length > 0) {
15092
+ <div class="description-content">
15093
+ <div class="ai-description-header">
15094
+ <ds-icon name="remixSparklingFill" size="16px"></ds-icon>
15095
+ <span>AI Beskrivelse</span>
15096
+ </div>
15097
+ <p>{{ descriptionText() }}</p>
15098
+ </div>
15099
+ }
15100
+ </div>
15101
+
15102
+ <ds-mobile-lightbox-footer
15103
+ [showNavigation]="showControls && images.length > 1"
15104
+ [showActions]="showActions"
15105
+ [currentIndex]="currentIndex()"
15106
+ [totalImages]="images.length"
15107
+ [isLiked]="isLiked()"
15108
+ [likeCount]="likeCount()"
15109
+ [commentCount]="commentCount()"
15110
+ (prevClick)="previousImage()"
15111
+ (nextClick)="nextImage()"
15112
+ (likeClick)="onLikeToggle()"
15113
+ (commentClick)="onReply()"
15114
+ />
15115
+ </div>
15116
+ </div>
15117
+ `, 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-base);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}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}:host{display:block;position:fixed;inset:0;width:100vw;height:100vh;z-index:10000}.lightbox-overlay{position:fixed;inset:0;width:100vw;height:100vh;background:#000000fa;z-index:10000;display:flex;flex-direction:column;touch-action:none;animation:fadeIn .2s ease-out}.lightbox-overlay.zoomed{overflow:hidden}.lightbox-content{display:block;height:100vh;width:100vw;position:absolute;inset:0}.lightbox-content::part(scroll){display:flex;flex-direction:column;height:100%;overflow:hidden}.lightbox-wrapper{position:absolute;inset:0;display:flex;flex-direction:column;width:100%;height:100%}.lightbox-content.zoomed{overflow:hidden}.lightbox-header{position:fixed;top:0;left:0;right:0;z-index:1000;padding:0 16px;background:linear-gradient(to bottom,rgba(0,0,0,.8) 0%,rgba(0,0,0,.4) 80%,transparent 100%);pointer-events:none}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;pointer-events:auto}.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-name{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px}.author-meta{color:#ffffffb3;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;display:flex;align-items:center;gap:6px}.author-meta .separator{color:#ffffff80}.close-button,.share-button{pointer-events:auto;flex-shrink:0;border-radius:50%}.close-button::ng-deep button,.share-button::ng-deep button{color:#fff!important;background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;border-radius:50%!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;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}.close-button::ng-deep button:hover,.share-button::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.close-button::ng-deep button:active,.share-button::ng-deep button:active{background:#fff3!important;transform:scale(.98)}.close-button::ng-deep svg,.share-button::ng-deep svg{color:#fff!important;fill:#fff!important}.swiper-container{position:absolute;inset:0;width:100%;height:100%;z-index:1}.swiper-wrapper{width:100%;height:100%}.swiper-slide{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.image-zoom-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.lightbox-image{max-width:min(640px,100%);max-height:100%;width:auto;height:auto;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none;transition:transform .3s ease-out;transform-origin:center center}.lightbox-overlay.zoomed .swiper-container{touch-action:none}.loading-spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10}.loading-spinner ion-spinner{--color: rgba(255, 255, 255, .8);width:48px;height:48px}.error-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;text-align:center;color:#fffc;font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:500;padding:20px;background:#00000080;border-radius:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.lightbox-bottom-section{position:fixed;bottom:0;left:0;right:0;z-index:100;display:flex;flex-direction:column;background:linear-gradient(to top,rgba(0,0,0,.8) 0%,rgba(0,0,0,.6) 50%,rgba(0,0,0,.4) 75%,transparent 100%);pointer-events:none}.lightbox-controls{display:flex;align-items:center;justify-content:center;gap:24px;padding:16px 20px 12px;pointer-events:none}.nav-button,.counter{pointer-events:auto}.nav-button{background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;padding:0;margin:0;outline:none}.nav-button:hover:not(:disabled){background:#fff3;transform:scale(1.05)}.nav-button:active:not(:disabled){transform:scale(.95)}.nav-button:disabled{opacity:.3;cursor:not-allowed}.nav-button svg{width:24px;height:24px}.counter{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:1;padding:10px 16px;background:#00000080;border-radius:100px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);white-space:nowrap}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-bottom-section{padding-bottom:env(safe-area-inset-bottom)}}.lightbox-footer{display:flex;padding:12px 20px 20px;pointer-events:none}.footer-actions{display:flex;align-items:center;justify-content:space-between;gap:16px;pointer-events:auto}.action-buttons-left{display:flex;align-items:center;gap:16px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-with-count::ng-deep button,.action-button-share::ng-deep button{background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;color:#fff!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease}.action-button-like::ng-deep button:hover,.action-button-comment::ng-deep button:hover,.action-button-with-count::ng-deep button:hover,.action-button-share::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.action-button-like::ng-deep button:active,.action-button-comment::ng-deep button:active,.action-button-with-count::ng-deep button:active,.action-button-share::ng-deep button:active{transform:scale(.98)}.action-button-like::ng-deep button svg,.action-button-comment::ng-deep button svg,.action-button-with-count::ng-deep button svg,.action-button-share::ng-deep button svg,.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon,.action-button-like::ng-deep button .btn__content,.action-button-comment::ng-deep button .btn__content,.action-button-with-count::ng-deep button .btn__content{color:#fff!important;fill:#fff!important}.action-button-like::ng-deep button .btn__icon svg,.action-button-comment::ng-deep button .btn__icon svg,.action-button-with-count::ng-deep button .btn__icon svg,.action-button-share::ng-deep button .btn__icon svg{color:#fff!important;fill:#fff!important;display:block!important;opacity:1!important;visibility:visible!important;width:20px!important;height:20px!important}.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon{display:flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.action-button-like[data-liked=true]::ng-deep button svg{fill:#f91880!important;color:#f91880!important}.action-button-like[data-liked=true]::ng-deep button{border-color:#f918804d!important}.action-button-like,.action-button-comment,.action-button-share{flex-shrink:0;border-radius:50%}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-share::ng-deep button{border-radius:50%!important;width:44px!important;height:44px!important;min-width:44px!important;min-height:44px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}@media (min-width: 768px){.lightbox-header{padding:24px}.close-button{width:48px;height:48px}.lightbox-controls{padding:20px 24px 16px}.nav-button{width:48px;height:48px}.counter{font-size:var(--font-size-base);padding:12px 20px}.lightbox-footer{padding:16px 24px 24px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button{height:48px;padding:0 20px}.action-button-share::ng-deep button{width:48px!important;height:48px!important;min-width:48px!important;min-height:48px!important}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes zoomIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.image-wrapper,.nav-button,.lightbox-caption{transition:none}}.nav-button:focus-visible{outline:2px solid white;outline-offset:2px}.lightbox-description-container{position:absolute;bottom:85px;left:16px;right:16px;max-height:30vh;overflow-y:auto;background:#fff;border-radius:16px;padding:16px;color:#111827;z-index:90;opacity:0;visibility:hidden;transition:all .3s ease;transform:translateY(10px);pointer-events:auto;box-shadow:0 4px 24px #00000040}.lightbox-description-container.show{opacity:1;visibility:visible;transform:translateY(0)}.description-loader{display:flex;align-items:center;justify-content:center;gap:12px;padding:12px 0}.description-loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:#6b7280}.description-error{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:12px 0}.description-error span{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:#111827}.description-error .retry-button{background:var(--color-accent, #6B5FF5);border:none;color:#fff;border-radius:20px;padding:6px 16px;font-size:var(--font-size-xs);cursor:pointer;font-family:Brockmann,sans-serif;transition:background .2s}.description-error .retry-button:active{background:var(--color-accent-dark, #5A4EE3)}.ai-description-header{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--color-accent, #6B5FF5);font-family:Brockmann,sans-serif;font-weight:600;font-size:var(--font-size-sm)}.ai-description-header ds-icon::ng-deep svg{fill:var(--color-accent, #6B5FF5);color:var(--color-accent, #6B5FF5)}.description-content p{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:1.5;color:#111827;white-space:pre-wrap;margin:0}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-description-container{bottom:calc(85px + env(safe-area-inset-bottom))}}\n"], dependencies: [{ kind: "component", type: DsMobileGlassSpinnerComponent, selector: "ds-mobile-glass-spinner", inputs: ["spinnerSize", "borderRadius"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: DsMobileLightboxHeaderComponent, selector: "ds-mobile-lightbox-header", inputs: ["author", "showDownload"], outputs: ["closeClick", "shareClick", "downloadClick"] }, { kind: "component", type: DsMobileLightboxFooterComponent, selector: "ds-mobile-lightbox-footer", inputs: ["showNavigation", "currentIndex", "totalImages", "showActions", "isLiked", "likeCount", "commentCount"], outputs: ["prevClick", "nextClick", "likeClick", "commentClick"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
15118
+ }
15119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileLightboxImageWithDescriptionComponent, decorators: [{
15120
+ type: Component,
15121
+ args: [{ selector: 'ds-mobile-lightbox-image-with-description', standalone: true, imports: [
15122
+ DsMobileGlassSpinnerComponent,
15123
+ CommonModule,
15124
+ DsMobileLightboxHeaderComponent,
15125
+ DsMobileLightboxFooterComponent,
15126
+ DsIconComponent
15127
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: `
15128
+ <div class="lightbox-overlay"
15129
+ [class.zoomed]="isZoomed()">
15130
+
15131
+ <div class="lightbox-wrapper">
15132
+ <ds-mobile-lightbox-header
15133
+ [author]="author"
15134
+ [showDownload]="showDownload"
15135
+ (closeClick)="close()"
15136
+ (shareClick)="onShare()"
15137
+ (downloadClick)="onDownloadAction()"
15138
+ />
15139
+
15140
+ <div class="swiper-container" #swiperContainer>
15141
+ <div class="swiper-wrapper">
15142
+ @for (image of images; track image.src; let i = $index) {
15143
+ <div class="swiper-slide">
15144
+ <div class="image-zoom-container" [attr.data-index]="i">
15145
+ <img
15146
+ [src]="image.src"
15147
+ [alt]="image.alt || 'Lightbox image'"
15148
+ class="lightbox-image"
15149
+ (load)="onImageLoad(i)"
15150
+ (error)="onImageError(i)">
15151
+ </div>
15152
+ </div>
15153
+ }
15154
+ </div>
15155
+ </div>
15156
+
15157
+ @if (isLoading()) {
15158
+ <div class="loading-spinner">
15159
+ <ds-mobile-glass-spinner [spinnerSize]="32"></ds-mobile-glass-spinner>
15160
+ </div>
15161
+ }
15162
+
15163
+ <!-- AI Description Overlay -->
15164
+ <div class="lightbox-description-container"
15165
+ [class.show]="showInfo && !isSwiping() && (descriptionError() || (descriptionText() && descriptionText()!.trim().length > 0))">
15166
+ @if (descriptionError()) {
15167
+ <div class="description-error">
15168
+ <span>Kunne ikke hente beskrivelse.</span>
15169
+ <button class="retry-button" (click)="loadDescription(currentIndex())">Prøv igen</button>
15170
+ </div>
15171
+ } @else if (descriptionText() && descriptionText()!.trim().length > 0) {
15172
+ <div class="description-content">
15173
+ <div class="ai-description-header">
15174
+ <ds-icon name="remixSparklingFill" size="16px"></ds-icon>
15175
+ <span>AI Beskrivelse</span>
15176
+ </div>
15177
+ <p>{{ descriptionText() }}</p>
15178
+ </div>
15179
+ }
15180
+ </div>
15181
+
15182
+ <ds-mobile-lightbox-footer
15183
+ [showNavigation]="showControls && images.length > 1"
15184
+ [showActions]="showActions"
15185
+ [currentIndex]="currentIndex()"
15186
+ [totalImages]="images.length"
15187
+ [isLiked]="isLiked()"
15188
+ [likeCount]="likeCount()"
15189
+ [commentCount]="commentCount()"
15190
+ (prevClick)="previousImage()"
15191
+ (nextClick)="nextImage()"
15192
+ (likeClick)="onLikeToggle()"
15193
+ (commentClick)="onReply()"
15194
+ />
15195
+ </div>
15196
+ </div>
15197
+ `, 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-base);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}.ghost-input-clean ::ng-deep .ds-input,.ghost-input-clean ::ng-deep .ds-textarea,.ghost-input-clean ::ng-deep .textarea-container{outline:none!important;border:none!important;padding:0!important}:host ::ng-deep ds-textarea.ghost-input-clean .textarea-container{padding:0!important}.ghost-input-clean ::ng-deep .ds-input:hover,.ghost-input-clean ::ng-deep .ds-textarea:hover,.ghost-input-clean ::ng-deep .textarea-container:hover,.ghost-input-clean ::ng-deep .ds-input:focus,.ghost-input-clean ::ng-deep .ds-textarea:focus,.ghost-input-clean ::ng-deep .textarea-container:focus,.ghost-input-clean ::ng-deep .ds-input:focus-within,.ghost-input-clean ::ng-deep .ds-textarea:focus-within,.ghost-input-clean ::ng-deep .textarea-container:focus-within{outline:none!important;border:none!important;box-shadow:none!important}.ghost-input-clean ::ng-deep textarea{outline:none!important;border:none!important;box-shadow:none!important;resize:none!important}.ghost-input-clean ::ng-deep textarea:hover,.ghost-input-clean ::ng-deep textarea:focus{outline:none!important;border:none!important;box-shadow:none!important}:host{display:block;position:fixed;inset:0;width:100vw;height:100vh;z-index:10000}.lightbox-overlay{position:fixed;inset:0;width:100vw;height:100vh;background:#000000fa;z-index:10000;display:flex;flex-direction:column;touch-action:none;animation:fadeIn .2s ease-out}.lightbox-overlay.zoomed{overflow:hidden}.lightbox-content{display:block;height:100vh;width:100vw;position:absolute;inset:0}.lightbox-content::part(scroll){display:flex;flex-direction:column;height:100%;overflow:hidden}.lightbox-wrapper{position:absolute;inset:0;display:flex;flex-direction:column;width:100%;height:100%}.lightbox-content.zoomed{overflow:hidden}.lightbox-header{position:fixed;top:0;left:0;right:0;z-index:1000;padding:0 16px;background:linear-gradient(to bottom,rgba(0,0,0,.8) 0%,rgba(0,0,0,.4) 80%,transparent 100%);pointer-events:none}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px;pointer-events:auto}.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-name{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:600;line-height:20px;letter-spacing:-.3px}.author-meta{color:#ffffffb3;font-family:Brockmann,sans-serif;font-size:var(--font-size-xs);font-weight:400;line-height:1.2;letter-spacing:-.26px;display:flex;align-items:center;gap:6px}.author-meta .separator{color:#ffffff80}.close-button,.share-button{pointer-events:auto;flex-shrink:0;border-radius:50%}.close-button::ng-deep button,.share-button::ng-deep button{color:#fff!important;background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;border-radius:50%!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;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}.close-button::ng-deep button:hover,.share-button::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.close-button::ng-deep button:active,.share-button::ng-deep button:active{background:#fff3!important;transform:scale(.98)}.close-button::ng-deep svg,.share-button::ng-deep svg{color:#fff!important;fill:#fff!important}.swiper-container{position:absolute;inset:0;width:100%;height:100%;z-index:1}.swiper-wrapper{width:100%;height:100%}.swiper-slide{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.image-zoom-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.lightbox-image{max-width:min(640px,100%);max-height:100%;width:auto;height:auto;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none;transition:transform .3s ease-out;transform-origin:center center}.lightbox-overlay.zoomed .swiper-container{touch-action:none}.loading-spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10}.loading-spinner ion-spinner{--color: rgba(255, 255, 255, .8);width:48px;height:48px}.error-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;text-align:center;color:#fffc;font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:500;padding:20px;background:#00000080;border-radius:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.lightbox-bottom-section{position:fixed;bottom:0;left:0;right:0;z-index:100;display:flex;flex-direction:column;background:linear-gradient(to top,rgba(0,0,0,.8) 0%,rgba(0,0,0,.6) 50%,rgba(0,0,0,.4) 75%,transparent 100%);pointer-events:none}.lightbox-controls{display:flex;align-items:center;justify-content:center;gap:24px;padding:16px 20px 12px;pointer-events:none}.nav-button,.counter{pointer-events:auto}.nav-button{background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease;padding:0;margin:0;outline:none}.nav-button:hover:not(:disabled){background:#fff3;transform:scale(1.05)}.nav-button:active:not(:disabled){transform:scale(.95)}.nav-button:disabled{opacity:.3;cursor:not-allowed}.nav-button svg{width:24px;height:24px}.counter{color:#fff;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:500;line-height:1;padding:10px 16px;background:#00000080;border-radius:100px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);white-space:nowrap}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-bottom-section{padding-bottom:env(safe-area-inset-bottom)}}.lightbox-footer{display:flex;padding:12px 20px 20px;pointer-events:none}.footer-actions{display:flex;align-items:center;justify-content:space-between;gap:16px;pointer-events:auto}.action-buttons-left{display:flex;align-items:center;gap:16px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-with-count::ng-deep button,.action-button-share::ng-deep button{background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;color:#fff!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:all .2s ease}.action-button-like::ng-deep button:hover,.action-button-comment::ng-deep button:hover,.action-button-with-count::ng-deep button:hover,.action-button-share::ng-deep button:hover{background:#fff3!important;transform:scale(1.02)}.action-button-like::ng-deep button:active,.action-button-comment::ng-deep button:active,.action-button-with-count::ng-deep button:active,.action-button-share::ng-deep button:active{transform:scale(.98)}.action-button-like::ng-deep button svg,.action-button-comment::ng-deep button svg,.action-button-with-count::ng-deep button svg,.action-button-share::ng-deep button svg,.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon,.action-button-like::ng-deep button .btn__content,.action-button-comment::ng-deep button .btn__content,.action-button-with-count::ng-deep button .btn__content{color:#fff!important;fill:#fff!important}.action-button-like::ng-deep button .btn__icon svg,.action-button-comment::ng-deep button .btn__icon svg,.action-button-with-count::ng-deep button .btn__icon svg,.action-button-share::ng-deep button .btn__icon svg{color:#fff!important;fill:#fff!important;display:block!important;opacity:1!important;visibility:visible!important;width:20px!important;height:20px!important}.action-button-like::ng-deep button .btn__icon,.action-button-comment::ng-deep button .btn__icon,.action-button-with-count::ng-deep button .btn__icon,.action-button-share::ng-deep button .btn__icon{display:flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.action-button-like[data-liked=true]::ng-deep button svg{fill:#f91880!important;color:#f91880!important}.action-button-like[data-liked=true]::ng-deep button{border-color:#f918804d!important}.action-button-like,.action-button-comment,.action-button-share{flex-shrink:0;border-radius:50%}.action-button-like::ng-deep button,.action-button-comment::ng-deep button,.action-button-share::ng-deep button{border-radius:50%!important;width:44px!important;height:44px!important;min-width:44px!important;min-height:44px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}@media (min-width: 768px){.lightbox-header{padding:24px}.close-button{width:48px;height:48px}.lightbox-controls{padding:20px 24px 16px}.nav-button{width:48px;height:48px}.counter{font-size:var(--font-size-base);padding:12px 20px}.lightbox-footer{padding:16px 24px 24px}.action-button-like::ng-deep button,.action-button-comment::ng-deep button{height:48px;padding:0 20px}.action-button-share::ng-deep button{width:48px!important;height:48px!important;min-width:48px!important;min-height:48px!important}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes zoomIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.image-wrapper,.nav-button,.lightbox-caption{transition:none}}.nav-button:focus-visible{outline:2px solid white;outline-offset:2px}.lightbox-description-container{position:absolute;bottom:85px;left:16px;right:16px;max-height:30vh;overflow-y:auto;background:#fff;border-radius:16px;padding:16px;color:#111827;z-index:90;opacity:0;visibility:hidden;transition:all .3s ease;transform:translateY(10px);pointer-events:auto;box-shadow:0 4px 24px #00000040}.lightbox-description-container.show{opacity:1;visibility:visible;transform:translateY(0)}.description-loader{display:flex;align-items:center;justify-content:center;gap:12px;padding:12px 0}.description-loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:#6b7280}.description-error{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:12px 0}.description-error span{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:#111827}.description-error .retry-button{background:var(--color-accent, #6B5FF5);border:none;color:#fff;border-radius:20px;padding:6px 16px;font-size:var(--font-size-xs);cursor:pointer;font-family:Brockmann,sans-serif;transition:background .2s}.description-error .retry-button:active{background:var(--color-accent-dark, #5A4EE3)}.ai-description-header{display:flex;align-items:center;gap:6px;margin-bottom:8px;color:var(--color-accent, #6B5FF5);font-family:Brockmann,sans-serif;font-weight:600;font-size:var(--font-size-sm)}.ai-description-header ds-icon::ng-deep svg{fill:var(--color-accent, #6B5FF5);color:var(--color-accent, #6B5FF5)}.description-content p{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);line-height:1.5;color:#111827;white-space:pre-wrap;margin:0}@supports (padding-bottom: env(safe-area-inset-bottom)){.lightbox-description-container{bottom:calc(85px + env(safe-area-inset-bottom))}}\n"] }]
15198
+ }], ctorParameters: () => [{ type: i1.GestureController }], propDecorators: { images: [{
15199
+ type: Input
15200
+ }], author: [{
15201
+ type: Input
15202
+ }], initialIndex: [{
15203
+ type: Input
15204
+ }], enableZoom: [{
15205
+ type: Input
15206
+ }], showControls: [{
15207
+ type: Input
15208
+ }], enableSwipe: [{
15209
+ type: Input
15210
+ }], showInfo: [{
15211
+ type: Input
15212
+ }], showActions: [{
15213
+ type: Input
15214
+ }], showDownload: [{
15215
+ type: Input
15216
+ }], onDownload: [{
15217
+ type: Input
15218
+ }], animation: [{
15219
+ type: Input
15220
+ }], onCloseRequested: [{
15221
+ type: Input
15222
+ }], swiperContainer: [{
15223
+ type: ViewChild,
15224
+ args: ['swiperContainer', { read: ElementRef }]
15225
+ }] } });
15226
+
14655
15227
  /**
14656
15228
  * DsMobileLightboxPdfComponent
14657
15229
  *
@@ -15155,6 +15727,49 @@ class DsMobileLightboxService {
15155
15727
  // Return dismiss function
15156
15728
  return () => this.close();
15157
15729
  }
15730
+ /**
15731
+ * Open the image lightbox with one or more images that support descriptions
15732
+ *
15733
+ * @param options Configuration options for the image lightbox with descriptions
15734
+ * @returns Promise that resolves to a dismiss function
15735
+ */
15736
+ async openImagesWithDescription(options) {
15737
+ console.log('[Lightbox] Opening images with description with options:', options);
15738
+ // Close any existing lightbox
15739
+ if (this.currentLightbox) {
15740
+ this.close();
15741
+ }
15742
+ // Create the component
15743
+ const componentRef = createComponent(DsMobileLightboxImageWithDescriptionComponent, {
15744
+ environmentInjector: this.injector
15745
+ });
15746
+ // Set component props
15747
+ componentRef.instance.images = options.images;
15748
+ componentRef.instance.author = options.author;
15749
+ componentRef.instance.initialIndex = options.initialIndex ?? 0;
15750
+ componentRef.instance.enableZoom = options.enableZoom !== false;
15751
+ componentRef.instance.showControls = options.showControls !== false;
15752
+ componentRef.instance.enableSwipe = options.enableSwipe !== false;
15753
+ componentRef.instance.showInfo = options.showInfo !== false;
15754
+ componentRef.instance.showActions = options.showActions ?? false;
15755
+ componentRef.instance.showDownload = options.showDownload ?? false;
15756
+ componentRef.instance.onDownload = options.onDownload;
15757
+ componentRef.instance.animation = options.animation ?? 'fade';
15758
+ // Set up close callback
15759
+ componentRef.instance.onCloseRequested = () => {
15760
+ this.close();
15761
+ };
15762
+ // Attach to application
15763
+ this.appRef.attachView(componentRef.hostView);
15764
+ // Append to body
15765
+ const domElem = componentRef.hostView.rootNodes[0];
15766
+ document.body.appendChild(domElem);
15767
+ // Store reference
15768
+ this.currentLightbox = componentRef;
15769
+ console.log('[Lightbox] Image with description lightbox rendered');
15770
+ // Return dismiss function
15771
+ return () => this.close();
15772
+ }
15158
15773
  /**
15159
15774
  * Open the PDF lightbox (opens native PDF viewer)
15160
15775
  *
@@ -30167,6 +30782,7 @@ class MobileHomePageComponent {
30167
30782
  familyAccessService;
30168
30783
  peerMessaging;
30169
30784
  peerChat;
30785
+ lightboxService;
30170
30786
  pageComponent;
30171
30787
  isPeerGroupConversation = isPeerGroupConversation;
30172
30788
  // isLoading is owned by PageLoadingService so the layout can react to it
@@ -30188,7 +30804,7 @@ class MobileHomePageComponent {
30188
30804
  modalCtrl = inject(ModalController);
30189
30805
  vendorModal = inject(DsMobileServiceVendorModalService);
30190
30806
  newInquiryModal = inject(DsMobileNewInquiryModalService);
30191
- constructor(router, navCtrl, userService, postsService, postModal, trackingPermissionService, bottomSheet, familyAccessService, peerMessaging, peerChat) {
30807
+ constructor(router, navCtrl, userService, postsService, postModal, trackingPermissionService, bottomSheet, familyAccessService, peerMessaging, peerChat, lightboxService) {
30192
30808
  this.router = router;
30193
30809
  this.navCtrl = navCtrl;
30194
30810
  this.userService = userService;
@@ -30199,6 +30815,7 @@ class MobileHomePageComponent {
30199
30815
  this.familyAccessService = familyAccessService;
30200
30816
  this.peerMessaging = peerMessaging;
30201
30817
  this.peerChat = peerChat;
30818
+ this.lightboxService = lightboxService;
30202
30819
  console.log('MobileHomePageComponent constructor');
30203
30820
  }
30204
30821
  ngOnInit() {
@@ -30343,7 +30960,7 @@ class MobileHomePageComponent {
30343
30960
  }
30344
30961
  }
30345
30962
  }
30346
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHomePageComponent, deps: [{ token: i1$3.Router }, { token: i1.NavController }, { token: UserService }, { token: PostsService }, { token: DsMobilePostDetailModalService }, { token: TrackingPermissionService }, { token: DsMobileBottomSheetService }, { token: FamilyAccessService }, { token: PeerMessagingService }, { token: PeerChatLauncherService }], target: i0.ɵɵFactoryTarget.Component });
30963
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileHomePageComponent, deps: [{ token: i1$3.Router }, { token: i1.NavController }, { token: UserService }, { token: PostsService }, { token: DsMobilePostDetailModalService }, { token: TrackingPermissionService }, { token: DsMobileBottomSheetService }, { token: FamilyAccessService }, { token: PeerMessagingService }, { token: PeerChatLauncherService }, { token: DsMobileLightboxService }], target: i0.ɵɵFactoryTarget.Component });
30347
30964
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MobileHomePageComponent, isStandalone: true, selector: "app-home-page", viewQueries: [{ propertyName: "pageComponent", first: true, predicate: ["pageComponent"], descendants: true }], ngImport: i0, template: `
30348
30965
  <!-- Full-screen loading state (first entry) — rendered by layout, not here -->
30349
30966
 
@@ -30803,7 +31420,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
30803
31420
  } <!-- end @if (!isCoveringScreen()) -->
30804
31421
 
30805
31422
  `, styles: [".posts-list,.messages-preview-list{display:flex;flex-direction:column}.property-banner-nav{display:block;width:100%;border-radius:12px;cursor:pointer;-webkit-tap-highlight-color:transparent}.property-banner-nav:focus-visible{outline:2px solid var(--color-accent, #6B5FF5);outline-offset:2px}.inquiries-list,.services-preview-list{display:flex;flex-direction:column}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.empty-state ds-button{display:block;margin-top:16px}.empty-state ds-button::ng-deep .btn{width:100%;border-radius:9999px}.empty-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;color:var(--color-text-primary);margin-top:-16px;z-index:4}.empty-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);color:var(--color-text-secondary);margin:0}@keyframes slideDown{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}.welcome-toast{padding:10px 14px;border-radius:12px;background:var(--color-background-brand-secondary, #EEF0FF);display:flex;align-items:flex-start;gap:10px;font-size:14px;font-weight:500;color:var(--color-accent, #6B5FF5);animation:slideDown .2s ease-out}.toast-icon{width:20px;height:20px;border-radius:50%;background:var(--color-accent, #6B5FF5);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff;margin-top:1px}.welcome-toast-content{flex:1;display:flex;flex-direction:column;gap:2px}.welcome-toast-heading{font-family:Brockmann,sans-serif;font-size:14px;font-weight:600;color:var(--color-brand-content, #3B3691);margin:0}.welcome-toast-text{font-family:Brockmann,sans-serif;font-size:13px;line-height:1.4;color:var(--color-brand-content, #3B3691);margin:0;opacity:.8}.welcome-toast-text strong{font-weight:600;opacity:1}.toast-dismiss{margin-left:auto;background:none;border:none;cursor:pointer;flex-shrink:0;color:var(--color-accent, #6B5FF5);display:flex;align-items:center;justify-content:center}.home-content--animating{animation:homeReveal .3s var(--spring-curve-smooth) both}@keyframes homeReveal{0%{opacity:0;transform:translateY(128px)}to{opacity:1;transform:translateY(0)}}\n"] }]
30806
- }], ctorParameters: () => [{ type: i1$3.Router }, { type: i1.NavController }, { type: UserService }, { type: PostsService }, { type: DsMobilePostDetailModalService }, { type: TrackingPermissionService }, { type: DsMobileBottomSheetService }, { type: FamilyAccessService }, { type: PeerMessagingService }, { type: PeerChatLauncherService }], propDecorators: { pageComponent: [{
31423
+ }], ctorParameters: () => [{ type: i1$3.Router }, { type: i1.NavController }, { type: UserService }, { type: PostsService }, { type: DsMobilePostDetailModalService }, { type: TrackingPermissionService }, { type: DsMobileBottomSheetService }, { type: FamilyAccessService }, { type: PeerMessagingService }, { type: PeerChatLauncherService }, { type: DsMobileLightboxService }], propDecorators: { pageComponent: [{
30807
31424
  type: ViewChild,
30808
31425
  args: ['pageComponent']
30809
31426
  }] } });
@@ -36458,5 +37075,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
36458
37075
  * Generated bundle index. Do not edit.
36459
37076
  */
36460
37077
 
36461
- export { AcceptInvitePageComponent, ActionCommentComponent, ActionLikeComponent, AvatarUploadPageComponent, BaseModalService, ContentRowComponent, CreateAccountPageComponent, DEFAULT_SERVICE_PAGE_LABELS, DsAppIconComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileAccessSheetComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAddGroupTenantsModalComponent, DsMobileAppLoadingComponent, DsMobileAttachmentPreviewComponent, DsMobileBookingConfirmationWrapperComponent, DsMobileBookingModalComponent, DsMobileBookingModalService, DsMobileBookingSummaryComponent, DsMobileBottomSheetHeaderComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCapacitySheetComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileCommunityAdminPickerComponent, DsMobileCommunityAdminsModalComponent, DsMobileConfirmationSheetComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileCreateGroupModalComponent, DsMobileDropdownComponent, DsMobileEditGroupModalComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFacilityArchiveConfirmationComponent, DsMobileFacilityCreationConfirmationWrapperComponent, DsMobileFacilityCreationModalComponent, DsMobileFacilityCreationModalService, DsMobileFacilityDeleteConfirmationComponent, DsMobileFacilityDetailModalComponent, DsMobileFacilityDetailModalService, DsMobileFileAttachmentComponent, DsMobileGlassSpinnerComponent, DsMobileGroupAvatarStackComponent, DsMobileGroupMembersModalComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileIllustrationComponent, DsMobileImagePlaceholderComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemBookingComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileListSearchComponent, DsMobileLoaderOverlayComponent, DsMobileLongPressDirective, DsMobileMediaActionsPanelComponent, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobileOfflineBannerComponent, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobilePillComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobilePriceSheetComponent, DsMobileProfileActionsSheetComponent, DsMobilePromptBottomSheetComponent, DsMobilePropertyBannerComponent, DsMobileRichTextEditorComponent, DsMobileSectionComponent, DsMobileServiceVendorModalService, DsMobileServiceVendorSheetComponent, DsMobileSwiperComponent, DsMobileSwiperWithNavComponent, DsMobileSystemMessageBannerComponent, DsMobileTabBarComponent, DsMobileTabsComponent, DsMobileTenantPickerModalComponent, DsMobileWhenCanBookSheetComponent, DsMobileWhoCanBookSheetComponent, DsTextInputComponent, FamilyAccessPageComponent, FamilyAccessService, InquiriesService, InviteSuccessPageComponent, MediaPickerService, MobileBookingPageComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobileModalBase, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, PageLoadingService, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, PostsService, SectionHeaderComponent, ServicesPageComponent, SignInPageComponent, SignInToAcceptPageComponent, TenantChatPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, TrackingPermissionService, UserService, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition };
37078
+ export { AcceptInvitePageComponent, ActionCommentComponent, ActionLikeComponent, AvatarUploadPageComponent, BaseModalService, ContentRowComponent, CreateAccountPageComponent, DEFAULT_SERVICE_PAGE_LABELS, DsAppIconComponent, DsAvatarWithBadgeComponent, DsLogoComponent, DsMobileAccessSheetComponent, DsMobileActionListItemComponent, DsMobileActionsBottomSheetComponent, DsMobileAddGroupTenantsModalComponent, DsMobileAppLoadingComponent, DsMobileAttachmentPreviewComponent, DsMobileBookingConfirmationWrapperComponent, DsMobileBookingModalComponent, DsMobileBookingModalService, DsMobileBookingSummaryComponent, DsMobileBottomSheetHeaderComponent, DsMobileBottomSheetService, DsMobileBottomSheetWrapperComponent, DsMobileCapacitySheetComponent, DsMobileCardInlineBannerComponent, DsMobileCardInlineComponent, DsMobileCardInlineContactComponent, DsMobileCardInlineFileComponent, DsMobileChatModalComponent, DsMobileChatModalService, DsMobileActionsBottomSheetComponent as DsMobileCommentActionsBottomSheetComponent, DsMobileCommentComponent, DsMobileCommunityAdminPickerComponent, DsMobileCommunityAdminsModalComponent, DsMobileConfirmationSheetComponent, DsMobileContactListItemComponent, DsMobileContentComponent, DsMobileCreateGroupModalComponent, DsMobileDropdownComponent, DsMobileEditGroupModalComponent, DsMobileEmptyStateComponent, DsMobileFabComponent, DsMobileFacilityArchiveConfirmationComponent, DsMobileFacilityCreationConfirmationWrapperComponent, DsMobileFacilityCreationModalComponent, DsMobileFacilityCreationModalService, DsMobileFacilityDeleteConfirmationComponent, DsMobileFacilityDetailModalComponent, DsMobileFacilityDetailModalService, DsMobileFileAttachmentComponent, DsMobileGlassSpinnerComponent, DsMobileGroupAvatarStackComponent, DsMobileGroupMembersModalComponent, DsMobileHandbookDetailModalComponent, DsMobileHandbookDetailModalService, DsMobileHandbookFolderComponent, DsMobileHandbookFolderMiniComponent, DsMobileHeaderContentComponent, DsMobileHeaderContentTileComponent, DsMobileIllustrationComponent, DsMobileImagePlaceholderComponent, DsMobileInlinePhotoComponent, DsMobileInlineTabsComponent, DsMobileInteractiveListItemBookingComponent, DsMobileInteractiveListItemInquiryComponent, DsMobileInteractiveListItemMessageComponent, DsMobileInteractiveListItemPostComponent, DsMobileLightboxImageComponent as DsMobileLightboxComponent, DsMobileLightboxFooterComponent, DsMobileLightboxHeaderComponent, DsMobileLightboxImageComponent, DsMobileLightboxImageWithDescriptionComponent, DsMobileLightboxPdfComponent, DsMobileLightboxService, DsMobileListItemComponent, DsMobileListItemStaticComponent, DsMobileListSearchComponent, DsMobileLoaderOverlayComponent, DsMobileLongPressDirective, DsMobileMediaActionsPanelComponent, DsMobileMessageBubbleComponent, DsMobileMessageComposerComponent, DsMobileModalBaseComponent, DsMobileModalService, DsMobileNewInquiryModalComponent, DsMobileNewInquiryModalService, DsMobileOfflineBannerComponent, DsMobilePageDetailsComponent, DsMobilePageMainComponent, DsMobilePillComponent, DsMobileActionsBottomSheetComponent as DsMobilePostActionsBottomSheetComponent, DsMobilePostComposerComponent, DsMobilePostCreateBottomSheetComponent, DsMobilePostDetailModalComponent, DsMobilePostDetailModalService, DsMobilePriceSheetComponent, DsMobileProfileActionsSheetComponent, DsMobilePromptBottomSheetComponent, DsMobilePropertyBannerComponent, DsMobileRichTextEditorComponent, DsMobileSectionComponent, DsMobileServiceVendorModalService, DsMobileServiceVendorSheetComponent, DsMobileSwiperComponent, DsMobileSwiperWithNavComponent, DsMobileSystemMessageBannerComponent, DsMobileTabBarComponent, DsMobileTabsComponent, DsMobileTenantPickerModalComponent, DsMobileWhenCanBookSheetComponent, DsMobileWhoCanBookSheetComponent, DsTextInputComponent, FamilyAccessPageComponent, FamilyAccessService, InquiriesService, InviteSuccessPageComponent, MediaPickerService, MobileBookingPageComponent, MobileCommunityPageComponent, MobileHandbookPageComponent, MobileHomePageComponent, MobileInquiriesPageComponent, MobileInquiryDetailPageComponent, MobileModalBase, MobilePageBase, MobilePostDetailPageComponent, MobileTabsExampleComponent, PageLoadingService, PostActionsComponent, PostAttachmentsComponent, PostContentComponent, PostCreatePageComponent, PostMediaComponent, PostPdfAttachmentComponent, PostTextComponent, PostsService, SectionHeaderComponent, ServicesPageComponent, SignInPageComponent, SignInToAcceptPageComponent, TenantChatPageComponent, TileContentComponent, TileIconComponent, TileLabelComponent, TileValueComponent, TrackingPermissionService, UserService, WhitelabelDemoModalComponent, WhitelabelDemoModalService, WhitelabelService, customBackTransition, customPageTransition };
36462
37079
  //# sourceMappingURL=propbinder-mobile-design.mjs.map