@magmonium/one 0.4.29 → 0.4.31
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/docs/en/app-release.md +0 -11
- package/assets/i18n/en.json +2 -0
- package/fesm2022/magmonium-one-attribute-value-CLBOZcme.mjs +255 -0
- package/fesm2022/magmonium-one-attribute-value-CLBOZcme.mjs.map +1 -0
- package/fesm2022/magmonium-one-base-checkbox-D7NYJdU3.mjs +77 -0
- package/fesm2022/magmonium-one-base-checkbox-D7NYJdU3.mjs.map +1 -0
- package/fesm2022/magmonium-one-base-dropdown-CEDsqaPz.mjs +604 -0
- package/fesm2022/magmonium-one-base-dropdown-CEDsqaPz.mjs.map +1 -0
- package/fesm2022/magmonium-one-base-input-BOaD-WIi.mjs +183 -0
- package/fesm2022/magmonium-one-base-input-BOaD-WIi.mjs.map +1 -0
- package/fesm2022/magmonium-one-base-text-D6p6_vsb.mjs +94 -0
- package/fesm2022/magmonium-one-base-text-D6p6_vsb.mjs.map +1 -0
- package/fesm2022/magmonium-one-button-rVNnp6G8.mjs +1281 -0
- package/fesm2022/magmonium-one-button-rVNnp6G8.mjs.map +1 -0
- package/fesm2022/magmonium-one-checkbox-rj4XHxb3.mjs +365 -0
- package/fesm2022/magmonium-one-checkbox-rj4XHxb3.mjs.map +1 -0
- package/fesm2022/magmonium-one-color-utl-CirPzUFk.mjs +449 -0
- package/fesm2022/magmonium-one-color-utl-CirPzUFk.mjs.map +1 -0
- package/fesm2022/magmonium-one-directives-DOBENX_K.mjs +1285 -0
- package/fesm2022/magmonium-one-directives-DOBENX_K.mjs.map +1 -0
- package/fesm2022/magmonium-one-file.service-Bo06pU3_.mjs +65 -0
- package/fesm2022/magmonium-one-file.service-Bo06pU3_.mjs.map +1 -0
- package/fesm2022/magmonium-one-group-Cue4x6tD.mjs +428 -0
- package/fesm2022/magmonium-one-group-Cue4x6tD.mjs.map +1 -0
- package/fesm2022/magmonium-one-header-DPVnaEOV.mjs +380 -0
- package/fesm2022/magmonium-one-header-DPVnaEOV.mjs.map +1 -0
- package/fesm2022/magmonium-one-icon-Dso-9RMN.mjs +833 -0
- package/fesm2022/magmonium-one-icon-Dso-9RMN.mjs.map +1 -0
- package/fesm2022/magmonium-one-image-editor-C7AtzEf6.mjs +438 -0
- package/fesm2022/magmonium-one-image-editor-C7AtzEf6.mjs.map +1 -0
- package/fesm2022/magmonium-one-image-frame-BTSaUSAi.mjs +116 -0
- package/fesm2022/magmonium-one-image-frame-BTSaUSAi.mjs.map +1 -0
- package/fesm2022/magmonium-one-input-DqHPorA1.mjs +39 -0
- package/fesm2022/magmonium-one-input-DqHPorA1.mjs.map +1 -0
- package/fesm2022/magmonium-one-label-B30Q4Vut.mjs +574 -0
- package/fesm2022/magmonium-one-label-B30Q4Vut.mjs.map +1 -0
- package/fesm2022/magmonium-one-m-ref-Dt0DCm8X.mjs +147 -0
- package/fesm2022/magmonium-one-m-ref-Dt0DCm8X.mjs.map +1 -0
- package/fesm2022/magmonium-one-menu-BBOnOK4M.mjs +887 -0
- package/fesm2022/magmonium-one-menu-BBOnOK4M.mjs.map +1 -0
- package/fesm2022/magmonium-one-multi-range-DCOwngql.mjs +458 -0
- package/fesm2022/magmonium-one-multi-range-DCOwngql.mjs.map +1 -0
- package/fesm2022/magmonium-one-options-asset-D8Gg1yNl.mjs +97 -0
- package/fesm2022/magmonium-one-options-asset-D8Gg1yNl.mjs.map +1 -0
- package/fesm2022/magmonium-one-otp-DLF7Pq94.mjs +261 -0
- package/fesm2022/magmonium-one-otp-DLF7Pq94.mjs.map +1 -0
- package/fesm2022/magmonium-one-password-BSOU4RI0.mjs +217 -0
- package/fesm2022/magmonium-one-password-BSOU4RI0.mjs.map +1 -0
- package/fesm2022/magmonium-one-radio-CYnWLXPZ.mjs +111 -0
- package/fesm2022/magmonium-one-radio-CYnWLXPZ.mjs.map +1 -0
- package/fesm2022/magmonium-one-range-CmmZAr57.mjs +216 -0
- package/fesm2022/magmonium-one-range-CmmZAr57.mjs.map +1 -0
- package/fesm2022/magmonium-one-rolldown-runtime-DpJrqANO.mjs +11 -0
- package/fesm2022/magmonium-one-selector-DDnBYNLr.mjs +1065 -0
- package/fesm2022/magmonium-one-selector-DDnBYNLr.mjs.map +1 -0
- package/fesm2022/magmonium-one-size-converter-B-UubQQ0.mjs +1057 -0
- package/fesm2022/magmonium-one-size-converter-B-UubQQ0.mjs.map +1 -0
- package/fesm2022/magmonium-one-text-FXb-RyBh.mjs +406 -0
- package/fesm2022/magmonium-one-text-FXb-RyBh.mjs.map +1 -0
- package/fesm2022/magmonium-one-text-output-D2XQWyL0.mjs +296 -0
- package/fesm2022/magmonium-one-text-output-D2XQWyL0.mjs.map +1 -0
- package/fesm2022/magmonium-one-theme-a7GlFbzE.mjs +1 -0
- package/fesm2022/magmonium-one-toggle-C0eTrtkt.mjs +231 -0
- package/fesm2022/magmonium-one-toggle-C0eTrtkt.mjs.map +1 -0
- package/fesm2022/magmonium-one.mjs +49231 -2
- package/fesm2022/magmonium-one.mjs.map +1 -1
- package/package.json +8 -8
- package/types/magmonium-one.d.ts +13801 -9510
- package/fesm2022/magmonium-one-image-editor-DYbS7fRP.mjs +0 -290
- package/fesm2022/magmonium-one-image-editor-DYbS7fRP.mjs.map +0 -1
- package/fesm2022/magmonium-one-magmonium-one-jBGfJvgl.mjs +0 -41576
- package/fesm2022/magmonium-one-magmonium-one-jBGfJvgl.mjs.map +0 -1
- package/fesm2022/magmonium-one-otp-DY1B1djA.mjs +0 -201
- package/fesm2022/magmonium-one-otp-DY1B1djA.mjs.map +0 -1
- package/fesm2022/magmonium-one-password-CzMwV84X.mjs +0 -105
- package/fesm2022/magmonium-one-password-CzMwV84X.mjs.map +0 -1
- package/fesm2022/magmonium-one-toggle-EoE3fKjl.mjs +0 -62
- package/fesm2022/magmonium-one-toggle-EoE3fKjl.mjs.map +0 -1
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
import { i as resolveSize, t as coerceSize } from "./magmonium-one-size-converter-B-UubQQ0.mjs";
|
|
2
|
+
import { r as deriveContrastColor } from "./magmonium-one-color-utl-CirPzUFk.mjs";
|
|
3
|
+
import { a as injectParentSize, o as provideSizeContext } from "./magmonium-one-icon-Dso-9RMN.mjs";
|
|
4
|
+
import { r as ConfigComponent } from "./magmonium-one-attribute-value-CLBOZcme.mjs";
|
|
5
|
+
import { i as deriveGroupClass, t as ButtonComponent } from "./magmonium-one-button-rVNnp6G8.mjs";
|
|
6
|
+
import { t as ContextMenuComponent } from "./magmonium-one-menu-BBOnOK4M.mjs";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, effect, forwardRef, input, output } from "@angular/core";
|
|
9
|
+
import { forkJoin, map, of } from "rxjs";
|
|
10
|
+
import { rxResource } from "@angular/core/rxjs-interop";
|
|
11
|
+
function mergeUnique(...arrays) {
|
|
12
|
+
return [...new Set(arrays.flat())];
|
|
13
|
+
}
|
|
14
|
+
function mergeUniqueBy(arrays, key) {
|
|
15
|
+
const map = /* @__PURE__ */ new Map();
|
|
16
|
+
arrays.flat().forEach((item) => {
|
|
17
|
+
if (!map.has(item[key])) map.set(item[key], item);
|
|
18
|
+
});
|
|
19
|
+
return Array.from(map.values());
|
|
20
|
+
}
|
|
21
|
+
function mergeUniqueWith(arrays, compareFn) {
|
|
22
|
+
const map = /* @__PURE__ */ new Map();
|
|
23
|
+
arrays.flat().forEach((item) => {
|
|
24
|
+
const key = compareFn(item);
|
|
25
|
+
if (!map.has(key)) map.set(key, item);
|
|
26
|
+
});
|
|
27
|
+
return Array.from(map.values());
|
|
28
|
+
}
|
|
29
|
+
var ButtonGroupComponent = class ButtonGroupComponent extends ConfigComponent {
|
|
30
|
+
buttons = input(...ngDevMode ? [void 0, { debugName: "buttons" }] : /* istanbul ignore next */ []);
|
|
31
|
+
names = input(...ngDevMode ? [void 0, { debugName: "names" }] : /* istanbul ignore next */ []);
|
|
32
|
+
exclude = input(...ngDevMode ? [void 0, { debugName: "exclude" }] : /* istanbul ignore next */ []);
|
|
33
|
+
vertical = input(...ngDevMode ? [void 0, { debugName: "vertical" }] : /* istanbul ignore next */ []);
|
|
34
|
+
size = input(...ngDevMode ? [void 0, { debugName: "size" }] : /* istanbul ignore next */ []);
|
|
35
|
+
parentSize = injectParentSize();
|
|
36
|
+
resolvedSize = computed(() => coerceSize(this.size(), this.config()?.size, this.parentSize?.size()), ...ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []);
|
|
37
|
+
sizeLength = computed(() => resolveSize(this.resolvedSize()), ...ngDevMode ? [{ debugName: "sizeLength" }] : /* istanbul ignore next */ []);
|
|
38
|
+
subFolder = "button_groups";
|
|
39
|
+
clicked = output();
|
|
40
|
+
classList = computed(() => {
|
|
41
|
+
const base = deriveGroupClass(this.config());
|
|
42
|
+
if (this.isPrimaryVisible()) return base.includes("is-primary") ? base : `${base} is-primary`.trim();
|
|
43
|
+
return base.replace("is-primary", "").trim();
|
|
44
|
+
}, ...ngDevMode ? [{ debugName: "classList" }] : /* istanbul ignore next */ []);
|
|
45
|
+
isPrimaryVisible = computed(() => {
|
|
46
|
+
const primary = this.primaryButton();
|
|
47
|
+
if (!primary) return false;
|
|
48
|
+
return !!(this.isPrimary(primary.name) || primary.variant === "primary");
|
|
49
|
+
}, ...ngDevMode ? [{ debugName: "isPrimaryVisible" }] : /* istanbul ignore next */ []);
|
|
50
|
+
contextMenuIconColor = computed(() => {
|
|
51
|
+
if (!this.isPrimaryVisible()) return;
|
|
52
|
+
const oppColor = this.pallet()?.oppositeColor;
|
|
53
|
+
if (oppColor) return deriveContrastColor(oppColor);
|
|
54
|
+
return "white";
|
|
55
|
+
}, ...ngDevMode ? [{ debugName: "contextMenuIconColor" }] : /* istanbul ignore next */ []);
|
|
56
|
+
mergedNames = computed(() => {
|
|
57
|
+
const exclude = this.exclude() ?? [];
|
|
58
|
+
const names = mergeUnique(this.names() ?? [], this.config()?.names ?? []).filter((name) => !exclude.includes(name));
|
|
59
|
+
const buttonNames = new Set(this.mergedButtons().map((b) => b.name));
|
|
60
|
+
return names.filter((name) => !buttonNames.has(name));
|
|
61
|
+
}, ...ngDevMode ? [{ debugName: "mergedNames" }] : /* istanbul ignore next */ []);
|
|
62
|
+
buttonsResource = rxResource({
|
|
63
|
+
params: () => {
|
|
64
|
+
const config = this.config();
|
|
65
|
+
if (!config?.isContext) return void 0;
|
|
66
|
+
const namesFromAsset = config.names ?? [];
|
|
67
|
+
const buttonNamesFromAsset = config.buttons?.map((b) => b.name) ?? [];
|
|
68
|
+
const allNames = mergeUnique(this.names() ?? [], mergeUnique(namesFromAsset, buttonNamesFromAsset));
|
|
69
|
+
if (allNames.length === 0) return void 0;
|
|
70
|
+
return {
|
|
71
|
+
names: allNames,
|
|
72
|
+
isOne: this.isFromOne()
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
stream: ({ params }) => {
|
|
76
|
+
if (!params) return of([]);
|
|
77
|
+
return forkJoin(params.names.map((name) => this.assetStore.resolve("buttons", name, params.isOne).pipe(map((button) => ({
|
|
78
|
+
...button,
|
|
79
|
+
name
|
|
80
|
+
})))));
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
mergedButtons = computed(() => {
|
|
84
|
+
const config = this.config();
|
|
85
|
+
const buttonOverrides = this.buttons();
|
|
86
|
+
const exclude = this.exclude() ?? [];
|
|
87
|
+
const yamlButtons = (config?.isContext ? this.buttonsResource.value() ?? [] : [...config?.buttons ?? [], ...config?.names?.map((name) => ({ name })) ?? []]).map((b) => typeof b === "string" ? { name: b } : b);
|
|
88
|
+
const merged = yamlButtons.filter((b) => !b.name || !exclude.includes(b.name)).map((button) => ({
|
|
89
|
+
...button,
|
|
90
|
+
...button.name && buttonOverrides?.[button.name] ? buttonOverrides[button.name] : {}
|
|
91
|
+
}));
|
|
92
|
+
if (!buttonOverrides) return merged;
|
|
93
|
+
const yamlNames = new Set(yamlButtons.map((b) => b.name));
|
|
94
|
+
const configNames = new Set(config?.names ?? []);
|
|
95
|
+
const extra = Object.entries(buttonOverrides).filter(([name]) => !yamlNames.has(name) && !configNames.has(name) && !exclude.includes(name)).map(([name, override]) => ({
|
|
96
|
+
name,
|
|
97
|
+
...override
|
|
98
|
+
}));
|
|
99
|
+
return [...merged, ...extra];
|
|
100
|
+
}, ...ngDevMode ? [{ debugName: "mergedButtons" }] : /* istanbul ignore next */ []);
|
|
101
|
+
primaryButton = computed(() => {
|
|
102
|
+
const buttons = this.mergedButtons();
|
|
103
|
+
const primaryName = this.config()?.primary;
|
|
104
|
+
if (!primaryName) return buttons[0];
|
|
105
|
+
return buttons.find((b) => b.name === primaryName) ?? buttons[0];
|
|
106
|
+
}, ...ngDevMode ? [{ debugName: "primaryButton" }] : /* istanbul ignore next */ []);
|
|
107
|
+
secondaryActions = computed(() => {
|
|
108
|
+
const primary = this.primaryButton();
|
|
109
|
+
const secondary = this.mergedButtons().filter((b) => b !== primary);
|
|
110
|
+
if (secondary.length === 0) return void 0;
|
|
111
|
+
return [secondary.map((b) => ({
|
|
112
|
+
id: b.name ?? "",
|
|
113
|
+
label: b.label ?? b.name ?? "",
|
|
114
|
+
icon: b.icon,
|
|
115
|
+
nav: b.nav,
|
|
116
|
+
link: b.href,
|
|
117
|
+
disabled: b.disabled ? true : void 0
|
|
118
|
+
}))];
|
|
119
|
+
}, ...ngDevMode ? [{ debugName: "secondaryActions" }] : /* istanbul ignore next */ []);
|
|
120
|
+
constructor() {
|
|
121
|
+
super();
|
|
122
|
+
effect(this.updateProperty);
|
|
123
|
+
}
|
|
124
|
+
isPrimary(name) {
|
|
125
|
+
const config = this.config();
|
|
126
|
+
if (!config?.primary || !name) return;
|
|
127
|
+
return name === config.primary ? true : void 0;
|
|
128
|
+
}
|
|
129
|
+
isDisabled(name) {
|
|
130
|
+
if (!name) return void 0;
|
|
131
|
+
const buttonOverride = this.buttons()?.[name];
|
|
132
|
+
if (typeof buttonOverride?.disabled !== "undefined") return buttonOverride.disabled;
|
|
133
|
+
const config = this.config();
|
|
134
|
+
if (!config?.disabled) return void 0;
|
|
135
|
+
return config.disabled[name];
|
|
136
|
+
}
|
|
137
|
+
handleMenuAction(item) {
|
|
138
|
+
const button = this.mergedButtons().find((b) => b.name === item.id);
|
|
139
|
+
this.clicked.emit(button);
|
|
140
|
+
}
|
|
141
|
+
updateProperty = () => {
|
|
142
|
+
const updatedConfig = {};
|
|
143
|
+
const vertical = this.vertical();
|
|
144
|
+
if (typeof vertical !== "undefined") updatedConfig.vertical = vertical;
|
|
145
|
+
this.config.update((prev) => ({
|
|
146
|
+
...prev ?? {},
|
|
147
|
+
...updatedConfig
|
|
148
|
+
}));
|
|
149
|
+
};
|
|
150
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
151
|
+
minVersion: "12.0.0",
|
|
152
|
+
version: "22.2.1",
|
|
153
|
+
ngImport: i0,
|
|
154
|
+
type: ButtonGroupComponent,
|
|
155
|
+
deps: [],
|
|
156
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
157
|
+
});
|
|
158
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
159
|
+
minVersion: "17.0.0",
|
|
160
|
+
version: "22.2.1",
|
|
161
|
+
type: ButtonGroupComponent,
|
|
162
|
+
isStandalone: true,
|
|
163
|
+
selector: "m-button-group, m-one-button-group",
|
|
164
|
+
inputs: {
|
|
165
|
+
buttons: {
|
|
166
|
+
classPropertyName: "buttons",
|
|
167
|
+
publicName: "buttons",
|
|
168
|
+
isSignal: true,
|
|
169
|
+
isRequired: false,
|
|
170
|
+
transformFunction: null
|
|
171
|
+
},
|
|
172
|
+
names: {
|
|
173
|
+
classPropertyName: "names",
|
|
174
|
+
publicName: "names",
|
|
175
|
+
isSignal: true,
|
|
176
|
+
isRequired: false,
|
|
177
|
+
transformFunction: null
|
|
178
|
+
},
|
|
179
|
+
exclude: {
|
|
180
|
+
classPropertyName: "exclude",
|
|
181
|
+
publicName: "exclude",
|
|
182
|
+
isSignal: true,
|
|
183
|
+
isRequired: false,
|
|
184
|
+
transformFunction: null
|
|
185
|
+
},
|
|
186
|
+
vertical: {
|
|
187
|
+
classPropertyName: "vertical",
|
|
188
|
+
publicName: "vertical",
|
|
189
|
+
isSignal: true,
|
|
190
|
+
isRequired: false,
|
|
191
|
+
transformFunction: null
|
|
192
|
+
},
|
|
193
|
+
size: {
|
|
194
|
+
classPropertyName: "size",
|
|
195
|
+
publicName: "size",
|
|
196
|
+
isSignal: true,
|
|
197
|
+
isRequired: false,
|
|
198
|
+
transformFunction: null
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
outputs: { clicked: "clicked" },
|
|
202
|
+
host: { properties: { "style.font-size": "sizeLength()" } },
|
|
203
|
+
providers: [provideSizeContext(ButtonGroupComponent)],
|
|
204
|
+
usesInheritance: true,
|
|
205
|
+
ngImport: i0,
|
|
206
|
+
template: `
|
|
207
|
+
@if (config(); as group) {
|
|
208
|
+
<div
|
|
209
|
+
class="button-group {{ classList() }}"
|
|
210
|
+
[class.is-context]="group.isContext"
|
|
211
|
+
>
|
|
212
|
+
@if (group.isContext) {
|
|
213
|
+
@if (primaryButton(); as primary) {
|
|
214
|
+
<m-button
|
|
215
|
+
[variant]="isPrimaryVisible() ? 'primary' : undefined"
|
|
216
|
+
[disabled]="isDisabled(primary.name)"
|
|
217
|
+
[color]="group.color"
|
|
218
|
+
[config]="primary"
|
|
219
|
+
[name]="primary.name"
|
|
220
|
+
[one]="isFromOne()"
|
|
221
|
+
[remote]="remote() ?? group.remote"
|
|
222
|
+
(clicked)="clicked.emit($event)"
|
|
223
|
+
/>
|
|
224
|
+
}
|
|
225
|
+
@if (secondaryActions(); as actions) {
|
|
226
|
+
<m-context-menu
|
|
227
|
+
[config]="{
|
|
228
|
+
icon: {
|
|
229
|
+
name: config()?.contextMenuIcon ?? 'ellipsis-vertical',
|
|
230
|
+
color: contextMenuIconColor(),
|
|
231
|
+
},
|
|
232
|
+
options: actions,
|
|
233
|
+
}"
|
|
234
|
+
[inverted]="group.inverted"
|
|
235
|
+
[remote]="remote() ?? group.remote"
|
|
236
|
+
(action)="handleMenuAction($event)"
|
|
237
|
+
/>
|
|
238
|
+
}
|
|
239
|
+
} @else {
|
|
240
|
+
@for (button of mergedButtons(); track $index) {
|
|
241
|
+
<m-button
|
|
242
|
+
[variant]="isPrimary(button.name) ? 'primary' : undefined"
|
|
243
|
+
[disabled]="isDisabled(button.name)"
|
|
244
|
+
[color]="group.color"
|
|
245
|
+
[config]="button"
|
|
246
|
+
[name]="button.name"
|
|
247
|
+
[one]="isFromOne()"
|
|
248
|
+
[remote]="remote() ?? group.remote"
|
|
249
|
+
(clicked)="clicked.emit($event)"
|
|
250
|
+
/>
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
</div>
|
|
254
|
+
}
|
|
255
|
+
`,
|
|
256
|
+
isInline: true,
|
|
257
|
+
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-button-group .button-group:not(.is-context),m-one-button-group .button-group:not(.is-context){display:flex;flex-wrap:wrap;align-items:stretch;gap:.375em}m-button-group .button-group:not(.is-context).vertical,m-one-button-group .button-group:not(.is-context).vertical{flex-direction:column;align-items:center}m-button-group .button-group:not(.is-context).horizontal,m-one-button-group .button-group:not(.is-context).horizontal{flex-direction:row;align-items:center}m-button-group .button-group:not(.is-context).align-right,m-one-button-group .button-group:not(.is-context).align-right{justify-content:flex-end}m-button-group .button-group:not(.is-context).align-center,m-button-group .button-group:not(.is-context).center,m-one-button-group .button-group:not(.is-context).align-center,m-one-button-group .button-group:not(.is-context).center{justify-content:center}m-button-group .button-group:not(.is-context).align-left,m-one-button-group .button-group:not(.is-context).align-left{justify-content:flex-start}m-button-group .button-group.is-context,m-one-button-group .button-group.is-context{--m-grp-height: var(--m-button-group-height, 2.75em);--m-grp-radius: var(--m-button-group-radius, .875em);display:inline-flex;align-items:stretch;height:var(--m-grp-height);border-radius:var(--m-grp-radius);background:transparent;overflow:visible;position:relative;gap:.375em;will-change:transform;transition:transform .4s cubic-bezier(.16,1,.3,1)}m-button-group .button-group.is-context.is-primary,m-one-button-group .button-group.is-context.is-primary{background:var(--m-button-group-color-opposite, var(--m-one-button-group-color-opposite, var(--m-mm-dark)));--m-button-color-contrast: var(--m-inverse-text);--m-button-hover-background: rgba(0, 0, 0, .12)}m-button-group .button-group.is-context.is-primary m-button,m-button-group .button-group.is-context.is-primary m-one-button,m-button-group .button-group.is-context.is-primary .m-button,m-button-group .button-group.is-context.is-primary .m-one-button,m-one-button-group .button-group.is-context.is-primary m-button,m-one-button-group .button-group.is-context.is-primary m-one-button,m-one-button-group .button-group.is-context.is-primary .m-button,m-one-button-group .button-group.is-context.is-primary .m-one-button{--m-button-hover-background: rgba(0, 0, 0, .1)}m-button-group .button-group.is-context.is-primary m-context-menu,m-button-group .button-group.is-context.is-primary m-one-context-menu,m-button-group .button-group.is-context.is-primary .m-context-menu,m-one-button-group .button-group.is-context.is-primary m-context-menu,m-one-button-group .button-group.is-context.is-primary m-one-context-menu,m-one-button-group .button-group.is-context.is-primary .m-context-menu{--m-action-dots-hover-icon-color: var(--m-inverse-text)}m-button-group .button-group.is-context.is-primary m-context-menu:hover,m-button-group .button-group.is-context.is-primary m-one-context-menu:hover,m-button-group .button-group.is-context.is-primary .m-context-menu:hover,m-one-button-group .button-group.is-context.is-primary m-context-menu:hover,m-one-button-group .button-group.is-context.is-primary m-one-context-menu:hover,m-one-button-group .button-group.is-context.is-primary .m-context-menu:hover{background:#00000026}m-button-group .button-group.is-context:hover,m-one-button-group .button-group.is-context:hover{transform:scale(1.02);box-shadow:0 8px 24px #0000001a}m-button-group .button-group.is-context:active,m-one-button-group .button-group.is-context:active{transform:scale(.98)}m-button-group .button-group.is-context m-button,m-button-group .button-group.is-context m-one-button,m-button-group .button-group.is-context .m-button,m-button-group .button-group.is-context .m-one-button,m-one-button-group .button-group.is-context m-button,m-one-button-group .button-group.is-context m-one-button,m-one-button-group .button-group.is-context .m-button,m-one-button-group .button-group.is-context .m-one-button{flex:1;z-index:2;height:100%;--m-button-border: none;--m-button-radius: 0;--m-button-padding: 0 1.25rem;--m-button-background: transparent;--m-button-hover-background: rgba(0, 0, 0, .05);transition:all .3s cubic-bezier(.16,1,.3,1)}m-button-group .button-group.is-context m-button button,m-button-group .button-group.is-context m-one-button button,m-button-group .button-group.is-context .m-button button,m-button-group .button-group.is-context .m-one-button button,m-one-button-group .button-group.is-context m-button button,m-one-button-group .button-group.is-context m-one-button button,m-one-button-group .button-group.is-context .m-button button,m-one-button-group .button-group.is-context .m-one-button button{border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-top-left-radius:var(--m-grp-radius)!important;border-bottom-left-radius:var(--m-grp-radius)!important}m-button-group .button-group.is-context m-button button:hover,m-button-group .button-group.is-context m-one-button button:hover,m-button-group .button-group.is-context .m-button button:hover,m-button-group .button-group.is-context .m-one-button button:hover,m-one-button-group .button-group.is-context m-button button:hover,m-one-button-group .button-group.is-context m-one-button button:hover,m-one-button-group .button-group.is-context .m-button button:hover,m-one-button-group .button-group.is-context .m-one-button button:hover{transform:none!important;box-shadow:none!important}m-button-group .button-group.is-context m-button button:active,m-button-group .button-group.is-context m-one-button button:active,m-button-group .button-group.is-context .m-button button:active,m-button-group .button-group.is-context .m-one-button button:active,m-one-button-group .button-group.is-context m-button button:active,m-one-button-group .button-group.is-context m-one-button button:active,m-one-button-group .button-group.is-context .m-button button:active,m-one-button-group .button-group.is-context .m-one-button button:active{transform:none!important}m-button-group .button-group.is-context m-button,m-button-group .button-group.is-context m-one-button,m-button-group .button-group.is-context .m-button,m-button-group .button-group.is-context .m-one-button,m-one-button-group .button-group.is-context m-button,m-one-button-group .button-group.is-context m-one-button,m-one-button-group .button-group.is-context .m-button,m-one-button-group .button-group.is-context .m-one-button{--m-button-radius: var(--m-grp-radius)}m-button-group .button-group.is-context m-button button,m-button-group .button-group.is-context m-one-button button,m-button-group .button-group.is-context .m-button button,m-button-group .button-group.is-context .m-one-button button,m-one-button-group .button-group.is-context m-button button,m-one-button-group .button-group.is-context m-one-button button,m-one-button-group .button-group.is-context .m-button button,m-one-button-group .button-group.is-context .m-one-button button{border-radius:var(--m-grp-radius)!important}m-button-group .button-group.is-context m-context-menu,m-button-group .button-group.is-context m-one-context-menu,m-button-group .button-group.is-context .m-context-menu,m-one-button-group .button-group.is-context m-context-menu,m-one-button-group .button-group.is-context m-one-context-menu,m-one-button-group .button-group.is-context .m-context-menu{display:flex;align-items:center;justify-content:center;width:var(--m-grp-height);height:100%;z-index:2;transition:all .4s cubic-bezier(.16,1,.3,1);border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:var(--m-grp-radius)!important;border-bottom-right-radius:var(--m-grp-radius)!important;overflow:hidden;--m-action-dots-padding: 0;--m-action-dots-width: 100%;--m-action-dots-height: 100%;--m-action-dots-icon-color: var(--m-text-secondary);--m-action-dots-icon-opacity: .7;--m-action-dots-hover-icon-color: var(--m-mm);--m-action-dots-hover-icon-opacity: 1;--m-action-dots-hover-icon-transform: scale(1.1)}m-button-group .button-group.is-context m-context-menu .action-dots,m-button-group .button-group.is-context m-one-context-menu .action-dots,m-button-group .button-group.is-context .m-context-menu .action-dots,m-one-button-group .button-group.is-context m-context-menu .action-dots,m-one-button-group .button-group.is-context m-one-context-menu .action-dots,m-one-button-group .button-group.is-context .m-context-menu .action-dots{border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:var(--m-grp-radius)!important;border-bottom-right-radius:var(--m-grp-radius)!important}m-button-group .button-group.is-context m-context-menu:hover,m-button-group .button-group.is-context m-one-context-menu:hover,m-button-group .button-group.is-context .m-context-menu:hover,m-one-button-group .button-group.is-context m-context-menu:hover,m-one-button-group .button-group.is-context m-one-context-menu:hover,m-one-button-group .button-group.is-context .m-context-menu:hover{background:#0000000f}\n"],
|
|
258
|
+
dependencies: [{
|
|
259
|
+
kind: "component",
|
|
260
|
+
type: i0.forwardRef(() => ButtonComponent),
|
|
261
|
+
selector: "m-button,m-one-button",
|
|
262
|
+
inputs: [
|
|
263
|
+
"config",
|
|
264
|
+
"color",
|
|
265
|
+
"labelClass",
|
|
266
|
+
"fullWidth",
|
|
267
|
+
"nav",
|
|
268
|
+
"navParams",
|
|
269
|
+
"href",
|
|
270
|
+
"disabled",
|
|
271
|
+
"variant",
|
|
272
|
+
"name",
|
|
273
|
+
"baseUrl",
|
|
274
|
+
"one",
|
|
275
|
+
"remote",
|
|
276
|
+
"label",
|
|
277
|
+
"noTranslate",
|
|
278
|
+
"params",
|
|
279
|
+
"noNative",
|
|
280
|
+
"icon",
|
|
281
|
+
"isRightIcon",
|
|
282
|
+
"iconOnly",
|
|
283
|
+
"stacked",
|
|
284
|
+
"imgSrc",
|
|
285
|
+
"nonClickable",
|
|
286
|
+
"inverted",
|
|
287
|
+
"isSubmit",
|
|
288
|
+
"tabindex"
|
|
289
|
+
],
|
|
290
|
+
outputs: ["configChange", "clicked"]
|
|
291
|
+
}, {
|
|
292
|
+
kind: "component",
|
|
293
|
+
type: i0.forwardRef(() => ContextMenuComponent),
|
|
294
|
+
selector: "m-context-menu, m-one-context-menu",
|
|
295
|
+
inputs: [
|
|
296
|
+
"toggle",
|
|
297
|
+
"remote",
|
|
298
|
+
"exclude",
|
|
299
|
+
"visibilityRule",
|
|
300
|
+
"disableRule",
|
|
301
|
+
"extraData",
|
|
302
|
+
"inverted",
|
|
303
|
+
"options"
|
|
304
|
+
],
|
|
305
|
+
outputs: ["toggleChange", "action"]
|
|
306
|
+
}],
|
|
307
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
308
|
+
encapsulation: i0.ViewEncapsulation.None
|
|
309
|
+
});
|
|
310
|
+
};
|
|
311
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
312
|
+
minVersion: "12.0.0",
|
|
313
|
+
version: "22.2.1",
|
|
314
|
+
ngImport: i0,
|
|
315
|
+
type: ButtonGroupComponent,
|
|
316
|
+
decorators: [{
|
|
317
|
+
type: Component,
|
|
318
|
+
args: [{
|
|
319
|
+
selector: "m-button-group, m-one-button-group",
|
|
320
|
+
template: `
|
|
321
|
+
@if (config(); as group) {
|
|
322
|
+
<div
|
|
323
|
+
class="button-group {{ classList() }}"
|
|
324
|
+
[class.is-context]="group.isContext"
|
|
325
|
+
>
|
|
326
|
+
@if (group.isContext) {
|
|
327
|
+
@if (primaryButton(); as primary) {
|
|
328
|
+
<m-button
|
|
329
|
+
[variant]="isPrimaryVisible() ? 'primary' : undefined"
|
|
330
|
+
[disabled]="isDisabled(primary.name)"
|
|
331
|
+
[color]="group.color"
|
|
332
|
+
[config]="primary"
|
|
333
|
+
[name]="primary.name"
|
|
334
|
+
[one]="isFromOne()"
|
|
335
|
+
[remote]="remote() ?? group.remote"
|
|
336
|
+
(clicked)="clicked.emit($event)"
|
|
337
|
+
/>
|
|
338
|
+
}
|
|
339
|
+
@if (secondaryActions(); as actions) {
|
|
340
|
+
<m-context-menu
|
|
341
|
+
[config]="{
|
|
342
|
+
icon: {
|
|
343
|
+
name: config()?.contextMenuIcon ?? 'ellipsis-vertical',
|
|
344
|
+
color: contextMenuIconColor(),
|
|
345
|
+
},
|
|
346
|
+
options: actions,
|
|
347
|
+
}"
|
|
348
|
+
[inverted]="group.inverted"
|
|
349
|
+
[remote]="remote() ?? group.remote"
|
|
350
|
+
(action)="handleMenuAction($event)"
|
|
351
|
+
/>
|
|
352
|
+
}
|
|
353
|
+
} @else {
|
|
354
|
+
@for (button of mergedButtons(); track $index) {
|
|
355
|
+
<m-button
|
|
356
|
+
[variant]="isPrimary(button.name) ? 'primary' : undefined"
|
|
357
|
+
[disabled]="isDisabled(button.name)"
|
|
358
|
+
[color]="group.color"
|
|
359
|
+
[config]="button"
|
|
360
|
+
[name]="button.name"
|
|
361
|
+
[one]="isFromOne()"
|
|
362
|
+
[remote]="remote() ?? group.remote"
|
|
363
|
+
(clicked)="clicked.emit($event)"
|
|
364
|
+
/>
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
</div>
|
|
368
|
+
}
|
|
369
|
+
`,
|
|
370
|
+
imports: [forwardRef(() => ButtonComponent), ContextMenuComponent],
|
|
371
|
+
encapsulation: ViewEncapsulation.None,
|
|
372
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
373
|
+
host: { "[style.font-size]": "sizeLength()" },
|
|
374
|
+
providers: [provideSizeContext(ButtonGroupComponent)],
|
|
375
|
+
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-button-group .button-group:not(.is-context),m-one-button-group .button-group:not(.is-context){display:flex;flex-wrap:wrap;align-items:stretch;gap:.375em}m-button-group .button-group:not(.is-context).vertical,m-one-button-group .button-group:not(.is-context).vertical{flex-direction:column;align-items:center}m-button-group .button-group:not(.is-context).horizontal,m-one-button-group .button-group:not(.is-context).horizontal{flex-direction:row;align-items:center}m-button-group .button-group:not(.is-context).align-right,m-one-button-group .button-group:not(.is-context).align-right{justify-content:flex-end}m-button-group .button-group:not(.is-context).align-center,m-button-group .button-group:not(.is-context).center,m-one-button-group .button-group:not(.is-context).align-center,m-one-button-group .button-group:not(.is-context).center{justify-content:center}m-button-group .button-group:not(.is-context).align-left,m-one-button-group .button-group:not(.is-context).align-left{justify-content:flex-start}m-button-group .button-group.is-context,m-one-button-group .button-group.is-context{--m-grp-height: var(--m-button-group-height, 2.75em);--m-grp-radius: var(--m-button-group-radius, .875em);display:inline-flex;align-items:stretch;height:var(--m-grp-height);border-radius:var(--m-grp-radius);background:transparent;overflow:visible;position:relative;gap:.375em;will-change:transform;transition:transform .4s cubic-bezier(.16,1,.3,1)}m-button-group .button-group.is-context.is-primary,m-one-button-group .button-group.is-context.is-primary{background:var(--m-button-group-color-opposite, var(--m-one-button-group-color-opposite, var(--m-mm-dark)));--m-button-color-contrast: var(--m-inverse-text);--m-button-hover-background: rgba(0, 0, 0, .12)}m-button-group .button-group.is-context.is-primary m-button,m-button-group .button-group.is-context.is-primary m-one-button,m-button-group .button-group.is-context.is-primary .m-button,m-button-group .button-group.is-context.is-primary .m-one-button,m-one-button-group .button-group.is-context.is-primary m-button,m-one-button-group .button-group.is-context.is-primary m-one-button,m-one-button-group .button-group.is-context.is-primary .m-button,m-one-button-group .button-group.is-context.is-primary .m-one-button{--m-button-hover-background: rgba(0, 0, 0, .1)}m-button-group .button-group.is-context.is-primary m-context-menu,m-button-group .button-group.is-context.is-primary m-one-context-menu,m-button-group .button-group.is-context.is-primary .m-context-menu,m-one-button-group .button-group.is-context.is-primary m-context-menu,m-one-button-group .button-group.is-context.is-primary m-one-context-menu,m-one-button-group .button-group.is-context.is-primary .m-context-menu{--m-action-dots-hover-icon-color: var(--m-inverse-text)}m-button-group .button-group.is-context.is-primary m-context-menu:hover,m-button-group .button-group.is-context.is-primary m-one-context-menu:hover,m-button-group .button-group.is-context.is-primary .m-context-menu:hover,m-one-button-group .button-group.is-context.is-primary m-context-menu:hover,m-one-button-group .button-group.is-context.is-primary m-one-context-menu:hover,m-one-button-group .button-group.is-context.is-primary .m-context-menu:hover{background:#00000026}m-button-group .button-group.is-context:hover,m-one-button-group .button-group.is-context:hover{transform:scale(1.02);box-shadow:0 8px 24px #0000001a}m-button-group .button-group.is-context:active,m-one-button-group .button-group.is-context:active{transform:scale(.98)}m-button-group .button-group.is-context m-button,m-button-group .button-group.is-context m-one-button,m-button-group .button-group.is-context .m-button,m-button-group .button-group.is-context .m-one-button,m-one-button-group .button-group.is-context m-button,m-one-button-group .button-group.is-context m-one-button,m-one-button-group .button-group.is-context .m-button,m-one-button-group .button-group.is-context .m-one-button{flex:1;z-index:2;height:100%;--m-button-border: none;--m-button-radius: 0;--m-button-padding: 0 1.25rem;--m-button-background: transparent;--m-button-hover-background: rgba(0, 0, 0, .05);transition:all .3s cubic-bezier(.16,1,.3,1)}m-button-group .button-group.is-context m-button button,m-button-group .button-group.is-context m-one-button button,m-button-group .button-group.is-context .m-button button,m-button-group .button-group.is-context .m-one-button button,m-one-button-group .button-group.is-context m-button button,m-one-button-group .button-group.is-context m-one-button button,m-one-button-group .button-group.is-context .m-button button,m-one-button-group .button-group.is-context .m-one-button button{border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-top-left-radius:var(--m-grp-radius)!important;border-bottom-left-radius:var(--m-grp-radius)!important}m-button-group .button-group.is-context m-button button:hover,m-button-group .button-group.is-context m-one-button button:hover,m-button-group .button-group.is-context .m-button button:hover,m-button-group .button-group.is-context .m-one-button button:hover,m-one-button-group .button-group.is-context m-button button:hover,m-one-button-group .button-group.is-context m-one-button button:hover,m-one-button-group .button-group.is-context .m-button button:hover,m-one-button-group .button-group.is-context .m-one-button button:hover{transform:none!important;box-shadow:none!important}m-button-group .button-group.is-context m-button button:active,m-button-group .button-group.is-context m-one-button button:active,m-button-group .button-group.is-context .m-button button:active,m-button-group .button-group.is-context .m-one-button button:active,m-one-button-group .button-group.is-context m-button button:active,m-one-button-group .button-group.is-context m-one-button button:active,m-one-button-group .button-group.is-context .m-button button:active,m-one-button-group .button-group.is-context .m-one-button button:active{transform:none!important}m-button-group .button-group.is-context m-button,m-button-group .button-group.is-context m-one-button,m-button-group .button-group.is-context .m-button,m-button-group .button-group.is-context .m-one-button,m-one-button-group .button-group.is-context m-button,m-one-button-group .button-group.is-context m-one-button,m-one-button-group .button-group.is-context .m-button,m-one-button-group .button-group.is-context .m-one-button{--m-button-radius: var(--m-grp-radius)}m-button-group .button-group.is-context m-button button,m-button-group .button-group.is-context m-one-button button,m-button-group .button-group.is-context .m-button button,m-button-group .button-group.is-context .m-one-button button,m-one-button-group .button-group.is-context m-button button,m-one-button-group .button-group.is-context m-one-button button,m-one-button-group .button-group.is-context .m-button button,m-one-button-group .button-group.is-context .m-one-button button{border-radius:var(--m-grp-radius)!important}m-button-group .button-group.is-context m-context-menu,m-button-group .button-group.is-context m-one-context-menu,m-button-group .button-group.is-context .m-context-menu,m-one-button-group .button-group.is-context m-context-menu,m-one-button-group .button-group.is-context m-one-context-menu,m-one-button-group .button-group.is-context .m-context-menu{display:flex;align-items:center;justify-content:center;width:var(--m-grp-height);height:100%;z-index:2;transition:all .4s cubic-bezier(.16,1,.3,1);border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:var(--m-grp-radius)!important;border-bottom-right-radius:var(--m-grp-radius)!important;overflow:hidden;--m-action-dots-padding: 0;--m-action-dots-width: 100%;--m-action-dots-height: 100%;--m-action-dots-icon-color: var(--m-text-secondary);--m-action-dots-icon-opacity: .7;--m-action-dots-hover-icon-color: var(--m-mm);--m-action-dots-hover-icon-opacity: 1;--m-action-dots-hover-icon-transform: scale(1.1)}m-button-group .button-group.is-context m-context-menu .action-dots,m-button-group .button-group.is-context m-one-context-menu .action-dots,m-button-group .button-group.is-context .m-context-menu .action-dots,m-one-button-group .button-group.is-context m-context-menu .action-dots,m-one-button-group .button-group.is-context m-one-context-menu .action-dots,m-one-button-group .button-group.is-context .m-context-menu .action-dots{border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:var(--m-grp-radius)!important;border-bottom-right-radius:var(--m-grp-radius)!important}m-button-group .button-group.is-context m-context-menu:hover,m-button-group .button-group.is-context m-one-context-menu:hover,m-button-group .button-group.is-context .m-context-menu:hover,m-one-button-group .button-group.is-context m-context-menu:hover,m-one-button-group .button-group.is-context m-one-context-menu:hover,m-one-button-group .button-group.is-context .m-context-menu:hover{background:#0000000f}\n"]
|
|
376
|
+
}]
|
|
377
|
+
}],
|
|
378
|
+
ctorParameters: () => [],
|
|
379
|
+
propDecorators: {
|
|
380
|
+
buttons: [{
|
|
381
|
+
type: i0.Input,
|
|
382
|
+
args: [{
|
|
383
|
+
isSignal: true,
|
|
384
|
+
alias: "buttons",
|
|
385
|
+
required: false
|
|
386
|
+
}]
|
|
387
|
+
}],
|
|
388
|
+
names: [{
|
|
389
|
+
type: i0.Input,
|
|
390
|
+
args: [{
|
|
391
|
+
isSignal: true,
|
|
392
|
+
alias: "names",
|
|
393
|
+
required: false
|
|
394
|
+
}]
|
|
395
|
+
}],
|
|
396
|
+
exclude: [{
|
|
397
|
+
type: i0.Input,
|
|
398
|
+
args: [{
|
|
399
|
+
isSignal: true,
|
|
400
|
+
alias: "exclude",
|
|
401
|
+
required: false
|
|
402
|
+
}]
|
|
403
|
+
}],
|
|
404
|
+
vertical: [{
|
|
405
|
+
type: i0.Input,
|
|
406
|
+
args: [{
|
|
407
|
+
isSignal: true,
|
|
408
|
+
alias: "vertical",
|
|
409
|
+
required: false
|
|
410
|
+
}]
|
|
411
|
+
}],
|
|
412
|
+
size: [{
|
|
413
|
+
type: i0.Input,
|
|
414
|
+
args: [{
|
|
415
|
+
isSignal: true,
|
|
416
|
+
alias: "size",
|
|
417
|
+
required: false
|
|
418
|
+
}]
|
|
419
|
+
}],
|
|
420
|
+
clicked: [{
|
|
421
|
+
type: i0.Output,
|
|
422
|
+
args: ["clicked"]
|
|
423
|
+
}]
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
export { mergeUniqueWith as i, mergeUnique as n, mergeUniqueBy as r, ButtonGroupComponent as t };
|
|
427
|
+
|
|
428
|
+
//# sourceMappingURL=magmonium-one-group-Cue4x6tD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"magmonium-one-group-Cue4x6tD.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/lib/utils/array.ts","../../../../libs/one/src/lib/shared/ui/button/ui/group/group.ts"],"sourcesContent":["/**\n * Merges multiple arrays and removes duplicates\n * @param arrays - Arrays to merge\n * @returns Merged array with unique values\n */\nexport function mergeUnique<T>(...arrays: T[][]): T[] {\n return [...new Set(arrays.flat())];\n}\n\n/**\n * Merges arrays of objects and removes duplicates by key\n * @param arrays - Arrays to merge\n * @param key - Property to use for uniqueness check\n * @returns Merged array with unique objects\n */\nexport function mergeUniqueBy<T, K extends keyof T>(\n arrays: T[][],\n key: K\n): T[] {\n const map = new Map<T[K], T>();\n\n arrays.flat().forEach((item) => {\n if (!map.has(item[key])) {\n map.set(item[key], item);\n }\n });\n\n return Array.from(map.values());\n}\n\n/**\n * Merges arrays with custom comparator\n */\nexport function mergeUniqueWith<T>(\n arrays: T[][],\n compareFn: (item: T) => unknown\n): T[] {\n const map = new Map<unknown, T>();\n\n arrays.flat().forEach((item) => {\n const key = compareFn(item);\n if (!map.has(key)) {\n map.set(key, item);\n }\n });\n\n return Array.from(map.values());\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Button, ButtonGroup } from '../../type/button';\nimport { ButtonComponent } from '../button';\nimport { ConfigComponent } from '../../../../lib/components/config-component';\nimport { mergeUnique } from '../../../../lib/utils/array';\nimport { ContextMenuComponent, MenuItem } from '../../../menu';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { forkJoin, map, of } from 'rxjs';\nimport { deriveContrastColor } from '../../../../functions/color/operations';\n\nimport { deriveGroupClass } from '../../lib';\nimport {\n injectParentSize,\n provideSizeContext,\n} from '../../../../config/size-context.token';\nimport { Size } from '../../../../enum/scaling/size';\nimport {\n coerceSize,\n resolveSize,\n} from '../../../../functions/size/size-converter';\n\n@Component({\n selector: 'm-button-group, m-one-button-group',\n template: `\n @if (config(); as group) {\n <div\n class=\"button-group {{ classList() }}\"\n [class.is-context]=\"group.isContext\"\n >\n @if (group.isContext) {\n @if (primaryButton(); as primary) {\n <m-button\n [variant]=\"isPrimaryVisible() ? 'primary' : undefined\"\n [disabled]=\"isDisabled(primary.name)\"\n [color]=\"group.color\"\n [config]=\"primary\"\n [name]=\"primary.name\"\n [one]=\"isFromOne()\"\n [remote]=\"remote() ?? group.remote\"\n (clicked)=\"clicked.emit($event)\"\n />\n }\n @if (secondaryActions(); as actions) {\n <m-context-menu\n [config]=\"{\n icon: {\n name: config()?.contextMenuIcon ?? 'ellipsis-vertical',\n color: contextMenuIconColor(),\n },\n options: actions,\n }\"\n [inverted]=\"group.inverted\"\n [remote]=\"remote() ?? group.remote\"\n (action)=\"handleMenuAction($event)\"\n />\n }\n } @else {\n @for (button of mergedButtons(); track $index) {\n <m-button\n [variant]=\"isPrimary(button.name) ? 'primary' : undefined\"\n [disabled]=\"isDisabled(button.name)\"\n [color]=\"group.color\"\n [config]=\"button\"\n [name]=\"button.name\"\n [one]=\"isFromOne()\"\n [remote]=\"remote() ?? group.remote\"\n (clicked)=\"clicked.emit($event)\"\n />\n }\n }\n </div>\n }\n `,\n imports: [forwardRef(() => ButtonComponent), ContextMenuComponent],\n styleUrls: ['./group.sass'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // The one non-Section that may declare a Size, because a cluster of\n // actions routinely needs to differ from the region holding it (ADR 0008).\n '[style.font-size]': 'sizeLength()',\n },\n providers: [\n provideSizeContext(ButtonGroupComponent),\n ],\n})\nexport class ButtonGroupComponent extends ConfigComponent<ButtonGroup> {\n // to overwrite specific button config\n buttons = input<Record<string, Partial<Button>>>();\n\n // to add names\n names = input<string[]>();\n exclude = input<string[]>();\n vertical = input<boolean | undefined>();\n\n size = input<Size | undefined>();\n\n private readonly parentSize = injectParentSize();\n\n readonly resolvedSize = computed<Size>(() =>\n coerceSize(this.size(), this.config()?.size, this.parentSize?.size())\n );\n protected readonly sizeLength = computed(() =>\n resolveSize(this.resolvedSize())\n );\n\n override subFolder = 'button_groups';\n readonly clicked = output<Button | undefined>();\n\n protected readonly classList = computed(() => {\n const base = deriveGroupClass(this.config());\n if (this.isPrimaryVisible()) {\n return base.includes('is-primary') ? base : `${base} is-primary`.trim();\n }\n return base.replace('is-primary', '').trim();\n });\n\n protected readonly isPrimaryVisible = computed(() => {\n const primary = this.primaryButton();\n if (!primary) return false;\n return !!(this.isPrimary(primary.name) || primary.variant === 'primary');\n });\n\n protected readonly contextMenuIconColor = computed(() => {\n if (!this.isPrimaryVisible()) {\n return undefined;\n }\n const oppColor = this.pallet()?.oppositeColor;\n if (oppColor) {\n return deriveContrastColor(oppColor);\n }\n return 'white';\n });\n\n protected readonly mergedNames = computed(() => {\n const exclude = this.exclude() ?? [];\n const names = mergeUnique<string>(\n this.names() ?? [],\n this.config()?.names ?? []\n ).filter((name) => !exclude.includes(name));\n const buttonNames = new Set(this.mergedButtons().map((b) => b.name));\n return names.filter((name) => !buttonNames.has(name));\n });\n\n protected readonly buttonsResource = rxResource({\n params: () => {\n const config = this.config();\n if (!config?.isContext) return undefined;\n\n const namesFromAsset = config.names ?? [];\n const buttonNamesFromAsset = config.buttons?.map((b) => b.name) ?? [];\n const manualNames = this.names() ?? [];\n\n const allNames = mergeUnique<string>(\n manualNames,\n mergeUnique<string>(namesFromAsset, buttonNamesFromAsset as string[])\n );\n\n if (allNames.length === 0) return undefined;\n\n return { names: allNames, isOne: this.isFromOne() };\n },\n stream: ({ params }) => {\n if (!params) return of([]);\n return forkJoin(\n params.names.map((name) =>\n this.assetStore\n .resolve<Button>('buttons', name, params.isOne)\n .pipe(map((button) => ({ ...button, name })))\n )\n );\n },\n });\n\n protected readonly mergedButtons = computed(() => {\n const config = this.config();\n const buttonOverrides = this.buttons();\n const exclude = this.exclude() ?? [];\n\n // If isContext is true, we use the resolved buttons from the resource\n // Otherwise we use buttons from config, and also include names as partial buttons\n const yamlButtons = (\n config?.isContext\n ? (this.buttonsResource.value() ?? [])\n : [\n ...(config?.buttons ?? []),\n ...(config?.names?.map((name) => ({ name }) as Button) ?? []),\n ]\n ).map((b) => (typeof b === 'string' ? ({ name: b } as Button) : b));\n\n const merged = yamlButtons\n .filter((b) => !b.name || !exclude.includes(b.name))\n .map((button) => ({\n ...button,\n ...(button.name && buttonOverrides?.[button.name]\n ? buttonOverrides[button.name]\n : {}),\n }));\n\n if (!buttonOverrides) {\n return merged;\n }\n\n const yamlNames = new Set(yamlButtons.map((b) => b.name));\n const configNames = new Set(config?.names ?? []);\n const extra = Object.entries(buttonOverrides)\n .filter(\n ([name]) =>\n !yamlNames.has(name) &&\n !configNames.has(name) &&\n !exclude.includes(name)\n )\n .map(([name, override]) => ({ name, ...override }) as Button);\n\n return [...merged, ...extra];\n });\n\n protected readonly primaryButton = computed(() => {\n const buttons = this.mergedButtons();\n const primaryName = this.config()?.primary;\n if (!primaryName) return buttons[0];\n return buttons.find((b) => b.name === primaryName) ?? buttons[0];\n });\n\n protected readonly secondaryActions = computed<MenuItem[][] | undefined>(\n () => {\n const primary = this.primaryButton();\n const secondary = this.mergedButtons().filter((b) => b !== primary);\n\n if (secondary.length === 0) return undefined;\n\n const items: MenuItem[] = secondary.map((b) => ({\n id: b.name ?? '',\n label: b.label ?? b.name ?? '',\n icon: b.icon,\n nav: b.nav,\n link: b.href,\n disabled: b.disabled ? true : undefined,\n }));\n\n return [items];\n }\n );\n\n constructor() {\n super();\n effect(this.updateProperty);\n }\n\n isPrimary(name?: string): true | undefined {\n const config = this.config();\n if (!config?.primary || !name) {\n return undefined;\n }\n return name === config.primary ? true : undefined;\n }\n\n isDisabled(name?: string): boolean | undefined {\n if (!name) return undefined;\n const buttonOverride = this.buttons()?.[name];\n if (typeof buttonOverride?.disabled !== 'undefined') {\n return buttonOverride.disabled;\n }\n const config = this.config();\n if (!config?.disabled) return undefined;\n return config.disabled[name];\n }\n\n protected handleMenuAction(item: MenuItem) {\n const button = this.mergedButtons().find((b) => b.name === item.id);\n this.clicked.emit(button);\n }\n\n private readonly updateProperty = (): void => {\n const updatedConfig = <ButtonGroup>{};\n const vertical = this.vertical();\n if (typeof vertical !== 'undefined') {\n updatedConfig.vertical = vertical;\n }\n this.config.update((prev) => ({\n ...(prev ?? {}),\n ...updatedConfig,\n }));\n };\n\n}\n"],"mappings":"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"}
|