@magmonium/one 0.2.56 → 0.2.58

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.
@@ -6990,7 +6990,7 @@ class SectionFormItemComponent extends ConfigComponent {
6990
6990
  break;
6991
6991
  }
6992
6992
  case InputType.TOGGLE: {
6993
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-khCGhwEP.mjs');
6993
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-Bfn2C1KU.mjs');
6994
6994
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
6995
6995
  break;
6996
6996
  }
@@ -7002,12 +7002,12 @@ class SectionFormItemComponent extends ConfigComponent {
7002
7002
  break;
7003
7003
  }
7004
7004
  case InputType.PASSWORD: {
7005
- const { PasswordInputComponent } = await import('./magmonium-one-password-BhiS6qfY.mjs');
7005
+ const { PasswordInputComponent } = await import('./magmonium-one-password-BIoFDMJe.mjs');
7006
7006
  this.createDynamicComponent(seq, PasswordInputComponent);
7007
7007
  break;
7008
7008
  }
7009
7009
  case InputType.OTP: {
7010
- const { OtpInputComponent } = await import('./magmonium-one-otp-R0jo2bvP.mjs');
7010
+ const { OtpInputComponent } = await import('./magmonium-one-otp-IXhseA5Z.mjs');
7011
7011
  this.createDynamicComponent(seq, OtpInputComponent);
7012
7012
  break;
7013
7013
  }
@@ -10688,11 +10688,20 @@ class AutosizeDirective {
10688
10688
  if (this._el.nativeElement.offsetParent != null)
10689
10689
  setTimeout(this.#adjust);
10690
10690
  }
10691
+ // `0px`, not `auto`, as the height the text is measured against. `auto` is an
10692
+ // indefinite cross size, so any ancestor that stretches its children —
10693
+ // `.m-section__body` is `align-items: stretch`, and a Screen nests those —
10694
+ // resolves it to the stretched box, and `scrollHeight` then reports that
10695
+ // box rather than the text in it. Written back on every `ngAfterViewChecked`,
10696
+ // that ratchets the field up to whatever caps the chain: inside a Modal, the
10697
+ // pop-up's own `max-height`, at which point the field *is* the modal and the
10698
+ // Screen around it is scrolled out of reach. `0px` is definite, so nothing
10699
+ // stretches it and `scrollHeight` is the content alone.
10691
10700
  #adjust = () => {
10692
- this._el.nativeElement.style.overflow = 'hidden';
10693
- this._el.nativeElement.style.height = 'auto';
10694
- this._el.nativeElement.style.height =
10695
- this._el.nativeElement.scrollHeight + 'px';
10701
+ const el = this._el.nativeElement;
10702
+ el.style.overflow = 'hidden';
10703
+ el.style.height = '0px';
10704
+ el.style.height = `${el.scrollHeight}px`;
10696
10705
  };
