@magmonium/one 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/assets/buttons/no.json +1 -1
  2. package/assets/buttons/yes.json +1 -1
  3. package/assets/i18n/ar.json +33 -0
  4. package/assets/i18n/de.json +33 -0
  5. package/assets/i18n/en.json +33 -0
  6. package/assets/i18n/es.json +33 -0
  7. package/assets/i18n/fr.json +33 -0
  8. package/assets/i18n/hi.json +33 -0
  9. package/assets/i18n/it.json +33 -0
  10. package/assets/i18n/ja.json +33 -0
  11. package/assets/i18n/ko.json +33 -0
  12. package/assets/i18n/nl.json +33 -0
  13. package/assets/i18n/pl.json +33 -0
  14. package/assets/i18n/pt.json +33 -0
  15. package/assets/i18n/ru.json +33 -0
  16. package/assets/i18n/tr.json +33 -0
  17. package/assets/i18n/zh.json +33 -0
  18. package/assets/index.json +1 -1
  19. package/assets/patterns/alphanumeric.json +5 -0
  20. package/assets/patterns/digits-only.json +5 -0
  21. package/assets/patterns/email.json +5 -0
  22. package/assets/patterns/hex-color.json +6 -0
  23. package/assets/patterns/iban.json +6 -0
  24. package/assets/patterns/letters-only.json +5 -0
  25. package/assets/patterns/no-whitespace.json +5 -0
  26. package/assets/patterns/phone-e164.json +5 -0
  27. package/assets/patterns/postal-code-loose.json +6 -0
  28. package/assets/patterns/slug.json +5 -0
  29. package/assets/patterns/strong-password.json +5 -0
  30. package/assets/patterns/url.json +5 -0
  31. package/fesm2022/{magmonium-one-magmonium-one-C9e5lzeP.mjs → magmonium-one-magmonium-one-DV45kimz.mjs} +217 -46
  32. package/fesm2022/magmonium-one-magmonium-one-DV45kimz.mjs.map +1 -0
  33. package/fesm2022/{magmonium-one-otp-BwEW31Sr.mjs → magmonium-one-otp-_zwgEGu3.mjs} +2 -2
  34. package/fesm2022/{magmonium-one-otp-BwEW31Sr.mjs.map → magmonium-one-otp-_zwgEGu3.mjs.map} +1 -1
  35. package/fesm2022/{magmonium-one-password-Db-It94E.mjs → magmonium-one-password-Pk0hhC0A.mjs} +2 -2
  36. package/fesm2022/{magmonium-one-password-Db-It94E.mjs.map → magmonium-one-password-Pk0hhC0A.mjs.map} +1 -1
  37. package/fesm2022/{magmonium-one-toggle-B-sc4D0R.mjs → magmonium-one-toggle-CovjN1j6.mjs} +2 -2
  38. package/fesm2022/{magmonium-one-toggle-B-sc4D0R.mjs.map → magmonium-one-toggle-CovjN1j6.mjs.map} +1 -1
  39. package/fesm2022/magmonium-one.mjs +1 -1
  40. package/package.json +1 -1
  41. package/types/magmonium-one.d.ts +95 -7
  42. package/fesm2022/magmonium-one-magmonium-one-C9e5lzeP.mjs.map +0 -1
@@ -64,6 +64,9 @@ const FORM_ASSET_FOLDER = {
64
64
  // Choices a Field points at by name, shared across every form that names
65
65
  // the same list (AssetOptions).
66
66
  options: 'options',
67
+ // Shapes a Field's value may take, named the same way and resolved at build
68
+ // rather than at runtime (AssetPatterns, libs/one ADR 0017).
69
+ patterns: 'patterns',
67
70
  };
68
71
 
69
72
  var AppRelationType;
@@ -876,6 +879,13 @@ class TranslateService {
876
879
  return '';
877
880
  if (typeof value === 'number')
878
881
  return value.toString();
882
+ // YAML `label: true`/`false` compile to booleans; those names are also
883
+ // real i18n keys ("Yes"/"No"), so coerce rather than throw. Any other
884
+ // non-string used to crash in parseTranslationKey / key.split.
885
+ if (typeof value === 'boolean')
886
+ value = String(value);
887
+ else if (typeof value !== 'string')
888
+ return '';
879
889
  const { key, params } = this.parseTranslationKey(value);
880
890
  const translations = this.mergedTranslations();
881
891
  const result = key
@@ -2272,7 +2282,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2272
2282
  class TranslatePipe {
2273
2283
  translateService = inject(TranslateService);
2274
2284
  transform(value, config) {
2275
- return value ? this.translateService.translate(value, config) : '';
2285
+ // Only nullish / empty-string skip — boolean `false` and `0` are not
2286
+ // translation keys, and TranslateService already rejects non-strings.
2287
+ if (value == null || value === '')
2288
+ return '';
2289
+ return this.translateService.translate(value, config);
2276
2290
  }
2277
2291
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2278
2292
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: TranslatePipe, isStandalone: true, name: "translate", pure: false });
@@ -4337,12 +4351,24 @@ const CONFIRM_COMPONENT = new InjectionToken('CONFIRM_COMPONENT');
4337
4351
  const MODAL_REF = new InjectionToken('MODAL_REF');
4338
4352
  class ModalRef {
4339
4353
  closeCallback;
4354
+ changeCallback;
4355
+ /** Commit a result and dismiss (single-pick, confirm, …). */
4340
4356
  close(result) {
4341
4357
  this.closeCallback?.(result);
4342
4358
  }
4359
+ /**
4360
+ * Commit a result without dismissing. Multi-pick panels use this so each
4361
+ * tick updates the field while the panel stays open.
4362
+ */
4363
+ change(result) {
4364
+ this.changeCallback?.(result);
4365
+ }
4343
4366
  onClose(callback) {
4344
4367
  this.closeCallback = callback;
4345
4368
  }
4369
+ onChange(callback) {
4370
+ this.changeCallback = callback;
4371
+ }
4346
4372
  }
4347
4373
 
4348
4374
  /**
@@ -5105,13 +5131,29 @@ const SIZE_LENGTH = {
5105
5131
  * `derivedSize` ended in `default: return size`, which is how `1.3rem` and
5106
5132
  * `full-width` ended up in the assets. Lengths that are not Sizes go through
5107
5133
  * `toLength` instead.
5134
+ *
5135
+ * Non-Size values (empty string, legacy options like `xxs`/`n`) must not win
5136
+ * over the default: `size ?? DEFAULT` still picks them, and callers then write
5137
+ * `calc(undefined * 1.1)` onto Icons — glyph in the DOM, size zero on screen.
5108
5138
  */
5109
5139
  function resolveSize(size) {
5110
- return SIZE_LENGTH[size ?? DEFAULT_SIZE];
5140
+ return SIZE_LENGTH[isSize(size) ? size : DEFAULT_SIZE];
5111
5141
  }
5112
5142
  function isSize(value) {
5113
5143
  return (value === Size.SMALL || value === Size.MEDIUM || value === Size.LARGE);
5114
5144
  }
