@propbinder/mobile-design 0.2.22 → 0.2.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/propbinder-mobile-design.mjs +104 -176
- package/fesm2022/propbinder-mobile-design.mjs.map +1 -1
- package/index.d.ts +22 -26
- package/package.json +1 -1
- package/styles/ionic.css +18 -0
|
@@ -1212,10 +1212,15 @@ class DsMobileListItemComponent {
|
|
|
1212
1212
|
// (but not the host element itself)
|
|
1213
1213
|
const target = event.target;
|
|
1214
1214
|
const closestInteractive = target.closest('button, a, input, select, textarea, [role="button"]');
|
|
1215
|
-
//
|
|
1215
|
+
// Only block if the interactive element is a REAL child action (like a button in trailing slot),
|
|
1216
|
+
// but NOT if it's just the host itself or something inside leading/main that shouldn't block.
|
|
1216
1217
|
if (closestInteractive && closestInteractive !== event.currentTarget) {
|
|
1217
|
-
//
|
|
1218
|
-
|
|
1218
|
+
// If the target is inside content-leading or content-main, we generally want to allow the click
|
|
1219
|
+
const isInsidePrimaryContent = !!target.closest('[content-leading], [content-main], .structured-title, .structured-subtitle');
|
|
1220
|
+
if (!isInsidePrimaryContent) {
|
|
1221
|
+
// console.log('[ListItem] Click ignored - came from interactive child in trailing/unknown slot:', closestInteractive);
|
|
1222
|
+
return;
|
|
1223
|
+
}
|
|
1219
1224
|
}
|
|
1220
1225
|
if (!this.longPressTriggered) {
|
|
1221
1226
|
// console.log('[ListItem] Emitting itemClick');
|
|
@@ -11805,21 +11810,14 @@ class MobileModalBase {
|
|
|
11805
11810
|
* - Any custom CSS padding value
|
|
11806
11811
|
*
|
|
11807
11812
|
* @default '0'
|
|
11808
|
-
*
|
|
11809
|
-
* @example
|
|
11810
|
-
* ```html
|
|
11811
|
-
* <!-- Default: sections handle padding -->
|
|
11812
|
-
* <ds-mobile-modal-base headerTitle="Details">
|
|
11813
|
-
* <ds-mobile-section headline="Info">...</ds-mobile-section>
|
|
11814
|
-
* </ds-mobile-modal-base>
|
|
11815
|
-
*
|
|
11816
|
-
* <!-- Legacy: content without sections -->
|
|
11817
|
-
* <ds-mobile-modal-base headerTitle="Details" contentPadding="20px">
|
|
11818
|
-
* <div>Padded content</div>
|
|
11819
|
-
* </ds-mobile-modal-base>
|
|
11820
|
-
* ```
|
|
11821
11813
|
*/
|
|
11822
11814
|
contentPadding = input('0', ...(ngDevMode ? [{ debugName: "contentPadding" }] : []));
|
|
11815
|
+
/**
|
|
11816
|
+
* Enable auto-height behavior for bottom sheets
|
|
11817
|
+
* When true, sets [fullscreen]="false" on ion-content and enforces flex: 0 0 auto
|
|
11818
|
+
* @default false
|
|
11819
|
+
*/
|
|
11820
|
+
isAutoHeight = input(false, ...(ngDevMode ? [{ debugName: "isAutoHeight" }] : []));
|
|
11823
11821
|
/**
|
|
11824
11822
|
* Emitted when modal is closed
|
|
11825
11823
|
*/
|
|
@@ -12065,14 +12063,14 @@ class MobileModalBase {
|
|
|
12065
12063
|
});
|
|
12066
12064
|
}
|
|
12067
12065
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileModalBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
12068
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: MobileModalBase, isStandalone: true, inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, headerTitle: { classPropertyName: "headerTitle", publicName: "headerTitle", isSignal: true, isRequired: false, transformFunction: null }, headerMeta: { classPropertyName: "headerMeta", publicName: "headerMeta", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, enableKeyboardHandling: { classPropertyName: "enableKeyboardHandling", publicName: "enableKeyboardHandling", isSignal: true, isRequired: false, transformFunction: null }, hasFixedBottom: { classPropertyName: "hasFixedBottom", publicName: "hasFixedBottom", isSignal: true, isRequired: false, transformFunction: null }, contentPadding: { classPropertyName: "contentPadding", publicName: "contentPadding", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", keyboardWillShow: "keyboardWillShow", keyboardWillHide: "keyboardWillHide" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], ngImport: i0 });
|
|
12066
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: MobileModalBase, isStandalone: true, inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, headerTitle: { classPropertyName: "headerTitle", publicName: "headerTitle", isSignal: true, isRequired: false, transformFunction: null }, headerMeta: { classPropertyName: "headerMeta", publicName: "headerMeta", isSignal: true, isRequired: false, transformFunction: null }, closeButtonLabel: { classPropertyName: "closeButtonLabel", publicName: "closeButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, enableKeyboardHandling: { classPropertyName: "enableKeyboardHandling", publicName: "enableKeyboardHandling", isSignal: true, isRequired: false, transformFunction: null }, hasFixedBottom: { classPropertyName: "hasFixedBottom", publicName: "hasFixedBottom", isSignal: true, isRequired: false, transformFunction: null }, contentPadding: { classPropertyName: "contentPadding", publicName: "contentPadding", isSignal: true, isRequired: false, transformFunction: null }, isAutoHeight: { classPropertyName: "isAutoHeight", publicName: "isAutoHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", keyboardWillShow: "keyboardWillShow", keyboardWillHide: "keyboardWillHide" }, viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], ngImport: i0 });
|
|
12069
12067
|
}
|
|
12070
12068
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileModalBase, decorators: [{
|
|
12071
12069
|
type: Directive
|
|
12072
12070
|
}], propDecorators: { ionContent: [{
|
|
12073
12071
|
type: ViewChild,
|
|
12074
12072
|
args: [IonContent, { read: IonContent }]
|
|
12075
|
-
}], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], headerTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTitle", required: false }] }], headerMeta: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerMeta", required: false }] }], closeButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeButtonLabel", required: false }] }], enableKeyboardHandling: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableKeyboardHandling", required: false }] }], hasFixedBottom: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasFixedBottom", required: false }] }], contentPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentPadding", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], keyboardWillShow: [{ type: i0.Output, args: ["keyboardWillShow"] }], keyboardWillHide: [{ type: i0.Output, args: ["keyboardWillHide"] }] } });
|
|
12073
|
+
}], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], headerTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTitle", required: false }] }], headerMeta: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerMeta", required: false }] }], closeButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeButtonLabel", required: false }] }], enableKeyboardHandling: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableKeyboardHandling", required: false }] }], hasFixedBottom: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasFixedBottom", required: false }] }], contentPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentPadding", required: false }] }], isAutoHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAutoHeight", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], keyboardWillShow: [{ type: i0.Output, args: ["keyboardWillShow"] }], keyboardWillHide: [{ type: i0.Output, args: ["keyboardWillHide"] }] } });
|
|
12076
12074
|
|
|
12077
12075
|
/**
|
|
12078
12076
|
* DsMobileModalBaseComponent
|
|
@@ -12204,10 +12202,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12204
12202
|
if (showHeaderValue === false)
|
|
12205
12203
|
return false;
|
|
12206
12204
|
// Auto-detect: show header if there's any header content
|
|
12207
|
-
return !!(this.headerTitle() ||
|
|
12208
|
-
this.headerMeta() ||
|
|
12209
|
-
this.hasContentInSlot(this.headerLeading) ||
|
|
12210
|
-
this.hasContentInSlot(this.headerMain));
|
|
12205
|
+
return !!(this.headerTitle() || this.headerMeta() || this.hasContentInSlot(this.headerLeading) || this.hasContentInSlot(this.headerMain));
|
|
12211
12206
|
}
|
|
12212
12207
|
/**
|
|
12213
12208
|
* Check if a content child slot has actual content
|
|
@@ -12216,13 +12211,12 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12216
12211
|
if (!slot)
|
|
12217
12212
|
return false;
|
|
12218
12213
|
const element = slot.nativeElement;
|
|
12219
|
-
return element && (element.childNodes.length > 0 ||
|
|
12220
|
-
element.textContent?.trim().length > 0);
|
|
12214
|
+
return element && (element.childNodes.length > 0 || element.textContent?.trim().length > 0);
|
|
12221
12215
|
}
|
|
12222
12216
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileModalBaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
12223
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileModalBaseComponent, isStandalone: true, selector: "ds-mobile-modal-base", inputs: { showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--modal-content-padding": "contentPadding()" } }, queries: [{ propertyName: "customLoadingState", first: true, predicate: ["[loading-state]"], descendants: true, read: ElementRef }, { propertyName: "customErrorState", first: true, predicate: ["[error-state]"], descendants: true, read: ElementRef }, { propertyName: "headerLeading", first: true, predicate: ["[header-leading]"], descendants: true, read: ElementRef }, { propertyName: "headerMain", first: true, predicate: ["[header-main]"], descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], usesInheritance: true, ngImport: i0, template: `
|
|
12224
|
-
<ion-content [fullscreen]="
|
|
12225
|
-
<div class="modal-wrapper" [class.headerless]="!shouldShowHeader()">
|
|
12217
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DsMobileModalBaseComponent, isStandalone: true, selector: "ds-mobile-modal-base", inputs: { showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--modal-content-padding": "contentPadding()", "class.is-auto-height": "isAutoHeight()" } }, queries: [{ propertyName: "customLoadingState", first: true, predicate: ["[loading-state]"], descendants: true, read: ElementRef }, { propertyName: "customErrorState", first: true, predicate: ["[error-state]"], descendants: true, read: ElementRef }, { propertyName: "headerLeading", first: true, predicate: ["[header-leading]"], descendants: true, read: ElementRef }, { propertyName: "headerMain", first: true, predicate: ["[header-main]"], descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, read: IonContent }], usesInheritance: true, ngImport: i0, template: `
|
|
12218
|
+
<ion-content [fullscreen]="!isAutoHeight()" [scrollY]="!isAutoHeight()" class="modal-base-content" [class.is-auto-height]="isAutoHeight()">
|
|
12219
|
+
<div class="modal-wrapper" [class.headerless]="!shouldShowHeader()" [class.is-auto-height]="isAutoHeight()">
|
|
12226
12220
|
<!-- Header (conditional) -->
|
|
12227
12221
|
@if (shouldShowHeader()) {
|
|
12228
12222
|
<div class="modal-header">
|
|
@@ -12231,7 +12225,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12231
12225
|
<div class="header-leading">
|
|
12232
12226
|
<ng-content select="[header-leading]"></ng-content>
|
|
12233
12227
|
</div>
|
|
12234
|
-
|
|
12228
|
+
|
|
12235
12229
|
<!-- Main (title + meta or custom) -->
|
|
12236
12230
|
<div class="header-main">
|
|
12237
12231
|
@if (headerTitle()) {
|
|
@@ -12242,30 +12236,16 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12242
12236
|
}
|
|
12243
12237
|
<ng-content select="[header-main]"></ng-content>
|
|
12244
12238
|
</div>
|
|
12245
|
-
|
|
12239
|
+
|
|
12246
12240
|
<!-- Close button (in header) -->
|
|
12247
|
-
<ds-icon-button
|
|
12248
|
-
icon="remixCloseLine"
|
|
12249
|
-
variant="secondary"
|
|
12250
|
-
size="lg"
|
|
12251
|
-
(clicked)="close()"
|
|
12252
|
-
class="close-button"
|
|
12253
|
-
[attr.aria-label]="closeButtonLabel()"
|
|
12254
|
-
/>
|
|
12241
|
+
<ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (clicked)="close()" class="close-button" [attr.aria-label]="closeButtonLabel()" />
|
|
12255
12242
|
</div>
|
|
12256
12243
|
</div>
|
|
12257
12244
|
}
|
|
12258
|
-
|
|
12245
|
+
|
|
12259
12246
|
<!-- Absolute close button (when header is hidden) -->
|
|
12260
12247
|
@if (!shouldShowHeader()) {
|
|
12261
|
-
<ds-icon-button
|
|
12262
|
-
icon="remixCloseLine"
|
|
12263
|
-
variant="secondary"
|
|
12264
|
-
size="lg"
|
|
12265
|
-
(clicked)="close()"
|
|
12266
|
-
class="close-button-absolute"
|
|
12267
|
-
[attr.aria-label]="closeButtonLabel()"
|
|
12268
|
-
/>
|
|
12248
|
+
<ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (clicked)="close()" class="close-button-absolute" [attr.aria-label]="closeButtonLabel()" />
|
|
12269
12249
|
}
|
|
12270
12250
|
|
|
12271
12251
|
<!-- Content Container -->
|
|
@@ -12274,7 +12254,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12274
12254
|
<div class="custom-loading-slot" [class.state-hidden]="!(loading() && hasCustomLoadingState)">
|
|
12275
12255
|
<ng-content select="[loading-state]"></ng-content>
|
|
12276
12256
|
</div>
|
|
12277
|
-
|
|
12257
|
+
|
|
12278
12258
|
<!-- Default Loading State -->
|
|
12279
12259
|
@if (loading() && !hasCustomLoadingState) {
|
|
12280
12260
|
<div class="modal-loading-state">
|
|
@@ -12282,12 +12262,12 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12282
12262
|
<p class="loading-text">Loading...</p>
|
|
12283
12263
|
</div>
|
|
12284
12264
|
}
|
|
12285
|
-
|
|
12265
|
+
|
|
12286
12266
|
<!-- Custom Error State Slot - always present -->
|
|
12287
12267
|
<div class="custom-error-slot" [class.state-hidden]="!(error() && !loading() && hasCustomErrorState)">
|
|
12288
12268
|
<ng-content select="[error-state]"></ng-content>
|
|
12289
12269
|
</div>
|
|
12290
|
-
|
|
12270
|
+
|
|
12291
12271
|
<!-- Default Error State -->
|
|
12292
12272
|
@if (error() && !loading() && !hasCustomErrorState) {
|
|
12293
12273
|
<div class="modal-error-state">
|
|
@@ -12296,7 +12276,7 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12296
12276
|
<p class="error-state-description">{{ error() }}</p>
|
|
12297
12277
|
</div>
|
|
12298
12278
|
}
|
|
12299
|
-
|
|
12279
|
+
|
|
12300
12280
|
<!-- Main content - always rendered but hidden when loading/error -->
|
|
12301
12281
|
<div class="modal-main-content" [class.content-hidden]="loading() || !!error()">
|
|
12302
12282
|
<ng-content></ng-content>
|
|
@@ -12306,24 +12286,20 @@ class DsMobileModalBaseComponent extends MobileModalBase {
|
|
|
12306
12286
|
</ion-content>
|
|
12307
12287
|
|
|
12308
12288
|
<!-- Fixed Bottom Component / Footer (slides with keyboard) -->
|
|
12309
|
-
<div class="modal-fixed-bottom" [class.bottom-hidden]="!hasFixedBottom() || loading() || error()">
|
|
12289
|
+
<div class="modal-fixed-bottom" [class.bottom-hidden]="!hasFixedBottom() || loading() || error()" [class.is-auto-height]="isAutoHeight()">
|
|
12310
12290
|
<ng-content select="[fixed-bottom]"></ng-content>
|
|
12311
12291
|
<ng-content select="[footer]"></ng-content>
|
|
12312
12292
|
</div>
|
|
12313
|
-
`, isInline: true, styles: [":host{display:block;position:relative;height:100%;width:100%}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{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}.modal-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}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative;padding-bottom:var(--fixed-bottom-height, 0px);transition:padding-bottom .3s ease-out}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:
|
|
12293
|
+
`, isInline: true, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{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}.modal-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}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative;padding-bottom:var(--fixed-bottom-height, 0px);transition:padding-bottom .3s ease-out}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:calc(env(safe-area-inset-bottom,0px) + 16px)}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@supports (padding: env(safe-area-inset-bottom)){.modal-content-container{padding-bottom:env(safe-area-inset-bottom)}}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsIconComponent, selector: "ds-icon", inputs: ["name", "size", "color", "interactive"] }] });
|
|
12314
12294
|
}
|
|
12315
12295
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileModalBaseComponent, decorators: [{
|
|
12316
12296
|
type: Component,
|
|
12317
|
-
args: [{ selector: 'ds-mobile-modal-base', standalone: true, imports: [
|
|
12318
|
-
|
|
12319
|
-
|
|
12320
|
-
DsIconButtonComponent,
|
|
12321
|
-
DsIconComponent
|
|
12322
|
-
], schemas: [CUSTOM_ELEMENTS_SCHEMA], host: {
|
|
12323
|
-
'[style.--modal-content-padding]': 'contentPadding()'
|
|
12297
|
+
args: [{ selector: 'ds-mobile-modal-base', standalone: true, imports: [CommonModule, IonContent, DsIconButtonComponent, DsIconComponent], schemas: [CUSTOM_ELEMENTS_SCHEMA], host: {
|
|
12298
|
+
'[style.--modal-content-padding]': 'contentPadding()',
|
|
12299
|
+
'[class.is-auto-height]': 'isAutoHeight()',
|
|
12324
12300
|
}, template: `
|
|
12325
|
-
<ion-content [fullscreen]="
|
|
12326
|
-
<div class="modal-wrapper" [class.headerless]="!shouldShowHeader()">
|
|
12301
|
+
<ion-content [fullscreen]="!isAutoHeight()" [scrollY]="!isAutoHeight()" class="modal-base-content" [class.is-auto-height]="isAutoHeight()">
|
|
12302
|
+
<div class="modal-wrapper" [class.headerless]="!shouldShowHeader()" [class.is-auto-height]="isAutoHeight()">
|
|
12327
12303
|
<!-- Header (conditional) -->
|
|
12328
12304
|
@if (shouldShowHeader()) {
|
|
12329
12305
|
<div class="modal-header">
|
|
@@ -12332,7 +12308,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
12332
12308
|
<div class="header-leading">
|
|
12333
12309
|
<ng-content select="[header-leading]"></ng-content>
|
|
12334
12310
|
</div>
|
|
12335
|
-
|
|
12311
|
+
|
|
12336
12312
|
<!-- Main (title + meta or custom) -->
|
|
12337
12313
|
<div class="header-main">
|
|
12338
12314
|
@if (headerTitle()) {
|
|
@@ -12343,30 +12319,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
12343
12319
|
}
|
|
12344
12320
|
<ng-content select="[header-main]"></ng-content>
|
|
12345
12321
|
</div>
|
|
12346
|
-
|
|
12322
|
+
|
|
12347
12323
|
<!-- Close button (in header) -->
|
|
12348
|
-
<ds-icon-button
|
|
12349
|
-
icon="remixCloseLine"
|
|
12350
|
-
variant="secondary"
|
|
12351
|
-
size="lg"
|
|
12352
|
-
(clicked)="close()"
|
|
12353
|
-
class="close-button"
|
|
12354
|
-
[attr.aria-label]="closeButtonLabel()"
|
|
12355
|
-
/>
|
|
12324
|
+
<ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (clicked)="close()" class="close-button" [attr.aria-label]="closeButtonLabel()" />
|
|
12356
12325
|
</div>
|
|
12357
12326
|
</div>
|
|
12358
12327
|
}
|
|
12359
|
-
|
|
12328
|
+
|
|
12360
12329
|
<!-- Absolute close button (when header is hidden) -->
|
|
12361
12330
|
@if (!shouldShowHeader()) {
|
|
12362
|
-
<ds-icon-button
|
|
12363
|
-
icon="remixCloseLine"
|
|
12364
|
-
variant="secondary"
|
|
12365
|
-
size="lg"
|
|
12366
|
-
(clicked)="close()"
|
|
12367
|
-
class="close-button-absolute"
|
|
12368
|
-
[attr.aria-label]="closeButtonLabel()"
|
|
12369
|
-
/>
|
|
12331
|
+
<ds-icon-button icon="remixCloseLine" variant="secondary" size="lg" (clicked)="close()" class="close-button-absolute" [attr.aria-label]="closeButtonLabel()" />
|
|
12370
12332
|
}
|
|
12371
12333
|
|
|
12372
12334
|
<!-- Content Container -->
|
|
@@ -12375,7 +12337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
12375
12337
|
<div class="custom-loading-slot" [class.state-hidden]="!(loading() && hasCustomLoadingState)">
|
|
12376
12338
|
<ng-content select="[loading-state]"></ng-content>
|
|
12377
12339
|
</div>
|
|
12378
|
-
|
|
12340
|
+
|
|
12379
12341
|
<!-- Default Loading State -->
|
|
12380
12342
|
@if (loading() && !hasCustomLoadingState) {
|
|
12381
12343
|
<div class="modal-loading-state">
|
|
@@ -12383,12 +12345,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
12383
12345
|
<p class="loading-text">Loading...</p>
|
|
12384
12346
|
</div>
|
|
12385
12347
|
}
|
|
12386
|
-
|
|
12348
|
+
|
|
12387
12349
|
<!-- Custom Error State Slot - always present -->
|
|
12388
12350
|
<div class="custom-error-slot" [class.state-hidden]="!(error() && !loading() && hasCustomErrorState)">
|
|
12389
12351
|
<ng-content select="[error-state]"></ng-content>
|
|
12390
12352
|
</div>
|
|
12391
|
-
|
|
12353
|
+
|
|
12392
12354
|
<!-- Default Error State -->
|
|
12393
12355
|
@if (error() && !loading() && !hasCustomErrorState) {
|
|
12394
12356
|
<div class="modal-error-state">
|
|
@@ -12397,7 +12359,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
12397
12359
|
<p class="error-state-description">{{ error() }}</p>
|
|
12398
12360
|
</div>
|
|
12399
12361
|
}
|
|
12400
|
-
|
|
12362
|
+
|
|
12401
12363
|
<!-- Main content - always rendered but hidden when loading/error -->
|
|
12402
12364
|
<div class="modal-main-content" [class.content-hidden]="loading() || !!error()">
|
|
12403
12365
|
<ng-content></ng-content>
|
|
@@ -12407,11 +12369,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
12407
12369
|
</ion-content>
|
|
12408
12370
|
|
|
12409
12371
|
<!-- Fixed Bottom Component / Footer (slides with keyboard) -->
|
|
12410
|
-
<div class="modal-fixed-bottom" [class.bottom-hidden]="!hasFixedBottom() || loading() || error()">
|
|
12372
|
+
<div class="modal-fixed-bottom" [class.bottom-hidden]="!hasFixedBottom() || loading() || error()" [class.is-auto-height]="isAutoHeight()">
|
|
12411
12373
|
<ng-content select="[fixed-bottom]"></ng-content>
|
|
12412
12374
|
<ng-content select="[footer]"></ng-content>
|
|
12413
12375
|
</div>
|
|
12414
|
-
`, styles: [":host{display:block;position:relative;height:100%;width:100%}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{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}.modal-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}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative;padding-bottom:var(--fixed-bottom-height, 0px);transition:padding-bottom .3s ease-out}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:
|
|
12376
|
+
`, styles: [":host{display:block;position:relative;height:100%;width:100%}:host(.is-auto-height){height:auto}.modal-base-content{--background: var(--color-background-neutral-primary, #ffffff)}.modal-base-content.is-auto-height{--height: auto;height:auto!important;flex:0 0 auto;display:block;contain:none!important}.modal-base-content.is-auto-height::part(scroll){position:relative!important;display:block!important;height:auto!important;overflow:visible!important}.modal-wrapper{display:flex;flex-direction:column;width:100%;background:var(--color-background-neutral-primary, #ffffff)}.modal-wrapper.is-auto-height{flex:0 0 auto}.modal-header{position:sticky;top:0;z-index:10;background:var(--color-background-neutral-primary, #ffffff);border-bottom:1px solid var(--border-color-default);padding:16px}.header-content{display:flex;align-items:center;justify-content:space-between;gap:12px}.header-leading{flex-shrink:0;display:flex;align-items:center}.header-leading:empty{display:none}.header-content:has(.header-leading:empty){gap:16px}.header-main{display:flex;flex-direction:column;min-width:0;flex:1;gap:2px}.modal-title{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}.modal-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}.close-button{flex-shrink:0;border-radius:50%}.close-button::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.close-button-absolute{position:absolute;top:16px;right:16px;z-index:100;flex-shrink:0;border-radius:50%}.close-button-absolute::ng-deep button{border-radius:50%!important;width:36px!important;height:36px!important;min-width:36px!important;min-height:36px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important}.modal-content-container{display:flex;flex-direction:column;width:100%;max-width:640px;margin:0 auto;flex:1;position:relative;padding-bottom:var(--fixed-bottom-height, 0px);transition:padding-bottom .3s ease-out}:host-context(ion-modal.auto-height) .modal-content-container,.modal-wrapper.is-auto-height .modal-content-container{flex:0 0 auto}.modal-wrapper.headerless .modal-content-container{padding-top:0}.modal-main-content{display:flex;flex-direction:column;width:100%;padding-top:0;padding-left:var(--modal-content-padding, 20px);padding-right:var(--modal-content-padding, 20px);padding-bottom:var(--modal-content-padding, 20px)}.modal-main-content.content-hidden,.state-hidden{display:none}.custom-loading-slot,.custom-error-slot{width:100%}.modal-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.loading-spinner{width:48px;height:48px;border:3px solid var(--color-background-neutral-secondary, #f0f0f0);border-top-color:var(--color-primary-base, #2563eb);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin-top:16px}.modal-error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.error-state-title{font-family:Brockmann,sans-serif;font-size:var(--font-size-base);font-weight:600;line-height:1.3;color:var(--color-text-primary, #1a1a1a);margin:0}.error-state-description{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;color:var(--color-text-secondary, #737373);margin:0}.modal-fixed-bottom{position:fixed;bottom:0;left:0;right:0;z-index:1000;pointer-events:none;background:var(--color-background-neutral-primary, #ffffff);box-shadow:0 300px 0 300px var(--color-background-neutral-primary, #ffffff);transform:translateY(calc(-1 * var(--keyboard-height, 0px)));transition:transform .3s cubic-bezier(.215,.61,.355,1);max-width:100vw;padding-bottom:calc(env(safe-area-inset-bottom,0px) + 16px)}.modal-fixed-bottom.is-auto-height{position:relative;bottom:auto;left:auto;right:auto;transform:none!important;box-shadow:none;z-index:1;background:var(--color-background-neutral-primary, #ffffff)}.modal-fixed-bottom>*{pointer-events:auto}.modal-fixed-bottom.bottom-hidden{display:none}@supports (padding: env(safe-area-inset-bottom)){.modal-content-container{padding-bottom:env(safe-area-inset-bottom)}}@media (prefers-reduced-motion: reduce){.modal-fixed-bottom{transition:none}.loading-spinner{animation:none}}\n"] }]
|
|
12415
12377
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { ionContent: [{
|
|
12416
12378
|
type: ViewChild,
|
|
12417
12379
|
args: [IonContent, { read: IonContent }]
|
|
@@ -14907,6 +14869,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
14907
14869
|
* ```
|
|
14908
14870
|
*/
|
|
14909
14871
|
class DsMobileNewInquiryModalComponent {
|
|
14872
|
+
modalController = inject(ModalController);
|
|
14910
14873
|
titleInputRef;
|
|
14911
14874
|
titleInput;
|
|
14912
14875
|
fileInput;
|
|
@@ -15004,9 +14967,9 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15004
14967
|
id: `photo-${Date.now()}`,
|
|
15005
14968
|
src: image.webPath,
|
|
15006
14969
|
type: 'image',
|
|
15007
|
-
name: `Photo ${this.attachments().length + 1}
|
|
14970
|
+
name: `Photo ${this.attachments().length + 1}`,
|
|
15008
14971
|
};
|
|
15009
|
-
this.attachments.update(attachments => [...attachments, newAttachment]);
|
|
14972
|
+
this.attachments.update((attachments) => [...attachments, newAttachment]);
|
|
15010
14973
|
}
|
|
15011
14974
|
}
|
|
15012
14975
|
catch (error) {
|
|
@@ -15018,7 +14981,7 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15018
14981
|
* Remove an attachment
|
|
15019
14982
|
*/
|
|
15020
14983
|
removeAttachment(attachmentId) {
|
|
15021
|
-
this.attachments.update(attachments => attachments.filter(a => a.id !== attachmentId));
|
|
14984
|
+
this.attachments.update((attachments) => attachments.filter((a) => a.id !== attachmentId));
|
|
15022
14985
|
}
|
|
15023
14986
|
/**
|
|
15024
14987
|
* Handle attachment button click
|
|
@@ -15069,7 +15032,7 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15069
15032
|
const k = 1024;
|
|
15070
15033
|
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
15071
15034
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
15072
|
-
return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];
|
|
15035
|
+
return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
|
|
15073
15036
|
}
|
|
15074
15037
|
/**
|
|
15075
15038
|
* Handle file selection from file input
|
|
@@ -15083,7 +15046,7 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15083
15046
|
// Process each selected file (up to the limit)
|
|
15084
15047
|
const remainingSlots = 6 - this.attachments().length;
|
|
15085
15048
|
const filesToProcess = Array.from(files).slice(0, remainingSlots);
|
|
15086
|
-
filesToProcess.forEach(file => {
|
|
15049
|
+
filesToProcess.forEach((file) => {
|
|
15087
15050
|
const fileType = this.detectFileType(file);
|
|
15088
15051
|
// Create a data URL for preview
|
|
15089
15052
|
const reader = new FileReader();
|
|
@@ -15095,9 +15058,9 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15095
15058
|
src: result,
|
|
15096
15059
|
type: fileType,
|
|
15097
15060
|
name: file.name,
|
|
15098
|
-
size: this.formatFileSize(file.size)
|
|
15061
|
+
size: this.formatFileSize(file.size),
|
|
15099
15062
|
};
|
|
15100
|
-
this.attachments.update(attachments => [...attachments, newAttachment]);
|
|
15063
|
+
this.attachments.update((attachments) => [...attachments, newAttachment]);
|
|
15101
15064
|
}
|
|
15102
15065
|
};
|
|
15103
15066
|
reader.readAsDataURL(file);
|
|
@@ -15117,13 +15080,14 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15117
15080
|
const inquiryData = {
|
|
15118
15081
|
title: this.title.trim(),
|
|
15119
15082
|
description: this.description.trim(),
|
|
15120
|
-
attachments: this.attachments()
|
|
15083
|
+
attachments: this.attachments(),
|
|
15121
15084
|
};
|
|
15122
15085
|
console.log('[NewInquiryModal] Submitting inquiry:', inquiryData);
|
|
15123
15086
|
if (this.onSubmit) {
|
|
15124
15087
|
await this.onSubmit(inquiryData);
|
|
15125
15088
|
}
|
|
15126
|
-
// Success -
|
|
15089
|
+
// Success - close the modal
|
|
15090
|
+
this.modalController.dismiss();
|
|
15127
15091
|
}
|
|
15128
15092
|
catch (error) {
|
|
15129
15093
|
console.error('[NewInquiryModal] Error submitting inquiry:', error);
|
|
@@ -15141,8 +15105,9 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15141
15105
|
[showHeader]="false"
|
|
15142
15106
|
[hasFixedBottom]="true"
|
|
15143
15107
|
[enableKeyboardHandling]="true"
|
|
15144
|
-
|
|
15145
|
-
|
|
15108
|
+
[isAutoHeight]="true"
|
|
15109
|
+
closeButtonLabel="Close"
|
|
15110
|
+
>
|
|
15146
15111
|
<!-- Form Content -->
|
|
15147
15112
|
<ds-mobile-section>
|
|
15148
15113
|
<!-- Title Field (Large Ghost Textarea) -->
|
|
@@ -15175,10 +15140,7 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15175
15140
|
<div class="attachment-previews-section">
|
|
15176
15141
|
<div class="image-previews">
|
|
15177
15142
|
@for (attachment of attachments(); track attachment.id) {
|
|
15178
|
-
<ds-mobile-attachment-preview
|
|
15179
|
-
[attachment]="attachment"
|
|
15180
|
-
(remove)="removeAttachment($event)"
|
|
15181
|
-
/>
|
|
15143
|
+
<ds-mobile-attachment-preview [attachment]="attachment" (remove)="removeAttachment($event)" />
|
|
15182
15144
|
}
|
|
15183
15145
|
</div>
|
|
15184
15146
|
</div>
|
|
@@ -15189,13 +15151,7 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15189
15151
|
<div class="submit-content">
|
|
15190
15152
|
<!-- Upload Actions (Left) -->
|
|
15191
15153
|
<div class="upload-actions">
|
|
15192
|
-
<ds-icon-button
|
|
15193
|
-
icon="remixImageLine"
|
|
15194
|
-
variant="secondary"
|
|
15195
|
-
size="md"
|
|
15196
|
-
(clicked)="addPhoto()"
|
|
15197
|
-
[disabled]="attachments().length >= 6"
|
|
15198
|
-
aria-label="Add photo">
|
|
15154
|
+
<ds-icon-button icon="remixImageLine" variant="secondary" size="md" (clicked)="addPhoto()" [disabled]="attachments().length >= 6" aria-label="Add photo">
|
|
15199
15155
|
</ds-icon-button>
|
|
15200
15156
|
<ds-icon-button
|
|
15201
15157
|
icon="remixAttachmentLine"
|
|
@@ -15203,34 +15159,21 @@ class DsMobileNewInquiryModalComponent {
|
|
|
15203
15159
|
size="md"
|
|
15204
15160
|
(clicked)="handleAddAttachment()"
|
|
15205
15161
|
[disabled]="attachments().length >= 6"
|
|
15206
|
-
aria-label="Add attachment"
|
|
15162
|
+
aria-label="Add attachment"
|
|
15163
|
+
>
|
|
15207
15164
|
</ds-icon-button>
|
|
15208
|
-
|
|
15165
|
+
|
|
15209
15166
|
<!-- Hidden file input for file selection -->
|
|
15210
|
-
<input
|
|
15211
|
-
#fileInput
|
|
15212
|
-
type="file"
|
|
15213
|
-
accept="*/*"
|
|
15214
|
-
multiple
|
|
15215
|
-
(change)="handleFileSelect($event)"
|
|
15216
|
-
style="display: none;"
|
|
15217
|
-
aria-hidden="true"
|
|
15218
|
-
/>
|
|
15167
|
+
<input #fileInput type="file" accept="*/*" multiple (change)="handleFileSelect($event)" style="display: none;" aria-hidden="true" />
|
|
15219
15168
|
</div>
|
|
15220
15169
|
|
|
15221
15170
|
<!-- Submit Button (Right) -->
|
|
15222
|
-
<ds-button
|
|
15223
|
-
variant="primary"
|
|
15224
|
-
size="lg"
|
|
15225
|
-
[disabled]="!isFormValid() || isSubmitting()"
|
|
15226
|
-
(clicked)="handleSubmit()">
|
|
15227
|
-
Submit
|
|
15228
|
-
</ds-button>
|
|
15171
|
+
<ds-button variant="primary" size="lg" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()"> Submit </ds-button>
|
|
15229
15172
|
</div>
|
|
15230
15173
|
</div>
|
|
15231
15174
|
</div>
|
|
15232
15175
|
</ds-mobile-modal-base>
|
|
15233
|
-
`, 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}.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}\n", ".inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;max-height:200px;overflow-y:auto;resize:none;box-sizing:border-box;padding-right:52px}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;
|
|
15176
|
+
`, 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}.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}\n", ".inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;max-height:200px;overflow-y:auto;resize:none;box-sizing:border-box;padding-right:52px}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;resize:none}@media (min-width: 768px){.submit-container{padding:20px 32px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DsButtonComponent, selector: "ds-button", inputs: ["variant", "size", "disabled", "loading", "pressed", "expanded", "leadingIcon", "trailingIcon", "ariaLabel", "iconOnly"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsTextareaComponent, selector: "ds-textarea", inputs: ["variant", "placeholder", "disabled", "readonly", "required", "ghost", "rows", "cols", "maxlength", "minlength", "ariaLabel", "ariaDescribedBy", "ariaLabelledBy"], outputs: ["valueChange", "focused", "blurred"] }, { kind: "component", type: DsIconButtonComponent, selector: "ds-icon-button", inputs: ["variant", "size", "icon", "disabled", "loading", "pressed", "expanded", "ariaLabel", "tooltip", "tooltipDisabled", "tooltipPlacement"], outputs: ["clicked", "focused", "blurred"] }, { kind: "component", type: DsMobileModalBaseComponent, selector: "ds-mobile-modal-base", inputs: ["showHeader"] }, { kind: "component", type: DsMobileAttachmentPreviewComponent, selector: "ds-mobile-attachment-preview", inputs: ["attachment"], outputs: ["remove"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }] });
|
|
15234
15177
|
}
|
|
15235
15178
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileNewInquiryModalComponent, decorators: [{
|
|
15236
15179
|
type: Component,
|
|
@@ -15242,7 +15185,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
15242
15185
|
DsIconButtonComponent,
|
|
15243
15186
|
DsMobileModalBaseComponent,
|
|
15244
15187
|
DsMobileAttachmentPreviewComponent,
|
|
15245
|
-
DsMobileSectionComponent
|
|
15188
|
+
DsMobileSectionComponent,
|
|
15246
15189
|
], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: `
|
|
15247
15190
|
<ds-mobile-modal-base
|
|
15248
15191
|
[loading]="loading"
|
|
@@ -15250,8 +15193,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
15250
15193
|
[showHeader]="false"
|
|
15251
15194
|
[hasFixedBottom]="true"
|
|
15252
15195
|
[enableKeyboardHandling]="true"
|
|
15253
|
-
|
|
15254
|
-
|
|
15196
|
+
[isAutoHeight]="true"
|
|
15197
|
+
closeButtonLabel="Close"
|
|
15198
|
+
>
|
|
15255
15199
|
<!-- Form Content -->
|
|
15256
15200
|
<ds-mobile-section>
|
|
15257
15201
|
<!-- Title Field (Large Ghost Textarea) -->
|
|
@@ -15284,10 +15228,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
15284
15228
|
<div class="attachment-previews-section">
|
|
15285
15229
|
<div class="image-previews">
|
|
15286
15230
|
@for (attachment of attachments(); track attachment.id) {
|
|
15287
|
-
<ds-mobile-attachment-preview
|
|
15288
|
-
[attachment]="attachment"
|
|
15289
|
-
(remove)="removeAttachment($event)"
|
|
15290
|
-
/>
|
|
15231
|
+
<ds-mobile-attachment-preview [attachment]="attachment" (remove)="removeAttachment($event)" />
|
|
15291
15232
|
}
|
|
15292
15233
|
</div>
|
|
15293
15234
|
</div>
|
|
@@ -15298,13 +15239,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
15298
15239
|
<div class="submit-content">
|
|
15299
15240
|
<!-- Upload Actions (Left) -->
|
|
15300
15241
|
<div class="upload-actions">
|
|
15301
|
-
<ds-icon-button
|
|
15302
|
-
icon="remixImageLine"
|
|
15303
|
-
variant="secondary"
|
|
15304
|
-
size="md"
|
|
15305
|
-
(clicked)="addPhoto()"
|
|
15306
|
-
[disabled]="attachments().length >= 6"
|
|
15307
|
-
aria-label="Add photo">
|
|
15242
|
+
<ds-icon-button icon="remixImageLine" variant="secondary" size="md" (clicked)="addPhoto()" [disabled]="attachments().length >= 6" aria-label="Add photo">
|
|
15308
15243
|
</ds-icon-button>
|
|
15309
15244
|
<ds-icon-button
|
|
15310
15245
|
icon="remixAttachmentLine"
|
|
@@ -15312,34 +15247,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
15312
15247
|
size="md"
|
|
15313
15248
|
(clicked)="handleAddAttachment()"
|
|
15314
15249
|
[disabled]="attachments().length >= 6"
|
|
15315
|
-
aria-label="Add attachment"
|
|
15250
|
+
aria-label="Add attachment"
|
|
15251
|
+
>
|
|
15316
15252
|
</ds-icon-button>
|
|
15317
|
-
|
|
15253
|
+
|
|
15318
15254
|
<!-- Hidden file input for file selection -->
|
|
15319
|
-
<input
|
|
15320
|
-
#fileInput
|
|
15321
|
-
type="file"
|
|
15322
|
-
accept="*/*"
|
|
15323
|
-
multiple
|
|
15324
|
-
(change)="handleFileSelect($event)"
|
|
15325
|
-
style="display: none;"
|
|
15326
|
-
aria-hidden="true"
|
|
15327
|
-
/>
|
|
15255
|
+
<input #fileInput type="file" accept="*/*" multiple (change)="handleFileSelect($event)" style="display: none;" aria-hidden="true" />
|
|
15328
15256
|
</div>
|
|
15329
15257
|
|
|
15330
15258
|
<!-- Submit Button (Right) -->
|
|
15331
|
-
<ds-button
|
|
15332
|
-
variant="primary"
|
|
15333
|
-
size="lg"
|
|
15334
|
-
[disabled]="!isFormValid() || isSubmitting()"
|
|
15335
|
-
(clicked)="handleSubmit()">
|
|
15336
|
-
Submit
|
|
15337
|
-
</ds-button>
|
|
15259
|
+
<ds-button variant="primary" size="lg" [disabled]="!isFormValid() || isSubmitting()" (clicked)="handleSubmit()"> Submit </ds-button>
|
|
15338
15260
|
</div>
|
|
15339
15261
|
</div>
|
|
15340
15262
|
</div>
|
|
15341
15263
|
</ds-mobile-modal-base>
|
|
15342
|
-
`, 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}.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}\n", ".inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;max-height:200px;overflow-y:auto;resize:none;box-sizing:border-box;padding-right:52px}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;
|
|
15264
|
+
`, 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}.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}\n", ".inquiry-title-input{flex:0 0 auto}.inquiry-title-input ::ng-deep textarea{font-size:var(--font-size-2xl);font-weight:400;line-height:1.2;max-height:200px;overflow-y:auto;resize:none;box-sizing:border-box;padding-right:52px}.fixed-bottom-container{background:var(--color-background-neutral-primary);border-top:1px solid var(--border-color-default)}.attachment-previews-section{padding:16px 20px;border-bottom:1px solid var(--border-color-default)}.image-previews{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.image-previews::-webkit-scrollbar{display:none}.submit-container{padding:16px 20px}.submit-content{display:flex;align-items:center;justify-content:space-between;gap:16px}.upload-actions{display:flex;align-items:center;gap:8px}.upload-actions ds-icon-button::ng-deep button{width:44px;height:44px;border-radius:50%}.submit-content ds-button::ng-deep button{border-radius:100px}.inquiry-description-input{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep .textarea-container{display:flex;flex:1;min-height:0}.inquiry-description-input ::ng-deep textarea{flex:1;min-height:80px;resize:none}@media (min-width: 768px){.submit-container{padding:20px 32px}}\n"] }]
|
|
15343
15265
|
}], propDecorators: { titleInputRef: [{
|
|
15344
15266
|
type: ViewChild,
|
|
15345
15267
|
args: ['titleInput', { read: ElementRef }]
|
|
@@ -15373,16 +15295,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
15373
15295
|
*
|
|
15374
15296
|
* @example
|
|
15375
15297
|
* ```typescript
|
|
15376
|
-
* constructor(private
|
|
15298
|
+
* constructor(private newInquiryModal: DsMobileNewInquiryModalService) {}
|
|
15377
15299
|
*
|
|
15378
|
-
* async createNewInquiry() {
|
|
15379
|
-
*
|
|
15300
|
+
* async createNewInquiry(): Promise<void> {
|
|
15301
|
+
* console.log('[InquiriesPage] FAB clicked, opening modal...');
|
|
15302
|
+
*
|
|
15303
|
+
* await this.newInquiryModal.open({
|
|
15380
15304
|
* onSubmit: async (data) => {
|
|
15381
15305
|
* console.log('Creating inquiry:', data);
|
|
15382
15306
|
* // Call your API to create the inquiry
|
|
15383
15307
|
* await this.apiService.createInquiry(data);
|
|
15384
15308
|
* // Close the modal
|
|
15385
|
-
* await this.
|
|
15309
|
+
* await this.newInquiryModal.close();
|
|
15386
15310
|
* }
|
|
15387
15311
|
* });
|
|
15388
15312
|
* }
|
|
@@ -15406,10 +15330,14 @@ class DsMobileNewInquiryModalService extends BaseModalService {
|
|
|
15406
15330
|
error: options?.error,
|
|
15407
15331
|
}, {
|
|
15408
15332
|
keyboardClose: false, // Don't close on keyboard hide for this modal
|
|
15333
|
+
cssClass: ['ds-modal-base', 'auto-height'],
|
|
15334
|
+
breakpoints: [0, 1],
|
|
15335
|
+
initialBreakpoint: 1,
|
|
15336
|
+
handle: false,
|
|
15409
15337
|
});
|
|
15410
|
-
|
|
15338
|
+
console.log('[NewInquiryModal] Modal created, presenting...');
|
|
15411
15339
|
await modal.present();
|
|
15412
|
-
|
|
15340
|
+
console.log('[NewInquiryModal] Modal presented');
|
|
15413
15341
|
}
|
|
15414
15342
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileNewInquiryModalService, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
15415
15343
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileNewInquiryModalService, providedIn: 'root' });
|
|
@@ -16524,7 +16452,7 @@ class DsMobileFabComponent {
|
|
|
16524
16452
|
/**
|
|
16525
16453
|
* Emitted when the FAB is clicked
|
|
16526
16454
|
*/
|
|
16527
|
-
|
|
16455
|
+
clicked = output();
|
|
16528
16456
|
ngAfterViewInit() {
|
|
16529
16457
|
// Only calculate position on mobile (not desktop)
|
|
16530
16458
|
if (!this.platform.is('desktop')) {
|
|
@@ -16564,14 +16492,14 @@ class DsMobileFabComponent {
|
|
|
16564
16492
|
*/
|
|
16565
16493
|
handleClick() {
|
|
16566
16494
|
if (!this.disabled()) {
|
|
16567
|
-
this.
|
|
16495
|
+
this.clicked.emit();
|
|
16568
16496
|
}
|
|
16569
16497
|
}
|
|
16570
16498
|
ngOnDestroy() {
|
|
16571
16499
|
this.resizeObserver?.disconnect();
|
|
16572
16500
|
}
|
|
16573
16501
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DsMobileFabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16574
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DsMobileFabComponent, isStandalone: true, selector: "ds-mobile-fab", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: {
|
|
16502
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DsMobileFabComponent, isStandalone: true, selector: "ds-mobile-fab", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, host: { properties: { "class.fab-bottom-right": "position() === \"bottom-right\"", "class.fab-bottom-left": "position() === \"bottom-left\"", "class.fab-bottom-center": "position() === \"bottom-center\"" } }, ngImport: i0, template: `
|
|
16575
16503
|
<div class="fab-container">
|
|
16576
16504
|
<ds-icon-button
|
|
16577
16505
|
[icon]="icon()"
|
|
@@ -16579,7 +16507,7 @@ class DsMobileFabComponent {
|
|
|
16579
16507
|
[size]="size()"
|
|
16580
16508
|
[ariaLabel]="ariaLabel()"
|
|
16581
16509
|
[disabled]="disabled()"
|
|
16582
|
-
(
|
|
16510
|
+
(clicked)="handleClick()"
|
|
16583
16511
|
class="fab-button">
|
|
16584
16512
|
</ds-icon-button>
|
|
16585
16513
|
</div>
|
|
@@ -16599,12 +16527,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
16599
16527
|
[size]="size()"
|
|
16600
16528
|
[ariaLabel]="ariaLabel()"
|
|
16601
16529
|
[disabled]="disabled()"
|
|
16602
|
-
(
|
|
16530
|
+
(clicked)="handleClick()"
|
|
16603
16531
|
class="fab-button">
|
|
16604
16532
|
</ds-icon-button>
|
|
16605
16533
|
</div>
|
|
16606
16534
|
`, styles: [":host{display:block;position:fixed;z-index:1000;pointer-events:none}.fab-container{position:relative;pointer-events:none;animation:fabEnter .3s cubic-bezier(.4,0,.2,1) forwards}@keyframes fabEnter{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}:host(.fab-bottom-right){bottom:var(--fab-calculated-bottom, 84px);right:20px}:host(.fab-bottom-left){bottom:var(--fab-calculated-bottom, 84px);left:20px}:host(.fab-bottom-center){bottom:var(--fab-calculated-bottom, 84px);left:50%;transform:translate(-50%)}@supports (padding-right: env(safe-area-inset-right)){:host(.fab-bottom-right){right:calc(20px + env(safe-area-inset-right))}}@supports (padding-left: env(safe-area-inset-left)){:host(.fab-bottom-left){left:calc(20px + env(safe-area-inset-left))}}@media (min-width: 768px){:host-context(.plt-desktop).fab-bottom-right{bottom:40px;right:40px}:host-context(.plt-desktop).fab-bottom-left{bottom:40px;left:40px}:host-context(.plt-desktop).fab-bottom-center{bottom:40px}@supports (padding-right: env(safe-area-inset-right)){:host-context(.plt-desktop).fab-bottom-right{right:calc(40px + env(safe-area-inset-right))}}@supports (padding-left: env(safe-area-inset-left)){:host-context(.plt-desktop).fab-bottom-left{left:calc(40px + env(safe-area-inset-left))}}}.fab-button{pointer-events:auto;display:block}.fab-button::ng-deep button{width:56px!important;height:56px!important;min-width:56px!important;min-height:56px!important;border-radius:50%!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:center!important;background:var(--color-accent)!important;color:var(--color-on-accent)!important;border:none!important;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f;transition:all .2s cubic-bezier(.4,0,.2,1)}.fab-button::ng-deep button:hover:not(:disabled){background:var(--color-accent-hover)!important;box-shadow:0 5px 7px -2px #0003,0 8px 14px #00000024,0 2px 22px #0000001f;transform:scale(1.05)}.fab-button::ng-deep button:active:not(:disabled){background:var(--color-accent-active)!important;box-shadow:0 2px 4px -1px #0003,0 4px 8px #00000024,0 1px 14px #0000001f;transform:scale(.95)}.fab-button::ng-deep button:disabled{opacity:.5;cursor:not-allowed;box-shadow:0 2px 4px -1px #0000001a,0 4px 8px #00000014,0 1px 14px #0000000f}.fab-button::ng-deep button .btn__icon,.fab-button::ng-deep button .btn__icon svg{color:var(--color-on-accent)!important;fill:var(--color-on-accent)!important}.fab-button::ng-deep button .btn__icon{display:flex!important;align-items:center!important;justify-content:center!important;flex-shrink:0!important}.fab-button::ng-deep button .btn__icon svg{width:24px!important;height:24px!important}\n"] }]
|
|
16607
|
-
}], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }],
|
|
16535
|
+
}], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], clicked: [{ type: i0.Output, args: ["clicked"] }] } });
|
|
16608
16536
|
|
|
16609
16537
|
/**
|
|
16610
16538
|
* DsMobileOfflineBannerComponent
|
|
@@ -18993,7 +18921,7 @@ class MobileInquiriesPageComponent {
|
|
|
18993
18921
|
}, 1000);
|
|
18994
18922
|
}
|
|
18995
18923
|
async createNewInquiry() {
|
|
18996
|
-
console.log('
|
|
18924
|
+
console.log('[InquiriesPage] FAB clicked, opening modal...');
|
|
18997
18925
|
await this.newInquiryModal.open({
|
|
18998
18926
|
onSubmit: async (data) => {
|
|
18999
18927
|
console.log('New inquiry submitted:', data);
|
|
@@ -19082,9 +19010,9 @@ class MobileInquiriesPageComponent {
|
|
|
19082
19010
|
icon="remixAddLine"
|
|
19083
19011
|
position="bottom-right"
|
|
19084
19012
|
ariaLabel="Create new inquiry"
|
|
19085
|
-
(
|
|
19013
|
+
(clicked)="createNewInquiry()">
|
|
19086
19014
|
</ds-mobile-fab>
|
|
19087
|
-
`, isInline: true, styles: [".inquiry-list-wrapper{display:flex;flex-direction:column;margin-top:-12px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.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}\n"], dependencies: [{ kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileIllustrationComponent, selector: "ds-mobile-illustration", inputs: ["variant", "size"] }, { kind: "component", type: DsMobileInteractiveListItemInquiryComponent, selector: "ds-mobile-interactive-list-item-inquiry", inputs: ["title", "description", "status", "statusLabel", "timestamp", "iconName", "iconColor", "variant", "clickable", "showChevron", "enableLongPress"], outputs: ["inquiryClick", "longPress"] }, { kind: "component", type: DsMobileInlineTabsComponent, selector: "ds-mobile-inline-tabs", inputs: ["tabs", "activeTab"], outputs: ["tabChange"] }, { kind: "component", type: DsMobileOfflineBannerComponent, selector: "ds-mobile-offline-banner", inputs: ["icon", "title", "message"] }, { kind: "component", type: DsMobileFabComponent, selector: "ds-mobile-fab", inputs: ["icon", "position", "size", "ariaLabel", "disabled"], outputs: ["
|
|
19015
|
+
`, isInline: true, styles: [".inquiry-list-wrapper{display:flex;flex-direction:column;margin-top:-12px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.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}\n"], dependencies: [{ kind: "component", type: DsMobilePageMainComponent, selector: "ds-mobile-page-main", inputs: ["title", "headerTitle", "headerSubtitle", "avatarType", "avatarInitials", "avatarSrc", "avatarIconName", "showRefresh", "showCondensedHeader", "scrollThreshold", "headerFadeDistance", "contentPadding", "profileMenuItems"], outputs: ["avatarClick", "profileActionSelected", "refresh", "scroll"] }, { kind: "component", type: DsMobileSectionComponent, selector: "ds-mobile-section", inputs: ["headline", "icon", "linkText", "padding", "gap", "contentGap", "showBorder", "overflow"], outputs: ["linkClick"] }, { kind: "component", type: DsMobileIllustrationComponent, selector: "ds-mobile-illustration", inputs: ["variant", "size"] }, { kind: "component", type: DsMobileInteractiveListItemInquiryComponent, selector: "ds-mobile-interactive-list-item-inquiry", inputs: ["title", "description", "status", "statusLabel", "timestamp", "iconName", "iconColor", "variant", "clickable", "showChevron", "enableLongPress"], outputs: ["inquiryClick", "longPress"] }, { kind: "component", type: DsMobileInlineTabsComponent, selector: "ds-mobile-inline-tabs", inputs: ["tabs", "activeTab"], outputs: ["tabChange"] }, { kind: "component", type: DsMobileOfflineBannerComponent, selector: "ds-mobile-offline-banner", inputs: ["icon", "title", "message"] }, { kind: "component", type: DsMobileFabComponent, selector: "ds-mobile-fab", inputs: ["icon", "position", "size", "ariaLabel", "disabled"], outputs: ["clicked"] }] });
|
|
19088
19016
|
}
|
|
19089
19017
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MobileInquiriesPageComponent, decorators: [{
|
|
19090
19018
|
type: Component,
|
|
@@ -19165,7 +19093,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
19165
19093
|
icon="remixAddLine"
|
|
19166
19094
|
position="bottom-right"
|
|
19167
19095
|
ariaLabel="Create new inquiry"
|
|
19168
|
-
(
|
|
19096
|
+
(clicked)="createNewInquiry()">
|
|
19169
19097
|
</ds-mobile-fab>
|
|
19170
19098
|
`, styles: [".inquiry-list-wrapper{display:flex;flex-direction:column;margin-top:-12px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center}.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}\n"] }]
|
|
19171
19099
|
}], ctorParameters: () => [{ type: UserService }, { type: i1.NavController }, { type: DsMobileNewInquiryModalService }], propDecorators: { pageComponent: [{
|