@magmonium/one 0.2.93 → 0.2.95

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.
@@ -7265,7 +7265,7 @@ class SectionFormItemComponent extends ConfigComponent {
7265
7265
  break;
7266
7266
  }
7267
7267
  case InputType.TOGGLE: {
7268
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-qK5wYbFE.mjs');
7268
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-Bv407NRh.mjs');
7269
7269
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
7270
7270
  break;
7271
7271
  }
@@ -7277,12 +7277,12 @@ class SectionFormItemComponent extends ConfigComponent {
7277
7277
  break;
7278
7278
  }
7279
7279
  case InputType.PASSWORD: {
7280
- const { PasswordInputComponent } = await import('./magmonium-one-password-DCpAXJIf.mjs');
7280
+ const { PasswordInputComponent } = await import('./magmonium-one-password-YU7fZJsq.mjs');
7281
7281
  this.createDynamicComponent(seq, PasswordInputComponent);
7282
7282
  break;
7283
7283
  }
7284
7284
  case InputType.OTP: {
7285
- const { OtpInputComponent } = await import('./magmonium-one-otp-BGGcDB4H.mjs');
7285
+ const { OtpInputComponent } = await import('./magmonium-one-otp-CdLYJWPD.mjs');
7286
7286
  this.createDynamicComponent(seq, OtpInputComponent);
7287
7287
  break;
7288
7288
  }
@@ -8809,6 +8809,8 @@ class MenuComponent {
8809
8809
  hide = input(...(ngDevMode ? [undefined, { debugName: "hide" }] : /* istanbul ignore next */ []));
8810
8810
  hideLink = input(false, ...(ngDevMode ? [{ debugName: "hideLink" }] : /* istanbul ignore next */ []));
8811
8811
  isAdmin = input(false, ...(ngDevMode ? [{ debugName: "isAdmin" }] : /* istanbul ignore next */ []));
8812
+ /** Focus the first item once rendered — a popover menu opened from a trigger. */
8813
+ autoFocus = input(false, ...(ngDevMode ? [{ debugName: "autoFocus" }] : /* istanbul ignore next */ []));
8812
8814
  action = output();
8813
8815
  visibilityRule = input(...(ngDevMode ? [undefined, { debugName: "visibilityRule" }] : /* istanbul ignore next */ []));
8814
8816
  disableRule = input(...(ngDevMode ? [undefined, { debugName: "disableRule" }] : /* istanbul ignore next */ []));
@@ -8817,6 +8819,11 @@ class MenuComponent {
8817
8819
  #httpService = inject(HttpService);
8818
8820
  #tree = signal([], ...(ngDevMode ? [{ debugName: "#tree" }] : /* istanbul ignore next */ []));
8819
8821
  #treeMap = signal({}, ...(ngDevMode ? [{ debugName: "#treeMap" }] : /* istanbul ignore next */ []));
8822
+ #host = inject(ElementRef);
8823
+ // Whether the next settled render should focus the first item: `autoFocus`
8824
+ // decides the first one, a drill or back decides after (its rows replace
8825
+ // the focused one, which would drop focus to the body).
8826
+ #focusPending;
8820
8827
  back = signal(undefined, ...(ngDevMode ? [{ debugName: "back" }] : /* istanbul ignore next */ []));
8821
8828
  slideDirection = signal('none', ...(ngDevMode ? [{ debugName: "slideDirection" }] : /* istanbul ignore next */ []));
8822
8829
  #asyncOptions = rxResource({
@@ -8858,12 +8865,41 @@ class MenuComponent {
8858
8865
  }))
8859
8866
  .filter((group) => group.length > 0);
8860
8867
  const source = back
8861
- ? back.options ?? async ?? []
8862
- : async ?? config ?? [];
8868
+ ? (back.options ?? async ?? [])
8869
+ : (async ?? config ?? []);
8863
8870
  const result = filterGroups(source);
8864
8871
  return extra?.length && !back ? [...result, extra] : result;
8865
8872
  }, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