5145
+ /**
5146
+ * First real Size among the candidates, else the default. Used by Section /
5147
+ * SectionForm / ButtonGroup so a bad `configs.size` (empty string, legacy
5148
+ * option) never becomes SIZE_CONTEXT and zero out every Icon underneath.
5149
+ */
5150
+ function coerceSize(...candidates) {
5151
+ for (const candidate of candidates) {
5152
+ if (isSize(candidate))
5153
+ return candidate;
5154
+ }
5155
+ return DEFAULT_SIZE;
5156
+ }
5115
5157
  /**
5116
5158
  * A free CSS length for the things that are spacing or geometry rather than
5117
5159
  * Size — FlexContainer's gap, Jumbotron's margin and radius. Knows nothing
@@ -5226,7 +5268,8 @@ class IconComponent {
5226
5268
  effect(this.applySize);
5227
5269
  }
5228
5270
  applySize = () => {
5229
- const size = this.sizeContext?.size() ?? DEFAULT_SIZE;
5271
+ const raw = this.sizeContext?.size();
5272
+ const size = isSize(raw) ? raw : DEFAULT_SIZE;
5230
5273
  this.elementRef.nativeElement.style.setProperty('--m-icon-size', `calc(${resolveSize(size)} * 1.1)`);
5231
5274
  };
5232
5275
  updateElement = () => {
@@ -6524,7 +6567,7 @@ class ButtonComponent extends ReactiveElementComponent {
6524
6567
  }
6525
6568
  formatBadgeCount = (count, max = 99) => formatBadgeCount(count, max);
6526
6569
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6527
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ButtonComponent, isStandalone: true, selector: "m-button,m-one-button", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, labelClass: { classPropertyName: "labelClass", publicName: "labelClass", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, nav: { classPropertyName: "nav", publicName: "nav", isSignal: true, isRequired: false, transformFunction: null }, navParams: { classPropertyName: "navParams", publicName: "navParams", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, baseUrl: { classPropertyName: "baseUrl", publicName: "baseUrl", isSignal: true, isRequired: false, transformFunction: null }, one: { classPropertyName: "one", publicName: "one", isSignal: true, isRequired: false, transformFunction: null }, remote: { classPropertyName: "remote", publicName: "remote", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noTranslate: { classPropertyName: "noTranslate", publicName: "noTranslate", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, isRightIcon: { classPropertyName: "isRightIcon", publicName: "isRightIcon", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, imgSrc: { classPropertyName: "imgSrc", publicName: "imgSrc", isSignal: true, isRequired: false, transformFunction: null }, nonClickable: { classPropertyName: "nonClickable", publicName: "nonClickable", isSignal: true, isRequired: false, transformFunction: null }, inverted: { classPropertyName: "inverted", publicName: "inverted", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { config: "configChange", clicked: "clicked" }, viewQueries: [{ propertyName: "button", first: true, predicate: ["button"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (config(); as config) {\n <!-- One branch for every in-app target: `mRef` names a NavId and the store\n reads the NavKind off that node to decide route vs panel (ADR 0014). -->\n @if (config.nav) {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [disabled]=\"config.disabled\"\n [mRef]=\"config.nav\"\n [mRefParams]=\"config.navParams\"\n [attr.aria-label]=\"config.label | translate\"\n mRefLinkActive=\"tab\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n } @else if (config.href) {\n <a\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [href]=\"config.href\"\n [attr.aria-label]=\"config.label | translate\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"config.label | translate\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n }\n}\n\n<ng-template #buttonContent let-button=\"button\">\n @if (button.imgSrc) {\n <div class=\"button-icon button-icon--img\">\n <m-img [src]=\"button.imgSrc\" [remote]=\"button.remote\" [alt]=\"button.label || button.name || ''\" />\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n } @else if (buttonIcon(); as icon) {\n <div class=\"button-icon\">\n @if (isFromOne()) {\n <m-one-icon [config]=\"icon\" />\n } @else {\n <m-icon [config]=\"icon\" />\n }\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n }\n @if (button.label && !button.iconOnly) {\n <span class=\"button-label {{ button.labelClass || '' }}\">\n {{ button.noTranslate ? button.label : (button.label | translate) }}\n </span>\n }\n @if (!buttonIcon() && button.badge && button.badge.count) {\n <m-badge [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'static' }\">{{\n formatBadgeCount(button.badge.count)\n }}</m-badge>\n }\n</ng-template>\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:inline-flex;align-items:center;justify-content:center;vertical-align:middle;box-sizing:border-box;overflow:hidden;transition:box-shadow .15s ease;--m-btn-size: var(--m-button-size, 1em);--m-btn-color: var(--m-button-color, var(--m-one-button-color, var(--m-mm)));--m-btn-color-contrast: var(--m-button-color-contrast, var(--m-one-button-color-contrast, #ffffff));--m-btn-color-opposite: var(--m-button-color-opposite, var(--m-one-button-color-opposite, #e1b941));--m-btn-h: calc(var(--m-btn-size) * 2.25);width:var(--m-button-width, var(--m-one-button-width, auto));min-width:0;height:var(--m-btn-h);font-size:var(--m-btn-size)}:host-context(.inverse),:host-context(.tabs-inverse),:host.inverse{--m-btn-color: var(--m-button-color, var(--m-one-button-color, var(--m-inverse-text)))}:host:has(.full-width){display:flex;width:100%}:host:has(.only-icon),:host:has(.toggle){width:var(--m-btn-h);min-width:var(--m-btn-h)}:host:has(.has-badge){overflow:visible}:host:has(.stacked),:host:has(.toggle){height:auto}:host:has(button.primary:focus-visible){box-shadow:0 0 0 calc(var(--m-btn-size) * .125) color-mix(in srgb,var(--m-btn-color) 35%,transparent)}button:not(.get):not(.toggle){height:calc(var(--input-size, var(--m-btn-size)) * 2);min-height:calc(var(--input-size, var(--m-btn-size)) * 2);border-width:max(1px,var(--input-size, var(--m-btn-size)) * .0625);border-radius:calc(var(--input-size, var(--m-btn-size)) * .4);padding:calc(var(--input-size, var(--m-btn-size)) * .5) calc(var(--input-size, var(--m-btn-size)) * .5);gap:calc(var(--input-size, var(--m-btn-size)) * .375);font-size:var(--input-size, var(--m-btn-size));border-color:var(--m-btn-color);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}button:not(.get):not(.toggle):hover:not(:disabled){background-color:color-mix(in srgb,var(--m-btn-color) 6%,transparent)}button:not(.get):not(.toggle):focus-visible:not(:disabled),button:not(.get):not(.toggle):focus-within:not(:disabled){box-shadow:0 0 0 2px color-mix(in srgb,var(--m-btn-color) 20%,transparent)}button:not(.get):not(.toggle):disabled{opacity:.6;cursor:not-allowed}button:not(.get):not(.toggle){height:auto;padding:calc(var(--m-btn-size) * .625) calc(var(--m-btn-size) * 1.25);gap:calc(var(--m-btn-size) * .375);border-style:solid;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;appearance:none;width:100%;height:100%;min-height:0;padding:0 calc(var(--m-btn-size) * 1.25);border-width:2px;border-radius:4px;color:var(--m-btn-color);font-weight:600;line-height:1;-webkit-user-select:none;user-select:none;position:relative;outline:none;box-shadow:var(--m-button-shadow, var(--m-one-button-shadow, none));transition:filter .15s ease,background .15s ease}button:not(.get):not(.toggle):hover:not(:disabled){filter:brightness(1.04)}button:not(.get):not(.toggle):active:not(:disabled){transform:scale(.97)}button:not(.get):not(.toggle):disabled{opacity:.35;cursor:not-allowed;pointer-events:none;filter:grayscale(80%)}button:not(.get):not(.toggle).read-only{pointer-events:none!important;cursor:default!important;transform:none!important;box-shadow:none!important;background:transparent!important;border-color:transparent!important;opacity:1!important}button:not(.get):not(.toggle).read-only .button-icon{transform:none!important;color:inherit!important}button:not(.get):not(.toggle).primary{background:var(--m-btn-color);border-color:var(--m-btn-color);color:var(--m-btn-color-contrast)}button:not(.get):not(.toggle).primary:hover:not(:disabled){filter:none;background:color-mix(in srgb,var(--m-btn-color) 88%,black);border-color:color-mix(in srgb,var(--m-btn-color) 88%,black)}button:not(.get):not(.toggle).primary:active:not(:disabled){filter:brightness(.94);transform:scale(.97)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab){background:transparent;border-color:transparent;color:var(--m-btn-color);box-shadow:none}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab):hover:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 8%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab):active:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 14%,transparent);transform:scale(.97)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary{border:2px solid color-mix(in srgb,var(--m-btn-color) 15%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary:hover:not(:disabled){border-color:color-mix(in srgb,var(--m-btn-color) 40%,transparent);background:color-mix(in srgb,var(--m-btn-color) 6%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary:active:not(:disabled){border-color:color-mix(in srgb,var(--m-btn-color) 50%,transparent);background:color-mix(in srgb,var(--m-btn-color) 12%,transparent)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost){background:transparent;border-color:var(--m-btn-color);color:var(--m-btn-color)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost):hover:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 8%,transparent)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost):active:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 14%,transparent);transform:scale(.97)}button:not(.get):not(.toggle).tab{background:var(--m-backdrop-border);border-color:var(--m-backdrop-border);color:var(--m-btn-color)}button:not(.get):not(.toggle).tab:hover:not(:disabled){background:color-mix(in srgb,var(--m-backdrop-border) 82%,black);border-color:color-mix(in srgb,var(--m-backdrop-border) 82%,black);filter:none}button:not(.get):not(.toggle).tab:active:not(:disabled){background:color-mix(in srgb,var(--m-backdrop-border) 70%,black);border-color:color-mix(in srgb,var(--m-backdrop-border) 70%,black);transform:scale(.97)}button:not(.get):not(.toggle).segmented .button-icon,button:not(.get):not(.toggle).badge-accent .button-icon,button:not(.get):not(.toggle).with-right-icon .button-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--m-btn-color-opposite);order:1}button:not(.get):not(.toggle).segmented .button-label,button:not(.get):not(.toggle).badge-accent .button-label,button:not(.get):not(.toggle).with-right-icon .button-label{order:-1}button:not(.get):not(.toggle).segmented.primary .button-icon,button:not(.get):not(.toggle).badge-accent.primary .button-icon,button:not(.get):not(.toggle).with-right-icon.primary .button-icon{color:var(--m-btn-color-opposite)}button:not(.get):not(.toggle).with-left-icon .button-icon{order:-1}button:not(.get):not(.toggle).with-left-icon .button-label{order:1}button:not(.get):not(.toggle).stacked{flex-direction:column;gap:calc(var(--m-btn-size) * .3);height:auto;min-height:var(--m-btn-h);padding:calc(var(--m-btn-size) * .625) calc(var(--m-btn-size) * .875)}button:not(.get):not(.toggle).stacked .button-label{font-size:calc(var(--m-btn-size) * .8)}button:not(.get):not(.toggle).only-icon{padding:0;border-width:2px;aspect-ratio:1;display:inline-flex;align-items:center;justify-content:center}button:not(.get):not(.toggle).only-icon m-icon,button:not(.get):not(.toggle).only-icon m-one-icon{display:inline-flex}m-badge{--m-badge-height: 1.5em;--m-badge-min-width: 1.5em;--m-badge-padding: 0 .3em;--m-badge-gap: .1em}.button-label{display:inline-flex;align-items:center;line-height:normal;font-size:inherit;min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.button-icon{position:relative;display:inline-flex;align-items:center;justify-content:center}.button-icon--img{width:calc(var(--m-btn-size) * 1.75);height:calc(var(--m-btn-size) * 1.75);overflow:hidden}.button-icon--img m-img{width:100%;height:100%;display:block}.get{appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--m-btn-h);padding:0 min(var(--m-btn-size) * 1.75,2rem);border-radius:4px;background:linear-gradient(135deg,var(--m-mm),var(--m-focus),var(--m-success),var(--m-mm));background-size:200% auto;color:#fff;font-size:calc(var(--m-btn-size) * .8);font-weight:600;letter-spacing:.06em;text-transform:uppercase;border:none;cursor:pointer;white-space:nowrap;line-height:1;transition:background-position .2s ease,transform .15s ease}.get:hover{background-position:right center}.get:active{transform:scale(.97)}.toggle{appearance:none;display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;border:none;background:transparent;padding:0 min(var(--m-btn-size),1.25rem);border-radius:4px;box-shadow:none;color:var(--m-btn-color, var(--m-text-secondary));opacity:.65;font-family:inherit;font-size:var(--m-btn-size);font-weight:600;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;user-select:none;transition:background .15s ease,color .15s ease,opacity .15s ease;min-width:0}.toggle .button-icon{flex-shrink:0}.toggle .button-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;min-width:0}.toggle:hover:not(:disabled){background:var(--m-button-hover-background, rgba(0, 0, 0, .025));color:var(--m-button-hover-color, var(--m-text));opacity:1}.toggle.primary{background:var(--m-button-active-background, var(--m-mm));color:var(--m-button-active-color, #ffffff);opacity:1}.toggle.primary:hover:not(:disabled){background:var(--m-button-active-background, var(--m-mm));color:var(--m-button-active-color, #ffffff);opacity:1}.toggle.primary:active:not(:disabled){transform:scale(.97)}.toggle:disabled{opacity:.3;cursor:not-allowed}@container togglegroup (max-width: 320px){.toggle.with-left-icon .button-label,.toggle.with-right-icon .button-label{display:none!important}}@media(max-width:600px){.toggle.with-left-icon .button-label,.toggle.with-right-icon .button-label{display:none!important}}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => IconComponent), selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "component", type: i0.forwardRef(() => BadgeComponent), selector: "m-badge", inputs: ["config"], outputs: ["configChange"] }, { kind: "ngmodule", type: i0.forwardRef(() => RouterModule) }, { kind: "directive", type: i0.forwardRef(() => MRefDirective), selector: "[mRef]", inputs: ["mRef", "mRefLinkActive", "mRefToggle", "mRefParams"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i0.forwardRef(() => ImgComponent), selector: "m-img", inputs: ["src", "data", "dataType", "alt", "priority", "fill", "width", "height", "remote", "ngSrcset", "sizes"] }, { kind: "pipe", type: i0.forwardRef(() => TranslatePipe), name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6570
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ButtonComponent, isStandalone: true, selector: "m-button,m-one-button", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, labelClass: { classPropertyName: "labelClass", publicName: "labelClass", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, nav: { classPropertyName: "nav", publicName: "nav", isSignal: true, isRequired: false, transformFunction: null }, navParams: { classPropertyName: "navParams", publicName: "navParams", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, baseUrl: { classPropertyName: "baseUrl", publicName: "baseUrl", isSignal: true, isRequired: false, transformFunction: null }, one: { classPropertyName: "one", publicName: "one", isSignal: true, isRequired: false, transformFunction: null }, remote: { classPropertyName: "remote", publicName: "remote", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noTranslate: { classPropertyName: "noTranslate", publicName: "noTranslate", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, isRightIcon: { classPropertyName: "isRightIcon", publicName: "isRightIcon", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, imgSrc: { classPropertyName: "imgSrc", publicName: "imgSrc", isSignal: true, isRequired: false, transformFunction: null }, nonClickable: { classPropertyName: "nonClickable", publicName: "nonClickable", isSignal: true, isRequired: false, transformFunction: null }, inverted: { classPropertyName: "inverted", publicName: "inverted", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { config: "configChange", clicked: "clicked" }, viewQueries: [{ propertyName: "button", first: true, predicate: ["button"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (config(); as config) {\n <!-- One branch for every in-app target: `mRef` names a NavId and the store\n reads the NavKind off that node to decide route vs panel (ADR 0014). -->\n @if (config.nav) {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [disabled]=\"config.disabled\"\n [mRef]=\"config.nav\"\n [mRefParams]=\"config.navParams\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate)\"\n mRefLinkActive=\"tab\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n } @else if (config.href) {\n <a\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [href]=\"config.href\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate)\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate)\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n }\n}\n\n<ng-template #buttonContent let-button=\"button\">\n @if (button.imgSrc) {\n <div class=\"button-icon button-icon--img\">\n <m-img [src]=\"button.imgSrc\" [remote]=\"button.remote\" [alt]=\"button.label || button.name || ''\" />\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n } @else if (buttonIcon(); as icon) {\n <div class=\"button-icon\">\n @if (isFromOne()) {\n <m-one-icon [config]=\"icon\" />\n } @else {\n <m-icon [config]=\"icon\" />\n }\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n }\n @if (button.label && !button.iconOnly) {\n <span class=\"button-label {{ button.labelClass || '' }}\">\n {{ button.noTranslate ? button.label : (button.label | translate) }}\n </span>\n }\n @if (!buttonIcon() && button.badge && button.badge.count) {\n <m-badge [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'static' }\">{{\n formatBadgeCount(button.badge.count)\n }}</m-badge>\n }\n</ng-template>\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:inline-flex;align-items:center;justify-content:center;vertical-align:middle;box-sizing:border-box;overflow:hidden;transition:box-shadow .15s ease;--m-btn-size: var(--m-button-size, 1em);--m-btn-color: var(--m-button-color, var(--m-one-button-color, var(--m-mm)));--m-btn-color-contrast: var(--m-button-color-contrast, var(--m-one-button-color-contrast, #ffffff));--m-btn-color-opposite: var(--m-button-color-opposite, var(--m-one-button-color-opposite, #e1b941));--m-btn-h: calc(var(--m-btn-size) * 2.25);width:var(--m-button-width, var(--m-one-button-width, auto));min-width:0;height:var(--m-btn-h);font-size:var(--m-btn-size)}:host-context(.inverse),:host-context(.tabs-inverse),:host.inverse{--m-btn-color: var(--m-button-color, var(--m-one-button-color, var(--m-inverse-text)))}:host:has(.full-width){display:flex;width:100%}:host:has(.only-icon),:host:has(.toggle){width:var(--m-btn-h);min-width:var(--m-btn-h)}:host:has(.has-badge){overflow:visible}:host:has(.stacked),:host:has(.toggle){height:auto}:host:has(button.primary:focus-visible){box-shadow:0 0 0 calc(var(--m-btn-size) * .125) color-mix(in srgb,var(--m-btn-color) 35%,transparent)}button:not(.get):not(.toggle){height:calc(var(--input-size, var(--m-btn-size)) * 2);min-height:calc(var(--input-size, var(--m-btn-size)) * 2);border-width:max(1px,var(--input-size, var(--m-btn-size)) * .0625);border-radius:calc(var(--input-size, var(--m-btn-size)) * .4);padding:calc(var(--input-size, var(--m-btn-size)) * .5) calc(var(--input-size, var(--m-btn-size)) * .5);gap:calc(var(--input-size, var(--m-btn-size)) * .375);font-size:var(--input-size, var(--m-btn-size));border-color:var(--m-btn-color);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}button:not(.get):not(.toggle):hover:not(:disabled){background-color:color-mix(in srgb,var(--m-btn-color) 6%,transparent)}button:not(.get):not(.toggle):focus-visible:not(:disabled),button:not(.get):not(.toggle):focus-within:not(:disabled){box-shadow:0 0 0 2px color-mix(in srgb,var(--m-btn-color) 20%,transparent)}button:not(.get):not(.toggle):disabled{opacity:.6;cursor:not-allowed}button:not(.get):not(.toggle){height:auto;padding:calc(var(--m-btn-size) * .625) calc(var(--m-btn-size) * 1.25);gap:calc(var(--m-btn-size) * .375);border-style:solid;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;appearance:none;width:100%;height:100%;min-height:0;padding:0 calc(var(--m-btn-size) * 1.25);border-width:2px;border-radius:4px;color:var(--m-btn-color);font-weight:600;line-height:1;-webkit-user-select:none;user-select:none;position:relative;outline:none;box-shadow:var(--m-button-shadow, var(--m-one-button-shadow, none));transition:filter .15s ease,background .15s ease}button:not(.get):not(.toggle):hover:not(:disabled){filter:brightness(1.04)}button:not(.get):not(.toggle):active:not(:disabled){transform:scale(.97)}button:not(.get):not(.toggle):disabled{opacity:.35;cursor:not-allowed;pointer-events:none;filter:grayscale(80%)}button:not(.get):not(.toggle).read-only{pointer-events:none!important;cursor:default!important;transform:none!important;box-shadow:none!important;background:transparent!important;border-color:transparent!important;opacity:1!important}button:not(.get):not(.toggle).read-only .button-icon{transform:none!important;color:inherit!important}button:not(.get):not(.toggle).primary{background:var(--m-btn-color);border-color:var(--m-btn-color);color:var(--m-btn-color-contrast)}button:not(.get):not(.toggle).primary:hover:not(:disabled){filter:none;background:color-mix(in srgb,var(--m-btn-color) 88%,black);border-color:color-mix(in srgb,var(--m-btn-color) 88%,black)}button:not(.get):not(.toggle).primary:active:not(:disabled){filter:brightness(.94);transform:scale(.97)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab){background:transparent;border-color:transparent;color:var(--m-btn-color);box-shadow:none}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab):hover:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 8%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab):active:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 14%,transparent);transform:scale(.97)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary{border:2px solid color-mix(in srgb,var(--m-btn-color) 15%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary:hover:not(:disabled){border-color:color-mix(in srgb,var(--m-btn-color) 40%,transparent);background:color-mix(in srgb,var(--m-btn-color) 6%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary:active:not(:disabled){border-color:color-mix(in srgb,var(--m-btn-color) 50%,transparent);background:color-mix(in srgb,var(--m-btn-color) 12%,transparent)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost){background:transparent;border-color:var(--m-btn-color);color:var(--m-btn-color)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost):hover:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 8%,transparent)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost):active:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 14%,transparent);transform:scale(.97)}button:not(.get):not(.toggle).tab{background:var(--m-backdrop-border);border-color:var(--m-backdrop-border);color:var(--m-btn-color)}button:not(.get):not(.toggle).tab:hover:not(:disabled){background:color-mix(in srgb,var(--m-backdrop-border) 82%,black);border-color:color-mix(in srgb,var(--m-backdrop-border) 82%,black);filter:none}button:not(.get):not(.toggle).tab:active:not(:disabled){background:color-mix(in srgb,var(--m-backdrop-border) 70%,black);border-color:color-mix(in srgb,var(--m-backdrop-border) 70%,black);transform:scale(.97)}button:not(.get):not(.toggle).segmented .button-icon,button:not(.get):not(.toggle).badge-accent .button-icon,button:not(.get):not(.toggle).with-right-icon .button-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--m-btn-color-opposite);order:1}button:not(.get):not(.toggle).segmented .button-label,button:not(.get):not(.toggle).badge-accent .button-label,button:not(.get):not(.toggle).with-right-icon .button-label{order:-1}button:not(.get):not(.toggle).segmented.primary .button-icon,button:not(.get):not(.toggle).badge-accent.primary .button-icon,button:not(.get):not(.toggle).with-right-icon.primary .button-icon{color:var(--m-btn-color-opposite)}button:not(.get):not(.toggle).with-left-icon .button-icon{order:-1}button:not(.get):not(.toggle).with-left-icon .button-label{order:1}button:not(.get):not(.toggle).stacked{flex-direction:column;gap:calc(var(--m-btn-size) * .3);height:auto;min-height:var(--m-btn-h);padding:calc(var(--m-btn-size) * .625) calc(var(--m-btn-size) * .875)}button:not(.get):not(.toggle).stacked .button-label{font-size:calc(var(--m-btn-size) * .8)}button:not(.get):not(.toggle).only-icon{padding:0;border-width:2px;aspect-ratio:1;display:inline-flex;align-items:center;justify-content:center}button:not(.get):not(.toggle).only-icon m-icon,button:not(.get):not(.toggle).only-icon m-one-icon{display:inline-flex}m-badge{--m-badge-height: 1.5em;--m-badge-min-width: 1.5em;--m-badge-padding: 0 .3em;--m-badge-gap: .1em}.button-label{display:inline-flex;align-items:center;line-height:normal;font-size:inherit;min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.button-icon{position:relative;display:inline-flex;align-items:center;justify-content:center}.button-icon--img{width:calc(var(--m-btn-size) * 1.75);height:calc(var(--m-btn-size) * 1.75);overflow:hidden}.button-icon--img m-img{width:100%;height:100%;display:block}.get{appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--m-btn-h);padding:0 min(var(--m-btn-size) * 1.75,2rem);border-radius:4px;background:linear-gradient(135deg,var(--m-mm),var(--m-focus),var(--m-success),var(--m-mm));background-size:200% auto;color:#fff;font-size:calc(var(--m-btn-size) * .8);font-weight:600;letter-spacing:.06em;text-transform:uppercase;border:none;cursor:pointer;white-space:nowrap;line-height:1;transition:background-position .2s ease,transform .15s ease}.get:hover{background-position:right center}.get:active{transform:scale(.97)}.toggle{appearance:none;display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;border:none;background:transparent;padding:0 min(var(--m-btn-size),1.25rem);border-radius:4px;box-shadow:none;color:var(--m-btn-color, var(--m-text-secondary));opacity:.65;font-family:inherit;font-size:var(--m-btn-size);font-weight:600;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;user-select:none;transition:background .15s ease,color .15s ease,opacity .15s ease;min-width:0}.toggle .button-icon{flex-shrink:0}.toggle .button-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;min-width:0}.toggle:hover:not(:disabled){background:var(--m-button-hover-background, rgba(0, 0, 0, .025));color:var(--m-button-hover-color, var(--m-text));opacity:1}.toggle.primary{background:var(--m-button-active-background, var(--m-mm));color:var(--m-button-active-color, #ffffff);opacity:1}.toggle.primary:hover:not(:disabled){background:var(--m-button-active-background, var(--m-mm));color:var(--m-button-active-color, #ffffff);opacity:1}.toggle.primary:active:not(:disabled){transform:scale(.97)}.toggle:disabled{opacity:.3;cursor:not-allowed}@container togglegroup (max-width: 320px){.toggle.with-left-icon .button-label,.toggle.with-right-icon .button-label{display:none!important}}@media(max-width:600px){.toggle.with-left-icon .button-label,.toggle.with-right-icon .button-label{display:none!important}}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => IconComponent), selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "component", type: i0.forwardRef(() => BadgeComponent), selector: "m-badge", inputs: ["config"], outputs: ["configChange"] }, { kind: "ngmodule", type: i0.forwardRef(() => RouterModule) }, { kind: "directive", type: i0.forwardRef(() => MRefDirective), selector: "[mRef]", inputs: ["mRef", "mRefLinkActive", "mRefToggle", "mRefParams"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i0.forwardRef(() => ImgComponent), selector: "m-img", inputs: ["src", "data", "dataType", "alt", "priority", "fill", "width", "height", "remote", "ngSrcset", "sizes"] }, { kind: "pipe", type: i0.forwardRef(() => TranslatePipe), name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6528
6571
  }
6529
6572
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ButtonComponent, decorators: [{
6530
6573
  type: Component,
@@ -6536,7 +6579,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6536
6579
  MRefDirective,
6537
6580
  forwardRef(() => NgTemplateOutlet),
6538
6581
  forwardRef(() => ImgComponent),
6539
- ], encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (config(); as config) {\n <!-- One branch for every in-app target: `mRef` names a NavId and the store\n reads the NavKind off that node to decide route vs panel (ADR 0014). -->\n @if (config.nav) {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [disabled]=\"config.disabled\"\n [mRef]=\"config.nav\"\n [mRefParams]=\"config.navParams\"\n [attr.aria-label]=\"config.label | translate\"\n mRefLinkActive=\"tab\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n } @else if (config.href) {\n <a\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [href]=\"config.href\"\n [attr.aria-label]=\"config.label | translate\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"config.label | translate\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n }\n}\n\n<ng-template #buttonContent let-button=\"button\">\n @if (button.imgSrc) {\n <div class=\"button-icon button-icon--img\">\n <m-img [src]=\"button.imgSrc\" [remote]=\"button.remote\" [alt]=\"button.label || button.name || ''\" />\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n } @else if (buttonIcon(); as icon) {\n <div class=\"button-icon\">\n @if (isFromOne()) {\n <m-one-icon [config]=\"icon\" />\n } @else {\n <m-icon [config]=\"icon\" />\n }\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n }\n @if (button.label && !button.iconOnly) {\n <span class=\"button-label {{ button.labelClass || '' }}\">\n {{ button.noTranslate ? button.label : (button.label | translate) }}\n </span>\n }\n @if (!buttonIcon() && button.badge && button.badge.count) {\n <m-badge [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'static' }\">{{\n formatBadgeCount(button.badge.count)\n }}</m-badge>\n }\n</ng-template>\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:inline-flex;align-items:center;justify-content:center;vertical-align:middle;box-sizing:border-box;overflow:hidden;transition:box-shadow .15s ease;--m-btn-size: var(--m-button-size, 1em);--m-btn-color: var(--m-button-color, var(--m-one-button-color, var(--m-mm)));--m-btn-color-contrast: var(--m-button-color-contrast, var(--m-one-button-color-contrast, #ffffff));--m-btn-color-opposite: var(--m-button-color-opposite, var(--m-one-button-color-opposite, #e1b941));--m-btn-h: calc(var(--m-btn-size) * 2.25);width:var(--m-button-width, var(--m-one-button-width, auto));min-width:0;height:var(--m-btn-h);font-size:var(--m-btn-size)}:host-context(.inverse),:host-context(.tabs-inverse),:host.inverse{--m-btn-color: var(--m-button-color, var(--m-one-button-color, var(--m-inverse-text)))}:host:has(.full-width){display:flex;width:100%}:host:has(.only-icon),:host:has(.toggle){width:var(--m-btn-h);min-width:var(--m-btn-h)}:host:has(.has-badge){overflow:visible}:host:has(.stacked),:host:has(.toggle){height:auto}:host:has(button.primary:focus-visible){box-shadow:0 0 0 calc(var(--m-btn-size) * .125) color-mix(in srgb,var(--m-btn-color) 35%,transparent)}button:not(.get):not(.toggle){height:calc(var(--input-size, var(--m-btn-size)) * 2);min-height:calc(var(--input-size, var(--m-btn-size)) * 2);border-width:max(1px,var(--input-size, var(--m-btn-size)) * .0625);border-radius:calc(var(--input-size, var(--m-btn-size)) * .4);padding:calc(var(--input-size, var(--m-btn-size)) * .5) calc(var(--input-size, var(--m-btn-size)) * .5);gap:calc(var(--input-size, var(--m-btn-size)) * .375);font-size:var(--input-size, var(--m-btn-size));border-color:var(--m-btn-color);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}button:not(.get):not(.toggle):hover:not(:disabled){background-color:color-mix(in srgb,var(--m-btn-color) 6%,transparent)}button:not(.get):not(.toggle):focus-visible:not(:disabled),button:not(.get):not(.toggle):focus-within:not(:disabled){box-shadow:0 0 0 2px color-mix(in srgb,var(--m-btn-color) 20%,transparent)}button:not(.get):not(.toggle):disabled{opacity:.6;cursor:not-allowed}button:not(.get):not(.toggle){height:auto;padding:calc(var(--m-btn-size) * .625) calc(var(--m-btn-size) * 1.25);gap:calc(var(--m-btn-size) * .375);border-style:solid;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;appearance:none;width:100%;height:100%;min-height:0;padding:0 calc(var(--m-btn-size) * 1.25);border-width:2px;border-radius:4px;color:var(--m-btn-color);font-weight:600;line-height:1;-webkit-user-select:none;user-select:none;position:relative;outline:none;box-shadow:var(--m-button-shadow, var(--m-one-button-shadow, none));transition:filter .15s ease,background .15s ease}button:not(.get):not(.toggle):hover:not(:disabled){filter:brightness(1.04)}button:not(.get):not(.toggle):active:not(:disabled){transform:scale(.97)}button:not(.get):not(.toggle):disabled{opacity:.35;cursor:not-allowed;pointer-events:none;filter:grayscale(80%)}button:not(.get):not(.toggle).read-only{pointer-events:none!important;cursor:default!important;transform:none!important;box-shadow:none!important;background:transparent!important;border-color:transparent!important;opacity:1!important}button:not(.get):not(.toggle).read-only .button-icon{transform:none!important;color:inherit!important}button:not(.get):not(.toggle).primary{background:var(--m-btn-color);border-color:var(--m-btn-color);color:var(--m-btn-color-contrast)}button:not(.get):not(.toggle).primary:hover:not(:disabled){filter:none;background:color-mix(in srgb,var(--m-btn-color) 88%,black);border-color:color-mix(in srgb,var(--m-btn-color) 88%,black)}button:not(.get):not(.toggle).primary:active:not(:disabled){filter:brightness(.94);transform:scale(.97)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab){background:transparent;border-color:transparent;color:var(--m-btn-color);box-shadow:none}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab):hover:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 8%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab):active:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 14%,transparent);transform:scale(.97)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary{border:2px solid color-mix(in srgb,var(--m-btn-color) 15%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary:hover:not(:disabled){border-color:color-mix(in srgb,var(--m-btn-color) 40%,transparent);background:color-mix(in srgb,var(--m-btn-color) 6%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary:active:not(:disabled){border-color:color-mix(in srgb,var(--m-btn-color) 50%,transparent);background:color-mix(in srgb,var(--m-btn-color) 12%,transparent)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost){background:transparent;border-color:var(--m-btn-color);color:var(--m-btn-color)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost):hover:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 8%,transparent)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost):active:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 14%,transparent);transform:scale(.97)}button:not(.get):not(.toggle).tab{background:var(--m-backdrop-border);border-color:var(--m-backdrop-border);color:var(--m-btn-color)}button:not(.get):not(.toggle).tab:hover:not(:disabled){background:color-mix(in srgb,var(--m-backdrop-border) 82%,black);border-color:color-mix(in srgb,var(--m-backdrop-border) 82%,black);filter:none}button:not(.get):not(.toggle).tab:active:not(:disabled){background:color-mix(in srgb,var(--m-backdrop-border) 70%,black);border-color:color-mix(in srgb,var(--m-backdrop-border) 70%,black);transform:scale(.97)}button:not(.get):not(.toggle).segmented .button-icon,button:not(.get):not(.toggle).badge-accent .button-icon,button:not(.get):not(.toggle).with-right-icon .button-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--m-btn-color-opposite);order:1}button:not(.get):not(.toggle).segmented .button-label,button:not(.get):not(.toggle).badge-accent .button-label,button:not(.get):not(.toggle).with-right-icon .button-label{order:-1}button:not(.get):not(.toggle).segmented.primary .button-icon,button:not(.get):not(.toggle).badge-accent.primary .button-icon,button:not(.get):not(.toggle).with-right-icon.primary .button-icon{color:var(--m-btn-color-opposite)}button:not(.get):not(.toggle).with-left-icon .button-icon{order:-1}button:not(.get):not(.toggle).with-left-icon .button-label{order:1}button:not(.get):not(.toggle).stacked{flex-direction:column;gap:calc(var(--m-btn-size) * .3);height:auto;min-height:var(--m-btn-h);padding:calc(var(--m-btn-size) * .625) calc(var(--m-btn-size) * .875)}button:not(.get):not(.toggle).stacked .button-label{font-size:calc(var(--m-btn-size) * .8)}button:not(.get):not(.toggle).only-icon{padding:0;border-width:2px;aspect-ratio:1;display:inline-flex;align-items:center;justify-content:center}button:not(.get):not(.toggle).only-icon m-icon,button:not(.get):not(.toggle).only-icon m-one-icon{display:inline-flex}m-badge{--m-badge-height: 1.5em;--m-badge-min-width: 1.5em;--m-badge-padding: 0 .3em;--m-badge-gap: .1em}.button-label{display:inline-flex;align-items:center;line-height:normal;font-size:inherit;min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.button-icon{position:relative;display:inline-flex;align-items:center;justify-content:center}.button-icon--img{width:calc(var(--m-btn-size) * 1.75);height:calc(var(--m-btn-size) * 1.75);overflow:hidden}.button-icon--img m-img{width:100%;height:100%;display:block}.get{appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--m-btn-h);padding:0 min(var(--m-btn-size) * 1.75,2rem);border-radius:4px;background:linear-gradient(135deg,var(--m-mm),var(--m-focus),var(--m-success),var(--m-mm));background-size:200% auto;color:#fff;font-size:calc(var(--m-btn-size) * .8);font-weight:600;letter-spacing:.06em;text-transform:uppercase;border:none;cursor:pointer;white-space:nowrap;line-height:1;transition:background-position .2s ease,transform .15s ease}.get:hover{background-position:right center}.get:active{transform:scale(.97)}.toggle{appearance:none;display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;border:none;background:transparent;padding:0 min(var(--m-btn-size),1.25rem);border-radius:4px;box-shadow:none;color:var(--m-btn-color, var(--m-text-secondary));opacity:.65;font-family:inherit;font-size:var(--m-btn-size);font-weight:600;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;user-select:none;transition:background .15s ease,color .15s ease,opacity .15s ease;min-width:0}.toggle .button-icon{flex-shrink:0}.toggle .button-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;min-width:0}.toggle:hover:not(:disabled){background:var(--m-button-hover-background, rgba(0, 0, 0, .025));color:var(--m-button-hover-color, var(--m-text));opacity:1}.toggle.primary{background:var(--m-button-active-background, var(--m-mm));color:var(--m-button-active-color, #ffffff);opacity:1}.toggle.primary:hover:not(:disabled){background:var(--m-button-active-background, var(--m-mm));color:var(--m-button-active-color, #ffffff);opacity:1}.toggle.primary:active:not(:disabled){transform:scale(.97)}.toggle:disabled{opacity:.3;cursor:not-allowed}@container togglegroup (max-width: 320px){.toggle.with-left-icon .button-label,.toggle.with-right-icon .button-label{display:none!important}}@media(max-width:600px){.toggle.with-left-icon .button-label,.toggle.with-right-icon .button-label{display:none!important}}\n"] }]
6582
+ ], encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (config(); as config) {\n <!-- One branch for every in-app target: `mRef` names a NavId and the store\n reads the NavKind off that node to decide route vs panel (ADR 0014). -->\n @if (config.nav) {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [disabled]=\"config.disabled\"\n [mRef]=\"config.nav\"\n [mRefParams]=\"config.navParams\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate)\"\n mRefLinkActive=\"tab\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n } @else if (config.href) {\n <a\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [href]=\"config.href\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate)\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate)\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n }\n}\n\n<ng-template #buttonContent let-button=\"button\">\n @if (button.imgSrc) {\n <div class=\"button-icon button-icon--img\">\n <m-img [src]=\"button.imgSrc\" [remote]=\"button.remote\" [alt]=\"button.label || button.name || ''\" />\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n } @else if (buttonIcon(); as icon) {\n <div class=\"button-icon\">\n @if (isFromOne()) {\n <m-one-icon [config]=\"icon\" />\n } @else {\n <m-icon [config]=\"icon\" />\n }\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n }\n @if (button.label && !button.iconOnly) {\n <span class=\"button-label {{ button.labelClass || '' }}\">\n {{ button.noTranslate ? button.label : (button.label | translate) }}\n </span>\n }\n @if (!buttonIcon() && button.badge && button.badge.count) {\n <m-badge [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'static' }\">{{\n formatBadgeCount(button.badge.count)\n }}</m-badge>\n }\n</ng-template>\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:inline-flex;align-items:center;justify-content:center;vertical-align:middle;box-sizing:border-box;overflow:hidden;transition:box-shadow .15s ease;--m-btn-size: var(--m-button-size, 1em);--m-btn-color: var(--m-button-color, var(--m-one-button-color, var(--m-mm)));--m-btn-color-contrast: var(--m-button-color-contrast, var(--m-one-button-color-contrast, #ffffff));--m-btn-color-opposite: var(--m-button-color-opposite, var(--m-one-button-color-opposite, #e1b941));--m-btn-h: calc(var(--m-btn-size) * 2.25);width:var(--m-button-width, var(--m-one-button-width, auto));min-width:0;height:var(--m-btn-h);font-size:var(--m-btn-size)}:host-context(.inverse),:host-context(.tabs-inverse),:host.inverse{--m-btn-color: var(--m-button-color, var(--m-one-button-color, var(--m-inverse-text)))}:host:has(.full-width){display:flex;width:100%}:host:has(.only-icon),:host:has(.toggle){width:var(--m-btn-h);min-width:var(--m-btn-h)}:host:has(.has-badge){overflow:visible}:host:has(.stacked),:host:has(.toggle){height:auto}:host:has(button.primary:focus-visible){box-shadow:0 0 0 calc(var(--m-btn-size) * .125) color-mix(in srgb,var(--m-btn-color) 35%,transparent)}button:not(.get):not(.toggle){height:calc(var(--input-size, var(--m-btn-size)) * 2);min-height:calc(var(--input-size, var(--m-btn-size)) * 2);border-width:max(1px,var(--input-size, var(--m-btn-size)) * .0625);border-radius:calc(var(--input-size, var(--m-btn-size)) * .4);padding:calc(var(--input-size, var(--m-btn-size)) * .5) calc(var(--input-size, var(--m-btn-size)) * .5);gap:calc(var(--input-size, var(--m-btn-size)) * .375);font-size:var(--input-size, var(--m-btn-size));border-color:var(--m-btn-color);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,opacity .2s ease}button:not(.get):not(.toggle):hover:not(:disabled){background-color:color-mix(in srgb,var(--m-btn-color) 6%,transparent)}button:not(.get):not(.toggle):focus-visible:not(:disabled),button:not(.get):not(.toggle):focus-within:not(:disabled){box-shadow:0 0 0 2px color-mix(in srgb,var(--m-btn-color) 20%,transparent)}button:not(.get):not(.toggle):disabled{opacity:.6;cursor:not-allowed}button:not(.get):not(.toggle){height:auto;padding:calc(var(--m-btn-size) * .625) calc(var(--m-btn-size) * 1.25);gap:calc(var(--m-btn-size) * .375);border-style:solid;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;font-family:inherit;cursor:pointer;appearance:none;width:100%;height:100%;min-height:0;padding:0 calc(var(--m-btn-size) * 1.25);border-width:2px;border-radius:4px;color:var(--m-btn-color);font-weight:600;line-height:1;-webkit-user-select:none;user-select:none;position:relative;outline:none;box-shadow:var(--m-button-shadow, var(--m-one-button-shadow, none));transition:filter .15s ease,background .15s ease}button:not(.get):not(.toggle):hover:not(:disabled){filter:brightness(1.04)}button:not(.get):not(.toggle):active:not(:disabled){transform:scale(.97)}button:not(.get):not(.toggle):disabled{opacity:.35;cursor:not-allowed;pointer-events:none;filter:grayscale(80%)}button:not(.get):not(.toggle).read-only{pointer-events:none!important;cursor:default!important;transform:none!important;box-shadow:none!important;background:transparent!important;border-color:transparent!important;opacity:1!important}button:not(.get):not(.toggle).read-only .button-icon{transform:none!important;color:inherit!important}button:not(.get):not(.toggle).primary{background:var(--m-btn-color);border-color:var(--m-btn-color);color:var(--m-btn-color-contrast)}button:not(.get):not(.toggle).primary:hover:not(:disabled){filter:none;background:color-mix(in srgb,var(--m-btn-color) 88%,black);border-color:color-mix(in srgb,var(--m-btn-color) 88%,black)}button:not(.get):not(.toggle).primary:active:not(:disabled){filter:brightness(.94);transform:scale(.97)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab){background:transparent;border-color:transparent;color:var(--m-btn-color);box-shadow:none}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab):hover:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 8%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab):active:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 14%,transparent);transform:scale(.97)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary{border:2px solid color-mix(in srgb,var(--m-btn-color) 15%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary:hover:not(:disabled){border-color:color-mix(in srgb,var(--m-btn-color) 40%,transparent);background:color-mix(in srgb,var(--m-btn-color) 6%,transparent)}button:not(.get):not(.toggle).ghost:not(.primary):not(.tab).secondary:active:not(:disabled){border-color:color-mix(in srgb,var(--m-btn-color) 50%,transparent);background:color-mix(in srgb,var(--m-btn-color) 12%,transparent)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost){background:transparent;border-color:var(--m-btn-color);color:var(--m-btn-color)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost):hover:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 8%,transparent)}button:not(.get):not(.toggle).secondary:not(.primary):not(.ghost):active:not(:disabled){background:color-mix(in srgb,var(--m-btn-color) 14%,transparent);transform:scale(.97)}button:not(.get):not(.toggle).tab{background:var(--m-backdrop-border);border-color:var(--m-backdrop-border);color:var(--m-btn-color)}button:not(.get):not(.toggle).tab:hover:not(:disabled){background:color-mix(in srgb,var(--m-backdrop-border) 82%,black);border-color:color-mix(in srgb,var(--m-backdrop-border) 82%,black);filter:none}button:not(.get):not(.toggle).tab:active:not(:disabled){background:color-mix(in srgb,var(--m-backdrop-border) 70%,black);border-color:color-mix(in srgb,var(--m-backdrop-border) 70%,black);transform:scale(.97)}button:not(.get):not(.toggle).segmented .button-icon,button:not(.get):not(.toggle).badge-accent .button-icon,button:not(.get):not(.toggle).with-right-icon .button-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--m-btn-color-opposite);order:1}button:not(.get):not(.toggle).segmented .button-label,button:not(.get):not(.toggle).badge-accent .button-label,button:not(.get):not(.toggle).with-right-icon .button-label{order:-1}button:not(.get):not(.toggle).segmented.primary .button-icon,button:not(.get):not(.toggle).badge-accent.primary .button-icon,button:not(.get):not(.toggle).with-right-icon.primary .button-icon{color:var(--m-btn-color-opposite)}button:not(.get):not(.toggle).with-left-icon .button-icon{order:-1}button:not(.get):not(.toggle).with-left-icon .button-label{order:1}button:not(.get):not(.toggle).stacked{flex-direction:column;gap:calc(var(--m-btn-size) * .3);height:auto;min-height:var(--m-btn-h);padding:calc(var(--m-btn-size) * .625) calc(var(--m-btn-size) * .875)}button:not(.get):not(.toggle).stacked .button-label{font-size:calc(var(--m-btn-size) * .8)}button:not(.get):not(.toggle).only-icon{padding:0;border-width:2px;aspect-ratio:1;display:inline-flex;align-items:center;justify-content:center}button:not(.get):not(.toggle).only-icon m-icon,button:not(.get):not(.toggle).only-icon m-one-icon{display:inline-flex}m-badge{--m-badge-height: 1.5em;--m-badge-min-width: 1.5em;--m-badge-padding: 0 .3em;--m-badge-gap: .1em}.button-label{display:inline-flex;align-items:center;line-height:normal;font-size:inherit;min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.button-icon{position:relative;display:inline-flex;align-items:center;justify-content:center}.button-icon--img{width:calc(var(--m-btn-size) * 1.75);height:calc(var(--m-btn-size) * 1.75);overflow:hidden}.button-icon--img m-img{width:100%;height:100%;display:block}.get{appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--m-btn-h);padding:0 min(var(--m-btn-size) * 1.75,2rem);border-radius:4px;background:linear-gradient(135deg,var(--m-mm),var(--m-focus),var(--m-success),var(--m-mm));background-size:200% auto;color:#fff;font-size:calc(var(--m-btn-size) * .8);font-weight:600;letter-spacing:.06em;text-transform:uppercase;border:none;cursor:pointer;white-space:nowrap;line-height:1;transition:background-position .2s ease,transform .15s ease}.get:hover{background-position:right center}.get:active{transform:scale(.97)}.toggle{appearance:none;display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;border:none;background:transparent;padding:0 min(var(--m-btn-size),1.25rem);border-radius:4px;box-shadow:none;color:var(--m-btn-color, var(--m-text-secondary));opacity:.65;font-family:inherit;font-size:var(--m-btn-size);font-weight:600;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;user-select:none;transition:background .15s ease,color .15s ease,opacity .15s ease;min-width:0}.toggle .button-icon{flex-shrink:0}.toggle .button-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;min-width:0}.toggle:hover:not(:disabled){background:var(--m-button-hover-background, rgba(0, 0, 0, .025));color:var(--m-button-hover-color, var(--m-text));opacity:1}.toggle.primary{background:var(--m-button-active-background, var(--m-mm));color:var(--m-button-active-color, #ffffff);opacity:1}.toggle.primary:hover:not(:disabled){background:var(--m-button-active-background, var(--m-mm));color:var(--m-button-active-color, #ffffff);opacity:1}.toggle.primary:active:not(:disabled){transform:scale(.97)}.toggle:disabled{opacity:.3;cursor:not-allowed}@container togglegroup (max-width: 320px){.toggle.with-left-icon .button-label,.toggle.with-right-icon .button-label{display:none!important}}@media(max-width:600px){.toggle.with-left-icon .button-label,.toggle.with-right-icon .button-label{display:none!important}}\n"] }]
6540
6583
  }], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }, { type: i0.Output, args: ["configChange"] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], labelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelClass", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], nav: [{ type: i0.Input, args: [{ isSignal: true, alias: "nav", required: false }] }], navParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "navParams", required: false }] }], href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], baseUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "baseUrl", required: false }] }], one: [{ type: i0.Input, args: [{ isSignal: true, alias: "one", required: false }] }], remote: [{ type: i0.Input, args: [{ isSignal: true, alias: "remote", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], noTranslate: [{ type: i0.Input, args: [{ isSignal: true, alias: "noTranslate", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], isRightIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "isRightIcon", required: false }] }], iconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnly", required: false }] }], stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }], imgSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "imgSrc", required: false }] }], nonClickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "nonClickable", required: false }] }], inverted: [{ type: i0.Input, args: [{ isSignal: true, alias: "inverted", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], clicked: [{ type: i0.Output, args: ["clicked"] }], button: [{ type: i0.ViewChild, args: ['button', { isSignal: true }] }] } });
6541
6584
 
6542
6585
  /**
@@ -7291,10 +7334,7 @@ class ButtonGroupComponent extends ConfigComponent {
7291
7334
  vertical = input(...(ngDevMode ? [undefined, { debugName: "vertical" }] : /* istanbul ignore next */ []));
