@ctrliq/quantic-components 1.83.0 → 1.84.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/dist/action-group/action-group.component.d.ts +13 -0
- package/dist/action-group/action-group.component.js +63 -0
- package/dist/action-group/index.d.ts +1 -0
- package/dist/action-group/index.js +1 -0
- package/dist/action-group/index.stories.d.ts +25 -0
- package/dist/action-group/index.stories.js +59 -0
- package/dist/astro.d.ts +4 -1
- package/dist/astro.js +4 -1
- package/dist/astro.js.map +1 -1
- package/dist/badge/badge-group.component.d.ts +13 -0
- package/dist/badge/badge-group.component.js +62 -0
- package/dist/badge/badge-group.stories.d.ts +41 -0
- package/dist/badge/badge-group.stories.js +62 -0
- package/dist/badge/index.d.ts +1 -0
- package/dist/badge/index.js +1 -0
- package/dist/button-bar/button-bar-item.d.ts +3 -0
- package/dist/button-bar/button-bar-item.js +12 -1
- package/dist/button-bar/button-bar.d.ts +9 -0
- package/dist/button-bar/button-bar.js +53 -2
- package/dist/button-bar/index.stories.js +2 -2
- package/dist/button-bar/index.utils.d.ts +6 -0
- package/dist/button-bar/index.utils.js +31 -0
- package/dist/button-bar/index.utils.test.d.ts +1 -0
- package/dist/button-bar/index.utils.test.js +53 -0
- package/dist/button-group/button-group.js +1 -2
- package/dist/dialog/dialog-actions.js +11 -10
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/meta/index.js +6 -0
- package/dist/meta/index.js.map +1 -1
- package/dist/meta.json +110 -5
- package/dist/quantic-components.js +266 -15
- package/dist/quantic-components.js.map +1 -1
- package/dist/quantic-components.min.js +163 -109
- package/dist/quantic-components.min.js.map +1 -1
- package/dist/register.js.map +1 -1
- package/dist/tag/index.d.ts +1 -0
- package/dist/tag/index.js +1 -0
- package/dist/tag/tag-group.component.d.ts +13 -0
- package/dist/tag/tag-group.component.js +62 -0
- package/dist/tag/tag-group.stories.d.ts +34 -0
- package/dist/tag/tag-group.stories.js +65 -0
- package/dist/types/action-group/action-group.component.d.ts +13 -0
- package/dist/types/action-group/index.d.ts +1 -0
- package/dist/types/action-group/index.stories.d.ts +25 -0
- package/dist/types/astro.d.ts +4 -1
- package/dist/types/badge/badge-group.component.d.ts +13 -0
- package/dist/types/badge/badge-group.stories.d.ts +41 -0
- package/dist/types/badge/index.d.ts +1 -0
- package/dist/types/button-bar/button-bar-item.d.ts +3 -0
- package/dist/types/button-bar/button-bar.d.ts +9 -0
- package/dist/types/button-bar/index.utils.d.ts +6 -0
- package/dist/types/button-bar/index.utils.test.d.ts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/tag/index.d.ts +1 -0
- package/dist/types/tag/tag-group.component.d.ts +13 -0
- package/dist/types/tag/tag-group.stories.d.ts +34 -0
- package/package.json +4 -3
package/dist/meta.json
CHANGED
|
@@ -1,7 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"generated": "2026-08-27T20:
|
|
3
|
+
"generated": "2026-08-27T20:51:41.571Z",
|
|
4
4
|
"components": [
|
|
5
|
+
{
|
|
6
|
+
"tag": "quantic-action-group",
|
|
7
|
+
"description": "A row of related actions sharing one accessible name and a consistent gap. Takes quantic-button, and quantic-dropdown-menu or quantic-popover when the trigger is a button. Wraps when the row runs out of width. Gap: --quantic-component-action-group-gap. Use quantic-button-bar when the buttons should read as one joined control.",
|
|
8
|
+
"category": "action",
|
|
9
|
+
"props": [
|
|
10
|
+
{
|
|
11
|
+
"name": "ariaLabel",
|
|
12
|
+
"description": "Accessible name for the group.",
|
|
13
|
+
"type": "string"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"slots": [
|
|
17
|
+
{
|
|
18
|
+
"name": "",
|
|
19
|
+
"description": "quantic-button elements, or a quantic-dropdown-menu or quantic-popover triggered by one."
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"examples": [
|
|
23
|
+
"<quantic-action-group ><quantic-button variant=\"outline\">Cancel</quantic-button><quantic-button variant=\"primary\">Save</quantic-button></quantic-action-group>",
|
|
24
|
+
"<quantic-action-group aria-label=\"Asset actions\">\n <quantic-button variant=\"ghost\" size=\"sm\">\n <quantic-icon-lucide-copy size=\"xs\"></quantic-icon-lucide-copy>\n </quantic-button>\n <quantic-button variant=\"ghost\" size=\"sm\">\n <quantic-icon-lucide-download size=\"xs\"></quantic-icon-lucide-download>\n </quantic-button>\n </quantic-action-group>",
|
|
25
|
+
"<quantic-dialog open>\n <quantic-dialog-title slot=\"header\">Confirm action</quantic-dialog-title>\n <p>Are you sure you want to perform this action? This cannot be undone.</p>\n <quantic-dialog-actions slot=\"footer\">\n <quantic-button variant=\"outline\">Cancel</quantic-button>\n <quantic-button variant=\"primary\">Confirm</quantic-button>\n </quantic-dialog-actions>\n </quantic-dialog>",
|
|
26
|
+
"<quantic-action-group ><quantic-button variant=\"outline\">Delete</quantic-button><quantic-button variant=\"outline\">Duplicate</quantic-button><quantic-button variant=\"primary\">Publish</quantic-button></quantic-action-group>",
|
|
27
|
+
"<quantic-action-group aria-label=\"Record actions\"><quantic-button variant=\"outline\">Cancel</quantic-button><quantic-button variant=\"primary\">Save</quantic-button></quantic-action-group>"
|
|
28
|
+
],
|
|
29
|
+
"relatedTo": [
|
|
30
|
+
"quantic-button",
|
|
31
|
+
"quantic-button-bar",
|
|
32
|
+
"quantic-dialog-actions"
|
|
33
|
+
],
|
|
34
|
+
"subComponents": [
|
|
35
|
+
"quantic-button",
|
|
36
|
+
"quantic-dropdown-menu",
|
|
37
|
+
"quantic-popover"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
5
40
|
{
|
|
6
41
|
"tag": "quantic-alert",
|
|
7
42
|
"description": "Inline alert banner with severity styles and optional dismiss action. Visibility is owned by the consumer.",
|
|
@@ -146,6 +181,38 @@
|
|
|
146
181
|
"quantic-status-badge"
|
|
147
182
|
]
|
|
148
183
|
},
|
|
184
|
+
{
|
|
185
|
+
"tag": "quantic-badge-group",
|
|
186
|
+
"description": "A run of quantic-badge or quantic-status-badge sharing one accessible name and a consistent gap. Wraps across lines, and each badge keeps its own size. Gap: --quantic-component-badge-group-gap. Use quantic-tag-group for tags.",
|
|
187
|
+
"category": "display",
|
|
188
|
+
"props": [
|
|
189
|
+
{
|
|
190
|
+
"name": "ariaLabel",
|
|
191
|
+
"description": "Accessible name for the group.",
|
|
192
|
+
"type": "string"
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
"slots": [
|
|
196
|
+
{
|
|
197
|
+
"name": "",
|
|
198
|
+
"description": "quantic-badge or quantic-status-badge elements."
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
"examples": [
|
|
202
|
+
"<quantic-badge-group ><quantic-badge color=\"gray\" size=\"sm\">Backgrounds</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Email signatures</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Headers</quantic-badge></quantic-badge-group>",
|
|
203
|
+
"<quantic-badge-group aria-label=\"Service status\">\n <quantic-status-badge color=\"success\" size=\"sm\">Running</quantic-status-badge>\n <quantic-status-badge color=\"warning\" size=\"sm\">Degraded</quantic-status-badge>\n <quantic-status-badge color=\"error\" size=\"sm\">Offline</quantic-status-badge>\n </quantic-badge-group>",
|
|
204
|
+
"<quantic-badge-group aria-label=\"Asset types\"><quantic-badge color=\"gray\" size=\"sm\">Backgrounds</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Email signatures</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Headers</quantic-badge></quantic-badge-group>",
|
|
205
|
+
"<quantic-badge-group ><quantic-badge color=\"gray\" size=\"sm\">Backgrounds</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Email signatures</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Headers</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Social graphics</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Slide templates</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Press kits</quantic-badge><quantic-badge color=\"gray\" size=\"sm\">Advisory cards</quantic-badge></quantic-badge-group>"
|
|
206
|
+
],
|
|
207
|
+
"relatedTo": [
|
|
208
|
+
"quantic-badge",
|
|
209
|
+
"quantic-tag-group"
|
|
210
|
+
],
|
|
211
|
+
"subComponents": [
|
|
212
|
+
"quantic-badge",
|
|
213
|
+
"quantic-status-badge"
|
|
214
|
+
]
|
|
215
|
+
},
|
|
149
216
|
{
|
|
150
217
|
"tag": "quantic-button",
|
|
151
218
|
"description": "Clickable action trigger for form submission, primary CTAs, and secondary actions. Supports icon-only mode and polymorphic rendering as an <a> or <span>. Prefer over quantic-icon-label when the element needs to be interactive.",
|
|
@@ -285,7 +352,7 @@
|
|
|
285
352
|
},
|
|
286
353
|
{
|
|
287
354
|
"tag": "quantic-button-bar",
|
|
288
|
-
"description": "Toolbar of related buttons joined into one cohesive control, with shared sizing. Use for switching between views or modes, and for a compact run of icon actions. Items carry aria-pressed via active, so a set can behave as exclusive options or as independent toggles. Prefer quantic-button for a standalone action, and quantic-tabs when each segment reveals a panel.",
|
|
355
|
+
"description": "Toolbar of related buttons joined into one cohesive control, with shared sizing. Use for switching between views or modes, and for a compact run of icon actions. Items carry aria-pressed via active, so a set can behave as exclusive options or as independent toggles. Focus follows the toolbar pattern: one tab stop, arrow keys move between items, Home and End jump to the ends. Prefer quantic-button for a standalone action, and quantic-tabs when each segment reveals a panel.",
|
|
289
356
|
"category": "action",
|
|
290
357
|
"props": [
|
|
291
358
|
{
|
|
@@ -362,7 +429,7 @@
|
|
|
362
429
|
},
|
|
363
430
|
{
|
|
364
431
|
"tag": "quantic-button-group",
|
|
365
|
-
"description": "Deprecated alias of quantic-button-bar.
|
|
432
|
+
"description": "Deprecated alias of quantic-button-bar. Use quantic-button-bar.",
|
|
366
433
|
"category": "action",
|
|
367
434
|
"deprecated": {
|
|
368
435
|
"use": "quantic-button-bar",
|
|
@@ -1655,7 +1722,7 @@
|
|
|
1655
1722
|
},
|
|
1656
1723
|
{
|
|
1657
1724
|
"tag": "quantic-dialog-actions",
|
|
1658
|
-
"description": "Footer actions bar
|
|
1725
|
+
"description": "Footer actions bar for quantic-dialog. Lays action buttons out as a quantic-action-group, flush to the right.",
|
|
1659
1726
|
"category": "feedback",
|
|
1660
1727
|
"slots": [
|
|
1661
1728
|
{
|
|
@@ -1665,7 +1732,11 @@
|
|
|
1665
1732
|
],
|
|
1666
1733
|
"relatedTo": [
|
|
1667
1734
|
"quantic-dialog",
|
|
1668
|
-
"quantic-button"
|
|
1735
|
+
"quantic-button",
|
|
1736
|
+
"quantic-action-group"
|
|
1737
|
+
],
|
|
1738
|
+
"subComponents": [
|
|
1739
|
+
"quantic-action-group"
|
|
1669
1740
|
]
|
|
1670
1741
|
},
|
|
1671
1742
|
{
|
|
@@ -4701,6 +4772,40 @@
|
|
|
4701
4772
|
"quantic-badge"
|
|
4702
4773
|
]
|
|
4703
4774
|
},
|
|
4775
|
+
{
|
|
4776
|
+
"tag": "quantic-tag-group",
|
|
4777
|
+
"description": "A run of quantic-tag, quantic-status-tag or quantic-count-tag sharing one accessible name and a consistent gap. Wraps across lines, and each tag keeps its own size. Gap: --quantic-component-tag-group-gap. Use quantic-badge-group for badges.",
|
|
4778
|
+
"category": "display",
|
|
4779
|
+
"props": [
|
|
4780
|
+
{
|
|
4781
|
+
"name": "ariaLabel",
|
|
4782
|
+
"description": "Accessible name for the group.",
|
|
4783
|
+
"type": "string"
|
|
4784
|
+
}
|
|
4785
|
+
],
|
|
4786
|
+
"slots": [
|
|
4787
|
+
{
|
|
4788
|
+
"name": "",
|
|
4789
|
+
"description": "quantic-tag, quantic-status-tag or quantic-count-tag elements."
|
|
4790
|
+
}
|
|
4791
|
+
],
|
|
4792
|
+
"examples": [
|
|
4793
|
+
"<quantic-tag-group ><quantic-tag size=\"md\">Compute</quantic-tag><quantic-tag size=\"md\">Storage</quantic-tag><quantic-tag size=\"md\">Networking</quantic-tag></quantic-tag-group>",
|
|
4794
|
+
"<quantic-tag-group aria-label=\"Applied filters\">\n <quantic-tag dismissible>Compute</quantic-tag>\n <quantic-tag dismissible>Storage</quantic-tag>\n <quantic-tag dismissible>Networking</quantic-tag>\n </quantic-tag-group>",
|
|
4795
|
+
"<quantic-tag-group aria-label=\"Cluster state\">\n <quantic-tag>Compute</quantic-tag>\n <quantic-status-tag color=\"success\">Healthy</quantic-status-tag>\n <quantic-count-tag count=\"12\">Nodes</quantic-count-tag>\n </quantic-tag-group>",
|
|
4796
|
+
"<quantic-tag-group aria-label=\"Cluster capabilities\"><quantic-tag size=\"md\">Compute</quantic-tag><quantic-tag size=\"md\">Storage</quantic-tag><quantic-tag size=\"md\">Networking</quantic-tag></quantic-tag-group>",
|
|
4797
|
+
"<quantic-tag-group ><quantic-tag size=\"md\">Compute</quantic-tag><quantic-tag size=\"md\">Storage</quantic-tag><quantic-tag size=\"md\">Networking</quantic-tag><quantic-tag size=\"md\">Scheduling</quantic-tag><quantic-tag size=\"md\">Monitoring</quantic-tag><quantic-tag size=\"md\">Provisioning</quantic-tag><quantic-tag size=\"md\">Authentication</quantic-tag><quantic-tag size=\"md\">Observability</quantic-tag></quantic-tag-group>"
|
|
4798
|
+
],
|
|
4799
|
+
"relatedTo": [
|
|
4800
|
+
"quantic-tag",
|
|
4801
|
+
"quantic-badge-group"
|
|
4802
|
+
],
|
|
4803
|
+
"subComponents": [
|
|
4804
|
+
"quantic-tag",
|
|
4805
|
+
"quantic-status-tag",
|
|
4806
|
+
"quantic-count-tag"
|
|
4807
|
+
]
|
|
4808
|
+
},
|
|
4704
4809
|
{
|
|
4705
4810
|
"tag": "quantic-text",
|
|
4706
4811
|
"description": "Typography component for rendering text with consistent sizing, weight, and color tokens. Renders any HTML element via the `as` prop for semantic correctness.",
|
|
@@ -5754,6 +5754,59 @@
|
|
|
5754
5754
|
quanticElement('quantic-status-badge')
|
|
5755
5755
|
], exports.StatusBadge);
|
|
5756
5756
|
|
|
5757
|
+
exports.BadgeGroup = class BadgeGroup extends QuanticElement {
|
|
5758
|
+
constructor() {
|
|
5759
|
+
super(...arguments);
|
|
5760
|
+
this.ariaLabel = null;
|
|
5761
|
+
}
|
|
5762
|
+
render() {
|
|
5763
|
+
return b `
|
|
5764
|
+
<div class="group" role="group" aria-label=${this.ariaLabel ?? 'Badges'}>
|
|
5765
|
+
<slot></slot>
|
|
5766
|
+
</div>
|
|
5767
|
+
`;
|
|
5768
|
+
}
|
|
5769
|
+
};
|
|
5770
|
+
exports.BadgeGroup.meta = {
|
|
5771
|
+
tag: 'quantic-badge-group',
|
|
5772
|
+
description: 'A run of quantic-badge or quantic-status-badge sharing one accessible name and a consistent gap. ' +
|
|
5773
|
+
'Wraps across lines, and each badge keeps its own size. Gap: --quantic-component-badge-group-gap. ' +
|
|
5774
|
+
'Use quantic-tag-group for tags.',
|
|
5775
|
+
category: 'display',
|
|
5776
|
+
slots: {
|
|
5777
|
+
'': {
|
|
5778
|
+
description: 'quantic-badge or quantic-status-badge elements.',
|
|
5779
|
+
},
|
|
5780
|
+
},
|
|
5781
|
+
subComponents: ['quantic-badge', 'quantic-status-badge'],
|
|
5782
|
+
relatedTo: ['quantic-badge', 'quantic-tag-group'],
|
|
5783
|
+
};
|
|
5784
|
+
exports.BadgeGroup.styles = i$7 `
|
|
5785
|
+
:host {
|
|
5786
|
+
display: block;
|
|
5787
|
+
}
|
|
5788
|
+
|
|
5789
|
+
.group {
|
|
5790
|
+
display: flex;
|
|
5791
|
+
flex-wrap: wrap;
|
|
5792
|
+
align-items: center;
|
|
5793
|
+
gap: var(
|
|
5794
|
+
--quantic-component-badge-group-gap,
|
|
5795
|
+
var(--quantic-spacing-1)
|
|
5796
|
+
);
|
|
5797
|
+
}
|
|
5798
|
+
`;
|
|
5799
|
+
__decorate([
|
|
5800
|
+
prop({
|
|
5801
|
+
type: 'string',
|
|
5802
|
+
attribute: 'aria-label',
|
|
5803
|
+
description: 'Accessible name for the group.',
|
|
5804
|
+
})
|
|
5805
|
+
], exports.BadgeGroup.prototype, "ariaLabel", void 0);
|
|
5806
|
+
exports.BadgeGroup = __decorate([
|
|
5807
|
+
quanticElement('quantic-badge-group')
|
|
5808
|
+
], exports.BadgeGroup);
|
|
5809
|
+
|
|
5757
5810
|
const CapacityBarSize = {
|
|
5758
5811
|
ExtraSmall: 'xs',
|
|
5759
5812
|
Small: 'sm',
|
|
@@ -5943,6 +5996,60 @@
|
|
|
5943
5996
|
quanticElement('quantic-capacity-bar')
|
|
5944
5997
|
], exports.CapacityBar);
|
|
5945
5998
|
|
|
5999
|
+
exports.ActionGroup = class ActionGroup extends QuanticElement {
|
|
6000
|
+
constructor() {
|
|
6001
|
+
super(...arguments);
|
|
6002
|
+
this.ariaLabel = null;
|
|
6003
|
+
}
|
|
6004
|
+
render() {
|
|
6005
|
+
return b `
|
|
6006
|
+
<div class="group" role="group" aria-label=${this.ariaLabel ?? 'Actions'}>
|
|
6007
|
+
<slot></slot>
|
|
6008
|
+
</div>
|
|
6009
|
+
`;
|
|
6010
|
+
}
|
|
6011
|
+
};
|
|
6012
|
+
exports.ActionGroup.meta = {
|
|
6013
|
+
tag: 'quantic-action-group',
|
|
6014
|
+
description: 'A row of related actions sharing one accessible name and a consistent gap. ' +
|
|
6015
|
+
'Takes quantic-button, and quantic-dropdown-menu or quantic-popover when the trigger is a button. ' +
|
|
6016
|
+
'Wraps when the row runs out of width. Gap: --quantic-component-action-group-gap. ' +
|
|
6017
|
+
'Use quantic-button-bar when the buttons should read as one joined control.',
|
|
6018
|
+
category: 'action',
|
|
6019
|
+
slots: {
|
|
6020
|
+
'': {
|
|
6021
|
+
description: 'quantic-button elements, or a quantic-dropdown-menu or quantic-popover triggered by one.',
|
|
6022
|
+
},
|
|
6023
|
+
},
|
|
6024
|
+
subComponents: ['quantic-button', 'quantic-dropdown-menu', 'quantic-popover'],
|
|
6025
|
+
relatedTo: ['quantic-button', 'quantic-button-bar', 'quantic-dialog-actions'],
|
|
6026
|
+
};
|
|
6027
|
+
exports.ActionGroup.styles = i$7 `
|
|
6028
|
+
:host {
|
|
6029
|
+
display: block;
|
|
6030
|
+
}
|
|
6031
|
+
|
|
6032
|
+
.group {
|
|
6033
|
+
display: flex;
|
|
6034
|
+
flex-wrap: wrap;
|
|
6035
|
+
align-items: center;
|
|
6036
|
+
gap: var(
|
|
6037
|
+
--quantic-component-action-group-gap,
|
|
6038
|
+
var(--quantic-spacing-3)
|
|
6039
|
+
);
|
|
6040
|
+
}
|
|
6041
|
+
`;
|
|
6042
|
+
__decorate([
|
|
6043
|
+
prop({
|
|
6044
|
+
type: 'string',
|
|
6045
|
+
attribute: 'aria-label',
|
|
6046
|
+
description: 'Accessible name for the group.',
|
|
6047
|
+
})
|
|
6048
|
+
], exports.ActionGroup.prototype, "ariaLabel", void 0);
|
|
6049
|
+
exports.ActionGroup = __decorate([
|
|
6050
|
+
quanticElement('quantic-action-group')
|
|
6051
|
+
], exports.ActionGroup);
|
|
6052
|
+
|
|
5946
6053
|
/**
|
|
5947
6054
|
* @license
|
|
5948
6055
|
* Copyright 2021 Google LLC
|
|
@@ -5996,21 +6103,102 @@
|
|
|
5996
6103
|
|
|
5997
6104
|
const sizeContext$2 = n$1('button-bar.size');
|
|
5998
6105
|
|
|
6106
|
+
const KEY_STEPS = {
|
|
6107
|
+
ArrowRight: 1,
|
|
6108
|
+
ArrowDown: 1,
|
|
6109
|
+
ArrowLeft: -1,
|
|
6110
|
+
ArrowUp: -1,
|
|
6111
|
+
Home: 'first',
|
|
6112
|
+
End: 'last',
|
|
6113
|
+
};
|
|
6114
|
+
function resolveFocusStop(items, hasSynced) {
|
|
6115
|
+
if (!items.length)
|
|
6116
|
+
return null;
|
|
6117
|
+
if (hasSynced) {
|
|
6118
|
+
const tabbable = items.findIndex((item) => item.tabbable);
|
|
6119
|
+
if (tabbable !== -1)
|
|
6120
|
+
return tabbable;
|
|
6121
|
+
}
|
|
6122
|
+
const active = items.findIndex((item) => item.active);
|
|
6123
|
+
return active === -1 ? 0 : active;
|
|
6124
|
+
}
|
|
6125
|
+
function nextFocusIndex(key, current, count) {
|
|
6126
|
+
const step = KEY_STEPS[key];
|
|
6127
|
+
if (step === undefined)
|
|
6128
|
+
return null;
|
|
6129
|
+
if (count < 2 || current < 0 || current >= count)
|
|
6130
|
+
return null;
|
|
6131
|
+
if (step === 'first')
|
|
6132
|
+
return 0;
|
|
6133
|
+
if (step === 'last')
|
|
6134
|
+
return count - 1;
|
|
6135
|
+
return (current + step + count) % count;
|
|
6136
|
+
}
|
|
6137
|
+
|
|
6138
|
+
const ITEM_TAGS = 'quantic-button-bar-item, quantic-button-group-item';
|
|
5999
6139
|
exports.ButtonBar = class ButtonBar extends QuanticElement {
|
|
6000
6140
|
constructor() {
|
|
6001
6141
|
super(...arguments);
|
|
6002
6142
|
this.size = ButtonBarSize.Medium;
|
|
6003
6143
|
this.ariaLabel = null;
|
|
6144
|
+
this.hasSynced = false;
|
|
6004
6145
|
this.defaultLabel = 'Button bar';
|
|
6005
6146
|
}
|
|
6147
|
+
connectedCallback() {
|
|
6148
|
+
super.connectedCallback();
|
|
6149
|
+
this.disabledObserver = new MutationObserver(() => this.syncFocusStop());
|
|
6150
|
+
this.disabledObserver.observe(this, {
|
|
6151
|
+
attributeFilter: ['disabled'],
|
|
6152
|
+
subtree: true,
|
|
6153
|
+
});
|
|
6154
|
+
}
|
|
6155
|
+
disconnectedCallback() {
|
|
6156
|
+
super.disconnectedCallback();
|
|
6157
|
+
this.disabledObserver?.disconnect();
|
|
6158
|
+
this.disabledObserver = undefined;
|
|
6159
|
+
}
|
|
6160
|
+
get items() {
|
|
6161
|
+
return [...this.querySelectorAll(ITEM_TAGS)].filter((item) => item.parentElement === this && !item.disabled);
|
|
6162
|
+
}
|
|
6163
|
+
setFocusStop(items, index) {
|
|
6164
|
+
items.forEach((item, position) => {
|
|
6165
|
+
item.tabbable = position === index;
|
|
6166
|
+
});
|
|
6167
|
+
}
|
|
6168
|
+
syncFocusStop() {
|
|
6169
|
+
const items = this.items;
|
|
6170
|
+
const stop = resolveFocusStop(items, this.hasSynced);
|
|
6171
|
+
if (stop === null)
|
|
6172
|
+
return;
|
|
6173
|
+
this.hasSynced = true;
|
|
6174
|
+
this.setFocusStop(items, stop);
|
|
6175
|
+
}
|
|
6176
|
+
handleFocusIn(event) {
|
|
6177
|
+
const items = this.items;
|
|
6178
|
+
const focused = items.findIndex((item) => item.contains(event.target));
|
|
6179
|
+
if (focused !== -1)
|
|
6180
|
+
this.setFocusStop(items, focused);
|
|
6181
|
+
}
|
|
6182
|
+
handleKeydown(event) {
|
|
6183
|
+
const items = this.items;
|
|
6184
|
+
const current = items.findIndex((item) => item.contains(event.target));
|
|
6185
|
+
const next = nextFocusIndex(event.key, current, items.length);
|
|
6186
|
+
if (next === null)
|
|
6187
|
+
return;
|
|
6188
|
+
event.preventDefault();
|
|
6189
|
+
this.setFocusStop(items, next);
|
|
6190
|
+
items[next].focus();
|
|
6191
|
+
}
|
|
6006
6192
|
render() {
|
|
6007
6193
|
return b `
|
|
6008
6194
|
<div
|
|
6009
6195
|
class="container"
|
|
6010
6196
|
role="toolbar"
|
|
6011
|
-
aria-label=${this.ariaLabel
|
|
6197
|
+
aria-label=${this.ariaLabel ?? this.defaultLabel}
|
|
6198
|
+
@keydown=${this.handleKeydown}
|
|
6199
|
+
@focusin=${this.handleFocusIn}
|
|
6012
6200
|
>
|
|
6013
|
-
<slot></slot>
|
|
6201
|
+
<slot @slotchange=${() => this.syncFocusStop()}></slot>
|
|
6014
6202
|
</div>
|
|
6015
6203
|
`;
|
|
6016
6204
|
}
|
|
@@ -6020,6 +6208,7 @@
|
|
|
6020
6208
|
description: 'Toolbar of related buttons joined into one cohesive control, with shared sizing. ' +
|
|
6021
6209
|
'Use for switching between views or modes, and for a compact run of icon actions. ' +
|
|
6022
6210
|
'Items carry aria-pressed via active, so a set can behave as exclusive options or as independent toggles. ' +
|
|
6211
|
+
'Focus follows the toolbar pattern: one tab stop, arrow keys move between items, Home and End jump to the ends. ' +
|
|
6023
6212
|
'Prefer quantic-button for a standalone action, and quantic-tabs when each segment reveals a panel.',
|
|
6024
6213
|
category: 'action',
|
|
6025
6214
|
slots: { '': { description: 'One or more quantic-button-bar-item elements.' } },
|
|
@@ -6075,8 +6264,7 @@
|
|
|
6075
6264
|
exports.ButtonGroup.meta = {
|
|
6076
6265
|
...exports.ButtonBar.meta,
|
|
6077
6266
|
tag: 'quantic-button-group',
|
|
6078
|
-
description: 'Deprecated alias of quantic-button-bar.
|
|
6079
|
-
'it joins borders and gives its items a pressed state. Use quantic-button-bar.',
|
|
6267
|
+
description: 'Deprecated alias of quantic-button-bar. Use quantic-button-bar.',
|
|
6080
6268
|
deprecated: {
|
|
6081
6269
|
use: 'quantic-button-bar',
|
|
6082
6270
|
reason: 'The name describes a row of buttons, which this is not. Use quantic-action-group for that.',
|
|
@@ -6091,9 +6279,13 @@
|
|
|
6091
6279
|
exports.ButtonBarItem = class ButtonBarItem extends QuanticElement {
|
|
6092
6280
|
constructor() {
|
|
6093
6281
|
super(...arguments);
|
|
6282
|
+
this.tabbable = true;
|
|
6094
6283
|
this.disabled = false;
|
|
6095
6284
|
this.active = false;
|
|
6096
6285
|
}
|
|
6286
|
+
focus(options) {
|
|
6287
|
+
this.innerButton?.focus(options);
|
|
6288
|
+
}
|
|
6097
6289
|
render() {
|
|
6098
6290
|
const classes = e$3({
|
|
6099
6291
|
main: true,
|
|
@@ -6104,7 +6296,7 @@
|
|
|
6104
6296
|
<button
|
|
6105
6297
|
type="button"
|
|
6106
6298
|
class=${classes}
|
|
6107
|
-
tabindex=${this.disabled ? -1 : 0}
|
|
6299
|
+
tabindex=${this.disabled || !this.tabbable ? -1 : 0}
|
|
6108
6300
|
?disabled=${this.disabled}
|
|
6109
6301
|
aria-pressed=${this.active ? 'true' : 'false'}
|
|
6110
6302
|
>
|
|
@@ -6247,6 +6439,12 @@
|
|
|
6247
6439
|
__decorate([
|
|
6248
6440
|
c({ context: sizeContext$2, subscribe: true })
|
|
6249
6441
|
], exports.ButtonBarItem.prototype, "size", void 0);
|
|
6442
|
+
__decorate([
|
|
6443
|
+
r$2()
|
|
6444
|
+
], exports.ButtonBarItem.prototype, "tabbable", void 0);
|
|
6445
|
+
__decorate([
|
|
6446
|
+
e$5('button')
|
|
6447
|
+
], exports.ButtonBarItem.prototype, "innerButton", void 0);
|
|
6250
6448
|
__decorate([
|
|
6251
6449
|
prop({
|
|
6252
6450
|
type: 'boolean',
|
|
@@ -8722,33 +8920,33 @@
|
|
|
8722
8920
|
quanticElement('quantic-dialog-title')
|
|
8723
8921
|
], exports.DialogTitle);
|
|
8724
8922
|
|
|
8923
|
+
exports.ActionGroup.ensureDefined();
|
|
8725
8924
|
exports.DialogActions = class DialogActions extends QuanticElement {
|
|
8726
8925
|
render() {
|
|
8727
8926
|
return u$2 `
|
|
8728
|
-
<
|
|
8927
|
+
<quantic-action-group aria-label="">
|
|
8729
8928
|
<slot></slot>
|
|
8730
|
-
</
|
|
8929
|
+
</quantic-action-group>
|
|
8731
8930
|
`;
|
|
8732
8931
|
}
|
|
8733
8932
|
};
|
|
8734
8933
|
exports.DialogActions.meta = {
|
|
8735
8934
|
tag: 'quantic-dialog-actions',
|
|
8736
|
-
description: 'Footer actions bar
|
|
8737
|
-
'Lays
|
|
8935
|
+
description: 'Footer actions bar for quantic-dialog. ' +
|
|
8936
|
+
'Lays action buttons out as a quantic-action-group, flush to the right.',
|
|
8738
8937
|
category: 'feedback',
|
|
8739
8938
|
slots: { '': { description: 'Action buttons, typically quantic-button elements.' } },
|
|
8740
|
-
|
|
8939
|
+
subComponents: ['quantic-action-group'],
|
|
8940
|
+
relatedTo: ['quantic-dialog', 'quantic-button', 'quantic-action-group'],
|
|
8741
8941
|
};
|
|
8742
8942
|
exports.DialogActions.styles = i$7 `
|
|
8743
8943
|
:host {
|
|
8744
8944
|
display: block;
|
|
8745
8945
|
}
|
|
8746
8946
|
|
|
8747
|
-
|
|
8748
|
-
|
|
8749
|
-
|
|
8750
|
-
justify-content: flex-end;
|
|
8751
|
-
gap: var(--quantic-spacing-3);
|
|
8947
|
+
quantic-action-group {
|
|
8948
|
+
width: fit-content;
|
|
8949
|
+
margin-inline-start: auto;
|
|
8752
8950
|
}
|
|
8753
8951
|
`;
|
|
8754
8952
|
exports.DialogActions = __decorate([
|
|
@@ -69848,6 +70046,59 @@
|
|
|
69848
70046
|
quanticElement('quantic-count-tag')
|
|
69849
70047
|
], exports.CountTag);
|
|
69850
70048
|
|
|
70049
|
+
exports.TagGroup = class TagGroup extends QuanticElement {
|
|
70050
|
+
constructor() {
|
|
70051
|
+
super(...arguments);
|
|
70052
|
+
this.ariaLabel = null;
|
|
70053
|
+
}
|
|
70054
|
+
render() {
|
|
70055
|
+
return b `
|
|
70056
|
+
<div class="group" role="group" aria-label=${this.ariaLabel ?? 'Tags'}>
|
|
70057
|
+
<slot></slot>
|
|
70058
|
+
</div>
|
|
70059
|
+
`;
|
|
70060
|
+
}
|
|
70061
|
+
};
|
|
70062
|
+
exports.TagGroup.meta = {
|
|
70063
|
+
tag: 'quantic-tag-group',
|
|
70064
|
+
description: 'A run of quantic-tag, quantic-status-tag or quantic-count-tag sharing one accessible name and a consistent gap. ' +
|
|
70065
|
+
'Wraps across lines, and each tag keeps its own size. Gap: --quantic-component-tag-group-gap. ' +
|
|
70066
|
+
'Use quantic-badge-group for badges.',
|
|
70067
|
+
category: 'display',
|
|
70068
|
+
slots: {
|
|
70069
|
+
'': {
|
|
70070
|
+
description: 'quantic-tag, quantic-status-tag or quantic-count-tag elements.',
|
|
70071
|
+
},
|
|
70072
|
+
},
|
|
70073
|
+
subComponents: ['quantic-tag', 'quantic-status-tag', 'quantic-count-tag'],
|
|
70074
|
+
relatedTo: ['quantic-tag', 'quantic-badge-group'],
|
|
70075
|
+
};
|
|
70076
|
+
exports.TagGroup.styles = i$7 `
|
|
70077
|
+
:host {
|
|
70078
|
+
display: block;
|
|
70079
|
+
}
|
|
70080
|
+
|
|
70081
|
+
.group {
|
|
70082
|
+
display: flex;
|
|
70083
|
+
flex-wrap: wrap;
|
|
70084
|
+
align-items: center;
|
|
70085
|
+
gap: var(
|
|
70086
|
+
--quantic-component-tag-group-gap,
|
|
70087
|
+
var(--quantic-spacing-1)
|
|
70088
|
+
);
|
|
70089
|
+
}
|
|
70090
|
+
`;
|
|
70091
|
+
__decorate([
|
|
70092
|
+
prop({
|
|
70093
|
+
type: 'string',
|
|
70094
|
+
attribute: 'aria-label',
|
|
70095
|
+
description: 'Accessible name for the group.',
|
|
70096
|
+
})
|
|
70097
|
+
], exports.TagGroup.prototype, "ariaLabel", void 0);
|
|
70098
|
+
exports.TagGroup = __decorate([
|
|
70099
|
+
quanticElement('quantic-tag-group')
|
|
70100
|
+
], exports.TagGroup);
|
|
70101
|
+
|
|
69851
70102
|
const TextVariant = {
|
|
69852
70103
|
Body: 'body',
|
|
69853
70104
|
Display: 'display',
|