8866
8873
  isLoading = computed(() => this.#asyncOptions.isLoading(), ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
8874
+ constructor() {
8875
+ afterRenderEffect(() => {
8876
+ this.options();
8877
+ if (this.isLoading())
8878
+ return;
8879
+ const pending = this.#focusPending ?? untracked(this.autoFocus);
8880
+ this.#focusPending = false;
8881
+ if (pending) {
8882
+ this.#host.nativeElement
8883
+ .querySelector('.menu-item:not(.is-disabled)')
8884
+ ?.focus();
8885
+ }
8886
+ });
8887
+ }
8888
+ // ↑/↓ walk the focusable rows (back row included), wrapping; Enter on a
8889
+ // row is its own `selectItem`.
8890
+ moveFocus(event, step) {
8891
+ const rows = Array.from(this.#host.nativeElement.querySelectorAll('.back-btn, .menu-item:not(.is-disabled)'));
8892
+ if (!rows.length)
8893
+ return;
8894
+ event.preventDefault();
8895
+ const current = rows.indexOf(document.activeElement);
8896
+ const next = current < 0
8897
+ ? step > 0
8898
+ ? 0
8899
+ : rows.length - 1
8900
+ : (current + step + rows.length) % rows.length;
8901
+ rows[next].focus();
8902
+ }
8867
8903
  // --- Handlers ---
8868
8904
  selectItem(item) {
8869
8905
  const dRule = this.disableRule();
@@ -8875,12 +8911,14 @@ class MenuComponent {
8875
8911
  this.#treeMap.update((map) => ({ ...map, [item.id]: item }));
8876
8912
  this.#tree.update((t) => [...t, item.id]);
8877
8913
  this.back.set(item);
8914
+ this.#focusPending = this.#hasFocus();
8878
8915
  return;
8879
8916
  }
8880
8917
  this.action.emit(item);
8881
8918
  }
8882
8919
  goBack() {
8883
8920
  this.slideDirection.set('backward');
8921
+ this.#focusPending = this.#hasFocus();
8884
8922
  const currentTree = this.#tree();
8885
8923
  if (currentTree.length <= 1) {
8886
8924
  this.#tree.set([]);
@@ -8892,6 +8930,9 @@ class MenuComponent {
8892
8930
  const parentId = newTree[newTree.length - 1];
8893
8931
  this.back.set(this.#treeMap()[parentId]);
8894
8932
  }
8933
+ #hasFocus() {
8934
+ return this.#host.nativeElement.contains(document.activeElement);
8935
+ }
8895
8936
  isSelected(item) {
8896
8937
  // A NavRef knows what it points at, so selection is an id comparison —
8897
8938
  // no path normalising, and it works for panels as well as pages.
@@ -8912,12 +8953,15 @@ class MenuComponent {
8912
8953
  (dRule && dRule(item.disableKey ?? item.id, this.extraData())));
8913
8954
  }
8914
8955
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8915
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: MenuComponent, isStandalone: true, selector: "m-menu", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: false, transformFunction: null }, root: { classPropertyName: "root", publicName: "root", isSignal: true, isRequired: false, transformFunction: null }, url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: false, transformFunction: null }, extra: { classPropertyName: "extra", publicName: "extra", isSignal: true, isRequired: false, transformFunction: null }, hide: { classPropertyName: "hide", publicName: "hide", isSignal: true, isRequired: false, transformFunction: null }, hideLink: { classPropertyName: "hideLink", publicName: "hideLink", isSignal: true, isRequired: false, transformFunction: null }, isAdmin: { classPropertyName: "isAdmin", publicName: "isAdmin", isSignal: true, isRequired: false, transformFunction: null }, visibilityRule: { classPropertyName: "visibilityRule", publicName: "visibilityRule", isSignal: true, isRequired: false, transformFunction: null }, disableRule: { classPropertyName: "disableRule", publicName: "disableRule", isSignal: true, isRequired: false, transformFunction: null }, extraData: { classPropertyName: "extraData", publicName: "extraData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, ngImport: i0, template: "<div class=\"menu-container\" [attr.data-slide]=\"slideDirection()\">\n @if (back()) {\n <div\n class=\"back-btn\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"goBack()\"\n (keydown.enter)=\"goBack()\"\n (keydown.space)=\"goBack()\"\n >\n <div class=\"back-icon\">\n <m-icon [name]=\"'chevron-left'\" color=\"currentColor\" />\n </div>\n <span class=\"back-text\">{{ back()!.label | translate }}</span>\n </div>\n }\n\n <div class=\"menu-content\">\n @if (isLoading()) {\n <div class=\"menu-loading\">\n <div class=\"spinner\"></div>\n </div>\n } @else {\n <div class=\"menu-groups\">\n @for (group of options(); track $index; let last = $last) {\n <div class=\"menu-group\" [class.has-separator]=\"!last\">\n @for (item of group; track item.id) {\n @if (!item.hidden) {\n <div\n class=\"menu-item\"\n [attr.data-testid]=\"item.id + '-btn'\"\n [class.is-selected]=\"isSelected(item)\"\n [class.is-disabled]=\"isItemDisabled(item)\"\n [attr.aria-disabled]=\"isItemDisabled(item) || null\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"selectItem(item)\"\n (keydown.enter)=\"selectItem(item)\"\n (keydown.space)=\"selectItem(item)\"\n >\n @if (item.icon) {\n <div class=\"item-icon\">\n <m-icon [name]=\"item.icon\" color=\"currentColor\" />\n </div>\n }\n <span class=\"item-text\">{{ item.label | translate }}</span>\n @if (item.options || item.file) {\n <div class=\"item-arrow\">\n <m-icon [name]=\"'chevron-right'\" color=\"currentColor\" />\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n</div>\n", 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)}}.menu-container{display:flex;flex-direction:column;width:100%;border-radius:0;background:var(--m-menu-background, var(--m-background));border:none;overflow:hidden;transition:transform .3s cubic-bezier(.4,0,.2,1)}.back-btn{height:calc(var(--input-size, .9375rem) * 2);min-height:calc(var(--input-size, .9375rem) * 2);border-width:max(1px,var(--input-size, .9375rem) * .0625);border-radius:calc(var(--input-size, .9375rem) * .4);padding:calc(var(--input-size, .9375rem) * .5) calc(var(--input-size, .9375rem) * .5);gap:calc(var(--input-size, .9375rem) * .375);font-size:var(--input-size, .9375rem);border-color:var(--m-text-secondary);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}.back-btn:hover:not(:disabled){background-color:color-mix(in srgb,var(--m-text-secondary) 6%,transparent)}.back-btn:disabled{opacity:.6;cursor:not-allowed}.back-btn{height:auto;min-height:0;padding:calc(.9375rem * .625) calc(.9375rem * 1.25);gap:calc(.9375rem * .375);border-style:solid;display:inline-flex;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:8px;padding:.5859375rem 1.171875rem;border-radius:0;border:none;border-bottom:1px solid var(--m-backdrop-border);color:var(--m-text-secondary);font-weight:400;text-align:left;width:100%;transition:filter .15s ease,background .15s ease,color .15s ease}.back-btn:hover{background:color-mix(in srgb,var(--m-text) 8%,transparent);color:var(--m-text)}.back-btn:active{transform:scale(.97)}.back-btn .back-icon{display:flex;align-items:center}.back-btn .back-text{font-size:.9rem;font-weight:500}.menu-content{position:relative;width:100%}.menu-groups{display:flex;flex-direction:column;padding:6px}.menu-group{display:flex;flex-direction:column;gap:2px}.menu-group.has-separator{border-bottom:1px solid var(--m-backdrop-border);margin-bottom:6px;padding-bottom:6px}.menu-item{height:calc(var(--input-size, var(--menu-item-size, .9375rem)) * 2);min-height:calc(var(--input-size, var(--menu-item-size, .9375rem)) * 2);border-width:max(1px,var(--input-size, var(--menu-item-size, .9375rem)) * .0625);border-radius:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .4);padding:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .5) calc(var(--input-size, var(--menu-item-size, .9375rem)) * .5);gap:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .375);font-size:var(--input-size, var(--menu-item-size, .9375rem));border-color:var(--m-text);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}.menu-item:hover:not(:disabled){background-color:color-mix(in srgb,var(--m-text) 6%,transparent)}.menu-item:disabled{opacity:.6;cursor:not-allowed}.menu-item{height:auto;min-height:0;padding:calc(var(--menu-item-size, .9375rem) * .625) calc(var(--menu-item-size, .9375rem) * 1.25);gap:calc(var(--menu-item-size, .9375rem) * .375);border-style:solid;display:inline-flex;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:0;border:none;color:var(--m-text);font-weight:400;text-align:left;width:100%;transition:filter .15s ease,background .15s ease,color .15s ease}.menu-item:hover:not(.is-disabled):not(.menu-item.is-selected){background:color-mix(in srgb,var(--m-text) 8%,transparent);color:var(--m-text)}.menu-item:active:not(.is-disabled){transform:scale(.97)}.menu-item.is-selected{background:var(--m-backdrop-mm);color:var(--m-mm);font-weight:600}.menu-item.is-selected .item-icon{color:var(--m-mm)}.menu-item.is-selected:hover{background:color-mix(in srgb,var(--m-backdrop-mm) 88%,black)}.menu-item.is-disabled{opacity:.4;cursor:not-allowed;pointer-events:none;filter:grayscale(75%)}.menu-item .item-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:24px;height:24px;color:var(--m-text-secondary)}.menu-item .item-text{flex:1;font-size:var(--menu-text-size, .9375rem)}.menu-item .item-arrow{display:flex;align-items:center;color:var(--m-text-quaternary)}.menu-container[data-size=sm]{--menu-item-size: .8125rem;--menu-item-padding: calc(.8125rem * .625) calc(.8125rem * 1.25);--menu-text-size: .8125rem;--menu-icon-size: 20px}.menu-container[data-size=md]{--menu-item-size: .9375rem;--menu-item-padding: calc(.9375rem * .625) calc(.9375rem * 1.25);--menu-text-size: .9375rem;--menu-icon-size: 24px}.menu-container[data-size=lg]{--menu-item-size: 1.0625rem;--menu-item-padding: calc(1.0625rem * .625) calc(1.0625rem * 1.25);--menu-text-size: 1rem;--menu-icon-size: 28px}.menu-item{padding:var(--menu-item-padding, 8px 12px)}.menu-item .item-icon{width:var(--menu-icon-size, 24px);height:var(--menu-icon-size, 24px)}.menu-loading{display:flex;align-items:center;justify-content:center;padding:24px}.menu-loading .spinner{width:20px;height:20px;border:2px solid var(--m-backdrop-border);border-top-color:var(--m-mm);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes slide-forward{0%{opacity:0;transform:translate(15px)}to{opacity:1;transform:translate(0)}}@keyframes slide-backward{0%{opacity:0;transform:translate(-15px)}to{opacity:1;transform:translate(0)}}.menu-container[data-slide=forward] .menu-content{animation:slide-forward .4s cubic-bezier(.165,.84,.44,1)}.menu-container[data-slide=backward] .menu-content{animation:slide-backward .4s cubic-bezier(.165,.84,.44,1)}:host-context(.align-bottom) .menu-container{border:none;border-radius:0}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8956
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: MenuComponent, isStandalone: true, selector: "m-menu", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: false, transformFunction: null }, root: { classPropertyName: "root", publicName: "root", isSignal: true, isRequired: false, transformFunction: null }, url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: false, transformFunction: null }, extra: { classPropertyName: "extra", publicName: "extra", isSignal: true, isRequired: false, transformFunction: null }, hide: { classPropertyName: "hide", publicName: "hide", isSignal: true, isRequired: false, transformFunction: null }, hideLink: { classPropertyName: "hideLink", publicName: "hideLink", isSignal: true, isRequired: false, transformFunction: null }, isAdmin: { classPropertyName: "isAdmin", publicName: "isAdmin", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, visibilityRule: { classPropertyName: "visibilityRule", publicName: "visibilityRule", isSignal: true, isRequired: false, transformFunction: null }, disableRule: { classPropertyName: "disableRule", publicName: "disableRule", isSignal: true, isRequired: false, transformFunction: null }, extraData: { classPropertyName: "extraData", publicName: "extraData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, host: { listeners: { "keydown.arrowdown": "moveFocus($event, 1)", "keydown.arrowup": "moveFocus($event, -1)" } }, ngImport: i0, template: "<div class=\"menu-container\" [attr.data-slide]=\"slideDirection()\">\n @if (back()) {\n <div\n class=\"back-btn\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"goBack()\"\n (keydown.enter)=\"goBack()\"\n (keydown.space)=\"goBack()\"\n >\n <div class=\"back-icon\">\n <m-icon [name]=\"'chevron-left'\" color=\"currentColor\" />\n </div>\n <span class=\"back-text\">{{ back()!.label | translate }}</span>\n </div>\n }\n\n <div class=\"menu-content\">\n @if (isLoading()) {\n <div class=\"menu-loading\">\n <div class=\"spinner\"></div>\n </div>\n } @else {\n <div class=\"menu-groups\">\n @for (group of options(); track $index; let last = $last) {\n <div class=\"menu-group\" [class.has-separator]=\"!last\">\n @for (item of group; track item.id) {\n @if (!item.hidden) {\n <div\n class=\"menu-item\"\n [attr.data-testid]=\"item.id + '-btn'\"\n [class.is-selected]=\"isSelected(item)\"\n [class.is-disabled]=\"isItemDisabled(item)\"\n [attr.aria-disabled]=\"isItemDisabled(item) || null\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"selectItem(item)\"\n (keydown.enter)=\"selectItem(item)\"\n (keydown.space)=\"selectItem(item)\"\n >\n @if (item.icon) {\n <div class=\"item-icon\">\n <m-icon [name]=\"item.icon\" color=\"currentColor\" />\n </div>\n }\n <span class=\"item-text\">{{ item.label | translate }}</span>\n @if (item.options || item.file) {\n <div class=\"item-arrow\">\n <m-icon [name]=\"'chevron-right'\" color=\"currentColor\" />\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n</div>\n", 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)}}.menu-container{display:flex;flex-direction:column;width:100%;border-radius:0;background:var(--m-menu-background, var(--m-background));border:none;overflow:hidden;transition:transform .3s cubic-bezier(.4,0,.2,1)}.back-btn{height:calc(var(--input-size, .9375rem) * 2);min-height:calc(var(--input-size, .9375rem) * 2);border-width:max(1px,var(--input-size, .9375rem) * .0625);border-radius:calc(var(--input-size, .9375rem) * .4);padding:calc(var(--input-size, .9375rem) * .5) calc(var(--input-size, .9375rem) * .5);gap:calc(var(--input-size, .9375rem) * .375);font-size:var(--input-size, .9375rem);border-color:var(--m-text-secondary);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}.back-btn:hover:not(:disabled){background-color:color-mix(in srgb,var(--m-text-secondary) 6%,transparent)}.back-btn:disabled{opacity:.6;cursor:not-allowed}.back-btn{height:auto;min-height:0;padding:calc(.9375rem * .625) calc(.9375rem * 1.25);gap:calc(.9375rem * .375);border-style:solid;display:inline-flex;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:8px;padding:.5859375rem 1.171875rem;border-radius:0;border:none;border-bottom:1px solid var(--m-backdrop-border);color:var(--m-text-secondary);font-weight:400;text-align:left;width:100%;transition:filter .15s ease,background .15s ease,color .15s ease}.back-btn:hover,.back-btn:focus-visible{outline:none;background:color-mix(in srgb,var(--m-text) 8%,transparent);color:var(--m-text)}.back-btn:active{transform:scale(.97)}.back-btn .back-icon{display:flex;align-items:center}.back-btn .back-text{font-size:.9rem;font-weight:500}.menu-content{position:relative;width:100%}.menu-groups{display:flex;flex-direction:column;padding:6px}.menu-group{display:flex;flex-direction:column;gap:2px}.menu-group.has-separator{border-bottom:1px solid var(--m-backdrop-border);margin-bottom:6px;padding-bottom:6px}.menu-item{height:calc(var(--input-size, var(--menu-item-size, .9375rem)) * 2);min-height:calc(var(--input-size, var(--menu-item-size, .9375rem)) * 2);border-width:max(1px,var(--input-size, var(--menu-item-size, .9375rem)) * .0625);border-radius:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .4);padding:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .5) calc(var(--input-size, var(--menu-item-size, .9375rem)) * .5);gap:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .375);font-size:var(--input-size, var(--menu-item-size, .9375rem));border-color:var(--m-text);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}.menu-item:hover:not(:disabled){background-color:color-mix(in srgb,var(--m-text) 6%,transparent)}.menu-item:disabled{opacity:.6;cursor:not-allowed}.menu-item{height:auto;min-height:0;padding:calc(var(--menu-item-size, .9375rem) * .625) calc(var(--menu-item-size, .9375rem) * 1.25);gap:calc(var(--menu-item-size, .9375rem) * .375);border-style:solid;display:inline-flex;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:0;border:none;color:var(--m-text);font-weight:400;text-align:left;width:100%;transition:filter .15s ease,background .15s ease,color .15s ease}.menu-item:focus-visible{outline:none}.menu-item:hover:not(.is-disabled):not(.menu-item.is-selected),.menu-item:focus-visible:not(.is-selected){background:color-mix(in srgb,var(--m-text) 8%,transparent);color:var(--m-text)}.menu-item:active:not(.is-disabled){transform:scale(.97)}.menu-item.is-selected{background:var(--m-backdrop-mm);color:var(--m-mm);font-weight:600}.menu-item.is-selected .item-icon{color:var(--m-mm)}.menu-item.is-selected:hover,.menu-item.is-selected:focus-visible{background:color-mix(in srgb,var(--m-backdrop-mm) 88%,black)}.menu-item.is-disabled{opacity:.4;cursor:not-allowed;pointer-events:none;filter:grayscale(75%)}.menu-item .item-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:24px;height:24px;color:var(--m-text-secondary)}.menu-item .item-text{flex:1;font-size:var(--menu-text-size, .9375rem)}.menu-item .item-arrow{display:flex;align-items:center;color:var(--m-text-quaternary)}.menu-container[data-size=sm]{--menu-item-size: .8125rem;--menu-item-padding: calc(.8125rem * .625) calc(.8125rem * 1.25);--menu-text-size: .8125rem;--menu-icon-size: 20px}.menu-container[data-size=md]{--menu-item-size: .9375rem;--menu-item-padding: calc(.9375rem * .625) calc(.9375rem * 1.25);--menu-text-size: .9375rem;--menu-icon-size: 24px}.menu-container[data-size=lg]{--menu-item-size: 1.0625rem;--menu-item-padding: calc(1.0625rem * .625) calc(1.0625rem * 1.25);--menu-text-size: 1rem;--menu-icon-size: 28px}.menu-item{padding:var(--menu-item-padding, 8px 12px)}.menu-item .item-icon{width:var(--menu-icon-size, 24px);height:var(--menu-icon-size, 24px)}.menu-loading{display:flex;align-items:center;justify-content:center;padding:24px}.menu-loading .spinner{width:20px;height:20px;border:2px solid var(--m-backdrop-border);border-top-color:var(--m-mm);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes slide-forward{0%{opacity:0;transform:translate(15px)}to{opacity:1;transform:translate(0)}}@keyframes slide-backward{0%{opacity:0;transform:translate(-15px)}to{opacity:1;transform:translate(0)}}.menu-container[data-slide=forward] .menu-content{animation:slide-forward .4s cubic-bezier(.165,.84,.44,1)}.menu-container[data-slide=backward] .menu-content{animation:slide-backward .4s cubic-bezier(.165,.84,.44,1)}:host-context(.align-bottom) .menu-container{border:none;border-radius:0}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8916
8957
  }