7292
7335
  size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : /* istanbul ignore next */ []));
7293
7336
  parentSize = injectParentSize();
7294
- resolvedSize = computed(() => this.size() ??
7295
- this.config()?.size ??
7296
- this.parentSize?.size() ??
7297
- DEFAULT_SIZE, ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
7337
+ resolvedSize = computed(() => coerceSize(this.size(), this.config()?.size, this.parentSize?.size()), ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
7298
7338
  sizeLength = computed(() => resolveSize(this.resolvedSize()), ...(ngDevMode ? [{ debugName: "sizeLength" }] : /* istanbul ignore next */ []));
7299
7339
  subFolder = 'button_groups';
7300
7340
  clicked = output();
@@ -8689,7 +8729,7 @@ class SectionSearchComponent extends BaseTextInputComponent {
8689
8729
  </div>
8690
8730
  </div>
8691
8731
  }
8692
- `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:flex;align-items:center;min-height:var(--section-header-min-height, calc(var(--section-header-py, 1rem) * 2 + 1.375rem));border-bottom:1px solid var(--m-section-search-border, var(--m-backdrop-border));padding:var(--section-header-py, .75rem) var(--section-px, 1rem);--m-header-size: 1rem}:host.has-sidepanel{padding-right:50px}:host(.no-border){border-bottom:none}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10;background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}.section-search__bar{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%}.section-search__bar m-header{flex:1;min-width:0;font-size:1rem}.section-search__bar .section-search__toggle{flex-shrink:0;--m-button-size: 1rem !important}.section-search__field{display:flex;align-items:center;width:100%}.section-search__field m-input-clear{width:100%}\n"], dependencies: [{ kind: "component", type: ClearableInputComponent, selector: "m-input-clear", inputs: ["value", "config", "required", "disabled", "readonly", "invalid", "focused", "touched", "errors", "icon", "placeholder", "type", "inputId"], outputs: ["valueChange", "touchedChange"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "type"], outputs: ["configChange", "clicked"] }, { kind: "component", type: HeaderComponent$1, selector: "m-header", inputs: ["level", "label", "actionButton", "actionLabel", "noTranslate"], outputs: ["actionClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8732
+ `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:flex;align-items:center;width:100%;grid-column:1/-1;box-sizing:border-box;min-height:var(--section-header-min-height, calc(var(--section-header-py, 1rem) * 2 + 1.375rem));border-bottom:1px solid var(--m-section-search-border, var(--m-backdrop-border));padding:var(--section-header-py, .75rem) var(--section-px, 1rem);--m-header-size: 1rem}:host.has-sidepanel{padding-right:50px}:host(.no-border){border-bottom:none}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10;background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}.section-search__bar{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%}.section-search__bar m-header{flex:1;min-width:0;font-size:1rem}.section-search__bar .section-search__toggle{flex-shrink:0;--m-button-size: 1rem !important}.section-search__field{display:flex;align-items:center;width:100%}.section-search__field m-input-clear{width:100%}\n"], dependencies: [{ kind: "component", type: ClearableInputComponent, selector: "m-input-clear", inputs: ["value", "config", "required", "disabled", "readonly", "invalid", "focused", "touched", "errors", "icon", "placeholder", "type", "inputId"], outputs: ["valueChange", "touchedChange"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "type"], outputs: ["configChange", "clicked"] }, { kind: "component", type: HeaderComponent$1, selector: "m-header", inputs: ["level", "label", "actionButton", "actionLabel", "noTranslate"], outputs: ["actionClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8693
8733
  }
