aeico-components 0.1.3 → 0.1.5
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/dist/alert.cjs +6 -0
- package/dist/alert.cjs.map +1 -0
- package/dist/alert.js +6 -0
- package/dist/alert.js.map +1 -0
- package/dist/badge.cjs +6 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.js +6 -0
- package/dist/badge.js.map +1 -0
- package/dist/breadcrumb.cjs +7 -0
- package/dist/breadcrumb.cjs.map +1 -0
- package/dist/breadcrumb.js +7 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/button-group.cjs +6 -0
- package/dist/button-group.cjs.map +1 -0
- package/dist/button-group.js +6 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.cjs +6 -0
- package/dist/button.cjs.map +1 -0
- package/dist/button.js +6 -0
- package/dist/button.js.map +1 -0
- package/dist/card.cjs +6 -0
- package/dist/card.cjs.map +1 -0
- package/dist/card.js +6 -0
- package/dist/card.js.map +1 -0
- package/dist/checkbox.cjs +6 -0
- package/dist/checkbox.cjs.map +1 -0
- package/dist/checkbox.js +6 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chunks/aeico-component.cjs +17 -0
- package/dist/chunks/aeico-component.cjs.map +1 -0
- package/dist/chunks/aeico-component.js +18 -0
- package/dist/chunks/aeico-component.js.map +1 -0
- package/dist/chunks/aeico-field.cjs +179 -0
- package/dist/chunks/aeico-field.cjs.map +1 -0
- package/dist/chunks/aeico-field.js +180 -0
- package/dist/chunks/aeico-field.js.map +1 -0
- package/dist/chunks/alert.cjs +170 -0
- package/dist/chunks/alert.cjs.map +1 -0
- package/dist/chunks/alert.js +171 -0
- package/dist/chunks/alert.js.map +1 -0
- package/dist/chunks/badge.cjs +85 -0
- package/dist/chunks/badge.cjs.map +1 -0
- package/dist/chunks/badge.js +86 -0
- package/dist/chunks/badge.js.map +1 -0
- package/dist/chunks/breadcrumb-item.cjs +261 -0
- package/dist/chunks/breadcrumb-item.cjs.map +1 -0
- package/dist/chunks/breadcrumb-item.js +262 -0
- package/dist/chunks/breadcrumb-item.js.map +1 -0
- package/dist/chunks/button-group.cjs +79 -0
- package/dist/chunks/button-group.cjs.map +1 -0
- package/dist/chunks/button-group.js +80 -0
- package/dist/chunks/button-group.js.map +1 -0
- package/dist/chunks/button.cjs +348 -0
- package/dist/chunks/button.cjs.map +1 -0
- package/dist/chunks/button.js +349 -0
- package/dist/chunks/button.js.map +1 -0
- package/dist/chunks/card.cjs +93 -0
- package/dist/chunks/card.cjs.map +1 -0
- package/dist/chunks/card.js +94 -0
- package/dist/chunks/card.js.map +1 -0
- package/dist/chunks/checkbox.cjs +73 -0
- package/dist/chunks/checkbox.cjs.map +1 -0
- package/dist/chunks/checkbox.js +74 -0
- package/dist/chunks/checkbox.js.map +1 -0
- package/dist/chunks/color.cjs +4 -0
- package/dist/chunks/color.cjs.map +1 -0
- package/dist/chunks/color.js +5 -0
- package/dist/chunks/color.js.map +1 -0
- package/dist/chunks/detail.cjs +143 -0
- package/dist/chunks/detail.cjs.map +1 -0
- package/dist/chunks/detail.js +144 -0
- package/dist/chunks/detail.js.map +1 -0
- package/dist/chunks/dialog.cjs +117 -0
- package/dist/chunks/dialog.cjs.map +1 -0
- package/dist/chunks/dialog.js +118 -0
- package/dist/chunks/dialog.js.map +1 -0
- package/dist/chunks/divider.cjs +80 -0
- package/dist/chunks/divider.cjs.map +1 -0
- package/dist/chunks/divider.js +81 -0
- package/dist/chunks/divider.js.map +1 -0
- package/dist/chunks/dropdown-button.cjs +534 -0
- package/dist/chunks/dropdown-button.cjs.map +1 -0
- package/dist/chunks/dropdown-button.js +535 -0
- package/dist/chunks/dropdown-button.js.map +1 -0
- package/dist/chunks/icon-button.cjs +35 -0
- package/dist/chunks/icon-button.cjs.map +1 -0
- package/dist/chunks/icon-button.js +36 -0
- package/dist/chunks/icon-button.js.map +1 -0
- package/dist/chunks/icon.cjs +78 -0
- package/dist/chunks/icon.cjs.map +1 -0
- package/dist/chunks/icon.js +79 -0
- package/dist/chunks/icon.js.map +1 -0
- package/dist/chunks/navbar.cjs +142 -0
- package/dist/chunks/navbar.cjs.map +1 -0
- package/dist/chunks/navbar.js +143 -0
- package/dist/chunks/navbar.js.map +1 -0
- package/dist/chunks/radio.cjs +181 -0
- package/dist/chunks/radio.cjs.map +1 -0
- package/dist/chunks/radio.js +182 -0
- package/dist/chunks/radio.js.map +1 -0
- package/dist/chunks/select.cjs +350 -0
- package/dist/chunks/select.cjs.map +1 -0
- package/dist/chunks/select.js +351 -0
- package/dist/chunks/select.js.map +1 -0
- package/dist/chunks/size.cjs +4 -0
- package/dist/chunks/size.cjs.map +1 -0
- package/dist/chunks/size.js +5 -0
- package/dist/chunks/size.js.map +1 -0
- package/dist/chunks/slider.cjs +648 -0
- package/dist/chunks/slider.cjs.map +1 -0
- package/dist/chunks/slider.js +649 -0
- package/dist/chunks/slider.js.map +1 -0
- package/dist/chunks/switch.cjs +73 -0
- package/dist/chunks/switch.cjs.map +1 -0
- package/dist/chunks/switch.js +74 -0
- package/dist/chunks/switch.js.map +1 -0
- package/dist/chunks/tab-panel.cjs +165 -0
- package/dist/chunks/tab-panel.cjs.map +1 -0
- package/dist/chunks/tab-panel.js +166 -0
- package/dist/chunks/tab-panel.js.map +1 -0
- package/dist/chunks/tag.cjs +108 -0
- package/dist/chunks/tag.cjs.map +1 -0
- package/dist/chunks/tag.js +109 -0
- package/dist/chunks/tag.js.map +1 -0
- package/dist/chunks/text-input.cjs +59 -0
- package/dist/chunks/text-input.cjs.map +1 -0
- package/dist/chunks/text-input.js +60 -0
- package/dist/chunks/text-input.js.map +1 -0
- package/dist/chunks/variables.cjs +372 -0
- package/dist/chunks/variables.cjs.map +1 -0
- package/dist/chunks/variables.js +373 -0
- package/dist/chunks/variables.js.map +1 -0
- package/dist/detail.cjs +6 -0
- package/dist/detail.cjs.map +1 -0
- package/dist/detail.js +6 -0
- package/dist/detail.js.map +1 -0
- package/dist/dialog.cjs +6 -0
- package/dist/dialog.cjs.map +1 -0
- package/dist/dialog.js +6 -0
- package/dist/dialog.js.map +1 -0
- package/dist/divider.cjs +6 -0
- package/dist/divider.cjs.map +1 -0
- package/dist/divider.js +6 -0
- package/dist/divider.js.map +1 -0
- package/dist/dropdown.cjs +7 -0
- package/dist/dropdown.cjs.map +1 -0
- package/dist/dropdown.js +7 -0
- package/dist/dropdown.js.map +1 -0
- package/dist/icon-button.cjs +6 -0
- package/dist/icon-button.cjs.map +1 -0
- package/dist/icon-button.js +6 -0
- package/dist/icon-button.js.map +1 -0
- package/dist/icon.cjs +6 -0
- package/dist/icon.cjs.map +1 -0
- package/dist/icon.js +6 -0
- package/dist/icon.js.map +1 -0
- package/dist/index.cjs +93 -4168
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +92 -4167
- package/dist/index.js.map +1 -1
- package/dist/navbar.cjs +6 -0
- package/dist/navbar.cjs.map +1 -0
- package/dist/navbar.js +6 -0
- package/dist/navbar.js.map +1 -0
- package/dist/radio-group.cjs +7 -0
- package/dist/radio-group.cjs.map +1 -0
- package/dist/radio-group.js +7 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/select.cjs +99 -0
- package/dist/select.cjs.map +1 -0
- package/dist/select.js +99 -0
- package/dist/select.js.map +1 -0
- package/dist/slider.cjs +6 -0
- package/dist/slider.cjs.map +1 -0
- package/dist/slider.js +6 -0
- package/dist/slider.js.map +1 -0
- package/dist/switch.cjs +6 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.js +6 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.cjs +8 -0
- package/dist/tabs.cjs.map +1 -0
- package/dist/tabs.js +8 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tag.cjs +5 -0
- package/dist/tag.cjs.map +1 -0
- package/dist/tag.js +5 -0
- package/dist/tag.js.map +1 -0
- package/dist/text-input.cjs +6 -0
- package/dist/text-input.cjs.map +1 -0
- package/dist/text-input.js +6 -0
- package/dist/text-input.js.map +1 -0
- package/dist/types/aeico-field.d.ts +5 -5
- package/dist/types/button/button.d.ts +2 -1
- package/dist/types/checkbox/checkbox.d.ts +5 -5
- package/dist/types/index.d.ts +2 -0
- package/dist/types/progress-bar/defines.d.ts +1 -0
- package/dist/types/progress-bar/index.d.ts +3 -0
- package/dist/types/progress-bar/progress-bar.d.ts +37 -0
- package/dist/types/radio-group/radio-group.d.ts +1 -1
- package/dist/types/select/select.d.ts +1 -1
- package/dist/types/switch/switch.d.ts +5 -5
- package/package.json +16 -4
- package/src/aeico-field.ts +12 -8
- package/src/button/button.ts +11 -13
- package/src/checkbox/checkbox.ts +4 -4
- package/src/index.ts +2 -0
- package/src/navbar/navbar.ts +1 -3
- package/src/progress-bar/defines.ts +8 -0
- package/src/progress-bar/index.ts +3 -0
- package/src/progress-bar/progress-bar.ts +80 -0
- package/src/radio-group/radio-group.ts +1 -1
- package/src/select/select.ts +1 -1
- package/src/styles/components/progress-bar.css +44 -0
- package/src/switch/switch.ts +4 -4
- package/src/tabs/tab.ts +1 -1
- package/src/tabs/tabs.ts +1 -2
- package/src/utils.ts +1 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const variables = require("./variables.cjs");
|
|
3
|
+
const color = require("./color.cjs");
|
|
4
|
+
const aeicoComponent = require("./aeico-component.cjs");
|
|
5
|
+
const aeico = require("aeico");
|
|
6
|
+
const style$1 = ":host {\n display: block;\n}\n\n/* Hide the separator template slot visually */\n.sep-template {\n display: none !important;\n}\n\n.list {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n";
|
|
7
|
+
var __create$1 = Object.create;
|
|
8
|
+
var __defProp$1 = Object.defineProperty;
|
|
9
|
+
var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
|
|
10
|
+
var __knownSymbol$1 = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
11
|
+
var __typeError$1 = (msg) => {
|
|
12
|
+
throw TypeError(msg);
|
|
13
|
+
};
|
|
14
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
15
|
+
var __decoratorStart$1 = (base) => [, , , __create$1((base == null ? void 0 : base[__knownSymbol$1("metadata")]) ?? null)];
|
|
16
|
+
var __decoratorStrings$1 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
17
|
+
var __expectFn$1 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$1("Function expected") : fn;
|
|
18
|
+
var __decoratorContext$1 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$1[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$1("Already initialized") : fns.push(__expectFn$1(fn || null)) });
|
|
19
|
+
var __decoratorMetadata$1 = (array, target) => __defNormalProp$1(target, __knownSymbol$1("metadata"), array[3]);
|
|
20
|
+
var __runInitializers$1 = (array, flags, self, value) => {
|
|
21
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
22
|
+
return value;
|
|
23
|
+
};
|
|
24
|
+
var __decorateElement$1 = (array, flags, name, decorators, target, extra) => {
|
|
25
|
+
var fn, it, done, ctx, access, k = flags & 7, s = false, p = false;
|
|
26
|
+
var j = array.length + 1, key = __decoratorStrings$1[k + 5];
|
|
27
|
+
var initializers = array[j - 1] = [], extraInitializers = array[j] || (array[j] = []);
|
|
28
|
+
var desc = (target = target.prototype, __getOwnPropDesc$1({ get [name]() {
|
|
29
|
+
return __privateGet$1(this, extra);
|
|
30
|
+
}, set [name](x) {
|
|
31
|
+
return __privateSet$1(this, extra, x);
|
|
32
|
+
} }, name));
|
|
33
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
34
|
+
ctx = __decoratorContext$1(k, name, done = {}, array[3], extraInitializers);
|
|
35
|
+
{
|
|
36
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: (x) => name in x };
|
|
37
|
+
access.get = (x) => x[name];
|
|
38
|
+
access.set = (x, y) => x[name] = y;
|
|
39
|
+
}
|
|
40
|
+
it = (0, decorators[i])({ get: desc.get, set: desc.set }, ctx), done._ = 1;
|
|
41
|
+
if (it === void 0) __expectFn$1(it) && (desc[key] = it);
|
|
42
|
+
else if (typeof it !== "object" || it === null) __typeError$1("Object expected");
|
|
43
|
+
else __expectFn$1(fn = it.get) && (desc.get = fn), __expectFn$1(fn = it.set) && (desc.set = fn), __expectFn$1(fn = it.init) && initializers.unshift(fn);
|
|
44
|
+
}
|
|
45
|
+
return desc && __defProp$1(target, name, desc), target;
|
|
46
|
+
};
|
|
47
|
+
var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
48
|
+
var __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1("Cannot " + msg);
|
|
49
|
+
var __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, "read from private field"), member.get(obj));
|
|
50
|
+
var __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
51
|
+
var __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, "write to private field"), member.set(obj, value), value);
|
|
52
|
+
var _color_dec, _separator_dec, _a$1, _init$1, _separator, _color;
|
|
53
|
+
class Breadcrumb extends (_a$1 = aeicoComponent.AeicoComponent, _separator_dec = [aeico.prop({ type: String })], _color_dec = [aeico.prop({ type: String })], _a$1) {
|
|
54
|
+
constructor() {
|
|
55
|
+
super(...arguments);
|
|
56
|
+
__privateAdd$1(this, _separator, __runInitializers$1(_init$1, 8, this, "/")), __runInitializers$1(_init$1, 11, this);
|
|
57
|
+
__privateAdd$1(this, _color, __runInitializers$1(_init$1, 12, this)), __runInitializers$1(_init$1, 15, this);
|
|
58
|
+
__publicField$1(this, "_itemsSlot", null);
|
|
59
|
+
__publicField$1(this, "_sepSlot", null);
|
|
60
|
+
__publicField$1(this, "_syncSeparators", () => {
|
|
61
|
+
const items = this._getItems();
|
|
62
|
+
const sepEl = this._getSepElement();
|
|
63
|
+
items.forEach((item, i) => {
|
|
64
|
+
item.querySelectorAll("[data-ae-sep]").forEach((n) => n.remove());
|
|
65
|
+
const isLast = i === items.length - 1;
|
|
66
|
+
if (isLast) {
|
|
67
|
+
item.setAttribute("aria-current", "page");
|
|
68
|
+
} else {
|
|
69
|
+
item.removeAttribute("aria-current");
|
|
70
|
+
}
|
|
71
|
+
if (i === 0) return;
|
|
72
|
+
const wrapper = document.createElement("span");
|
|
73
|
+
wrapper.setAttribute("slot", "separator");
|
|
74
|
+
wrapper.setAttribute("data-ae-sep", "");
|
|
75
|
+
wrapper.setAttribute("aria-hidden", "true");
|
|
76
|
+
if (sepEl) {
|
|
77
|
+
wrapper.appendChild(sepEl.cloneNode(true));
|
|
78
|
+
} else {
|
|
79
|
+
wrapper.textContent = this.separator;
|
|
80
|
+
}
|
|
81
|
+
item.prepend(wrapper);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
render() {
|
|
86
|
+
return aeico.html(({ nav, ol, slot }) => {
|
|
87
|
+
nav({ "aria-label": "breadcrumb", part: "nav" }, () => {
|
|
88
|
+
ol({ part: "list", className: "list" }, () => {
|
|
89
|
+
this._itemsSlot = slot({
|
|
90
|
+
"@slotchange": () => this._syncSeparators()
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
this._sepSlot = slot({
|
|
95
|
+
name: "separator",
|
|
96
|
+
className: "sep-template",
|
|
97
|
+
"@slotchange": () => this._syncSeparators()
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
onUpdated() {
|
|
102
|
+
this._syncSeparators();
|
|
103
|
+
}
|
|
104
|
+
_getItems() {
|
|
105
|
+
var _a2;
|
|
106
|
+
return ((_a2 = this._itemsSlot) == null ? void 0 : _a2.assignedElements()) ?? [];
|
|
107
|
+
}
|
|
108
|
+
_getSepElement() {
|
|
109
|
+
var _a2;
|
|
110
|
+
return ((_a2 = this._sepSlot) == null ? void 0 : _a2.assignedElements()[0]) ?? null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
_init$1 = __decoratorStart$1(_a$1);
|
|
114
|
+
_separator = /* @__PURE__ */ new WeakMap();
|
|
115
|
+
_color = /* @__PURE__ */ new WeakMap();
|
|
116
|
+
__decorateElement$1(_init$1, 4, "separator", _separator_dec, Breadcrumb, _separator);
|
|
117
|
+
__decorateElement$1(_init$1, 4, "color", _color_dec, Breadcrumb, _color);
|
|
118
|
+
__decoratorMetadata$1(_init$1, Breadcrumb);
|
|
119
|
+
__publicField$1(Breadcrumb, "tagName", "breadcrumb");
|
|
120
|
+
__publicField$1(Breadcrumb, "styles", [variables.styleVariables, color.colorCSS, style$1]);
|
|
121
|
+
Breadcrumb.register();
|
|
122
|
+
const style = `:host {
|
|
123
|
+
display: contents;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.item {
|
|
127
|
+
display: inline-flex;
|
|
128
|
+
align-items: center;
|
|
129
|
+
list-style: none;
|
|
130
|
+
white-space: nowrap;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Separator — uses a fixed muted color that does NOT follow the breadcrumb's color prop */
|
|
134
|
+
.sep {
|
|
135
|
+
display: inline-flex;
|
|
136
|
+
align-items: center;
|
|
137
|
+
color: var(--color-text-muted);
|
|
138
|
+
padding: 0 0.35em;
|
|
139
|
+
user-select: none;
|
|
140
|
+
pointer-events: none;
|
|
141
|
+
flex-shrink: 0;
|
|
142
|
+
font-size: 0.85em;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Hide separator on the first item */
|
|
146
|
+
:host(:first-child) .sep,
|
|
147
|
+
:host(:first-of-type) .sep {
|
|
148
|
+
display: none;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.label {
|
|
152
|
+
display: inline-flex;
|
|
153
|
+
align-items: center;
|
|
154
|
+
color: var(--color-text-muted);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Current page — last item */
|
|
158
|
+
:host([aria-current="page"]) .label {
|
|
159
|
+
color: var(--color-text-main);
|
|
160
|
+
font-weight: 500;
|
|
161
|
+
cursor: default;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Link items */
|
|
165
|
+
.label a {
|
|
166
|
+
color: var(--color-accent, var(--color-text-link));
|
|
167
|
+
text-decoration: none;
|
|
168
|
+
outline: none;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.label a:hover {
|
|
172
|
+
color: var(--color-accent-hover, var(--color-text-link-hover));
|
|
173
|
+
text-decoration: underline;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.label a:focus-visible {
|
|
177
|
+
outline: 2px solid var(--color-accent, var(--focus-ring-color));
|
|
178
|
+
outline-offset: 2px;
|
|
179
|
+
border-radius: 2px;
|
|
180
|
+
}
|
|
181
|
+
`;
|
|
182
|
+
var __create = Object.create;
|
|
183
|
+
var __defProp = Object.defineProperty;
|
|
184
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
185
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
186
|
+
var __typeError = (msg) => {
|
|
187
|
+
throw TypeError(msg);
|
|
188
|
+
};
|
|
189
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
190
|
+
var __decoratorStart = (base) => [, , , __create((base == null ? void 0 : base[__knownSymbol("metadata")]) ?? null)];
|
|
191
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
192
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
193
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
194
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
195
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
196
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
197
|
+
return value;
|
|
198
|
+
};
|
|
199
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
200
|
+
var fn, it, done, ctx, access, k = flags & 7, s = false, p = false;
|
|
201
|
+
var j = array.length + 1, key = __decoratorStrings[k + 5];
|
|
202
|
+
var initializers = array[j - 1] = [], extraInitializers = array[j] || (array[j] = []);
|
|
203
|
+
var desc = (target = target.prototype, __getOwnPropDesc({ get [name]() {
|
|
204
|
+
return __privateGet(this, extra);
|
|
205
|
+
}, set [name](x) {
|
|
206
|
+
return __privateSet(this, extra, x);
|
|
207
|
+
} }, name));
|
|
208
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
209
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
210
|
+
{
|
|
211
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: (x) => name in x };
|
|
212
|
+
access.get = (x) => x[name];
|
|
213
|
+
access.set = (x, y) => x[name] = y;
|
|
214
|
+
}
|
|
215
|
+
it = (0, decorators[i])({ get: desc.get, set: desc.set }, ctx), done._ = 1;
|
|
216
|
+
if (it === void 0) __expectFn(it) && (desc[key] = it);
|
|
217
|
+
else if (typeof it !== "object" || it === null) __typeError("Object expected");
|
|
218
|
+
else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
|
|
219
|
+
}
|
|
220
|
+
return desc && __defProp(target, name, desc), target;
|
|
221
|
+
};
|
|
222
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
223
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
224
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
|
|
225
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
226
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
227
|
+
var _href_dec, _a, _init, _href;
|
|
228
|
+
class BreadcrumbItem extends (_a = aeicoComponent.AeicoComponent, _href_dec = [aeico.prop({ type: String })], _a) {
|
|
229
|
+
constructor() {
|
|
230
|
+
super(...arguments);
|
|
231
|
+
__privateAdd(this, _href, __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
|
|
232
|
+
}
|
|
233
|
+
render() {
|
|
234
|
+
return aeico.html(({ li, span, slot, a }) => {
|
|
235
|
+
li({ part: "item", className: "item" }, () => {
|
|
236
|
+
span({ part: "separator", className: "sep", "aria-hidden": "true" }, () => {
|
|
237
|
+
slot({ name: "separator" });
|
|
238
|
+
});
|
|
239
|
+
span({ part: "label", className: "label" }, () => {
|
|
240
|
+
if (this.href) {
|
|
241
|
+
a({ href: this.href, part: "link" }, () => {
|
|
242
|
+
slot();
|
|
243
|
+
});
|
|
244
|
+
} else {
|
|
245
|
+
slot();
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
_init = __decoratorStart(_a);
|
|
253
|
+
_href = /* @__PURE__ */ new WeakMap();
|
|
254
|
+
__decorateElement(_init, 4, "href", _href_dec, BreadcrumbItem, _href);
|
|
255
|
+
__decoratorMetadata(_init, BreadcrumbItem);
|
|
256
|
+
__publicField(BreadcrumbItem, "tagName", "breadcrumb-item");
|
|
257
|
+
__publicField(BreadcrumbItem, "styles", [variables.styleVariables, style]);
|
|
258
|
+
BreadcrumbItem.register();
|
|
259
|
+
exports.Breadcrumb = Breadcrumb;
|
|
260
|
+
exports.BreadcrumbItem = BreadcrumbItem;
|
|
261
|
+
//# sourceMappingURL=breadcrumb-item.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb-item.cjs","sources":["../../src/breadcrumb/breadcrumb.ts","../../src/breadcrumb/breadcrumb-item.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport colorCSS from '../styles/color.css?inline';\nimport style from '../styles/components/breadcrumb.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\nimport type BreadcrumbItem from './breadcrumb-item';\n\n/**\n * Breadcrumb Component\n *\n * A navigation trail that shows the user's location in a hierarchy.\n * Automatically injects separators between items and marks the last item\n * as `aria-current=\"page\"`.\n *\n * The separator is configurable via:\n * - `separator` attribute (text, default `/`) — simple and concise\n * - `slot=\"separator\"` (any element, e.g. `ae-icon`) — takes priority over the attribute\n *\n * Supports `color` for theming item link colors. The separator intentionally\n * uses a fixed muted color and does NOT respond to the `color` prop.\n *\n * @example\n * ```html\n * <!-- Default separator \"/\" -->\n * <ae-breadcrumb>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item href=\"/docs\">Docs</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Getting Started</ae-breadcrumb-item>\n * </ae-breadcrumb>\n *\n * <!-- Custom text separator -->\n * <ae-breadcrumb separator=\">\">\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current</ae-breadcrumb-item>\n * </ae-breadcrumb>\n *\n * <!-- Icon separator (slot takes priority over separator attribute) -->\n * <ae-breadcrumb>\n * <ae-icon slot=\"separator\" name=\"chevron-right\" size=\"xs\"></ae-icon>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current</ae-breadcrumb-item>\n * </ae-breadcrumb>\n * ```\n */\nclass Breadcrumb extends AeicoComponent {\n static tagName = 'breadcrumb';\n\n protected static styles = [styleVariables, colorCSS, style];\n\n /** Text separator shown between items. Ignored when `slot=\"separator\"` is provided. */\n @prop({ type: String })\n accessor separator: string = '/';\n\n @prop({ type: String })\n accessor color: string | undefined;\n\n private _itemsSlot: HTMLSlotElement | null = null;\n private _sepSlot: HTMLSlotElement | null = null;\n\n protected render() {\n return html(({ nav, ol, slot }) => {\n nav({ 'aria-label': 'breadcrumb', part: 'nav' }, () => {\n ol({ part: 'list', className: 'list' }, () => {\n this._itemsSlot = slot({\n '@slotchange': () => this._syncSeparators(),\n });\n });\n });\n this._sepSlot = slot({\n name: 'separator',\n className: 'sep-template',\n '@slotchange': () => this._syncSeparators(),\n });\n });\n }\n\n protected onUpdated() {\n this._syncSeparators();\n }\n\n private _getItems(): BreadcrumbItem[] {\n return (this._itemsSlot?.assignedElements() ?? []) as BreadcrumbItem[];\n }\n\n private _getSepElement(): Element | null {\n return this._sepSlot?.assignedElements()[0] ?? null;\n }\n\n private _syncSeparators = () => {\n const items = this._getItems();\n const sepEl = this._getSepElement();\n\n items.forEach((item, i) => {\n // Remove previously injected separators to avoid duplicates\n item.querySelectorAll('[data-ae-sep]').forEach((n) => n.remove());\n\n const isLast = i === items.length - 1;\n\n // Mark the last item as the current page for accessibility\n if (isLast) {\n item.setAttribute('aria-current', 'page');\n } else {\n item.removeAttribute('aria-current');\n }\n\n // First item gets no separator\n if (i === 0) return;\n\n const wrapper = document.createElement('span');\n wrapper.setAttribute('slot', 'separator');\n wrapper.setAttribute('data-ae-sep', '');\n wrapper.setAttribute('aria-hidden', 'true');\n\n if (sepEl) {\n // Clone the slotted separator element (e.g. ae-icon)\n wrapper.appendChild(sepEl.cloneNode(true));\n } else {\n // Fall back to text separator\n wrapper.textContent = this.separator;\n }\n\n item.prepend(wrapper);\n });\n };\n}\n\nBreadcrumb.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-breadcrumb': Breadcrumb;\n }\n}\n\nexport default Breadcrumb;\nexport type BreadcrumbProps = InferProps<typeof Breadcrumb>;\n","import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport style from '../styles/components/breadcrumb-item.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\n\n/**\n * BreadcrumbItem Component\n *\n * A single item in the `ae-breadcrumb` navigation trail.\n * Renders as a link (`<a>`) when `href` is provided, otherwise as plain text.\n * The separator is injected by the parent `ae-breadcrumb`.\n *\n * @example\n * ```html\n * <ae-breadcrumb>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item href=\"/docs\">Docs</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current Page</ae-breadcrumb-item>\n * </ae-breadcrumb>\n * ```\n */\nclass BreadcrumbItem extends AeicoComponent {\n static tagName = 'breadcrumb-item';\n\n protected static styles = [styleVariables, style];\n\n @prop({ type: String })\n accessor href: string | undefined;\n\n protected render() {\n return html(({ li, span, slot, a }) => {\n li({ part: 'item', className: 'item' }, () => {\n span({ part: 'separator', className: 'sep', 'aria-hidden': 'true' }, () => {\n slot({ name: 'separator' });\n });\n span({ part: 'label', className: 'label' }, () => {\n if (this.href) {\n a({ href: this.href, part: 'link' }, () => {\n slot();\n });\n } else {\n slot();\n }\n });\n });\n });\n }\n}\n\nBreadcrumbItem.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-breadcrumb-item': BreadcrumbItem;\n }\n}\n\nexport default BreadcrumbItem;\nexport type BreadcrumbItemProps = InferProps<typeof BreadcrumbItem>;\n"],"names":["_a","_init","AeicoComponent","prop","__privateAdd","__runInitializers","__publicField","html","__decoratorStart","__decorateElement","__decoratorMetadata","styleVariables","colorCSS","style"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,YAAA,gBAAAA,MAAAC,SAAA,YAAA;AA8CA,MAAM,oBAAmBD,OAAAE,+BAMvB,iBAAA,CAACC,MAAAA,KAAK,EAAE,MAAM,OAAA,CAAQ,CAAA,GAGtB,aAAA,CAACA,WAAK,EAAE,MAAM,OAAA,CAAQ,IATCH,MAAe;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AAOEI,mBAAA,MAAS,YAAoBC,oBAA7BJ,SAAA,GAAA,MAA6B,GAAA,CAAA,GAA7BI,oBAAAJ,SAAA,IAAA,IAAA;AAGAG,mBAAA,MAAS,QAATC,oBAAAJ,SAAA,IAAA,IAAA,CAAA,GAAAI,oBAAAJ,SAAA,IAAA,IAAA;AAEAK,oBAAA,MAAQ,cAAqC,IAAA;AAC7CA,oBAAA,MAAQ,YAAmC,IAAA;AA+B3CA,oBAAA,MAAQ,mBAAkB,MAAM;AAC9B,YAAM,QAAQ,KAAK,UAAA;AACnB,YAAM,QAAQ,KAAK,eAAA;AAEnB,YAAM,QAAQ,CAAC,MAAM,MAAM;AAEzB,aAAK,iBAAiB,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ;AAEhE,cAAM,SAAS,MAAM,MAAM,SAAS;AAGpC,YAAI,QAAQ;AACV,eAAK,aAAa,gBAAgB,MAAM;AAAA,QAC1C,OAAO;AACL,eAAK,gBAAgB,cAAc;AAAA,QACrC;AAGA,YAAI,MAAM,EAAG;AAEb,cAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,gBAAQ,aAAa,QAAQ,WAAW;AACxC,gBAAQ,aAAa,eAAe,EAAE;AACtC,gBAAQ,aAAa,eAAe,MAAM;AAE1C,YAAI,OAAO;AAET,kBAAQ,YAAY,MAAM,UAAU,IAAI,CAAC;AAAA,QAC3C,OAAO;AAEL,kBAAQ,cAAc,KAAK;AAAA,QAC7B;AAEA,aAAK,QAAQ,OAAO;AAAA,MACtB,CAAC;AAAA,IACH,CAAA;AAAA,EAAA;AAAA,EAhEU,SAAS;AACjB,WAAOC,MAAAA,KAAK,CAAC,EAAE,KAAK,IAAI,WAAW;AACjC,UAAI,EAAE,cAAc,cAAc,MAAM,MAAA,GAAS,MAAM;AACrD,WAAG,EAAE,MAAM,QAAQ,WAAW,OAAA,GAAU,MAAM;AAC5C,eAAK,aAAa,KAAK;AAAA,YACrB,eAAe,MAAM,KAAK,gBAAA;AAAA,UAAgB,CAC3C;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AACD,WAAK,WAAW,KAAK;AAAA,QACnB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,eAAe,MAAM,KAAK,gBAAA;AAAA,MAAgB,CAC3C;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEU,YAAY;AACpB,SAAK,gBAAA;AAAA,EACP;AAAA,EAEQ,YAA8B;;AACpC,aAAQP,MAAA,KAAK,eAAL,gBAAAA,IAAiB,uBAAsB,CAAA;AAAA,EACjD;AAAA,EAEQ,iBAAiC;;AACvC,aAAOA,MAAA,KAAK,aAAL,gBAAAA,IAAe,mBAAmB,OAAM;AAAA,EACjD;AAsCF;AAhFAC,UAAAO,mBAAAR,IAAA;AAOW,aAAA,oBAAA,QAAA;AAGA,SAAA,oBAAA,QAAA;AAHTS,oBAAAR,SAAA,GAAS,aADT,gBANI,YAOK,UAAA;AAGTQ,oBAAAR,SAAA,GAAS,SADT,YATI,YAUK,MAAA;AAVXS,sBAAAT,SAAM,UAAA;AACJK,gBADI,YACG,WAAU,YAAA;AAEjBA,gBAHI,YAGa,UAAS,CAACK,UAAAA,gBAAgBC,MAAAA,UAAUC,OAAK,CAAA;AA+E5D,WAAW,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChIX,IAAA,WAAA,IAAA,OAAA;AAuBA,MAAM,wBAAuB,oCAK3B,YAAA,CAACV,MAAAA,KAAK,EAAE,MAAM,OAAA,CAAQ,CAAA,GALK,IAAe;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AAME,iBAAA,MAAS,OAAT,kBAAA,OAAA,GAAA,IAAA,CAAA,GAAA,kBAAA,OAAA,IAAA,IAAA;AAAA,EAAA;AAAA,EAEU,SAAS;AACjB,WAAOI,MAAAA,KAAK,CAAC,EAAE,IAAI,MAAM,MAAM,QAAQ;AACrC,SAAG,EAAE,MAAM,QAAQ,WAAW,OAAA,GAAU,MAAM;AAC5C,aAAK,EAAE,MAAM,aAAa,WAAW,OAAO,eAAe,OAAA,GAAU,MAAM;AACzE,eAAK,EAAE,MAAM,aAAa;AAAA,QAC5B,CAAC;AACD,aAAK,EAAE,MAAM,SAAS,WAAW,QAAA,GAAW,MAAM;AAChD,cAAI,KAAK,MAAM;AACb,cAAE,EAAE,MAAM,KAAK,MAAM,MAAM,OAAA,GAAU,MAAM;AACzC,mBAAA;AAAA,YACF,CAAC;AAAA,UACH,OAAO;AACL,iBAAA;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AA1BA,QAAA,iBAAA,EAAA;AAMW,QAAA,oBAAA,QAAA;AAAT,kBAAA,OAAA,GAAS,QADT,WALI,gBAMK,KAAA;AANX,oBAAA,OAAM,cAAA;AACJ,cADI,gBACG,WAAU,iBAAA;AAEjB,cAHI,gBAGa,UAAS,CAACI,UAAAA,gBAAgB,KAAK,CAAA;AAyBlD,eAAe,SAAA;;;"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { s as styleVariables } from "./variables.js";
|
|
2
|
+
import { c as colorCSS } from "./color.js";
|
|
3
|
+
import { A as AeicoComponent } from "./aeico-component.js";
|
|
4
|
+
import { prop, html } from "aeico";
|
|
5
|
+
const style$1 = ":host {\n display: block;\n}\n\n/* Hide the separator template slot visually */\n.sep-template {\n display: none !important;\n}\n\n.list {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n";
|
|
6
|
+
var __create$1 = Object.create;
|
|
7
|
+
var __defProp$1 = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __knownSymbol$1 = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
10
|
+
var __typeError$1 = (msg) => {
|
|
11
|
+
throw TypeError(msg);
|
|
12
|
+
};
|
|
13
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
14
|
+
var __decoratorStart$1 = (base) => [, , , __create$1((base == null ? void 0 : base[__knownSymbol$1("metadata")]) ?? null)];
|
|
15
|
+
var __decoratorStrings$1 = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
16
|
+
var __expectFn$1 = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError$1("Function expected") : fn;
|
|
17
|
+
var __decoratorContext$1 = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings$1[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError$1("Already initialized") : fns.push(__expectFn$1(fn || null)) });
|
|
18
|
+
var __decoratorMetadata$1 = (array, target) => __defNormalProp$1(target, __knownSymbol$1("metadata"), array[3]);
|
|
19
|
+
var __runInitializers$1 = (array, flags, self, value) => {
|
|
20
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __decorateElement$1 = (array, flags, name, decorators, target, extra) => {
|
|
24
|
+
var fn, it, done, ctx, access, k = flags & 7, s = false, p = false;
|
|
25
|
+
var j = array.length + 1, key = __decoratorStrings$1[k + 5];
|
|
26
|
+
var initializers = array[j - 1] = [], extraInitializers = array[j] || (array[j] = []);
|
|
27
|
+
var desc = (target = target.prototype, __getOwnPropDesc$1({ get [name]() {
|
|
28
|
+
return __privateGet$1(this, extra);
|
|
29
|
+
}, set [name](x) {
|
|
30
|
+
return __privateSet$1(this, extra, x);
|
|
31
|
+
} }, name));
|
|
32
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
33
|
+
ctx = __decoratorContext$1(k, name, done = {}, array[3], extraInitializers);
|
|
34
|
+
{
|
|
35
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: (x) => name in x };
|
|
36
|
+
access.get = (x) => x[name];
|
|
37
|
+
access.set = (x, y) => x[name] = y;
|
|
38
|
+
}
|
|
39
|
+
it = (0, decorators[i])({ get: desc.get, set: desc.set }, ctx), done._ = 1;
|
|
40
|
+
if (it === void 0) __expectFn$1(it) && (desc[key] = it);
|
|
41
|
+
else if (typeof it !== "object" || it === null) __typeError$1("Object expected");
|
|
42
|
+
else __expectFn$1(fn = it.get) && (desc.get = fn), __expectFn$1(fn = it.set) && (desc.set = fn), __expectFn$1(fn = it.init) && initializers.unshift(fn);
|
|
43
|
+
}
|
|
44
|
+
return desc && __defProp$1(target, name, desc), target;
|
|
45
|
+
};
|
|
46
|
+
var __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
47
|
+
var __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1("Cannot " + msg);
|
|
48
|
+
var __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, "read from private field"), member.get(obj));
|
|
49
|
+
var __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
50
|
+
var __privateSet$1 = (obj, member, value, setter) => (__accessCheck$1(obj, member, "write to private field"), member.set(obj, value), value);
|
|
51
|
+
var _color_dec, _separator_dec, _a$1, _init$1, _separator, _color;
|
|
52
|
+
class Breadcrumb extends (_a$1 = AeicoComponent, _separator_dec = [prop({ type: String })], _color_dec = [prop({ type: String })], _a$1) {
|
|
53
|
+
constructor() {
|
|
54
|
+
super(...arguments);
|
|
55
|
+
__privateAdd$1(this, _separator, __runInitializers$1(_init$1, 8, this, "/")), __runInitializers$1(_init$1, 11, this);
|
|
56
|
+
__privateAdd$1(this, _color, __runInitializers$1(_init$1, 12, this)), __runInitializers$1(_init$1, 15, this);
|
|
57
|
+
__publicField$1(this, "_itemsSlot", null);
|
|
58
|
+
__publicField$1(this, "_sepSlot", null);
|
|
59
|
+
__publicField$1(this, "_syncSeparators", () => {
|
|
60
|
+
const items = this._getItems();
|
|
61
|
+
const sepEl = this._getSepElement();
|
|
62
|
+
items.forEach((item, i) => {
|
|
63
|
+
item.querySelectorAll("[data-ae-sep]").forEach((n) => n.remove());
|
|
64
|
+
const isLast = i === items.length - 1;
|
|
65
|
+
if (isLast) {
|
|
66
|
+
item.setAttribute("aria-current", "page");
|
|
67
|
+
} else {
|
|
68
|
+
item.removeAttribute("aria-current");
|
|
69
|
+
}
|
|
70
|
+
if (i === 0) return;
|
|
71
|
+
const wrapper = document.createElement("span");
|
|
72
|
+
wrapper.setAttribute("slot", "separator");
|
|
73
|
+
wrapper.setAttribute("data-ae-sep", "");
|
|
74
|
+
wrapper.setAttribute("aria-hidden", "true");
|
|
75
|
+
if (sepEl) {
|
|
76
|
+
wrapper.appendChild(sepEl.cloneNode(true));
|
|
77
|
+
} else {
|
|
78
|
+
wrapper.textContent = this.separator;
|
|
79
|
+
}
|
|
80
|
+
item.prepend(wrapper);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
render() {
|
|
85
|
+
return html(({ nav, ol, slot }) => {
|
|
86
|
+
nav({ "aria-label": "breadcrumb", part: "nav" }, () => {
|
|
87
|
+
ol({ part: "list", className: "list" }, () => {
|
|
88
|
+
this._itemsSlot = slot({
|
|
89
|
+
"@slotchange": () => this._syncSeparators()
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
this._sepSlot = slot({
|
|
94
|
+
name: "separator",
|
|
95
|
+
className: "sep-template",
|
|
96
|
+
"@slotchange": () => this._syncSeparators()
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
onUpdated() {
|
|
101
|
+
this._syncSeparators();
|
|
102
|
+
}
|
|
103
|
+
_getItems() {
|
|
104
|
+
var _a2;
|
|
105
|
+
return ((_a2 = this._itemsSlot) == null ? void 0 : _a2.assignedElements()) ?? [];
|
|
106
|
+
}
|
|
107
|
+
_getSepElement() {
|
|
108
|
+
var _a2;
|
|
109
|
+
return ((_a2 = this._sepSlot) == null ? void 0 : _a2.assignedElements()[0]) ?? null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
_init$1 = __decoratorStart$1(_a$1);
|
|
113
|
+
_separator = /* @__PURE__ */ new WeakMap();
|
|
114
|
+
_color = /* @__PURE__ */ new WeakMap();
|
|
115
|
+
__decorateElement$1(_init$1, 4, "separator", _separator_dec, Breadcrumb, _separator);
|
|
116
|
+
__decorateElement$1(_init$1, 4, "color", _color_dec, Breadcrumb, _color);
|
|
117
|
+
__decoratorMetadata$1(_init$1, Breadcrumb);
|
|
118
|
+
__publicField$1(Breadcrumb, "tagName", "breadcrumb");
|
|
119
|
+
__publicField$1(Breadcrumb, "styles", [styleVariables, colorCSS, style$1]);
|
|
120
|
+
Breadcrumb.register();
|
|
121
|
+
const style = `:host {
|
|
122
|
+
display: contents;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.item {
|
|
126
|
+
display: inline-flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
list-style: none;
|
|
129
|
+
white-space: nowrap;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* Separator — uses a fixed muted color that does NOT follow the breadcrumb's color prop */
|
|
133
|
+
.sep {
|
|
134
|
+
display: inline-flex;
|
|
135
|
+
align-items: center;
|
|
136
|
+
color: var(--color-text-muted);
|
|
137
|
+
padding: 0 0.35em;
|
|
138
|
+
user-select: none;
|
|
139
|
+
pointer-events: none;
|
|
140
|
+
flex-shrink: 0;
|
|
141
|
+
font-size: 0.85em;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Hide separator on the first item */
|
|
145
|
+
:host(:first-child) .sep,
|
|
146
|
+
:host(:first-of-type) .sep {
|
|
147
|
+
display: none;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.label {
|
|
151
|
+
display: inline-flex;
|
|
152
|
+
align-items: center;
|
|
153
|
+
color: var(--color-text-muted);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* Current page — last item */
|
|
157
|
+
:host([aria-current="page"]) .label {
|
|
158
|
+
color: var(--color-text-main);
|
|
159
|
+
font-weight: 500;
|
|
160
|
+
cursor: default;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* Link items */
|
|
164
|
+
.label a {
|
|
165
|
+
color: var(--color-accent, var(--color-text-link));
|
|
166
|
+
text-decoration: none;
|
|
167
|
+
outline: none;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.label a:hover {
|
|
171
|
+
color: var(--color-accent-hover, var(--color-text-link-hover));
|
|
172
|
+
text-decoration: underline;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.label a:focus-visible {
|
|
176
|
+
outline: 2px solid var(--color-accent, var(--focus-ring-color));
|
|
177
|
+
outline-offset: 2px;
|
|
178
|
+
border-radius: 2px;
|
|
179
|
+
}
|
|
180
|
+
`;
|
|
181
|
+
var __create = Object.create;
|
|
182
|
+
var __defProp = Object.defineProperty;
|
|
183
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
184
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
185
|
+
var __typeError = (msg) => {
|
|
186
|
+
throw TypeError(msg);
|
|
187
|
+
};
|
|
188
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
189
|
+
var __decoratorStart = (base) => [, , , __create((base == null ? void 0 : base[__knownSymbol("metadata")]) ?? null)];
|
|
190
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
191
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
192
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
193
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
194
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
195
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
196
|
+
return value;
|
|
197
|
+
};
|
|
198
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
199
|
+
var fn, it, done, ctx, access, k = flags & 7, s = false, p = false;
|
|
200
|
+
var j = array.length + 1, key = __decoratorStrings[k + 5];
|
|
201
|
+
var initializers = array[j - 1] = [], extraInitializers = array[j] || (array[j] = []);
|
|
202
|
+
var desc = (target = target.prototype, __getOwnPropDesc({ get [name]() {
|
|
203
|
+
return __privateGet(this, extra);
|
|
204
|
+
}, set [name](x) {
|
|
205
|
+
return __privateSet(this, extra, x);
|
|
206
|
+
} }, name));
|
|
207
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
208
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
209
|
+
{
|
|
210
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: (x) => name in x };
|
|
211
|
+
access.get = (x) => x[name];
|
|
212
|
+
access.set = (x, y) => x[name] = y;
|
|
213
|
+
}
|
|
214
|
+
it = (0, decorators[i])({ get: desc.get, set: desc.set }, ctx), done._ = 1;
|
|
215
|
+
if (it === void 0) __expectFn(it) && (desc[key] = it);
|
|
216
|
+
else if (typeof it !== "object" || it === null) __typeError("Object expected");
|
|
217
|
+
else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
|
|
218
|
+
}
|
|
219
|
+
return desc && __defProp(target, name, desc), target;
|
|
220
|
+
};
|
|
221
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
222
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
223
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
|
|
224
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
225
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
226
|
+
var _href_dec, _a, _init, _href;
|
|
227
|
+
class BreadcrumbItem extends (_a = AeicoComponent, _href_dec = [prop({ type: String })], _a) {
|
|
228
|
+
constructor() {
|
|
229
|
+
super(...arguments);
|
|
230
|
+
__privateAdd(this, _href, __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
|
|
231
|
+
}
|
|
232
|
+
render() {
|
|
233
|
+
return html(({ li, span, slot, a }) => {
|
|
234
|
+
li({ part: "item", className: "item" }, () => {
|
|
235
|
+
span({ part: "separator", className: "sep", "aria-hidden": "true" }, () => {
|
|
236
|
+
slot({ name: "separator" });
|
|
237
|
+
});
|
|
238
|
+
span({ part: "label", className: "label" }, () => {
|
|
239
|
+
if (this.href) {
|
|
240
|
+
a({ href: this.href, part: "link" }, () => {
|
|
241
|
+
slot();
|
|
242
|
+
});
|
|
243
|
+
} else {
|
|
244
|
+
slot();
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
_init = __decoratorStart(_a);
|
|
252
|
+
_href = /* @__PURE__ */ new WeakMap();
|
|
253
|
+
__decorateElement(_init, 4, "href", _href_dec, BreadcrumbItem, _href);
|
|
254
|
+
__decoratorMetadata(_init, BreadcrumbItem);
|
|
255
|
+
__publicField(BreadcrumbItem, "tagName", "breadcrumb-item");
|
|
256
|
+
__publicField(BreadcrumbItem, "styles", [styleVariables, style]);
|
|
257
|
+
BreadcrumbItem.register();
|
|
258
|
+
export {
|
|
259
|
+
Breadcrumb as B,
|
|
260
|
+
BreadcrumbItem as a
|
|
261
|
+
};
|
|
262
|
+
//# sourceMappingURL=breadcrumb-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb-item.js","sources":["../../src/breadcrumb/breadcrumb.ts","../../src/breadcrumb/breadcrumb-item.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport colorCSS from '../styles/color.css?inline';\nimport style from '../styles/components/breadcrumb.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\nimport type BreadcrumbItem from './breadcrumb-item';\n\n/**\n * Breadcrumb Component\n *\n * A navigation trail that shows the user's location in a hierarchy.\n * Automatically injects separators between items and marks the last item\n * as `aria-current=\"page\"`.\n *\n * The separator is configurable via:\n * - `separator` attribute (text, default `/`) — simple and concise\n * - `slot=\"separator\"` (any element, e.g. `ae-icon`) — takes priority over the attribute\n *\n * Supports `color` for theming item link colors. The separator intentionally\n * uses a fixed muted color and does NOT respond to the `color` prop.\n *\n * @example\n * ```html\n * <!-- Default separator \"/\" -->\n * <ae-breadcrumb>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item href=\"/docs\">Docs</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Getting Started</ae-breadcrumb-item>\n * </ae-breadcrumb>\n *\n * <!-- Custom text separator -->\n * <ae-breadcrumb separator=\">\">\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current</ae-breadcrumb-item>\n * </ae-breadcrumb>\n *\n * <!-- Icon separator (slot takes priority over separator attribute) -->\n * <ae-breadcrumb>\n * <ae-icon slot=\"separator\" name=\"chevron-right\" size=\"xs\"></ae-icon>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current</ae-breadcrumb-item>\n * </ae-breadcrumb>\n * ```\n */\nclass Breadcrumb extends AeicoComponent {\n static tagName = 'breadcrumb';\n\n protected static styles = [styleVariables, colorCSS, style];\n\n /** Text separator shown between items. Ignored when `slot=\"separator\"` is provided. */\n @prop({ type: String })\n accessor separator: string = '/';\n\n @prop({ type: String })\n accessor color: string | undefined;\n\n private _itemsSlot: HTMLSlotElement | null = null;\n private _sepSlot: HTMLSlotElement | null = null;\n\n protected render() {\n return html(({ nav, ol, slot }) => {\n nav({ 'aria-label': 'breadcrumb', part: 'nav' }, () => {\n ol({ part: 'list', className: 'list' }, () => {\n this._itemsSlot = slot({\n '@slotchange': () => this._syncSeparators(),\n });\n });\n });\n this._sepSlot = slot({\n name: 'separator',\n className: 'sep-template',\n '@slotchange': () => this._syncSeparators(),\n });\n });\n }\n\n protected onUpdated() {\n this._syncSeparators();\n }\n\n private _getItems(): BreadcrumbItem[] {\n return (this._itemsSlot?.assignedElements() ?? []) as BreadcrumbItem[];\n }\n\n private _getSepElement(): Element | null {\n return this._sepSlot?.assignedElements()[0] ?? null;\n }\n\n private _syncSeparators = () => {\n const items = this._getItems();\n const sepEl = this._getSepElement();\n\n items.forEach((item, i) => {\n // Remove previously injected separators to avoid duplicates\n item.querySelectorAll('[data-ae-sep]').forEach((n) => n.remove());\n\n const isLast = i === items.length - 1;\n\n // Mark the last item as the current page for accessibility\n if (isLast) {\n item.setAttribute('aria-current', 'page');\n } else {\n item.removeAttribute('aria-current');\n }\n\n // First item gets no separator\n if (i === 0) return;\n\n const wrapper = document.createElement('span');\n wrapper.setAttribute('slot', 'separator');\n wrapper.setAttribute('data-ae-sep', '');\n wrapper.setAttribute('aria-hidden', 'true');\n\n if (sepEl) {\n // Clone the slotted separator element (e.g. ae-icon)\n wrapper.appendChild(sepEl.cloneNode(true));\n } else {\n // Fall back to text separator\n wrapper.textContent = this.separator;\n }\n\n item.prepend(wrapper);\n });\n };\n}\n\nBreadcrumb.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-breadcrumb': Breadcrumb;\n }\n}\n\nexport default Breadcrumb;\nexport type BreadcrumbProps = InferProps<typeof Breadcrumb>;\n","import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport style from '../styles/components/breadcrumb-item.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html } from 'aeico';\nimport { prop } from 'aeico';\n\n/**\n * BreadcrumbItem Component\n *\n * A single item in the `ae-breadcrumb` navigation trail.\n * Renders as a link (`<a>`) when `href` is provided, otherwise as plain text.\n * The separator is injected by the parent `ae-breadcrumb`.\n *\n * @example\n * ```html\n * <ae-breadcrumb>\n * <ae-breadcrumb-item href=\"/\">Home</ae-breadcrumb-item>\n * <ae-breadcrumb-item href=\"/docs\">Docs</ae-breadcrumb-item>\n * <ae-breadcrumb-item>Current Page</ae-breadcrumb-item>\n * </ae-breadcrumb>\n * ```\n */\nclass BreadcrumbItem extends AeicoComponent {\n static tagName = 'breadcrumb-item';\n\n protected static styles = [styleVariables, style];\n\n @prop({ type: String })\n accessor href: string | undefined;\n\n protected render() {\n return html(({ li, span, slot, a }) => {\n li({ part: 'item', className: 'item' }, () => {\n span({ part: 'separator', className: 'sep', 'aria-hidden': 'true' }, () => {\n slot({ name: 'separator' });\n });\n span({ part: 'label', className: 'label' }, () => {\n if (this.href) {\n a({ href: this.href, part: 'link' }, () => {\n slot();\n });\n } else {\n slot();\n }\n });\n });\n });\n }\n}\n\nBreadcrumbItem.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-breadcrumb-item': BreadcrumbItem;\n }\n}\n\nexport default BreadcrumbItem;\nexport type BreadcrumbItemProps = InferProps<typeof BreadcrumbItem>;\n"],"names":["_a","_init","__privateAdd","__runInitializers","__publicField","__decoratorStart","__decorateElement","__decoratorMetadata","style"],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
const variables = require("./variables.cjs");
|
|
6
|
+
const aeicoComponent = require("./aeico-component.cjs");
|
|
7
|
+
const aeico = require("aeico");
|
|
8
|
+
const buttonGroupStyle = ":host {\n display: inline-flex;\n align-items: stretch;\n gap: 8px;\n}\n\n:host([block]) {\n display: flex;\n width: 100%;\n}\n\n:host([block]) ::slotted(ae-button) {\n flex: 1;\n}\n\n:host([compact]) {\n gap: 0;\n}\n\n/* Raise hovered/focused button so its border shows above neighbours */\n:host([compact]) ::slotted(ae-button:hover),\n:host([compact]) ::slotted(ae-button:focus-within) {\n position: relative;\n z-index: 1;\n}\n";
|
|
9
|
+
class ButtonGroup extends aeicoComponent.AeicoComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
__publicField(this, "slotEl", null);
|
|
13
|
+
}
|
|
14
|
+
connectedCallback() {
|
|
15
|
+
super.connectedCallback();
|
|
16
|
+
if (this.variant === void 0) this.variant = "filled";
|
|
17
|
+
if (this.color === void 0) this.color = "default";
|
|
18
|
+
if (this.size === void 0) this.size = "md";
|
|
19
|
+
}
|
|
20
|
+
render() {
|
|
21
|
+
return aeico.html(({ slot }) => {
|
|
22
|
+
this.slotEl = slot({
|
|
23
|
+
"@slotchange": () => this._syncChildren()
|
|
24
|
+
});
|
|
25
|
+
this._syncChildren();
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
_getButtons() {
|
|
29
|
+
if (!this.slotEl) return [];
|
|
30
|
+
return this.slotEl.assignedElements({ flatten: true }).filter((el) => {
|
|
31
|
+
const tag = el.tagName.toLowerCase();
|
|
32
|
+
return tag === "ae-button" || tag === "ae-dropdown-button";
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
_syncChildren() {
|
|
36
|
+
const buttons = this._getButtons();
|
|
37
|
+
const r = this.size === "xs" || this.size === "sm" ? 3 : 4;
|
|
38
|
+
buttons.forEach((btn, i) => {
|
|
39
|
+
btn.variant = this.variant;
|
|
40
|
+
btn.color = this.color;
|
|
41
|
+
btn.size = this.size;
|
|
42
|
+
if (this.disabled) {
|
|
43
|
+
btn.disabled = true;
|
|
44
|
+
} else {
|
|
45
|
+
btn.disabled = false;
|
|
46
|
+
}
|
|
47
|
+
if (this.compact) {
|
|
48
|
+
const isFirst = i === 0;
|
|
49
|
+
const isLast = i === buttons.length - 1;
|
|
50
|
+
btn.style.marginLeft = isFirst ? "" : "-1px";
|
|
51
|
+
btn.style.setProperty("--_btn-r-tl", isFirst ? `${r}px` : "0");
|
|
52
|
+
btn.style.setProperty("--_btn-r-bl", isFirst ? `${r}px` : "0");
|
|
53
|
+
btn.style.setProperty("--_btn-r-tr", isLast ? `${r}px` : "0");
|
|
54
|
+
btn.style.setProperty("--_btn-r-br", isLast ? `${r}px` : "0");
|
|
55
|
+
} else {
|
|
56
|
+
btn.style.marginLeft = "";
|
|
57
|
+
this._clearRadius(btn);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
_clearRadius(btn) {
|
|
62
|
+
btn.style.removeProperty("--_btn-r-tl");
|
|
63
|
+
btn.style.removeProperty("--_btn-r-tr");
|
|
64
|
+
btn.style.removeProperty("--_btn-r-br");
|
|
65
|
+
btn.style.removeProperty("--_btn-r-bl");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
__publicField(ButtonGroup, "props", {
|
|
69
|
+
variant: { type: String },
|
|
70
|
+
color: { type: String },
|
|
71
|
+
size: { type: String },
|
|
72
|
+
compact: { type: Boolean },
|
|
73
|
+
block: { type: Boolean },
|
|
74
|
+
disabled: { type: Boolean }
|
|
75
|
+
});
|
|
76
|
+
__publicField(ButtonGroup, "styles", [variables.styleVariables, buttonGroupStyle]);
|
|
77
|
+
ButtonGroup.register();
|
|
78
|
+
exports.ButtonGroup = ButtonGroup;
|
|
79
|
+
//# sourceMappingURL=button-group.cjs.map
|