8917
8958
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MenuComponent, decorators: [{
8918
8959
  type: Component,
8919
- args: [{ selector: 'm-menu', imports: [TranslatePipe, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"menu-container\" [attr.data-slide]=\"slideDirection()\">\n @if (back()) {\n <div\n class=\"back-btn\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"goBack()\"\n (keydown.enter)=\"goBack()\"\n (keydown.space)=\"goBack()\"\n >\n <div class=\"back-icon\">\n <m-icon [name]=\"'chevron-left'\" color=\"currentColor\" />\n </div>\n <span class=\"back-text\">{{ back()!.label | translate }}</span>\n </div>\n }\n\n <div class=\"menu-content\">\n @if (isLoading()) {\n <div class=\"menu-loading\">\n <div class=\"spinner\"></div>\n </div>\n } @else {\n <div class=\"menu-groups\">\n @for (group of options(); track $index; let last = $last) {\n <div class=\"menu-group\" [class.has-separator]=\"!last\">\n @for (item of group; track item.id) {\n @if (!item.hidden) {\n <div\n class=\"menu-item\"\n [attr.data-testid]=\"item.id + '-btn'\"\n [class.is-selected]=\"isSelected(item)\"\n [class.is-disabled]=\"isItemDisabled(item)\"\n [attr.aria-disabled]=\"isItemDisabled(item) || null\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"selectItem(item)\"\n (keydown.enter)=\"selectItem(item)\"\n (keydown.space)=\"selectItem(item)\"\n >\n @if (item.icon) {\n <div class=\"item-icon\">\n <m-icon [name]=\"item.icon\" color=\"currentColor\" />\n </div>\n }\n <span class=\"item-text\">{{ item.label | translate }}</span>\n @if (item.options || item.file) {\n <div class=\"item-arrow\">\n <m-icon [name]=\"'chevron-right'\" color=\"currentColor\" />\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n</div>\n", 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)}}.menu-container{display:flex;flex-direction:column;width:100%;border-radius:0;background:var(--m-menu-background, var(--m-background));border:none;overflow:hidden;transition:transform .3s cubic-bezier(.4,0,.2,1)}.back-btn{height:calc(var(--input-size, .9375rem) * 2);min-height:calc(var(--input-size, .9375rem) * 2);border-width:max(1px,var(--input-size, .9375rem) * .0625);border-radius:calc(var(--input-size, .9375rem) * .4);padding:calc(var(--input-size, .9375rem) * .5) calc(var(--input-size, .9375rem) * .5);gap:calc(var(--input-size, .9375rem) * .375);font-size:var(--input-size, .9375rem);border-color:var(--m-text-secondary);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}.back-btn:hover:not(:disabled){background-color:color-mix(in srgb,var(--m-text-secondary) 6%,transparent)}.back-btn:disabled{opacity:.6;cursor:not-allowed}.back-btn{height:auto;min-height:0;padding:calc(.9375rem * .625) calc(.9375rem * 1.25);gap:calc(.9375rem * .375);border-style:solid;display:inline-flex;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:8px;padding:.5859375rem 1.171875rem;border-radius:0;border:none;border-bottom:1px solid var(--m-backdrop-border);color:var(--m-text-secondary);font-weight:400;text-align:left;width:100%;transition:filter .15s ease,background .15s ease,color .15s ease}.back-btn:hover{background:color-mix(in srgb,var(--m-text) 8%,transparent);color:var(--m-text)}.back-btn:active{transform:scale(.97)}.back-btn .back-icon{display:flex;align-items:center}.back-btn .back-text{font-size:.9rem;font-weight:500}.menu-content{position:relative;width:100%}.menu-groups{display:flex;flex-direction:column;padding:6px}.menu-group{display:flex;flex-direction:column;gap:2px}.menu-group.has-separator{border-bottom:1px solid var(--m-backdrop-border);margin-bottom:6px;padding-bottom:6px}.menu-item{height:calc(var(--input-size, var(--menu-item-size, .9375rem)) * 2);min-height:calc(var(--input-size, var(--menu-item-size, .9375rem)) * 2);border-width:max(1px,var(--input-size, var(--menu-item-size, .9375rem)) * .0625);border-radius:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .4);padding:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .5) calc(var(--input-size, var(--menu-item-size, .9375rem)) * .5);gap:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .375);font-size:var(--input-size, var(--menu-item-size, .9375rem));border-color:var(--m-text);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}.menu-item:hover:not(:disabled){background-color:color-mix(in srgb,var(--m-text) 6%,transparent)}.menu-item:disabled{opacity:.6;cursor:not-allowed}.menu-item{height:auto;min-height:0;padding:calc(var(--menu-item-size, .9375rem) * .625) calc(var(--menu-item-size, .9375rem) * 1.25);gap:calc(var(--menu-item-size, .9375rem) * .375);border-style:solid;display:inline-flex;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:0;border:none;color:var(--m-text);font-weight:400;text-align:left;width:100%;transition:filter .15s ease,background .15s ease,color .15s ease}.menu-item:hover:not(.is-disabled):not(.menu-item.is-selected){background:color-mix(in srgb,var(--m-text) 8%,transparent);color:var(--m-text)}.menu-item:active:not(.is-disabled){transform:scale(.97)}.menu-item.is-selected{background:var(--m-backdrop-mm);color:var(--m-mm);font-weight:600}.menu-item.is-selected .item-icon{color:var(--m-mm)}.menu-item.is-selected:hover{background:color-mix(in srgb,var(--m-backdrop-mm) 88%,black)}.menu-item.is-disabled{opacity:.4;cursor:not-allowed;pointer-events:none;filter:grayscale(75%)}.menu-item .item-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:24px;height:24px;color:var(--m-text-secondary)}.menu-item .item-text{flex:1;font-size:var(--menu-text-size, .9375rem)}.menu-item .item-arrow{display:flex;align-items:center;color:var(--m-text-quaternary)}.menu-container[data-size=sm]{--menu-item-size: .8125rem;--menu-item-padding: calc(.8125rem * .625) calc(.8125rem * 1.25);--menu-text-size: .8125rem;--menu-icon-size: 20px}.menu-container[data-size=md]{--menu-item-size: .9375rem;--menu-item-padding: calc(.9375rem * .625) calc(.9375rem * 1.25);--menu-text-size: .9375rem;--menu-icon-size: 24px}.menu-container[data-size=lg]{--menu-item-size: 1.0625rem;--menu-item-padding: calc(1.0625rem * .625) calc(1.0625rem * 1.25);--menu-text-size: 1rem;--menu-icon-size: 28px}.menu-item{padding:var(--menu-item-padding, 8px 12px)}.menu-item .item-icon{width:var(--menu-icon-size, 24px);height:var(--menu-icon-size, 24px)}.menu-loading{display:flex;align-items:center;justify-content:center;padding:24px}.menu-loading .spinner{width:20px;height:20px;border:2px solid var(--m-backdrop-border);border-top-color:var(--m-mm);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes slide-forward{0%{opacity:0;transform:translate(15px)}to{opacity:1;transform:translate(0)}}@keyframes slide-backward{0%{opacity:0;transform:translate(-15px)}to{opacity:1;transform:translate(0)}}.menu-container[data-slide=forward] .menu-content{animation:slide-forward .4s cubic-bezier(.165,.84,.44,1)}.menu-container[data-slide=backward] .menu-content{animation:slide-backward .4s cubic-bezier(.165,.84,.44,1)}:host-context(.align-bottom) .menu-container{border:none;border-radius:0}\n"] }]
8920
- }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], file: [{ type: i0.Input, args: [{ isSignal: true, alias: "file", required: false }] }], root: [{ type: i0.Input, args: [{ isSignal: true, alias: "root", required: false }] }], url: [{ type: i0.Input, args: [{ isSignal: true, alias: "url", required: false }] }], extra: [{ type: i0.Input, args: [{ isSignal: true, alias: "extra", required: false }] }], hide: [{ type: i0.Input, args: [{ isSignal: true, alias: "hide", required: false }] }], hideLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideLink", required: false }] }], isAdmin: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAdmin", required: false }] }], action: [{ type: i0.Output, args: ["action"] }], visibilityRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibilityRule", required: false }] }], disableRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableRule", required: false }] }], extraData: [{ type: i0.Input, args: [{ isSignal: true, alias: "extraData", required: false }] }] } });
8960
+ args: [{ selector: 'm-menu', imports: [TranslatePipe, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
8961
+ '(keydown.arrowdown)': 'moveFocus($event, 1)',
8962
+ '(keydown.arrowup)': 'moveFocus($event, -1)',
8963
+ }, template: "<div class=\"menu-container\" [attr.data-slide]=\"slideDirection()\">\n @if (back()) {\n <div\n class=\"back-btn\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"goBack()\"\n (keydown.enter)=\"goBack()\"\n (keydown.space)=\"goBack()\"\n >\n <div class=\"back-icon\">\n <m-icon [name]=\"'chevron-left'\" color=\"currentColor\" />\n </div>\n <span class=\"back-text\">{{ back()!.label | translate }}</span>\n </div>\n }\n\n <div class=\"menu-content\">\n @if (isLoading()) {\n <div class=\"menu-loading\">\n <div class=\"spinner\"></div>\n </div>\n } @else {\n <div class=\"menu-groups\">\n @for (group of options(); track $index; let last = $last) {\n <div class=\"menu-group\" [class.has-separator]=\"!last\">\n @for (item of group; track item.id) {\n @if (!item.hidden) {\n <div\n class=\"menu-item\"\n [attr.data-testid]=\"item.id + '-btn'\"\n [class.is-selected]=\"isSelected(item)\"\n [class.is-disabled]=\"isItemDisabled(item)\"\n [attr.aria-disabled]=\"isItemDisabled(item) || null\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"selectItem(item)\"\n (keydown.enter)=\"selectItem(item)\"\n (keydown.space)=\"selectItem(item)\"\n >\n @if (item.icon) {\n <div class=\"item-icon\">\n <m-icon [name]=\"item.icon\" color=\"currentColor\" />\n </div>\n }\n <span class=\"item-text\">{{ item.label | translate }}</span>\n @if (item.options || item.file) {\n <div class=\"item-arrow\">\n <m-icon [name]=\"'chevron-right'\" color=\"currentColor\" />\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n</div>\n", 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)}}.menu-container{display:flex;flex-direction:column;width:100%;border-radius:0;background:var(--m-menu-background, var(--m-background));border:none;overflow:hidden;transition:transform .3s cubic-bezier(.4,0,.2,1)}.back-btn{height:calc(var(--input-size, .9375rem) * 2);min-height:calc(var(--input-size, .9375rem) * 2);border-width:max(1px,var(--input-size, .9375rem) * .0625);border-radius:calc(var(--input-size, .9375rem) * .4);padding:calc(var(--input-size, .9375rem) * .5) calc(var(--input-size, .9375rem) * .5);gap:calc(var(--input-size, .9375rem) * .375);font-size:var(--input-size, .9375rem);border-color:var(--m-text-secondary);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}.back-btn:hover:not(:disabled){background-color:color-mix(in srgb,var(--m-text-secondary) 6%,transparent)}.back-btn:disabled{opacity:.6;cursor:not-allowed}.back-btn{height:auto;min-height:0;padding:calc(.9375rem * .625) calc(.9375rem * 1.25);gap:calc(.9375rem * .375);border-style:solid;display:inline-flex;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:8px;padding:.5859375rem 1.171875rem;border-radius:0;border:none;border-bottom:1px solid var(--m-backdrop-border);color:var(--m-text-secondary);font-weight:400;text-align:left;width:100%;transition:filter .15s ease,background .15s ease,color .15s ease}.back-btn:hover,.back-btn:focus-visible{outline:none;background:color-mix(in srgb,var(--m-text) 8%,transparent);color:var(--m-text)}.back-btn:active{transform:scale(.97)}.back-btn .back-icon{display:flex;align-items:center}.back-btn .back-text{font-size:.9rem;font-weight:500}.menu-content{position:relative;width:100%}.menu-groups{display:flex;flex-direction:column;padding:6px}.menu-group{display:flex;flex-direction:column;gap:2px}.menu-group.has-separator{border-bottom:1px solid var(--m-backdrop-border);margin-bottom:6px;padding-bottom:6px}.menu-item{height:calc(var(--input-size, var(--menu-item-size, .9375rem)) * 2);min-height:calc(var(--input-size, var(--menu-item-size, .9375rem)) * 2);border-width:max(1px,var(--input-size, var(--menu-item-size, .9375rem)) * .0625);border-radius:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .4);padding:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .5) calc(var(--input-size, var(--menu-item-size, .9375rem)) * .5);gap:calc(var(--input-size, var(--menu-item-size, .9375rem)) * .375);font-size:var(--input-size, var(--menu-item-size, .9375rem));border-color:var(--m-text);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}.menu-item:hover:not(:disabled){background-color:color-mix(in srgb,var(--m-text) 6%,transparent)}.menu-item:disabled{opacity:.6;cursor:not-allowed}.menu-item{height:auto;min-height:0;padding:calc(var(--menu-item-size, .9375rem) * .625) calc(var(--menu-item-size, .9375rem) * 1.25);gap:calc(var(--menu-item-size, .9375rem) * .375);border-style:solid;display:inline-flex;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:0;border:none;color:var(--m-text);font-weight:400;text-align:left;width:100%;transition:filter .15s ease,background .15s ease,color .15s ease}.menu-item:focus-visible{outline:none}.menu-item:hover:not(.is-disabled):not(.menu-item.is-selected),.menu-item:focus-visible:not(.is-selected){background:color-mix(in srgb,var(--m-text) 8%,transparent);color:var(--m-text)}.menu-item:active:not(.is-disabled){transform:scale(.97)}.menu-item.is-selected{background:var(--m-backdrop-mm);color:var(--m-mm);font-weight:600}.menu-item.is-selected .item-icon{color:var(--m-mm)}.menu-item.is-selected:hover,.menu-item.is-selected:focus-visible{background:color-mix(in srgb,var(--m-backdrop-mm) 88%,black)}.menu-item.is-disabled{opacity:.4;cursor:not-allowed;pointer-events:none;filter:grayscale(75%)}.menu-item .item-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:24px;height:24px;color:var(--m-text-secondary)}.menu-item .item-text{flex:1;font-size:var(--menu-text-size, .9375rem)}.menu-item .item-arrow{display:flex;align-items:center;color:var(--m-text-quaternary)}.menu-container[data-size=sm]{--menu-item-size: .8125rem;--menu-item-padding: calc(.8125rem * .625) calc(.8125rem * 1.25);--menu-text-size: .8125rem;--menu-icon-size: 20px}.menu-container[data-size=md]{--menu-item-size: .9375rem;--menu-item-padding: calc(.9375rem * .625) calc(.9375rem * 1.25);--menu-text-size: .9375rem;--menu-icon-size: 24px}.menu-container[data-size=lg]{--menu-item-size: 1.0625rem;--menu-item-padding: calc(1.0625rem * .625) calc(1.0625rem * 1.25);--menu-text-size: 1rem;--menu-icon-size: 28px}.menu-item{padding:var(--menu-item-padding, 8px 12px)}.menu-item .item-icon{width:var(--menu-icon-size, 24px);height:var(--menu-icon-size, 24px)}.menu-loading{display:flex;align-items:center;justify-content:center;padding:24px}.menu-loading .spinner{width:20px;height:20px;border:2px solid var(--m-backdrop-border);border-top-color:var(--m-mm);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes slide-forward{0%{opacity:0;transform:translate(15px)}to{opacity:1;transform:translate(0)}}@keyframes slide-backward{0%{opacity:0;transform:translate(-15px)}to{opacity:1;transform:translate(0)}}.menu-container[data-slide=forward] .menu-content{animation:slide-forward .4s cubic-bezier(.165,.84,.44,1)}.menu-container[data-slide=backward] .menu-content{animation:slide-backward .4s cubic-bezier(.165,.84,.44,1)}:host-context(.align-bottom) .menu-container{border:none;border-radius:0}\n"] }]
8964
+ }], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], file: [{ type: i0.Input, args: [{ isSignal: true, alias: "file", required: false }] }], root: [{ type: i0.Input, args: [{ isSignal: true, alias: "root", required: false }] }], url: [{ type: i0.Input, args: [{ isSignal: true, alias: "url", required: false }] }], extra: [{ type: i0.Input, args: [{ isSignal: true, alias: "extra", required: false }] }], hide: [{ type: i0.Input, args: [{ isSignal: true, alias: "hide", required: false }] }], hideLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideLink", required: false }] }], isAdmin: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAdmin", required: false }] }], autoFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoFocus", required: false }] }], action: [{ type: i0.Output, args: ["action"] }], visibilityRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibilityRule", required: false }] }], disableRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableRule", required: false }] }], extraData: [{ type: i0.Input, args: [{ isSignal: true, alias: "extraData", required: false }] }] } });
8921
8965
 