10697
10706
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AutosizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
10698
10707
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: AutosizeDirective, isStandalone: true, selector: "[mAutosize]", host: { listeners: { "input": "onInput()", "window:resize": "onInput()" } }, ngImport: i0 });
@@ -16019,6 +16028,13 @@ const ModalStore = signalStore({ providedIn: 'root' }, withState(initialModalSta
16019
16028
  if (!modalId) {
16020
16029
  return;
16021
16030
  }
16031
+ // A modal that has already gone. Closing it again is what a body and its
16032
+ // own close affordance both doing their job looks like (ADR 0031), and
16033
+ // the state patch below would hand `activeModal` to somebody else's
16034
+ // overlay, so the second call answers nothing.
16035
+ if (id && !modalTriggerMap[id]) {
16036
+ return;
16037
+ }
16022
16038
  domService.destroy({
16023
16039
  componentRef: modalTriggerMap[modalId]?.ref,
16024
16040
  parentClassName: state.parentClassName(),
@@ -16134,6 +16150,11 @@ const ModalStore = signalStore({ providedIn: 'root' }, withState(initialModalSta
16134
16150
  if (!panelId) {
16135
16151
  return;
16136
16152
  }
16153
+ // A panel that has already gone — `close`'s reason, and here it would
16154
+ // also promote a DockedPanel a second time.
16155
+ if (id && !panelTriggerMap[id]) {
16156
+ return;
16157
+ }
16137
16158
  const closing = panelTriggerMap[panelId];
16138
16159
  domService.destroy({
16139
16160
  componentRef: closing?.ref,
@@ -16239,10 +16260,18 @@ const ModalStore = signalStore({ providedIn: 'root' }, withState(initialModalSta
16239
16260
  inputBinding('inputs', () => trigger.inputs ?? {}),
16240
16261
  ];
16241
16262
  // Its own ModalRef, the way each directive mints one: the body closes
16242
- // itself through this, and nothing here is listening for the result.
16243
- const providers = [{ provide: MODAL_REF, useValue: new ModalRef() }];
16263
+ // itself through this. Nothing here listens for the *result* — a store
16264
+ // has nowhere to put a panel's answer but the close dismisses, which is
16265
+ // the whole of what a body opened this way can ask for (ADR 0031).
16266
+ const modalRef = new ModalRef();
16267
+ // What the body answered reaches the caller either way (ADR 0031): a
16268
+ // `change` reports and the overlay stays, a `close` reports and then it
16269
+ // goes. The order on a close is deliberate — a handler that reads the
16270
+ // Screen it opened must run while that Screen is still there.
16271
+ modalRef.onChange((result) => trigger.onResult?.(result));
16272
+ const providers = [{ provide: MODAL_REF, useValue: modalRef }];
16244
16273
  if (trigger.as === 'side_panel') {
16245
- return openPanel({
16274
+ const panelId = openPanel({
16246
16275
  component: overlayBodyComp,
16247
16276
  bindings,
16248
16277
  providers,
@@ -16252,13 +16281,37 @@ const ModalStore = signalStore({ providedIn: 'root' }, withState(initialModalSta
16252
16281
  dock: trigger.dock,
16253
16282
  closeProhibited: trigger.closeProhibited,
16254
16283
  });
16284
+ modalRef.onClose((result) => {
16285
+ trigger.onResult?.(result);
16286
+ closePanel(panelId);
16287
+ });
16288
+ return panelId;
16255
16289
  }
16256
- return open({
16290
+ const modalId = open({
16257
16291
  component: overlayBodyComp,
16258
16292
  bindings,
16259
16293
  providers,
16260
16294
  config: trigger.config,
16261
16295
  });
16296
+ modalRef.onClose((result) => {
16297
+ trigger.onResult?.(result);
16298
+ close(modalId);
16299
+ });
16300
+ return modalId;
16301
+ };
16302
+ /**
16303
+ * Closes the overlay with this id, whichever kind it is — what a caller
16304
+ * holding only what `openScreen` returned can say (ADR 0031). Nothing for
16305
+ * an id nothing answers to, which is what a body that already closed itself
16306
+ * leaves behind.
16307
+ */
16308
+ const dismiss = (id) => {
16309
+ if (state.modalTriggerMap()[id]) {
16310
+ close(id);
16311
+ return;
16312
+ }
16313
+ if (state.panelTriggerMap()[id])
16314
+ closePanel(id);
16262
16315
  };
16263
16316
  // The callback form, kept for every caller drawn against it. One
16264
16317
  // implementation underneath: a refusal runs nothing, which is what an
@@ -16272,6 +16325,7 @@ const ModalStore = signalStore({ providedIn: 'root' }, withState(initialModalSta
16272
16325
  return {
16273
16326
  open,
16274
16327
  close,
16328
+ dismiss,
16275
16329
  ask,
16276
16330
  confirm,
16277
16331
  openScreen,
@@ -20716,7 +20770,7 @@ class WrapperInputComponent extends ConfigComponent {
20716
20770
  break;
20717
20771
  }
20718
20772
  case InputType.TOGGLE: {
20719
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-khCGhwEP.mjs');
20773
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-Bfn2C1KU.mjs');
20720
20774
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
20721
20775
  break;
20722
20776
  }
@@ -20728,12 +20782,12 @@ class WrapperInputComponent extends ConfigComponent {
20728
20782
  break;
20729
20783
  }
20730
20784
  case InputType.PASSWORD: {
20731
- const { PasswordInputComponent } = await import('./magmonium-one-password-BhiS6qfY.mjs');
20785
+ const { PasswordInputComponent } = await import('./magmonium-one-password-BIoFDMJe.mjs');
20732
20786
  this.createDynamicComponent(seq, PasswordInputComponent);
20733
20787
  break;
20734
20788
  }
20735
20789
  case InputType.OTP: {
20736
- const { OtpInputComponent } = await import('./magmonium-one-otp-R0jo2bvP.mjs');
20790
+ const { OtpInputComponent } = await import('./magmonium-one-otp-IXhseA5Z.mjs');
20737
20791
  this.createDynamicComponent(seq, OtpInputComponent);
20738
20792
  break;
20739
20793
  }
@@ -28882,7 +28936,7 @@ class ModalComponent extends ConfigComponent {
28882
28936
  </div>
28883
28937
  </div>
28884
28938
  }
28885
- `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;height:100%}.pop-up{--m-modal-size: 2.5rem;position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.pop-up__close{position:absolute;padding:1em;z-index:2;right:0;top:0}.pop-up__content{display:flex;align-items:center;justify-content:center;background:var(--m-backdrop-card);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);border:1px solid var(--m-border);border-radius:4px;width:min(100% - 2rem,var(--m-modal-max-width, 440px));max-width:var(--m-modal-max-width, 440px);max-height:90vh;overflow:auto;position:relative;animation:modalPopIn .5s cubic-bezier(.34,1.56,.64,1) forwards}.pop-up.align-bottom{align-items:flex-end}.pop-up.align-bottom .pop-up__content{border-bottom-left-radius:0;border-bottom-right-radius:0;border-left:none;border-right:none;border-bottom:none;width:100%;max-width:100%}.pop-up.full-screen{align-items:flex-end}.pop-up.full-screen .pop-up__content{width:100%;max-width:100%;height:calc(100% - var(--m-modal-size) * 3);max-height:calc(100% - var(--m-modal-size) * 3)}@media(min-width:1200px){.pop-up.full-screen{align-items:flex-end}.pop-up.full-screen .pop-up__content{width:calc(100% - var(--m-modal-size) * 2);max-width:calc(100% - var(--m-modal-size) * 2);height:calc(100% - var(--m-modal-size) * 3);max-height:calc(100% - var(--m-modal-size) * 3)}}.pop-up.no-backdrop+.modal{-webkit-backdrop-filter:none;backdrop-filter:none}@keyframes modalPopIn{0%{transform:scale(.9) translateY(40px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}\n"], dependencies: [{ kind: "directive", type: DraggableDirective, selector: "[mDraggable]", inputs: ["mDraggable", "handleSelector", "min", "max", "pos"], outputs: ["mDraggableChange", "dragStart", "dragEnd"] }, { kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28939
+ `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;height:100%}.pop-up{--m-modal-size: 2.5rem;position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.pop-up__close{position:absolute;padding:1em;z-index:2;right:0;top:0}.pop-up__content{display:block;width:min(100% - 2rem,var(--m-modal-max-width, 440px));max-width:var(--m-modal-max-width, 440px);max-height:90vh;overflow:auto;position:relative;animation:modalPopIn .5s cubic-bezier(.34,1.56,.64,1) forwards}.pop-up.align-bottom{align-items:flex-end}.pop-up.align-bottom .pop-up__content{border-bottom-left-radius:0;border-bottom-right-radius:0;border-left:none;border-right:none;border-bottom:none;width:100%;max-width:100%}.pop-up.full-screen{align-items:flex-end}.pop-up.full-screen .pop-up__content{width:100%;max-width:100%;height:calc(100% - var(--m-modal-size) * 3);max-height:calc(100% - var(--m-modal-size) * 3)}@media(min-width:1200px){.pop-up.full-screen{align-items:flex-end}.pop-up.full-screen .pop-up__content{width:calc(100% - var(--m-modal-size) * 2);max-width:calc(100% - var(--m-modal-size) * 2);height:calc(100% - var(--m-modal-size) * 3);max-height:calc(100% - var(--m-modal-size) * 3)}}.pop-up.no-backdrop+.modal{-webkit-backdrop-filter:none;backdrop-filter:none}@keyframes modalPopIn{0%{transform:scale(.9) translateY(40px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}\n"], dependencies: [{ kind: "directive", type: DraggableDirective, selector: "[mDraggable]", inputs: ["mDraggable", "handleSelector", "min", "max", "pos"], outputs: ["mDraggableChange", "dragStart", "dragEnd"] }, { kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28886
28940
  }
28887
28941
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ModalComponent, decorators: [{
28888
28942
  type: Component,
@@ -28911,7 +28965,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
28911
28965
  </div>
28912
28966
  </div>
28913
28967
  }
28914
- `, imports: [DraggableDirective, IconComponent, ButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;height:100%}.pop-up{--m-modal-size: 2.5rem;position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.pop-up__close{position:absolute;padding:1em;z-index:2;right:0;top:0}.pop-up__content{display:flex;align-items:center;justify-content:center;background:var(--m-backdrop-card);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);border:1px solid var(--m-border);border-radius:4px;width:min(100% - 2rem,var(--m-modal-max-width, 440px));max-width:var(--m-modal-max-width, 440px);max-height:90vh;overflow:auto;position:relative;animation:modalPopIn .5s cubic-bezier(.34,1.56,.64,1) forwards}.pop-up.align-bottom{align-items:flex-end}.pop-up.align-bottom .pop-up__content{border-bottom-left-radius:0;border-bottom-right-radius:0;border-left:none;border-right:none;border-bottom:none;width:100%;max-width:100%}.pop-up.full-screen{align-items:flex-end}.pop-up.full-screen .pop-up__content{width:100%;max-width:100%;height:calc(100% - var(--m-modal-size) * 3);max-height:calc(100% - var(--m-modal-size) * 3)}@media(min-width:1200px){.pop-up.full-screen{align-items:flex-end}.pop-up.full-screen .pop-up__content{width:calc(100% - var(--m-modal-size) * 2);max-width:calc(100% - var(--m-modal-size) * 2);height:calc(100% - var(--m-modal-size) * 3);max-height:calc(100% - var(--m-modal-size) * 3)}}.pop-up.no-backdrop+.modal{-webkit-backdrop-filter:none;backdrop-filter:none}@keyframes modalPopIn{0%{transform:scale(.9) translateY(40px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}\n"] }]
28968
+ `, imports: [DraggableDirective, IconComponent, ButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;height:100%}.pop-up{--m-modal-size: 2.5rem;position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.pop-up__close{position:absolute;padding:1em;z-index:2;right:0;top:0}.pop-up__content{display:block;width:min(100% - 2rem,var(--m-modal-max-width, 440px));max-width:var(--m-modal-max-width, 440px);max-height:90vh;overflow:auto;position:relative;animation:modalPopIn .5s cubic-bezier(.34,1.56,.64,1) forwards}.pop-up.align-bottom{align-items:flex-end}.pop-up.align-bottom .pop-up__content{border-bottom-left-radius:0;border-bottom-right-radius:0;border-left:none;border-right:none;border-bottom:none;width:100%;max-width:100%}.pop-up.full-screen{align-items:flex-end}.pop-up.full-screen .pop-up__content{width:100%;max-width:100%;height:calc(100% - var(--m-modal-size) * 3);max-height:calc(100% - var(--m-modal-size) * 3)}@media(min-width:1200px){.pop-up.full-screen{align-items:flex-end}.pop-up.full-screen .pop-up__content{width:calc(100% - var(--m-modal-size) * 2);max-width:calc(100% - var(--m-modal-size) * 2);height:calc(100% - var(--m-modal-size) * 3);max-height:calc(100% - var(--m-modal-size) * 3)}}.pop-up.no-backdrop+.modal{-webkit-backdrop-filter:none;backdrop-filter:none}@keyframes modalPopIn{0%{transform:scale(.9) translateY(40px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}\n"] }]
28915
28969
  }], ctorParameters: () => [], propDecorators: { component: [{ type: i0.Input, args: [{ isSignal: true, alias: "component", required: false }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], providers: [{ type: i0.Input, args: [{ isSignal: true, alias: "providers", required: false }] }], instanceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "instanceId", required: true }] }], bodyContainer: [{ type: i0.ViewChild, args: ['body', { ...{
28916
28970
  read: ViewContainerRef,
28917
28971
  }, isSignal: true }] }] } });
@@ -29101,7 +29155,9 @@ class OverlayBodyComponent {
29101
29155
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: OverlayBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29102
29156
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: OverlayBodyComponent, isStandalone: true, selector: "m-overlay-body", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, tag: { classPropertyName: "tag", publicName: "tag", isSignal: true, isRequired: false, transformFunction: null }, widget: { classPropertyName: "widget", publicName: "widget", isSignal: true, isRequired: false, transformFunction: null }, inputs: { classPropertyName: "inputs", publicName: "inputs", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
29103
29157
  @if (form(); as f) {
29104
- <m-form [name]="f" />
29158
+ <div class="overlay-body__card">
29159
+ <m-form [name]="f" />
29160
+ </div>
29105
29161
  } @else if (loaded(); as widget) {
29106
29162
  <ng-container
29107
29163
  [ngComponentOutlet]="widget"
@@ -29110,15 +29166,15 @@ class OverlayBodyComponent {
29110
29166
  } @else if (readyTag(); as t) {
29111
29167
  <m-ce-outlet [tag]="t" />
29112
29168
  }
29113
- `, isInline: true, dependencies: [{ kind: "component", type: FormGroupComponent, selector: "m-form, m-one-form", inputs: ["data", "state", "validation", "options", "fieldConfigs", "aclResolver", "autofocus", "readonly", "fieldRenderIds", "elements", "templates", "datas", "label", "subtitle"], outputs: ["dataChange", "act", "stateChange"] }, { kind: "component", type: CeOutletComponent, selector: "m-ce-outlet", inputs: ["tag"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29169
+ `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.overlay-body__card{background:var(--m-backdrop-card);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);border:1px solid var(--m-border);border-radius:4px}\n"], dependencies: [{ kind: "component", type: FormGroupComponent, selector: "m-form, m-one-form", inputs: ["data", "state", "validation", "options", "fieldConfigs", "aclResolver", "autofocus", "readonly", "fieldRenderIds", "elements", "templates", "datas", "label", "subtitle"], outputs: ["dataChange", "act", "stateChange"] }, { kind: "component", type: CeOutletComponent, selector: "m-ce-outlet", inputs: ["tag"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29114
29170
  }
29115
29171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: OverlayBodyComponent, decorators: [{
29116
29172
  type: Component,
29117
- args: [{
29118
- selector: 'm-overlay-body',
29119
- template: `
29173
+ args: [{ selector: 'm-overlay-body', template: `
29120
29174
  @if (form(); as f) {
29121
- <m-form [name]="f" />
29175
+ <div class="overlay-body__card">
29176
+ <m-form [name]="f" />
29177
+ </div>
29122
29178
  } @else if (loaded(); as widget) {
29123
29179
  <ng-container
29124
29180
  [ngComponentOutlet]="widget"
@@ -29127,10 +29183,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
29127
29183
  } @else if (readyTag(); as t) {
29128
29184
  <m-ce-outlet [tag]="t" />
29129
29185
  }
29130
- `,
29131
- changeDetection: ChangeDetectionStrategy.OnPush,
29132
- imports: [FormGroupComponent, CeOutletComponent, NgComponentOutlet],
29133
- }]
29186
+ `, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FormGroupComponent, CeOutletComponent, NgComponentOutlet], styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.overlay-body__card{background:var(--m-backdrop-card);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);border:1px solid var(--m-border);border-radius:4px}\n"] }]
29134
29187
  }], ctorParameters: () => [], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], tag: [{ type: i0.Input, args: [{ isSignal: true, alias: "tag", required: false }] }], widget: [{ type: i0.Input, args: [{ isSignal: true, alias: "widget", required: false }] }], inputs: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputs", required: false }] }] } });
29135
29188
 
29136
29189
  function provideModalComponents() {
@@ -29259,6 +29312,12 @@ deps) {
29259
29312
  class ModalDirective {
29260
29313
  mModal = input(...(ngDevMode ? [undefined, { debugName: "mModal" }] : /* istanbul ignore next */ []));
29261
29314
  closed = output();
29315
+ /**
29316
+ * What the body answered without dismissing — `ModalRef.change` (ADR 0031).
29317
+ * Its own output beside `closed` because the two are different facts: one
29318
+ * says *here is the value*, the other says *and it is gone*.
29319
+ */
29320
+ reported = output();
29262
29321
  elementRef = inject(ElementRef);
29263
29322
  assetStore = inject(AssetStore);
29264
29323
  modalStore = inject(ModalStore);
@@ -29286,7 +29345,7 @@ class ModalDirective {
29286
29345
  }
29287
29346
  open(config) {
29288
29347
  const modalRef = new ModalRef();
29289
- this.modalStore.open({
29348
+ const id = this.modalStore.open({
29290
29349
  component: OverlayBodyComponent,
29291
29350
  bindings: [
29292
29351
  inputBinding('form', () => config.form),
@@ -29298,17 +29357,23 @@ class ModalDirective {
29298
29357
  providers: [{ provide: MODAL_REF, useValue: modalRef }],
29299
29358
  config,
29300
29359
  });
29301
- modalRef.onClose((result) => this.closed.emit(result));
29360
+ modalRef.onChange((result) => this.reported.emit(result));
29361
+ // The body dismisses through this ref and the opener reports the result
29362
+ // (ADR 0031): one channel, whichever end closed the overlay.
29363
+ modalRef.onClose((result) => {
29364
+ this.modalStore.close(id);
29365
+ this.closed.emit(result);
29366
+ });
29302
29367
  }
29303
29368
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ModalDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
29304
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: ModalDirective, isStandalone: true, selector: "[mModal]", inputs: { mModal: { classPropertyName: "mModal", publicName: "mModal", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 });
29369
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: ModalDirective, isStandalone: true, selector: "[mModal]", inputs: { mModal: { classPropertyName: "mModal", publicName: "mModal", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", reported: "reported" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 });
29305
29370
  }
29306
29371
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ModalDirective, decorators: [{
29307
29372
  type: Directive,
29308
29373
  args: [{
29309
29374
  selector: '[mModal]',
29310
29375
  }]
29311
- }], ctorParameters: () => [], propDecorators: { mModal: [{ type: i0.Input, args: [{ isSignal: true, alias: "mModal", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], onClick: [{
29376
+ }], ctorParameters: () => [], propDecorators: { mModal: [{ type: i0.Input, args: [{ isSignal: true, alias: "mModal", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], reported: [{ type: i0.Output, args: ["reported"] }], onClick: [{
29312
29377
  type: HostListener,
29313
29378
  args: ['click', ['$event']]
29314
29379
  }] } });
@@ -29317,6 +29382,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
29317
29382
  class SidePanelDirective {
29318
29383
  mSidePanel = input(...(ngDevMode ? [undefined, { debugName: "mSidePanel" }] : /* istanbul ignore next */ []));
29319
29384
  closed = output();
29385
+ /**
29386
+ * What the body answered without dismissing — `ModalRef.change` (ADR 0031).
29387
+ * Its own output beside `closed` because the two are different facts: one
29388
+ * says *here is the value*, the other says *and it is gone*.
29389
+ */
29390
+ reported = output();
29320
29391
  elementRef = inject(ElementRef);
29321
29392
  assetStore = inject(AssetStore);
29322
29393
  modalStore = inject(ModalStore);
@@ -29344,7 +29415,7 @@ class SidePanelDirective {
29344
29415
  }
29345
29416
  open(config) {
29346
29417
  const modalRef = new ModalRef();
29347
- this.modalStore.openPanel({
29418
+ const id = this.modalStore.openPanel({
29348
29419
  component: OverlayBodyComponent,
29349
29420
  bindings: [
29350
29421
  inputBinding('form', () => config.form),
@@ -29360,17 +29431,23 @@ class SidePanelDirective {
29360
29431
  dock: config.dock,
29361
29432
  closeProhibited: config.closeProhibited,
29362
29433
  });
29363
- modalRef.onClose((result) => this.closed.emit(result));
29434
+ modalRef.onChange((result) => this.reported.emit(result));
29435
+ // The body dismisses through this ref and the opener reports the result
29436
+ // (ADR 0031): one channel, whichever end closed the panel.
29437
+ modalRef.onClose((result) => {
29438
+ this.modalStore.closePanel(id);
29439
+ this.closed.emit(result);
29440
+ });
29364
29441
  }
29365
29442
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SidePanelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
29366
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: SidePanelDirective, isStandalone: true, selector: "[mSidePanel]", inputs: { mSidePanel: { classPropertyName: "mSidePanel", publicName: "mSidePanel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 });
29443
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: SidePanelDirective, isStandalone: true, selector: "[mSidePanel]", inputs: { mSidePanel: { classPropertyName: "mSidePanel", publicName: "mSidePanel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", reported: "reported" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 });
29367
29444
  }
29368
29445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SidePanelDirective, decorators: [{
29369
29446
  type: Directive,
29370
29447
  args: [{
29371
29448
  selector: '[mSidePanel]',
29372
29449
  }]
29373
- }], ctorParameters: () => [], propDecorators: { mSidePanel: [{ type: i0.Input, args: [{ isSignal: true, alias: "mSidePanel", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], onClick: [{
29450
+ }], ctorParameters: () => [], propDecorators: { mSidePanel: [{ type: i0.Input, args: [{ isSignal: true, alias: "mSidePanel", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], reported: [{ type: i0.Output, args: ["reported"] }], onClick: [{
29374
29451
  type: HostListener,
29375
29452
  args: ['click', ['$event']]
29376
29453
  }] } });
@@ -35276,4 +35353,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
35276
35353
  */
35277
35354
 
35278
35355
  export { DEFAULT_FILTER_VARIANT as $, ACCESS_DOMAINS as A, BaseInputComponent as B, COMPONENT_INPUT_REGISTRY as C, CardComponent as D, CardWrapperComponent as E, CarouselComponent as F, ChartComponent as G, ChatBubbleComponent as H, IS_DESIGN_MODE as I, CheckboxInputComponent as J, ClearableInputComponent as K, LabelComponent as L, ColComponent as M, ColorPickerInputComponent as N, CommentItemComponent as O, CommentsApiService as P, CommentsComponent as Q, CommentsStore as R, ComponentInputComponent as S, TranslatePipe as T, ComponentStepperComponent as U, ConfigComponent as V, ConfirmComponent as W, ContextMenuComponent as X, CustomIconClass as Y, CustomIconEditComponent as Z, DEFAULT_FILTER_RANGE_MODE as _, BaseTextInputComponent as a, MultiRangeInputComponent as a$, DEFAULT_NAV_PARAM as a0, DEFAULT_NAV_SEGMENT as a1, DEFAULT_SIZE as a2, DashboardCardComponent as a3, DateInputComponent as a4, DatePickerComponent as a5, DeviceService as a6, DomService as a7, Domain as a8, DotGridComponent as a9, ImgComponent as aA, InputType as aB, InstrumentScoreComponent as aC, InterceptorObservables as aD, JumbotronComponent as aE, KeyValueComponent as aF, LAYOUT_ASSET_FOLDER as aG, LOGIN_COMPONENT as aH, LOGIN_STORE as aI, LanguageComponent as aJ, ListComponent as aK, LogoComponent as aL, MAG_SOCKET_EVENT as aM, MHeroColorDirective as aN, MHeroComponent as aO, MODAL_REF as aP, MODAL_STORE_REF as aQ, MRefDirective as aR, MStepComponent as aS, MURL_PARAM as aT, MURL_SEP as aU, ManifestEnrichmentService as aV, MenuComponent as aW, ModalDirective as aX, ModalRef as aY, ModalStore as aZ, MoneyPipe as a_, DragListDirective as aa, DragListItemDirective as ab, DraggableDirective as ac, DropdownInputComponent as ad, FILTER_GROUP_CONTEXT as ae, FILTER_RANGE_MODES as af, FILTER_VARIANTS as ag, FLEX_VARIANTS as ah, FOLDER_PICK_LISTENER as ai, FORM_ASSET_FOLDER as aj, FileService as ak, FileUploadDirective as al, FileUploadInputComponent as am, FlexComponent as an, FlexItemComponent as ao, FormGroupComponent as ap, FrameComponent as aq, FreezeService as ar, GRID_BREAKPOINTS as as, GetNavService as at, HeaderComponent$1 as au, HighlightDirective as av, HttpService as aw, ICON_SOURCE as ax, IS_SIDE_PANEL as ay, IconComponent as az, TextOutputComponent as b, SectionAccordionDirective as b$, MurlUrlSerializer as b0, NAV_DEFAULT_MURL as b1, NAV_ID_SEP as b2, NAV_MAIN_BUTTONS as b3, NAV_SEGMENT_RE as b4, NAV_STORE_REF as b5, NAV_WC_COMPONENTS as b6, NAV_WIDGET_MAP as b7, NavComponent as b8, NavDetailsComponent as b9, PercentagePipe as bA, PlaygroundComponent as bB, PositionDirective as bC, PwaInstallComponent as bD, ROOT_NAV$1 as bE, RadioGroupComponent as bF, RadioInputComponent as bG, RangeInputComponent as bH, RatingInputComponent as bI, ReactiveElementComponent as bJ, RemoteComponent as bK, RemoteLoaderService as bL, ResizeElementComponent as bM, RouteContainer as bN, RowComponent as bO, SEARCH_QUERY as bP, SEARCH_RESULTS_EVENT as bQ, SECTION_ACCORDION_GROUP as bR, SECTION_FORM_CONTEXT as bS, SHARED_ICONS as bT, SIZE_CONTEXT as bU, ScoreComponent as bV, ScrollComponent as bW, ScrollService as bX, SearchPanelComponent as bY, SearchStore as bZ, SearchUserPanelComponent as b_, NavHeaderComponent as ba, NavMenuComponent as bb, NavStore as bc, NavTrailComponent as bd, NothingComponent as be, NotificationElementComponent as bf, NotificationGroupComponent as bg, NotificationPopupComponent as bh, NotificationService as bi, NotificationStore as bj, NotificationType as bk, NotificationWidgetComponent as bl, ONE_ASSET_BASE_URL as bm, OPTIONS_SOURCE as bn, OVERLAY_WIDGETS as bo, OneApp as bp, OptionsSourceDirective as bq, OverlayBodyComponent as br, OverlayRef as bs, OverlayService as bt, PLATFORM_BUTTON_NAV_IDS as bu, PLATFORM_EXTENSIBLE_NAV_IDS as bv, PLATFORM_NAV_MAP as bw, PLATFORM_ROOT_CHILDREN as bx, PaginationComponent as by, PanelComponent as bz, ButtonComponent as c, URL_SEP as c$, SectionAccordionGroupDirective as c0, SectionBackComponent as c1, SectionBadgesComponent as c2, SectionButtonGroupComponent as c3, SectionCardComponent as c4, SectionCarouselComponent as c5, SectionComponent as c6, SectionFilterComponent as c7, SectionFilterGroupComponent as c8, SectionFilterMenuComponent as c9, StepsComponent as cA, StorageService as cB, StrokeLinecap as cC, StrokeLinejoin as cD, SummaryComponent as cE, SvgGeneratorComponent as cF, SvgGeneratorService as cG, SvgService as cH, TOTAL_COLUMNS as cI, TRANSLATION_SOURCE as cJ, TableComponent as cK, TechnicalMeterComponent as cL, TextInputComponent as cM, TextareaInputComponent as cN, ThemeComponent as cO, ThemeDataService as cP, ThemeService as cQ, ThemeStore as cR, TimeAgoPipe as cS, TimelineComponent as cT, ToggleButtonComponent as cU, ToggleInputComponent as cV, ToggleRadioInputComponent as cW, ToolTipDirective as cX, TooltipComponent as cY, TranslateService as cZ, TreeGridComponent as c_, SectionFilterPanelComponent as ca, SectionFilterRangePanelComponent as cb, SectionFooterComponent as cc, SectionFormComponent as cd, SectionFormItemComponent as ce, SectionHeaderComponent as cf, SectionHeroComponent as cg, SectionPaginationComponent as ch, SectionSearchComponent as ci, SectionStepperComponent as cj, SectionTabsComponent as ck, SectionToggleComponent as cl, SectionToggleItemDirective as cm, SelectableCardInputComponent as cn, SelectorDirective as co, SettingsSearchBarComponent as cp, SettingsSearchService as cq, ShapeComponent as cr, SharedStoreRegistry as cs, SidePanelDirective as ct, Size as cu, SocketStore as cv, SortComponent as cw, StatComponent as cx, StepComponent as cy, StepperComponent as cz, APP_CONTEXT_REF as d, getTierFromPreviewPath as d$, USER_STORE_REF as d0, USER_TAB_MAP as d1, UniverseComponent as d2, UserApiService as d3, UserAvatarComponent as d4, UserComponent as d5, UserNavComponent as d6, UserSettingsComponent as d7, UserStore as d8, WC_ROUTE_CHANGED_EVENT as d9, deriveOppositeColor as dA, derivePropertyName as dB, emailValidation as dC, evaluate as dD, evaluateBool as dE, filterHoldsList as dF, filterHoldsOneBound as dG, filterHoldsOptions as dH, filterHoldsRange as dI, filterList as dJ, filterNumber as dK, filterNumberList as dL, filterOne as dM, filterPanelOf as dN, filterPanelWidth as dO, filterRange as dP, filterTreeGridRows as dQ, filterValueList as dR, filterValues as dS, flattenTreeGridRows as dT, formatBadgeCount as dU, fullName as dV, generateClipPath as dW, generateTransform as dX, getClassList as dY, getProperty as dZ, getScrollParent as d_, WC_SEARCH_GROUPS as da, WIN_USER_TAB_HOOK as db, WIN_USER_TAB_KEY as dc, WatermarkComponent as dd, WcRouterStore as de, WrapperInputComponent as df, anchorNavId as dg, applyColorsToElement as dh, assetOptions as di, bootstrapMagApp as dj, bootstrapPwaInstall as dk, buildWcBaseUrl as dl, calculateLuminance as dm, calculateRanks as dn, cellText as dp, checkFilterCondition as dq, childNavId as dr, classListSignal as ds, coerceSize as dt, cornerEdge as du, cornerSide as dv, createMap as dw, createPlatformNavMap as dx, deriveAvatarGradient as dy, deriveContrastColor as dz, ASSET_BASE_URL as e, provideAppContext as e$, getTreeGridRow as e0, getUniqueId as e1, getValue as e2, hasErrorComputed as e3, hexToRgb as e4, hslToRgb$1 as e5, initMagmoniumApp as e6, initialNotificationState as e7, initialState$2 as e8, initials as e9, maxLengthValidation as eA, maxValidation as eB, mergePlatformNav as eC, mergeUnique as eD, mergeUniqueBy as eE, mergeUniqueWith as eF, minAgeValidation as eG, minLengthValidation as eH, minValidation as eI, miniMarkToHtml as eJ, navIdChain as eK, navIdFor as eL, navIdSegment as eM, navIdToRoutePath as eN, navIdToSegments as eO, navParamOf as eP, navToId as eQ, normalizeAssetOptions as eR, parentNavId as eS, parseAddress as eT, parseColor as eU, parsePatternNames as eV, patternValidation as eW, patternsValidation as eX, platformNavWidgets as eY, privateGuard as eZ, processImageToSvg as e_, injectAuthenticate as ea, injectInstallApp as eb, injectParentSize as ec, injectScrollSticky as ed, isButtonName as ee, isCancelledComputed as ef, isExtensiblePlatformNavId as eg, isJson as eh, isLoadingComputed as ei, isLocalhost as ej, isNavInstanceConfig as ek, isNavMenuConfig as el, isNavRowsConfig as em, isPlatformNavId as en, isSize as eo, isTierPreview as ep, isUrlLocalhost as eq, isValidNavId as er, isValidNavSegment as es, isWebComponent as et, linkToId as eu, linkToNav as ev, loadingActions as ew, mInterceptor as ex, manualValidation as ey, matchFieldValidation as ez, AccordionBodyDirective as f, provideMagAppConfig as f0, provideMagWcConfig as f1, provideMagWcRoutes as f2, provideModalComponents as f3, provideMurlUrlSerializer as f4, provideNavWidgets as f5, provideOverlayWidgets as f6, providePlatformNavWidgets as f7, provideSearch as f8, provideSizeContext as f9, toLength$1 as fA, toLocalNavId as fB, toggleTreeGridRow as fC, unfetchedPlatformNav as fD, urlValidation as fE, provideUserTabs as fa, publicGuard as fb, readFieldPatterns as fc, renderAddress as fd, requiredValidation as fe, resolveConfigAsset as ff, resolveIconSize as fg, resolvePallet as fh, resolvePatternRules as fi, resolveSize as fj, rgbToHex as fk, rgbToHsl as fl, rowHasChildren as fm, samePatterns as fn, segmentsToNavId as fo, setProperty as fp, setTreeGridChildren as fq, settingsWidgets as fr, shouldShowBadge as fs, splitNavId as ft, splitOnMatch as fu, stringToColor as fv, toAttrBool as fw, toAttrNumber as fx, toCssLength as fy, toHostNavId as fz, AccordionComponent as g, AccordionGroupComponent as h, ActionComponent as i, AnimatedGraphsComponent as j, AppCardComponent as k, AppRelationType as l, AppTileComponent as m, AssetStore as n, AssetUrlPipe as o, Assets as p, AuthActivityPageComponent as q, AuthApiService as r, AuthStore as s, AutosizeDirective as t, BadgeComponent as u, BandingComponent as v, BaseArrayInputComponent as w, BaseRootWebComponent as x, BaseWebComponent as y, ButtonGroupComponent as z };
35279
- //# sourceMappingURL=magmonium-one-magmonium-one-BZrtlbjm.mjs.map
35356
+ //# sourceMappingURL=magmonium-one-magmonium-one-DxFk01q8.mjs.map