8694
8734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionSearchComponent, decorators: [{
8695
8735
  type: Component,
@@ -8719,7 +8759,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8719
8759
  '[class.is-sticky]': 'isSticky()',
8720
8760
  '[class.has-sidepanel]': 'sidepanel()',
8721
8761
  '[class.no-border]': 'noBorder()',
8722
- }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:flex;align-items:center;min-height:var(--section-header-min-height, calc(var(--section-header-py, 1rem) * 2 + 1.375rem));border-bottom:1px solid var(--m-section-search-border, var(--m-backdrop-border));padding:var(--section-header-py, .75rem) var(--section-px, 1rem);--m-header-size: 1rem}:host.has-sidepanel{padding-right:50px}:host(.no-border){border-bottom:none}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10;background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}.section-search__bar{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%}.section-search__bar m-header{flex:1;min-width:0;font-size:1rem}.section-search__bar .section-search__toggle{flex-shrink:0;--m-button-size: 1rem !important}.section-search__field{display:flex;align-items:center;width:100%}.section-search__field m-input-clear{width:100%}\n"] }]
8762
+ }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:flex;align-items:center;width:100%;grid-column:1/-1;box-sizing:border-box;min-height:var(--section-header-min-height, calc(var(--section-header-py, 1rem) * 2 + 1.375rem));border-bottom:1px solid var(--m-section-search-border, var(--m-backdrop-border));padding:var(--section-header-py, .75rem) var(--section-px, 1rem);--m-header-size: 1rem}:host.has-sidepanel{padding-right:50px}:host(.no-border){border-bottom:none}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10;background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}.section-search__bar{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%}.section-search__bar m-header{flex:1;min-width:0;font-size:1rem}.section-search__bar .section-search__toggle{flex-shrink:0;--m-button-size: 1rem !important}.section-search__field{display:flex;align-items:center;width:100%}.section-search__field m-input-clear{width:100%}\n"] }]
8723
8763
  }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], focused: [{ type: i0.Input, args: [{ isSignal: true, alias: "focused", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], searchLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchLabel", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], debounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounce", required: false }] }], startOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "startOpen", required: false }] }], sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], searchChange: [{ type: i0.Output, args: ["searchChange"] }] } });