8922
8966
  class ContextMenuBoxComponent {
8923
8967
  options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
@@ -8934,11 +8978,11 @@ class ContextMenuBoxComponent {
8934
8978
  this.action.emit(item);
8935
8979
  };
8936
8980
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ContextMenuBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8937
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: ContextMenuBoxComponent, isStandalone: true, selector: "m-context-menu-box", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, hide: { classPropertyName: "hide", publicName: "hide", isSignal: true, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, isAdmin: { classPropertyName: "isAdmin", publicName: "isAdmin", isSignal: true, isRequired: false, transformFunction: null }, visibilityRule: { classPropertyName: "visibilityRule", publicName: "visibilityRule", isSignal: true, isRequired: false, transformFunction: null }, disableRule: { classPropertyName: "disableRule", publicName: "disableRule", isSignal: true, isRequired: false, transformFunction: null }, extraData: { classPropertyName: "extraData", publicName: "extraData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, ngImport: i0, template: "<div class=\"m-context-menu-box\" [style.width]=\"width()\" [style.max-height]=\"height()\">\n <m-menu\n [config]=\"options()\"\n [hide]=\"hide()\"\n [file]=\"file()\"\n [isAdmin]=\"isAdmin()\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"emitAction($event)\"\n />\n</div>\n", 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)}}.m-context-menu-box{overflow-y:auto;padding:.375rem;border-radius:var(--m-input-radius, .5rem);border:var(--m-input-border-width, 1px) solid color-mix(in srgb,var(--m-text) 18%,var(--m-background));background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:context-menu-in .2s ease-out}@keyframes context-menu-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host-context(.align-bottom){display:block;width:100%!important;max-width:100%!important}:host-context(.align-bottom) .m-context-menu-box{width:100%!important;max-width:100%!important;max-height:70vh!important;border-left:none;border-right:none;border-bottom:none}\n"], dependencies: [{ kind: "component", type: MenuComponent, selector: "m-menu", inputs: ["config", "file", "root", "url", "extra", "hide", "hideLink", "isAdmin", "visibilityRule", "disableRule", "extraData"], outputs: ["action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8981
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: ContextMenuBoxComponent, isStandalone: true, selector: "m-context-menu-box", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, hide: { classPropertyName: "hide", publicName: "hide", isSignal: true, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, isAdmin: { classPropertyName: "isAdmin", publicName: "isAdmin", isSignal: true, isRequired: false, transformFunction: null }, visibilityRule: { classPropertyName: "visibilityRule", publicName: "visibilityRule", isSignal: true, isRequired: false, transformFunction: null }, disableRule: { classPropertyName: "disableRule", publicName: "disableRule", isSignal: true, isRequired: false, transformFunction: null }, extraData: { classPropertyName: "extraData", publicName: "extraData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, ngImport: i0, template: "<div class=\"m-context-menu-box\" [style.width]=\"width()\" [style.max-height]=\"height()\">\n <m-menu\n [config]=\"options()\"\n [hide]=\"hide()\"\n [file]=\"file()\"\n [isAdmin]=\"isAdmin()\"\n [autoFocus]=\"true\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"emitAction($event)\"\n />\n</div>\n", 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)}}.m-context-menu-box{overflow-y:auto;padding:.375rem;border-radius:var(--m-input-radius, .5rem);border:var(--m-input-border-width, 1px) solid color-mix(in srgb,var(--m-text) 18%,var(--m-background));background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:context-menu-in .2s ease-out}@keyframes context-menu-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host-context(.align-bottom){display:block;width:100%!important;max-width:100%!important}:host-context(.align-bottom) .m-context-menu-box{width:100%!important;max-width:100%!important;max-height:70vh!important;border-left:none;border-right:none;border-bottom:none}\n"], dependencies: [{ kind: "component", type: MenuComponent, selector: "m-menu", inputs: ["config", "file", "root", "url", "extra", "hide", "hideLink", "isAdmin", "autoFocus", "visibilityRule", "disableRule", "extraData"], outputs: ["action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8938
8982
  }
8939
8983
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ContextMenuBoxComponent, decorators: [{
8940
8984
  type: Component,
8941
- args: [{ selector: 'm-context-menu-box', imports: [MenuComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"m-context-menu-box\" [style.width]=\"width()\" [style.max-height]=\"height()\">\n <m-menu\n [config]=\"options()\"\n [hide]=\"hide()\"\n [file]=\"file()\"\n [isAdmin]=\"isAdmin()\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"emitAction($event)\"\n />\n</div>\n", 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)}}.m-context-menu-box{overflow-y:auto;padding:.375rem;border-radius:var(--m-input-radius, .5rem);border:var(--m-input-border-width, 1px) solid color-mix(in srgb,var(--m-text) 18%,var(--m-background));background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:context-menu-in .2s ease-out}@keyframes context-menu-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host-context(.align-bottom){display:block;width:100%!important;max-width:100%!important}:host-context(.align-bottom) .m-context-menu-box{width:100%!important;max-width:100%!important;max-height:70vh!important;border-left:none;border-right:none;border-bottom:none}\n"] }]
8985
+ args: [{ selector: 'm-context-menu-box', imports: [MenuComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"m-context-menu-box\" [style.width]=\"width()\" [style.max-height]=\"height()\">\n <m-menu\n [config]=\"options()\"\n [hide]=\"hide()\"\n [file]=\"file()\"\n [isAdmin]=\"isAdmin()\"\n [autoFocus]=\"true\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"emitAction($event)\"\n />\n</div>\n", 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)}}.m-context-menu-box{overflow-y:auto;padding:.375rem;border-radius:var(--m-input-radius, .5rem);border:var(--m-input-border-width, 1px) solid color-mix(in srgb,var(--m-text) 18%,var(--m-background));background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:context-menu-in .2s ease-out}@keyframes context-menu-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host-context(.align-bottom){display:block;width:100%!important;max-width:100%!important}:host-context(.align-bottom) .m-context-menu-box{width:100%!important;max-width:100%!important;max-height:70vh!important;border-left:none;border-right:none;border-bottom:none}\n"] }]
8942
8986
  }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], hide: [{ type: i0.Input, args: [{ isSignal: true, alias: "hide", required: false }] }], file: [{ type: i0.Input, args: [{ isSignal: true, alias: "file", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], isAdmin: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAdmin", required: false }] }], action: [{ type: i0.Output, args: ["action"] }], visibilityRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibilityRule", required: false }] }], disableRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableRule", required: false }] }], extraData: [{ type: i0.Input, args: [{ isSignal: true, alias: "extraData", required: false }] }] } });
8943
8987
 
