@rcarls/rc-chip-group 0.5.0
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/README.md +26 -0
- package/dist/custom-elements.json +687 -0
- package/dist/rc-chip-group-DKVJOa6j.js +364 -0
- package/dist/rc-chip-group-DKVJOa6j.js.map +1 -0
- package/dist/rc-chip-group-define.js +7 -0
- package/dist/rc-chip-group-define.js.map +1 -0
- package/dist/rc-chip-group.js +5 -0
- package/dist/rc-chip-group.js.map +1 -0
- package/dist/types/packages/rc-chip-group/src/define.d.ts +1 -0
- package/dist/types/packages/rc-chip-group/src/index.d.ts +1 -0
- package/dist/types/packages/rc-chip-group/src/rc-chip-group.d.ts +122 -0
- package/dist/types/packages/rc-chip-group/src/rc-chip-group.styles.d.ts +2 -0
- package/package.json +66 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import { css as f, LitElement as _, nothing as u, html as m } from "lit";
|
|
2
|
+
import { state as v, query as h, property as l } from "lit/decorators.js";
|
|
3
|
+
import { RovingTabIndexMixin as b, isFocusable as y } from "@rcarls/rc-common";
|
|
4
|
+
const w = f`
|
|
5
|
+
:host {
|
|
6
|
+
display: block;
|
|
7
|
+
min-inline-size: 0;
|
|
8
|
+
color-scheme: inherit;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
:host([hidden]) {
|
|
12
|
+
display: none;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
#root {
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
flex-wrap: wrap;
|
|
19
|
+
gap: var(--rc-chip-group-row-gap, 0) var(--rc-chip-group-column-gap, 0.5rem);
|
|
20
|
+
min-inline-size: 0;
|
|
21
|
+
padding-block: var(--rc-chip-group-padding-block, 0);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
#root[data-mode='scroll'] {
|
|
25
|
+
flex-wrap: nowrap;
|
|
26
|
+
overflow-x: auto;
|
|
27
|
+
overflow-y: hidden;
|
|
28
|
+
overscroll-behavior-inline: contain;
|
|
29
|
+
scroll-padding-inline: var(--rc-chip-group-scroll-padding-inline, 0);
|
|
30
|
+
scrollbar-width: var(--rc-chip-group-scrollbar-width, none);
|
|
31
|
+
-webkit-overflow-scrolling: touch;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#root[data-mode='scroll']::-webkit-scrollbar {
|
|
35
|
+
display: var(--rc-chip-group-webkit-scrollbar-display, none);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
#root[data-measuring] {
|
|
39
|
+
flex-wrap: wrap;
|
|
40
|
+
overflow: hidden;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
#slot-wrap {
|
|
44
|
+
display: contents;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
::slotted(*) {
|
|
48
|
+
flex: 0 0 auto;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
#toggle-wrap {
|
|
52
|
+
display: inline-flex;
|
|
53
|
+
align-items: center;
|
|
54
|
+
flex: 0 0 auto;
|
|
55
|
+
gap: var(--rc-chip-group-toggle-separator-gap, 0.5rem);
|
|
56
|
+
order: -1;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#toggle-wrap[hidden] {
|
|
60
|
+
display: none;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#toggle {
|
|
64
|
+
--rc-chip-gap: var(--rc-chip-group-toggle-gap, 0.5rem);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
#toggle > button {
|
|
68
|
+
white-space: nowrap;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
[part='toggle-icon'] {
|
|
72
|
+
display: block;
|
|
73
|
+
flex: 0 0 auto;
|
|
74
|
+
inline-size: var(--rc-chip-group-toggle-icon-size, 1.125rem);
|
|
75
|
+
block-size: var(--rc-chip-group-toggle-icon-size, 1.125rem);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
[part='toggle-separator'] {
|
|
79
|
+
flex: 0 0 auto;
|
|
80
|
+
inline-size: var(--rc-chip-group-toggle-separator-inline-size, 1px);
|
|
81
|
+
block-size: var(--rc-chip-group-toggle-separator-block-size, 1.5rem);
|
|
82
|
+
background: var(--rc-chip-group-toggle-separator-color, currentColor);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@media (forced-colors: active) {
|
|
86
|
+
#root[data-mode='scroll'] {
|
|
87
|
+
scrollbar-width: auto;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
[part='toggle-separator'] {
|
|
91
|
+
background: CanvasText;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
`;
|
|
95
|
+
var x = Object.defineProperty, L = Object.getOwnPropertyDescriptor, o = (c, e, t, i) => {
|
|
96
|
+
for (var s = i > 1 ? void 0 : i ? L(e, t) : e, n = c.length - 1, a; n >= 0; n--)
|
|
97
|
+
(a = c[n]) && (s = (i ? a(e, t, s) : a(s)) || s);
|
|
98
|
+
return i && s && x(e, t, s), s;
|
|
99
|
+
};
|
|
100
|
+
const d = class d extends b(_) {
|
|
101
|
+
constructor() {
|
|
102
|
+
super(...arguments), this._defaultExpanded = !1, this._expandedInitialized = !1, this._overflowing = !1, this._resizeObserver = null, this._mutationObserver = null, this._authoredVariants = /* @__PURE__ */ new Map(), this.layout = "auto", this.maxRows = 2, this.kind = "generic", this.selection = "none", this.label = "Chip actions", this.showAllLabel = "Show all", this.showLessLabel = "Show less", this._handleKeyDown = (e) => {
|
|
103
|
+
if (this.kind !== "assist" || e.altKey || e.ctrlKey || e.metaKey || e.shiftKey)
|
|
104
|
+
return;
|
|
105
|
+
const t = getComputedStyle(this._$root).direction === "rtl";
|
|
106
|
+
switch (e.key) {
|
|
107
|
+
case (t ? "ArrowLeft" : "ArrowRight"):
|
|
108
|
+
e.preventDefault(), this.focusItem(this.nextItem);
|
|
109
|
+
break;
|
|
110
|
+
case (t ? "ArrowRight" : "ArrowLeft"):
|
|
111
|
+
e.preventDefault(), this.focusItem(this.previousItem);
|
|
112
|
+
break;
|
|
113
|
+
case "Home":
|
|
114
|
+
e.preventDefault(), this.focusFirst();
|
|
115
|
+
break;
|
|
116
|
+
case "End":
|
|
117
|
+
e.preventDefault(), this.focusLast();
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}, this._handleChange = (e) => {
|
|
121
|
+
if (this._resolvedLayout === "scroll") {
|
|
122
|
+
this._targetVisibilityFrame !== void 0 && (cancelAnimationFrame(this._targetVisibilityFrame), this._targetVisibilityFrame = void 0), this._pendingScrollLeft = this._$root.scrollLeft;
|
|
123
|
+
const t = new Set(this._assignedElements());
|
|
124
|
+
this._pendingScrollTarget = e.composedPath().find(
|
|
125
|
+
(i) => i instanceof HTMLElement && t.has(i)
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
queueMicrotask(() => {
|
|
129
|
+
this._syncNativeSelection(), this._scheduleMeasure();
|
|
130
|
+
});
|
|
131
|
+
}, this._toggleExpanded = () => {
|
|
132
|
+
const e = this.expanded, t = !e;
|
|
133
|
+
this._expanded === void 0 && (this._uncontrolledExpanded = t, this.requestUpdate("expanded", e)), this.dispatchEvent(
|
|
134
|
+
new CustomEvent("rc-chip-group-toggle", {
|
|
135
|
+
bubbles: !0,
|
|
136
|
+
composed: !0,
|
|
137
|
+
detail: { expanded: t }
|
|
138
|
+
})
|
|
139
|
+
);
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
get expanded() {
|
|
143
|
+
return this._expanded ?? this._uncontrolledExpanded ?? this._defaultExpanded;
|
|
144
|
+
}
|
|
145
|
+
set expanded(e) {
|
|
146
|
+
const t = this.expanded;
|
|
147
|
+
this._expanded = e, this._expandedInitialized = !0, this.requestUpdate("expanded", t);
|
|
148
|
+
}
|
|
149
|
+
get defaultExpanded() {
|
|
150
|
+
return this._defaultExpanded;
|
|
151
|
+
}
|
|
152
|
+
set defaultExpanded(e) {
|
|
153
|
+
const t = this._defaultExpanded;
|
|
154
|
+
this._defaultExpanded = e, !this._expandedInitialized && this._expanded === void 0 && this._uncontrolledExpanded === void 0 && this.requestUpdate("expanded", t), this.requestUpdate("defaultExpanded", t);
|
|
155
|
+
}
|
|
156
|
+
connectedCallback() {
|
|
157
|
+
super.connectedCallback(), typeof ResizeObserver == "function" && (this._resizeObserver ??= new ResizeObserver(() => this._scheduleMeasure()), this._resizeObserver.observe(this)), typeof MutationObserver == "function" && (this._mutationObserver ??= new MutationObserver(() => {
|
|
158
|
+
this._syncNativeSelection(), this._scheduleMeasure();
|
|
159
|
+
}), this._mutationObserver.observe(this, {
|
|
160
|
+
subtree: !0,
|
|
161
|
+
attributes: !0,
|
|
162
|
+
attributeFilter: ["checked", "disabled", "hidden"]
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
disconnectedCallback() {
|
|
166
|
+
super.disconnectedCallback(), this._resizeObserver?.disconnect(), this._mutationObserver?.disconnect(), this._measureFrame !== void 0 && (cancelAnimationFrame(this._measureFrame), this._measureFrame = void 0), this._targetVisibilityFrame !== void 0 && (cancelAnimationFrame(this._targetVisibilityFrame), this._targetVisibilityFrame = void 0), this._pendingScrollLeft = void 0, this._pendingScrollTarget = void 0, this._restoreAuthoredVariants();
|
|
167
|
+
}
|
|
168
|
+
firstUpdated() {
|
|
169
|
+
this._syncAssignedItems(), this._observeAssignedItems(), this._scheduleMeasure();
|
|
170
|
+
}
|
|
171
|
+
updated(e) {
|
|
172
|
+
e.has("kind") && (this._syncAssignedItems(), this._$slot.dispatchEvent(new Event("slotchange"))), (e.has("layout") || e.has("maxRows") || e.has("expanded")) && this._scheduleMeasure();
|
|
173
|
+
}
|
|
174
|
+
_collectItems(e) {
|
|
175
|
+
if (this.kind !== "assist")
|
|
176
|
+
return [];
|
|
177
|
+
const t = this._$toggle?.querySelector(":scope > button"), i = e.assignedElements().flatMap((s) => {
|
|
178
|
+
if (s.matches("rc-button, rc-chip")) {
|
|
179
|
+
const n = s.querySelector(":scope > button");
|
|
180
|
+
return n ? [n] : [];
|
|
181
|
+
}
|
|
182
|
+
return this._isAssistItem(s) ? [s] : [];
|
|
183
|
+
});
|
|
184
|
+
return t ? [t, ...i] : i;
|
|
185
|
+
}
|
|
186
|
+
_initItems() {
|
|
187
|
+
super._initItems();
|
|
188
|
+
const e = this._lastFocused ?? this.firstItem;
|
|
189
|
+
queueMicrotask(() => {
|
|
190
|
+
this.kind === "assist" && this.matches(":focus-within") && this.focusItem(e);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
_isAssistItem(e) {
|
|
194
|
+
return e instanceof HTMLButtonElement || e instanceof HTMLInputElement || e instanceof HTMLSelectElement || e instanceof HTMLTextAreaElement ? !0 : e instanceof HTMLAnchorElement || e instanceof HTMLAreaElement ? e.hasAttribute("href") : y(e);
|
|
195
|
+
}
|
|
196
|
+
_handleSlotChange(e) {
|
|
197
|
+
this._onSlotChange(e), queueMicrotask(() => {
|
|
198
|
+
this.isConnected && (this._syncAssignedItems(), this._observeAssignedItems(), this._scheduleMeasure());
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
_assignedElements() {
|
|
202
|
+
return this._$slot.assignedElements({ flatten: !0 }).filter((e) => e instanceof HTMLElement);
|
|
203
|
+
}
|
|
204
|
+
_syncAssignedItems() {
|
|
205
|
+
const e = this.kind === "assist" ? "assist" : this.kind === "filter" ? "filter" : null, t = this._assignedElements().filter(
|
|
206
|
+
(i) => i.localName === "rc-chip"
|
|
207
|
+
);
|
|
208
|
+
for (const [i, s] of this._authoredVariants)
|
|
209
|
+
(!e || !t.includes(i)) && (i.variant = s, this._authoredVariants.delete(i));
|
|
210
|
+
if (e)
|
|
211
|
+
for (const i of t)
|
|
212
|
+
this._authoredVariants.has(i) || this._authoredVariants.set(i, i.variant), i.variant = e;
|
|
213
|
+
this._syncNativeSelection(), this._validateFilterItems();
|
|
214
|
+
}
|
|
215
|
+
_observeAssignedItems() {
|
|
216
|
+
this._resizeObserver?.disconnect(), this._resizeObserver?.observe(this);
|
|
217
|
+
for (const e of this._assignedElements())
|
|
218
|
+
this._resizeObserver?.observe(e);
|
|
219
|
+
}
|
|
220
|
+
_syncNativeSelection() {
|
|
221
|
+
if (this.kind === "filter")
|
|
222
|
+
for (const e of this._assignedElements())
|
|
223
|
+
e.localName === "rc-chip" && e.syncNativeSelection();
|
|
224
|
+
}
|
|
225
|
+
_restoreAuthoredVariants() {
|
|
226
|
+
for (const [e, t] of this._authoredVariants)
|
|
227
|
+
e.variant = t;
|
|
228
|
+
this._authoredVariants.clear();
|
|
229
|
+
}
|
|
230
|
+
_validateFilterItems() {
|
|
231
|
+
this.kind !== "filter" || this.selection;
|
|
232
|
+
}
|
|
233
|
+
_scheduleMeasure() {
|
|
234
|
+
this._measureFrame !== void 0 || !this.isConnected || (this._measureFrame = requestAnimationFrame(() => {
|
|
235
|
+
this._measureFrame = void 0, this._measureRows();
|
|
236
|
+
}));
|
|
237
|
+
}
|
|
238
|
+
_measureRows() {
|
|
239
|
+
if (this.layout !== "auto") {
|
|
240
|
+
if (this.layout === "scroll" && this._pendingScrollLeft !== void 0) {
|
|
241
|
+
const a = this._pendingScrollTarget;
|
|
242
|
+
this._$root.scrollLeft = this._pendingScrollLeft, this._keepTargetVisible(a), this._scheduleTargetVisibility(a);
|
|
243
|
+
}
|
|
244
|
+
this._pendingScrollLeft = void 0, this._pendingScrollTarget = void 0, this._overflowing && (this._overflowing = !1);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const e = this._assignedElements().filter((a) => !a.hidden), t = this._resolvedLayout === "scroll", i = this._pendingScrollLeft ?? this._$root.scrollLeft;
|
|
248
|
+
this._$root.toggleAttribute("data-measuring", !0), this._$toggleWrap.hidden = !0;
|
|
249
|
+
const s = [];
|
|
250
|
+
for (const a of e) {
|
|
251
|
+
const p = a.getBoundingClientRect().top;
|
|
252
|
+
s.some((g) => Math.abs(g - p) < 1) || s.push(p);
|
|
253
|
+
}
|
|
254
|
+
this._$root.removeAttribute("data-measuring");
|
|
255
|
+
const n = s.length > Math.max(1, Math.floor(this.maxRows || 1));
|
|
256
|
+
if (this._$toggleWrap.hidden = !n, n !== this._overflowing && (this._overflowing = n, this.updateComplete.then(() => {
|
|
257
|
+
this.kind === "assist" && this._initItems();
|
|
258
|
+
})), t && this._resolvedLayout === "scroll") {
|
|
259
|
+
const a = this._pendingScrollTarget;
|
|
260
|
+
this._$root.scrollLeft = i, this._keepTargetVisible(a), this._scheduleTargetVisibility(a);
|
|
261
|
+
}
|
|
262
|
+
this._pendingScrollLeft = void 0, this._pendingScrollTarget = void 0;
|
|
263
|
+
}
|
|
264
|
+
_keepTargetVisible(e) {
|
|
265
|
+
if (!e?.isConnected || !this.contains(e))
|
|
266
|
+
return;
|
|
267
|
+
const t = this._$root.getBoundingClientRect(), i = e.getBoundingClientRect(), s = i.left < t.left ? i.left - t.left : i.right > t.right ? i.right - t.right : 0;
|
|
268
|
+
s !== 0 && (this._$root.scrollLeft += s);
|
|
269
|
+
}
|
|
270
|
+
_scheduleTargetVisibility(e) {
|
|
271
|
+
e && (this._targetVisibilityFrame = requestAnimationFrame(() => {
|
|
272
|
+
this._targetVisibilityFrame = void 0, this._resolvedLayout === "scroll" && this._keepTargetVisible(e);
|
|
273
|
+
}));
|
|
274
|
+
}
|
|
275
|
+
get _resolvedLayout() {
|
|
276
|
+
return this.layout === "scroll" || this.layout === "auto" && this._overflowing && !this.expanded ? "scroll" : "wrap";
|
|
277
|
+
}
|
|
278
|
+
render() {
|
|
279
|
+
const e = this.kind === "assist", t = this.layout === "auto" && this._overflowing;
|
|
280
|
+
return m`
|
|
281
|
+
<div
|
|
282
|
+
id="root"
|
|
283
|
+
part="root"
|
|
284
|
+
data-mode=${this._resolvedLayout}
|
|
285
|
+
role=${e ? "toolbar" : u}
|
|
286
|
+
aria-label=${e ? this.label : u}
|
|
287
|
+
@keydown=${this._handleKeyDown}
|
|
288
|
+
@change=${{ handleEvent: this._handleChange, capture: !0 }}
|
|
289
|
+
>
|
|
290
|
+
<span id="toggle-wrap" ?hidden=${!t}>
|
|
291
|
+
<rc-chip id="toggle" part="toggle" variant="assist">
|
|
292
|
+
<button type="button" ?disabled=${!t} @click=${this._toggleExpanded}>
|
|
293
|
+
<svg
|
|
294
|
+
part="toggle-icon"
|
|
295
|
+
data-rc-chip-icon
|
|
296
|
+
aria-hidden="true"
|
|
297
|
+
focusable="false"
|
|
298
|
+
viewBox="0 0 24 24"
|
|
299
|
+
>
|
|
300
|
+
<path
|
|
301
|
+
fill="currentColor"
|
|
302
|
+
d="M3 17v2h6v-2zM3 5v2h10V5zm10 16v-2h8v-2h-8v-2h-2v6zM7 9v2H3v2h4v2h2V9zm14 4v-2H11v2zm-6-4h2V7h4V5h-4V3h-2z"
|
|
303
|
+
></path>
|
|
304
|
+
</svg>
|
|
305
|
+
${this.expanded ? this.showLessLabel : this.showAllLabel}
|
|
306
|
+
</button>
|
|
307
|
+
</rc-chip>
|
|
308
|
+
<span id="toggle-separator" part="toggle-separator" aria-hidden="true"></span>
|
|
309
|
+
</span>
|
|
310
|
+
<div id="slot-wrap" @focusin=${this._handleItemFocus}>
|
|
311
|
+
<slot id="items" @slotchange=${this._handleSlotChange}></slot>
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
`;
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
d.styles = w;
|
|
318
|
+
let r = d;
|
|
319
|
+
o([
|
|
320
|
+
v()
|
|
321
|
+
], r.prototype, "_overflowing", 2);
|
|
322
|
+
o([
|
|
323
|
+
h("#root", !0)
|
|
324
|
+
], r.prototype, "_$root", 2);
|
|
325
|
+
o([
|
|
326
|
+
h("#items", !0)
|
|
327
|
+
], r.prototype, "_$slot", 2);
|
|
328
|
+
o([
|
|
329
|
+
h("#toggle", !0)
|
|
330
|
+
], r.prototype, "_$toggle", 2);
|
|
331
|
+
o([
|
|
332
|
+
h("#toggle-wrap", !0)
|
|
333
|
+
], r.prototype, "_$toggleWrap", 2);
|
|
334
|
+
o([
|
|
335
|
+
l({ reflect: !0 })
|
|
336
|
+
], r.prototype, "layout", 2);
|
|
337
|
+
o([
|
|
338
|
+
l({ type: Number, attribute: "max-rows", reflect: !0 })
|
|
339
|
+
], r.prototype, "maxRows", 2);
|
|
340
|
+
o([
|
|
341
|
+
l({ reflect: !0 })
|
|
342
|
+
], r.prototype, "kind", 2);
|
|
343
|
+
o([
|
|
344
|
+
l({ reflect: !0 })
|
|
345
|
+
], r.prototype, "selection", 2);
|
|
346
|
+
o([
|
|
347
|
+
l()
|
|
348
|
+
], r.prototype, "label", 2);
|
|
349
|
+
o([
|
|
350
|
+
l({ attribute: "show-all-label" })
|
|
351
|
+
], r.prototype, "showAllLabel", 2);
|
|
352
|
+
o([
|
|
353
|
+
l({ attribute: "show-less-label" })
|
|
354
|
+
], r.prototype, "showLessLabel", 2);
|
|
355
|
+
o([
|
|
356
|
+
l({ type: Boolean, reflect: !0 })
|
|
357
|
+
], r.prototype, "expanded", 1);
|
|
358
|
+
o([
|
|
359
|
+
l({ type: Boolean, attribute: "default-expanded" })
|
|
360
|
+
], r.prototype, "defaultExpanded", 1);
|
|
361
|
+
export {
|
|
362
|
+
r as R
|
|
363
|
+
};
|
|
364
|
+
//# sourceMappingURL=rc-chip-group-DKVJOa6j.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rc-chip-group-DKVJOa6j.js","sources":["../src/rc-chip-group.styles.ts","../src/rc-chip-group.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const chipGroupStyles = css`\n :host {\n display: block;\n min-inline-size: 0;\n color-scheme: inherit;\n }\n\n :host([hidden]) {\n display: none;\n }\n\n #root {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--rc-chip-group-row-gap, 0) var(--rc-chip-group-column-gap, 0.5rem);\n min-inline-size: 0;\n padding-block: var(--rc-chip-group-padding-block, 0);\n }\n\n #root[data-mode='scroll'] {\n flex-wrap: nowrap;\n overflow-x: auto;\n overflow-y: hidden;\n overscroll-behavior-inline: contain;\n scroll-padding-inline: var(--rc-chip-group-scroll-padding-inline, 0);\n scrollbar-width: var(--rc-chip-group-scrollbar-width, none);\n -webkit-overflow-scrolling: touch;\n }\n\n #root[data-mode='scroll']::-webkit-scrollbar {\n display: var(--rc-chip-group-webkit-scrollbar-display, none);\n }\n\n #root[data-measuring] {\n flex-wrap: wrap;\n overflow: hidden;\n }\n\n #slot-wrap {\n display: contents;\n }\n\n ::slotted(*) {\n flex: 0 0 auto;\n }\n\n #toggle-wrap {\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n gap: var(--rc-chip-group-toggle-separator-gap, 0.5rem);\n order: -1;\n }\n\n #toggle-wrap[hidden] {\n display: none;\n }\n\n #toggle {\n --rc-chip-gap: var(--rc-chip-group-toggle-gap, 0.5rem);\n }\n\n #toggle > button {\n white-space: nowrap;\n }\n\n [part='toggle-icon'] {\n display: block;\n flex: 0 0 auto;\n inline-size: var(--rc-chip-group-toggle-icon-size, 1.125rem);\n block-size: var(--rc-chip-group-toggle-icon-size, 1.125rem);\n }\n\n [part='toggle-separator'] {\n flex: 0 0 auto;\n inline-size: var(--rc-chip-group-toggle-separator-inline-size, 1px);\n block-size: var(--rc-chip-group-toggle-separator-block-size, 1.5rem);\n background: var(--rc-chip-group-toggle-separator-color, currentColor);\n }\n\n @media (forced-colors: active) {\n #root[data-mode='scroll'] {\n scrollbar-width: auto;\n }\n\n [part='toggle-separator'] {\n background: CanvasText;\n }\n }\n`;\n\nexport default chipGroupStyles;\n","import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\n\nimport { isFocusable, RovingTabIndexMixin } from '@rcarls/rc-common';\nimport type { RCChip } from '@rcarls/rc-chip';\n\nimport chipGroupStyles from './rc-chip-group.styles.js';\n\nexport type RCChipGroupLayout = 'auto' | 'wrap' | 'scroll';\nexport type RCChipGroupKind = 'generic' | 'assist' | 'filter';\nexport type RCChipGroupSelection = 'none' | 'single' | 'multiple';\n\nexport interface RCChipGroupToggleDetail {\n /** Expanded state requested by the user. */\n expanded: boolean;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'rc-chip-group': RCChipGroup;\n }\n\n interface HTMLElementEventMap {\n 'rc-chip-group-toggle': CustomEvent<RCChipGroupToggleDetail>;\n }\n}\n\n/**\n * Adaptive chip layout for native controls, `rc-chip`, and arbitrary elements.\n * Natural wrapping is kept while content fits within `max-rows`; overflowing\n * auto groups collapse to one horizontally scrolling row with a leading\n * Show all action.\n *\n * Assist groups expose toolbar semantics and roving arrow-key navigation.\n * Filter groups preserve native radio/checkbox behavior: author a `<fieldset>`\n * around the group, then place one native input in each direct-child chip label.\n * Generic groups are layout-only and do not coordinate their children.\n *\n * @slot - Direct chip or arbitrary-element children.\n *\n * @fires rc-chip-group-toggle - Fired after the user activates Show all or Show less.\n *\n * @csspart root - Flex layout and horizontal scroll container.\n * @csspart toggle - Internal leading disclosure chip.\n * @csspart toggle-icon - MDI tune icon inside the disclosure chip.\n * @csspart toggle-separator - Vertical separator after the disclosure chip.\n *\n * @attr layout - Layout strategy: `auto`, `wrap`, or `scroll`.\n * @attr max-rows - Maximum natural rows before auto layout collapses.\n * @attr kind - Coordination mode: `generic`, `assist`, or `filter`.\n * @attr selection - Filter semantics hint: `none`, `single`, or `multiple`.\n * @attr expanded - Current auto-layout disclosure state. Host writes are silent.\n * @attr default-expanded - Initial uncontrolled disclosure state.\n * @attr label - Accessible label for assist-toolbar semantics.\n * @attr show-all-label - Label for the collapsed overflow action.\n * @attr show-less-label - Label for the expanded overflow action.\n *\n * @cssprop [--rc-chip-group-column-gap=0.5rem] - Inline gap between items.\n * @cssprop [--rc-chip-group-row-gap=0] - Block gap between wrapped rows.\n * @cssprop [--rc-chip-group-padding-block=0] - Group block-axis padding.\n * @cssprop [--rc-chip-group-scroll-padding-inline=0] - Horizontal scroll padding.\n * @cssprop [--rc-chip-group-scrollbar-width=none] - Standards-based scrollbar width.\n * @cssprop [--rc-chip-group-toggle-gap=0.5rem] - Gap between the disclosure icon and label.\n * @cssprop [--rc-chip-group-toggle-separator-gap=0.5rem] - Gap before the disclosure separator.\n * @cssprop [--rc-chip-group-toggle-icon-size=1.125rem] - Disclosure icon size.\n * @cssprop [--rc-chip-group-toggle-separator-block-size=1.5rem] - Separator block size.\n * @cssprop [--rc-chip-group-toggle-separator-inline-size=1px] - Separator thickness.\n * @cssprop [--rc-chip-group-toggle-separator-color=currentColor] - Separator color.\n */\nexport class RCChipGroup extends RovingTabIndexMixin(LitElement) {\n static override styles = chipGroupStyles;\n\n private _expanded: boolean | undefined;\n private _defaultExpanded = false;\n private _uncontrolledExpanded: boolean | undefined;\n private _expandedInitialized = false;\n private _measureFrame: number | undefined;\n private _targetVisibilityFrame: number | undefined;\n private _pendingScrollLeft: number | undefined;\n private _pendingScrollTarget: HTMLElement | undefined;\n\n @state()\n private _overflowing = false;\n\n @query('#root', true)\n protected _$root!: HTMLDivElement;\n\n @query('#items', true)\n private _$slot!: HTMLSlotElement;\n\n @query('#toggle', true)\n private _$toggle!: RCChip;\n\n @query('#toggle-wrap', true)\n private _$toggleWrap!: HTMLSpanElement;\n\n private _resizeObserver: ResizeObserver | null = null;\n\n private _mutationObserver: MutationObserver | null = null;\n private readonly _authoredVariants = new Map<RCChip, RCChip['variant']>();\n\n /** Layout strategy. */\n @property({ reflect: true })\n layout: RCChipGroupLayout = 'auto';\n\n /** Maximum natural rows before auto layout collapses to horizontal scrolling. */\n @property({ type: Number, attribute: 'max-rows', reflect: true })\n maxRows = 2;\n\n /** Child coordination mode. */\n @property({ reflect: true })\n kind: RCChipGroupKind = 'generic';\n\n /** Native filter selection hint. */\n @property({ reflect: true })\n selection: RCChipGroupSelection = 'none';\n\n /** Accessible label used when `kind=\"assist\"` exposes toolbar semantics. */\n @property()\n label = 'Chip actions';\n\n /** Collapsed overflow action label. */\n @property({ attribute: 'show-all-label' })\n showAllLabel = 'Show all';\n\n /** Expanded overflow action label. */\n @property({ attribute: 'show-less-label' })\n showLessLabel = 'Show less';\n\n /** Current auto-layout disclosure state. Host writes are silent. */\n @property({ type: Boolean, reflect: true })\n get expanded(): boolean {\n return this._expanded ?? this._uncontrolledExpanded ?? this._defaultExpanded;\n }\n\n set expanded(value: boolean | undefined) {\n const oldValue = this.expanded;\n\n this._expanded = value;\n this._expandedInitialized = true;\n this.requestUpdate('expanded', oldValue);\n }\n\n /** Initial uncontrolled disclosure state. */\n @property({ type: Boolean, attribute: 'default-expanded' })\n get defaultExpanded(): boolean {\n return this._defaultExpanded;\n }\n\n set defaultExpanded(value: boolean) {\n const oldValue = this._defaultExpanded;\n\n this._defaultExpanded = value;\n\n if (\n !this._expandedInitialized &&\n this._expanded === undefined &&\n this._uncontrolledExpanded === undefined\n ) {\n this.requestUpdate('expanded', oldValue);\n }\n\n this.requestUpdate('defaultExpanded', oldValue);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (typeof ResizeObserver === 'function') {\n this._resizeObserver ??= new ResizeObserver(() => this._scheduleMeasure());\n this._resizeObserver.observe(this);\n }\n\n if (typeof MutationObserver === 'function') {\n this._mutationObserver ??= new MutationObserver(() => {\n this._syncNativeSelection();\n this._scheduleMeasure();\n });\n\n this._mutationObserver.observe(this, {\n subtree: true,\n attributes: true,\n attributeFilter: ['checked', 'disabled', 'hidden'],\n });\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._resizeObserver?.disconnect();\n this._mutationObserver?.disconnect();\n\n if (this._measureFrame !== undefined) {\n cancelAnimationFrame(this._measureFrame);\n this._measureFrame = undefined;\n }\n\n if (this._targetVisibilityFrame !== undefined) {\n cancelAnimationFrame(this._targetVisibilityFrame);\n this._targetVisibilityFrame = undefined;\n }\n\n this._pendingScrollLeft = undefined;\n this._pendingScrollTarget = undefined;\n this._restoreAuthoredVariants();\n }\n\n protected override firstUpdated(): void {\n this._syncAssignedItems();\n this._observeAssignedItems();\n this._scheduleMeasure();\n }\n\n protected override updated(changed: PropertyValues<this>): void {\n if (changed.has('kind')) {\n this._syncAssignedItems();\n this._$slot.dispatchEvent(new Event('slotchange'));\n }\n\n if (changed.has('layout') || changed.has('maxRows') || changed.has('expanded')) {\n this._scheduleMeasure();\n }\n }\n\n protected override _collectItems($slot: HTMLSlotElement): Element[] {\n if (this.kind !== 'assist') {\n return [];\n }\n\n const $toggleButton = this._$toggle?.querySelector(':scope > button');\n const items = $slot.assignedElements().flatMap(($element) => {\n if ($element.matches('rc-button, rc-chip')) {\n const $button = $element.querySelector(':scope > button');\n\n return $button ? [$button] : [];\n }\n\n return this._isAssistItem($element) ? [$element] : [];\n });\n\n return $toggleButton ? [$toggleButton, ...items] : items;\n }\n\n protected override _initItems(): void {\n super._initItems();\n\n const $target = this._lastFocused ?? this.firstItem;\n\n queueMicrotask(() => {\n if (this.kind === 'assist' && this.matches(':focus-within')) {\n this.focusItem($target);\n }\n });\n }\n\n private _isAssistItem($element: Element): boolean {\n if (\n $element instanceof HTMLButtonElement ||\n $element instanceof HTMLInputElement ||\n $element instanceof HTMLSelectElement ||\n $element instanceof HTMLTextAreaElement\n ) {\n return true;\n }\n\n if ($element instanceof HTMLAnchorElement || $element instanceof HTMLAreaElement) {\n return $element.hasAttribute('href');\n }\n\n return isFocusable($element);\n }\n\n private readonly _handleKeyDown = (event: KeyboardEvent): void => {\n if (\n this.kind !== 'assist' ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n ) {\n return;\n }\n\n const rtl = getComputedStyle(this._$root).direction === 'rtl';\n\n switch (event.key) {\n case rtl ? 'ArrowLeft' : 'ArrowRight':\n event.preventDefault();\n this.focusItem(this.nextItem);\n break;\n case rtl ? 'ArrowRight' : 'ArrowLeft':\n event.preventDefault();\n this.focusItem(this.previousItem);\n break;\n case 'Home':\n event.preventDefault();\n this.focusFirst();\n break;\n case 'End':\n event.preventDefault();\n this.focusLast();\n break;\n }\n };\n\n private _handleSlotChange(event: Event): void {\n this._onSlotChange(event);\n\n queueMicrotask(() => {\n if (!this.isConnected) {\n return;\n }\n\n this._syncAssignedItems();\n this._observeAssignedItems();\n this._scheduleMeasure();\n });\n }\n\n private _assignedElements(): HTMLElement[] {\n return this._$slot\n .assignedElements({ flatten: true })\n .filter(($element): $element is HTMLElement => $element instanceof HTMLElement);\n }\n\n private _syncAssignedItems(): void {\n const variant = this.kind === 'assist' ? 'assist' : this.kind === 'filter' ? 'filter' : null;\n const $assignedChips = this._assignedElements().filter(\n ($element): $element is RCChip => $element.localName === 'rc-chip',\n );\n\n for (const [$chip, authoredVariant] of this._authoredVariants) {\n if (!variant || !$assignedChips.includes($chip)) {\n $chip.variant = authoredVariant;\n this._authoredVariants.delete($chip);\n }\n }\n\n if (variant) {\n for (const $chip of $assignedChips) {\n if (!this._authoredVariants.has($chip)) {\n this._authoredVariants.set($chip, $chip.variant);\n }\n\n $chip.variant = variant;\n }\n }\n\n this._syncNativeSelection();\n this._validateFilterItems();\n }\n\n private _observeAssignedItems(): void {\n this._resizeObserver?.disconnect();\n this._resizeObserver?.observe(this);\n\n for (const $element of this._assignedElements()) {\n this._resizeObserver?.observe($element);\n }\n }\n\n private _syncNativeSelection(): void {\n if (this.kind !== 'filter') {\n return;\n }\n\n for (const $element of this._assignedElements()) {\n if ($element.localName !== 'rc-chip') {\n continue;\n }\n\n ($element as RCChip).syncNativeSelection();\n }\n }\n\n private _restoreAuthoredVariants(): void {\n for (const [$chip, variant] of this._authoredVariants) {\n $chip.variant = variant;\n }\n\n this._authoredVariants.clear();\n }\n\n private _validateFilterItems(): void {\n if (this.kind !== 'filter' || this.selection === 'none' || !import.meta.env.DEV) {\n return;\n }\n\n const expectedType = this.selection === 'single' ? 'radio' : 'checkbox';\n const invalid = this._assignedElements().filter(($element) => {\n if ($element.localName !== 'rc-chip') {\n return false;\n }\n\n return !$element.querySelector(`:scope > label > input[type=\"${expectedType}\"]`);\n });\n\n if (invalid.length > 0) {\n console.warn(\n `[rc-chip-group] selection=\"${this.selection}\" expects each rc-chip to contain a native ${expectedType} input.`,\n invalid,\n );\n }\n }\n\n private readonly _handleChange = (event: Event): void => {\n if (this._resolvedLayout === 'scroll') {\n if (this._targetVisibilityFrame !== undefined) {\n cancelAnimationFrame(this._targetVisibilityFrame);\n this._targetVisibilityFrame = undefined;\n }\n\n this._pendingScrollLeft = this._$root.scrollLeft;\n\n const assigned = new Set(this._assignedElements());\n\n this._pendingScrollTarget = event\n .composedPath()\n .find(\n ($target): $target is HTMLElement =>\n $target instanceof HTMLElement && assigned.has($target),\n );\n }\n\n queueMicrotask(() => {\n this._syncNativeSelection();\n this._scheduleMeasure();\n });\n };\n\n private readonly _toggleExpanded = (): void => {\n const oldValue = this.expanded;\n const requestedExpanded = !oldValue;\n\n if (this._expanded === undefined) {\n this._uncontrolledExpanded = requestedExpanded;\n this.requestUpdate('expanded', oldValue);\n }\n\n this.dispatchEvent(\n new CustomEvent<RCChipGroupToggleDetail>('rc-chip-group-toggle', {\n bubbles: true,\n composed: true,\n detail: { expanded: requestedExpanded },\n }),\n );\n };\n\n private _scheduleMeasure(): void {\n if (this._measureFrame !== undefined || !this.isConnected) {\n return;\n }\n\n this._measureFrame = requestAnimationFrame(() => {\n this._measureFrame = undefined;\n this._measureRows();\n });\n }\n\n private _measureRows(): void {\n if (this.layout !== 'auto') {\n if (this.layout === 'scroll' && this._pendingScrollLeft !== undefined) {\n const $target = this._pendingScrollTarget;\n\n this._$root.scrollLeft = this._pendingScrollLeft;\n this._keepTargetVisible($target);\n this._scheduleTargetVisibility($target);\n }\n\n this._pendingScrollLeft = undefined;\n this._pendingScrollTarget = undefined;\n\n if (this._overflowing) {\n this._overflowing = false;\n }\n\n return;\n }\n\n const items = this._assignedElements().filter(($element) => !$element.hidden);\n const wasScrolling = this._resolvedLayout === 'scroll';\n const scrollLeft = this._pendingScrollLeft ?? this._$root.scrollLeft;\n\n this._$root.toggleAttribute('data-measuring', true);\n this._$toggleWrap.hidden = true;\n\n const rowStarts: number[] = [];\n\n for (const $item of items) {\n const top = $item.getBoundingClientRect().top;\n\n if (!rowStarts.some((rowTop) => Math.abs(rowTop - top) < 1)) {\n rowStarts.push(top);\n }\n }\n\n this._$root.removeAttribute('data-measuring');\n\n const nextOverflowing = rowStarts.length > Math.max(1, Math.floor(this.maxRows || 1));\n\n this._$toggleWrap.hidden = !nextOverflowing;\n\n if (nextOverflowing !== this._overflowing) {\n this._overflowing = nextOverflowing;\n\n void this.updateComplete.then(() => {\n if (this.kind === 'assist') {\n this._initItems();\n }\n });\n }\n\n if (wasScrolling && this._resolvedLayout === 'scroll') {\n const $target = this._pendingScrollTarget;\n\n this._$root.scrollLeft = scrollLeft;\n this._keepTargetVisible($target);\n this._scheduleTargetVisibility($target);\n }\n\n this._pendingScrollLeft = undefined;\n this._pendingScrollTarget = undefined;\n }\n\n private _keepTargetVisible($target: HTMLElement | undefined): void {\n if (!$target?.isConnected || !this.contains($target)) {\n return;\n }\n\n const rootRect = this._$root.getBoundingClientRect();\n const targetRect = $target.getBoundingClientRect();\n const delta =\n targetRect.left < rootRect.left\n ? targetRect.left - rootRect.left\n : targetRect.right > rootRect.right\n ? targetRect.right - rootRect.right\n : 0;\n\n if (delta !== 0) {\n this._$root.scrollLeft += delta;\n }\n }\n\n private _scheduleTargetVisibility($target: HTMLElement | undefined): void {\n if (!$target) {\n return;\n }\n\n this._targetVisibilityFrame = requestAnimationFrame(() => {\n this._targetVisibilityFrame = undefined;\n\n if (this._resolvedLayout === 'scroll') {\n this._keepTargetVisible($target);\n }\n });\n }\n\n private get _resolvedLayout(): 'wrap' | 'scroll' {\n if (this.layout === 'scroll') {\n return 'scroll';\n }\n\n if (this.layout === 'auto' && this._overflowing && !this.expanded) {\n return 'scroll';\n }\n\n return 'wrap';\n }\n\n protected override render() {\n const assist = this.kind === 'assist';\n const showToggle = this.layout === 'auto' && this._overflowing;\n\n return html`\n <div\n id=\"root\"\n part=\"root\"\n data-mode=${this._resolvedLayout}\n role=${assist ? 'toolbar' : nothing}\n aria-label=${assist ? this.label : nothing}\n @keydown=${this._handleKeyDown}\n @change=${{ handleEvent: this._handleChange, capture: true }}\n >\n <span id=\"toggle-wrap\" ?hidden=${!showToggle}>\n <rc-chip id=\"toggle\" part=\"toggle\" variant=\"assist\">\n <button type=\"button\" ?disabled=${!showToggle} @click=${this._toggleExpanded}>\n <svg\n part=\"toggle-icon\"\n data-rc-chip-icon\n aria-hidden=\"true\"\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M3 17v2h6v-2zM3 5v2h10V5zm10 16v-2h8v-2h-8v-2h-2v6zM7 9v2H3v2h4v2h2V9zm14 4v-2H11v2zm-6-4h2V7h4V5h-4V3h-2z\"\n ></path>\n </svg>\n ${this.expanded ? this.showLessLabel : this.showAllLabel}\n </button>\n </rc-chip>\n <span id=\"toggle-separator\" part=\"toggle-separator\" aria-hidden=\"true\"></span>\n </span>\n <div id=\"slot-wrap\" @focusin=${this._handleItemFocus}>\n <slot id=\"items\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n}\n\nexport default RCChipGroup;\n"],"names":["chipGroupStyles","css","_RCChipGroup","RovingTabIndexMixin","LitElement","event","rtl","assigned","$target","oldValue","requestedExpanded","value","changed","$slot","$toggleButton","items","$element","$button","isFocusable","variant","$assignedChips","$chip","authoredVariant","wasScrolling","scrollLeft","rowStarts","$item","top","rowTop","nextOverflowing","rootRect","targetRect","delta","assist","showToggle","html","nothing","RCChipGroup","__decorateClass","state","query","property"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rc-chip-group-define.js","sources":["../src/define.ts"],"sourcesContent":["import '@rcarls/rc-chip/define';\nimport { RCChipGroup } from './index.js';\n\ncustomElements.get('rc-chip-group') || customElements.define('rc-chip-group', RCChipGroup);\n\nexport * from './index.js';\n"],"names":["RCChipGroup"],"mappings":";;AAGA,eAAe,IAAI,eAAe,KAAK,eAAe,OAAO,iBAAiBA,CAAW;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rc-chip-group.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './rc-chip-group.js';
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { LitElement, PropertyValues } from 'lit';
|
|
2
|
+
export type RCChipGroupLayout = 'auto' | 'wrap' | 'scroll';
|
|
3
|
+
export type RCChipGroupKind = 'generic' | 'assist' | 'filter';
|
|
4
|
+
export type RCChipGroupSelection = 'none' | 'single' | 'multiple';
|
|
5
|
+
export interface RCChipGroupToggleDetail {
|
|
6
|
+
/** Expanded state requested by the user. */
|
|
7
|
+
expanded: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare global {
|
|
10
|
+
interface HTMLElementTagNameMap {
|
|
11
|
+
'rc-chip-group': RCChipGroup;
|
|
12
|
+
}
|
|
13
|
+
interface HTMLElementEventMap {
|
|
14
|
+
'rc-chip-group-toggle': CustomEvent<RCChipGroupToggleDetail>;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
declare const RCChipGroup_base: typeof LitElement & (new (...args: any[]) => import('@rcarls/rc-common').RovingTabIndexMixinBase);
|
|
18
|
+
/**
|
|
19
|
+
* Adaptive chip layout for native controls, `rc-chip`, and arbitrary elements.
|
|
20
|
+
* Natural wrapping is kept while content fits within `max-rows`; overflowing
|
|
21
|
+
* auto groups collapse to one horizontally scrolling row with a leading
|
|
22
|
+
* Show all action.
|
|
23
|
+
*
|
|
24
|
+
* Assist groups expose toolbar semantics and roving arrow-key navigation.
|
|
25
|
+
* Filter groups preserve native radio/checkbox behavior: author a `<fieldset>`
|
|
26
|
+
* around the group, then place one native input in each direct-child chip label.
|
|
27
|
+
* Generic groups are layout-only and do not coordinate their children.
|
|
28
|
+
*
|
|
29
|
+
* @slot - Direct chip or arbitrary-element children.
|
|
30
|
+
*
|
|
31
|
+
* @fires rc-chip-group-toggle - Fired after the user activates Show all or Show less.
|
|
32
|
+
*
|
|
33
|
+
* @csspart root - Flex layout and horizontal scroll container.
|
|
34
|
+
* @csspart toggle - Internal leading disclosure chip.
|
|
35
|
+
* @csspart toggle-icon - MDI tune icon inside the disclosure chip.
|
|
36
|
+
* @csspart toggle-separator - Vertical separator after the disclosure chip.
|
|
37
|
+
*
|
|
38
|
+
* @attr layout - Layout strategy: `auto`, `wrap`, or `scroll`.
|
|
39
|
+
* @attr max-rows - Maximum natural rows before auto layout collapses.
|
|
40
|
+
* @attr kind - Coordination mode: `generic`, `assist`, or `filter`.
|
|
41
|
+
* @attr selection - Filter semantics hint: `none`, `single`, or `multiple`.
|
|
42
|
+
* @attr expanded - Current auto-layout disclosure state. Host writes are silent.
|
|
43
|
+
* @attr default-expanded - Initial uncontrolled disclosure state.
|
|
44
|
+
* @attr label - Accessible label for assist-toolbar semantics.
|
|
45
|
+
* @attr show-all-label - Label for the collapsed overflow action.
|
|
46
|
+
* @attr show-less-label - Label for the expanded overflow action.
|
|
47
|
+
*
|
|
48
|
+
* @cssprop [--rc-chip-group-column-gap=0.5rem] - Inline gap between items.
|
|
49
|
+
* @cssprop [--rc-chip-group-row-gap=0] - Block gap between wrapped rows.
|
|
50
|
+
* @cssprop [--rc-chip-group-padding-block=0] - Group block-axis padding.
|
|
51
|
+
* @cssprop [--rc-chip-group-scroll-padding-inline=0] - Horizontal scroll padding.
|
|
52
|
+
* @cssprop [--rc-chip-group-scrollbar-width=none] - Standards-based scrollbar width.
|
|
53
|
+
* @cssprop [--rc-chip-group-toggle-gap=0.5rem] - Gap between the disclosure icon and label.
|
|
54
|
+
* @cssprop [--rc-chip-group-toggle-separator-gap=0.5rem] - Gap before the disclosure separator.
|
|
55
|
+
* @cssprop [--rc-chip-group-toggle-icon-size=1.125rem] - Disclosure icon size.
|
|
56
|
+
* @cssprop [--rc-chip-group-toggle-separator-block-size=1.5rem] - Separator block size.
|
|
57
|
+
* @cssprop [--rc-chip-group-toggle-separator-inline-size=1px] - Separator thickness.
|
|
58
|
+
* @cssprop [--rc-chip-group-toggle-separator-color=currentColor] - Separator color.
|
|
59
|
+
*/
|
|
60
|
+
export declare class RCChipGroup extends RCChipGroup_base {
|
|
61
|
+
static styles: import('lit').CSSResult;
|
|
62
|
+
private _expanded;
|
|
63
|
+
private _defaultExpanded;
|
|
64
|
+
private _uncontrolledExpanded;
|
|
65
|
+
private _expandedInitialized;
|
|
66
|
+
private _measureFrame;
|
|
67
|
+
private _targetVisibilityFrame;
|
|
68
|
+
private _pendingScrollLeft;
|
|
69
|
+
private _pendingScrollTarget;
|
|
70
|
+
private _overflowing;
|
|
71
|
+
protected _$root: HTMLDivElement;
|
|
72
|
+
private _$slot;
|
|
73
|
+
private _$toggle;
|
|
74
|
+
private _$toggleWrap;
|
|
75
|
+
private _resizeObserver;
|
|
76
|
+
private _mutationObserver;
|
|
77
|
+
private readonly _authoredVariants;
|
|
78
|
+
/** Layout strategy. */
|
|
79
|
+
layout: RCChipGroupLayout;
|
|
80
|
+
/** Maximum natural rows before auto layout collapses to horizontal scrolling. */
|
|
81
|
+
maxRows: number;
|
|
82
|
+
/** Child coordination mode. */
|
|
83
|
+
kind: RCChipGroupKind;
|
|
84
|
+
/** Native filter selection hint. */
|
|
85
|
+
selection: RCChipGroupSelection;
|
|
86
|
+
/** Accessible label used when `kind="assist"` exposes toolbar semantics. */
|
|
87
|
+
label: string;
|
|
88
|
+
/** Collapsed overflow action label. */
|
|
89
|
+
showAllLabel: string;
|
|
90
|
+
/** Expanded overflow action label. */
|
|
91
|
+
showLessLabel: string;
|
|
92
|
+
/** Current auto-layout disclosure state. Host writes are silent. */
|
|
93
|
+
get expanded(): boolean;
|
|
94
|
+
set expanded(value: boolean | undefined);
|
|
95
|
+
/** Initial uncontrolled disclosure state. */
|
|
96
|
+
get defaultExpanded(): boolean;
|
|
97
|
+
set defaultExpanded(value: boolean);
|
|
98
|
+
connectedCallback(): void;
|
|
99
|
+
disconnectedCallback(): void;
|
|
100
|
+
protected firstUpdated(): void;
|
|
101
|
+
protected updated(changed: PropertyValues<this>): void;
|
|
102
|
+
protected _collectItems($slot: HTMLSlotElement): Element[];
|
|
103
|
+
protected _initItems(): void;
|
|
104
|
+
private _isAssistItem;
|
|
105
|
+
private readonly _handleKeyDown;
|
|
106
|
+
private _handleSlotChange;
|
|
107
|
+
private _assignedElements;
|
|
108
|
+
private _syncAssignedItems;
|
|
109
|
+
private _observeAssignedItems;
|
|
110
|
+
private _syncNativeSelection;
|
|
111
|
+
private _restoreAuthoredVariants;
|
|
112
|
+
private _validateFilterItems;
|
|
113
|
+
private readonly _handleChange;
|
|
114
|
+
private readonly _toggleExpanded;
|
|
115
|
+
private _scheduleMeasure;
|
|
116
|
+
private _measureRows;
|
|
117
|
+
private _keepTargetVisible;
|
|
118
|
+
private _scheduleTargetVisibility;
|
|
119
|
+
private get _resolvedLayout();
|
|
120
|
+
protected render(): import('lit').TemplateResult<1>;
|
|
121
|
+
}
|
|
122
|
+
export default RCChipGroup;
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rcarls/rc-chip-group",
|
|
3
|
+
"publishConfig": {
|
|
4
|
+
"access": "public"
|
|
5
|
+
},
|
|
6
|
+
"version": "0.5.0",
|
|
7
|
+
"description": "Adaptive wrapping and scrolling layout for native-backed chips and arbitrary elements.",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/richardcarls/rc-webcomponents.git",
|
|
11
|
+
"directory": "packages/rc-chip-group"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://richardcarls.github.io/rc-webcomponents/components/rc-chip-group",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"type": "module",
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"module": "./dist/rc-chip-group.js",
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"import": {
|
|
23
|
+
"types": "./dist/types/packages/rc-chip-group/src/index.d.ts",
|
|
24
|
+
"default": "./dist/rc-chip-group.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"./define": {
|
|
28
|
+
"import": {
|
|
29
|
+
"types": "./dist/types/packages/rc-chip-group/src/define.d.ts",
|
|
30
|
+
"default": "./dist/rc-chip-group-define.js"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"types": "./dist/types/packages/rc-chip-group/src/index.d.ts",
|
|
35
|
+
"sideEffects": [
|
|
36
|
+
"./dist/rc-chip-group-define.js"
|
|
37
|
+
],
|
|
38
|
+
"customElements": "dist/custom-elements.json",
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc && vite build && cem analyze",
|
|
41
|
+
"cem:analyze": "cem analyze",
|
|
42
|
+
"preview": "vite preview",
|
|
43
|
+
"test:browser": "vitest --run",
|
|
44
|
+
"test:browser:chrome": "vitest --run --project=chromium",
|
|
45
|
+
"test:browser:firefox": "vitest --run --project=firefox"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@rcarls/rc-chip": "0.5.0",
|
|
49
|
+
"@rcarls/rc-common": "0.5.0"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@custom-elements-manifest/analyzer": "0.11.0",
|
|
53
|
+
"@vitest/browser-playwright": "4.1.5",
|
|
54
|
+
"lit": "^3.0.0",
|
|
55
|
+
"playwright": "^1.56.0",
|
|
56
|
+
"rollup": "^4.60.2",
|
|
57
|
+
"typescript": "~5.9.3",
|
|
58
|
+
"vite": "^7.1.7",
|
|
59
|
+
"vite-plugin-dts": "^4.5.4",
|
|
60
|
+
"vitest": "^4.0.6",
|
|
61
|
+
"vitest-browser-lit": "^1.0.1"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"lit": "^3.0.0"
|
|
65
|
+
}
|
|
66
|
+
}
|