8724
8764
 
8725
8765
  function isWithinBoundary(value, draggable, axis) {
@@ -11237,10 +11277,9 @@ class SectionComponent extends ConfigComponent {
11237
11277
  align = input(undefined, ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
11238
11278
  size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : /* istanbul ignore next */ []));
11239
11279
  parentSize = injectParentSize();
11240
- resolvedSize = computed(() => this.size() ??
11241
- this.config()?.size ??
11242
- this.parentSize?.size() ??
11243
- DEFAULT_SIZE, ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
11280
+ // Size is Section/Form/ButtonGroup only (ADR 0008). Icons underneath read
11281
+ // this via SIZE_CONTEXT — they never declare a Size of their own.
11282
+ resolvedSize = computed(() => coerceSize(this.size(), this.config()?.size, this.parentSize?.size()), ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
11244
11283
  sizeLength = computed(() => resolveSize(this.resolvedSize()), ...(ngDevMode ? [{ debugName: "sizeLength" }] : /* istanbul ignore next */ []));
11245
11284
  resolvedAlign = computed(() => this.align() ?? this.config()?.align ?? 'left', ...(ngDevMode ? [{ debugName: "resolvedAlign" }] : /* istanbul ignore next */ []));
11246
11285
  resolvedVariant = computed(() => this.variant() ?? this.config()?.variant ?? undefined, ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
@@ -11516,10 +11555,7 @@ class SectionButtonGroupComponent extends ConfigComponent {
11516
11555
  size = input(undefined, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
11517
11556
  fullWidth = input(undefined, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
11518
11557
  parentSize = injectParentSize();
11519
- resolvedSize = computed(() => this.size() ??
11520
- this.config()?.size ??
11521
- this.parentSize?.size() ??
11522
- DEFAULT_SIZE, ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
11558
+ resolvedSize = computed(() => coerceSize(this.size(), this.config()?.size, this.parentSize?.size()), ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
11523
11559
  sizeLength = computed(() => resolveSize(this.resolvedSize()), ...(ngDevMode ? [{ debugName: "sizeLength" }] : /* istanbul ignore next */ []));
11524
11560
  resolvedFullWidth = computed(() => toBool$1(this.fullWidth() ?? this.config()?.fullWidth), ...(ngDevMode ? [{ debugName: "resolvedFullWidth" }] : /* istanbul ignore next */ []));
11525
11561
  resolvedVertical = computed(() => this.vertical() ?? this.config()?.vertical ?? false, ...(ngDevMode ? [{ debugName: "resolvedVertical" }] : /* istanbul ignore next */ []));
@@ -15058,7 +15094,7 @@ class WrapperInputComponent extends ConfigComponent {
15058
15094
  break;
15059
15095
  }
15060
15096
  case InputType.TOGGLE: {
15061
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-B-sc4D0R.mjs');
15097
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-CovjN1j6.mjs');
15062
15098
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
15063
15099
  break;
15064
15100
  }
@@ -15070,12 +15106,12 @@ class WrapperInputComponent extends ConfigComponent {
15070
15106
  break;
15071
15107
  }
15072
15108
  case InputType.PASSWORD: {
15073
- const { PasswordInputComponent } = await import('./magmonium-one-password-Db-It94E.mjs');
15109
+ const { PasswordInputComponent } = await import('./magmonium-one-password-Pk0hhC0A.mjs');
15074
15110
  this.createDynamicComponent(seq, PasswordInputComponent);
15075
15111
  break;
15076
15112
  }
15077
15113
  case InputType.OTP: {
15078
- const { OtpInputComponent } = await import('./magmonium-one-otp-BwEW31Sr.mjs');
15114
+ const { OtpInputComponent } = await import('./magmonium-one-otp-_zwgEGu3.mjs');
15079
15115
  this.createDynamicComponent(seq, OtpInputComponent);
15080
15116
  break;
15081
15117
  }
@@ -16168,7 +16204,7 @@ class SelectableCardInputComponent extends BaseInputComponent {
16168
16204
  }
16169
16205
  </div>
16170
16206
  }
16171
- `, 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)}}.selectable-card{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem}.selectable-card--vertical{flex-direction:column}.selectable-card__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 1rem;border:2px solid var(--border, var(--m-border));border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--background, var(--m-background));transition:border-color .2s ease,box-shadow .2s ease,background .15s ease;box-sizing:border-box}.selectable-card__item:hover:not(.selectable-card__item--disabled){border-color:var(--mm-color, var(--m-mm));box-shadow:0 0 0 1px color-mix(in srgb,var(--mm-color, var(--m-mm)) 20%,transparent 80%)}.selectable-card__item--selected{border-color:var(--mm-color, var(--m-mm));box-shadow:0 0 0 1px var(--mm-color, var(--m-mm));background:color-mix(in srgb,var(--mm-color, var(--m-mm)) 5%,var(--background, var(--m-background)) 95%)}.selectable-card__item--selected:hover:not(.selectable-card__item--disabled){box-shadow:0 0 0 2px var(--mm-color, var(--m-mm))}.selectable-card__item:focus-visible{outline:2px solid var(--mm-color, var(--m-mm));outline-offset:2px}.selectable-card__item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.selectable-card__content{flex:1;min-width:0;display:flex;align-items:center;gap:.5rem}.selectable-card__icon{flex-shrink:0;display:flex}.selectable-card__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selectable-card__indicator{flex-shrink:0;display:flex;align-items:center}.selectable-card__indicator input[type=checkbox],.selectable-card__indicator input[type=radio]{appearance:none;-webkit-appearance:none;width:1.125rem;height:1.125rem;border:2px solid color-mix(in srgb,var(--mm-color, var(--m-mm)) 50%,transparent 50%);border-radius:.25rem;background:transparent;cursor:pointer;box-sizing:border-box;transition:background .2s ease,border-color .2s ease;position:relative;flex-shrink:0}.selectable-card__indicator input[type=checkbox][type=radio],.selectable-card__indicator input[type=radio][type=radio]{border-radius:50%}.selectable-card__indicator input[type=checkbox]:checked,.selectable-card__indicator input[type=radio]:checked{background:var(--mm-color, var(--m-mm));border-color:var(--mm-color, var(--m-mm))}.selectable-card__indicator input[type=checkbox]:checked:after,.selectable-card__indicator input[type=radio]:checked:after{content:\"\";position:absolute;top:50%;left:50%}.selectable-card__indicator input[type=checkbox][type=checkbox]:checked:after,.selectable-card__indicator input[type=radio][type=checkbox]:checked:after{width:.35rem;height:.2rem;border-left:2px solid white;border-bottom:2px solid white;transform:translate(-50%,-65%) rotate(-45deg)}.selectable-card__indicator input[type=checkbox][type=radio]:checked:after,.selectable-card__indicator input[type=radio][type=radio]:checked:after{width:.4rem;height:.4rem;border-radius:50%;background:#fff;transform:translate(-50%,-50%)}.selectable-card__indicator input[type=checkbox]:disabled,.selectable-card__indicator input[type=radio]:disabled{opacity:.5;cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
16207
+ `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%;max-width:100%;min-width:0}.selectable-card{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;width:100%;max-width:100%;min-width:0;box-sizing:border-box}.selectable-card--vertical{flex-direction:column;flex-wrap:nowrap}.selectable-card--vertical .selectable-card__item{width:100%;max-width:100%;min-width:0}.selectable-card__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 1rem;border:2px solid var(--border, var(--m-border));border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--background, var(--m-background));transition:border-color .2s ease,box-shadow .2s ease,background .15s ease;box-sizing:border-box;max-width:100%;min-width:0}.selectable-card__item:hover:not(.selectable-card__item--disabled){border-color:var(--mm-color, var(--m-mm));box-shadow:0 0 0 1px color-mix(in srgb,var(--mm-color, var(--m-mm)) 20%,transparent 80%)}.selectable-card__item--selected{border-color:var(--mm-color, var(--m-mm));box-shadow:0 0 0 1px var(--mm-color, var(--m-mm));background:color-mix(in srgb,var(--mm-color, var(--m-mm)) 5%,var(--background, var(--m-background)) 95%)}.selectable-card__item--selected:hover:not(.selectable-card__item--disabled){box-shadow:0 0 0 2px var(--mm-color, var(--m-mm))}.selectable-card__item:focus-visible{outline:2px solid var(--mm-color, var(--m-mm));outline-offset:2px}.selectable-card__item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.selectable-card__content{flex:1;min-width:0;max-width:100%;display:flex;align-items:center;gap:.5rem}.selectable-card__content>*{flex:1;min-width:0;max-width:100%}.selectable-card__icon{flex-shrink:0;display:flex}.selectable-card__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selectable-card__indicator{flex-shrink:0;display:flex;align-items:center}.selectable-card__indicator input[type=checkbox],.selectable-card__indicator input[type=radio]{appearance:none;-webkit-appearance:none;width:1.125rem;height:1.125rem;border:2px solid color-mix(in srgb,var(--mm-color, var(--m-mm)) 50%,transparent 50%);border-radius:.25rem;background:transparent;cursor:pointer;box-sizing:border-box;transition:background .2s ease,border-color .2s ease;position:relative;flex-shrink:0}.selectable-card__indicator input[type=checkbox][type=radio],.selectable-card__indicator input[type=radio][type=radio]{border-radius:50%}.selectable-card__indicator input[type=checkbox]:checked,.selectable-card__indicator input[type=radio]:checked{background:var(--mm-color, var(--m-mm));border-color:var(--mm-color, var(--m-mm))}.selectable-card__indicator input[type=checkbox]:checked:after,.selectable-card__indicator input[type=radio]:checked:after{content:\"\";position:absolute;top:50%;left:50%}.selectable-card__indicator input[type=checkbox][type=checkbox]:checked:after,.selectable-card__indicator input[type=radio][type=checkbox]:checked:after{width:.35rem;height:.2rem;border-left:2px solid white;border-bottom:2px solid white;transform:translate(-50%,-65%) rotate(-45deg)}.selectable-card__indicator input[type=checkbox][type=radio]:checked:after,.selectable-card__indicator input[type=radio][type=radio]:checked:after{width:.4rem;height:.4rem;border-radius:50%;background:#fff;transform:translate(-50%,-50%)}.selectable-card__indicator input[type=checkbox]:disabled,.selectable-card__indicator input[type=radio]:disabled{opacity:.5;cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
16172
16208
  }
16173
16209
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SelectableCardInputComponent, decorators: [{
16174
16210
  type: Component,
@@ -16226,7 +16262,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
16226
16262
  }
16227
16263
  </div>
16228
16264
  }
16229
- `, imports: [NgComponentOutlet, TranslatePipe, IconComponent], 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)}}.selectable-card{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem}.selectable-card--vertical{flex-direction:column}.selectable-card__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 1rem;border:2px solid var(--border, var(--m-border));border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--background, var(--m-background));transition:border-color .2s ease,box-shadow .2s ease,background .15s ease;box-sizing:border-box}.selectable-card__item:hover:not(.selectable-card__item--disabled){border-color:var(--mm-color, var(--m-mm));box-shadow:0 0 0 1px color-mix(in srgb,var(--mm-color, var(--m-mm)) 20%,transparent 80%)}.selectable-card__item--selected{border-color:var(--mm-color, var(--m-mm));box-shadow:0 0 0 1px var(--mm-color, var(--m-mm));background:color-mix(in srgb,var(--mm-color, var(--m-mm)) 5%,var(--background, var(--m-background)) 95%)}.selectable-card__item--selected:hover:not(.selectable-card__item--disabled){box-shadow:0 0 0 2px var(--mm-color, var(--m-mm))}.selectable-card__item:focus-visible{outline:2px solid var(--mm-color, var(--m-mm));outline-offset:2px}.selectable-card__item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.selectable-card__content{flex:1;min-width:0;display:flex;align-items:center;gap:.5rem}.selectable-card__icon{flex-shrink:0;display:flex}.selectable-card__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selectable-card__indicator{flex-shrink:0;display:flex;align-items:center}.selectable-card__indicator input[type=checkbox],.selectable-card__indicator input[type=radio]{appearance:none;-webkit-appearance:none;width:1.125rem;height:1.125rem;border:2px solid color-mix(in srgb,var(--mm-color, var(--m-mm)) 50%,transparent 50%);border-radius:.25rem;background:transparent;cursor:pointer;box-sizing:border-box;transition:background .2s ease,border-color .2s ease;position:relative;flex-shrink:0}.selectable-card__indicator input[type=checkbox][type=radio],.selectable-card__indicator input[type=radio][type=radio]{border-radius:50%}.selectable-card__indicator input[type=checkbox]:checked,.selectable-card__indicator input[type=radio]:checked{background:var(--mm-color, var(--m-mm));border-color:var(--mm-color, var(--m-mm))}.selectable-card__indicator input[type=checkbox]:checked:after,.selectable-card__indicator input[type=radio]:checked:after{content:\"\";position:absolute;top:50%;left:50%}.selectable-card__indicator input[type=checkbox][type=checkbox]:checked:after,.selectable-card__indicator input[type=radio][type=checkbox]:checked:after{width:.35rem;height:.2rem;border-left:2px solid white;border-bottom:2px solid white;transform:translate(-50%,-65%) rotate(-45deg)}.selectable-card__indicator input[type=checkbox][type=radio]:checked:after,.selectable-card__indicator input[type=radio][type=radio]:checked:after{width:.4rem;height:.4rem;border-radius:50%;background:#fff;transform:translate(-50%,-50%)}.selectable-card__indicator input[type=checkbox]:disabled,.selectable-card__indicator input[type=radio]:disabled{opacity:.5;cursor:not-allowed}\n"] }]
16265
+ `, imports: [NgComponentOutlet, TranslatePipe, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%;max-width:100%;min-width:0}.selectable-card{display:flex;flex-direction:row;flex-wrap:wrap;gap:.75rem;width:100%;max-width:100%;min-width:0;box-sizing:border-box}.selectable-card--vertical{flex-direction:column;flex-wrap:nowrap}.selectable-card--vertical .selectable-card__item{width:100%;max-width:100%;min-width:0}.selectable-card__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 1rem;border:2px solid var(--border, var(--m-border));border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--background, var(--m-background));transition:border-color .2s ease,box-shadow .2s ease,background .15s ease;box-sizing:border-box;max-width:100%;min-width:0}.selectable-card__item:hover:not(.selectable-card__item--disabled){border-color:var(--mm-color, var(--m-mm));box-shadow:0 0 0 1px color-mix(in srgb,var(--mm-color, var(--m-mm)) 20%,transparent 80%)}.selectable-card__item--selected{border-color:var(--mm-color, var(--m-mm));box-shadow:0 0 0 1px var(--mm-color, var(--m-mm));background:color-mix(in srgb,var(--mm-color, var(--m-mm)) 5%,var(--background, var(--m-background)) 95%)}.selectable-card__item--selected:hover:not(.selectable-card__item--disabled){box-shadow:0 0 0 2px var(--mm-color, var(--m-mm))}.selectable-card__item:focus-visible{outline:2px solid var(--mm-color, var(--m-mm));outline-offset:2px}.selectable-card__item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.selectable-card__content{flex:1;min-width:0;max-width:100%;display:flex;align-items:center;gap:.5rem}.selectable-card__content>*{flex:1;min-width:0;max-width:100%}.selectable-card__icon{flex-shrink:0;display:flex}.selectable-card__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.selectable-card__indicator{flex-shrink:0;display:flex;align-items:center}.selectable-card__indicator input[type=checkbox],.selectable-card__indicator input[type=radio]{appearance:none;-webkit-appearance:none;width:1.125rem;height:1.125rem;border:2px solid color-mix(in srgb,var(--mm-color, var(--m-mm)) 50%,transparent 50%);border-radius:.25rem;background:transparent;cursor:pointer;box-sizing:border-box;transition:background .2s ease,border-color .2s ease;position:relative;flex-shrink:0}.selectable-card__indicator input[type=checkbox][type=radio],.selectable-card__indicator input[type=radio][type=radio]{border-radius:50%}.selectable-card__indicator input[type=checkbox]:checked,.selectable-card__indicator input[type=radio]:checked{background:var(--mm-color, var(--m-mm));border-color:var(--mm-color, var(--m-mm))}.selectable-card__indicator input[type=checkbox]:checked:after,.selectable-card__indicator input[type=radio]:checked:after{content:\"\";position:absolute;top:50%;left:50%}.selectable-card__indicator input[type=checkbox][type=checkbox]:checked:after,.selectable-card__indicator input[type=radio][type=checkbox]:checked:after{width:.35rem;height:.2rem;border-left:2px solid white;border-bottom:2px solid white;transform:translate(-50%,-65%) rotate(-45deg)}.selectable-card__indicator input[type=checkbox][type=radio]:checked:after,.selectable-card__indicator input[type=radio][type=radio]:checked:after{width:.4rem;height:.4rem;border-radius:50%;background:#fff;transform:translate(-50%,-50%)}.selectable-card__indicator input[type=checkbox]:disabled,.selectable-card__indicator input[type=radio]:disabled{opacity:.5;cursor:not-allowed}\n"] }]
16230
16266
  }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