8944
8988
  class ContextMenuComponent extends ConfigComponent {
@@ -10668,12 +10712,12 @@ function getCursor({ direction }) {
10668
10712
  }
10669
10713
 
10670
10714
  /** Buttons/links inside a handle must keep their click — not start a drag. */
10671
- const INTERACTIVE_SELECTOR = 'button, a, input, textarea, select, [contenteditable="true"]';
10715
+ const INTERACTIVE_SELECTOR$1 = 'button, a, input, textarea, select, [contenteditable="true"]';
10672
10716
  const shouldIgnorePointer = (target) => target.tagName === 'INPUT' ||
10673
10717
  target.tagName === 'TEXTAREA' ||
10674
10718
  target.tagName === 'SELECT' ||
10675
10719
  target.isContentEditable ||
10676
- !!target.closest(INTERACTIVE_SELECTOR);
10720
+ !!target.closest(INTERACTIVE_SELECTOR$1);
10677
10721
  class DraggableDirective {
10678
10722
  mDraggable = model.required(...(ngDevMode ? [{ debugName: "mDraggable" }] : /* istanbul ignore next */ []));
10679
10723
  handleSelector = input(...(ngDevMode ? [undefined, { debugName: "handleSelector" }] : /* istanbul ignore next */ []));
@@ -19675,7 +19719,19 @@ class DropdownBoxComponent {
19675
19719
  options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
19676
19720
  selected = input('', ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
19677
19721
  multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
19722
+ activeIndex = input(-1, ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
19678
19723
  action = output();
19724
+ host = inject(ElementRef);
19725
+ // Keep the keyboard-active option in view as ↑/↓ walk a scrolled list.
19726
+ constructor() {
19727
+ effect(() => {
19728
+ const index = this.activeIndex();
19729
+ if (index < 0)
19730
+ return;
19731
+ this.host.nativeElement
19732
+ .querySelectorAll('.dropdown-box__option')[index]?.scrollIntoView?.({ block: 'nearest' });
19733
+ });
19734
+ }
19679
19735
  isSelected = (value) => {
19680
19736
  const sel = this.selected();
19681
19737
  if (Array.isArray(sel)) {
@@ -19690,14 +19746,15 @@ class DropdownBoxComponent {
19690
19746
  this.action.emit(option);
19691
19747
  };
19692
19748
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DropdownBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19693
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DropdownBoxComponent, isStandalone: true, selector: "m-dropdown-box", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, ngImport: i0, template: `
19749
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DropdownBoxComponent, isStandalone: true, selector: "m-dropdown-box", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, activeIndex: { classPropertyName: "activeIndex", publicName: "activeIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, ngImport: i0, template: `
19694
19750
  <ul class="dropdown-box" role="listbox">
19695
- @for (option of options(); track option.value) {
19751
+ @for (option of options(); track option.value; let i = $index) {
19696
19752
  @let selectedState = isSelected(option.value);
19697
19753
  <li
19698
19754
  class="dropdown-box__option"
19699
19755
  [class.dropdown-box__option--selected]="selectedState"
19700
19756
  [class.dropdown-box__option--disabled]="option.disabled"
19757
+ [class.dropdown-box__option--active]="i === activeIndex()"
19701
19758
  role="option"
19702
19759
  [attr.aria-selected]="selectedState"
19703
19760
  [attr.data-value]="option.value"
@@ -19727,18 +19784,19 @@ class DropdownBoxComponent {
19727
19784
  </li>
19728
19785
  }
19729
19786
  </ul>
19730
- `, 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)}}.dropdown-box{overflow-y:auto;max-height:15rem;margin:0;padding:.375rem;list-style:none;border:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));border-radius:var(--m-input-radius, .5rem);background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:dropdown-in .2s ease-out}.dropdown-box__checkbox{flex-shrink:0;width:14px;height:14px;margin-right:8px;pointer-events:none;accent-color:var(--m-mm);cursor:pointer}.dropdown-box__option{display:flex;align-items:center;padding:.625rem .75rem;border-radius:.375rem;cursor:pointer;font-size:.875rem;color:var(--m-text);transition:background .15s ease}.dropdown-box__option:hover{background:color-mix(in srgb,var(--m-focus) 8%,transparent)}.dropdown-box__option--selected{font-weight:600;color:var(--m-mm)}.dropdown-box__option--disabled{opacity:.4;pointer-events:none}.dropdown-box__empty{padding:.75rem;text-align:center;color:var(--m-text-tertiary);font-size:.875rem}@keyframes dropdown-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host(.open-upward) .dropdown-box{animation:dropdown-in-up .2s ease-out}@keyframes dropdown-in-up{0%{opacity:0;transform:scale(.95) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host-context(.align-bottom) .dropdown-box{max-height:70vh;border:none;border-radius:0;background:transparent;box-shadow:none;animation:none}\n"], dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19787
+ `, 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)}}.dropdown-box{overflow-y:auto;max-height:15rem;margin:0;padding:.375rem;list-style:none;border:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));border-radius:var(--m-input-radius, .5rem);background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:dropdown-in .2s ease-out}.dropdown-box__checkbox{flex-shrink:0;width:14px;height:14px;margin-right:8px;pointer-events:none;accent-color:var(--m-mm);cursor:pointer}.dropdown-box__option{display:flex;align-items:center;padding:.625rem .75rem;border-radius:.375rem;cursor:pointer;font-size:.875rem;color:var(--m-text);transition:background .15s ease}.dropdown-box__option:hover,.dropdown-box__option--active{background:color-mix(in srgb,var(--m-focus) 8%,transparent)}.dropdown-box__option--selected{font-weight:600;color:var(--m-mm)}.dropdown-box__option--disabled{opacity:.4;pointer-events:none}.dropdown-box__empty{padding:.75rem;text-align:center;color:var(--m-text-tertiary);font-size:.875rem}@keyframes dropdown-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host(.open-upward) .dropdown-box{animation:dropdown-in-up .2s ease-out}@keyframes dropdown-in-up{0%{opacity:0;transform:scale(.95) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host-context(.align-bottom) .dropdown-box{max-height:70vh;border:none;border-radius:0;background:transparent;box-shadow:none;animation:none}\n"], dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19731
19788
  }
19732
19789
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DropdownBoxComponent, decorators: [{
19733
19790
  type: Component,
19734
19791
  args: [{ selector: 'm-dropdown-box', imports: [TranslatePipe], template: `
19735
19792
  <ul class="dropdown-box" role="listbox">
19736
- @for (option of options(); track option.value) {
19793
+ @for (option of options(); track option.value; let i = $index) {
19737
19794
  @let selectedState = isSelected(option.value);
19738
19795
  <li
19739
19796
  class="dropdown-box__option"
19740
19797
  [class.dropdown-box__option--selected]="selectedState"
19741
19798
  [class.dropdown-box__option--disabled]="option.disabled"
19799
+ [class.dropdown-box__option--active]="i === activeIndex()"
19742
19800
  role="option"
19743
19801
  [attr.aria-selected]="selectedState"
19744
19802
  [attr.data-value]="option.value"
@@ -19768,8 +19826,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
19768
19826
  </li>
19769
19827
  }
19770
19828
  </ul>
19771
- `, 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)}}.dropdown-box{overflow-y:auto;max-height:15rem;margin:0;padding:.375rem;list-style:none;border:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));border-radius:var(--m-input-radius, .5rem);background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:dropdown-in .2s ease-out}.dropdown-box__checkbox{flex-shrink:0;width:14px;height:14px;margin-right:8px;pointer-events:none;accent-color:var(--m-mm);cursor:pointer}.dropdown-box__option{display:flex;align-items:center;padding:.625rem .75rem;border-radius:.375rem;cursor:pointer;font-size:.875rem;color:var(--m-text);transition:background .15s ease}.dropdown-box__option:hover{background:color-mix(in srgb,var(--m-focus) 8%,transparent)}.dropdown-box__option--selected{font-weight:600;color:var(--m-mm)}.dropdown-box__option--disabled{opacity:.4;pointer-events:none}.dropdown-box__empty{padding:.75rem;text-align:center;color:var(--m-text-tertiary);font-size:.875rem}@keyframes dropdown-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host(.open-upward) .dropdown-box{animation:dropdown-in-up .2s ease-out}@keyframes dropdown-in-up{0%{opacity:0;transform:scale(.95) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host-context(.align-bottom) .dropdown-box{max-height:70vh;border:none;border-radius:0;background:transparent;box-shadow:none;animation:none}\n"] }]
19772
- }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], action: [{ type: i0.Output, args: ["action"] }] } });
19829
+ `, 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)}}.dropdown-box{overflow-y:auto;max-height:15rem;margin:0;padding:.375rem;list-style:none;border:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));border-radius:var(--m-input-radius, .5rem);background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:dropdown-in .2s ease-out}.dropdown-box__checkbox{flex-shrink:0;width:14px;height:14px;margin-right:8px;pointer-events:none;accent-color:var(--m-mm);cursor:pointer}.dropdown-box__option{display:flex;align-items:center;padding:.625rem .75rem;border-radius:.375rem;cursor:pointer;font-size:.875rem;color:var(--m-text);transition:background .15s ease}.dropdown-box__option:hover,.dropdown-box__option--active{background:color-mix(in srgb,var(--m-focus) 8%,transparent)}.dropdown-box__option--selected{font-weight:600;color:var(--m-mm)}.dropdown-box__option--disabled{opacity:.4;pointer-events:none}.dropdown-box__empty{padding:.75rem;text-align:center;color:var(--m-text-tertiary);font-size:.875rem}@keyframes dropdown-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host(.open-upward) .dropdown-box{animation:dropdown-in-up .2s ease-out}@keyframes dropdown-in-up{0%{opacity:0;transform:scale(.95) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host-context(.align-bottom) .dropdown-box{max-height:70vh;border:none;border-radius:0;background:transparent;box-shadow:none;animation:none}\n"] }]
19830
+ }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], activeIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeIndex", required: false }] }], action: [{ type: i0.Output, args: ["action"] }] } });
19773
19831
 
19774
19832
  class DropdownInputComponent extends BaseInputComponent {
19775
19833
  value = model('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
@@ -19844,6 +19902,19 @@ class DropdownInputComponent extends BaseInputComponent {
19844
19902
  return label.includes(search) || o.value.toLowerCase().includes(search);
19845
19903
  });
19846
19904
  }, ...(ngDevMode ? [{ debugName: "filteredOptions" }] : /* istanbul ignore next */ []));
19905
+ /** The option ↑/↓ point at while the panel is open; -1 is none. Reset as the search narrows the list. */
19906
+ activeIndex = linkedSignal({ ...(ngDevMode ? { debugName: "activeIndex" } : /* istanbul ignore next */ {}), source: this.filteredOptions,
19907
+ computation: (options) => this.searchTerm() ? this.nextEnabled(options, -1, 1) : -1 });
19908
+ /** The enabled option `step` rows past `from`, wrapping; `from` itself when none. */
19909
+ nextEnabled = (options, from, step) => {
19910
+ for (let i = 1; i <= options.length; i++) {
19911
+ const index = (((from + step * i) % options.length) + options.length) %
19912
+ options.length;
19913
+ if (!options[index].disabled)
19914
+ return index;
19915
+ }
19916
+ return from;
19917
+ };
19847
19918
  displayValue = computed(() => {
19848
19919
  if (this.toggle())
19849
19920
  return this.searchTerm();
@@ -19906,32 +19977,57 @@ class DropdownInputComponent extends BaseInputComponent {
19906
19977
  inputBinding('options', this.filteredOptions),
19907
19978
  inputBinding('selected', this.value),
19908
19979
  inputBinding('multiple', this.isMultiselect),
19909
- outputBinding('action', (option) => {
19910
- if (this.isMultiselect()) {
19911
- const val = this.value();
19912
- const current = Array.isArray(val) ? val : val ? [val] : [];
19913
- const index = current.indexOf(option.value);
19914
- let nextValue;
19915
- if (index > -1) {
19916
- nextValue = current.filter((v) => v !== option.value);
19917
- }
19918
- else {
19919
- nextValue = [...current, option.value];
19920
- }
19921
- this.setValue(nextValue);
19922
- }
19923
- else {
19924
- this.setValue(option.value);
19925
- this.toggle.set(false);
19926
- this.searchTerm.set('');
19927
- setTimeout(() => this.wrapperRef()?.nativeElement.click(), 0);
19928
- }
19929
- }),
19980
+ inputBinding('activeIndex', this.activeIndex),
19981
+ outputBinding('action', this.selectOption),
19930
19982
  ],
19931
19983
  }), ...(ngDevMode ? [{ debugName: "selectorConfig" }] : /* istanbul ignore next */ []));
19984
+ selectOption = (option) => {
19985
+ if (this.isMultiselect()) {
19986
+ const val = this.value();
19987
+ const current = Array.isArray(val) ? val : val ? [val] : [];
19988
+ const index = current.indexOf(option.value);
19989
+ let nextValue;
19990
+ if (index > -1) {
19991
+ nextValue = current.filter((v) => v !== option.value);
19992
+ }
19993
+ else {
19994
+ nextValue = [...current, option.value];
19995
+ }
19996
+ this.setValue(nextValue);
19997
+ }
19998
+ else {
19999
+ this.setValue(option.value);
20000
+ this.toggle.set(false);
20001
+ this.searchTerm.set('');
20002
+ setTimeout(() => this.wrapperRef()?.nativeElement.click(), 0);
20003
+ }
20004
+ };
19932
20005
  onOpened = () => {
19933
20006
  this.toggle.set(true);
19934
20007
  this.searchTerm.set('');
20008
+ const val = this.value();
20009
+ const current = Array.isArray(val) ? val[0] : val;
20010
+ this.activeIndex.set(this.filteredOptions().findIndex((o) => o.value === current));
20011
+ };
20012
+ // Focus stays in the trigger input (it is the search box), so ↑/↓ move the
20013
+ // active option rather than DOM focus. Closed, ArrowDown bubbles on to
20014
+ // SelectorDirective, which opens the panel.
20015
+ onArrow = (event, step) => {
20016
+ if (!this.toggle())
20017
+ return;
20018
+ event.preventDefault();
20019
+ this.activeIndex.update((index) => this.nextEnabled(this.filteredOptions(), index, step));
20020
+ };
20021
+ // Enter never reaches SelectorDirective (it would toggle the panel); open,
20022
+ // it picks the active option.
20023
+ onEnter = (event) => {
20024
+ event.stopPropagation();
20025
+ if (!this.toggle())
20026
+ return;
20027
+ event.preventDefault();
20028
+ const option = this.filteredOptions()[this.activeIndex()];
20029
+ if (option && !option.disabled)
20030
+ this.selectOption(option);
19935
20031
  };
19936
20032
  onClosed = () => {
19937
20033
  this.toggle.set(false);
@@ -19978,7 +20074,9 @@ class DropdownInputComponent extends BaseInputComponent {
19978
20074
  (valueChange)="onInput($event)"
19979
20075
  (click)="preventToggleWhenOpen($event)"
19980
20076
  (keydown.space)="$event.stopPropagation()"
19981
- (keydown.enter)="$event.stopPropagation()"
20077
+ (keydown.enter)="onEnter($event)"
20078
+ (keydown.arrowdown)="onArrow($event, 1)"
20079
+ (keydown.arrowup)="onArrow($event, -1)"
19982
20080
  (keydown.tab)="$event.stopPropagation()"
19983
20081
  />
19984
20082
  <m-button [disabled]="disabled()" [config]="chevron()" />
@@ -20029,7 +20127,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
20029
20127
  (valueChange)="onInput($event)"
20030
20128
  (click)="preventToggleWhenOpen($event)"
20031
20129
  (keydown.space)="$event.stopPropagation()"
20032
- (keydown.enter)="$event.stopPropagation()"
20130
+ (keydown.enter)="onEnter($event)"
20131
+ (keydown.arrowdown)="onArrow($event, 1)"
20132
+ (keydown.arrowup)="onArrow($event, -1)"
20033
20133
  (keydown.tab)="$event.stopPropagation()"
20034
20134
  />
20035
20135
  <m-button [disabled]="disabled()" [config]="chevron()" />
@@ -21293,7 +21393,7 @@ class WrapperInputComponent extends ConfigComponent {
21293
21393
  break;
21294
21394
  }
21295
21395
  case InputType.TOGGLE: {
21296
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-qK5wYbFE.mjs');
21396
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-Bv407NRh.mjs');
21297
21397
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
21298
21398
  break;
21299
21399
  }
@@ -21305,12 +21405,12 @@ class WrapperInputComponent extends ConfigComponent {
21305
21405
  break;
21306
21406
  }
21307
21407
  case InputType.PASSWORD: {
21308
- const { PasswordInputComponent } = await import('./magmonium-one-password-DCpAXJIf.mjs');
21408
+ const { PasswordInputComponent } = await import('./magmonium-one-password-YU7fZJsq.mjs');
21309
21409
  this.createDynamicComponent(seq, PasswordInputComponent);
21310
21410
  break;
21311
21411
  }
21312
21412
  case InputType.OTP: {
21313
- const { OtpInputComponent } = await import('./magmonium-one-otp-BGGcDB4H.mjs');
21413
+ const { OtpInputComponent } = await import('./magmonium-one-otp-CdLYJWPD.mjs');
21314
21414
  this.createDynamicComponent(seq, OtpInputComponent);
21315
21415
  break;
21316
21416
  }
@@ -23017,7 +23117,7 @@ class FileUploadInputComponent extends BaseInputComponent {
23017
23117
  const modalStore = this.modalStore;
23018
23118
  if (!modalStore)
23019
23119
  return undefined;
23020
- const { ImageEditorComponent } = await import('./magmonium-one-image-editor-BBxyHfY_.mjs');
23120
+ const { ImageEditorComponent } = await import('./magmonium-one-image-editor-yuO5J7-w.mjs');
23021
23121
  const ratio = String(this.config()?.ratio ?? '');
23022
23122
  return new Promise((resolve) => {
23023
23123
  const modalRef = new ModalRef();
@@ -24653,6 +24753,13 @@ function getClassList$1(config) {
24653
24753
  return classList.join(' ');
24654
24754
  }
24655
24755
 
24756
+ const INTERACTIVE_SELECTOR = 'button, a, input, textarea, select, [role="button"], [contenteditable="true"]';
24757
+ /** A button/link inside the card owns its click — it must not also fire the card's. */
24758
+ const isFromNestedControl = (event) => {
24759
+ const surface = event.currentTarget;
24760
+ const control = event.target?.closest(INTERACTIVE_SELECTOR);
24761
+ return !!surface && !!control && control !== surface && surface.contains(control);
24762
+ };
24656
24763
  class CardComponent extends ConfigComponent {
24657
24764
  subFolder = 'cards';
24658
24765
  variant = input(...(ngDevMode ? [undefined, { debugName: "variant" }] : /* istanbul ignore next */ []));
@@ -24681,6 +24788,8 @@ class CardComponent extends ConfigComponent {
24681
24788
  onCardClick = (event) => {
24682
24789
  if (this.isDesignMode)
24683
24790
  event.preventDefault();
24791
+ if (isFromNestedControl(event))
24792
+ return;
24684
24793
  if (this.href() || !this.isClickable())
24685
24794
  return;
24686
24795
  this.clicked.emit();
@@ -29899,7 +30008,7 @@ class StatComponent {
29899
30008
  return resolvePallet(color, this.themeStore.color()).color;
29900
30009
  }
29901
30010
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: StatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29902
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: StatComponent, isStandalone: true, selector: "m-stat", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noTranslate: { classPropertyName: "noTranslate", publicName: "noTranslate", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, cornerPosition: { classPropertyName: "cornerPosition", publicName: "cornerPosition", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, cornerColor: { classPropertyName: "cornerColor", publicName: "cornerColor", isSignal: true, isRequired: false, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-design-mode": "isDesignMode", "class.corner-left": "side() === \"left\"", "class.corner-bottom": "edge() === \"bottom\"", "class.align-left": "align() === \"left\"", "class.align-center": "align() === \"center\"", "class.align-right": "align() === \"right\"", "class.has-color": "!!resolvedColor()", "class.has-corner-color": "!!resolvedCornerColor()", "attr.data-variant": "variant()", "attr.data-surface": "surface()", "style.--m-stat-color": "resolvedColor()", "style.--m-stat-corner-color": "resolvedCornerColor()" }, classAttribute: "m-stat-host" }, ngImport: i0, template: "<div class=\"m-stat\">\n <m-key-value variant=\"bento\">\n <span key class=\"m-stat__label\" [class.m-stat__ghost]=\"labelGhost()\">{{\n labelDisplay()\n }}</span>\n <span value class=\"m-stat__value\">\n <!-- Both slots are wrappers this component owns rather than bare\n `ng-content`: what a caller projects carries the *caller's*\n encapsulation attribute, so `.m-stat__figure` and `.m-stat__corner`\n could not be put on it from here. The wrappers hold the ordering,\n the tone colour and the corner's superscript size; whatever lands\n inside them is the caller's own markup (ADR 0021). -->\n <span class=\"m-stat__figure\"><ng-content select=\"[value]\" /></span>\n <!-- One corner, ordered and aligned by CSS rather than written twice:\n `cornerPosition` is four values and the slot is one node. -->\n <span class=\"m-stat__corner\"><ng-content select=\"[corner]\" /></span>\n </span>\n </m-key-value>\n</div>\n", 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%;line-height:1.4;--_tone: var(--m-mm);--_pad-y: .85em;--_pad-x: 1em;--_kv-pad: 0}:host(.is-design-mode){min-width:8em;min-height:4em}.m-stat{display:flex;flex-direction:column;min-width:0;padding:var(--_pad-y) var(--_pad-x);border-radius:.75em}.m-stat__value{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:.35em;min-width:0}.m-stat__figure{order:0;min-width:0;display:inline-flex;align-items:center;gap:.35em;font-size:.6060606061em}.m-stat__corner{order:1;align-self:flex-start;display:inline-flex;align-items:center;gap:.25em}.m-stat__corner:empty{display:none}.m-stat__corner{font-size:.5em;font-weight:300;white-space:nowrap;letter-spacing:.01em;color:var(--m-text-tertiary);background:none;-webkit-text-fill-color:currentColor}.m-stat__ghost{color:var(--m-text-tertiary);opacity:.6;-webkit-text-fill-color:currentColor}:host(.corner-left) .m-stat__corner{order:-1}:host(.corner-bottom) .m-stat__corner{align-self:flex-end}:host(.is-design-mode) .m-stat__value{flex-direction:column;align-items:flex-start}:host(.is-design-mode) .m-stat__corner{align-self:flex-start}:host(.align-left) .m-stat{text-align:left;--_kv-align: flex-start}:host(.align-center) .m-stat{text-align:center;--_kv-align: center}:host(.align-right) .m-stat{text-align:right;--_kv-align: flex-end}:host(.m-stat-host) .m-stat:has(m-section,m-section-form){--_kv-align: stretch}:host(.m-stat-host) .m-stat:has(m-section,m-section-form) .m-stat__value{display:flex}:host(.m-stat-host) .m-stat:has(m-section,m-section-form) .m-stat__figure{flex:1 1 auto;align-self:stretch;display:grid}:host([data-variant=compact]){--_pad-y: .45em;--_pad-x: .6em}:host([data-variant=no-padding]){--_pad-y: 0;--_pad-x: 0}:host([data-variant=no-x-padding]){--_pad-x: 0}:host(.has-color) .m-stat__figure{color:var(--m-stat-color);-webkit-text-fill-color:var(--m-stat-color)}:host(.has-corner-color) .m-stat__corner{color:var(--m-stat-corner-color)}:host([data-surface=card]) .m-stat{background:color-mix(in srgb,var(--m-background-lite) 70%,transparent);border:1px solid color-mix(in srgb,var(--m-border) 70%,transparent)}:host([data-surface=shadow]) .m-stat{background:var(--m-background-lite);border:1px solid color-mix(in srgb,var(--m-border) 45%,transparent);box-shadow:0 10px 30px #0000000f;transition:box-shadow .2s ease,transform .2s ease}:host([data-surface=shadow]) .m-stat:hover{box-shadow:0 18px 44px #0000001a;transform:translateY(-2px)}:host([data-surface=glow]) .m-stat{background:color-mix(in srgb,var(--_tone) 10%,transparent);border:1px solid color-mix(in srgb,var(--_tone) 28%,transparent);box-shadow:0 12px 34px color-mix(in srgb,var(--_tone) 18%,transparent)}:host([data-surface=glow]) .m-stat__figure{text-shadow:0 2px 14px color-mix(in srgb,var(--_tone) 40%,transparent)}:host([data-surface=gradient]) .m-stat{background:linear-gradient(135deg,color-mix(in srgb,var(--_tone) 18%,transparent),color-mix(in srgb,var(--m-background-lite) 85%,transparent));border:1px solid color-mix(in srgb,var(--_tone) 20%,transparent);box-shadow:0 8px 24px #0000000d}:host([data-surface=gradient]) .m-stat__figure{text-shadow:0 1px 0 color-mix(in srgb,var(--m-background) 70%,transparent)}\n"], dependencies: [{ kind: "component", type: KeyValueComponent, selector: "m-key-value", inputs: ["variant"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30011
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: StatComponent, isStandalone: true, selector: "m-stat", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noTranslate: { classPropertyName: "noTranslate", publicName: "noTranslate", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, cornerPosition: { classPropertyName: "cornerPosition", publicName: "cornerPosition", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, cornerColor: { classPropertyName: "cornerColor", publicName: "cornerColor", isSignal: true, isRequired: false, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-design-mode": "isDesignMode", "class.corner-left": "side() === \"left\"", "class.corner-bottom": "edge() === \"bottom\"", "class.align-left": "align() === \"left\"", "class.align-center": "align() === \"center\"", "class.align-right": "align() === \"right\"", "class.has-color": "!!resolvedColor()", "class.has-corner-color": "!!resolvedCornerColor()", "attr.data-variant": "variant()", "attr.data-surface": "surface()", "style.--m-stat-color": "resolvedColor()", "style.--m-stat-corner-color": "resolvedCornerColor()" }, classAttribute: "m-stat-host" }, ngImport: i0, template: "<div class=\"m-stat\">\n <m-key-value variant=\"bento\">\n <span key class=\"m-stat__label\" [class.m-stat__ghost]=\"labelGhost()\">{{\n labelDisplay()\n }}</span>\n <span value class=\"m-stat__value\">\n <!-- Both slots are wrappers this component owns rather than bare\n `ng-content`: what a caller projects carries the *caller's*\n encapsulation attribute, so `.m-stat__figure` and `.m-stat__corner`\n could not be put on it from here. The wrappers hold the ordering,\n the tone colour and the corner's superscript size; whatever lands\n inside them is the caller's own markup (ADR 0021). -->\n <span class=\"m-stat__figure\"><ng-content select=\"[value]\" /></span>\n <!-- One corner, ordered and aligned by CSS rather than written twice:\n `cornerPosition` is four values and the slot is one node. -->\n <span class=\"m-stat__corner\"><ng-content select=\"[corner]\" /></span>\n </span>\n </m-key-value>\n</div>\n", 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%;line-height:1.4;--_tone: var(--m-mm);--_pad-y: .85em;--_pad-x: 1em;--_kv-pad: 0}:host(.is-design-mode){min-width:8em;min-height:4em}.m-stat{display:flex;flex-direction:column;min-width:0;padding:var(--_pad-y) var(--_pad-x);border-radius:.75em}.m-stat__value{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:.35em;min-width:0}.m-stat__figure{order:0;min-width:0;display:inline-flex;align-items:center;gap:.35em;font-size:.6060606061em}.m-stat__corner{order:1;align-self:flex-start;display:inline-flex;align-items:center;gap:.25em}.m-stat__corner:empty{display:none}.m-stat__corner{font-size:.5em;font-weight:300;white-space:nowrap;letter-spacing:.01em;color:var(--m-text-tertiary);background:none;-webkit-text-fill-color:currentColor}.m-stat__ghost{color:var(--m-text-tertiary);opacity:.6;-webkit-text-fill-color:currentColor}:host(.corner-left) .m-stat__corner{order:-1}:host(.corner-bottom) .m-stat__corner{align-self:flex-end}:host(.is-design-mode) .m-stat__value{flex-direction:column;align-items:flex-start}:host(.is-design-mode) .m-stat__corner{align-self:flex-start}:host(.align-left) .m-stat{text-align:left;--_kv-align: flex-start}:host(.align-center) .m-stat{text-align:center;--_kv-align: center}:host(.align-right) .m-stat{text-align:right;--_kv-align: flex-end}:host(.m-stat-host) .m-stat:has(m-section,m-section-form){--_kv-align: stretch}:host(.m-stat-host) .m-stat:has(m-section,m-section-form) .m-stat__value{display:flex}:host(.m-stat-host) .m-stat:has(m-section,m-section-form) .m-stat__figure{flex:1 1 auto;align-self:stretch;display:grid;-webkit-text-fill-color:currentColor}:host([data-variant=compact]){--_pad-y: .45em;--_pad-x: .6em}:host([data-variant=no-padding]){--_pad-y: 0;--_pad-x: 0}:host([data-variant=no-x-padding]){--_pad-x: 0}:host(.has-color) .m-stat__figure{color:var(--m-stat-color);-webkit-text-fill-color:var(--m-stat-color)}:host(.has-corner-color) .m-stat__corner{color:var(--m-stat-corner-color)}:host([data-surface=card]) .m-stat{background:color-mix(in srgb,var(--m-background-lite) 70%,transparent);border:1px solid color-mix(in srgb,var(--m-border) 70%,transparent)}:host([data-surface=shadow]) .m-stat{background:var(--m-background-lite);border:1px solid color-mix(in srgb,var(--m-border) 45%,transparent);box-shadow:0 10px 30px #0000000f;transition:box-shadow .2s ease,transform .2s ease}:host([data-surface=shadow]) .m-stat:hover{box-shadow:0 18px 44px #0000001a;transform:translateY(-2px)}:host([data-surface=glow]) .m-stat{background:color-mix(in srgb,var(--_tone) 10%,transparent);border:1px solid color-mix(in srgb,var(--_tone) 28%,transparent);box-shadow:0 12px 34px color-mix(in srgb,var(--_tone) 18%,transparent)}:host([data-surface=glow]) .m-stat__figure{text-shadow:0 2px 14px color-mix(in srgb,var(--_tone) 40%,transparent)}:host([data-surface=gradient]) .m-stat{background:linear-gradient(135deg,color-mix(in srgb,var(--_tone) 18%,transparent),color-mix(in srgb,var(--m-background-lite) 85%,transparent));border:1px solid color-mix(in srgb,var(--_tone) 20%,transparent);box-shadow:0 8px 24px #0000000d}:host([data-surface=gradient]) .m-stat__figure{text-shadow:0 1px 0 color-mix(in srgb,var(--m-background) 70%,transparent)}\n"], dependencies: [{ kind: "component", type: KeyValueComponent, selector: "m-key-value", inputs: ["variant"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29903
30012
  }
29904
30013
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: StatComponent, decorators: [{
29905
30014
  type: Component,
@@ -29917,7 +30026,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
29917
30026
  '[attr.data-surface]': 'surface()',
29918
30027
  '[style.--m-stat-color]': 'resolvedColor()',
29919
30028
  '[style.--m-stat-corner-color]': 'resolvedCornerColor()',
29920
- }, template: "<div class=\"m-stat\">\n <m-key-value variant=\"bento\">\n <span key class=\"m-stat__label\" [class.m-stat__ghost]=\"labelGhost()\">{{\n labelDisplay()\n }}</span>\n <span value class=\"m-stat__value\">\n <!-- Both slots are wrappers this component owns rather than bare\n `ng-content`: what a caller projects carries the *caller's*\n encapsulation attribute, so `.m-stat__figure` and `.m-stat__corner`\n could not be put on it from here. The wrappers hold the ordering,\n the tone colour and the corner's superscript size; whatever lands\n inside them is the caller's own markup (ADR 0021). -->\n <span class=\"m-stat__figure\"><ng-content select=\"[value]\" /></span>\n <!-- One corner, ordered and aligned by CSS rather than written twice:\n `cornerPosition` is four values and the slot is one node. -->\n <span class=\"m-stat__corner\"><ng-content select=\"[corner]\" /></span>\n </span>\n </m-key-value>\n</div>\n", 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%;line-height:1.4;--_tone: var(--m-mm);--_pad-y: .85em;--_pad-x: 1em;--_kv-pad: 0}:host(.is-design-mode){min-width:8em;min-height:4em}.m-stat{display:flex;flex-direction:column;min-width:0;padding:var(--_pad-y) var(--_pad-x);border-radius:.75em}.m-stat__value{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:.35em;min-width:0}.m-stat__figure{order:0;min-width:0;display:inline-flex;align-items:center;gap:.35em;font-size:.6060606061em}.m-stat__corner{order:1;align-self:flex-start;display:inline-flex;align-items:center;gap:.25em}.m-stat__corner:empty{display:none}.m-stat__corner{font-size:.5em;font-weight:300;white-space:nowrap;letter-spacing:.01em;color:var(--m-text-tertiary);background:none;-webkit-text-fill-color:currentColor}.m-stat__ghost{color:var(--m-text-tertiary);opacity:.6;-webkit-text-fill-color:currentColor}:host(.corner-left) .m-stat__corner{order:-1}:host(.corner-bottom) .m-stat__corner{align-self:flex-end}:host(.is-design-mode) .m-stat__value{flex-direction:column;align-items:flex-start}:host(.is-design-mode) .m-stat__corner{align-self:flex-start}:host(.align-left) .m-stat{text-align:left;--_kv-align: flex-start}:host(.align-center) .m-stat{text-align:center;--_kv-align: center}:host(.align-right) .m-stat{text-align:right;--_kv-align: flex-end}:host(.m-stat-host) .m-stat:has(m-section,m-section-form){--_kv-align: stretch}:host(.m-stat-host) .m-stat:has(m-section,m-section-form) .m-stat__value{display:flex}:host(.m-stat-host) .m-stat:has(m-section,m-section-form) .m-stat__figure{flex:1 1 auto;align-self:stretch;display:grid}:host([data-variant=compact]){--_pad-y: .45em;--_pad-x: .6em}:host([data-variant=no-padding]){--_pad-y: 0;--_pad-x: 0}:host([data-variant=no-x-padding]){--_pad-x: 0}:host(.has-color) .m-stat__figure{color:var(--m-stat-color);-webkit-text-fill-color:var(--m-stat-color)}:host(.has-corner-color) .m-stat__corner{color:var(--m-stat-corner-color)}:host([data-surface=card]) .m-stat{background:color-mix(in srgb,var(--m-background-lite) 70%,transparent);border:1px solid color-mix(in srgb,var(--m-border) 70%,transparent)}:host([data-surface=shadow]) .m-stat{background:var(--m-background-lite);border:1px solid color-mix(in srgb,var(--m-border) 45%,transparent);box-shadow:0 10px 30px #0000000f;transition:box-shadow .2s ease,transform .2s ease}:host([data-surface=shadow]) .m-stat:hover{box-shadow:0 18px 44px #0000001a;transform:translateY(-2px)}:host([data-surface=glow]) .m-stat{background:color-mix(in srgb,var(--_tone) 10%,transparent);border:1px solid color-mix(in srgb,var(--_tone) 28%,transparent);box-shadow:0 12px 34px color-mix(in srgb,var(--_tone) 18%,transparent)}:host([data-surface=glow]) .m-stat__figure{text-shadow:0 2px 14px color-mix(in srgb,var(--_tone) 40%,transparent)}:host([data-surface=gradient]) .m-stat{background:linear-gradient(135deg,color-mix(in srgb,var(--_tone) 18%,transparent),color-mix(in srgb,var(--m-background-lite) 85%,transparent));border:1px solid color-mix(in srgb,var(--_tone) 20%,transparent);box-shadow:0 8px 24px #0000000d}:host([data-surface=gradient]) .m-stat__figure{text-shadow:0 1px 0 color-mix(in srgb,var(--m-background) 70%,transparent)}\n"] }]
30029
+ }, template: "<div class=\"m-stat\">\n <m-key-value variant=\"bento\">\n <span key class=\"m-stat__label\" [class.m-stat__ghost]=\"labelGhost()\">{{\n labelDisplay()\n }}</span>\n <span value class=\"m-stat__value\">\n <!-- Both slots are wrappers this component owns rather than bare\n `ng-content`: what a caller projects carries the *caller's*\n encapsulation attribute, so `.m-stat__figure` and `.m-stat__corner`\n could not be put on it from here. The wrappers hold the ordering,\n the tone colour and the corner's superscript size; whatever lands\n inside them is the caller's own markup (ADR 0021). -->\n <span class=\"m-stat__figure\"><ng-content select=\"[value]\" /></span>\n <!-- One corner, ordered and aligned by CSS rather than written twice:\n `cornerPosition` is four values and the slot is one node. -->\n <span class=\"m-stat__corner\"><ng-content select=\"[corner]\" /></span>\n </span>\n </m-key-value>\n</div>\n", 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%;line-height:1.4;--_tone: var(--m-mm);--_pad-y: .85em;--_pad-x: 1em;--_kv-pad: 0}:host(.is-design-mode){min-width:8em;min-height:4em}.m-stat{display:flex;flex-direction:column;min-width:0;padding:var(--_pad-y) var(--_pad-x);border-radius:.75em}.m-stat__value{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:.35em;min-width:0}.m-stat__figure{order:0;min-width:0;display:inline-flex;align-items:center;gap:.35em;font-size:.6060606061em}.m-stat__corner{order:1;align-self:flex-start;display:inline-flex;align-items:center;gap:.25em}.m-stat__corner:empty{display:none}.m-stat__corner{font-size:.5em;font-weight:300;white-space:nowrap;letter-spacing:.01em;color:var(--m-text-tertiary);background:none;-webkit-text-fill-color:currentColor}.m-stat__ghost{color:var(--m-text-tertiary);opacity:.6;-webkit-text-fill-color:currentColor}:host(.corner-left) .m-stat__corner{order:-1}:host(.corner-bottom) .m-stat__corner{align-self:flex-end}:host(.is-design-mode) .m-stat__value{flex-direction:column;align-items:flex-start}:host(.is-design-mode) .m-stat__corner{align-self:flex-start}:host(.align-left) .m-stat{text-align:left;--_kv-align: flex-start}:host(.align-center) .m-stat{text-align:center;--_kv-align: center}:host(.align-right) .m-stat{text-align:right;--_kv-align: flex-end}:host(.m-stat-host) .m-stat:has(m-section,m-section-form){--_kv-align: stretch}:host(.m-stat-host) .m-stat:has(m-section,m-section-form) .m-stat__value{display:flex}:host(.m-stat-host) .m-stat:has(m-section,m-section-form) .m-stat__figure{flex:1 1 auto;align-self:stretch;display:grid;-webkit-text-fill-color:currentColor}:host([data-variant=compact]){--_pad-y: .45em;--_pad-x: .6em}:host([data-variant=no-padding]){--_pad-y: 0;--_pad-x: 0}:host([data-variant=no-x-padding]){--_pad-x: 0}:host(.has-color) .m-stat__figure{color:var(--m-stat-color);-webkit-text-fill-color:var(--m-stat-color)}:host(.has-corner-color) .m-stat__corner{color:var(--m-stat-corner-color)}:host([data-surface=card]) .m-stat{background:color-mix(in srgb,var(--m-background-lite) 70%,transparent);border:1px solid color-mix(in srgb,var(--m-border) 70%,transparent)}:host([data-surface=shadow]) .m-stat{background:var(--m-background-lite);border:1px solid color-mix(in srgb,var(--m-border) 45%,transparent);box-shadow:0 10px 30px #0000000f;transition:box-shadow .2s ease,transform .2s ease}:host([data-surface=shadow]) .m-stat:hover{box-shadow:0 18px 44px #0000001a;transform:translateY(-2px)}:host([data-surface=glow]) .m-stat{background:color-mix(in srgb,var(--_tone) 10%,transparent);border:1px solid color-mix(in srgb,var(--_tone) 28%,transparent);box-shadow:0 12px 34px color-mix(in srgb,var(--_tone) 18%,transparent)}:host([data-surface=glow]) .m-stat__figure{text-shadow:0 2px 14px color-mix(in srgb,var(--_tone) 40%,transparent)}:host([data-surface=gradient]) .m-stat{background:linear-gradient(135deg,color-mix(in srgb,var(--_tone) 18%,transparent),color-mix(in srgb,var(--m-background-lite) 85%,transparent));border:1px solid color-mix(in srgb,var(--_tone) 20%,transparent);box-shadow:0 8px 24px #0000000d}:host([data-surface=gradient]) .m-stat__figure{text-shadow:0 1px 0 color-mix(in srgb,var(--m-background) 70%,transparent)}\n"] }]
29921
30030
  }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], noTranslate: [{ type: i0.Input, args: [{ isSignal: true, alias: "noTranslate", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], cornerPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "cornerPosition", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], cornerColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "cornerColor", required: false }] }], params: [{ type: i0.Input, args: [{ isSignal: true, alias: "params", required: false }] }] } });
29922
30031
 
29923
30032
  class PwaInstallComponent {
@@ -35379,7 +35488,7 @@ class SvgGeneratorToolBoxComponent {
35379
35488
  }
35380
35489
  </div>
35381
35490
  </m-section>
35382
- </div>`, 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)}}.svg-generator-tool-box{width:100%;box-sizing:border-box;display:flex;flex-direction:column;gap:1rem;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);background-color:var(--m-backdrop-standard);border:1px solid var(--m-backdrop-border);border-radius:.5rem;overflow:hidden;max-height:300px;overflow-y:auto}.svg-generator-tool-box .svg-generator-tool-box-header{border-bottom:1px solid var(--border-color);top:0;position:sticky;z-index:5260;background:var(--background, #ffffff);padding:.5em 1em;display:flex;align-items:center;gap:.5em;justify-content:flex-start;width:100%;box-sizing:border-box}.svg-generator-tool-box .svg-generator-tool-box-header .m-header{display:block;width:100%;height:100%}.svg-generator-tool-box .svg-generator-tool-box-header h2{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-size:.8em;color:var(--mm-color)}.svg-generator-tool-box .svg-generator-tool-box-header .icon-container{display:flex;width:1em;height:1em}.svg-generator-tool-box .svg-generator-tool-box-content{display:flex;flex-direction:column;box-sizing:border-box}.svg-generator-tool-box .svg-generator-tool-box-content .options{display:flex;flex-direction:column;padding:0 1em;box-sizing:border-box;gap:.5em}.svg-generator-tool-box .svg-generator-tool-box-content .options h3{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-size:.8em}.svg-generator-tool-box .svg-generator-tool-box-content .form-radio{display:flex;flex-direction:column;gap:4px;padding:4px 0}.svg-generator-tool-box .svg-generator-tool-box-content .form-radio .form-radio__label{font-size:.75em;opacity:.7}.svg-generator-tool-box .svg-generator-tool-box-content .form-radio .form-radio__options{display:flex;gap:8px;flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: SectionComponent, selector: "m-section", inputs: ["variant", "maxWidth", "heightMode", "maxHeight", "height", "align", "alignX", "alignY", "size"], outputs: ["inView"] }, { kind: "component", type: SectionHeaderComponent, selector: "m-section-header", inputs: ["sticky", "level", "label", "subLabel", "noTranslate", "params", "reverse", "icon", "menu", "menuName", "visibilityRule", "disableRule", "extraData", "align", "showBack", "actionButton", "actionLabel", "spacing", "maxWidth"], outputs: ["actionClick", "action", "back"] }, { 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: MenuComponent, selector: "m-menu", inputs: ["config", "file", "root", "url", "extra", "hide", "hideLink", "isAdmin", "visibilityRule", "disableRule", "extraData"], outputs: ["action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
35491
+ </div>`, 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)}}.svg-generator-tool-box{width:100%;box-sizing:border-box;display:flex;flex-direction:column;gap:1rem;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);background-color:var(--m-backdrop-standard);border:1px solid var(--m-backdrop-border);border-radius:.5rem;overflow:hidden;max-height:300px;overflow-y:auto}.svg-generator-tool-box .svg-generator-tool-box-header{border-bottom:1px solid var(--border-color);top:0;position:sticky;z-index:5260;background:var(--background, #ffffff);padding:.5em 1em;display:flex;align-items:center;gap:.5em;justify-content:flex-start;width:100%;box-sizing:border-box}.svg-generator-tool-box .svg-generator-tool-box-header .m-header{display:block;width:100%;height:100%}.svg-generator-tool-box .svg-generator-tool-box-header h2{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-size:.8em;color:var(--mm-color)}.svg-generator-tool-box .svg-generator-tool-box-header .icon-container{display:flex;width:1em;height:1em}.svg-generator-tool-box .svg-generator-tool-box-content{display:flex;flex-direction:column;box-sizing:border-box}.svg-generator-tool-box .svg-generator-tool-box-content .options{display:flex;flex-direction:column;padding:0 1em;box-sizing:border-box;gap:.5em}.svg-generator-tool-box .svg-generator-tool-box-content .options h3{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-size:.8em}.svg-generator-tool-box .svg-generator-tool-box-content .form-radio{display:flex;flex-direction:column;gap:4px;padding:4px 0}.svg-generator-tool-box .svg-generator-tool-box-content .form-radio .form-radio__label{font-size:.75em;opacity:.7}.svg-generator-tool-box .svg-generator-tool-box-content .form-radio .form-radio__options{display:flex;gap:8px;flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: SectionComponent, selector: "m-section", inputs: ["variant", "maxWidth", "heightMode", "maxHeight", "height", "align", "alignX", "alignY", "size"], outputs: ["inView"] }, { kind: "component", type: SectionHeaderComponent, selector: "m-section-header", inputs: ["sticky", "level", "label", "subLabel", "noTranslate", "params", "reverse", "icon", "menu", "menuName", "visibilityRule", "disableRule", "extraData", "align", "showBack", "actionButton", "actionLabel", "spacing", "maxWidth"], outputs: ["actionClick", "action", "back"] }, { 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: MenuComponent, selector: "m-menu", inputs: ["config", "file", "root", "url", "extra", "hide", "hideLink", "isAdmin", "autoFocus", "visibilityRule", "disableRule", "extraData"], outputs: ["action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
35383
35492
  }
35384
35493
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SvgGeneratorToolBoxComponent, decorators: [{
35385
35494
  type: Component,
@@ -36741,4 +36850,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
36741
36850
  */
36742
36851
 
36743
36852
  export { ColComponent as $, ACCESS_DOMAINS as A, ButtonComponent as B, Assets as C, AuthActivityPageComponent as D, AuthApiService as E, AuthStore as F, AutosizeDirective as G, HeaderComponent$1 as H, InputType as I, BadgeComponent as J, BandingComponent as K, LabelComponent as L, MODAL_REF as M, BaseArrayInputComponent as N, BaseRootWebComponent as O, BaseWebComponent as P, ButtonGroupComponent as Q, RangeInputComponent as R, COMPONENT_INPUT_REGISTRY as S, TranslatePipe as T, CardComponent as U, CardWrapperComponent as V, CarouselComponent as W, ChartComponent as X, ChatBubbleComponent as Y, CheckboxInputComponent as Z, ClearableInputComponent as _, MIN_ZOOM as a, MHeroColorDirective as a$, ColorPickerInputComponent as a0, CommentItemComponent as a1, CommentsApiService as a2, CommentsComponent as a3, CommentsStore as a4, CompactNumberPipe as a5, ComponentInputComponent as a6, ComponentStepperComponent as a7, ConfigComponent as a8, ConfirmComponent as a9, FileService as aA, FileUploadDirective as aB, FileUploadInputComponent as aC, FlexComponent as aD, FlexItemComponent as aE, FormGroupComponent as aF, FrameComponent as aG, FreezeService as aH, GRID_BREAKPOINTS as aI, GetNavService as aJ, HighlightDirective as aK, HttpService as aL, ICON_SOURCE as aM, IS_SIDE_PANEL as aN, IconComponent as aO, ImgComponent as aP, InstrumentScoreComponent as aQ, InterceptorObservables as aR, JumbotronComponent as aS, KeyValueComponent as aT, LAYOUT_ASSET_FOLDER as aU, LOGIN_COMPONENT as aV, LOGIN_STORE as aW, LanguageComponent as aX, ListComponent as aY, LogoComponent as aZ, MAG_SOCKET_EVENT as a_, ContextMenuComponent as aa, CustomIconClass as ab, CustomIconEditComponent as ac, DEFAULT_DENIAL as ad, DEFAULT_FILTER_RANGE_MODE as ae, DEFAULT_FILTER_VARIANT as af, DEFAULT_NAV_PARAM as ag, DEFAULT_NAV_SEGMENT as ah, DEFAULT_SIZE as ai, DashboardCardComponent as aj, DateInputComponent as ak, DatePickerComponent as al, DeviceService as am, DomService as an, Domain as ao, DotGridComponent as ap, DragListDirective as aq, DragListItemDirective as ar, DraggableDirective as as, DropdownInputComponent as at, FILTER_GROUP_CONTEXT as au, FILTER_RANGE_MODES as av, FILTER_VARIANTS as aw, FLEX_VARIANTS as ax, FOLDER_PICK_LISTENER as ay, FORM_ASSET_FOLDER as az, MAX_ZOOM as b, SEARCH_QUERY as b$, MHeroComponent as b0, MODAL_STORE_REF as b1, MRefDirective as b2, MStepComponent as b3, MURL_PARAM as b4, MURL_SEP as b5, ManifestEnrichmentService as b6, MenuComponent as b7, ModalDirective as b8, ModalRef as b9, OPTIONS_SOURCE as bA, OVERLAY_WIDGETS as bB, OneApp as bC, OptionsSourceDirective as bD, OverlayBodyComponent as bE, OverlayRef as bF, OverlayService as bG, PLATFORM_BUTTON_NAV_IDS as bH, PLATFORM_EXTENSIBLE_NAV_IDS as bI, PLATFORM_NAV_MAP as bJ, PLATFORM_ROOT_CHILDREN as bK, PaginationComponent as bL, PanelComponent as bM, PercentagePipe as bN, PlaygroundComponent as bO, PositionDirective as bP, PwaInstallComponent as bQ, ROOT_NAV$1 as bR, RadioGroupComponent as bS, RadioInputComponent as bT, RatingInputComponent as bU, ReactiveElementComponent as bV, RemoteComponent as bW, RemoteLoaderService as bX, ResizeElementComponent as bY, RouteContainer as bZ, RowComponent as b_, ModalStore as ba, MoneyPipe as bb, MultiRangeInputComponent as bc, MurlUrlSerializer as bd, NAV_DEFAULT_MURL as be, NAV_ID_SEP as bf, NAV_MAIN_BUTTONS as bg, NAV_SEGMENT_RE as bh, NAV_STORE_REF as bi, NAV_WC_COMPONENTS as bj, NAV_WIDGET_MAP as bk, NavComponent as bl, NavDetailsComponent as bm, NavHeaderComponent as bn, NavMenuComponent as bo, NavStore as bp, NavTrailComponent as bq, NothingComponent as br, NotificationElementComponent as bs, NotificationGroupComponent as bt, NotificationPopupComponent as bu, NotificationService as bv, NotificationStore as bw, NotificationType as bx, NotificationWidgetComponent as by, ONE_ASSET_BASE_URL as bz, cropRect as c, ThemeDataService as c$, SEARCH_RESULTS_EVENT as c0, SECTION_ACCORDION_GROUP as c1, SECTION_FORM_CONTEXT as c2, SHARED_ICONS as c3, SIZE_CONTEXT as c4, ScoreComponent as c5, ScrollComponent as c6, ScrollService as c7, SearchPanelComponent as c8, SearchStore as c9, SelectorDirective as cA, SettingsSearchBarComponent as cB, SettingsSearchService as cC, ShapeComponent as cD, SharedStoreRegistry as cE, SidePanelDirective as cF, Size as cG, SocketStore as cH, SortComponent as cI, StatComponent as cJ, StepComponent as cK, StepperComponent as cL, StepsComponent as cM, StorageService as cN, StrokeLinecap as cO, StrokeLinejoin as cP, SummaryComponent as cQ, SvgGeneratorComponent as cR, SvgGeneratorService as cS, SvgService as cT, TOTAL_COLUMNS as cU, TRANSLATION_SOURCE as cV, TableComponent as cW, TechnicalMeterComponent as cX, TextInputComponent as cY, TextareaInputComponent as cZ, ThemeComponent as c_, SearchUserPanelComponent as ca, SectionAccordionDirective as cb, SectionAccordionGroupDirective as cc, SectionBackComponent as cd, SectionBadgesComponent as ce, SectionButtonGroupComponent as cf, SectionCardComponent as cg, SectionCarouselComponent as ch, SectionComponent as ci, SectionFilterComponent as cj, SectionFilterGroupComponent as ck, SectionFilterMenuComponent as cl, SectionFilterPanelComponent as cm, SectionFilterRangePanelComponent as cn, SectionFooterComponent as co, SectionFormComponent as cp, SectionFormItemComponent as cq, SectionHeaderComponent as cr, SectionHeroComponent as cs, SectionPaginationComponent as ct, SectionSearchComponent as cu, SectionStepperComponent as cv, SectionTabsComponent as cw, SectionToggleComponent as cx, SectionToggleItemDirective as cy, SelectableCardInputComponent as cz, drawFramed as d, filterNumberList as d$, ThemeService as d0, ThemeStore as d1, TimeAgoPipe as d2, TimelineComponent as d3, ToggleButtonComponent as d4, ToggleInputComponent as d5, ToggleRadioInputComponent as d6, ToolTipDirective as d7, TooltipComponent as d8, TranslateService as d9, calculateRanks as dA, cellText as dB, checkFilterCondition as dC, childNavId as dD, claimDenial as dE, classListSignal as dF, coerceSize as dG, cornerEdge as dH, cornerSide as dI, createMap as dJ, createPlatformNavMap as dK, deriveAvatarGradient as dL, deriveContrastColor as dM, deriveOppositeColor as dN, derivePropertyName as dO, emailValidation as dP, evaluate as dQ, evaluateBool as dR, fieldBoolean as dS, fieldNumber as dT, fieldString as dU, filterHoldsList as dV, filterHoldsOneBound as dW, filterHoldsOptions as dX, filterHoldsRange as dY, filterList as dZ, filterNumber as d_, TreeGridComponent as da, URL_SEP as db, USER_STORE_REF as dc, USER_TAB_MAP as dd, UniverseComponent as de, UserApiService as df, UserAvatarComponent as dg, UserComponent as dh, UserNavComponent as di, UserSettingsComponent as dj, UserStore as dk, WC_ROUTE_CHANGED_EVENT as dl, WC_SEARCH_GROUPS as dm, WIN_USER_TAB_HOOK as dn, WIN_USER_TAB_KEY as dp, WatermarkComponent as dq, WcRouterStore as dr, WrapperInputComponent as ds, anchorNavId as dt, applyColorsToElement as du, assetOptions as dv, bootstrapMagApp as dw, bootstrapPwaInstall as dx, buildWcBaseUrl as dy, calculateLuminance as dz, encodeFramed as e, miniMarkToHtml as e$, filterOne as e0, filterPanelOf as e1, filterPanelWidth as e2, filterRange as e3, filterTreeGridRows as e4, filterValueList as e5, filterValues as e6, flattenTreeGridRows as e7, formatBadgeCount as e8, fullName as e9, isLocalhost as eA, isNavInstanceConfig as eB, isNavMenuConfig as eC, isNavRowsConfig as eD, isNavVisibilityConfig as eE, isPlatformNavId as eF, isSize as eG, isTierPreview as eH, isUrlLocalhost as eI, isValidNavId as eJ, isValidNavSegment as eK, isWebComponent as eL, linkToId as eM, linkToNav as eN, loadingActions as eO, mInterceptor as eP, manualValidation as eQ, matchFieldValidation as eR, maxLengthValidation as eS, maxValidation as eT, mergePlatformNav as eU, mergeUnique as eV, mergeUniqueBy as eW, mergeUniqueWith as eX, minAgeValidation as eY, minLengthValidation as eZ, minValidation as e_, generateClipPath as ea, generateTransform as eb, getClassList as ec, getProperty as ed, getScrollParent as ee, getTierFromPreviewPath as ef, getTreeGridRow as eg, getUniqueId as eh, getValue as ei, hasErrorComputed as ej, hexToRgb as ek, hslToRgb$1 as el, initMagmoniumApp as em, initialNotificationState as en, initialState$2 as eo, initials as ep, injectAuthenticate as eq, injectDefaultDenial as er, injectInstallApp as es, injectParentSize as et, injectScrollSticky as eu, isButtonName as ev, isCancelledComputed as ew, isExtensiblePlatformNavId as ex, isJson as ey, isLoadingComputed as ez, clampFraming as f, navIdChain as f0, navIdFor as f1, navIdSegment as f2, navIdToRoutePath as f3, navIdToSegments as f4, navParamOf as f5, navToId as f6, navVisibilityGuard as f7, normalizeAssetOptions as f8, parentNavId as f9, resolveIconSize as fA, resolvePallet as fB, resolvePatternRules as fC, resolveSize as fD, rgbToHex as fE, rgbToHsl as fF, rowHasChildren as fG, samePatterns as fH, segmentsToNavId as fI, setProperty as fJ, setTreeGridChildren as fK, settingsWidgets as fL, shouldShowBadge as fM, splitNavId as fN, splitOnMatch as fO, stringToColor as fP, toAttrBool as fQ, toAttrNumber as fR, toCssLength as fS, toHostNavId as fT, toLength$1 as fU, toLocalNavId as fV, toggleTreeGridRow as fW, unfetchedPlatformNav as fX, urlValidation as fY, parseAddress as fa, parseColor as fb, parsePatternNames as fc, patternValidation as fd, patternsValidation as fe, permissionRefusal as ff, platformNavWidgets as fg, privateGuard as fh, processImageToSvg as fi, provideAppContext as fj, provideMagAppConfig as fk, provideMagWcConfig as fl, provideMagWcRoutes as fm, provideModalComponents as fn, provideMurlUrlSerializer as fo, provideNavWidgets as fp, provideOverlayWidgets as fq, providePlatformNavWidgets as fr, provideSearch as fs, provideSizeContext as ft, provideUserTabs as fu, publicGuard as fv, readFieldPatterns as fw, renderAddress as fx, requiredValidation as fy, resolveConfigAsset as fz, BaseInputComponent as g, BaseTextInputComponent as h, initialFraming as i, TextOutputComponent as j, IS_DESIGN_MODE as k, APP_CONTEXT_REF as l, ASSET_BASE_URL as m, AccordionBodyDirective as n, outputSize as o, parseRatio as p, AccordionComponent as q, renameForType as r, AccordionGroupComponent as s, ActionComponent as t, AnimatedGraphsComponent as u, AppCardComponent as v, AppRelationType as w, AppTileComponent as x, AssetStore as y, AssetUrlPipe as z };
36744
- //# sourceMappingURL=magmonium-one-magmonium-one-CzCUYYvz.mjs.map
36853
+ //# sourceMappingURL=magmonium-one-magmonium-one-DQNL21rQ.mjs.map