@magmonium/one 0.4.12 → 0.4.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/af.json +250 -1
- package/assets/i18n/am.json +250 -1
- package/assets/i18n/ar.json +250 -1
- package/assets/i18n/as.json +250 -1
- package/assets/i18n/az.json +250 -1
- package/assets/i18n/ba.json +250 -1
- package/assets/i18n/be.json +250 -1
- package/assets/i18n/bg.json +250 -1
- package/assets/i18n/bn.json +250 -1
- package/assets/i18n/br.json +250 -1
- package/assets/i18n/brx.json +250 -1
- package/assets/i18n/bs.json +250 -1
- package/assets/i18n/ca.json +250 -1
- package/assets/i18n/ceb.json +250 -1
- package/assets/i18n/cnr.json +250 -1
- package/assets/i18n/co.json +250 -1
- package/assets/i18n/cs.json +250 -1
- package/assets/i18n/cy.json +250 -1
- package/assets/i18n/da.json +250 -1
- package/assets/i18n/de.json +250 -1
- package/assets/i18n/doi.json +250 -1
- package/assets/i18n/el.json +250 -1
- package/assets/i18n/en.json +249 -0
- package/assets/i18n/eo.json +250 -1
- package/assets/i18n/es.json +250 -1
- package/assets/i18n/et.json +250 -1
- package/assets/i18n/eu.json +250 -1
- package/assets/i18n/fa.json +250 -1
- package/assets/i18n/fi.json +250 -1
- package/assets/i18n/fr.json +250 -1
- package/assets/i18n/fy.json +250 -1
- package/assets/i18n/ga.json +250 -1
- package/assets/i18n/gd.json +250 -1
- package/assets/i18n/gl.json +250 -1
- package/assets/i18n/gu.json +250 -1
- package/assets/i18n/ha.json +250 -1
- package/assets/i18n/haw.json +250 -1
- package/assets/i18n/he.json +250 -1
- package/assets/i18n/hi.json +250 -1
- package/assets/i18n/hmn.json +250 -1
- package/assets/i18n/hr.json +250 -1
- package/assets/i18n/hu.json +250 -1
- package/assets/i18n/hy.json +250 -1
- package/assets/i18n/id.json +250 -1
- package/assets/i18n/ie.json +250 -1
- package/assets/i18n/ig.json +250 -1
- package/assets/i18n/ilo.json +250 -1
- package/assets/i18n/is.json +250 -1
- package/assets/i18n/it.json +250 -1
- package/assets/i18n/iw.json +250 -1
- package/assets/i18n/ja.json +250 -1
- package/assets/i18n/jw.json +250 -1
- package/assets/i18n/ka.json +250 -1
- package/assets/i18n/kk.json +250 -1
- package/assets/i18n/km.json +250 -1
- package/assets/i18n/kn.json +250 -1
- package/assets/i18n/ko.json +250 -1
- package/assets/i18n/kok.json +250 -1
- package/assets/i18n/ks.json +250 -1
- package/assets/i18n/ku.json +250 -1
- package/assets/i18n/ky.json +250 -1
- package/assets/i18n/la.json +250 -1
- package/assets/i18n/lb.json +250 -1
- package/assets/i18n/lo.json +250 -1
- package/assets/i18n/lt.json +250 -1
- package/assets/i18n/lv.json +250 -1
- package/assets/i18n/ma.json +250 -1
- package/assets/i18n/mai.json +250 -1
- package/assets/i18n/me.json +250 -1
- package/assets/i18n/mg.json +250 -1
- package/assets/i18n/mi.json +250 -1
- package/assets/i18n/mk.json +250 -1
- package/assets/i18n/ml.json +250 -1
- package/assets/i18n/mn.json +250 -1
- package/assets/i18n/mni.json +250 -1
- package/assets/i18n/mr.json +250 -1
- package/assets/i18n/ms.json +250 -1
- package/assets/i18n/mt.json +250 -1
- package/assets/i18n/my.json +250 -1
- package/assets/i18n/ne.json +250 -1
- package/assets/i18n/nl.json +250 -1
- package/assets/i18n/no.json +250 -1
- package/assets/i18n/ny.json +250 -1
- package/assets/i18n/or.json +250 -1
- package/assets/i18n/pa.json +250 -1
- package/assets/i18n/pl.json +250 -1
- package/assets/i18n/ps.json +250 -1
- package/assets/i18n/pt.json +250 -1
- package/assets/i18n/rm.json +250 -1
- package/assets/i18n/ro.json +250 -1
- package/assets/i18n/ru.json +250 -1
- package/assets/i18n/sa.json +250 -1
- package/assets/i18n/sat.json +250 -1
- package/assets/i18n/sc.json +250 -1
- package/assets/i18n/sd.json +250 -1
- package/assets/i18n/si.json +250 -1
- package/assets/i18n/sk.json +250 -1
- package/assets/i18n/sl.json +250 -1
- package/assets/i18n/sm.json +250 -1
- package/assets/i18n/sn.json +250 -1
- package/assets/i18n/so.json +250 -1
- package/assets/i18n/sq.json +250 -1
- package/assets/i18n/sr.json +250 -1
- package/assets/i18n/st.json +250 -1
- package/assets/i18n/su.json +250 -1
- package/assets/i18n/sv.json +250 -1
- package/assets/i18n/sw.json +250 -1
- package/assets/i18n/ta.json +250 -1
- package/assets/i18n/te.json +250 -1
- package/assets/i18n/tg.json +250 -1
- package/assets/i18n/th.json +250 -1
- package/assets/i18n/tl.json +250 -1
- package/assets/i18n/tr.json +250 -1
- package/assets/i18n/uk.json +250 -1
- package/assets/i18n/ur.json +250 -1
- package/assets/i18n/uz.json +250 -1
- package/assets/i18n/vi.json +250 -1
- package/assets/i18n/xh.json +250 -1
- package/assets/i18n/yi.json +250 -1
- package/assets/i18n/yo.json +250 -1
- package/assets/i18n/zh.json +250 -1
- package/assets/i18n/zu.json +250 -1
- package/assets/index.json +1 -1
- package/assets/options/countries.json +1 -1
- package/fesm2022/{magmonium-one-image-editor-DCAD4tWK.mjs → magmonium-one-image-editor-DN8v0YOv.mjs} +2 -2
- package/fesm2022/{magmonium-one-image-editor-DCAD4tWK.mjs.map → magmonium-one-image-editor-DN8v0YOv.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-magmonium-one-DHIL0Jpw.mjs → magmonium-one-magmonium-one-DWeZSPCv.mjs} +498 -484
- package/fesm2022/magmonium-one-magmonium-one-DWeZSPCv.mjs.map +1 -0
- package/fesm2022/{magmonium-one-otp-Ce1vezye.mjs → magmonium-one-otp-CpjpaJdi.mjs} +2 -2
- package/fesm2022/{magmonium-one-otp-Ce1vezye.mjs.map → magmonium-one-otp-CpjpaJdi.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-password-CXe4bA8Z.mjs → magmonium-one-password-CX1OjX5P.mjs} +2 -2
- package/fesm2022/{magmonium-one-password-CXe4bA8Z.mjs.map → magmonium-one-password-CX1OjX5P.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-toggle-1k09GsDW.mjs → magmonium-one-toggle-zniJyl09.mjs} +2 -2
- package/fesm2022/{magmonium-one-toggle-1k09GsDW.mjs.map → magmonium-one-toggle-zniJyl09.mjs.map} +1 -1
- package/fesm2022/magmonium-one.mjs +1 -1
- package/package.json +1 -1
- package/types/magmonium-one.d.ts +179 -133
- package/fesm2022/magmonium-one-magmonium-one-DHIL0Jpw.mjs.map +0 -1
|
@@ -8992,7 +8992,7 @@ class SectionFormItemComponent extends ConfigComponent {
|
|
|
8992
8992
|
break;
|
|
8993
8993
|
}
|
|
8994
8994
|
case InputType.TOGGLE: {
|
|
8995
|
-
const { ToggleInputComponent } = await import('./magmonium-one-toggle-
|
|
8995
|
+
const { ToggleInputComponent } = await import('./magmonium-one-toggle-zniJyl09.mjs');
|
|
8996
8996
|
this.createDynamicComponent(seq, ToggleInputComponent, [], true);
|
|
8997
8997
|
break;
|
|
8998
8998
|
}
|
|
@@ -9004,12 +9004,12 @@ class SectionFormItemComponent extends ConfigComponent {
|
|
|
9004
9004
|
break;
|
|
9005
9005
|
}
|
|
9006
9006
|
case InputType.PASSWORD: {
|
|
9007
|
-
const { PasswordInputComponent } = await import('./magmonium-one-password-
|
|
9007
|
+
const { PasswordInputComponent } = await import('./magmonium-one-password-CX1OjX5P.mjs');
|
|
9008
9008
|
this.createDynamicComponent(seq, PasswordInputComponent);
|
|
9009
9009
|
break;
|
|
9010
9010
|
}
|
|
9011
9011
|
case InputType.OTP: {
|
|
9012
|
-
const { OtpInputComponent } = await import('./magmonium-one-otp-
|
|
9012
|
+
const { OtpInputComponent } = await import('./magmonium-one-otp-CpjpaJdi.mjs');
|
|
9013
9013
|
this.createDynamicComponent(seq, OtpInputComponent);
|
|
9014
9014
|
break;
|
|
9015
9015
|
}
|
|
@@ -9052,7 +9052,6 @@ class SectionFormItemComponent extends ConfigComponent {
|
|
|
9052
9052
|
this.createDynamicComponent(seq, TextareaInputComponent);
|
|
9053
9053
|
break;
|
|
9054
9054
|
}
|
|
9055
|
-
case InputType.MULTISELECT:
|
|
9056
9055
|
case InputType.DROPDOWN: {
|
|
9057
9056
|
const { DropdownInputComponent } = await Promise.resolve().then(function () { return dropdown; });
|
|
9058
9057
|
this.createDynamicComponent(seq, DropdownInputComponent, [
|
|
@@ -9061,6 +9060,14 @@ class SectionFormItemComponent extends ConfigComponent {
|
|
|
9061
9060
|
]);
|
|
9062
9061
|
break;
|
|
9063
9062
|
}
|
|
9063
|
+
case InputType.MULTISELECT: {
|
|
9064
|
+
const { MultiselectInputComponent } = await Promise.resolve().then(function () { return multiselect; });
|
|
9065
|
+
this.createDynamicComponent(seq, MultiselectInputComponent, [
|
|
9066
|
+
inputBinding('options', this.options),
|
|
9067
|
+
inputBinding('dir', this.dir),
|
|
9068
|
+
]);
|
|
9069
|
+
break;
|
|
9070
|
+
}
|
|
9064
9071
|
case InputType.COLOR: {
|
|
9065
9072
|
const { ColorPickerInputComponent } = await Promise.resolve().then(function () { return colorPicker; });
|
|
9066
9073
|
this.createDynamicComponent(seq, ColorPickerInputComponent);
|
|
@@ -9591,10 +9598,17 @@ class SectionFormComponent extends ConfigComponent {
|
|
|
9591
9598
|
injector = inject(Injector);
|
|
9592
9599
|
previousValue = null;
|
|
9593
9600
|
previousData = undefined;
|
|
9601
|
+
previousReleased = [];
|
|
9594
9602
|
// Names announced by projected items (content projection has no template
|
|
9595
9603
|
// `(fieldKey)` hook). Merged with `config.inputs` so the FieldTree always
|
|
9596
9604
|
// has a slot for every rendered field.
|
|
9597
9605
|
registeredFields = signal([], ...(ngDevMode ? [{ debugName: "registeredFields" }] : /* istanbul ignore next */ []));
|
|
9606
|
+
// Keys whose item was rendered and has since left — hidden behind an `@if`
|
|
9607
|
+
// or removed. Absent rather than empty: stripped from what `dataChange` and a
|
|
9608
|
+
// submit hand over. A key no item ever registered is never here, so one the
|
|
9609
|
+
// caller's `data` carries without a Field (an `id`) still survives the round
|
|
9610
|
+
// trip.
|
|
9611
|
+
releasedFields = signal([], ...(ngDevMode ? [{ debugName: "releasedFields" }] : /* istanbul ignore next */ []));
|
|
9598
9612
|
// Keys whose item carries `required` — the tag's word, which has to become
|
|
9599
9613
|
// the FieldTree's word too. Kept apart from `registeredFields` because a key
|
|
9600
9614
|
// is announced once and its required flag can flip whenever the Field's
|
|
@@ -9613,6 +9627,9 @@ class SectionFormComponent extends ConfigComponent {
|
|
|
9613
9627
|
if (!this.registeredFields().includes(name)) {
|
|
9614
9628
|
this.registeredFields.update((fields) => [...fields, name]);
|
|
9615
9629
|
}
|
|
9630
|
+
if (this.releasedFields().includes(name)) {
|
|
9631
|
+
this.releasedFields.update((fields) => fields.filter((field) => field !== name));
|
|
9632
|
+
}
|
|
9616
9633
|
this.setRequired(name, required);
|
|
9617
9634
|
this.setPatterns(name, patterns);
|
|
9618
9635
|
});
|
|
@@ -9623,8 +9640,17 @@ class SectionFormComponent extends ConfigComponent {
|
|
|
9623
9640
|
untracked(() => {
|
|
9624
9641
|
this.setRequired(name, false);
|
|
9625
9642
|
this.setPatterns(name, undefined);
|
|
9643
|
+
if (!this.releasedFields().includes(name)) {
|
|
9644
|
+
this.releasedFields.update((fields) => [...fields, name]);
|
|
9645
|
+
}
|
|
9626
9646
|
});
|
|
9627
9647
|
};
|
|
9648
|
+
withoutReleased = (record) => {
|
|
9649
|
+
const released = this.releasedFields();
|
|
9650
|
+
if (!released.length)
|
|
9651
|
+
return record;
|
|
9652
|
+
return Object.fromEntries(Object.entries(record).filter(([key]) => !released.includes(key)));
|
|
9653
|
+
};
|
|
9628
9654
|
setRequired = (name, required) => {
|
|
9629
9655
|
const has = this.requiredFields().includes(name);
|
|
9630
9656
|
if (has === required)
|
|
@@ -9716,8 +9742,9 @@ class SectionFormComponent extends ConfigComponent {
|
|
|
9716
9742
|
// values, so keys no item renders survive the round trip.
|
|
9717
9743
|
// The spread is a `T` by the same claim the caller made when it bound `data`:
|
|
9718
9744
|
// the FieldTree is keyed by the names the Fields registered, which are `T`'s
|
|
9719
|
-
// keys, and the keys no item renders come off `data` itself.
|
|
9720
|
-
|
|
9745
|
+
// keys, and the keys no item renders come off `data` itself. A released key
|
|
9746
|
+
// is the exception — its Field left, so its key does too.
|
|
9747
|
+
submitData = () => this.withoutReleased({
|
|
9721
9748
|
...this.data(),
|
|
9722
9749
|
...(this.formGroup()?.().value() ?? {}),
|
|
9723
9750
|
});
|
|
@@ -9819,11 +9846,18 @@ class SectionFormComponent extends ConfigComponent {
|
|
|
9819
9846
|
// one, and run in creation order) see the move as suppressed.
|
|
9820
9847
|
this.dataVersion.update((version) => version + 1);
|
|
9821
9848
|
}
|
|
9822
|
-
|
|
9823
|
-
|
|
9849
|
+
// A Field leaving is a change to the value as well: whatever hid it was
|
|
9850
|
+
// a caller reacting to an edit, and the key has to leave what the caller
|
|
9851
|
+
// holds. Read here rather than emitted from `releaseField`, so a form
|
|
9852
|
+
// torn down with its items emits nothing — its effect is gone first.
|
|
9853
|
+
const released = this.releasedFields();
|
|
9854
|
+
const left = released.some((name) => !this.previousReleased.includes(name));
|
|
9855
|
+
if (isUserEdit(this.previousValue, value, dataChanged) || left) {
|
|
9856
|
+
this.dataChange.emit(this.withoutReleased({ ...data, ...value }));
|
|
9824
9857
|
}
|
|
9825
9858
|
this.previousValue = value;
|
|
9826
9859
|
this.previousData = data;
|
|
9860
|
+
this.previousReleased = released;
|
|
9827
9861
|
});
|
|
9828
9862
|
// A form on a visual editor's Canvas is a picture of a form: it is rebuilt
|
|
9829
9863
|
// on every config edit, and taking the caret each time would leave the
|
|
@@ -10135,6 +10169,113 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
10135
10169
|
], styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}m-section-button-group{display:flex;flex-wrap:wrap;align-items:center;box-sizing:border-box;--m-button-size: var(--input-size, 1em);gap:calc(var(--input-size, 1em) * .375)}m-section-button-group.is-design-mode{min-width:4em;min-height:4em}m-section-button-group.vertical{flex-direction:column}m-section-button-group.vertical.align-left{align-items:flex-start}m-section-button-group.vertical.align-center{align-items:center}m-section-button-group.vertical.align-right{align-items:flex-end}m-section-button-group.horizontal{flex-direction:row}m-section-button-group.align-left{justify-content:flex-start}m-section-button-group.align-center{justify-content:center}m-section-button-group.align-right{justify-content:flex-end}m-section-button-group.is-full-width{width:100%}m-section-button-group.is-full-width.horizontal>*{flex:1 1 0;min-width:0}m-section-button-group.is-full-width.vertical{align-items:stretch}m-section-button-group.is-joined{gap:0;flex-wrap:nowrap}m-section-button-group.is-joined>*{position:relative}m-section-button-group.is-joined>* button{border-radius:0!important}m-section-button-group.is-joined>*:hover,m-section-button-group.is-joined>*:focus-within{z-index:1}m-section-button-group.is-joined.horizontal>*+*{margin-left:-2px}m-section-button-group.is-joined.horizontal>*:first-child button{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}m-section-button-group.is-joined.horizontal>*:last-child button{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}m-section-button-group.is-joined.vertical{align-items:stretch}m-section-button-group.is-joined.vertical>*+*{margin-top:-2px}m-section-button-group.is-joined.vertical>*:first-child button{border-top-left-radius:4px!important;border-top-right-radius:4px!important}m-section-button-group.is-joined.vertical>*:last-child button{border-bottom-left-radius:4px!important;border-bottom-right-radius:4px!important}\n"] }]
|
|
10136
10170
|
}], propDecorators: { vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }] } });
|
|
10137
10171
|
|
|
10172
|
+
const SECTION_CONTEXT = new InjectionToken('SECTION_CONTEXT');
|
|
10173
|
+
|
|
10174
|
+
const BACK_BTN = {
|
|
10175
|
+
icon: 'chevron-left',
|
|
10176
|
+
iconOnly: true,
|
|
10177
|
+
variant: 'ghost',
|
|
10178
|
+
};
|
|
10179
|
+
class SectionBackComponent {
|
|
10180
|
+
back = input(false, ...(ngDevMode ? [{ debugName: "back" }] : /* istanbul ignore next */ []));
|
|
10181
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
10182
|
+
html = input(...(ngDevMode ? [undefined, { debugName: "html" }] : /* istanbul ignore next */ []));
|
|
10183
|
+
padding = input(false, ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
|
|
10184
|
+
paddingX = input(false, ...(ngDevMode ? [{ debugName: "paddingX" }] : /* istanbul ignore next */ []));
|
|
10185
|
+
paddingY = input(false, ...(ngDevMode ? [{ debugName: "paddingY" }] : /* istanbul ignore next */ []));
|
|
10186
|
+
navigate = output();
|
|
10187
|
+
backBtn = BACK_BTN;
|
|
10188
|
+
sectionContext = inject(SECTION_CONTEXT, { optional: true });
|
|
10189
|
+
sidepanel = computed(() => this.sectionContext?.sidepanel() ?? false, ...(ngDevMode ? [{ debugName: "sidepanel" }] : /* istanbul ignore next */ []));
|
|
10190
|
+
noBorder = computed(() => this.sectionContext?.variant() === 'noBorder', ...(ngDevMode ? [{ debugName: "noBorder" }] : /* istanbul ignore next */ []));
|
|
10191
|
+
contentRef = viewChild('content', ...(ngDevMode ? [{ debugName: "contentRef" }] : /* istanbul ignore next */ []));
|
|
10192
|
+
hasContent = signal(false, ...(ngDevMode ? [{ debugName: "hasContent" }] : /* istanbul ignore next */ []));
|
|
10193
|
+
constructor() {
|
|
10194
|
+
effect(() => {
|
|
10195
|
+
const el = this.contentRef()?.nativeElement;
|
|
10196
|
+
if (el)
|
|
10197
|
+
this.hasContent.set(el.childNodes.length > 0);
|
|
10198
|
+
});
|
|
10199
|
+
}
|
|
10200
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionBackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10201
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SectionBackComponent, isStandalone: true, selector: "m-section-back", inputs: { back: { classPropertyName: "back", publicName: "back", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, html: { classPropertyName: "html", publicName: "html", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, paddingX: { classPropertyName: "paddingX", publicName: "paddingX", isSignal: true, isRequired: false, transformFunction: null }, paddingY: { classPropertyName: "paddingY", publicName: "paddingY", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { navigate: "navigate" }, host: { properties: { "class.has-sidepanel": "sidepanel()", "class.has-padding-x": "padding() || paddingX()", "class.has-padding-y": "padding() || paddingY()", "class.no-border": "noBorder()" }, classAttribute: "m-section-back" }, viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["content"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
10202
|
+
@if (back()) {
|
|
10203
|
+
<m-button [config]="backBtn" (clicked)="navigate.emit()" />
|
|
10204
|
+
} @else {
|
|
10205
|
+
<m-icon icon="logo" color="mm" />
|
|
10206
|
+
}
|
|
10207
|
+
<span #content><ng-content /></span>
|
|
10208
|
+
@if (!hasContent()) {
|
|
10209
|
+
@if (html()) {
|
|
10210
|
+
<m-header [level]="3" [innerHTML]="html()" />
|
|
10211
|
+
} @else {
|
|
10212
|
+
<m-header [level]="3" [label]="label() ?? 'magmonium'" />
|
|
10213
|
+
}
|
|
10214
|
+
}
|
|
10215
|
+
`, 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;gap:.25rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);width:100%;grid-column:1/-1;--section-back-size: .7rem;--section-back-seat: calc(var(--section-back-size) * 2.25)}:host(.no-border){border-bottom:none}m-button,m-icon{flex-shrink:0}m-button{--m-button-size: var(--section-back-size)}m-icon{display:inline-flex;justify-content:center;width:var(--section-back-seat)}m-logo{flex-shrink:0;width:1.5rem;height:1.5rem}m-header{flex:1;min-width:0}:host>span{display:contents}:host.has-padding-x{padding-inline:var(--section-px, 1rem)}:host.has-padding-y{padding-block:var(--section-header-py, .85rem)}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }, { kind: "component", type: HeaderComponent$1, selector: "m-header", inputs: ["level", "label", "icon", "actionButton", "actionLabel", "noTranslate", "params"], outputs: ["actionClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10216
|
+
}
|
|
10217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionBackComponent, decorators: [{
|
|
10218
|
+
type: Component,
|
|
10219
|
+
args: [{ selector: 'm-section-back', template: `
|
|
10220
|
+
@if (back()) {
|
|
10221
|
+
<m-button [config]="backBtn" (clicked)="navigate.emit()" />
|
|
10222
|
+
} @else {
|
|
10223
|
+
<m-icon icon="logo" color="mm" />
|
|
10224
|
+
}
|
|
10225
|
+
<span #content><ng-content /></span>
|
|
10226
|
+
@if (!hasContent()) {
|
|
10227
|
+
@if (html()) {
|
|
10228
|
+
<m-header [level]="3" [innerHTML]="html()" />
|
|
10229
|
+
} @else {
|
|
10230
|
+
<m-header [level]="3" [label]="label() ?? 'magmonium'" />
|
|
10231
|
+
}
|
|
10232
|
+
}
|
|
10233
|
+
`, imports: [IconComponent, ButtonComponent, HeaderComponent$1], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
10234
|
+
class: 'm-section-back',
|
|
10235
|
+
'[class.has-sidepanel]': 'sidepanel()',
|
|
10236
|
+
'[class.has-padding-x]': 'padding() || paddingX()',
|
|
10237
|
+
'[class.has-padding-y]': 'padding() || paddingY()',
|
|
10238
|
+
'[class.no-border]': 'noBorder()',
|
|
10239
|
+
}, 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;gap:.25rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);width:100%;grid-column:1/-1;--section-back-size: .7rem;--section-back-seat: calc(var(--section-back-size) * 2.25)}:host(.no-border){border-bottom:none}m-button,m-icon{flex-shrink:0}m-button{--m-button-size: var(--section-back-size)}m-icon{display:inline-flex;justify-content:center;width:var(--section-back-seat)}m-logo{flex-shrink:0;width:1.5rem;height:1.5rem}m-header{flex:1;min-width:0}:host>span{display:contents}:host.has-padding-x{padding-inline:var(--section-px, 1rem)}:host.has-padding-y{padding-block:var(--section-header-py, .85rem)}\n"] }]
|
|
10240
|
+
}], ctorParameters: () => [], propDecorators: { back: [{ type: i0.Input, args: [{ isSignal: true, alias: "back", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], html: [{ type: i0.Input, args: [{ isSignal: true, alias: "html", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], paddingX: [{ type: i0.Input, args: [{ isSignal: true, alias: "paddingX", required: false }] }], paddingY: [{ type: i0.Input, args: [{ isSignal: true, alias: "paddingY", required: false }] }], navigate: [{ type: i0.Output, args: ["navigate"] }], contentRef: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }] } });
|
|
10241
|
+
|
|
10242
|
+
/**
|
|
10243
|
+
* Merges multiple arrays and removes duplicates
|
|
10244
|
+
* @param arrays - Arrays to merge
|
|
10245
|
+
* @returns Merged array with unique values
|
|
10246
|
+
*/
|
|
10247
|
+
function mergeUnique(...arrays) {
|
|
10248
|
+
return [...new Set(arrays.flat())];
|
|
10249
|
+
}
|
|
10250
|
+
/**
|
|
10251
|
+
* Merges arrays of objects and removes duplicates by key
|
|
10252
|
+
* @param arrays - Arrays to merge
|
|
10253
|
+
* @param key - Property to use for uniqueness check
|
|
10254
|
+
* @returns Merged array with unique objects
|
|
10255
|
+
*/
|
|
10256
|
+
function mergeUniqueBy(arrays, key) {
|
|
10257
|
+
const map = new Map();
|
|
10258
|
+
arrays.flat().forEach((item) => {
|
|
10259
|
+
if (!map.has(item[key])) {
|
|
10260
|
+
map.set(item[key], item);
|
|
10261
|
+
}
|
|
10262
|
+
});
|
|
10263
|
+
return Array.from(map.values());
|
|
10264
|
+
}
|
|
10265
|
+
/**
|
|
10266
|
+
* Merges arrays with custom comparator
|
|
10267
|
+
*/
|
|
10268
|
+
function mergeUniqueWith(arrays, compareFn) {
|
|
10269
|
+
const map = new Map();
|
|
10270
|
+
arrays.flat().forEach((item) => {
|
|
10271
|
+
const key = compareFn(item);
|
|
10272
|
+
if (!map.has(key)) {
|
|
10273
|
+
map.set(key, item);
|
|
10274
|
+
}
|
|
10275
|
+
});
|
|
10276
|
+
return Array.from(map.values());
|
|
10277
|
+
}
|
|
10278
|
+
|
|
10138
10279
|
var Direction;
|
|
10139
10280
|
(function (Direction) {
|
|
10140
10281
|
Direction["TOP"] = "top";
|
|
@@ -10931,254 +11072,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
10931
11072
|
}]
|
|
10932
11073
|
}], propDecorators: { toggle: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggle", required: false }] }, { type: i0.Output, args: ["toggleChange"] }], remote: [{ type: i0.Input, args: [{ isSignal: true, alias: "remote", required: false }] }], exclude: [{ type: i0.Input, args: [{ isSignal: true, alias: "exclude", required: false }] }], visibilityRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibilityRule", required: false }] }], disableRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableRule", required: false }] }], extraData: [{ type: i0.Input, args: [{ isSignal: true, alias: "extraData", required: false }] }], inverted: [{ type: i0.Input, args: [{ isSignal: true, alias: "inverted", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], action: [{ type: i0.Output, args: ["action"] }], selectorDir: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SelectorDirective), { isSignal: true }] }] } });
|
|
10933
11074
|
|
|
10934
|
-
const SECTION_CONTEXT = new InjectionToken('SECTION_CONTEXT');
|
|
10935
|
-
|
|
10936
|
-
// The line box each heading level draws, straight from `header.sass`: its font
|
|
10937
|
-
// size and its line-height. The icon beside a heading is boxed to the same
|
|
10938
|
-
// span so the two centre on one another — `--m-header-font-size` is read
|
|
10939
|
-
// first, so a caller resizing the heading moves the icon's box with it.
|
|
10940
|
-
const HEADER_LINE_BOX = {
|
|
10941
|
-
1: 'calc(var(--m-header-font-size, 2.25rem) * 1.15)',
|
|
10942
|
-
2: 'calc(var(--m-header-font-size, 1.75rem) * 1.2)',
|
|
10943
|
-
3: 'calc(var(--m-header-font-size, 1.375rem) * 1.1)',
|
|
10944
|
-
4: 'calc(var(--m-header-font-size, 1.125rem) * 1.1)',
|
|
10945
|
-
5: 'calc(var(--m-header-font-size, 1rem) * 1.1)',
|
|
10946
|
-
6: 'calc(var(--m-header-font-size, 0.875rem) * 1.1)',
|
|
10947
|
-
};
|
|
10948
|
-
class SectionHeaderComponent {
|
|
10949
|
-
sticky = input(false, ...(ngDevMode ? [{ debugName: "sticky" }] : /* istanbul ignore next */ []));
|
|
10950
|
-
level = input(3, ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
10951
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
10952
|
-
subLabel = input(...(ngDevMode ? [undefined, { debugName: "subLabel" }] : /* istanbul ignore next */ []));
|
|
10953
|
-
// `label` and `subLabel` are authored text rather than translation keys —
|
|
10954
|
-
// forwarded to `m-header` for the label, and skipping `translate` for the
|
|
10955
|
-
// sub. What a bound label needs above all: a value read from data is the
|
|
10956
|
-
// text itself, and resolving it as a key renders nothing.
|
|
10957
|
-
noTranslate = input(false, ...(ngDevMode ? [{ debugName: "noTranslate" }] : /* istanbul ignore next */ []));
|
|
10958
|
-
// The [MessageVariable] values both lines are resolved with — one record for
|
|
10959
|
-
// the pair, because a page holds one record for every dynamic slot it draws
|
|
10960
|
-
// (m-one-ui ADR 0066) and two headings naming the same slot mean the same
|
|
10961
|
-
// datum. Ignored under `noTranslate`, where neither line is looked up.
|
|
10962
|
-
params = input(undefined, ...(ngDevMode ? [{ debugName: "params" }] : /* istanbul ignore next */ []));
|
|
10963
|
-
// Draw the sub line above the label instead of below it. The two nodes keep
|
|
10964
|
-
// their order — title first, sub second — whichever way the pair reads, so
|
|
10965
|
-
// reversing is a setting rather than a second way to arrange the children.
|
|
10966
|
-
reverse = input(false, ...(ngDevMode ? [{ debugName: "reverse" }] : /* istanbul ignore next */ []));
|
|
10967
|
-
icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
10968
|
-
menu = input(...(ngDevMode ? [undefined, { debugName: "menu" }] : /* istanbul ignore next */ []));
|
|
10969
|
-
menuName = input(...(ngDevMode ? [undefined, { debugName: "menuName" }] : /* istanbul ignore next */ []));
|
|
10970
|
-
visibilityRule = input(...(ngDevMode ? [undefined, { debugName: "visibilityRule" }] : /* istanbul ignore next */ []));
|
|
10971
|
-
disableRule = input(...(ngDevMode ? [undefined, { debugName: "disableRule" }] : /* istanbul ignore next */ []));
|
|
10972
|
-
extraData = input(...(ngDevMode ? [undefined, { debugName: "extraData" }] : /* istanbul ignore next */ []));
|
|
10973
|
-
align = input(undefined, ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
10974
|
-
// The header's own `align` alone. A Section's `align` places boxes — its
|
|
10975
|
-
// body box, and the header's content box below — and a header whose text
|
|
10976
|
-
// followed it could not be left-aligned inside a centred Section at all.
|
|
10977
|
-
alignment = computed(() => this.align() ?? 'left', ...(ngDevMode ? [{ debugName: "alignment" }] : /* istanbul ignore next */ []));
|
|
10978
|
-
showBack = input(false, ...(ngDevMode ? [{ debugName: "showBack" }] : /* istanbul ignore next */ []));
|
|
10979
|
-
actionButton = input(...(ngDevMode ? [undefined, { debugName: "actionButton" }] : /* istanbul ignore next */ []));
|
|
10980
|
-
// The action Button's accessible name — it renders icon-only, so without a
|
|
10981
|
-
// label a screen reader has nothing to announce.
|
|
10982
|
-
actionLabel = input(...(ngDevMode ? [undefined, { debugName: "actionLabel" }] : /* istanbul ignore next */ []));
|
|
10983
|
-
spacing = input(false, ...(ngDevMode ? [{ debugName: "spacing" }] : /* istanbul ignore next */ []));
|
|
10984
|
-
maxWidth = input(...(ngDevMode ? [undefined, { debugName: "maxWidth" }] : /* istanbul ignore next */ []));
|
|
10985
|
-
actionClick = output();
|
|
10986
|
-
action = output();
|
|
10987
|
-
back = output();
|
|
10988
|
-
translateService = inject(TranslateService);
|
|
10989
|
-
// A computed rather than the impure TranslatePipe, the same trade
|
|
10990
|
-
// HeaderComponent makes: one lookup per sub change instead of one per
|
|
10991
|
-
// change-detection tick, and it still repaints when the language moves.
|
|
10992
|
-
subText = computed(() => this.noTranslate()
|
|
10993
|
-
? this.subLabel()
|
|
10994
|
-
: this.translateService.translate(this.subLabel(), this.params()), ...(ngDevMode ? [{ debugName: "subText" }] : /* istanbul ignore next */ []));
|
|
10995
|
-
scrollSticky = injectScrollSticky(120, 'none');
|
|
10996
|
-
sectionContext = inject(SECTION_CONTEXT, { optional: true });
|
|
10997
|
-
sidepanel = computed(() => this.sectionContext?.sidepanel() ?? false, ...(ngDevMode ? [{ debugName: "sidepanel" }] : /* istanbul ignore next */ []));
|
|
10998
|
-
noBorder = computed(() => this.sectionContext?.variant() === 'noBorder', ...(ngDevMode ? [{ debugName: "noBorder" }] : /* istanbul ignore next */ []));
|
|
10999
|
-
// Falls back to the Section's `maxWidth`: the header sits above the body and
|
|
11000
|
-
// the two are one column, so constraining the body alone left the heading
|
|
11001
|
-
// hanging off the edge of the content it titles. The border stays on the
|
|
11002
|
-
// host and keeps spanning the Section — only this inner box narrows.
|
|
11003
|
-
resolvedMaxWidth = computed(() => this.maxWidth() ?? this.sectionContext?.maxWidth?.(), ...(ngDevMode ? [{ debugName: "resolvedMaxWidth" }] : /* istanbul ignore next */ []));
|
|
11004
|
-
// Where that box sits once it is narrower than the row. The Section's
|
|
11005
|
-
// `align` — the same value that places `.m-section__body` — so header and
|
|
11006
|
-
// body stay in one column.
|
|
11007
|
-
boxAlign = computed(() => this.sectionContext?.align?.() ?? 'left', ...(ngDevMode ? [{ debugName: "boxAlign" }] : /* istanbul ignore next */ []));
|
|
11008
|
-
// The icon sits in the row, not in the heading, so it has no line box of its
|
|
11009
|
-
// own to centre against — it gets the heading's.
|
|
11010
|
-
iconBox = computed(() => HEADER_LINE_BOX[this.level()], ...(ngDevMode ? [{ debugName: "iconBox" }] : /* istanbul ignore next */ []));
|
|
11011
|
-
isSticky = computed(() => this.sticky() && this.scrollSticky(), ...(ngDevMode ? [{ debugName: "isSticky" }] : /* istanbul ignore next */ []));
|
|
11012
|
-
hasMenu = computed(() => !!this.menu() || !!this.menuName(), ...(ngDevMode ? [{ debugName: "hasMenu" }] : /* istanbul ignore next */ []));
|
|
11013
|
-
actionConfig = computed(() => {
|
|
11014
|
-
const icon = this.actionButton();
|
|
11015
|
-
if (!icon)
|
|
11016
|
-
return undefined;
|
|
11017
|
-
return {
|
|
11018
|
-
icon,
|
|
11019
|
-
label: this.actionLabel(),
|
|
11020
|
-
iconOnly: true,
|
|
11021
|
-
variant: 'ghost',
|
|
11022
|
-
};
|
|
11023
|
-
}, ...(ngDevMode ? [{ debugName: "actionConfig" }] : /* istanbul ignore next */ []));
|
|
11024
|
-
// Read through SECTION_CONTEXT rather than by injecting the directive:
|
|
11025
|
-
// every `<m-section>` provides the context, so the nearest one wins and a
|
|
11026
|
-
// header only ever draws the toggle of the Section it belongs to. Injecting
|
|
11027
|
-
// SectionAccordionDirective instead walks past that Section to any ancestor
|
|
11028
|
-
// carrying the behaviour, which put an arrow on every nested header. Null
|
|
11029
|
-
// where the Section has no active accordion (CONTEXT.md SectionAccordion).
|
|
11030
|
-
accordion = computed(() => this.sectionContext?.accordion?.() ?? null, ...(ngDevMode ? [{ debugName: "accordion" }] : /* istanbul ignore next */ []));
|
|
11031
|
-
// toggleIcon set: the glyph itself swaps between closed/open, already
|
|
11032
|
-
// "pointing" the right way, so it never rotates. toggleIcon absent: the
|
|
11033
|
-
// one glyph (icon, or the default chevron) rotates 180° instead.
|
|
11034
|
-
toggleIconName = computed(() => {
|
|
11035
|
-
const accordion = this.accordion();
|
|
11036
|
-
if (!accordion)
|
|
11037
|
-
return undefined;
|
|
11038
|
-
const toggleIcon = accordion.toggleIcon();
|
|
11039
|
-
if (toggleIcon) {
|
|
11040
|
-
return accordion.isOpen() ? toggleIcon : accordion.icon() ?? 'accordion_chevron';
|
|
11041
|
-
}
|
|
11042
|
-
return accordion.icon() ?? 'accordion_chevron';
|
|
11043
|
-
}, ...(ngDevMode ? [{ debugName: "toggleIconName" }] : /* istanbul ignore next */ []));
|
|
11044
|
-
toggleRotates = computed(() => !this.accordion()?.toggleIcon(), ...(ngDevMode ? [{ debugName: "toggleRotates" }] : /* istanbul ignore next */ []));
|
|
11045
|
-
onToggleClick() {
|
|
11046
|
-
this.accordion()?.toggle();
|
|
11047
|
-
}
|
|
11048
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11049
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SectionHeaderComponent, isStandalone: true, selector: "m-section-header", inputs: { sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, subLabel: { classPropertyName: "subLabel", publicName: "subLabel", isSignal: true, isRequired: false, transformFunction: null }, noTranslate: { classPropertyName: "noTranslate", publicName: "noTranslate", isSignal: true, isRequired: false, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null }, reverse: { classPropertyName: "reverse", publicName: "reverse", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, menu: { classPropertyName: "menu", publicName: "menu", isSignal: true, isRequired: false, transformFunction: null }, menuName: { classPropertyName: "menuName", publicName: "menuName", isSignal: true, isRequired: false, transformFunction: null }, visibilityRule: { classPropertyName: "visibilityRule", publicName: "visibilityRule", isSignal: true, isRequired: false, transformFunction: null }, disableRule: { classPropertyName: "disableRule", publicName: "disableRule", isSignal: true, isRequired: false, transformFunction: null }, extraData: { classPropertyName: "extraData", publicName: "extraData", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, showBack: { classPropertyName: "showBack", publicName: "showBack", isSignal: true, isRequired: false, transformFunction: null }, actionButton: { classPropertyName: "actionButton", publicName: "actionButton", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionClick: "actionClick", action: "action", back: "back" }, host: { properties: { "class.is-sticky-enabled": "sticky()", "class.is-sticky": "isSticky()", "class.has-menu": "hasMenu()", "class.align-left": "alignment() === \"left\"", "class.align-center": "alignment() === \"center\"", "class.align-right": "alignment() === \"right\"", "class.has-sidepanel": "sidepanel()", "class.no-border": "noBorder()", "class.spacing": "spacing()", "class.box-center": "boxAlign() === \"center\"", "class.box-right": "boxAlign() === \"right\"", "style.--m-section-header-max-width": "resolvedMaxWidth()", "style.--m-section-header-icon-box": "iconBox()" }, classAttribute: "m-section-header" }, ngImport: i0, template: "<!-- One declaration of the row, rendered by whichever branch `spacing` picks.\n Hoisted into a template rather than written twice: an `<ng-content>` may\n appear once per selector in a component, so the duplicated copy caught\n nothing and a header projecting a title rendered it in the `spacing`\n branch alone. -->\n<ng-template #body>\n @if (accordion(); as accordionRef) {\n <div\n class=\"section-header__toggle\"\n [class.section-header__toggle--rotate]=\"toggleRotates()\"\n [class.section-header__toggle--open]=\"accordionRef.isOpen()\"\n [id]=\"accordionRef.headerId\"\n [attr.aria-expanded]=\"accordionRef.isOpen()\"\n [attr.aria-controls]=\"accordionRef.bodyId\"\n >\n <m-button\n [config]=\"{ icon: toggleIconName(), iconOnly: true, variant: 'ghost' }\"\n (clicked)=\"onToggleClick()\" />\n </div>\n }\n @if (showBack()) {\n <div class=\"section-header__back\">\n <m-button\n [config]=\"{ icon: 'chevron-left', iconOnly: true }\"\n (clicked)=\"back.emit()\" />\n </div>\n } @else if (!label() && icon(); as iconName) {\n <!-- Only where no label is written. A header with one hands the icon to\n `m-header`, which draws it inside the heading's line box and so on the\n heading's own centre line. Beside a projected title there is no such\n box to borrow, so the glyph is boxed to the level's line box here and\n centred in it \u2014 otherwise it centres against the whole title column,\n which on the Canvas is the label slot's drop rect stacked above the\n heading. -->\n <div class=\"section-header__icon\">\n <m-icon [name]=\"iconName\" />\n </div>\n }\n <div\n class=\"section-header__title\"\n [class.section-header__title--reverse]=\"reverse()\"\n >\n <!-- The title slot is the catch-all rather than a `[label]` one: every\n header already projecting a heading writes it unselected, and a\n selector here would drop that content on the floor. What the design\n page emits \u2014 `<span label>` \u2014 is caught by it too, nothing else\n claiming the node. -->\n <ng-content />\n <!-- The written label, drawn beside the slot rather than as its\n `ng-content` fallback. A fallback renders only while *nothing* is\n projected, and the design Canvas always projects the slot span \u2014\n empty until a Control is dropped in it \u2014 so a fallback there would\n blank the label a header is still configured with. `label` answers\n instead, which no header projecting a title sets. -->\n @if (label()) {\n <m-header\n [level]=\"level()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [params]=\"params()\"\n [noTranslate]=\"noTranslate()\" />\n }\n @if (subText(); as sub) {\n <span class=\"section-header__sub\">{{ sub }}</span>\n }\n </div>\n <!-- A FilterGroup projected into the header row, selected by tag rather than\n by an attribute \u2014 the same shape a Section catches its `m-action` with.\n A header has room for one icon and not for a row, so a group landing\n here is squeezed by placement (ADR 0025); nothing here enforces that,\n the caller binding `[squeeze]` on the tag it projects. -->\n <div class=\"section-header__filters\">\n <ng-content select=\"m-section-filter-group\" />\n </div>\n @if (actionConfig(); as action) {\n <div class=\"section-header__action\">\n <m-button [config]=\"action\" (clicked)=\"actionClick.emit()\" />\n </div>\n }\n @if (hasMenu()) {\n <div class=\"section-header__menu\">\n <m-context-menu\n [config]=\"menu()\"\n [name]=\"menuName()\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"action.emit($event)\"\n />\n </div>\n }\n</ng-template>\n\n<!-- Always the same two boxes, whether or not a `maxWidth` is in force. The\n border and the sticky backdrop live on the host and keep spanning the\n Section's full width; only this container narrows and is placed by the\n Section's `align`, so the heading lines up with the body under it. -->\n<div class=\"section-header__container\">\n <div class=\"section-header__inner\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n</div>\n", styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:flex;align-items:center;gap:.5rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);padding:var(--section-header-py, .85rem) var(--section-px, 1rem);width:100%;grid-column:1/-1}:host(.no-border){border-bottom:none}:host(.spacing){padding:0;width:100%}.section-header__container{width:100%;min-width:0;max-width:var(--m-section-header-max-width, none);margin-inline:0 auto}:host(.box-center) .section-header__container{margin-inline:auto}:host(.box-right) .section-header__container{margin-inline:auto 0}.section-header__inner{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.section-header__inner .section-header__title{flex:1;min-width:0;gap:.5rem}:host(.spacing) .section-header__inner{padding:1rem 1.5rem}:host(.has-sidepanel){padding-right:50px}:host(.has-sidepanel.has-menu){padding-right:50px}:host(.spacing.has-sidepanel) .section-header__inner{padding-right:calc(1.5rem + 50px)}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10}:host(.is-sticky-enabled){background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}.section-header__toggle{display:flex;flex-shrink:0}.section-header__toggle.section-header__toggle--rotate m-button{display:flex;transition:transform .3s cubic-bezier(.4,0,.2,1)}.section-header__toggle.section-header__toggle--rotate.section-header__toggle--open m-button{transform:rotate(180deg)}.section-header__title{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}m-header{min-width:0}.section-header__title--reverse{flex-direction:column-reverse}.section-header__sub{font-size:.8rem;color:var(--m-text-secondary);line-height:1.2}:host(.align-center){--m-header-justify: center}:host(.align-right){--m-header-justify: flex-end}:host(.has-menu){padding-right:0}:host(.spacing.has-menu) .section-header__inner{padding-right:0}.section-header__filters{display:contents}.section-header__filters m-section-filter-group{width:auto;flex-shrink:0;border-bottom:none}.section-header__back{display:flex;align-items:center;flex-shrink:0}.section-header__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;align-self:flex-start;height:var(--m-section-header-icon-box, 1.5125rem)}.section-header__menu,.section-header__action{margin-left:auto;flex-shrink:0;display:flex;align-items:center}.section-header__action+.section-header__menu{margin-left:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ContextMenuComponent, selector: "m-context-menu, m-one-context-menu", inputs: ["toggle", "remote", "exclude", "visibilityRule", "disableRule", "extraData", "inverted", "options"], outputs: ["toggleChange", "action"] }, { kind: "component", type: HeaderComponent$1, selector: "m-header", inputs: ["level", "label", "icon", "actionButton", "actionLabel", "noTranslate", "params"], outputs: ["actionClick"] }, { kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
11050
|
-
}
|
|
11051
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionHeaderComponent, decorators: [{
|
|
11052
|
-
type: Component,
|
|
11053
|
-
args: [{ selector: 'm-section-header', imports: [
|
|
11054
|
-
NgTemplateOutlet,
|
|
11055
|
-
ContextMenuComponent,
|
|
11056
|
-
HeaderComponent$1,
|
|
11057
|
-
IconComponent,
|
|
11058
|
-
ButtonComponent,
|
|
11059
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
11060
|
-
class: 'm-section-header',
|
|
11061
|
-
'[class.is-sticky-enabled]': 'sticky()',
|
|
11062
|
-
'[class.is-sticky]': 'isSticky()',
|
|
11063
|
-
'[class.has-menu]': 'hasMenu()',
|
|
11064
|
-
'[class.align-left]': 'alignment() === "left"',
|
|
11065
|
-
'[class.align-center]': 'alignment() === "center"',
|
|
11066
|
-
'[class.align-right]': 'alignment() === "right"',
|
|
11067
|
-
'[class.has-sidepanel]': 'sidepanel()',
|
|
11068
|
-
'[class.no-border]': 'noBorder()',
|
|
11069
|
-
'[class.spacing]': 'spacing()',
|
|
11070
|
-
'[class.box-center]': 'boxAlign() === "center"',
|
|
11071
|
-
'[class.box-right]': 'boxAlign() === "right"',
|
|
11072
|
-
'[style.--m-section-header-max-width]': 'resolvedMaxWidth()',
|
|
11073
|
-
'[style.--m-section-header-icon-box]': 'iconBox()',
|
|
11074
|
-
}, template: "<!-- One declaration of the row, rendered by whichever branch `spacing` picks.\n Hoisted into a template rather than written twice: an `<ng-content>` may\n appear once per selector in a component, so the duplicated copy caught\n nothing and a header projecting a title rendered it in the `spacing`\n branch alone. -->\n<ng-template #body>\n @if (accordion(); as accordionRef) {\n <div\n class=\"section-header__toggle\"\n [class.section-header__toggle--rotate]=\"toggleRotates()\"\n [class.section-header__toggle--open]=\"accordionRef.isOpen()\"\n [id]=\"accordionRef.headerId\"\n [attr.aria-expanded]=\"accordionRef.isOpen()\"\n [attr.aria-controls]=\"accordionRef.bodyId\"\n >\n <m-button\n [config]=\"{ icon: toggleIconName(), iconOnly: true, variant: 'ghost' }\"\n (clicked)=\"onToggleClick()\" />\n </div>\n }\n @if (showBack()) {\n <div class=\"section-header__back\">\n <m-button\n [config]=\"{ icon: 'chevron-left', iconOnly: true }\"\n (clicked)=\"back.emit()\" />\n </div>\n } @else if (!label() && icon(); as iconName) {\n <!-- Only where no label is written. A header with one hands the icon to\n `m-header`, which draws it inside the heading's line box and so on the\n heading's own centre line. Beside a projected title there is no such\n box to borrow, so the glyph is boxed to the level's line box here and\n centred in it \u2014 otherwise it centres against the whole title column,\n which on the Canvas is the label slot's drop rect stacked above the\n heading. -->\n <div class=\"section-header__icon\">\n <m-icon [name]=\"iconName\" />\n </div>\n }\n <div\n class=\"section-header__title\"\n [class.section-header__title--reverse]=\"reverse()\"\n >\n <!-- The title slot is the catch-all rather than a `[label]` one: every\n header already projecting a heading writes it unselected, and a\n selector here would drop that content on the floor. What the design\n page emits \u2014 `<span label>` \u2014 is caught by it too, nothing else\n claiming the node. -->\n <ng-content />\n <!-- The written label, drawn beside the slot rather than as its\n `ng-content` fallback. A fallback renders only while *nothing* is\n projected, and the design Canvas always projects the slot span \u2014\n empty until a Control is dropped in it \u2014 so a fallback there would\n blank the label a header is still configured with. `label` answers\n instead, which no header projecting a title sets. -->\n @if (label()) {\n <m-header\n [level]=\"level()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [params]=\"params()\"\n [noTranslate]=\"noTranslate()\" />\n }\n @if (subText(); as sub) {\n <span class=\"section-header__sub\">{{ sub }}</span>\n }\n </div>\n <!-- A FilterGroup projected into the header row, selected by tag rather than\n by an attribute \u2014 the same shape a Section catches its `m-action` with.\n A header has room for one icon and not for a row, so a group landing\n here is squeezed by placement (ADR 0025); nothing here enforces that,\n the caller binding `[squeeze]` on the tag it projects. -->\n <div class=\"section-header__filters\">\n <ng-content select=\"m-section-filter-group\" />\n </div>\n @if (actionConfig(); as action) {\n <div class=\"section-header__action\">\n <m-button [config]=\"action\" (clicked)=\"actionClick.emit()\" />\n </div>\n }\n @if (hasMenu()) {\n <div class=\"section-header__menu\">\n <m-context-menu\n [config]=\"menu()\"\n [name]=\"menuName()\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"action.emit($event)\"\n />\n </div>\n }\n</ng-template>\n\n<!-- Always the same two boxes, whether or not a `maxWidth` is in force. The\n border and the sticky backdrop live on the host and keep spanning the\n Section's full width; only this container narrows and is placed by the\n Section's `align`, so the heading lines up with the body under it. -->\n<div class=\"section-header__container\">\n <div class=\"section-header__inner\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n</div>\n", styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:flex;align-items:center;gap:.5rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);padding:var(--section-header-py, .85rem) var(--section-px, 1rem);width:100%;grid-column:1/-1}:host(.no-border){border-bottom:none}:host(.spacing){padding:0;width:100%}.section-header__container{width:100%;min-width:0;max-width:var(--m-section-header-max-width, none);margin-inline:0 auto}:host(.box-center) .section-header__container{margin-inline:auto}:host(.box-right) .section-header__container{margin-inline:auto 0}.section-header__inner{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.section-header__inner .section-header__title{flex:1;min-width:0;gap:.5rem}:host(.spacing) .section-header__inner{padding:1rem 1.5rem}:host(.has-sidepanel){padding-right:50px}:host(.has-sidepanel.has-menu){padding-right:50px}:host(.spacing.has-sidepanel) .section-header__inner{padding-right:calc(1.5rem + 50px)}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10}:host(.is-sticky-enabled){background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}.section-header__toggle{display:flex;flex-shrink:0}.section-header__toggle.section-header__toggle--rotate m-button{display:flex;transition:transform .3s cubic-bezier(.4,0,.2,1)}.section-header__toggle.section-header__toggle--rotate.section-header__toggle--open m-button{transform:rotate(180deg)}.section-header__title{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}m-header{min-width:0}.section-header__title--reverse{flex-direction:column-reverse}.section-header__sub{font-size:.8rem;color:var(--m-text-secondary);line-height:1.2}:host(.align-center){--m-header-justify: center}:host(.align-right){--m-header-justify: flex-end}:host(.has-menu){padding-right:0}:host(.spacing.has-menu) .section-header__inner{padding-right:0}.section-header__filters{display:contents}.section-header__filters m-section-filter-group{width:auto;flex-shrink:0;border-bottom:none}.section-header__back{display:flex;align-items:center;flex-shrink:0}.section-header__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;align-self:flex-start;height:var(--m-section-header-icon-box, 1.5125rem)}.section-header__menu,.section-header__action{margin-left:auto;flex-shrink:0;display:flex;align-items:center}.section-header__action+.section-header__menu{margin-left:0}\n"] }]
|
|
11075
|
-
}], propDecorators: { sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], subLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "subLabel", required: false }] }], noTranslate: [{ type: i0.Input, args: [{ isSignal: true, alias: "noTranslate", required: false }] }], params: [{ type: i0.Input, args: [{ isSignal: true, alias: "params", required: false }] }], reverse: [{ type: i0.Input, args: [{ isSignal: true, alias: "reverse", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], menu: [{ type: i0.Input, args: [{ isSignal: true, alias: "menu", required: false }] }], menuName: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuName", required: false }] }], visibilityRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibilityRule", required: false }] }], disableRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableRule", required: false }] }], extraData: [{ type: i0.Input, args: [{ isSignal: true, alias: "extraData", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], showBack: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBack", required: false }] }], actionButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionButton", required: false }] }], actionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionLabel", required: false }] }], spacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacing", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], actionClick: [{ type: i0.Output, args: ["actionClick"] }], action: [{ type: i0.Output, args: ["action"] }], back: [{ type: i0.Output, args: ["back"] }] } });
|
|
11076
|
-
|
|
11077
|
-
const BACK_BTN = {
|
|
11078
|
-
icon: 'chevron-left',
|
|
11079
|
-
iconOnly: true,
|
|
11080
|
-
variant: 'ghost',
|
|
11081
|
-
};
|
|
11082
|
-
class SectionBackComponent {
|
|
11083
|
-
back = input(false, ...(ngDevMode ? [{ debugName: "back" }] : /* istanbul ignore next */ []));
|
|
11084
|
-
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
11085
|
-
html = input(...(ngDevMode ? [undefined, { debugName: "html" }] : /* istanbul ignore next */ []));
|
|
11086
|
-
padding = input(false, ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
|
|
11087
|
-
paddingX = input(false, ...(ngDevMode ? [{ debugName: "paddingX" }] : /* istanbul ignore next */ []));
|
|
11088
|
-
paddingY = input(false, ...(ngDevMode ? [{ debugName: "paddingY" }] : /* istanbul ignore next */ []));
|
|
11089
|
-
navigate = output();
|
|
11090
|
-
backBtn = BACK_BTN;
|
|
11091
|
-
sectionContext = inject(SECTION_CONTEXT, { optional: true });
|
|
11092
|
-
sidepanel = computed(() => this.sectionContext?.sidepanel() ?? false, ...(ngDevMode ? [{ debugName: "sidepanel" }] : /* istanbul ignore next */ []));
|
|
11093
|
-
noBorder = computed(() => this.sectionContext?.variant() === 'noBorder', ...(ngDevMode ? [{ debugName: "noBorder" }] : /* istanbul ignore next */ []));
|
|
11094
|
-
contentRef = viewChild('content', ...(ngDevMode ? [{ debugName: "contentRef" }] : /* istanbul ignore next */ []));
|
|
11095
|
-
hasContent = signal(false, ...(ngDevMode ? [{ debugName: "hasContent" }] : /* istanbul ignore next */ []));
|
|
11096
|
-
constructor() {
|
|
11097
|
-
effect(() => {
|
|
11098
|
-
const el = this.contentRef()?.nativeElement;
|
|
11099
|
-
if (el)
|
|
11100
|
-
this.hasContent.set(el.childNodes.length > 0);
|
|
11101
|
-
});
|
|
11102
|
-
}
|
|
11103
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionBackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11104
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SectionBackComponent, isStandalone: true, selector: "m-section-back", inputs: { back: { classPropertyName: "back", publicName: "back", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, html: { classPropertyName: "html", publicName: "html", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, paddingX: { classPropertyName: "paddingX", publicName: "paddingX", isSignal: true, isRequired: false, transformFunction: null }, paddingY: { classPropertyName: "paddingY", publicName: "paddingY", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { navigate: "navigate" }, host: { properties: { "class.has-sidepanel": "sidepanel()", "class.has-padding-x": "padding() || paddingX()", "class.has-padding-y": "padding() || paddingY()", "class.no-border": "noBorder()" }, classAttribute: "m-section-back" }, viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["content"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
11105
|
-
@if (back()) {
|
|
11106
|
-
<m-button [config]="backBtn" (clicked)="navigate.emit()" />
|
|
11107
|
-
} @else {
|
|
11108
|
-
<m-icon icon="logo" color="mm" />
|
|
11109
|
-
}
|
|
11110
|
-
<span #content><ng-content /></span>
|
|
11111
|
-
@if (!hasContent()) {
|
|
11112
|
-
@if (html()) {
|
|
11113
|
-
<m-header [level]="3" [innerHTML]="html()" />
|
|
11114
|
-
} @else {
|
|
11115
|
-
<m-header [level]="3" [label]="label() ?? 'magmonium'" />
|
|
11116
|
-
}
|
|
11117
|
-
}
|
|
11118
|
-
`, 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;gap:.25rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);width:100%;grid-column:1/-1;--section-back-size: .7rem;--section-back-seat: calc(var(--section-back-size) * 2.25)}:host(.no-border){border-bottom:none}m-button,m-icon{flex-shrink:0}m-button{--m-button-size: var(--section-back-size)}m-icon{display:inline-flex;justify-content:center;width:var(--section-back-seat)}m-logo{flex-shrink:0;width:1.5rem;height:1.5rem}m-header{flex:1;min-width:0}:host>span{display:contents}:host.has-padding-x{padding-inline:var(--section-px, 1rem)}:host.has-padding-y{padding-block:var(--section-header-py, .85rem)}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }, { kind: "component", type: HeaderComponent$1, selector: "m-header", inputs: ["level", "label", "icon", "actionButton", "actionLabel", "noTranslate", "params"], outputs: ["actionClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
11119
|
-
}
|
|
11120
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionBackComponent, decorators: [{
|
|
11121
|
-
type: Component,
|
|
11122
|
-
args: [{ selector: 'm-section-back', template: `
|
|
11123
|
-
@if (back()) {
|
|
11124
|
-
<m-button [config]="backBtn" (clicked)="navigate.emit()" />
|
|
11125
|
-
} @else {
|
|
11126
|
-
<m-icon icon="logo" color="mm" />
|
|
11127
|
-
}
|
|
11128
|
-
<span #content><ng-content /></span>
|
|
11129
|
-
@if (!hasContent()) {
|
|
11130
|
-
@if (html()) {
|
|
11131
|
-
<m-header [level]="3" [innerHTML]="html()" />
|
|
11132
|
-
} @else {
|
|
11133
|
-
<m-header [level]="3" [label]="label() ?? 'magmonium'" />
|
|
11134
|
-
}
|
|
11135
|
-
}
|
|
11136
|
-
`, imports: [IconComponent, ButtonComponent, HeaderComponent$1], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
11137
|
-
class: 'm-section-back',
|
|
11138
|
-
'[class.has-sidepanel]': 'sidepanel()',
|
|
11139
|
-
'[class.has-padding-x]': 'padding() || paddingX()',
|
|
11140
|
-
'[class.has-padding-y]': 'padding() || paddingY()',
|
|
11141
|
-
'[class.no-border]': 'noBorder()',
|
|
11142
|
-
}, 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;gap:.25rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);width:100%;grid-column:1/-1;--section-back-size: .7rem;--section-back-seat: calc(var(--section-back-size) * 2.25)}:host(.no-border){border-bottom:none}m-button,m-icon{flex-shrink:0}m-button{--m-button-size: var(--section-back-size)}m-icon{display:inline-flex;justify-content:center;width:var(--section-back-seat)}m-logo{flex-shrink:0;width:1.5rem;height:1.5rem}m-header{flex:1;min-width:0}:host>span{display:contents}:host.has-padding-x{padding-inline:var(--section-px, 1rem)}:host.has-padding-y{padding-block:var(--section-header-py, .85rem)}\n"] }]
|
|
11143
|
-
}], ctorParameters: () => [], propDecorators: { back: [{ type: i0.Input, args: [{ isSignal: true, alias: "back", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], html: [{ type: i0.Input, args: [{ isSignal: true, alias: "html", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], paddingX: [{ type: i0.Input, args: [{ isSignal: true, alias: "paddingX", required: false }] }], paddingY: [{ type: i0.Input, args: [{ isSignal: true, alias: "paddingY", required: false }] }], navigate: [{ type: i0.Output, args: ["navigate"] }], contentRef: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }] } });
|
|
11144
|
-
|
|
11145
|
-
/**
|
|
11146
|
-
* Merges multiple arrays and removes duplicates
|
|
11147
|
-
* @param arrays - Arrays to merge
|
|
11148
|
-
* @returns Merged array with unique values
|
|
11149
|
-
*/
|
|
11150
|
-
function mergeUnique(...arrays) {
|
|
11151
|
-
return [...new Set(arrays.flat())];
|
|
11152
|
-
}
|
|
11153
|
-
/**
|
|
11154
|
-
* Merges arrays of objects and removes duplicates by key
|
|
11155
|
-
* @param arrays - Arrays to merge
|
|
11156
|
-
* @param key - Property to use for uniqueness check
|
|
11157
|
-
* @returns Merged array with unique objects
|
|
11158
|
-
*/
|
|
11159
|
-
function mergeUniqueBy(arrays, key) {
|
|
11160
|
-
const map = new Map();
|
|
11161
|
-
arrays.flat().forEach((item) => {
|
|
11162
|
-
if (!map.has(item[key])) {
|
|
11163
|
-
map.set(item[key], item);
|
|
11164
|
-
}
|
|
11165
|
-
});
|
|
11166
|
-
return Array.from(map.values());
|
|
11167
|
-
}
|
|
11168
|
-
/**
|
|
11169
|
-
* Merges arrays with custom comparator
|
|
11170
|
-
*/
|
|
11171
|
-
function mergeUniqueWith(arrays, compareFn) {
|
|
11172
|
-
const map = new Map();
|
|
11173
|
-
arrays.flat().forEach((item) => {
|
|
11174
|
-
const key = compareFn(item);
|
|
11175
|
-
if (!map.has(key)) {
|
|
11176
|
-
map.set(key, item);
|
|
11177
|
-
}
|
|
11178
|
-
});
|
|
11179
|
-
return Array.from(map.values());
|
|
11180
|
-
}
|
|
11181
|
-
|
|
11182
11075
|
class ButtonGroupComponent extends ConfigComponent {
|
|
11183
11076
|
// to overwrite specific button config
|
|
11184
11077
|
buttons = input(...(ngDevMode ? [undefined, { debugName: "buttons" }] : /* istanbul ignore next */ []));
|
|
@@ -17423,7 +17316,9 @@ class SectionAccordionDirective {
|
|
|
17423
17316
|
// Ungrouped default is open (CONTEXT.md) — a bare `register()` call from a
|
|
17424
17317
|
// group overrides this via setOpen before first render.
|
|
17425
17318
|
_open = signal(true, ...(ngDevMode ? [{ debugName: "_open" }] : /* istanbul ignore next */ []));
|
|
17426
|
-
|
|
17319
|
+
// Always open on the Canvas: the toggle is inert there, so a group member
|
|
17320
|
+
// closed at registration would hide its children with no way to reach them.
|
|
17321
|
+
isOpen = computed(() => this.isDesignMode || this._open(), ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
|
|
17427
17322
|
sectionAccordionId = `m-section-accordion-${++counter}`;
|
|
17428
17323
|
headerId = `${this.sectionAccordionId}-header`;
|
|
17429
17324
|
bodyId = `${this.sectionAccordionId}-body`;
|
|
@@ -17490,7 +17385,6 @@ class SectionComponent extends ConfigComponent {
|
|
|
17490
17385
|
// on every Section it draws, so an unattached one must not collapse or
|
|
17491
17386
|
// announce itself as a region.
|
|
17492
17387
|
accordion = computed(() => this.accordionDirective?.isActive() ? this.accordionDirective : null, ...(ngDevMode ? [{ debugName: "accordion" }] : /* istanbul ignore next */ []));
|
|
17493
|
-
header = contentChild(SectionHeaderComponent, ...(ngDevMode ? [{ debugName: "header" }] : /* istanbul ignore next */ []));
|
|
17494
17388
|
badges = contentChild(SectionBadgesComponent, ...(ngDevMode ? [{ debugName: "badges" }] : /* istanbul ignore next */ []));
|
|
17495
17389
|
toggle = contentChild(SectionToggleComponent, ...(ngDevMode ? [{ debugName: "toggle" }] : /* istanbul ignore next */ []));
|
|
17496
17390
|
action = contentChild(ActionComponent, ...(ngDevMode ? [{ debugName: "action" }] : /* istanbul ignore next */ []));
|
|
@@ -17593,10 +17487,10 @@ class SectionComponent extends ConfigComponent {
|
|
|
17593
17487
|
};
|
|
17594
17488
|
},
|
|
17595
17489
|
},
|
|
17596
|
-
], queries: [{ propertyName: "
|
|
17597
|
-
|
|
17598
|
-
|
|
17599
|
-
|
|
17490
|
+
], queries: [{ propertyName: "badges", first: true, predicate: SectionBadgesComponent, descendants: true, isSignal: true }, { propertyName: "toggle", first: true, predicate: SectionToggleComponent, descendants: true, isSignal: true }, { propertyName: "action", first: true, predicate: ActionComponent, descendants: true, isSignal: true }, { propertyName: "back", first: true, predicate: SectionBackComponent, descendants: true, isSignal: true }, { propertyName: "search", first: true, predicate: SectionSearchComponent, descendants: true, isSignal: true }, { propertyName: "filter", first: true, predicate: SectionFilterComponent, descendants: true, isSignal: true }, { propertyName: "filterGroup", first: true, predicate: SectionFilterGroupComponent, descendants: true, isSignal: true }, { propertyName: "stepper", first: true, predicate: SectionStepperComponent, descendants: true, isSignal: true }, { propertyName: "hero", first: true, predicate: SectionHeroComponent, descendants: true, isSignal: true }, { propertyName: "jumbotron", first: true, predicate: JumbotronComponent, descendants: true, isSignal: true }, { propertyName: "carousel", first: true, predicate: CarouselComponent, descendants: true, isSignal: true }, { propertyName: "footer", first: true, predicate: SectionFooterComponent, descendants: true, isSignal: true }, { propertyName: "pagination", first: true, predicate: SectionPaginationComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
17491
|
+
<!-- Ungated, unlike the slots below: the design Canvas draws its header
|
|
17492
|
+
through an ngTemplateOutlet, which a contentChild query never sees. -->
|
|
17493
|
+
<ng-content select="m-section-header" />
|
|
17600
17494
|
<div
|
|
17601
17495
|
class="m-section__collapsible"
|
|
17602
17496
|
[id]="accordion()?.bodyId"
|
|
@@ -17650,14 +17544,14 @@ class SectionComponent extends ConfigComponent {
|
|
|
17650
17544
|
}
|
|
17651
17545
|
</div>
|
|
17652
17546
|
</div>
|
|
17653
|
-
`, 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%;min-height:var(--m-section-min-height, 5em);container-type:inline-size;container-name:mag-grid;--_section-px: 1rem;--_section-pt: 1.5rem;--_section-pb: 0rem;--_section-header-py: 1rem}:host(.has-max-height){height:var(--m-section-max-height);overflow:auto}:host(.is-with-border){border:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-sandwich-border){border-block:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-side-border){border-inline:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-left-border){border-inline-start:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-right-border){border-inline-end:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}.m-section__collapsible{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:1fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1);opacity:1}.m-section__collapsible.is-collapsed{grid-template-rows:0fr;opacity:0;pointer-events:none}.m-section__collapsible-content{min-height:0;min-width:0;overflow:clip}.m-section__body{display:flex;flex-wrap:wrap;align-content:flex-start;align-items:stretch;max-width:var(--m-section-max-width);margin-inline:auto}:host(.align-left) .m-section__body{margin-inline-start:0;margin-inline-end:auto}:host(.align-right) .m-section__body{margin-inline-start:auto;margin-inline-end:0;justify-content:flex-end}:host(.align-center) .m-section__body{margin-inline:auto;justify-content:center}:host(.align-x-left) .m-section__body{justify-content:flex-start}:host(.align-x-center) .m-section__body{justify-content:center}:host(.align-x-right) .m-section__body{justify-content:flex-end}:host(.align-y-top) .m-section__body{align-items:flex-start;align-content:flex-start}:host(.align-y-center) .m-section__body{align-items:center;align-content:center}:host(.align-y-bottom) .m-section__body{align-items:flex-end;align-content:flex-end}:host(.is-full-height){height:100vh;min-height:100vh;overflow:auto}:host(.is-full-height) .m-section__body{flex:1;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17547
|
+
`, 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%;min-height:var(--m-section-min-height, 5em);container-type:inline-size;container-name:mag-grid;--_section-px: 1rem;--_section-pt: 1.5rem;--_section-pb: 0rem;--_section-header-py: 1rem}:host(.has-max-height){height:var(--m-section-max-height);overflow:auto}:host(.is-with-border){border:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-sandwich-border){border-block:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-side-border){border-inline:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-left-border){border-inline-start:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-right-border){border-inline-end:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}.m-section__collapsible{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:1fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1);opacity:1}.m-section__collapsible.is-collapsed{grid-template-rows:0fr;opacity:0;pointer-events:none}.m-section__collapsible-content{min-height:0;min-width:0;overflow:clip}.m-section__body{display:flex;flex-wrap:wrap;align-content:flex-start;align-items:stretch;max-width:var(--m-section-max-width);margin-inline:auto}:host(.align-left) .m-section__body{margin-inline-start:0;margin-inline-end:auto}:host(.align-right) .m-section__body{margin-inline-start:auto;margin-inline-end:0;justify-content:flex-end}:host(.align-center) .m-section__body{margin-inline:auto;justify-content:center}:host(.align-x-left) .m-section__body{justify-content:flex-start}:host(.align-x-center) .m-section__body{justify-content:center}:host(.align-x-right) .m-section__body{justify-content:flex-end}:host(.align-y-top) .m-section__body{align-items:flex-start;align-content:flex-start}:host(.align-y-center) .m-section__body{align-items:center;align-content:center}:host(.align-y-bottom) .m-section__body{align-items:flex-end;align-content:flex-end}:host(.is-full-height){height:100vh;min-height:100vh;overflow:auto}:host(.is-full-height) .m-section__body{flex:1;height:100%}:host(.is-full-height) .m-section__collapsible:not(.is-collapsed)>.m-section__collapsible-content{overflow:visible}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17654
17548
|
}
|
|
17655
17549
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionComponent, decorators: [{
|
|
17656
17550
|
type: Component,
|
|
17657
17551
|
args: [{ selector: 'm-section', template: `
|
|
17658
|
-
|
|
17659
|
-
|
|
17660
|
-
|
|
17552
|
+
<!-- Ungated, unlike the slots below: the design Canvas draws its header
|
|
17553
|
+
through an ngTemplateOutlet, which a contentChild query never sees. -->
|
|
17554
|
+
<ng-content select="m-section-header" />
|
|
17661
17555
|
<div
|
|
17662
17556
|
class="m-section__collapsible"
|
|
17663
17557
|
[id]="accordion()?.bodyId"
|
|
@@ -17757,8 +17651,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
17757
17651
|
};
|
|
17758
17652
|
},
|
|
17759
17653
|
},
|
|
17760
|
-
], 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%;min-height:var(--m-section-min-height, 5em);container-type:inline-size;container-name:mag-grid;--_section-px: 1rem;--_section-pt: 1.5rem;--_section-pb: 0rem;--_section-header-py: 1rem}:host(.has-max-height){height:var(--m-section-max-height);overflow:auto}:host(.is-with-border){border:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-sandwich-border){border-block:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-side-border){border-inline:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-left-border){border-inline-start:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-right-border){border-inline-end:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}.m-section__collapsible{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:1fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1);opacity:1}.m-section__collapsible.is-collapsed{grid-template-rows:0fr;opacity:0;pointer-events:none}.m-section__collapsible-content{min-height:0;min-width:0;overflow:clip}.m-section__body{display:flex;flex-wrap:wrap;align-content:flex-start;align-items:stretch;max-width:var(--m-section-max-width);margin-inline:auto}:host(.align-left) .m-section__body{margin-inline-start:0;margin-inline-end:auto}:host(.align-right) .m-section__body{margin-inline-start:auto;margin-inline-end:0;justify-content:flex-end}:host(.align-center) .m-section__body{margin-inline:auto;justify-content:center}:host(.align-x-left) .m-section__body{justify-content:flex-start}:host(.align-x-center) .m-section__body{justify-content:center}:host(.align-x-right) .m-section__body{justify-content:flex-end}:host(.align-y-top) .m-section__body{align-items:flex-start;align-content:flex-start}:host(.align-y-center) .m-section__body{align-items:center;align-content:center}:host(.align-y-bottom) .m-section__body{align-items:flex-end;align-content:flex-end}:host(.is-full-height){height:100vh;min-height:100vh;overflow:auto}:host(.is-full-height) .m-section__body{flex:1;height:100%}\n"] }]
|
|
17761
|
-
}], ctorParameters: () => [], propDecorators: {
|
|
17654
|
+
], 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%;min-height:var(--m-section-min-height, 5em);container-type:inline-size;container-name:mag-grid;--_section-px: 1rem;--_section-pt: 1.5rem;--_section-pb: 0rem;--_section-header-py: 1rem}:host(.has-max-height){height:var(--m-section-max-height);overflow:auto}:host(.is-with-border){border:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-sandwich-border){border-block:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-side-border){border-inline:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-left-border){border-inline-start:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}:host(.is-right-border){border-inline-end:var(--m-section-border, 1px solid var(--m-backdrop-border));box-sizing:border-box}.m-section__collapsible{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:1fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1);opacity:1}.m-section__collapsible.is-collapsed{grid-template-rows:0fr;opacity:0;pointer-events:none}.m-section__collapsible-content{min-height:0;min-width:0;overflow:clip}.m-section__body{display:flex;flex-wrap:wrap;align-content:flex-start;align-items:stretch;max-width:var(--m-section-max-width);margin-inline:auto}:host(.align-left) .m-section__body{margin-inline-start:0;margin-inline-end:auto}:host(.align-right) .m-section__body{margin-inline-start:auto;margin-inline-end:0;justify-content:flex-end}:host(.align-center) .m-section__body{margin-inline:auto;justify-content:center}:host(.align-x-left) .m-section__body{justify-content:flex-start}:host(.align-x-center) .m-section__body{justify-content:center}:host(.align-x-right) .m-section__body{justify-content:flex-end}:host(.align-y-top) .m-section__body{align-items:flex-start;align-content:flex-start}:host(.align-y-center) .m-section__body{align-items:center;align-content:center}:host(.align-y-bottom) .m-section__body{align-items:flex-end;align-content:flex-end}:host(.is-full-height){height:100vh;min-height:100vh;overflow:auto}:host(.is-full-height) .m-section__body{flex:1;height:100%}:host(.is-full-height) .m-section__collapsible:not(.is-collapsed)>.m-section__collapsible-content{overflow:visible}\n"] }]
|
|
17655
|
+
}], ctorParameters: () => [], propDecorators: { badges: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionBadgesComponent), { isSignal: true }] }], toggle: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionToggleComponent), { isSignal: true }] }], action: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ActionComponent), { isSignal: true }] }], back: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionBackComponent), { isSignal: true }] }], search: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionSearchComponent), { isSignal: true }] }], filter: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionFilterComponent), { isSignal: true }] }], filterGroup: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionFilterGroupComponent), { isSignal: true }] }], stepper: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionStepperComponent), { isSignal: true }] }], hero: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionHeroComponent), { isSignal: true }] }], jumbotron: [{ type: i0.ContentChild, args: [i0.forwardRef(() => JumbotronComponent), { isSignal: true }] }], carousel: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CarouselComponent), { isSignal: true }] }], footer: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionFooterComponent), { isSignal: true }] }], pagination: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SectionPaginationComponent), { isSignal: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], heightMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "heightMode", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], alignX: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignX", required: false }] }], alignY: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignY", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], inView: [{ type: i0.Output, args: ["inView"] }] } });
|
|
17762
17656
|
|
|
17763
17657
|
class UserApiService {
|
|
17764
17658
|
http = inject(HttpService);
|
|
@@ -19625,25 +19519,166 @@ class RowComponent extends ConfigComponent {
|
|
|
19625
19519
|
}, ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
19626
19520
|
sectionContext = inject(SECTION_CONTEXT, { optional: true });
|
|
19627
19521
|
noBorder = computed(() => this.sectionContext?.variant() === 'noBorder', ...(ngDevMode ? [{ debugName: "noBorder" }] : /* istanbul ignore next */ []));
|
|
19628
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
19629
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: RowComponent, isStandalone: true, selector: "m-row", inputs: { padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, paddingX: { classPropertyName: "paddingX", publicName: "paddingX", isSignal: true, isRequired: false, transformFunction: null }, paddingY: { classPropertyName: "paddingY", publicName: "paddingY", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, center: { classPropertyName: "center", publicName: "center", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "style.--m-row-max-width": "resolvedMaxWidth()" }, classAttribute: "m-row" }, usesInheritance: true, ngImport: i0, template: `
|
|
19630
|
-
<div class="m-row__body">
|
|
19631
|
-
<ng-content />
|
|
19632
|
-
</div>
|
|
19633
|
-
`, 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;grid-column:span 12;width:100%;box-sizing:border-box;border-bottom:1px solid var(--m-backdrop-border);min-height:5em}:host(.no-border){border-bottom:none}:host-context(.is-with-border):last-child,:host-context(.is-sandwich-border):last-child{border-bottom:none}:host.has-padding-y{padding-block:var(--m-row-py, var(--section-pt, var(--_section-pt, 1.5rem)))}.m-row__body{display:flex;flex-wrap:wrap;align-content:flex-start;max-width:var(--m-row-max-width);margin-inline:auto}:host.has-padding-x .m-row__body{padding-inline:var(--m-row-px, var(--section-px, var(--_section-px, 1rem)))}:host.is-center .m-row__body{display:flex;justify-content:center;align-items:center}:host(.align-left) .m-row__body{margin-inline-start:0;margin-inline-end:auto}:host(.align-right) .m-row__body{margin-inline-start:auto;margin-inline-end:0;justify-content:flex-end}:host(.align-center) .m-row__body{margin-inline:auto;justify-content:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
19522
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
19523
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: RowComponent, isStandalone: true, selector: "m-row", inputs: { padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, paddingX: { classPropertyName: "paddingX", publicName: "paddingX", isSignal: true, isRequired: false, transformFunction: null }, paddingY: { classPropertyName: "paddingY", publicName: "paddingY", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, center: { classPropertyName: "center", publicName: "center", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "style.--m-row-max-width": "resolvedMaxWidth()" }, classAttribute: "m-row" }, usesInheritance: true, ngImport: i0, template: `
|
|
19524
|
+
<div class="m-row__body">
|
|
19525
|
+
<ng-content />
|
|
19526
|
+
</div>
|
|
19527
|
+
`, 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;grid-column:span 12;width:100%;box-sizing:border-box;border-bottom:1px solid var(--m-backdrop-border);min-height:5em}:host(.no-border){border-bottom:none}:host-context(.is-with-border):last-child,:host-context(.is-sandwich-border):last-child{border-bottom:none}:host.has-padding-y{padding-block:var(--m-row-py, var(--section-pt, var(--_section-pt, 1.5rem)))}.m-row__body{display:flex;flex-wrap:wrap;align-content:flex-start;max-width:var(--m-row-max-width);margin-inline:auto}:host.has-padding-x .m-row__body{padding-inline:var(--m-row-px, var(--section-px, var(--_section-px, 1rem)))}:host.is-center .m-row__body{display:flex;justify-content:center;align-items:center}:host(.align-left) .m-row__body{margin-inline-start:0;margin-inline-end:auto}:host(.align-right) .m-row__body{margin-inline-start:auto;margin-inline-end:0;justify-content:flex-end}:host(.align-center) .m-row__body{margin-inline:auto;justify-content:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
19528
|
+
}
|
|
19529
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RowComponent, decorators: [{
|
|
19530
|
+
type: Component,
|
|
19531
|
+
args: [{ selector: 'm-row', template: `
|
|
19532
|
+
<div class="m-row__body">
|
|
19533
|
+
<ng-content />
|
|
19534
|
+
</div>
|
|
19535
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
19536
|
+
class: 'm-row',
|
|
19537
|
+
'[class]': 'classes()',
|
|
19538
|
+
'[style.--m-row-max-width]': 'resolvedMaxWidth()',
|
|
19539
|
+
}, 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;grid-column:span 12;width:100%;box-sizing:border-box;border-bottom:1px solid var(--m-backdrop-border);min-height:5em}:host(.no-border){border-bottom:none}:host-context(.is-with-border):last-child,:host-context(.is-sandwich-border):last-child{border-bottom:none}:host.has-padding-y{padding-block:var(--m-row-py, var(--section-pt, var(--_section-pt, 1.5rem)))}.m-row__body{display:flex;flex-wrap:wrap;align-content:flex-start;max-width:var(--m-row-max-width);margin-inline:auto}:host.has-padding-x .m-row__body{padding-inline:var(--m-row-px, var(--section-px, var(--_section-px, 1rem)))}:host.is-center .m-row__body{display:flex;justify-content:center;align-items:center}:host(.align-left) .m-row__body{margin-inline-start:0;margin-inline-end:auto}:host(.align-right) .m-row__body{margin-inline-start:auto;margin-inline-end:0;justify-content:flex-end}:host(.align-center) .m-row__body{margin-inline:auto;justify-content:center}\n"] }]
|
|
19540
|
+
}], propDecorators: { padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], paddingX: [{ type: i0.Input, args: [{ isSignal: true, alias: "paddingX", required: false }] }], paddingY: [{ type: i0.Input, args: [{ isSignal: true, alias: "paddingY", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], center: [{ type: i0.Input, args: [{ isSignal: true, alias: "center", required: false }] }] } });
|
|
19541
|
+
|
|
19542
|
+
// The line box each heading level draws, straight from `header.sass`: its font
|
|
19543
|
+
// size and its line-height. The icon beside a heading is boxed to the same
|
|
19544
|
+
// span so the two centre on one another — `--m-header-font-size` is read
|
|
19545
|
+
// first, so a caller resizing the heading moves the icon's box with it.
|
|
19546
|
+
const HEADER_LINE_BOX = {
|
|
19547
|
+
1: 'calc(var(--m-header-font-size, 2.25rem) * 1.15)',
|
|
19548
|
+
2: 'calc(var(--m-header-font-size, 1.75rem) * 1.2)',
|
|
19549
|
+
3: 'calc(var(--m-header-font-size, 1.375rem) * 1.1)',
|
|
19550
|
+
4: 'calc(var(--m-header-font-size, 1.125rem) * 1.1)',
|
|
19551
|
+
5: 'calc(var(--m-header-font-size, 1rem) * 1.1)',
|
|
19552
|
+
6: 'calc(var(--m-header-font-size, 0.875rem) * 1.1)',
|
|
19553
|
+
};
|
|
19554
|
+
class SectionHeaderComponent {
|
|
19555
|
+
sticky = input(false, ...(ngDevMode ? [{ debugName: "sticky" }] : /* istanbul ignore next */ []));
|
|
19556
|
+
level = input(3, ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
19557
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
|
|
19558
|
+
subLabel = input(...(ngDevMode ? [undefined, { debugName: "subLabel" }] : /* istanbul ignore next */ []));
|
|
19559
|
+
// `label` and `subLabel` are authored text rather than translation keys —
|
|
19560
|
+
// forwarded to `m-header` for the label, and skipping `translate` for the
|
|
19561
|
+
// sub. What a bound label needs above all: a value read from data is the
|
|
19562
|
+
// text itself, and resolving it as a key renders nothing.
|
|
19563
|
+
noTranslate = input(false, ...(ngDevMode ? [{ debugName: "noTranslate" }] : /* istanbul ignore next */ []));
|
|
19564
|
+
// The [MessageVariable] values both lines are resolved with — one record for
|
|
19565
|
+
// the pair, because a page holds one record for every dynamic slot it draws
|
|
19566
|
+
// (m-one-ui ADR 0066) and two headings naming the same slot mean the same
|
|
19567
|
+
// datum. Ignored under `noTranslate`, where neither line is looked up.
|
|
19568
|
+
params = input(undefined, ...(ngDevMode ? [{ debugName: "params" }] : /* istanbul ignore next */ []));
|
|
19569
|
+
// Draw the sub line above the label instead of below it. The two nodes keep
|
|
19570
|
+
// their order — title first, sub second — whichever way the pair reads, so
|
|
19571
|
+
// reversing is a setting rather than a second way to arrange the children.
|
|
19572
|
+
reverse = input(false, ...(ngDevMode ? [{ debugName: "reverse" }] : /* istanbul ignore next */ []));
|
|
19573
|
+
icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
19574
|
+
menu = input(...(ngDevMode ? [undefined, { debugName: "menu" }] : /* istanbul ignore next */ []));
|
|
19575
|
+
menuName = input(...(ngDevMode ? [undefined, { debugName: "menuName" }] : /* istanbul ignore next */ []));
|
|
19576
|
+
visibilityRule = input(...(ngDevMode ? [undefined, { debugName: "visibilityRule" }] : /* istanbul ignore next */ []));
|
|
19577
|
+
disableRule = input(...(ngDevMode ? [undefined, { debugName: "disableRule" }] : /* istanbul ignore next */ []));
|
|
19578
|
+
extraData = input(...(ngDevMode ? [undefined, { debugName: "extraData" }] : /* istanbul ignore next */ []));
|
|
19579
|
+
align = input(undefined, ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
19580
|
+
// The header's own `align` alone. A Section's `align` places boxes — its
|
|
19581
|
+
// body box, and the header's content box below — and a header whose text
|
|
19582
|
+
// followed it could not be left-aligned inside a centred Section at all.
|
|
19583
|
+
alignment = computed(() => this.align() ?? 'left', ...(ngDevMode ? [{ debugName: "alignment" }] : /* istanbul ignore next */ []));
|
|
19584
|
+
showBack = input(false, ...(ngDevMode ? [{ debugName: "showBack" }] : /* istanbul ignore next */ []));
|
|
19585
|
+
actionButton = input(...(ngDevMode ? [undefined, { debugName: "actionButton" }] : /* istanbul ignore next */ []));
|
|
19586
|
+
// The action Button's accessible name — it renders icon-only, so without a
|
|
19587
|
+
// label a screen reader has nothing to announce.
|
|
19588
|
+
actionLabel = input(...(ngDevMode ? [undefined, { debugName: "actionLabel" }] : /* istanbul ignore next */ []));
|
|
19589
|
+
spacing = input(false, ...(ngDevMode ? [{ debugName: "spacing" }] : /* istanbul ignore next */ []));
|
|
19590
|
+
maxWidth = input(...(ngDevMode ? [undefined, { debugName: "maxWidth" }] : /* istanbul ignore next */ []));
|
|
19591
|
+
actionClick = output();
|
|
19592
|
+
action = output();
|
|
19593
|
+
back = output();
|
|
19594
|
+
translateService = inject(TranslateService);
|
|
19595
|
+
// A computed rather than the impure TranslatePipe, the same trade
|
|
19596
|
+
// HeaderComponent makes: one lookup per sub change instead of one per
|
|
19597
|
+
// change-detection tick, and it still repaints when the language moves.
|
|
19598
|
+
subText = computed(() => this.noTranslate()
|
|
19599
|
+
? this.subLabel()
|
|
19600
|
+
: this.translateService.translate(this.subLabel(), this.params()), ...(ngDevMode ? [{ debugName: "subText" }] : /* istanbul ignore next */ []));
|
|
19601
|
+
scrollSticky = injectScrollSticky(120, 'none');
|
|
19602
|
+
sectionContext = inject(SECTION_CONTEXT, { optional: true });
|
|
19603
|
+
sidepanel = computed(() => this.sectionContext?.sidepanel() ?? false, ...(ngDevMode ? [{ debugName: "sidepanel" }] : /* istanbul ignore next */ []));
|
|
19604
|
+
noBorder = computed(() => this.sectionContext?.variant() === 'noBorder', ...(ngDevMode ? [{ debugName: "noBorder" }] : /* istanbul ignore next */ []));
|
|
19605
|
+
// Falls back to the Section's `maxWidth`: the header sits above the body and
|
|
19606
|
+
// the two are one column, so constraining the body alone left the heading
|
|
19607
|
+
// hanging off the edge of the content it titles. The border stays on the
|
|
19608
|
+
// host and keeps spanning the Section — only this inner box narrows.
|
|
19609
|
+
resolvedMaxWidth = computed(() => this.maxWidth() ?? this.sectionContext?.maxWidth?.(), ...(ngDevMode ? [{ debugName: "resolvedMaxWidth" }] : /* istanbul ignore next */ []));
|
|
19610
|
+
// Where that box sits once it is narrower than the row. The Section's
|
|
19611
|
+
// `align` — the same value that places `.m-section__body` — so header and
|
|
19612
|
+
// body stay in one column.
|
|
19613
|
+
boxAlign = computed(() => this.sectionContext?.align?.() ?? 'left', ...(ngDevMode ? [{ debugName: "boxAlign" }] : /* istanbul ignore next */ []));
|
|
19614
|
+
// The icon sits in the row, not in the heading, so it has no line box of its
|
|
19615
|
+
// own to centre against — it gets the heading's.
|
|
19616
|
+
iconBox = computed(() => HEADER_LINE_BOX[this.level()], ...(ngDevMode ? [{ debugName: "iconBox" }] : /* istanbul ignore next */ []));
|
|
19617
|
+
isSticky = computed(() => this.sticky() && this.scrollSticky(), ...(ngDevMode ? [{ debugName: "isSticky" }] : /* istanbul ignore next */ []));
|
|
19618
|
+
hasMenu = computed(() => !!this.menu() || !!this.menuName(), ...(ngDevMode ? [{ debugName: "hasMenu" }] : /* istanbul ignore next */ []));
|
|
19619
|
+
actionConfig = computed(() => {
|
|
19620
|
+
const icon = this.actionButton();
|
|
19621
|
+
if (!icon)
|
|
19622
|
+
return undefined;
|
|
19623
|
+
return {
|
|
19624
|
+
icon,
|
|
19625
|
+
label: this.actionLabel(),
|
|
19626
|
+
iconOnly: true,
|
|
19627
|
+
variant: 'ghost',
|
|
19628
|
+
};
|
|
19629
|
+
}, ...(ngDevMode ? [{ debugName: "actionConfig" }] : /* istanbul ignore next */ []));
|
|
19630
|
+
// Read through SECTION_CONTEXT rather than by injecting the directive:
|
|
19631
|
+
// every `<m-section>` provides the context, so the nearest one wins and a
|
|
19632
|
+
// header only ever draws the toggle of the Section it belongs to. Injecting
|
|
19633
|
+
// SectionAccordionDirective instead walks past that Section to any ancestor
|
|
19634
|
+
// carrying the behaviour, which put an arrow on every nested header. Null
|
|
19635
|
+
// where the Section has no active accordion (CONTEXT.md SectionAccordion).
|
|
19636
|
+
accordion = computed(() => this.sectionContext?.accordion?.() ?? null, ...(ngDevMode ? [{ debugName: "accordion" }] : /* istanbul ignore next */ []));
|
|
19637
|
+
// toggleIcon set: the glyph itself swaps between closed/open, already
|
|
19638
|
+
// "pointing" the right way, so it never rotates. toggleIcon absent: the
|
|
19639
|
+
// one glyph (icon, or the default chevron) rotates 180° instead.
|
|
19640
|
+
toggleIconName = computed(() => {
|
|
19641
|
+
const accordion = this.accordion();
|
|
19642
|
+
if (!accordion)
|
|
19643
|
+
return undefined;
|
|
19644
|
+
const toggleIcon = accordion.toggleIcon();
|
|
19645
|
+
if (toggleIcon) {
|
|
19646
|
+
return accordion.isOpen() ? toggleIcon : accordion.icon() ?? 'accordion_chevron';
|
|
19647
|
+
}
|
|
19648
|
+
return accordion.icon() ?? 'accordion_chevron';
|
|
19649
|
+
}, ...(ngDevMode ? [{ debugName: "toggleIconName" }] : /* istanbul ignore next */ []));
|
|
19650
|
+
toggleRotates = computed(() => !this.accordion()?.toggleIcon(), ...(ngDevMode ? [{ debugName: "toggleRotates" }] : /* istanbul ignore next */ []));
|
|
19651
|
+
onToggleClick() {
|
|
19652
|
+
this.accordion()?.toggle();
|
|
19653
|
+
}
|
|
19654
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19655
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SectionHeaderComponent, isStandalone: true, selector: "m-section-header", inputs: { sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, subLabel: { classPropertyName: "subLabel", publicName: "subLabel", isSignal: true, isRequired: false, transformFunction: null }, noTranslate: { classPropertyName: "noTranslate", publicName: "noTranslate", isSignal: true, isRequired: false, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null }, reverse: { classPropertyName: "reverse", publicName: "reverse", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, menu: { classPropertyName: "menu", publicName: "menu", isSignal: true, isRequired: false, transformFunction: null }, menuName: { classPropertyName: "menuName", publicName: "menuName", isSignal: true, isRequired: false, transformFunction: null }, visibilityRule: { classPropertyName: "visibilityRule", publicName: "visibilityRule", isSignal: true, isRequired: false, transformFunction: null }, disableRule: { classPropertyName: "disableRule", publicName: "disableRule", isSignal: true, isRequired: false, transformFunction: null }, extraData: { classPropertyName: "extraData", publicName: "extraData", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, showBack: { classPropertyName: "showBack", publicName: "showBack", isSignal: true, isRequired: false, transformFunction: null }, actionButton: { classPropertyName: "actionButton", publicName: "actionButton", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionClick: "actionClick", action: "action", back: "back" }, host: { properties: { "class.is-sticky-enabled": "sticky()", "class.is-sticky": "isSticky()", "class.has-menu": "hasMenu()", "class.align-left": "alignment() === \"left\"", "class.align-center": "alignment() === \"center\"", "class.align-right": "alignment() === \"right\"", "class.has-sidepanel": "sidepanel()", "class.no-border": "noBorder()", "class.spacing": "spacing()", "class.box-center": "boxAlign() === \"center\"", "class.box-right": "boxAlign() === \"right\"", "style.--m-section-header-max-width": "resolvedMaxWidth()", "style.--m-section-header-icon-box": "iconBox()" }, classAttribute: "m-section-header" }, ngImport: i0, template: "<!-- One declaration of the row, rendered by whichever branch `spacing` picks.\n Hoisted into a template rather than written twice: an `<ng-content>` may\n appear once per selector in a component, so the duplicated copy caught\n nothing and a header projecting a title rendered it in the `spacing`\n branch alone. -->\n<ng-template #body>\n @if (accordion(); as accordionRef) {\n <div\n class=\"section-header__toggle\"\n [class.section-header__toggle--rotate]=\"toggleRotates()\"\n [class.section-header__toggle--open]=\"accordionRef.isOpen()\"\n [id]=\"accordionRef.headerId\"\n [attr.aria-expanded]=\"accordionRef.isOpen()\"\n [attr.aria-controls]=\"accordionRef.bodyId\"\n >\n <m-button\n [config]=\"{ icon: toggleIconName(), iconOnly: true, variant: 'ghost' }\"\n (clicked)=\"onToggleClick()\" />\n </div>\n }\n @if (showBack()) {\n <div class=\"section-header__back\">\n <m-button\n [config]=\"{ icon: 'chevron-left', iconOnly: true }\"\n (clicked)=\"back.emit()\" />\n </div>\n } @else if (!label() && icon(); as iconName) {\n <!-- Only where no label is written. A header with one hands the icon to\n `m-header`, which draws it inside the heading's line box and so on the\n heading's own centre line. Beside a projected title there is no such\n box to borrow, so the glyph is boxed to the level's line box here and\n centred in it \u2014 otherwise it centres against the whole title column,\n which on the Canvas is the label slot's drop rect stacked above the\n heading. -->\n <div class=\"section-header__icon\">\n <m-icon [name]=\"iconName\" />\n </div>\n }\n <div\n class=\"section-header__title\"\n [class.section-header__title--reverse]=\"reverse()\"\n >\n <!-- The title slot is the catch-all rather than a `[label]` one: every\n header already projecting a heading writes it unselected, and a\n selector here would drop that content on the floor. What the design\n page emits \u2014 `<span label>` \u2014 is caught by it too, nothing else\n claiming the node. -->\n <ng-content />\n <!-- The written label, drawn beside the slot rather than as its\n `ng-content` fallback. A fallback renders only while *nothing* is\n projected, and the design Canvas always projects the slot span \u2014\n empty until a Control is dropped in it \u2014 so a fallback there would\n blank the label a header is still configured with. `label` answers\n instead, which no header projecting a title sets. -->\n @if (label()) {\n <m-header\n [level]=\"level()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [params]=\"params()\"\n [noTranslate]=\"noTranslate()\" />\n }\n @if (subText(); as sub) {\n <span class=\"section-header__sub\">{{ sub }}</span>\n }\n </div>\n <!-- A FilterGroup projected into the header row, selected by tag rather than\n by an attribute \u2014 the same shape a Section catches its `m-action` with.\n A header has room for one icon and not for a row, so a group landing\n here is squeezed by placement (ADR 0025); nothing here enforces that,\n the caller binding `[squeeze]` on the tag it projects. -->\n <div class=\"section-header__filters\">\n <ng-content select=\"m-section-filter-group\" />\n </div>\n @if (actionConfig(); as action) {\n <div class=\"section-header__action\">\n <m-button [config]=\"action\" (clicked)=\"actionClick.emit()\" />\n </div>\n }\n @if (hasMenu()) {\n <div class=\"section-header__menu\">\n <m-context-menu\n [config]=\"menu()\"\n [name]=\"menuName()\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"action.emit($event)\"\n />\n </div>\n }\n</ng-template>\n\n<!-- Always the same two boxes, whether or not a `maxWidth` is in force. The\n border and the sticky backdrop live on the host and keep spanning the\n Section's full width; only this container narrows and is placed by the\n Section's `align`, so the heading lines up with the body under it. -->\n<div class=\"section-header__container\">\n <div class=\"section-header__inner\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n</div>\n", styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:flex;align-items:center;gap:.5rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);padding:var(--section-header-py, .85rem) var(--section-px, 1rem);width:100%;grid-column:1/-1}:host(.no-border){border-bottom:none}:host(.spacing){padding:0;width:100%}.section-header__container{width:100%;min-width:0;max-width:var(--m-section-header-max-width, none);margin-inline:0 auto}:host(.box-center) .section-header__container{margin-inline:auto}:host(.box-right) .section-header__container{margin-inline:auto 0}.section-header__inner{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.section-header__inner .section-header__title{flex:1;min-width:0;gap:.5rem}:host(.spacing) .section-header__inner{padding:1rem 1.5rem}:host(.has-sidepanel){padding-right:50px}:host(.has-sidepanel.has-menu){padding-right:50px}:host(.spacing.has-sidepanel) .section-header__inner{padding-right:calc(1.5rem + 50px)}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10}:host(.is-sticky-enabled){background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}.section-header__toggle{display:flex;flex-shrink:0}.section-header__toggle.section-header__toggle--rotate m-button{display:flex;transition:transform .3s cubic-bezier(.4,0,.2,1)}.section-header__toggle.section-header__toggle--rotate.section-header__toggle--open m-button{transform:rotate(180deg)}.section-header__title{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}m-header{min-width:0}.section-header__title--reverse{flex-direction:column-reverse}.section-header__sub{font-size:.8rem;color:var(--m-text-secondary);line-height:1.2}:host(.align-center){--m-header-justify: center}:host(.align-right){--m-header-justify: flex-end}:host(.has-menu){padding-right:0}:host(.spacing.has-menu) .section-header__inner{padding-right:0}.section-header__filters{display:contents}.section-header__filters m-section-filter-group{width:auto;flex-shrink:0;border-bottom:none}.section-header__back{display:flex;align-items:center;flex-shrink:0}.section-header__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;align-self:flex-start;height:var(--m-section-header-icon-box, 1.5125rem)}.section-header__menu,.section-header__action{margin-left:auto;flex-shrink:0;display:flex;align-items:center}.section-header__action+.section-header__menu{margin-left:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ContextMenuComponent, selector: "m-context-menu, m-one-context-menu", inputs: ["toggle", "remote", "exclude", "visibilityRule", "disableRule", "extraData", "inverted", "options"], outputs: ["toggleChange", "action"] }, { kind: "component", type: HeaderComponent$1, selector: "m-header", inputs: ["level", "label", "icon", "actionButton", "actionLabel", "noTranslate", "params"], outputs: ["actionClick"] }, { kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
19634
19656
|
}
|
|
19635
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type:
|
|
19657
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SectionHeaderComponent, decorators: [{
|
|
19636
19658
|
type: Component,
|
|
19637
|
-
args: [{ selector: 'm-
|
|
19638
|
-
|
|
19639
|
-
|
|
19640
|
-
|
|
19641
|
-
|
|
19642
|
-
|
|
19643
|
-
|
|
19644
|
-
'
|
|
19645
|
-
|
|
19646
|
-
|
|
19659
|
+
args: [{ selector: 'm-section-header', imports: [
|
|
19660
|
+
NgTemplateOutlet,
|
|
19661
|
+
ContextMenuComponent,
|
|
19662
|
+
HeaderComponent$1,
|
|
19663
|
+
IconComponent,
|
|
19664
|
+
ButtonComponent,
|
|
19665
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
19666
|
+
class: 'm-section-header',
|
|
19667
|
+
'[class.is-sticky-enabled]': 'sticky()',
|
|
19668
|
+
'[class.is-sticky]': 'isSticky()',
|
|
19669
|
+
'[class.has-menu]': 'hasMenu()',
|
|
19670
|
+
'[class.align-left]': 'alignment() === "left"',
|
|
19671
|
+
'[class.align-center]': 'alignment() === "center"',
|
|
19672
|
+
'[class.align-right]': 'alignment() === "right"',
|
|
19673
|
+
'[class.has-sidepanel]': 'sidepanel()',
|
|
19674
|
+
'[class.no-border]': 'noBorder()',
|
|
19675
|
+
'[class.spacing]': 'spacing()',
|
|
19676
|
+
'[class.box-center]': 'boxAlign() === "center"',
|
|
19677
|
+
'[class.box-right]': 'boxAlign() === "right"',
|
|
19678
|
+
'[style.--m-section-header-max-width]': 'resolvedMaxWidth()',
|
|
19679
|
+
'[style.--m-section-header-icon-box]': 'iconBox()',
|
|
19680
|
+
}, template: "<!-- One declaration of the row, rendered by whichever branch `spacing` picks.\n Hoisted into a template rather than written twice: an `<ng-content>` may\n appear once per selector in a component, so the duplicated copy caught\n nothing and a header projecting a title rendered it in the `spacing`\n branch alone. -->\n<ng-template #body>\n @if (accordion(); as accordionRef) {\n <div\n class=\"section-header__toggle\"\n [class.section-header__toggle--rotate]=\"toggleRotates()\"\n [class.section-header__toggle--open]=\"accordionRef.isOpen()\"\n [id]=\"accordionRef.headerId\"\n [attr.aria-expanded]=\"accordionRef.isOpen()\"\n [attr.aria-controls]=\"accordionRef.bodyId\"\n >\n <m-button\n [config]=\"{ icon: toggleIconName(), iconOnly: true, variant: 'ghost' }\"\n (clicked)=\"onToggleClick()\" />\n </div>\n }\n @if (showBack()) {\n <div class=\"section-header__back\">\n <m-button\n [config]=\"{ icon: 'chevron-left', iconOnly: true }\"\n (clicked)=\"back.emit()\" />\n </div>\n } @else if (!label() && icon(); as iconName) {\n <!-- Only where no label is written. A header with one hands the icon to\n `m-header`, which draws it inside the heading's line box and so on the\n heading's own centre line. Beside a projected title there is no such\n box to borrow, so the glyph is boxed to the level's line box here and\n centred in it \u2014 otherwise it centres against the whole title column,\n which on the Canvas is the label slot's drop rect stacked above the\n heading. -->\n <div class=\"section-header__icon\">\n <m-icon [name]=\"iconName\" />\n </div>\n }\n <div\n class=\"section-header__title\"\n [class.section-header__title--reverse]=\"reverse()\"\n >\n <!-- The title slot is the catch-all rather than a `[label]` one: every\n header already projecting a heading writes it unselected, and a\n selector here would drop that content on the floor. What the design\n page emits \u2014 `<span label>` \u2014 is caught by it too, nothing else\n claiming the node. -->\n <ng-content />\n <!-- The written label, drawn beside the slot rather than as its\n `ng-content` fallback. A fallback renders only while *nothing* is\n projected, and the design Canvas always projects the slot span \u2014\n empty until a Control is dropped in it \u2014 so a fallback there would\n blank the label a header is still configured with. `label` answers\n instead, which no header projecting a title sets. -->\n @if (label()) {\n <m-header\n [level]=\"level()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [params]=\"params()\"\n [noTranslate]=\"noTranslate()\" />\n }\n @if (subText(); as sub) {\n <span class=\"section-header__sub\">{{ sub }}</span>\n }\n </div>\n <!-- A FilterGroup projected into the header row, selected by tag rather than\n by an attribute \u2014 the same shape a Section catches its `m-action` with.\n A header has room for one icon and not for a row, so a group landing\n here is squeezed by placement (ADR 0025); nothing here enforces that,\n the caller binding `[squeeze]` on the tag it projects. -->\n <div class=\"section-header__filters\">\n <ng-content select=\"m-section-filter-group\" />\n </div>\n @if (actionConfig(); as action) {\n <div class=\"section-header__action\">\n <m-button [config]=\"action\" (clicked)=\"actionClick.emit()\" />\n </div>\n }\n @if (hasMenu()) {\n <div class=\"section-header__menu\">\n <m-context-menu\n [config]=\"menu()\"\n [name]=\"menuName()\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"action.emit($event)\"\n />\n </div>\n }\n</ng-template>\n\n<!-- Always the same two boxes, whether or not a `maxWidth` is in force. The\n border and the sticky backdrop live on the host and keep spanning the\n Section's full width; only this container narrows and is placed by the\n Section's `align`, so the heading lines up with the body under it. -->\n<div class=\"section-header__container\">\n <div class=\"section-header__inner\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n</div>\n", styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:flex;align-items:center;gap:.5rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);padding:var(--section-header-py, .85rem) var(--section-px, 1rem);width:100%;grid-column:1/-1}:host(.no-border){border-bottom:none}:host(.spacing){padding:0;width:100%}.section-header__container{width:100%;min-width:0;max-width:var(--m-section-header-max-width, none);margin-inline:0 auto}:host(.box-center) .section-header__container{margin-inline:auto}:host(.box-right) .section-header__container{margin-inline:auto 0}.section-header__inner{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.section-header__inner .section-header__title{flex:1;min-width:0;gap:.5rem}:host(.spacing) .section-header__inner{padding:1rem 1.5rem}:host(.has-sidepanel){padding-right:50px}:host(.has-sidepanel.has-menu){padding-right:50px}:host(.spacing.has-sidepanel) .section-header__inner{padding-right:calc(1.5rem + 50px)}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10}:host(.is-sticky-enabled){background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}.section-header__toggle{display:flex;flex-shrink:0}.section-header__toggle.section-header__toggle--rotate m-button{display:flex;transition:transform .3s cubic-bezier(.4,0,.2,1)}.section-header__toggle.section-header__toggle--rotate.section-header__toggle--open m-button{transform:rotate(180deg)}.section-header__title{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}m-header{min-width:0}.section-header__title--reverse{flex-direction:column-reverse}.section-header__sub{font-size:.8rem;color:var(--m-text-secondary);line-height:1.2}:host(.align-center){--m-header-justify: center}:host(.align-right){--m-header-justify: flex-end}:host(.has-menu){padding-right:0}:host(.spacing.has-menu) .section-header__inner{padding-right:0}.section-header__filters{display:contents}.section-header__filters m-section-filter-group{width:auto;flex-shrink:0;border-bottom:none}.section-header__back{display:flex;align-items:center;flex-shrink:0}.section-header__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;align-self:flex-start;height:var(--m-section-header-icon-box, 1.5125rem)}.section-header__menu,.section-header__action{margin-left:auto;flex-shrink:0;display:flex;align-items:center}.section-header__action+.section-header__menu{margin-left:0}\n"] }]
|
|
19681
|
+
}], propDecorators: { sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], subLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "subLabel", required: false }] }], noTranslate: [{ type: i0.Input, args: [{ isSignal: true, alias: "noTranslate", required: false }] }], params: [{ type: i0.Input, args: [{ isSignal: true, alias: "params", required: false }] }], reverse: [{ type: i0.Input, args: [{ isSignal: true, alias: "reverse", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], menu: [{ type: i0.Input, args: [{ isSignal: true, alias: "menu", required: false }] }], menuName: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuName", required: false }] }], visibilityRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibilityRule", required: false }] }], disableRule: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableRule", required: false }] }], extraData: [{ type: i0.Input, args: [{ isSignal: true, alias: "extraData", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], showBack: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBack", required: false }] }], actionButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionButton", required: false }] }], actionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionLabel", required: false }] }], spacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacing", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], actionClick: [{ type: i0.Output, args: ["actionClick"] }], action: [{ type: i0.Output, args: ["action"] }], back: [{ type: i0.Output, args: ["back"] }] } });
|
|
19647
19682
|
|
|
19648
19683
|
const SECTION_TABLE_CONTEXT = new InjectionToken('SECTION_TABLE_CONTEXT');
|
|
19649
19684
|
|
|
@@ -21638,7 +21673,8 @@ var checkboxGroup = /*#__PURE__*/Object.freeze({
|
|
|
21638
21673
|
|
|
21639
21674
|
class DropdownBoxComponent {
|
|
21640
21675
|
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
21641
|
-
|
|
21676
|
+
/** The values ticked, as a list whichever Field drew the panel. */
|
|
21677
|
+
selected = input([], ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
21642
21678
|
multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
21643
21679
|
activeIndex = input(-1, ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
|
|
21644
21680
|
action = output();
|
|
@@ -21653,13 +21689,7 @@ class DropdownBoxComponent {
|
|
|
21653
21689
|
.querySelectorAll('.dropdown-box__option')[index]?.scrollIntoView?.({ block: 'nearest' });
|
|
21654
21690
|
});
|
|
21655
21691
|
}
|
|
21656
|
-
isSelected = (value) =>
|
|
21657
|
-
const sel = this.selected();
|
|
21658
|
-
if (Array.isArray(sel)) {
|
|
21659
|
-
return sel.includes(value);
|
|
21660
|
-
}
|
|
21661
|
-
return sel === value;
|
|
21662
|
-
};
|
|
21692
|
+
isSelected = (value) => this.selected().includes(value);
|
|
21663
21693
|
// Only emit a selection event for enabled options.
|
|
21664
21694
|
selectOption = (option) => {
|
|
21665
21695
|
if (option.disabled)
|
|
@@ -21750,8 +21780,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
21750
21780
|
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}.dropdown-box{overflow-y:auto;max-height:15rem;margin:0;padding:.375rem;list-style:none;border:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));border-radius:var(--m-input-radius, .5rem);background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:dropdown-in .2s ease-out}.dropdown-box__checkbox{flex-shrink:0;width:14px;height:14px;margin-right:8px;pointer-events:none;accent-color:var(--m-mm);cursor:pointer}.dropdown-box__option{display:flex;align-items:center;padding:.625rem .75rem;border-radius:.375rem;cursor:pointer;font-size:.875rem;color:var(--m-text);transition:background .15s ease}.dropdown-box__option:hover,.dropdown-box__option--active{background:color-mix(in srgb,var(--m-focus) 8%,transparent)}.dropdown-box__option--selected{font-weight:600;color:var(--m-mm)}.dropdown-box__option--disabled{opacity:.4;pointer-events:none}.dropdown-box__empty{padding:.75rem;text-align:center;color:var(--m-text-tertiary);font-size:.875rem}@keyframes dropdown-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host(.open-upward) .dropdown-box{animation:dropdown-in-up .2s ease-out}@keyframes dropdown-in-up{0%{opacity:0;transform:scale(.95) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}:host-context(.align-bottom) .dropdown-box{max-height:70vh;border:none;border-radius:0;background:transparent;box-shadow:none;animation:none}\n"] }]
|
|
21751
21781
|
}], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], activeIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeIndex", required: false }] }], action: [{ type: i0.Output, args: ["action"] }] } });
|
|
21752
21782
|
|
|
21753
|
-
|
|
21754
|
-
|
|
21783
|
+
/** The trigger both option Fields draw: a searchable text input and a chevron. */
|
|
21784
|
+
const DROPDOWN_TEMPLATE = `
|
|
21785
|
+
@if (config(); as dropdown) {
|
|
21786
|
+
@if (dropdown.label) {
|
|
21787
|
+
<m-label
|
|
21788
|
+
[for]="dropdown.name ?? ''"
|
|
21789
|
+
[placeholder]="dropdown.label"
|
|
21790
|
+
[params]="dropdown.params"
|
|
21791
|
+
[required]="required()"
|
|
21792
|
+
[disabled]="disabled()"
|
|
21793
|
+
/>
|
|
21794
|
+
}
|
|
21795
|
+
<div
|
|
21796
|
+
class="trigger-wrap"
|
|
21797
|
+
#wrapper
|
|
21798
|
+
[mSelector]="selectorConfig()"
|
|
21799
|
+
[disabled]="disabled() || readonly() || !!config()?.readonly"
|
|
21800
|
+
(opened)="onOpened()"
|
|
21801
|
+
(closed)="onClosed()"
|
|
21802
|
+
(focusin)="isFocused.set(true)"
|
|
21803
|
+
(focusout)="isFocused.set(false)"
|
|
21804
|
+
>
|
|
21805
|
+
<m-text-input
|
|
21806
|
+
[config]="triggerInputConfig()"
|
|
21807
|
+
[value]="displayValue()"
|
|
21808
|
+
[disabled]="disabled()"
|
|
21809
|
+
[invalid]="invalid()"
|
|
21810
|
+
[hideErrors]="true"
|
|
21811
|
+
[(touched)]="touched"
|
|
21812
|
+
[focused]="focused()"
|
|
21813
|
+
(valueChange)="onInput($event)"
|
|
21814
|
+
(click)="preventToggleWhenOpen($event)"
|
|
21815
|
+
(keydown.space)="$event.stopPropagation()"
|
|
21816
|
+
(keydown.enter)="onEnter($event)"
|
|
21817
|
+
(keydown.arrowdown)="onArrow($event, 1)"
|
|
21818
|
+
(keydown.arrowup)="onArrow($event, -1)"
|
|
21819
|
+
(keydown.tab)="$event.stopPropagation()"
|
|
21820
|
+
/>
|
|
21821
|
+
<m-button [disabled]="disabled()" [config]="chevron()" />
|
|
21822
|
+
</div>
|
|
21823
|
+
@if (showErrors()) {
|
|
21824
|
+
@for (error of errors(); track $index) {
|
|
21825
|
+
<m-text-output
|
|
21826
|
+
variant="footer"
|
|
21827
|
+
color="error"
|
|
21828
|
+
[label]="error.message"
|
|
21829
|
+
/>
|
|
21830
|
+
}
|
|
21831
|
+
}
|
|
21832
|
+
}
|
|
21833
|
+
`;
|
|
21834
|
+
const DROPDOWN_IMPORTS = [
|
|
21835
|
+
LabelComponent,
|
|
21836
|
+
TextOutputComponent,
|
|
21837
|
+
TextInputComponent,
|
|
21838
|
+
ButtonComponent,
|
|
21839
|
+
SelectorDirective,
|
|
21840
|
+
];
|
|
21841
|
+
/**
|
|
21842
|
+
* Everything a Dropdown and a Multiselect share: the options, the search, the
|
|
21843
|
+
* keyboard walk and the panel. What differs is only what the Field holds — one
|
|
21844
|
+
* value or a list — so a subclass says which values are selected and what a
|
|
21845
|
+
* pick does to them.
|
|
21846
|
+
*/
|
|
21847
|
+
class BaseDropdownComponent extends BaseInputComponent {
|
|
21755
21848
|
config = input(...(ngDevMode ? [undefined, { debugName: "config" }] : /* istanbul ignore next */ []));
|
|
21756
21849
|
required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
21757
21850
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
@@ -21783,7 +21876,6 @@ class DropdownInputComponent extends BaseInputComponent {
|
|
|
21783
21876
|
// what clicking that input already does, so Tab walks past it.
|
|
21784
21877
|
tabindex: -1,
|
|
21785
21878
|
}), ...(ngDevMode ? [{ debugName: "chevron" }] : /* istanbul ignore next */ []));
|
|
21786
|
-
isMultiselect = computed(() => this.config()?.type === InputType.MULTISELECT || !!this.config()?.multiple, ...(ngDevMode ? [{ debugName: "isMultiselect" }] : /* istanbul ignore next */ []));
|
|
21787
21879
|
triggerInputConfig = computed(() => {
|
|
21788
21880
|
const dropdown = this.config();
|
|
21789
21881
|
return {
|
|
@@ -21797,9 +21889,8 @@ class DropdownInputComponent extends BaseInputComponent {
|
|
|
21797
21889
|
dropdownOptions = computed(() => {
|
|
21798
21890
|
const runtimeOptions = this.options();
|
|
21799
21891
|
const source = runtimeOptions ?? this.config()?.options;
|
|
21800
|
-
if (typeof source === 'function')
|
|
21892
|
+
if (typeof source === 'function')
|
|
21801
21893
|
return source();
|
|
21802
|
-
}
|
|
21803
21894
|
if (source?.length)
|
|
21804
21895
|
return source;
|
|
21805
21896
|
return this.assetOptions();
|
|
@@ -21820,7 +21911,8 @@ class DropdownInputComponent extends BaseInputComponent {
|
|
|
21820
21911
|
return this.dropdownOptions();
|
|
21821
21912
|
return this.dropdownOptions().filter((o) => {
|
|
21822
21913
|
const label = this.optionLabel(o).toLowerCase();
|
|
21823
|
-
return label.includes(search) ||
|
|
21914
|
+
return (label.includes(search) ||
|
|
21915
|
+
String(o.value).toLowerCase().includes(search));
|
|
21824
21916
|
});
|
|
21825
21917
|
}, ...(ngDevMode ? [{ debugName: "filteredOptions" }] : /* istanbul ignore next */ []));
|
|
21826
21918
|
/** The option ↑/↓ point at while the panel is open; -1 is none. Reset as the search narrows the list. */
|
|
@@ -21836,58 +21928,31 @@ class DropdownInputComponent extends BaseInputComponent {
|
|
|
21836
21928
|
}
|
|
21837
21929
|
return from;
|
|
21838
21930
|
};
|
|
21839
|
-
|
|
21840
|
-
|
|
21841
|
-
|
|
21842
|
-
|
|
21843
|
-
if (this.isMultiselect()) {
|
|
21844
|
-
if (Array.isArray(val)) {
|
|
21845
|
-
if (val.length === 0)
|
|
21846
|
-
return '';
|
|
21847
|
-
if (val.length === 1) {
|
|
21848
|
-
return this.optionLabel(this.dropdownOptions().find((o) => o.value === val[0]));
|
|
21849
|
-
}
|
|
21850
|
-
const translation = this.translateService.translate(`selected?count=${val.length}`);
|
|
21851
|
-
return translation.includes('selected')
|
|
21852
|
-
? `${val.length} Selected`
|
|
21853
|
-
: translation;
|
|
21854
|
-
}
|
|
21931
|
+
/** One pick reads as its option's label, several as a count. */
|
|
21932
|
+
selectionLabel = computed(() => {
|
|
21933
|
+
const values = this.selectedValues();
|
|
21934
|
+
if (values.length === 0)
|
|
21855
21935
|
return '';
|
|
21856
|
-
|
|
21857
|
-
|
|
21858
|
-
|
|
21859
|
-
}
|
|
21860
|
-
|
|
21936
|
+
if (values.length === 1) {
|
|
21937
|
+
return this.optionLabel(this.dropdownOptions().find((o) => o.value === values[0]));
|
|
21938
|
+
}
|
|
21939
|
+
const translation = this.translateService.translate(`selected?count=${values.length}`);
|
|
21940
|
+
return translation.includes('selected')
|
|
21941
|
+
? `${values.length} Selected`
|
|
21942
|
+
: translation;
|
|
21943
|
+
}, ...(ngDevMode ? [{ debugName: "selectionLabel" }] : /* istanbul ignore next */ []));
|
|
21944
|
+
displayValue = computed(() => this.toggle() ? this.searchTerm() : this.selectionLabel(), ...(ngDevMode ? [{ debugName: "displayValue" }] : /* istanbul ignore next */ []));
|
|
21861
21945
|
placeholderText = computed(() => {
|
|
21862
|
-
const config = this.config();
|
|
21863
21946
|
if (this.toggle()) {
|
|
21864
|
-
const
|
|
21865
|
-
if (
|
|
21866
|
-
|
|
21867
|
-
if (val.length === 1) {
|
|
21868
|
-
return this.optionLabel(this.dropdownOptions().find((o) => o.value === val[0]));
|
|
21869
|
-
}
|
|
21870
|
-
const translation = this.translateService.translate(`selected?count=${val.length}`);
|
|
21871
|
-
return translation.includes('selected')
|
|
21872
|
-
? `${val.length} Selected`
|
|
21873
|
-
: translation;
|
|
21874
|
-
}
|
|
21875
|
-
}
|
|
21876
|
-
else {
|
|
21877
|
-
const label = this.optionLabel(this.dropdownOptions().find((o) => o.value === val));
|
|
21878
|
-
if (label)
|
|
21879
|
-
return label;
|
|
21880
|
-
}
|
|
21947
|
+
const label = this.selectionLabel();
|
|
21948
|
+
if (label)
|
|
21949
|
+
return label;
|
|
21881
21950
|
}
|
|
21882
|
-
|
|
21883
|
-
|
|
21884
|
-
|
|
21951
|
+
const placeholder = this.config()
|
|
21952
|
+
?.placeholder;
|
|
21953
|
+
return placeholder ? this.translateService.translate(placeholder) : '';
|
|
21885
21954
|
}, ...(ngDevMode ? [{ debugName: "placeholderText" }] : /* istanbul ignore next */ []));
|
|
21886
21955
|
wrapperRef = viewChild('wrapper', ...(ngDevMode ? [{ debugName: "wrapperRef" }] : /* istanbul ignore next */ []));
|
|
21887
|
-
setValue = (value) => {
|
|
21888
|
-
this.value.set(value);
|
|
21889
|
-
this.touched.set(true);
|
|
21890
|
-
};
|
|
21891
21956
|
selectorConfig = computed(() => ({
|
|
21892
21957
|
component: DropdownBoxComponent,
|
|
21893
21958
|
base: 'm-dropdown-input',
|
|
@@ -21896,38 +21961,22 @@ class DropdownInputComponent extends BaseInputComponent {
|
|
|
21896
21961
|
dir: this.dir(),
|
|
21897
21962
|
bindings: [
|
|
21898
21963
|
inputBinding('options', this.filteredOptions),
|
|
21899
|
-
inputBinding('selected', this.
|
|
21900
|
-
inputBinding('multiple', this.
|
|
21964
|
+
inputBinding('selected', this.selectedValues),
|
|
21965
|
+
inputBinding('multiple', () => this.multiple),
|
|
21901
21966
|
inputBinding('activeIndex', this.activeIndex),
|
|
21902
|
-
outputBinding('action', this.selectOption),
|
|
21967
|
+
outputBinding('action', (option) => this.selectOption(option)),
|
|
21903
21968
|
],
|
|
21904
21969
|
}), ...(ngDevMode ? [{ debugName: "selectorConfig" }] : /* istanbul ignore next */ []));
|
|
21905
|
-
|
|
21906
|
-
|
|
21907
|
-
|
|
21908
|
-
|
|
21909
|
-
|
|
21910
|
-
let nextValue;
|
|
21911
|
-
if (index > -1) {
|
|
21912
|
-
nextValue = current.filter((v) => v !== option.value);
|
|
21913
|
-
}
|
|
21914
|
-
else {
|
|
21915
|
-
nextValue = [...current, option.value];
|
|
21916
|
-
}
|
|
21917
|
-
this.setValue(nextValue);
|
|
21918
|
-
}
|
|
21919
|
-
else {
|
|
21920
|
-
this.setValue(option.value);
|
|
21921
|
-
this.toggle.set(false);
|
|
21922
|
-
this.searchTerm.set('');
|
|
21923
|
-
setTimeout(() => this.wrapperRef()?.nativeElement.click(), 0);
|
|
21924
|
-
}
|
|
21970
|
+
/** Shuts the panel after a pick, the way a click on the trigger would. */
|
|
21971
|
+
closePanel = () => {
|
|
21972
|
+
this.toggle.set(false);
|
|
21973
|
+
this.searchTerm.set('');
|
|
21974
|
+
setTimeout(() => this.wrapperRef()?.nativeElement.click(), 0);
|
|
21925
21975
|
};
|
|
21926
21976
|
onOpened = () => {
|
|
21927
21977
|
this.toggle.set(true);
|
|
21928
21978
|
this.searchTerm.set('');
|
|
21929
|
-
const
|
|
21930
|
-
const current = Array.isArray(val) ? val[0] : val;
|
|
21979
|
+
const current = this.selectedValues()[0];
|
|
21931
21980
|
this.activeIndex.set(this.filteredOptions().findIndex((o) => o.value === current));
|
|
21932
21981
|
};
|
|
21933
21982
|
// Focus stays in the trigger input (it is the search box), so ↑/↓ move the
|
|
@@ -21962,123 +22011,81 @@ class DropdownInputComponent extends BaseInputComponent {
|
|
|
21962
22011
|
event.stopPropagation();
|
|
21963
22012
|
}
|
|
21964
22013
|
};
|
|
21965
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type:
|
|
21966
|
-
static
|
|
21967
|
-
|
|
21968
|
-
|
|
21969
|
-
|
|
21970
|
-
|
|
21971
|
-
|
|
21972
|
-
|
|
21973
|
-
|
|
21974
|
-
|
|
21975
|
-
|
|
21976
|
-
|
|
21977
|
-
|
|
21978
|
-
|
|
21979
|
-
|
|
21980
|
-
|
|
21981
|
-
|
|
21982
|
-
(
|
|
21983
|
-
|
|
21984
|
-
|
|
21985
|
-
(
|
|
21986
|
-
|
|
21987
|
-
<m-text-input
|
|
21988
|
-
[config]="triggerInputConfig()"
|
|
21989
|
-
[value]="displayValue()"
|
|
21990
|
-
[disabled]="disabled()"
|
|
21991
|
-
[invalid]="invalid()"
|
|
21992
|
-
[hideErrors]="true"
|
|
21993
|
-
[(touched)]="touched"
|
|
21994
|
-
[focused]="focused()"
|
|
21995
|
-
(valueChange)="onInput($event)"
|
|
21996
|
-
(click)="preventToggleWhenOpen($event)"
|
|
21997
|
-
(keydown.space)="$event.stopPropagation()"
|
|
21998
|
-
(keydown.enter)="onEnter($event)"
|
|
21999
|
-
(keydown.arrowdown)="onArrow($event, 1)"
|
|
22000
|
-
(keydown.arrowup)="onArrow($event, -1)"
|
|
22001
|
-
(keydown.tab)="$event.stopPropagation()"
|
|
22002
|
-
/>
|
|
22003
|
-
<m-button [disabled]="disabled()" [config]="chevron()" />
|
|
22004
|
-
</div>
|
|
22005
|
-
@if (showErrors()) {
|
|
22006
|
-
@for (error of errors(); track $index) {
|
|
22007
|
-
<m-text-output
|
|
22008
|
-
variant="footer"
|
|
22009
|
-
color="error"
|
|
22010
|
-
[label]="error.message"
|
|
22011
|
-
/>
|
|
22012
|
-
}
|
|
22013
|
-
}
|
|
22014
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: BaseDropdownComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
22015
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.9", type: BaseDropdownComponent, isStandalone: true, inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, focused: { classPropertyName: "focused", publicName: "focused", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, toggle: { classPropertyName: "toggle", publicName: "toggle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { touched: "touchedChange", toggle: "toggleChange" }, viewQueries: [{ propertyName: "wrapperRef", first: true, predicate: ["wrapper"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
|
|
22016
|
+
}
|
|
22017
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: BaseDropdownComponent, decorators: [{
|
|
22018
|
+
type: Directive
|
|
22019
|
+
}], propDecorators: { 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 }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], dir: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], toggle: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggle", required: false }] }, { type: i0.Output, args: ["toggleChange"] }], wrapperRef: [{ type: i0.ViewChild, args: ['wrapper', { isSignal: true }] }] } });
|
|
22020
|
+
|
|
22021
|
+
/** One value from a list. A list of values is `m-multiselect-input`. */
|
|
22022
|
+
class DropdownInputComponent extends BaseDropdownComponent {
|
|
22023
|
+
value = model(undefined, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
22024
|
+
multiple = false;
|
|
22025
|
+
selectedValues = computed(() => {
|
|
22026
|
+
const value = this.value();
|
|
22027
|
+
return value === undefined || value === '' ? [] : [value];
|
|
22028
|
+
}, ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
|
|
22029
|
+
setValue = (value) => {
|
|
22030
|
+
this.value.set(value);
|
|
22031
|
+
this.touched.set(true);
|
|
22032
|
+
};
|
|
22033
|
+
selectOption(option) {
|
|
22034
|
+
this.setValue(option.value);
|
|
22035
|
+
this.closePanel();
|
|
22014
22036
|
}
|
|
22015
|
-
|
|
22037
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DropdownInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
22038
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: DropdownInputComponent, isStandalone: true, selector: "m-dropdown-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, usesInheritance: true, ngImport: i0, template: "\n @if (config(); as dropdown) {\n @if (dropdown.label) {\n <m-label\n [for]=\"dropdown.name ?? ''\"\n [placeholder]=\"dropdown.label\"\n [params]=\"dropdown.params\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n />\n }\n <div\n class=\"trigger-wrap\"\n #wrapper\n [mSelector]=\"selectorConfig()\"\n [disabled]=\"disabled() || readonly() || !!config()?.readonly\"\n (opened)=\"onOpened()\"\n (closed)=\"onClosed()\"\n (focusin)=\"isFocused.set(true)\"\n (focusout)=\"isFocused.set(false)\"\n >\n <m-text-input\n [config]=\"triggerInputConfig()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [invalid]=\"invalid()\"\n [hideErrors]=\"true\"\n [(touched)]=\"touched\"\n [focused]=\"focused()\"\n (valueChange)=\"onInput($event)\"\n (click)=\"preventToggleWhenOpen($event)\"\n (keydown.space)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onEnter($event)\"\n (keydown.arrowdown)=\"onArrow($event, 1)\"\n (keydown.arrowup)=\"onArrow($event, -1)\"\n (keydown.tab)=\"$event.stopPropagation()\"\n />\n <m-button [disabled]=\"disabled()\" [config]=\"chevron()\" />\n </div>\n @if (showErrors()) {\n @for (error of errors(); track $index) {\n <m-text-output\n variant=\"footer\"\n color=\"error\"\n [label]=\"error.message\"\n />\n }\n }\n }\n", 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:contents}.trigger-wrap{position:relative;--m-text-input-padding-right: 2.25em }.trigger-wrap m-button{position:absolute;right:0;top:0;bottom:0;--m-button-size: 1em !important;height:100%;border-radius:0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0;--m-button-radius: 0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0}\n"], dependencies: [{ kind: "component", type: LabelComponent, selector: "m-label", inputs: ["for", "placeholder", "params", "required", "disabled", "color", "noTranslate"] }, { kind: "component", type: TextOutputComponent, selector: "m-text-output", inputs: ["config", "align", "variant", "color", "fontWeight", "label", "noTranslate", "params"], outputs: ["configChange", "clicked"] }, { kind: "component", type: TextInputComponent, selector: "m-text-input", inputs: ["value", "config", "required", "disabled", "invalid", "touched", "focused", "errors", "hideErrors"], 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", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }, { kind: "directive", type: SelectorDirective, selector: "[mSelector]", inputs: ["mSelector", "disabled"], outputs: ["opened", "closed"], exportAs: ["mSelector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
22016
22039
|
}
|
|
22017
22040
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DropdownInputComponent, decorators: [{
|
|
22018
22041
|
type: Component,
|
|
22019
|
-
args: [{ selector: 'm-dropdown-input', template:
|
|
22020
|
-
|
|
22021
|
-
@if (dropdown.label) {
|
|
22022
|
-
<m-label
|
|
22023
|
-
[for]="dropdown.name ?? ''"
|
|
22024
|
-
[placeholder]="dropdown.label"
|
|
22025
|
-
[params]="dropdown.params"
|
|
22026
|
-
[required]="required()"
|
|
22027
|
-
[disabled]="disabled()"
|
|
22028
|
-
/>
|
|
22029
|
-
}
|
|
22030
|
-
<div
|
|
22031
|
-
class="trigger-wrap"
|
|
22032
|
-
#wrapper
|
|
22033
|
-
[mSelector]="selectorConfig()"
|
|
22034
|
-
[disabled]="disabled() || readonly() || !!config()?.readonly"
|
|
22035
|
-
(opened)="onOpened()"
|
|
22036
|
-
(closed)="onClosed()"
|
|
22037
|
-
(focusin)="isFocused.set(true)"
|
|
22038
|
-
(focusout)="isFocused.set(false)"
|
|
22039
|
-
>
|
|
22040
|
-
<m-text-input
|
|
22041
|
-
[config]="triggerInputConfig()"
|
|
22042
|
-
[value]="displayValue()"
|
|
22043
|
-
[disabled]="disabled()"
|
|
22044
|
-
[invalid]="invalid()"
|
|
22045
|
-
[hideErrors]="true"
|
|
22046
|
-
[(touched)]="touched"
|
|
22047
|
-
[focused]="focused()"
|
|
22048
|
-
(valueChange)="onInput($event)"
|
|
22049
|
-
(click)="preventToggleWhenOpen($event)"
|
|
22050
|
-
(keydown.space)="$event.stopPropagation()"
|
|
22051
|
-
(keydown.enter)="onEnter($event)"
|
|
22052
|
-
(keydown.arrowdown)="onArrow($event, 1)"
|
|
22053
|
-
(keydown.arrowup)="onArrow($event, -1)"
|
|
22054
|
-
(keydown.tab)="$event.stopPropagation()"
|
|
22055
|
-
/>
|
|
22056
|
-
<m-button [disabled]="disabled()" [config]="chevron()" />
|
|
22057
|
-
</div>
|
|
22058
|
-
@if (showErrors()) {
|
|
22059
|
-
@for (error of errors(); track $index) {
|
|
22060
|
-
<m-text-output
|
|
22061
|
-
variant="footer"
|
|
22062
|
-
color="error"
|
|
22063
|
-
[label]="error.message"
|
|
22064
|
-
/>
|
|
22065
|
-
}
|
|
22066
|
-
}
|
|
22067
|
-
}
|
|
22068
|
-
`, imports: [
|
|
22069
|
-
LabelComponent,
|
|
22070
|
-
TextOutputComponent,
|
|
22071
|
-
TextInputComponent,
|
|
22072
|
-
ButtonComponent,
|
|
22073
|
-
SelectorDirective,
|
|
22074
|
-
], 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:contents}.trigger-wrap{position:relative;--m-text-input-padding-right: 2.25em }.trigger-wrap m-button{position:absolute;right:0;top:0;bottom:0;--m-button-size: 1em !important;height:100%;border-radius:0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0;--m-button-radius: 0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0}\n"] }]
|
|
22075
|
-
}], 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 }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], dir: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], toggle: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggle", required: false }] }, { type: i0.Output, args: ["toggleChange"] }], wrapperRef: [{ type: i0.ViewChild, args: ['wrapper', { isSignal: true }] }] } });
|
|
22042
|
+
args: [{ selector: 'm-dropdown-input', template: DROPDOWN_TEMPLATE, imports: DROPDOWN_IMPORTS, 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:contents}.trigger-wrap{position:relative;--m-text-input-padding-right: 2.25em }.trigger-wrap m-button{position:absolute;right:0;top:0;bottom:0;--m-button-size: 1em !important;height:100%;border-radius:0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0;--m-button-radius: 0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0}\n"] }]
|
|
22043
|
+
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
|
|
22076
22044
|
|
|
22077
22045
|
var dropdown = /*#__PURE__*/Object.freeze({
|
|
22078
22046
|
__proto__: null,
|
|
22079
22047
|
DropdownInputComponent: DropdownInputComponent
|
|
22080
22048
|
});
|
|
22081
22049
|
|
|
22050
|
+
/** A list of values from a list. One value is `m-dropdown-input`. */
|
|
22051
|
+
class MultiselectInputComponent extends BaseDropdownComponent {
|
|
22052
|
+
value = model([], ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
22053
|
+
multiple = true;
|
|
22054
|
+
// Read defensively: an untyped form model can still hand over one bare value.
|
|
22055
|
+
selectedValues = computed(() => {
|
|
22056
|
+
const value = this.value();
|
|
22057
|
+
if (Array.isArray(value))
|
|
22058
|
+
return value;
|
|
22059
|
+
return typeof value === 'string' || typeof value === 'number'
|
|
22060
|
+
? value === ''
|
|
22061
|
+
? []
|
|
22062
|
+
: [value]
|
|
22063
|
+
: [];
|
|
22064
|
+
}, ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
|
|
22065
|
+
setValue = (value) => {
|
|
22066
|
+
this.value.set(value);
|
|
22067
|
+
this.touched.set(true);
|
|
22068
|
+
};
|
|
22069
|
+
// The panel stays open across picks; each one ticks or unticks its row.
|
|
22070
|
+
selectOption(option) {
|
|
22071
|
+
const current = this.selectedValues();
|
|
22072
|
+
this.setValue(current.includes(option.value)
|
|
22073
|
+
? current.filter((v) => v !== option.value)
|
|
22074
|
+
: [...current, option.value]);
|
|
22075
|
+
}
|
|
22076
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MultiselectInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
22077
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: MultiselectInputComponent, isStandalone: true, selector: "m-multiselect-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, usesInheritance: true, ngImport: i0, template: "\n @if (config(); as dropdown) {\n @if (dropdown.label) {\n <m-label\n [for]=\"dropdown.name ?? ''\"\n [placeholder]=\"dropdown.label\"\n [params]=\"dropdown.params\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n />\n }\n <div\n class=\"trigger-wrap\"\n #wrapper\n [mSelector]=\"selectorConfig()\"\n [disabled]=\"disabled() || readonly() || !!config()?.readonly\"\n (opened)=\"onOpened()\"\n (closed)=\"onClosed()\"\n (focusin)=\"isFocused.set(true)\"\n (focusout)=\"isFocused.set(false)\"\n >\n <m-text-input\n [config]=\"triggerInputConfig()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [invalid]=\"invalid()\"\n [hideErrors]=\"true\"\n [(touched)]=\"touched\"\n [focused]=\"focused()\"\n (valueChange)=\"onInput($event)\"\n (click)=\"preventToggleWhenOpen($event)\"\n (keydown.space)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onEnter($event)\"\n (keydown.arrowdown)=\"onArrow($event, 1)\"\n (keydown.arrowup)=\"onArrow($event, -1)\"\n (keydown.tab)=\"$event.stopPropagation()\"\n />\n <m-button [disabled]=\"disabled()\" [config]=\"chevron()\" />\n </div>\n @if (showErrors()) {\n @for (error of errors(); track $index) {\n <m-text-output\n variant=\"footer\"\n color=\"error\"\n [label]=\"error.message\"\n />\n }\n }\n }\n", 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:contents}.trigger-wrap{position:relative;--m-text-input-padding-right: 2.25em }.trigger-wrap m-button{position:absolute;right:0;top:0;bottom:0;--m-button-size: 1em !important;height:100%;border-radius:0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0;--m-button-radius: 0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0}\n"], dependencies: [{ kind: "component", type: LabelComponent, selector: "m-label", inputs: ["for", "placeholder", "params", "required", "disabled", "color", "noTranslate"] }, { kind: "component", type: TextOutputComponent, selector: "m-text-output", inputs: ["config", "align", "variant", "color", "fontWeight", "label", "noTranslate", "params"], outputs: ["configChange", "clicked"] }, { kind: "component", type: TextInputComponent, selector: "m-text-input", inputs: ["value", "config", "required", "disabled", "invalid", "touched", "focused", "errors", "hideErrors"], 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", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }, { kind: "directive", type: SelectorDirective, selector: "[mSelector]", inputs: ["mSelector", "disabled"], outputs: ["opened", "closed"], exportAs: ["mSelector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
22078
|
+
}
|
|
22079
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MultiselectInputComponent, decorators: [{
|
|
22080
|
+
type: Component,
|
|
22081
|
+
args: [{ selector: 'm-multiselect-input', template: DROPDOWN_TEMPLATE, imports: DROPDOWN_IMPORTS, 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:contents}.trigger-wrap{position:relative;--m-text-input-padding-right: 2.25em }.trigger-wrap m-button{position:absolute;right:0;top:0;bottom:0;--m-button-size: 1em !important;height:100%;border-radius:0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0;--m-button-radius: 0 var(--m-input-radius, calc(var(--input-size, 1em) * .5)) var(--m-input-radius, calc(var(--input-size, 1em) * .5)) 0}\n"] }]
|
|
22082
|
+
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
|
|
22083
|
+
|
|
22084
|
+
var multiselect = /*#__PURE__*/Object.freeze({
|
|
22085
|
+
__proto__: null,
|
|
22086
|
+
MultiselectInputComponent: MultiselectInputComponent
|
|
22087
|
+
});
|
|
22088
|
+
|
|
22082
22089
|
const COLOR_PICKER_FILE_UPLOAD_CONFIG = {
|
|
22083
22090
|
accept: ['image/*'],
|
|
22084
22091
|
multiple: false,
|
|
@@ -23314,7 +23321,7 @@ class WrapperInputComponent extends ConfigComponent {
|
|
|
23314
23321
|
break;
|
|
23315
23322
|
}
|
|
23316
23323
|
case InputType.TOGGLE: {
|
|
23317
|
-
const { ToggleInputComponent } = await import('./magmonium-one-toggle-
|
|
23324
|
+
const { ToggleInputComponent } = await import('./magmonium-one-toggle-zniJyl09.mjs');
|
|
23318
23325
|
this.createDynamicComponent(seq, ToggleInputComponent, [], true);
|
|
23319
23326
|
break;
|
|
23320
23327
|
}
|
|
@@ -23326,12 +23333,12 @@ class WrapperInputComponent extends ConfigComponent {
|
|
|
23326
23333
|
break;
|
|
23327
23334
|
}
|
|
23328
23335
|
case InputType.PASSWORD: {
|
|
23329
|
-
const { PasswordInputComponent } = await import('./magmonium-one-password-
|
|
23336
|
+
const { PasswordInputComponent } = await import('./magmonium-one-password-CX1OjX5P.mjs');
|
|
23330
23337
|
this.createDynamicComponent(seq, PasswordInputComponent);
|
|
23331
23338
|
break;
|
|
23332
23339
|
}
|
|
23333
23340
|
case InputType.OTP: {
|
|
23334
|
-
const { OtpInputComponent } = await import('./magmonium-one-otp-
|
|
23341
|
+
const { OtpInputComponent } = await import('./magmonium-one-otp-CpjpaJdi.mjs');
|
|
23335
23342
|
this.createDynamicComponent(seq, OtpInputComponent);
|
|
23336
23343
|
break;
|
|
23337
23344
|
}
|
|
@@ -23374,7 +23381,6 @@ class WrapperInputComponent extends ConfigComponent {
|
|
|
23374
23381
|
this.createDynamicComponent(seq, TextareaInputComponent);
|
|
23375
23382
|
break;
|
|
23376
23383
|
}
|
|
23377
|
-
case InputType.MULTISELECT:
|
|
23378
23384
|
case InputType.DROPDOWN: {
|
|
23379
23385
|
const { DropdownInputComponent } = await Promise.resolve().then(function () { return dropdown; });
|
|
23380
23386
|
this.createDynamicComponent(seq, DropdownInputComponent, [
|
|
@@ -23383,6 +23389,14 @@ class WrapperInputComponent extends ConfigComponent {
|
|
|
23383
23389
|
]);
|
|
23384
23390
|
break;
|
|
23385
23391
|
}
|
|
23392
|
+
case InputType.MULTISELECT: {
|
|
23393
|
+
const { MultiselectInputComponent } = await Promise.resolve().then(function () { return multiselect; });
|
|
23394
|
+
this.createDynamicComponent(seq, MultiselectInputComponent, [
|
|
23395
|
+
inputBinding('options', this.options),
|
|
23396
|
+
inputBinding('dir', this.dir),
|
|
23397
|
+
]);
|
|
23398
|
+
break;
|
|
23399
|
+
}
|
|
23386
23400
|
case InputType.COLOR: {
|
|
23387
23401
|
const { ColorPickerInputComponent } = await Promise.resolve().then(function () { return colorPicker; });
|
|
23388
23402
|
this.createDynamicComponent(seq, ColorPickerInputComponent);
|
|
@@ -25045,7 +25059,7 @@ class FileUploadInputComponent extends BaseInputComponent {
|
|
|
25045
25059
|
const modalStore = this.modalStore;
|
|
25046
25060
|
if (!modalStore)
|
|
25047
25061
|
return undefined;
|
|
25048
|
-
const { ImageEditorComponent } = await import('./magmonium-one-image-editor-
|
|
25062
|
+
const { ImageEditorComponent } = await import('./magmonium-one-image-editor-DN8v0YOv.mjs');
|
|
25049
25063
|
const ratio = String(this.config()?.ratio ?? '');
|
|
25050
25064
|
return new Promise((resolve) => {
|
|
25051
25065
|
const modalRef = new ModalRef();
|
|
@@ -40669,5 +40683,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
40669
40683
|
* Generated bundle index. Do not edit.
|
|
40670
40684
|
*/
|
|
40671
40685
|
|
|
40672
|
-
export { CheckboxGroupComponent as $, ACCESS_DOMAINS as A, ButtonComponent as B, AssetUrlPipe as C, Assets as D, AuthActivityPageComponent as E, AuthApiService as F, AuthStore as G, HeaderComponent$1 as H, InputType as I, AutosizeDirective as J, BadgeComponent as K, LabelComponent as L, MODAL_REF as M, BandingComponent as N, BaseArrayInputComponent as O, BaseRootWebComponent as P, BaseWebComponent as Q, RangeInputComponent as R, ButtonGroupComponent as S, TranslatePipe as T, CALLING_APP_HEADER as U, COMPONENT_INPUT_REGISTRY as V, CardComponent as W, CardWrapperComponent as X, CarouselComponent as Y, ChartComponent as Z, ChatBubbleComponent as _, MIN_ZOOM as a, ICON_SOURCE as a$, CheckboxInputComponent as a0, ClearableInputComponent as a1, ClipboardService as a2, ColComponent as a3, ColorPickerInputComponent as a4, CommentItemComponent as a5, CommentsApiService as a6, CommentsComponent as a7, CommentsStore as a8, CompactNumberPipe as a9, DocComponent as aA, DocEditorComponent as aB, DomService as aC, Domain as aD, DotGridComponent as aE, DragListDirective as aF, DragListItemDirective as aG, DraggableDirective as aH, DropdownInputComponent as aI, FILTER_GROUP_CONTEXT as aJ, FILTER_RANGE_MODES as aK, FILTER_VARIANTS as aL, FLEX_VARIANTS as aM, FOLDER_PICK_LISTENER as aN, FORM_ASSET_FOLDER as aO, FileService as aP, FileUploadDirective as aQ, FileUploadInputComponent as aR, FlexComponent as aS, FlexItemComponent as aT, FormGroupComponent as aU, FrameComponent as aV, FreezeService as aW, GRID_BREAKPOINTS as aX, GetNavService as aY, HighlightDirective as aZ, HttpService as a_, ComponentInputComponent as aa, ComponentStepperComponent as ab, ConfigComponent as ac, ConfirmComponent as ad, ContextMenuComponent as ae, CustomIconClass as af, CustomIconEditComponent as ag, DEFAULT_DENIAL as ah, DEFAULT_DOC_DENSITY as ai, DEFAULT_DOC_VARIANT as aj, DEFAULT_FILTER_RANGE_MODE as ak, DEFAULT_FILTER_VARIANT as al, DEFAULT_NAV_PARAM as am, DEFAULT_NAV_SEGMENT as an, DEFAULT_SIZE as ao, DOCK_MIN_PAGE_REMAINDER as ap, DOCS_FOLDER as aq, DOC_ACTION_ICONS as ar, DOC_DENSITIES as as, DOC_EDIT_ACTIONS as at, DOC_TOOLBAR_GROUPS as au, DOC_VARIANTS as av, DashboardCardComponent as aw, DateInputComponent as ax, DatePickerComponent as ay, DeviceService as az, MAX_ZOOM as b, PLATFORM_NAV_MAP as b$, IS_SIDE_PANEL as b0, IconComponent as b1, ImgComponent as b2, InstrumentScoreComponent as b3, InterceptorObservables as b4, JumbotronComponent as b5, KeyValueComponent as b6, LAYOUT_ASSET_FOLDER as b7, LOGIN_COMPONENT as b8, LOGIN_STORE as b9, NAV_STORE_REF as bA, NAV_WC_COMPONENTS as bB, NAV_WIDGET_MAP as bC, NavComponent as bD, NavDetailsComponent as bE, NavHeaderComponent as bF, NavMenuComponent as bG, NavStore as bH, NavTrailComponent as bI, NothingComponent as bJ, NotificationElementComponent as bK, NotificationGroupComponent as bL, NotificationPopupComponent as bM, NotificationService as bN, NotificationStore as bO, NotificationType as bP, NotificationWidgetComponent as bQ, ONE_ASSET_BASE_URL as bR, OPTIONS_SOURCE as bS, OVERLAY_WIDGETS as bT, OneApp as bU, OptionsSourceDirective as bV, OverlayBodyComponent as bW, OverlayRef as bX, OverlayService as bY, PLATFORM_BUTTON_NAV_IDS as bZ, PLATFORM_EXTENSIBLE_NAV_IDS as b_, LanguageComponent as ba, ListComponent as bb, LogoComponent as bc, MAG_SOCKET_EVENT as bd, MHeroColorDirective as be, MHeroComponent as bf, MODAL_STORE_REF as bg, MOUNT_STATIC_SEGMENT as bh, MOUNT_TOKEN as bi, MRefDirective as bj, MStepComponent as bk, MURL_PARAM as bl, MURL_SEP as bm, ManifestEnrichmentService as bn, MarginDirective as bo, MenuComponent as bp, ModalDirective as bq, ModalRef as br, ModalStore as bs, MoneyPipe as bt, MultiRangeInputComponent as bu, MurlUrlSerializer as bv, NAV_DEFAULT_MURL as bw, NAV_ID_SEP as bx, NAV_MAIN_BUTTONS as by, NAV_SEGMENT_RE as bz, cropRect as c, SelectorDirective as c$, PLATFORM_ROOT_CHILDREN as c0, PaddingDirective as c1, PaginationComponent as c2, PanelComponent as c3, PercentagePipe as c4, PlaygroundComponent as c5, PositionDirective as c6, PwaInstallComponent as c7, RECENT_SEARCH_LIMIT as c8, REMOTE_PAGE_RELOAD as c9, SectionBackComponent as cA, SectionBadgesComponent as cB, SectionButtonGroupComponent as cC, SectionCardComponent as cD, SectionCarouselComponent as cE, SectionComponent as cF, SectionFilterComponent as cG, SectionFilterGroupComponent as cH, SectionFilterMenuComponent as cI, SectionFilterPanelComponent as cJ, SectionFilterRangePanelComponent as cK, SectionFooterComponent as cL, SectionFormComponent as cM, SectionFormItemComponent as cN, SectionHeaderComponent as cO, SectionHeroComponent as cP, SectionPaginationComponent as cQ, SectionSearchComponent as cR, SectionStepperComponent as cS, SectionTableCellComponent as cT, SectionTableComponent as cU, SectionTableRowComponent as cV, SectionTableSortPipe as cW, SectionTabsComponent as cX, SectionToggleComponent as cY, SectionToggleItemDirective as cZ, SelectableCardInputComponent as c_, ROOT_NAV$1 as ca, RadioGroupComponent as cb, RadioInputComponent as cc, RatingInputComponent as cd, ReactiveElementComponent as ce, RemoteComponent as cf, RemoteLoaderService as cg, ResizeElementComponent as ch, RouteContainer as ci, RowComponent as cj, SEARCH_QUERY as ck, SEARCH_RESULTS_EVENT as cl, SECTION_ACCORDION_GROUP as cm, SECTION_FORM_CONTEXT as cn, SECTION_TABLE_VARIANTS as co, SHARED_ICONS as cp, SIZE_CONTEXT as cq, SPACING_INWARD as cr, ScoreComponent as cs, ScrollComponent as ct, ScrollService as cu, SearchPanelComponent as cv, SearchStore as cw, SearchUserPanelComponent as cx, SectionAccordionDirective as cy, SectionAccordionGroupDirective as cz, drawFramed as d, bootstrapPwaInstall as d$, SettingsSearchBarComponent as d0, SettingsSearchService as d1, ShapeComponent as d2, SharedStoreRegistry as d3, SidePanelDirective as d4, Size as d5, SocketStore as d6, SortComponent as d7, StatComponent as d8, StepComponent as d9, TooltipComponent as dA, TranslateService as dB, TreeGridComponent as dC, URL_SEP as dD, USER_STORE_REF as dE, USER_TAB_MAP as dF, UniverseComponent as dG, UserApiService as dH, UserAvatarComponent as dI, UserComponent as dJ, UserNavComponent as dK, UserSettingsComponent as dL, UserStore as dM, WC_BUNDLE as dN, WC_NAVIGATE_EVENT as dO, WC_ROUTE_CHANGED_EVENT as dP, WC_SEARCH_GROUPS as dQ, WIN_USER_TAB_HOOK as dR, WIN_USER_TAB_KEY as dS, WatermarkComponent as dT, WcRouterStore as dU, WrapperInputComponent as dV, anchorNavId as dW, applyColorsToElement as dX, applyDocEdit as dY, assetOptions as dZ, bootstrapMagApp as d_, StepperComponent as da, StepsComponent as db, StorageService as dc, StrokeLinecap as dd, StrokeLinejoin as de, SummaryComponent as df, SvgGeneratorComponent as dg, SvgGeneratorService as dh, SvgService as di, TOTAL_COLUMNS as dj, TRANSLATION_SOURCE as dk, TableComponent as dl, TechnicalMeterComponent as dm, TextInputComponent as dn, TextareaInputComponent as dp, ThemeComponent as dq, ThemeDataService as dr, ThemeService as ds, ThemeStore as dt, TimeAgoPipe as du, TimelineComponent as dv, ToggleButtonComponent as dw, ToggleInputComponent as dx, ToggleRadioInputComponent as dy, ToolTipDirective as dz, encodeFramed as e, injectDefaultDenial as e$, buildWcBaseUrl as e0, calculateLuminance as e1, calculateRanks as e2, cellText as e3, checkDoc as e4, checkFilterCondition as e5, childNavId as e6, claimDenial as e7, classListSignal as e8, coerceSize as e9, filterOne as eA, filterPanelOf as eB, filterPanelWidth as eC, filterRange as eD, filterTreeGridRows as eE, filterValueList as eF, filterValues as eG, flattenTreeGridRows as eH, formatBadgeCount as eI, fullName as eJ, generateClipPath as eK, generateTransform as eL, getClassList as eM, getProperty as eN, getScrollParent as eO, getTierFromPreviewPath as eP, getTreeGridRow as eQ, getUniqueId as eR, getValue as eS, hasErrorComputed as eT, hexToRgb as eU, hslToRgb$1 as eV, initMagmoniumApp as eW, initialNotificationState as eX, initialState$2 as eY, initials as eZ, injectAuthenticate as e_, cornerEdge as ea, cornerSide as eb, createMap as ec, createPlatformNavMap as ed, definedWcTierOf as ee, deriveAvatarGradient as ef, deriveContrastColor as eg, deriveOppositeColor as eh, derivePropertyName as ei, docActionKey as ej, docAssetCandidates as ek, docProblemKey as el, docRemotePath as em, emailValidation as en, evaluate as eo, evaluateBool as ep, fieldBoolean as eq, fieldNumber as er, fieldString as es, filterHoldsList as et, filterHoldsOneBound as eu, filterHoldsOptions as ev, filterHoldsRange as ew, filterList as ex, filterNumber as ey, filterNumberList as ez, clampFraming as f, platformNavWidgets as f$, injectInstallApp as f0, injectParentSize as f1, injectScrollSticky as f2, isBootRedirect as f3, isButtonName as f4, isCancelledComputed as f5, isExtensiblePlatformNavId as f6, isJson as f7, isLoadingComputed as f8, isLocalhost as f9, minValidation as fA, miniMarkToHtml as fB, mountFor as fC, mountPatternProblem as fD, mountPatternText as fE, mountSegmentOf as fF, mountTokenOf as fG, navIdChain as fH, navIdFor as fI, navIdSegment as fJ, navIdToRoutePath as fK, navIdToSegments as fL, navParamOf as fM, navTailMatcher as fN, navToId as fO, navVisibilityGuard as fP, nextSectionTableSort as fQ, normalizeAssetOptions as fR, offsetOfLine as fS, parentNavId as fT, parseAddress as fU, parseColor as fV, parseMountPattern as fW, parsePatternNames as fX, patternValidation as fY, patternsValidation as fZ, permissionRefusal as f_, isNavInstanceConfig as fa, isNavMenuConfig as fb, isNavRowsConfig as fc, isNavVisibilityConfig as fd, isPlatformNavId as fe, isSize as ff, isTierPreview as fg, isUrlLocalhost as fh, isValidNavId as fi, isValidNavSegment as fj, isWebComponent as fk, linkToId as fl, linkToNav as fm, loadingActions as fn, mInterceptor as fo, manualValidation as fp, matchFieldValidation as fq, matchMount as fr, maxLengthValidation as fs, maxValidation as ft, mergePlatformNav as fu, mergeUnique as fv, mergeUniqueBy as fw, mergeUniqueWith as fx, minAgeValidation as fy, minLengthValidation as fz, BaseInputComponent as g, privateGuard as g0, processImageToSvg as g1, provideAppContext as g2, provideMagAppConfig as g3, provideMagWcConfig as g4, provideMagWcRoutes as g5, provideModalComponents as g6, provideMurlUrlSerializer as g7, provideNavWidgets as g8, provideOverlayWidgets as g9, setTreeGridChildren as gA, setWcTier as gB, settingsWidgets as gC, shouldShowBadge as gD, sortSectionTableRows as gE, splitNavId as gF, splitOnMatch as gG, stringToColor as gH, tailRouteOf as gI, toAttrBool as gJ, toAttrNumber as gK, toCssLength as gL, toHostNavId as gM, toLength$1 as gN, toLocalNavId as gO, toggleTreeGridRow as gP, unfetchedPlatformNav as gQ, ungroupedDocActions as gR, urlValidation as gS, wcTierOf as gT, providePlatformNavWidgets as ga, provideSearch as gb, provideSizeContext as gc, provideUserTabs as gd, publicGuard as ge, readFieldPatterns as gf, recordDefinedWcTier as gg, remoteOutletRoute as gh, renderAddress as gi, renderDocument as gj, requiredValidation as gk, resolveConfigAsset as gl, resolveIconSize as gm, resolvePallet as gn, resolvePatternRules as go, resolveSize as gp, resolveSpacing as gq, rgbToHex as gr, rgbToHsl as gs, rowHasChildren as gt, samePatterns as gu, sectionTableColumnId as gv, sectionTableColumnWidths as gw, sectionTableFrozenCount as gx, segmentsToNavId as gy, setProperty as gz, BaseTextInputComponent as h, initialFraming as i, TextOutputComponent as j, IS_DESIGN_MODE as k, APP_CONTEXT_REF as l, APP_LINK as m, ASSET_BASE_URL as n, outputSize as o, parseRatio as p, AccordionBodyDirective as q, renameForType as r, AccordionComponent as s, AccordionGroupComponent as t, ActionComponent as u, AnimatedGraphsComponent as v, AppCardComponent as w, AppRelationType as x, AppTileComponent as y, AssetStore as z };
|
|
40673
|
-
//# sourceMappingURL=magmonium-one-magmonium-one-
|
|
40686
|
+
export { CheckboxGroupComponent as $, ACCESS_DOMAINS as A, ButtonComponent as B, AssetUrlPipe as C, Assets as D, AuthActivityPageComponent as E, AuthApiService as F, AuthStore as G, HeaderComponent$1 as H, InputType as I, AutosizeDirective as J, BadgeComponent as K, LabelComponent as L, MODAL_REF as M, BandingComponent as N, BaseArrayInputComponent as O, BaseRootWebComponent as P, BaseWebComponent as Q, RangeInputComponent as R, ButtonGroupComponent as S, TranslatePipe as T, CALLING_APP_HEADER as U, COMPONENT_INPUT_REGISTRY as V, CardComponent as W, CardWrapperComponent as X, CarouselComponent as Y, ChartComponent as Z, ChatBubbleComponent as _, MIN_ZOOM as a, ICON_SOURCE as a$, CheckboxInputComponent as a0, ClearableInputComponent as a1, ClipboardService as a2, ColComponent as a3, ColorPickerInputComponent as a4, CommentItemComponent as a5, CommentsApiService as a6, CommentsComponent as a7, CommentsStore as a8, CompactNumberPipe as a9, DocComponent as aA, DocEditorComponent as aB, DomService as aC, Domain as aD, DotGridComponent as aE, DragListDirective as aF, DragListItemDirective as aG, DraggableDirective as aH, DropdownInputComponent as aI, FILTER_GROUP_CONTEXT as aJ, FILTER_RANGE_MODES as aK, FILTER_VARIANTS as aL, FLEX_VARIANTS as aM, FOLDER_PICK_LISTENER as aN, FORM_ASSET_FOLDER as aO, FileService as aP, FileUploadDirective as aQ, FileUploadInputComponent as aR, FlexComponent as aS, FlexItemComponent as aT, FormGroupComponent as aU, FrameComponent as aV, FreezeService as aW, GRID_BREAKPOINTS as aX, GetNavService as aY, HighlightDirective as aZ, HttpService as a_, ComponentInputComponent as aa, ComponentStepperComponent as ab, ConfigComponent as ac, ConfirmComponent as ad, ContextMenuComponent as ae, CustomIconClass as af, CustomIconEditComponent as ag, DEFAULT_DENIAL as ah, DEFAULT_DOC_DENSITY as ai, DEFAULT_DOC_VARIANT as aj, DEFAULT_FILTER_RANGE_MODE as ak, DEFAULT_FILTER_VARIANT as al, DEFAULT_NAV_PARAM as am, DEFAULT_NAV_SEGMENT as an, DEFAULT_SIZE as ao, DOCK_MIN_PAGE_REMAINDER as ap, DOCS_FOLDER as aq, DOC_ACTION_ICONS as ar, DOC_DENSITIES as as, DOC_EDIT_ACTIONS as at, DOC_TOOLBAR_GROUPS as au, DOC_VARIANTS as av, DashboardCardComponent as aw, DateInputComponent as ax, DatePickerComponent as ay, DeviceService as az, MAX_ZOOM as b, PLATFORM_EXTENSIBLE_NAV_IDS as b$, IS_SIDE_PANEL as b0, IconComponent as b1, ImgComponent as b2, InstrumentScoreComponent as b3, InterceptorObservables as b4, JumbotronComponent as b5, KeyValueComponent as b6, LAYOUT_ASSET_FOLDER as b7, LOGIN_COMPONENT as b8, LOGIN_STORE as b9, NAV_SEGMENT_RE as bA, NAV_STORE_REF as bB, NAV_WC_COMPONENTS as bC, NAV_WIDGET_MAP as bD, NavComponent as bE, NavDetailsComponent as bF, NavHeaderComponent as bG, NavMenuComponent as bH, NavStore as bI, NavTrailComponent as bJ, NothingComponent as bK, NotificationElementComponent as bL, NotificationGroupComponent as bM, NotificationPopupComponent as bN, NotificationService as bO, NotificationStore as bP, NotificationType as bQ, NotificationWidgetComponent as bR, ONE_ASSET_BASE_URL as bS, OPTIONS_SOURCE as bT, OVERLAY_WIDGETS as bU, OneApp as bV, OptionsSourceDirective as bW, OverlayBodyComponent as bX, OverlayRef as bY, OverlayService as bZ, PLATFORM_BUTTON_NAV_IDS as b_, LanguageComponent as ba, ListComponent as bb, LogoComponent as bc, MAG_SOCKET_EVENT as bd, MHeroColorDirective as be, MHeroComponent as bf, MODAL_STORE_REF as bg, MOUNT_STATIC_SEGMENT as bh, MOUNT_TOKEN as bi, MRefDirective as bj, MStepComponent as bk, MURL_PARAM as bl, MURL_SEP as bm, ManifestEnrichmentService as bn, MarginDirective as bo, MenuComponent as bp, ModalDirective as bq, ModalRef as br, ModalStore as bs, MoneyPipe as bt, MultiRangeInputComponent as bu, MultiselectInputComponent as bv, MurlUrlSerializer as bw, NAV_DEFAULT_MURL as bx, NAV_ID_SEP as by, NAV_MAIN_BUTTONS as bz, cropRect as c, SelectableCardInputComponent as c$, PLATFORM_NAV_MAP as c0, PLATFORM_ROOT_CHILDREN as c1, PaddingDirective as c2, PaginationComponent as c3, PanelComponent as c4, PercentagePipe as c5, PlaygroundComponent as c6, PositionDirective as c7, PwaInstallComponent as c8, RECENT_SEARCH_LIMIT as c9, SectionAccordionGroupDirective as cA, SectionBackComponent as cB, SectionBadgesComponent as cC, SectionButtonGroupComponent as cD, SectionCardComponent as cE, SectionCarouselComponent as cF, SectionComponent as cG, SectionFilterComponent as cH, SectionFilterGroupComponent as cI, SectionFilterMenuComponent as cJ, SectionFilterPanelComponent as cK, SectionFilterRangePanelComponent as cL, SectionFooterComponent as cM, SectionFormComponent as cN, SectionFormItemComponent as cO, SectionHeaderComponent as cP, SectionHeroComponent as cQ, SectionPaginationComponent as cR, SectionSearchComponent as cS, SectionStepperComponent as cT, SectionTableCellComponent as cU, SectionTableComponent as cV, SectionTableRowComponent as cW, SectionTableSortPipe as cX, SectionTabsComponent as cY, SectionToggleComponent as cZ, SectionToggleItemDirective as c_, REMOTE_PAGE_RELOAD as ca, ROOT_NAV$1 as cb, RadioGroupComponent as cc, RadioInputComponent as cd, RatingInputComponent as ce, ReactiveElementComponent as cf, RemoteComponent as cg, RemoteLoaderService as ch, ResizeElementComponent as ci, RouteContainer as cj, RowComponent as ck, SEARCH_QUERY as cl, SEARCH_RESULTS_EVENT as cm, SECTION_ACCORDION_GROUP as cn, SECTION_FORM_CONTEXT as co, SECTION_TABLE_VARIANTS as cp, SHARED_ICONS as cq, SIZE_CONTEXT as cr, SPACING_INWARD as cs, ScoreComponent as ct, ScrollComponent as cu, ScrollService as cv, SearchPanelComponent as cw, SearchStore as cx, SearchUserPanelComponent as cy, SectionAccordionDirective as cz, drawFramed as d, bootstrapMagApp as d$, SelectorDirective as d0, SettingsSearchBarComponent as d1, SettingsSearchService as d2, ShapeComponent as d3, SharedStoreRegistry as d4, SidePanelDirective as d5, Size as d6, SocketStore as d7, SortComponent as d8, StatComponent as d9, ToolTipDirective as dA, TooltipComponent as dB, TranslateService as dC, TreeGridComponent as dD, URL_SEP as dE, USER_STORE_REF as dF, USER_TAB_MAP as dG, UniverseComponent as dH, UserApiService as dI, UserAvatarComponent as dJ, UserComponent as dK, UserNavComponent as dL, UserSettingsComponent as dM, UserStore as dN, WC_BUNDLE as dO, WC_NAVIGATE_EVENT as dP, WC_ROUTE_CHANGED_EVENT as dQ, WC_SEARCH_GROUPS as dR, WIN_USER_TAB_HOOK as dS, WIN_USER_TAB_KEY as dT, WatermarkComponent as dU, WcRouterStore as dV, WrapperInputComponent as dW, anchorNavId as dX, applyColorsToElement as dY, applyDocEdit as dZ, assetOptions as d_, StepComponent as da, StepperComponent as db, StepsComponent as dc, StorageService as dd, StrokeLinecap as de, StrokeLinejoin as df, SummaryComponent as dg, SvgGeneratorComponent as dh, SvgGeneratorService as di, SvgService as dj, TOTAL_COLUMNS as dk, TRANSLATION_SOURCE as dl, TableComponent as dm, TechnicalMeterComponent as dn, TextInputComponent as dp, TextareaInputComponent as dq, ThemeComponent as dr, ThemeDataService as ds, ThemeService as dt, ThemeStore as du, TimeAgoPipe as dv, TimelineComponent as dw, ToggleButtonComponent as dx, ToggleInputComponent as dy, ToggleRadioInputComponent as dz, encodeFramed as e, injectAuthenticate as e$, bootstrapPwaInstall as e0, buildWcBaseUrl as e1, calculateLuminance as e2, calculateRanks as e3, cellText as e4, checkDoc as e5, checkFilterCondition as e6, childNavId as e7, claimDenial as e8, classListSignal as e9, filterNumberList as eA, filterOne as eB, filterPanelOf as eC, filterPanelWidth as eD, filterRange as eE, filterTreeGridRows as eF, filterValueList as eG, filterValues as eH, flattenTreeGridRows as eI, formatBadgeCount as eJ, fullName as eK, generateClipPath as eL, generateTransform as eM, getClassList as eN, getProperty as eO, getScrollParent as eP, getTierFromPreviewPath as eQ, getTreeGridRow as eR, getUniqueId as eS, getValue as eT, hasErrorComputed as eU, hexToRgb as eV, hslToRgb$1 as eW, initMagmoniumApp as eX, initialNotificationState as eY, initialState$2 as eZ, initials as e_, coerceSize as ea, cornerEdge as eb, cornerSide as ec, createMap as ed, createPlatformNavMap as ee, definedWcTierOf as ef, deriveAvatarGradient as eg, deriveContrastColor as eh, deriveOppositeColor as ei, derivePropertyName as ej, docActionKey as ek, docAssetCandidates as el, docProblemKey as em, docRemotePath as en, emailValidation as eo, evaluate as ep, evaluateBool as eq, fieldBoolean as er, fieldNumber as es, fieldString as et, filterHoldsList as eu, filterHoldsOneBound as ev, filterHoldsOptions as ew, filterHoldsRange as ex, filterList as ey, filterNumber as ez, clampFraming as f, permissionRefusal as f$, injectDefaultDenial as f0, injectInstallApp as f1, injectParentSize as f2, injectScrollSticky as f3, isBootRedirect as f4, isButtonName as f5, isCancelledComputed as f6, isExtensiblePlatformNavId as f7, isJson as f8, isLoadingComputed as f9, minLengthValidation as fA, minValidation as fB, miniMarkToHtml as fC, mountFor as fD, mountPatternProblem as fE, mountPatternText as fF, mountSegmentOf as fG, mountTokenOf as fH, navIdChain as fI, navIdFor as fJ, navIdSegment as fK, navIdToRoutePath as fL, navIdToSegments as fM, navParamOf as fN, navTailMatcher as fO, navToId as fP, navVisibilityGuard as fQ, nextSectionTableSort as fR, normalizeAssetOptions as fS, offsetOfLine as fT, parentNavId as fU, parseAddress as fV, parseColor as fW, parseMountPattern as fX, parsePatternNames as fY, patternValidation as fZ, patternsValidation as f_, isLocalhost as fa, isNavInstanceConfig as fb, isNavMenuConfig as fc, isNavRowsConfig as fd, isNavVisibilityConfig as fe, isPlatformNavId as ff, isSize as fg, isTierPreview as fh, isUrlLocalhost as fi, isValidNavId as fj, isValidNavSegment as fk, isWebComponent as fl, linkToId as fm, linkToNav as fn, loadingActions as fo, mInterceptor as fp, manualValidation as fq, matchFieldValidation as fr, matchMount as fs, maxLengthValidation as ft, maxValidation as fu, mergePlatformNav as fv, mergeUnique as fw, mergeUniqueBy as fx, mergeUniqueWith as fy, minAgeValidation as fz, BaseInputComponent as g, platformNavWidgets as g0, privateGuard as g1, processImageToSvg as g2, provideAppContext as g3, provideMagAppConfig as g4, provideMagWcConfig as g5, provideMagWcRoutes as g6, provideModalComponents as g7, provideMurlUrlSerializer as g8, provideNavWidgets as g9, setProperty as gA, setTreeGridChildren as gB, setWcTier as gC, settingsWidgets as gD, shouldShowBadge as gE, sortSectionTableRows as gF, splitNavId as gG, splitOnMatch as gH, stringToColor as gI, tailRouteOf as gJ, toAttrBool as gK, toAttrNumber as gL, toCssLength as gM, toHostNavId as gN, toLength$1 as gO, toLocalNavId as gP, toggleTreeGridRow as gQ, unfetchedPlatformNav as gR, ungroupedDocActions as gS, urlValidation as gT, wcTierOf as gU, provideOverlayWidgets as ga, providePlatformNavWidgets as gb, provideSearch as gc, provideSizeContext as gd, provideUserTabs as ge, publicGuard as gf, readFieldPatterns as gg, recordDefinedWcTier as gh, remoteOutletRoute as gi, renderAddress as gj, renderDocument as gk, requiredValidation as gl, resolveConfigAsset as gm, resolveIconSize as gn, resolvePallet as go, resolvePatternRules as gp, resolveSize as gq, resolveSpacing as gr, rgbToHex as gs, rgbToHsl as gt, rowHasChildren as gu, samePatterns as gv, sectionTableColumnId as gw, sectionTableColumnWidths as gx, sectionTableFrozenCount as gy, segmentsToNavId as gz, BaseTextInputComponent as h, initialFraming as i, TextOutputComponent as j, IS_DESIGN_MODE as k, APP_CONTEXT_REF as l, APP_LINK as m, ASSET_BASE_URL as n, outputSize as o, parseRatio as p, AccordionBodyDirective as q, renameForType as r, AccordionComponent as s, AccordionGroupComponent as t, ActionComponent as u, AnimatedGraphsComponent as v, AppCardComponent as w, AppRelationType as x, AppTileComponent as y, AssetStore as z };
|
|
40687
|
+
//# sourceMappingURL=magmonium-one-magmonium-one-DWeZSPCv.mjs.map
|