16231
16267
 
16232
16268
  var selectableCard = /*#__PURE__*/Object.freeze({
@@ -16314,12 +16350,16 @@ class ComponentInputComponent extends BaseTextInputComponent {
16314
16350
  buttonConfig = computed(() => {
16315
16351
  const value = this.value();
16316
16352
  const config = this.config();
16353
+ // Multi-pick (PatternAsset names) lands as a list — join for the trigger.
16354
+ const label = Array.isArray(value)
16355
+ ? value.filter(Boolean).join(', ')
16356
+ : value;
16317
16357
  return {
16318
- label: value ? value : config?.placeholder,
16358
+ label: label || config?.placeholder,
16319
16359
  // The held value is shown as it is stored — an icon name, a
16320
16360
  // TranslationAsset key with its MessageVariable values riding on it.
16321
16361
  // The placeholder is the opposite: a key of ours, to be translated.
16322
- noTranslate: !!value,
16362
+ noTranslate: !!label,
16323
16363
  variant: 'secondary',
16324
16364
  one: true,
16325
16365
  icon: config?.iconFromValue && typeof value === 'string' && value
@@ -16340,6 +16380,8 @@ class ComponentInputComponent extends BaseTextInputComponent {
16340
16380
  if (!component) {
16341
16381
  return;
16342
16382
  }
16383
+ // string | string[] — icon/translation pickers close with a name; the
16384
+ // pattern picker changes with a multi-pick list (and may clear to []).
16343
16385
  const modalRef = new ModalRef();
16344
16386
  const trigger = {
16345
16387
  component,
@@ -16353,10 +16395,16 @@ class ComponentInputComponent extends BaseTextInputComponent {
16353
16395
  width: config?.panelWidth ?? '360px',
16354
16396
  })
16355
16397
  : this.modalStore.open({ ...trigger, config: { fullscreen: true } });
16398
+ const applyValue = (value) => {
16399
+ // Empty multi-pick is a real clear; only skip a missing dismiss.
16400
+ if (value === undefined)
16401
+ return;
16402
+ this.setValue(value);
16403
+ };
16404
+ // Live apply while the panel stays open (multi-pick).
16405
+ modalRef.onChange(applyValue);
16356
16406
  modalRef.onClose((value) => {
16357
- if (value) {
16358
- this.setValue(value);
16359
- }
16407
+ applyValue(value);
16360
16408
  if (isPanel) {
16361
16409
  this.modalStore.closePanel(modalId);
16362
16410
  }
@@ -17144,6 +17192,94 @@ const patternValidation = (schemaPath, regex, message = 'not-a-valid-pattern') =
17144
17192
  return null;
17145
17193
  return regex.test(value) ? null : { kind: 'pattern', message };
17146
17194
  });
17195
+ // Compiling a RegExp is not free and a Field re-validates on every keystroke,
17196
+ // so the same expression is built once. Safe to share an instance only because
17197
+ // `g` is refused at author time — a global RegExp carries `lastIndex` between
17198
+ // `.test()` calls and would alternate true/false on one value.
17199
+ const regexCache = new Map();
17200
+ const toRegExp = (rule) => {
17201
+ const key = `${rule.flags ?? ''}${rule.expression}`;
17202
+ const cached = regexCache.get(key);
17203
+ if (cached)
17204
+ return cached;
17205
+ try {
17206
+ const regex = new RegExp(rule.expression, rule.flags);
17207
+ regexCache.set(key, regex);
17208
+ return regex;
17209
+ }
17210
+ catch {
17211
+ // An expression the editor already refused cannot normally reach here. If
17212
+ // one does — hand-authored YAML, a bad merge — the Field must not lock the
17213
+ // form over a rule nobody can satisfy, so the rule is dropped instead.
17214
+ return null;
17215
+ }
17216
+ };
17217
+ /**
17218
+ * Any one of `rules` passing makes the value well-shaped (libs/one ADR 0017).
17219
+ * One rule speaks for itself; several cannot, so `message` names what the Field
17220
+ * as a whole wanted and is what shows.
17221
+ */
17222
+ const patternsValidation = (schemaPath, rules, message) => validate(schemaPath, (ctx) => {
17223
+ const value = ctx.value();
17224
+ // An empty value is `required`'s business, not a shape's. Without this a
17225
+ // Field with a pattern is required by accident.
17226
+ if (!value)
17227
+ return null;
17228
+ const usable = rules
17229
+ .map((rule) => ({ rule, regex: toRegExp(rule) }))
17230
+ .filter((entry) => Boolean(entry.regex));
17231
+ if (!usable.length)
17232
+ return null;
17233
+ if (usable.some((entry) => entry.regex.test(value)))
17234
+ return null;
17235
+ return {
17236
+ kind: 'pattern',
17237
+ message: usable.length > 1
17238
+ ? message ?? 'not-a-valid-pattern'
17239
+ : usable[0].rule.message,
17240
+ };
17241
+ });
17242
+
17243
+ /**
17244
+ * Reads a resolved Field config into the pair the schema needs, or `undefined`
17245
+ * when the Field declares no shape. A config arriving from YAML has been
17246
+ * through `JSON.parse` and is trusted no further than its shape here — a hand
17247
+ * written asset can put anything under `patterns`.
17248
+ */
17249
+ function readFieldPatterns(config) {
17250
+ const raw = config?.patterns;
17251
+ if (!Array.isArray(raw))
17252
+ return undefined;
17253
+ const rules = raw.filter((rule) => Boolean(rule) &&
17254
+ typeof rule.expression === 'string' &&
17255
+ Boolean(rule.expression));
17256
+ if (!rules.length)
17257
+ return undefined;
17258
+ const message = config?.patternMessage;
17259
+ return message ? { rules, message } : { rules };
17260
+ }
17261
+ /**
17262
+ * Identity by content, not by reference. A Field re-registers from an effect on
17263
+ * every config change, and `config()` is a fresh object each time — comparing
17264
+ * references would rebuild the whole FieldTree on every keystroke.
17265
+ */
17266
+ function samePatterns(a, b) {
17267
+ if (a === b)
17268
+ return true;
17269
+ if (!a || !b)
17270
+ return false;
17271
+ if (a.message !== b.message)
17272
+ return false;
17273
+ if (a.rules.length !== b.rules.length)
17274
+ return false;
17275
+ return a.rules.every((rule, index) => {
17276
+ const other = b.rules[index];
17277
+ return (rule.name === other.name &&
17278
+ rule.expression === other.expression &&
17279
+ rule.flags === other.flags &&
17280
+ rule.message === other.message);
17281
+ });
17282
+ }
17147
17283
 
17148
17284
  class SectionFormComponent extends ConfigComponent {
17149
17285
  // Same folder FormGroup resolves from: a form's asset is a form's asset
@@ -17187,9 +17323,13 @@ class SectionFormComponent extends ConfigComponent {
17187
17323
  // is announced once and its required flag can flip whenever the Field's
17188
17324
  // config or asset changes.
17189
17325
  requiredFields = signal([], ...(ngDevMode ? [{ debugName: "requiredFields" }] : /* istanbul ignore next */ []));
17326
+ // Keys whose Field declares accepted shapes, kept the same way and for the
17327
+ // same reason as `requiredFields` — the second declarative rule a Field asset
17328
+ // carries into the schema (libs/one ADR 0017).
17329
+ patternFields = signal({}, ...(ngDevMode ? [{ debugName: "patternFields" }] : /* istanbul ignore next */ []));
17190
17330
  // Untracked: items call this from their own effect, so reading these signals
17191
17331
  // plainly would make every item re-run whenever any sibling registers.
17192
- registerField = (name, required = false) => {
17332
+ registerField = (name, required = false, patterns) => {
17193
17333
  if (!name)
17194
17334
  return;
17195
17335
  untracked(() => {
@@ -17197,12 +17337,16 @@ class SectionFormComponent extends ConfigComponent {
17197
17337
  this.registeredFields.update((fields) => [...fields, name]);
17198
17338
  }
17199
17339
  this.setRequired(name, required);
17340
+ this.setPatterns(name, patterns);
17200
17341
  });
17201
17342
  };
17202
17343
  releaseField = (name) => {
17203
17344
  if (!name)
17204
17345
  return;
17205
- untracked(() => this.setRequired(name, false));
17346
+ untracked(() => {
17347
+ this.setRequired(name, false);
17348
+ this.setPatterns(name, undefined);
17349
+ });
17206
17350
  };
17207
17351
  setRequired = (name, required) => {
17208
17352
  const has = this.requiredFields().includes(name);
@@ -17210,16 +17354,40 @@ class SectionFormComponent extends ConfigComponent {
17210
17354
  return;
17211
17355
  this.requiredFields.update((fields) => required ? [...fields, name] : fields.filter((field) => field !== name));
17212
17356
  };
17213
- // The caller's own schema plus a `required` rule per Field that declares one.
17357
+ setPatterns = (name, patterns) => {
17358
+ const current = this.patternFields();
17359
+ const next = patterns?.rules.length ? patterns : undefined;
17360
+ if (samePatterns(current[name], next))
17361
+ return;
17362
+ this.patternFields.update((fields) => {
17363
+ const copy = { ...fields };
17364
+ if (next)
17365
+ copy[name] = next;
17366
+ else
17367
+ delete copy[name];
17368
+ return copy;
17369
+ });
17370
+ };
17371
+ // The caller's own schema plus the rules the Fields themselves declare.
17214
17372
  // Both, not either: a form given a `validation` schema still has to honour the
17215
- // attribute its markup was written with.
17373
+ // attributes its markup was written with.
17216
17374
  resolvedValidation = computed(() => {
17217
17375
  const own = this.validation();
17218
17376
  const requiredPaths = this.requiredFields();
17219
- if (!requiredPaths.length)
17377
+ const patternPaths = Object.entries(this.patternFields());
17378
+ if (!requiredPaths.length && !patternPaths.length)
17220
17379
  return own;
17221
17380
  return (path) => {
17222
- requiredValidation(path, requiredPaths);
17381
+ const tree = path;
17382
+ if (requiredPaths.length) {
17383
+ requiredValidation(tree, requiredPaths);
17384
+ }
17385
+ patternPaths.forEach(([key, { rules, message }]) => {
17386
+ const fieldPath = tree[key];
17387
+ if (!fieldPath)
17388
+ return;
17389
+ patternsValidation(fieldPath, rules, message);
17390
+ });
17223
17391
  if (own)
17224
17392
  apply(path, own);
17225
17393
  };
@@ -17294,17 +17462,14 @@ class SectionFormComponent extends ConfigComponent {
17294
17462
  event.stopPropagation();
17295
17463
  this.submitNow();
17296
17464
  };
17297
- resolvedSize = computed(() => this.size() ??
17298
- this.config()?.size ??
17299
- this.parentSize?.size() ??
17300
- DEFAULT_SIZE, ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
17465
+ resolvedSize = computed(() => coerceSize(this.size(), this.config()?.size, this.parentSize?.size()), ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
17301
17466
  // Only write font-size when this form declares a Size. Otherwise leave the
17302
17467
  // host alone so the parent Section's font-size cascades to every input
17303
17468
  // (ADR 0008). Falling through to DEFAULT here used to pin inputs at `md`
17304
17469
  // and ignore Section size changes.
17305
17470
  sizeLength = computed(() => {
17306
17471
  const own = this.size() ?? this.config()?.size;
17307
- return own ? resolveSize(own) : null;
17472
+ return isSize(own) ? resolveSize(own) : null;
17308
17473
  }, ...(ngDevMode ? [{ debugName: "sizeLength" }] : /* istanbul ignore next */ []));
17309
17474
  resolvedAlign = computed(() => this.align() ?? this.config()?.align ?? 'left', ...(ngDevMode ? [{ debugName: "resolvedAlign" }] : /* istanbul ignore next */ []));
17310
17475
  resolvedVariant = computed(() => this.variant() ?? this.config()?.variant ?? undefined, ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
@@ -17583,6 +17748,10 @@ class SectionFormItemComponent extends ConfigComponent {
17583
17748
  const required = this.config()?.required;
17584
17749
  return required === true || `${required}` === 'true';
17585
17750
  }, ...(ngDevMode ? [{ debugName: "isRequired" }] : /* istanbul ignore next */ []));
17751
+ // Read off `config()` alone, unlike `required`, which also has a seat on the
17752
+ // tag. `patterns` is a list, and a list lives in the asset (ADR 0010) — the
17753
+ // rules were inlined there by FieldCompiler (libs/one ADR 0017).
17754
+ fieldPatterns = computed(() => readFieldPatterns(this.config()), ...(ngDevMode ? [{ debugName: "fieldPatterns" }] : /* istanbul ignore next */ []));
17586
17755
  isVisible = computed(() => {
17587
17756
  const acl = this.config()?.acl;
17588
17757
  if (!acl)
@@ -17628,7 +17797,9 @@ class SectionFormItemComponent extends ConfigComponent {
17628
17797
  // content-projected items cannot wire `(fieldKey)` like FormGroup. The
17629
17798
  // required flag rides along: `required` on the tag has to reach the
17630
17799
  // FieldTree, or the form is valid empty and every submit control unlocks.
17631
- this.sectionForm?.registerField(name, this.isRequired());
17800
+ // The accepted shapes ride along for the same reason — a rule the
17801
+ // FieldTree never hears about is a rule the form's validity ignores.
17802
+ this.sectionForm?.registerField(name, this.isRequired(), this.fieldPatterns());
17632
17803
  this.fieldKey.emit(name);
17633
17804
  }
17634
17805
  void this.field();
@@ -17715,7 +17886,7 @@ class SectionFormItemComponent extends ConfigComponent {
17715
17886
  break;
17716
17887
  }
17717
17888
  case InputType.TOGGLE: {
17718
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-B-sc4D0R.mjs');
17889
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-CovjN1j6.mjs');
17719
17890
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
17720
17891
  break;
17721
17892
  }
@@ -17727,12 +17898,12 @@ class SectionFormItemComponent extends ConfigComponent {
17727
17898
  break;
17728
17899
  }
17729
17900
  case InputType.PASSWORD: {
17730
- const { PasswordInputComponent } = await import('./magmonium-one-password-Db-It94E.mjs');
17901
+ const { PasswordInputComponent } = await import('./magmonium-one-password-Pk0hhC0A.mjs');
17731
17902
  this.createDynamicComponent(seq, PasswordInputComponent);
17732
17903
  break;
17733
17904
  }
17734
17905
  case InputType.OTP: {
17735
- const { OtpInputComponent } = await import('./magmonium-one-otp-BwEW31Sr.mjs');
17906
+ const { OtpInputComponent } = await import('./magmonium-one-otp-_zwgEGu3.mjs');
17736
17907
  this.createDynamicComponent(seq, OtpInputComponent);
17737
17908
  break;
17738
17909
  }
@@ -30796,5 +30967,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
30796
30967
  * Generated bundle index. Do not edit.
30797
30968
  */
30798
30969
 
30799
- export { DomService as $, ACCESS_DOMAINS as A, BaseInputComponent as B, COLOR_SCHEMES$1 as C, CarouselComponent as D, ChartComponent as E, CheckboxInputComponent as F, ClearableInputComponent as G, ColComponent as H, ColorPickerInputComponent as I, CommentItemComponent as J, CommentsApiService as K, LabelComponent as L, CommentsComponent as M, CommentsStore as N, ComponentInputComponent as O, ComponentStepperComponent as P, ConfigComponent as Q, ConfirmComponent as R, ContextMenuComponent as S, TranslatePipe as T, CustomIconClass as U, CustomIconEditComponent as V, DEFAULT_SIZE as W, DashboardCardComponent as X, DateInputComponent as Y, DatePickerComponent as Z, DeviceService as _, BaseTextInputComponent as a, NAV_MAIN_BUTTONS as a$, Domain as a0, DotGridComponent as a1, DragListDirective as a2, DragListItemDirective as a3, DraggableDirective as a4, DropdownInputComponent as a5, FLEX_VARIANTS as a6, FOLDER_PICK_LISTENER as a7, FORM_ASSET_FOLDER as a8, FileService as a9, LOGIN_PROCESS as aA, LOGIN_STORE as aB, LanguageComponent as aC, LoginDataService as aD, LoginOneComponent as aE, LoginStore as aF, LogoComponent as aG, MAG_SOCKET_EVENT as aH, MHeroColorDirective as aI, MHeroComponent as aJ, MODAL_REF as aK, MODAL_STORE_REF as aL, MRefDirective as aM, MStepComponent as aN, MURL_PARAM as aO, MURL_SEP as aP, ManifestEnrichmentService as aQ, MenuComponent as aR, ModalDirective as aS, ModalRef as aT, ModalStore as aU, MoneyPipe as aV, MultiRangeInputComponent as aW, MurlUrlSerializer as aX, NAV_DEFAULT_MURL as aY, NAV_DISPLAY_ORDER as aZ, NAV_ID_SEP as a_, FileUploadDirective as aa, FileUploadInputComponent as ab, FlexComponent as ac, FlexItemComponent as ad, FormGroupComponent as ae, FrameComponent as af, FreezeService as ag, GEN_NAV_DISPLAY_ORDER as ah, GRID_BREAKPOINTS as ai, GetNavService as aj, HeaderComponent$1 as ak, HighlightDirective as al, HttpService as am, ICON_SOURCE as an, IS_DESIGN_MODE as ao, IS_SIDE_PANEL as ap, IconComponent as aq, ImgComponent as ar, InputType as as, InstrumentScoreComponent as at, InterceptorObservables as au, JumbotronComponent as av, KeyValueComponent as aw, LAYOUT_ASSET_FOLDER as ax, LOGIN_COMPONENT as ay, LOGIN_FORM_GROUP as az, TextOutputComponent as b, SectionFilterComponent as b$, NAV_SEGMENT_RE as b0, NAV_STORE_REF as b1, NAV_WC_COMPONENTS as b2, NAV_WIDGET_MAP as b3, NavComponent as b4, NavDetailsComponent as b5, NavMenuComponent as b6, NavStore as b7, NavTrailComponent as b8, NothingComponent as b9, RangeInputComponent as bA, RatingInputComponent as bB, ReactiveElementComponent as bC, RemoteComponent as bD, RemoteLoaderService as bE, ResizeElementComponent as bF, RouteContainer as bG, RowComponent as bH, SEARCH_QUERY as bI, SEARCH_RESULTS_EVENT as bJ, SECTION_ACCORDION_GROUP as bK, SECTION_FORM_CONTEXT as bL, SHARED_ICONS as bM, SIZE_CONTEXT as bN, ScoreComponent as bO, ScrollComponent as bP, ScrollService as bQ, SearchPanelComponent as bR, SearchStore as bS, SearchUserPanelComponent as bT, SectionAccordionDirective as bU, SectionAccordionGroupDirective as bV, SectionBackComponent as bW, SectionBadgesComponent as bX, SectionButtonGroupComponent as bY, SectionCardComponent as bZ, SectionComponent as b_, NotificationElementComponent as ba, NotificationGroupComponent as bb, NotificationPopupComponent as bc, NotificationService as bd, NotificationStore as be, NotificationType as bf, NotificationWidgetComponent as bg, ONE_ASSET_BASE_URL as bh, OPTIONS_SOURCE as bi, OneApp as bj, OptionsSourceDirective as bk, OverlayBodyComponent as bl, OverlayRef as bm, OverlayService as bn, PLATFORM_BUTTON_NAV_IDS as bo, PLATFORM_EXTENSIBLE_NAV_IDS as bp, PLATFORM_NAV_MAP as bq, PLATFORM_ROOT_CHILDREN as br, PaginationComponent as bs, PanelComponent as bt, PlaygroundComponent as bu, PositionDirective as bv, PwaInstallComponent as bw, ROOT_NAV$1 as bx, RadioGroupComponent as by, RadioInputComponent as bz, ButtonComponent as c, WatermarkComponent as c$, SectionFooterComponent as c0, SectionFormComponent as c1, SectionFormItemComponent as c2, SectionHeaderComponent as c3, SectionSearchComponent as c4, SectionStepperComponent as c5, SectionTabsComponent as c6, SectionToggleComponent as c7, SectionToggleItemDirective as c8, SelectableCardInputComponent as c9, ThemeComponent as cA, ThemeService as cB, ThemeStore as cC, TimeAgoPipe as cD, TimelineComponent as cE, ToggleButtonComponent as cF, ToggleInputComponent as cG, ToggleRadioInputComponent as cH, ToolTipDirective as cI, TooltipComponent as cJ, TranslateService as cK, TreeGridComponent as cL, URL_SEP as cM, USER_STORE_REF as cN, USER_TAB_MAP as cO, UlComponent as cP, UniverseComponent as cQ, UserApiService as cR, UserAvatarComponent as cS, UserComponent as cT, UserNavComponent as cU, UserSettingsComponent as cV, UserStore as cW, WC_ROUTE_CHANGED_EVENT as cX, WC_SEARCH_GROUPS as cY, WIN_USER_TAB_HOOK as cZ, WIN_USER_TAB_KEY as c_, SelectorDirective as ca, SettingsSearchBarComponent as cb, SettingsSearchService as cc, Sex as cd, ShapeComponent as ce, SharedStoreRegistry as cf, SidePanelDirective as cg, Size as ch, SocketStore as ci, SortComponent 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, APP_CONTEXT_REF as d, mInterceptor as d$, WcRouterStore as d0, WrapperInputComponent as d1, anchorNavId as d2, applyColorsToElement as d3, authGuard as d4, bootstrapMagApp as d5, bootstrapPwaInstall as d6, buildWcBaseUrl as d7, calculateLuminance as d8, calculateRanks as d9, hasErrorComputed as dA, hexToRgb as dB, hslToRgb$1 as dC, initMagmoniumApp as dD, initialNotificationState as dE, initials as dF, injectAuthenticate as dG, injectInstallApp as dH, injectParentSize as dI, injectScrollSticky as dJ, isButtonName as dK, isCancelledComputed as dL, isExtensiblePlatformNavId as dM, isJson as dN, isLoadingComputed as dO, isLocalhost as dP, isPlatformNavId as dQ, isSize as dR, isTierPreview as dS, isUrlLocalhost as dT, isValidNavId as dU, isValidNavSegment as dV, isWebComponent as dW, linkToId as dX, linkToNav as dY, loadingActions as dZ, loginState as d_, cellText as da, checkFilterCondition as db, childNavId as dc, classListSignal as dd, createMap as de, createPlatformNavMap as df, deriveAvatarGradient as dg, deriveContrastColor as dh, deriveOppositeColor as di, derivePropertyName as dj, emailValidation as dk, evaluate as dl, evaluateBool as dm, flattenTreeGridRows as dn, formatBadgeCount as dp, fullName as dq, generateClipPath as dr, generateTransform as ds, getClassList as dt, getProperty as du, getScrollParent as dv, getTierFromPreviewPath as dw, getTreeGridRow as dx, getUniqueId as dy, getValue as dz, ASSET_BASE_URL as e, manualValidation as e0, matchFieldValidation as e1, maxLengthValidation as e2, maxValidation as e3, mergePlatformNav as e4, mergeUnique as e5, mergeUniqueBy as e6, mergeUniqueWith as e7, minAgeValidation as e8, minLengthValidation as e9, publicGuard as eA, renderAddress as eB, requiredValidation as eC, resolveConfigAsset as eD, resolvePallet as eE, resolveSize as eF, rgbToHex as eG, rgbToHsl as eH, rowHasChildren as eI, segmentsToNavId as eJ, setProperty as eK, setTreeGridChildren as eL, settingsWidgets as eM, shouldShowBadge as eN, splitNavId as eO, stringToColor as eP, toAttrBool as eQ, toAttrNumber as eR, toCssLength as eS, toHostNavId as eT, toLength$1 as eU, toLocalNavId as eV, toggleTreeGridRow as eW, unfetchedPlatformNav as eX, urlValidation as eY, minValidation as ea, miniMarkToHtml as eb, navIdChain as ec, navIdFor as ed, navIdSegment as ee, navIdToRoutePath as ef, navIdToSegments as eg, navToId as eh, parentNavId as ei, parseAddress as ej, parseColor as ek, patternValidation as el, platformNavWidgets as em, privateGuard as en, processImageToSvg as eo, provideAppContext as ep, provideMagAppConfig as eq, provideMagWcConfig as er, provideMagWcRoutes as es, provideModalComponents as et, provideMurlUrlSerializer as eu, provideNavWidgets as ev, providePlatformNavWidgets as ew, provideSearch as ex, provideSizeContext as ey, provideUserTabs as ez, AccordionBodyDirective as f, AccordionComponent as g, AccordionGroupComponent as h, ActionComponent as i, AnimatedGraphsComponent as j, AppCardComponent as k, AppRelationType as l, AppTileComponent as m, AssetStore as n, AssetUrlPipe as o, Assets as p, AutosizeDirective as q, BadgeComponent as r, BandingComponent as s, BaseArrayInputComponent as t, BaseRootWebComponent as u, BaseWebComponent as v, ButtonGroupComponent as w, COMPONENT_INPUT_REGISTRY as x, CardComponent as y, CardWrapperComponent as z };
30800
- //# sourceMappingURL=magmonium-one-magmonium-one-C9e5lzeP.mjs.map
30970
+ export { DomService as $, ACCESS_DOMAINS as A, BaseInputComponent as B, COLOR_SCHEMES$1 as C, CarouselComponent as D, ChartComponent as E, CheckboxInputComponent as F, ClearableInputComponent as G, ColComponent as H, ColorPickerInputComponent as I, CommentItemComponent as J, CommentsApiService as K, LabelComponent as L, CommentsComponent as M, CommentsStore as N, ComponentInputComponent as O, ComponentStepperComponent as P, ConfigComponent as Q, ConfirmComponent as R, ContextMenuComponent as S, TranslatePipe as T, CustomIconClass as U, CustomIconEditComponent as V, DEFAULT_SIZE as W, DashboardCardComponent as X, DateInputComponent as Y, DatePickerComponent as Z, DeviceService as _, BaseTextInputComponent as a, NAV_MAIN_BUTTONS as a$, Domain as a0, DotGridComponent as a1, DragListDirective as a2, DragListItemDirective as a3, DraggableDirective as a4, DropdownInputComponent as a5, FLEX_VARIANTS as a6, FOLDER_PICK_LISTENER as a7, FORM_ASSET_FOLDER as a8, FileService as a9, LOGIN_PROCESS as aA, LOGIN_STORE as aB, LanguageComponent as aC, LoginDataService as aD, LoginOneComponent as aE, LoginStore as aF, LogoComponent as aG, MAG_SOCKET_EVENT as aH, MHeroColorDirective as aI, MHeroComponent as aJ, MODAL_REF as aK, MODAL_STORE_REF as aL, MRefDirective as aM, MStepComponent as aN, MURL_PARAM as aO, MURL_SEP as aP, ManifestEnrichmentService as aQ, MenuComponent as aR, ModalDirective as aS, ModalRef as aT, ModalStore as aU, MoneyPipe as aV, MultiRangeInputComponent as aW, MurlUrlSerializer as aX, NAV_DEFAULT_MURL as aY, NAV_DISPLAY_ORDER as aZ, NAV_ID_SEP as a_, FileUploadDirective as aa, FileUploadInputComponent as ab, FlexComponent as ac, FlexItemComponent as ad, FormGroupComponent as ae, FrameComponent as af, FreezeService as ag, GEN_NAV_DISPLAY_ORDER as ah, GRID_BREAKPOINTS as ai, GetNavService as aj, HeaderComponent$1 as ak, HighlightDirective as al, HttpService as am, ICON_SOURCE as an, IS_DESIGN_MODE as ao, IS_SIDE_PANEL as ap, IconComponent as aq, ImgComponent as ar, InputType as as, InstrumentScoreComponent as at, InterceptorObservables as au, JumbotronComponent as av, KeyValueComponent as aw, LAYOUT_ASSET_FOLDER as ax, LOGIN_COMPONENT as ay, LOGIN_FORM_GROUP as az, TextOutputComponent as b, SectionFilterComponent as b$, NAV_SEGMENT_RE as b0, NAV_STORE_REF as b1, NAV_WC_COMPONENTS as b2, NAV_WIDGET_MAP as b3, NavComponent as b4, NavDetailsComponent as b5, NavMenuComponent as b6, NavStore as b7, NavTrailComponent as b8, NothingComponent as b9, RangeInputComponent as bA, RatingInputComponent as bB, ReactiveElementComponent as bC, RemoteComponent as bD, RemoteLoaderService as bE, ResizeElementComponent as bF, RouteContainer as bG, RowComponent as bH, SEARCH_QUERY as bI, SEARCH_RESULTS_EVENT as bJ, SECTION_ACCORDION_GROUP as bK, SECTION_FORM_CONTEXT as bL, SHARED_ICONS as bM, SIZE_CONTEXT as bN, ScoreComponent as bO, ScrollComponent as bP, ScrollService as bQ, SearchPanelComponent as bR, SearchStore as bS, SearchUserPanelComponent as bT, SectionAccordionDirective as bU, SectionAccordionGroupDirective as bV, SectionBackComponent as bW, SectionBadgesComponent as bX, SectionButtonGroupComponent as bY, SectionCardComponent as bZ, SectionComponent as b_, NotificationElementComponent as ba, NotificationGroupComponent as bb, NotificationPopupComponent as bc, NotificationService as bd, NotificationStore as be, NotificationType as bf, NotificationWidgetComponent as bg, ONE_ASSET_BASE_URL as bh, OPTIONS_SOURCE as bi, OneApp as bj, OptionsSourceDirective as bk, OverlayBodyComponent as bl, OverlayRef as bm, OverlayService as bn, PLATFORM_BUTTON_NAV_IDS as bo, PLATFORM_EXTENSIBLE_NAV_IDS as bp, PLATFORM_NAV_MAP as bq, PLATFORM_ROOT_CHILDREN as br, PaginationComponent as bs, PanelComponent as bt, PlaygroundComponent as bu, PositionDirective as bv, PwaInstallComponent as bw, ROOT_NAV$1 as bx, RadioGroupComponent as by, RadioInputComponent as bz, ButtonComponent as c, WatermarkComponent as c$, SectionFooterComponent as c0, SectionFormComponent as c1, SectionFormItemComponent as c2, SectionHeaderComponent as c3, SectionSearchComponent as c4, SectionStepperComponent as c5, SectionTabsComponent as c6, SectionToggleComponent as c7, SectionToggleItemDirective as c8, SelectableCardInputComponent as c9, ThemeComponent as cA, ThemeService as cB, ThemeStore as cC, TimeAgoPipe as cD, TimelineComponent as cE, ToggleButtonComponent as cF, ToggleInputComponent as cG, ToggleRadioInputComponent as cH, ToolTipDirective as cI, TooltipComponent as cJ, TranslateService as cK, TreeGridComponent as cL, URL_SEP as cM, USER_STORE_REF as cN, USER_TAB_MAP as cO, UlComponent as cP, UniverseComponent as cQ, UserApiService as cR, UserAvatarComponent as cS, UserComponent as cT, UserNavComponent as cU, UserSettingsComponent as cV, UserStore as cW, WC_ROUTE_CHANGED_EVENT as cX, WC_SEARCH_GROUPS as cY, WIN_USER_TAB_HOOK as cZ, WIN_USER_TAB_KEY as c_, SelectorDirective as ca, SettingsSearchBarComponent as cb, SettingsSearchService as cc, Sex as cd, ShapeComponent as ce, SharedStoreRegistry as cf, SidePanelDirective as cg, Size as ch, SocketStore as ci, SortComponent 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, APP_CONTEXT_REF as d, loginState as d$, WcRouterStore as d0, WrapperInputComponent as d1, anchorNavId as d2, applyColorsToElement as d3, authGuard as d4, bootstrapMagApp as d5, bootstrapPwaInstall as d6, buildWcBaseUrl as d7, calculateLuminance as d8, calculateRanks as d9, getValue as dA, hasErrorComputed as dB, hexToRgb as dC, hslToRgb$1 as dD, initMagmoniumApp as dE, initialNotificationState as dF, initials as dG, injectAuthenticate as dH, injectInstallApp as dI, injectParentSize as dJ, injectScrollSticky as dK, isButtonName as dL, isCancelledComputed as dM, isExtensiblePlatformNavId as dN, isJson as dO, isLoadingComputed as dP, isLocalhost as dQ, isPlatformNavId as dR, isSize as dS, isTierPreview as dT, isUrlLocalhost as dU, isValidNavId as dV, isValidNavSegment as dW, isWebComponent as dX, linkToId as dY, linkToNav as dZ, loadingActions as d_, cellText as da, checkFilterCondition as db, childNavId as dc, classListSignal as dd, coerceSize as de, createMap as df, createPlatformNavMap as dg, deriveAvatarGradient as dh, deriveContrastColor as di, deriveOppositeColor as dj, derivePropertyName as dk, emailValidation as dl, evaluate as dm, evaluateBool as dn, flattenTreeGridRows as dp, formatBadgeCount as dq, fullName as dr, generateClipPath as ds, generateTransform as dt, getClassList as du, getProperty as dv, getScrollParent as dw, getTierFromPreviewPath as dx, getTreeGridRow as dy, getUniqueId as dz, ASSET_BASE_URL as e, unfetchedPlatformNav as e$, mInterceptor as e0, manualValidation as e1, matchFieldValidation as e2, maxLengthValidation as e3, maxValidation as e4, mergePlatformNav as e5, mergeUnique as e6, mergeUniqueBy as e7, mergeUniqueWith as e8, minAgeValidation as e9, provideSizeContext as eA, provideUserTabs as eB, publicGuard as eC, readFieldPatterns as eD, renderAddress as eE, requiredValidation as eF, resolveConfigAsset as eG, resolvePallet as eH, resolveSize as eI, rgbToHex as eJ, rgbToHsl as eK, rowHasChildren as eL, samePatterns as eM, segmentsToNavId as eN, setProperty as eO, setTreeGridChildren as eP, settingsWidgets as eQ, shouldShowBadge as eR, splitNavId as eS, stringToColor as eT, toAttrBool as eU, toAttrNumber as eV, toCssLength as eW, toHostNavId as eX, toLength$1 as eY, toLocalNavId as eZ, toggleTreeGridRow as e_, minLengthValidation as ea, minValidation as eb, miniMarkToHtml as ec, navIdChain as ed, navIdFor as ee, navIdSegment as ef, navIdToRoutePath as eg, navIdToSegments as eh, navToId as ei, parentNavId as ej, parseAddress as ek, parseColor as el, patternValidation as em, patternsValidation as en, platformNavWidgets as eo, privateGuard as ep, processImageToSvg as eq, provideAppContext as er, provideMagAppConfig as es, provideMagWcConfig as et, provideMagWcRoutes as eu, provideModalComponents as ev, provideMurlUrlSerializer as ew, provideNavWidgets as ex, providePlatformNavWidgets as ey, provideSearch as ez, AccordionBodyDirective as f, urlValidation as f0, AccordionComponent as g, AccordionGroupComponent as h, ActionComponent as i, AnimatedGraphsComponent as j, AppCardComponent as k, AppRelationType as l, AppTileComponent as m, AssetStore as n, AssetUrlPipe as o, Assets as p, AutosizeDirective as q, BadgeComponent as r, BandingComponent as s, BaseArrayInputComponent as t, BaseRootWebComponent as u, BaseWebComponent as v, ButtonGroupComponent as w, COMPONENT_INPUT_REGISTRY as x, CardComponent as y, CardWrapperComponent as z };
30971
+ //# sourceMappingURL=magmonium-one-magmonium-one-DV45kimz.mjs.map