fluentui-svelte 0.5.0 → 0.7.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/components/app-surface/app-surface.svelte +96 -0
- package/dist/components/app-surface/app-surface.svelte.d.ts +22 -0
- package/dist/components/app-surface/docs/llms.md +73 -0
- package/dist/components/app-surface/types.d.ts +19 -0
- package/dist/components/app-surface/types.js +1 -0
- package/dist/components/app-window/app-window.d.ts +3 -0
- package/dist/components/app-window/app-window.js +3 -0
- package/dist/components/app-window/app-window.svelte +193 -0
- package/dist/components/app-window/app-window.svelte.d.ts +25 -0
- package/dist/components/app-window/docs/llms.md +119 -0
- package/dist/components/app-window/types.d.ts +66 -0
- package/dist/components/app-window/types.js +1 -0
- package/dist/components/auto-suggest-box/auto-suggest-box.svelte +47 -31
- package/dist/components/auto-suggest-box/auto-suggest-box.svelte.d.ts +2 -2
- package/dist/components/auto-suggest-box/docs/llms.md +34 -33
- package/dist/components/auto-suggest-box/option.svelte +6 -4
- package/dist/components/auto-suggest-box/types.d.ts +13 -16
- package/dist/components/avatar/avatar.svelte +4 -3
- package/dist/components/avatar/docs/llms.md +1 -1
- package/dist/components/avatar/type.d.ts +1 -1
- package/dist/components/badge/badge-icon.svelte +2 -2
- package/dist/components/badge/badge.svelte +2 -2
- package/dist/components/badge/docs/llms.md +2 -2
- package/dist/components/badge/types.d.ts +2 -2
- package/dist/components/breadcrumb/breadcrumb-button.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb-divider.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb-item.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb.svelte +10 -5
- package/dist/components/breadcrumb/docs/llms.md +11 -11
- package/dist/components/breadcrumb/types.d.ts +7 -7
- package/dist/components/button/button.svelte +2 -2
- package/dist/components/button/docs/llms.md +17 -17
- package/dist/components/button/split-button.svelte +7 -7
- package/dist/components/button/types.d.ts +5 -5
- package/dist/components/calendar-date-picker/calendar-date-picker.svelte +98 -10
- package/dist/components/calendar-date-picker/calendar-date-picker.svelte.d.ts +1 -1
- package/dist/components/calendar-date-picker/docs/llms.md +19 -14
- package/dist/components/calendar-date-picker/types.d.ts +22 -8
- package/dist/components/calendar-view/calendar-view-days.svelte +3 -2
- package/dist/components/calendar-view/calendar-view-grid.js +8 -3
- package/dist/components/calendar-view/calendar-view-item.svelte +10 -4
- package/dist/components/calendar-view/calendar-view-months.svelte +3 -2
- package/dist/components/calendar-view/calendar-view-years.svelte +3 -2
- package/dist/components/calendar-view/calendar-view.svelte +11 -4
- package/dist/components/calendar-view/calendar-view.svelte.js +5 -0
- package/dist/components/calendar-view/docs/llms.md +20 -19
- package/dist/components/calendar-view/types.d.ts +6 -1
- package/dist/components/card/card-footer.svelte +2 -2
- package/dist/components/card/card-header.svelte +5 -4
- package/dist/components/card/card-preview.svelte +13 -2
- package/dist/components/card/card.svelte +5 -5
- package/dist/components/card/docs/llms.md +22 -21
- package/dist/components/card/types.d.ts +8 -4
- package/dist/components/checkbox/checkbox.svelte +47 -26
- package/dist/components/checkbox/checkbox.svelte.d.ts +3 -24
- package/dist/components/checkbox/docs/llms.md +24 -23
- package/dist/components/checkbox/types.d.ts +10 -23
- package/dist/components/date-picker/date-picker.svelte +98 -27
- package/dist/components/date-picker/date-picker.svelte.d.ts +1 -1
- package/dist/components/date-picker/docs/llms.md +23 -20
- package/dist/components/date-picker/types.d.ts +24 -15
- package/dist/components/dialog/dialog-actions.svelte +17 -2
- package/dist/components/dialog/dialog-content.svelte +2 -2
- package/dist/components/dialog/dialog-content.svelte.d.ts +1 -1
- package/dist/components/dialog/dialog-surface.svelte +130 -8
- package/dist/components/dialog/dialog-title.svelte +23 -6
- package/dist/components/dialog/dialog-trigger.svelte +8 -2
- package/dist/components/dialog/dialog-trigger.svelte.d.ts +1 -1
- package/dist/components/dialog/dialog.svelte +22 -11
- package/dist/components/dialog/docs/llms.md +56 -19
- package/dist/components/dialog/types.d.ts +31 -9
- package/dist/components/dialog/utils.d.ts +2 -0
- package/dist/components/dialog/utils.js +1 -0
- package/dist/components/divider/divider.svelte +6 -4
- package/dist/components/divider/types.d.ts +1 -1
- package/dist/components/dropdown/docs/llms.md +30 -28
- package/dist/components/dropdown/dropdown-option.svelte +17 -5
- package/dist/components/dropdown/dropdown.svelte +182 -84
- package/dist/components/dropdown/dropdown.svelte.d.ts +1 -1
- package/dist/components/dropdown/types.d.ts +26 -20
- package/dist/components/dropdown-select/docs/llms.md +24 -22
- package/dist/components/dropdown-select/dropdown-select-option.svelte +2 -2
- package/dist/components/dropdown-select/dropdown-select.svelte +42 -7
- package/dist/components/dropdown-select/types.d.ts +4 -4
- package/dist/components/expander/docs/llms.md +3 -3
- package/dist/components/expander/expander.svelte +13 -8
- package/dist/components/expander/types.d.ts +5 -5
- package/dist/components/flyout/docs/llms.md +1 -1
- package/dist/components/flyout/flyout.svelte +17 -6
- package/dist/components/flyout/types.d.ts +1 -1
- package/dist/components/hyperlink/docs/llms.md +6 -6
- package/dist/components/hyperlink/hyperlink.svelte +13 -4
- package/dist/components/hyperlink/types.d.ts +1 -1
- package/dist/components/info-bar/docs/llms.md +11 -10
- package/dist/components/info-bar/info-bar.svelte +3 -2
- package/dist/components/info-bar/types.d.ts +4 -0
- package/dist/components/label/docs/llms.md +75 -22
- package/dist/components/label/label-context.d.ts +14 -0
- package/dist/components/label/label-context.js +10 -0
- package/dist/components/label/label.svelte +153 -30
- package/dist/components/label/label.svelte.d.ts +1 -1
- package/dist/components/label/types.d.ts +48 -4
- package/dist/components/list-view/docs/llms.md +103 -33
- package/dist/components/list-view/list-view-item-branch.svelte +257 -0
- package/dist/components/list-view/list-view-item-branch.svelte.d.ts +4 -0
- package/dist/components/list-view/list-view-item.svelte +164 -46
- package/dist/components/list-view/list-view-item.svelte.d.ts +5 -5
- package/dist/components/list-view/list-view.svelte +73 -25
- package/dist/components/list-view/types.d.ts +71 -8
- package/dist/components/list-view/utils.d.ts +10 -0
- package/dist/components/list-view/utils.js +17 -1
- package/dist/components/menu/docs/llms.md +98 -15
- package/dist/components/menu/menu-command-bar-item.svelte +61 -0
- package/dist/components/menu/menu-command-bar-item.svelte.d.ts +14 -0
- package/dist/components/menu/menu-command-bar.svelte +218 -0
- package/dist/components/menu/menu-command-bar.svelte.d.ts +21 -0
- package/dist/components/menu/menu-group.svelte +6 -3
- package/dist/components/menu/menu-item-checkbox.svelte +5 -4
- package/dist/components/menu/menu-item-radio.svelte +5 -4
- package/dist/components/menu/menu-item-switch.svelte +5 -4
- package/dist/components/menu/menu-item.svelte +5 -5
- package/dist/components/menu/menu-item.svelte.d.ts +2 -3
- package/dist/components/menu/menu-list.svelte +10 -1
- package/dist/components/menu/menu-popover.svelte +9 -5
- package/dist/components/menu/menu-trigger.svelte +2 -1
- package/dist/components/menu/menu.svelte.js +1 -0
- package/dist/components/menu/types.d.ts +62 -7
- package/dist/components/number-box/docs/llms.md +6 -4
- package/dist/components/number-box/number-box.svelte +35 -29
- package/dist/components/number-box/number-box.svelte.d.ts +1 -1
- package/dist/components/number-box/types.d.ts +1 -1
- package/dist/components/persona/docs/llms.md +29 -25
- package/dist/components/persona/persona.svelte +8 -6
- package/dist/components/persona/types.d.ts +4 -3
- package/dist/components/progress-bar/docs/llms.md +13 -13
- package/dist/components/progress-bar/progress-bar.svelte +6 -6
- package/dist/components/progress-bar/types.d.ts +4 -4
- package/dist/components/progress-ring/docs/llms.md +14 -14
- package/dist/components/progress-ring/progress-ring.svelte +5 -5
- package/dist/components/progress-ring/types.d.ts +3 -3
- package/dist/components/radio-button/docs/llms.md +11 -8
- package/dist/components/radio-button/radio-button.svelte +38 -12
- package/dist/components/radio-button/radio-button.svelte.d.ts +1 -1
- package/dist/components/radio-button/types.d.ts +11 -8
- package/dist/components/rating/docs/llms.md +111 -0
- package/dist/components/rating/rating.svelte +247 -0
- package/dist/components/rating/rating.svelte.d.ts +19 -0
- package/dist/components/rating/types.d.ts +44 -0
- package/dist/components/rating/types.js +1 -0
- package/dist/components/side-nav/docs/llms.md +110 -0
- package/dist/components/side-nav/side-nav-branch.svelte +43 -0
- package/dist/components/side-nav/side-nav-branch.svelte.d.ts +4 -0
- package/dist/components/side-nav/side-nav-item.svelte +75 -0
- package/dist/components/side-nav/side-nav-item.svelte.d.ts +25 -0
- package/dist/components/side-nav/side-nav-list.svelte +32 -0
- package/dist/components/side-nav/side-nav-list.svelte.d.ts +7 -0
- package/dist/components/side-nav/side-nav.d.ts +2 -0
- package/dist/components/side-nav/side-nav.js +2 -0
- package/dist/components/side-nav/side-nav.svelte +355 -0
- package/dist/components/side-nav/side-nav.svelte.d.ts +24 -0
- package/dist/components/side-nav/types.d.ts +149 -0
- package/dist/components/side-nav/types.js +1 -0
- package/dist/components/skeleton/docs/llms.md +1 -1
- package/dist/components/skeleton/skeleton.svelte +2 -2
- package/dist/components/skeleton/types.d.ts +1 -1
- package/dist/components/slider/docs/llms.md +31 -28
- package/dist/components/slider/slider.svelte +126 -61
- package/dist/components/slider/slider.svelte.d.ts +1 -3
- package/dist/components/slider/types.d.ts +21 -14
- package/dist/components/tab-view/docs/llms.md +7 -7
- package/dist/components/tab-view/tab-view-tab.svelte +16 -14
- package/dist/components/tab-view/tab-view.svelte +16 -9
- package/dist/components/tab-view/types.d.ts +6 -6
- package/dist/components/table/docs/llms.md +38 -33
- package/dist/components/table/table-body.svelte +2 -2
- package/dist/components/table/table-cell-actions.svelte +8 -2
- package/dist/components/table/table-cell-layout.svelte +2 -2
- package/dist/components/table/table-cell.svelte +2 -2
- package/dist/components/table/table-header-cell.svelte +2 -2
- package/dist/components/table/table-header.svelte +2 -2
- package/dist/components/table/table-row.svelte +2 -2
- package/dist/components/table/table-selection-cell.svelte +6 -6
- package/dist/components/table/table.svelte +2 -2
- package/dist/components/table/types.d.ts +11 -11
- package/dist/components/tag/docs/llms.md +383 -0
- package/dist/components/tag/tag-group.d.ts +2 -0
- package/dist/components/tag/tag-group.js +2 -0
- package/dist/components/tag/tag-group.svelte +117 -0
- package/dist/components/tag/tag-group.svelte.d.ts +20 -0
- package/dist/components/tag/tag.svelte +459 -0
- package/dist/components/tag/tag.svelte.d.ts +19 -0
- package/dist/components/tag/types.d.ts +137 -0
- package/dist/components/tag/types.js +1 -0
- package/dist/components/tag-picker/docs/llms.md +298 -0
- package/dist/components/tag-picker/option-group.svelte +51 -0
- package/dist/components/tag-picker/option-group.svelte.d.ts +4 -0
- package/dist/components/tag-picker/option.svelte +82 -0
- package/dist/components/tag-picker/option.svelte.d.ts +4 -0
- package/dist/components/tag-picker/tag-picker.d.ts +2 -0
- package/dist/components/tag-picker/tag-picker.js +2 -0
- package/dist/components/tag-picker/tag-picker.svelte +716 -0
- package/dist/components/tag-picker/tag-picker.svelte.d.ts +21 -0
- package/dist/components/tag-picker/types.d.ts +142 -0
- package/dist/components/tag-picker/types.js +1 -0
- package/dist/components/text-box/docs/llms.md +31 -4
- package/dist/components/text-box/text-box-button.svelte +3 -3
- package/dist/components/text-box/text-box-button.svelte.d.ts +1 -1
- package/dist/components/text-box/text-box.svelte +41 -14
- package/dist/components/text-box/types.d.ts +5 -5
- package/dist/components/textarea/docs/llms.md +4 -3
- package/dist/components/textarea/textarea.svelte +14 -6
- package/dist/components/textarea/types.d.ts +2 -4
- package/dist/components/time-picker/docs/llms.md +18 -15
- package/dist/components/time-picker/time-picker.svelte +133 -33
- package/dist/components/time-picker/time-picker.svelte.d.ts +1 -1
- package/dist/components/time-picker/types.d.ts +23 -13
- package/dist/components/title-bar/docs/llms.md +382 -0
- package/dist/components/title-bar/title-bar-left-controls.svelte +215 -0
- package/dist/components/title-bar/title-bar-left-controls.svelte.d.ts +22 -0
- package/dist/components/title-bar/title-bar-right-controls.svelte +190 -0
- package/dist/components/title-bar/title-bar-right-controls.svelte.d.ts +27 -0
- package/dist/components/title-bar/title-bar.d.ts +3 -0
- package/dist/components/title-bar/title-bar.js +4 -0
- package/dist/components/title-bar/title-bar.svelte +224 -0
- package/dist/components/title-bar/title-bar.svelte.d.ts +26 -0
- package/dist/components/title-bar/types.d.ts +165 -0
- package/dist/components/title-bar/types.js +1 -0
- package/dist/components/toggle-switch/docs/llms.md +11 -9
- package/dist/components/toggle-switch/toggle-switch.svelte +23 -14
- package/dist/components/toggle-switch/toggle-switch.svelte.d.ts +1 -1
- package/dist/components/toggle-switch/types.d.ts +12 -10
- package/dist/components/tooltip/docs/llms.md +1 -1
- package/dist/components/tooltip/tooltip.svelte +5 -4
- package/dist/components/tooltip/types.d.ts +1 -1
- package/dist/components/top-nav/docs/llms.md +1 -1
- package/dist/components/top-nav/top-nav-item.svelte +2 -2
- package/dist/components/top-nav/top-nav.svelte +2 -2
- package/dist/components/top-nav/types.d.ts +2 -2
- package/dist/components/tree-view/docs/llms.md +11 -11
- package/dist/components/tree-view/tree-view-item-content.svelte +3 -3
- package/dist/components/tree-view/tree-view-item.svelte +13 -5
- package/dist/components/tree-view/tree-view.svelte +20 -5
- package/dist/components/tree-view/tree-view.svelte.d.ts +1 -1
- package/dist/components/tree-view/tree-view.svelte.js +31 -3
- package/dist/components/tree-view/types.d.ts +7 -3
- package/dist/index.d.ts +25 -0
- package/dist/index.js +32 -0
- package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte +26 -5
- package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte.d.ts +2 -0
- package/dist/internal/constants.d.ts +0 -4
- package/dist/internal/constants.js +0 -4002
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.js +1 -0
- package/dist/internal/native-field.svelte.d.ts +44 -0
- package/dist/internal/native-field.svelte.js +85 -0
- package/dist/internal/utils.d.ts +16 -2
- package/dist/internal/utils.js +25 -3
- package/dist/types/index.d.ts +3 -3
- package/package.json +51 -37
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import DismissRegular from 'fluentui-icons-svelte/DismissRegular.svelte';
|
|
3
|
+
import { RenderSoC } from '../../internal/index.js';
|
|
4
|
+
import { PREFIX } from '../../internal/constants.js';
|
|
5
|
+
import { getTagGroupContext } from './tag-group.js';
|
|
6
|
+
import type { TagProps } from './types.js';
|
|
7
|
+
|
|
8
|
+
const ID = $props.id();
|
|
9
|
+
const FALLBACK_ID = PREFIX + '-tag-' + ID;
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
appearance,
|
|
13
|
+
size,
|
|
14
|
+
shape = 'circular',
|
|
15
|
+
disabled,
|
|
16
|
+
selected = false,
|
|
17
|
+
dismissible,
|
|
18
|
+
interactive = false,
|
|
19
|
+
value = FALLBACK_ID,
|
|
20
|
+
icon,
|
|
21
|
+
media,
|
|
22
|
+
secondaryText,
|
|
23
|
+
dismissIcon = DismissRegular,
|
|
24
|
+
dismissLabel = 'Dismiss',
|
|
25
|
+
onDismiss,
|
|
26
|
+
onclick,
|
|
27
|
+
onkeydown,
|
|
28
|
+
primaryButtonAttributes,
|
|
29
|
+
dismissButtonAttributes,
|
|
30
|
+
class: classes,
|
|
31
|
+
ref = $bindable(null),
|
|
32
|
+
children,
|
|
33
|
+
...attributes
|
|
34
|
+
}: TagProps = $props();
|
|
35
|
+
|
|
36
|
+
const group = getTagGroupContext();
|
|
37
|
+
|
|
38
|
+
const _appearance = $derived(appearance ?? group?.config.appearance ?? 'filled');
|
|
39
|
+
const _size = $derived(size ?? group?.config.size ?? 'medium');
|
|
40
|
+
const _dismissible = $derived(dismissible ?? group?.config.dismissible ?? false);
|
|
41
|
+
const _disabled = $derived(!!(disabled || group?.config.disabled));
|
|
42
|
+
const _selected = $derived(interactive && group ? group.state.selectedValues.includes(value) : selected);
|
|
43
|
+
|
|
44
|
+
/** A plain tag is the dismiss button itself when it is dismissible. An interactive one holds its own buttons. */
|
|
45
|
+
const tag = $derived(interactive ? 'div' : _dismissible ? 'button' : 'span');
|
|
46
|
+
|
|
47
|
+
const primaryId = $derived(primaryButtonAttributes?.id ?? `${FALLBACK_ID}-primary`);
|
|
48
|
+
const dismissId = $derived(dismissButtonAttributes?.id ?? `${FALLBACK_ID}-dismiss`);
|
|
49
|
+
|
|
50
|
+
/** The dismiss icon names the button, unless the consumer named the tag itself. */
|
|
51
|
+
const named = $derived(!!(attributes['aria-label'] || attributes['aria-labelledby']));
|
|
52
|
+
|
|
53
|
+
const dismiss = (e: MouseEvent | KeyboardEvent) => {
|
|
54
|
+
onDismiss?.(e, value);
|
|
55
|
+
group?.methods.dismiss(e, value);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const handleClick = (e: MouseEvent) => {
|
|
59
|
+
onclick?.(e);
|
|
60
|
+
dismiss(e);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const handlePrimaryClick = (e: MouseEvent) => {
|
|
64
|
+
onclick?.(e);
|
|
65
|
+
group?.methods.select(e, value);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const handleKeydown = (e: KeyboardEvent) => {
|
|
69
|
+
onkeydown?.(e);
|
|
70
|
+
if (_dismissible && !_disabled && (e.key === 'Delete' || e.key === 'Backspace')) dismiss(e);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const rootClick = $derived(tag === 'button' ? handleClick : tag === 'span' ? onclick : undefined);
|
|
74
|
+
</script>
|
|
75
|
+
|
|
76
|
+
<!--
|
|
77
|
+
@component
|
|
78
|
+
Fluent UI Tag: A visual representation of an attribute, person or asset.
|
|
79
|
+
It can be dismissible, and with `interactive` it becomes an interaction tag that has a primary action of its own.
|
|
80
|
+
- Usage:
|
|
81
|
+
```tsx
|
|
82
|
+
<script>
|
|
83
|
+
import { Tag } from 'fluentui-svelte';
|
|
84
|
+
import { CalendarMonthRegular } from 'fluentui-icons-svelte';
|
|
85
|
+
</script>
|
|
86
|
+
|
|
87
|
+
<Tag icon={CalendarMonthRegular} dismissible onDismiss={(e, value) => remove(value)}>
|
|
88
|
+
Primary text
|
|
89
|
+
</Tag>
|
|
90
|
+
```
|
|
91
|
+
-->
|
|
92
|
+
{#snippet content()}
|
|
93
|
+
{#if media}
|
|
94
|
+
<span class="fs-tag-media"><RenderSoC SoC={media} /></span>
|
|
95
|
+
{:else if icon}
|
|
96
|
+
<span class="fs-tag-icon" aria-hidden="true"><RenderSoC SoC={icon} /></span>
|
|
97
|
+
{/if}
|
|
98
|
+
<span class="fs-tag-primary-text">{@render children?.()}</span>
|
|
99
|
+
{#if secondaryText}
|
|
100
|
+
<span class="fs-tag-secondary-text">
|
|
101
|
+
{#if typeof secondaryText === 'string'}
|
|
102
|
+
{secondaryText}
|
|
103
|
+
{:else}
|
|
104
|
+
{@render secondaryText()}
|
|
105
|
+
{/if}
|
|
106
|
+
</span>
|
|
107
|
+
{/if}
|
|
108
|
+
{/snippet}
|
|
109
|
+
|
|
110
|
+
<svelte:element
|
|
111
|
+
this={tag}
|
|
112
|
+
{...attributes}
|
|
113
|
+
bind:this={ref}
|
|
114
|
+
class={[
|
|
115
|
+
'fs-tag',
|
|
116
|
+
_size,
|
|
117
|
+
_appearance,
|
|
118
|
+
shape,
|
|
119
|
+
interactive && 'interactive',
|
|
120
|
+
_selected && 'selected',
|
|
121
|
+
_disabled && 'disabled',
|
|
122
|
+
_dismissible && 'dismissible',
|
|
123
|
+
(media || icon) && 'leading',
|
|
124
|
+
secondaryText && 'with-secondary',
|
|
125
|
+
classes
|
|
126
|
+
]}
|
|
127
|
+
type={tag === 'button' ? 'button' : undefined}
|
|
128
|
+
disabled={tag === 'button' ? _disabled : undefined}
|
|
129
|
+
onclick={rootClick}
|
|
130
|
+
onkeydown={handleKeydown}
|
|
131
|
+
>
|
|
132
|
+
{#if interactive}
|
|
133
|
+
<button
|
|
134
|
+
{...primaryButtonAttributes}
|
|
135
|
+
type="button"
|
|
136
|
+
class={['fs-tag-primary', primaryButtonAttributes?.class]}
|
|
137
|
+
id={primaryId}
|
|
138
|
+
disabled={_disabled}
|
|
139
|
+
aria-pressed={group ? _selected : undefined}
|
|
140
|
+
onclick={handlePrimaryClick}
|
|
141
|
+
>
|
|
142
|
+
{@render content()}
|
|
143
|
+
</button>
|
|
144
|
+
{#if _dismissible}
|
|
145
|
+
<button
|
|
146
|
+
{...dismissButtonAttributes}
|
|
147
|
+
type="button"
|
|
148
|
+
class={['fs-tag-dismiss', dismissButtonAttributes?.class]}
|
|
149
|
+
id={dismissId}
|
|
150
|
+
disabled={_disabled}
|
|
151
|
+
aria-label={dismissButtonAttributes?.['aria-label'] ?? dismissLabel}
|
|
152
|
+
aria-labelledby={dismissButtonAttributes?.['aria-labelledby'] ??
|
|
153
|
+
(dismissButtonAttributes?.['aria-label'] ? undefined : `${primaryId} ${dismissId}`)}
|
|
154
|
+
onclick={dismiss}
|
|
155
|
+
>
|
|
156
|
+
<RenderSoC SoC={dismissIcon} />
|
|
157
|
+
</button>
|
|
158
|
+
{/if}
|
|
159
|
+
{:else}
|
|
160
|
+
{@render content()}
|
|
161
|
+
{#if _dismissible}
|
|
162
|
+
<span
|
|
163
|
+
class="fs-tag-dismiss-icon"
|
|
164
|
+
role={named ? undefined : 'img'}
|
|
165
|
+
aria-label={named ? undefined : dismissLabel}
|
|
166
|
+
aria-hidden={named ? 'true' : undefined}
|
|
167
|
+
>
|
|
168
|
+
<RenderSoC SoC={dismissIcon} />
|
|
169
|
+
</span>
|
|
170
|
+
{/if}
|
|
171
|
+
{/if}
|
|
172
|
+
</svelte:element>
|
|
173
|
+
|
|
174
|
+
<style>
|
|
175
|
+
.fs-tag {
|
|
176
|
+
--tag-spacing: 0.4375rem;
|
|
177
|
+
--tag-icon-size: 1.25rem;
|
|
178
|
+
--tag-icon-gap: 0.25rem;
|
|
179
|
+
--tag-media-gap: 0.5rem;
|
|
180
|
+
--tag-dismiss-spacing: 0.3125rem;
|
|
181
|
+
--tag-height: 2rem;
|
|
182
|
+
--tag-font-size: var(--fs-body2-font-size);
|
|
183
|
+
--tag-line-height: var(--fs-body2-line-height);
|
|
184
|
+
--tag-radius: var(--fs-control-border-radius);
|
|
185
|
+
/* Changed from original --fs-control-fill-quaternary to --fs-control-fill-secondary */
|
|
186
|
+
--tag-bg: var(--fs-control-fill-secondary);
|
|
187
|
+
--tag-bg-hover: var(--fs-control-alt-fill-quaternary);
|
|
188
|
+
--tag-bg-pressed: var(--fs-control-alt-fill-secondary);
|
|
189
|
+
--tag-fg: var(--fs-text-primary);
|
|
190
|
+
--tag-border: var(--fs-control-stroke-default);
|
|
191
|
+
--tag-divider: var(--fs-control-stroke-secondary);
|
|
192
|
+
--tag-danger: var(--fs-system-critical);
|
|
193
|
+
--tag-danger-pressed: color-mix(in srgb, var(--fs-system-critical), black 15%);
|
|
194
|
+
|
|
195
|
+
box-sizing: border-box;
|
|
196
|
+
width: fit-content;
|
|
197
|
+
height: var(--tag-height);
|
|
198
|
+
margin: 0;
|
|
199
|
+
color: var(--tag-fg);
|
|
200
|
+
font-family: inherit;
|
|
201
|
+
font-size: var(--tag-font-size);
|
|
202
|
+
line-height: var(--tag-line-height);
|
|
203
|
+
text-align: start;
|
|
204
|
+
user-select: none;
|
|
205
|
+
border-radius: var(--tag-radius);
|
|
206
|
+
|
|
207
|
+
&.small {
|
|
208
|
+
--tag-spacing: 0.3125rem;
|
|
209
|
+
--tag-icon-size: 1rem;
|
|
210
|
+
--tag-icon-gap: 0.125rem;
|
|
211
|
+
--tag-media-gap: 0.375rem;
|
|
212
|
+
--tag-dismiss-spacing: 0.1875rem;
|
|
213
|
+
--tag-height: 1.5rem;
|
|
214
|
+
--tag-font-size: var(--fs-caption-font-size);
|
|
215
|
+
--tag-line-height: var(--fs-caption-line-height);
|
|
216
|
+
}
|
|
217
|
+
&.extra-small {
|
|
218
|
+
--tag-spacing: 0.3125rem;
|
|
219
|
+
--tag-icon-size: 0.75rem;
|
|
220
|
+
--tag-icon-gap: 0.125rem;
|
|
221
|
+
--tag-media-gap: 0.375rem;
|
|
222
|
+
--tag-height: 1.25rem;
|
|
223
|
+
--tag-font-size: var(--fs-caption-font-size);
|
|
224
|
+
--tag-line-height: var(--fs-caption-line-height);
|
|
225
|
+
}
|
|
226
|
+
&.circular {
|
|
227
|
+
--tag-radius: 9999rem;
|
|
228
|
+
}
|
|
229
|
+
&.square {
|
|
230
|
+
--tag-radius: 0;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
&.outline {
|
|
234
|
+
--tag-bg: transparent;
|
|
235
|
+
--tag-bg-hover: var(--fs-subtle-fill-secondary);
|
|
236
|
+
--tag-bg-pressed: var(--fs-subtle-fill-tertiary);
|
|
237
|
+
--tag-border: var(--fs-control-stroke-secondary);
|
|
238
|
+
}
|
|
239
|
+
&.brand {
|
|
240
|
+
--tag-bg: var(--fs-system-attention-bg);
|
|
241
|
+
--tag-bg-hover: color-mix(in srgb, var(--fs-system-attention-bg), rgb(var(--fs-accent-base)) 10%);
|
|
242
|
+
--tag-bg-pressed: color-mix(in srgb, var(--fs-system-attention-bg), rgb(var(--fs-accent-base)) 18%);
|
|
243
|
+
--tag-fg: var(--fs-accent-text-primary);
|
|
244
|
+
--tag-divider: color-mix(in srgb, rgb(var(--fs-accent-base)), transparent 70%);
|
|
245
|
+
}
|
|
246
|
+
&.selected {
|
|
247
|
+
--tag-bg: var(--fs-accent-fill-default);
|
|
248
|
+
--tag-bg-hover: var(--fs-accent-fill-secondary);
|
|
249
|
+
--tag-bg-pressed: var(--fs-accent-fill-tertiary);
|
|
250
|
+
--tag-fg: var(--fs-text-on-accent-primary);
|
|
251
|
+
--tag-border: var(--fs-accent-fill-default);
|
|
252
|
+
--tag-divider: var(--fs-control-stroke-on-accent-secondary);
|
|
253
|
+
}
|
|
254
|
+
&.disabled {
|
|
255
|
+
--tag-bg: var(--fs-control-alt-fill-secondary);
|
|
256
|
+
--tag-bg-hover: var(--fs-control-alt-fill-secondary);
|
|
257
|
+
--tag-bg-pressed: var(--fs-control-alt-fill-secondary);
|
|
258
|
+
--tag-fg: var(--fs-text-disabled);
|
|
259
|
+
--tag-border: transparent;
|
|
260
|
+
--tag-divider: var(--fs-control-stroke-default);
|
|
261
|
+
&.outline {
|
|
262
|
+
--tag-bg: transparent;
|
|
263
|
+
--tag-bg-hover: transparent;
|
|
264
|
+
--tag-bg-pressed: transparent;
|
|
265
|
+
--tag-border: var(--fs-control-stroke-default);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/* A plain tag: a single box, a button when it is dismissible. */
|
|
270
|
+
&:not(.interactive) {
|
|
271
|
+
display: inline-grid;
|
|
272
|
+
grid-template-areas:
|
|
273
|
+
'media primary dismiss'
|
|
274
|
+
'media secondary dismiss';
|
|
275
|
+
align-items: center;
|
|
276
|
+
padding: 0;
|
|
277
|
+
padding-inline: var(--tag-spacing);
|
|
278
|
+
background: var(--tag-bg);
|
|
279
|
+
border: 1px solid var(--tag-border);
|
|
280
|
+
&.leading {
|
|
281
|
+
padding-inline-start: 0;
|
|
282
|
+
}
|
|
283
|
+
&.dismissible {
|
|
284
|
+
padding-inline-end: 0;
|
|
285
|
+
}
|
|
286
|
+
&:focus-visible {
|
|
287
|
+
outline: 0.125rem solid var(--fs-focus-stroke-outer);
|
|
288
|
+
outline-offset: 0.063rem;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
&.disabled:not(.interactive) {
|
|
292
|
+
cursor: not-allowed;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/* An interaction tag: a primary button, followed by the dismiss button. */
|
|
296
|
+
&.interactive {
|
|
297
|
+
display: inline-flex;
|
|
298
|
+
align-items: center;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
& .fs-tag-primary,
|
|
302
|
+
& .fs-tag-dismiss {
|
|
303
|
+
box-sizing: border-box;
|
|
304
|
+
height: 100%;
|
|
305
|
+
margin: 0;
|
|
306
|
+
padding: 0;
|
|
307
|
+
color: inherit;
|
|
308
|
+
font: inherit;
|
|
309
|
+
background: var(--tag-bg);
|
|
310
|
+
border: 1px solid var(--tag-border);
|
|
311
|
+
cursor: pointer;
|
|
312
|
+
&:hover {
|
|
313
|
+
background: var(--tag-bg-hover);
|
|
314
|
+
}
|
|
315
|
+
&:active {
|
|
316
|
+
background: var(--tag-bg-pressed);
|
|
317
|
+
}
|
|
318
|
+
&:focus-visible {
|
|
319
|
+
position: relative;
|
|
320
|
+
z-index: 1;
|
|
321
|
+
outline: 0.125rem solid var(--fs-focus-stroke-outer);
|
|
322
|
+
outline-offset: 0.063rem;
|
|
323
|
+
}
|
|
324
|
+
&:disabled {
|
|
325
|
+
cursor: not-allowed;
|
|
326
|
+
background: var(--tag-bg);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
& .fs-tag-primary {
|
|
330
|
+
display: inline-grid;
|
|
331
|
+
grid-template-areas:
|
|
332
|
+
'media primary'
|
|
333
|
+
'media secondary';
|
|
334
|
+
align-items: center;
|
|
335
|
+
text-align: start;
|
|
336
|
+
border-radius: var(--tag-radius);
|
|
337
|
+
padding-inline: var(--tag-spacing);
|
|
338
|
+
}
|
|
339
|
+
&.leading .fs-tag-primary {
|
|
340
|
+
padding-inline-start: 0;
|
|
341
|
+
}
|
|
342
|
+
&.dismissible .fs-tag-primary {
|
|
343
|
+
border-inline-end: none;
|
|
344
|
+
border-start-end-radius: 0;
|
|
345
|
+
border-end-end-radius: 0;
|
|
346
|
+
}
|
|
347
|
+
& .fs-tag-dismiss {
|
|
348
|
+
display: flex;
|
|
349
|
+
align-items: center;
|
|
350
|
+
padding-inline: var(--tag-dismiss-spacing);
|
|
351
|
+
font-size: var(--tag-icon-size);
|
|
352
|
+
border-inline-start-color: var(--tag-divider);
|
|
353
|
+
border-start-start-radius: 0;
|
|
354
|
+
border-end-start-radius: 0;
|
|
355
|
+
border-start-end-radius: var(--tag-radius);
|
|
356
|
+
border-end-end-radius: var(--tag-radius);
|
|
357
|
+
&:hover {
|
|
358
|
+
color: var(--tag-danger);
|
|
359
|
+
}
|
|
360
|
+
&:active {
|
|
361
|
+
color: var(--tag-danger-pressed);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/* The selected hover and pressed fills are translucent: drop the opaque rim so the fill is a single colour. */
|
|
365
|
+
&.selected .fs-tag-primary,
|
|
366
|
+
&.selected .fs-tag-dismiss {
|
|
367
|
+
&:hover,
|
|
368
|
+
&:active {
|
|
369
|
+
border-color: transparent;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
&.selected .fs-tag-dismiss {
|
|
373
|
+
&:hover,
|
|
374
|
+
&:active {
|
|
375
|
+
color: var(--tag-fg);
|
|
376
|
+
border-inline-start-color: var(--tag-divider);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
&.disabled .fs-tag-dismiss:hover {
|
|
380
|
+
color: inherit;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
& .fs-tag-media,
|
|
384
|
+
& .fs-tag-icon {
|
|
385
|
+
grid-area: media;
|
|
386
|
+
display: flex;
|
|
387
|
+
align-items: center;
|
|
388
|
+
}
|
|
389
|
+
& .fs-tag-media {
|
|
390
|
+
padding-inline: 1px var(--tag-media-gap);
|
|
391
|
+
}
|
|
392
|
+
& .fs-tag-icon {
|
|
393
|
+
box-sizing: content-box;
|
|
394
|
+
width: var(--tag-icon-size);
|
|
395
|
+
padding-inline: var(--tag-spacing) var(--tag-icon-gap);
|
|
396
|
+
font-size: var(--tag-icon-size);
|
|
397
|
+
}
|
|
398
|
+
& .fs-tag-primary-text {
|
|
399
|
+
grid-area: primary;
|
|
400
|
+
grid-row: 1 / 3;
|
|
401
|
+
padding-inline: 0.125rem;
|
|
402
|
+
white-space: nowrap;
|
|
403
|
+
}
|
|
404
|
+
&.with-secondary .fs-tag-primary-text {
|
|
405
|
+
grid-row: 1;
|
|
406
|
+
margin-block-start: -0.125rem;
|
|
407
|
+
font-size: var(--fs-caption-font-size);
|
|
408
|
+
line-height: var(--fs-caption-line-height);
|
|
409
|
+
}
|
|
410
|
+
& .fs-tag-secondary-text {
|
|
411
|
+
grid-area: secondary;
|
|
412
|
+
padding-inline: 0.125rem;
|
|
413
|
+
font-size: var(--fs-caption2-font-size);
|
|
414
|
+
line-height: var(--fs-caption2-line-height);
|
|
415
|
+
white-space: nowrap;
|
|
416
|
+
}
|
|
417
|
+
& .fs-tag-dismiss-icon {
|
|
418
|
+
grid-area: dismiss;
|
|
419
|
+
display: flex;
|
|
420
|
+
align-items: center;
|
|
421
|
+
align-self: stretch;
|
|
422
|
+
padding-inline: var(--tag-icon-gap) var(--tag-spacing);
|
|
423
|
+
font-size: var(--tag-icon-size);
|
|
424
|
+
border-start-end-radius: calc(var(--tag-radius) - 1px);
|
|
425
|
+
border-end-end-radius: calc(var(--tag-radius) - 1px);
|
|
426
|
+
&:hover {
|
|
427
|
+
cursor: pointer;
|
|
428
|
+
color: var(--tag-danger);
|
|
429
|
+
}
|
|
430
|
+
&:active {
|
|
431
|
+
color: var(--tag-danger-pressed);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
&.selected .fs-tag-dismiss-icon:hover,
|
|
435
|
+
&.selected .fs-tag-dismiss-icon:active {
|
|
436
|
+
color: var(--tag-fg);
|
|
437
|
+
}
|
|
438
|
+
/* A selected tag lightens the area of the dismiss, as the dismiss button of an interactive one does. */
|
|
439
|
+
&.selected:not(.disabled) .fs-tag-dismiss-icon {
|
|
440
|
+
&:hover {
|
|
441
|
+
background: color-mix(in srgb, var(--tag-fg) 16%, transparent);
|
|
442
|
+
}
|
|
443
|
+
&:active {
|
|
444
|
+
background: color-mix(in srgb, var(--tag-fg) 33%, transparent);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
&.disabled .fs-tag-dismiss-icon {
|
|
448
|
+
&:hover {
|
|
449
|
+
cursor: not-allowed;
|
|
450
|
+
color: inherit;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
& :global(svg) {
|
|
455
|
+
width: var(--tag-icon-size);
|
|
456
|
+
height: var(--tag-icon-size);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TagProps } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Fluent UI Tag: A visual representation of an attribute, person or asset.
|
|
4
|
+
* It can be dismissible, and with `interactive` it becomes an interaction tag that has a primary action of its own.
|
|
5
|
+
* - Usage:
|
|
6
|
+
* ```tsx
|
|
7
|
+
* <script>
|
|
8
|
+
* import { Tag } from 'fluentui-svelte';
|
|
9
|
+
* import { CalendarMonthRegular } from 'fluentui-icons-svelte';
|
|
10
|
+
* </script>
|
|
11
|
+
*
|
|
12
|
+
* <Tag icon={CalendarMonthRegular} dismissible onDismiss={(e, value) => remove(value)}>
|
|
13
|
+
* Primary text
|
|
14
|
+
* </Tag>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare const Tag: import("svelte").Component<TagProps, {}, "ref">;
|
|
18
|
+
type Tag = ReturnType<typeof Tag>;
|
|
19
|
+
export default Tag;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { Component, Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes, HTMLButtonAttributes, SVGAttributes } from 'svelte/elements';
|
|
3
|
+
import type { FSContext } from '../../internal/index.js';
|
|
4
|
+
import type { PolymorphicProps, Shapes } from '../../types/index.js';
|
|
5
|
+
export type TagAppearance = 'filled' | 'outline' | 'brand';
|
|
6
|
+
export type TagSize = 'extra-small' | 'small' | 'medium';
|
|
7
|
+
/** @propsmith TagProps */
|
|
8
|
+
export type TagProps = {
|
|
9
|
+
/** The tag can have a filled, outlined or brand appearance. Falls back to the `appearance` of the `TagGroup` it is in.
|
|
10
|
+
* @default 'filled'
|
|
11
|
+
*/
|
|
12
|
+
appearance?: TagAppearance;
|
|
13
|
+
/** The tag comes in three sizes. Falls back to the `size` of the `TagGroup` it is in.
|
|
14
|
+
* @default 'medium'
|
|
15
|
+
*/
|
|
16
|
+
size?: TagSize;
|
|
17
|
+
/** The tag can have a circular, rounded or square shape.
|
|
18
|
+
* @default 'circular'
|
|
19
|
+
*/
|
|
20
|
+
shape?: Shapes;
|
|
21
|
+
/** Shows that the tag cannot be interacted with. A tag inside a disabled `TagGroup` is disabled too.
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
/** Paints the tag as selected. Inside a `TagGroup` an interactive tag takes its selected state from the `selectedValues` of the group instead.
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
selected?: boolean;
|
|
29
|
+
/** Shows a dismiss icon and lets the tag be dismissed. Falls back to the `dismissible` of the `TagGroup` it is in.
|
|
30
|
+
* A tag that is not interactive becomes a single button: activating it, or pressing Delete or Backspace on it, dismisses it.
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
dismissible?: boolean;
|
|
34
|
+
/** Renders the tag as an interaction tag: a primary button that carries the action, followed, when the tag is dismissible, by a separate dismiss button.
|
|
35
|
+
* Use it for a tag that has a primary action, and a plain tag for one that does not.
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
interactive?: boolean;
|
|
39
|
+
/** Identifies the tag inside a `TagGroup`. It is what `onDismiss` and `onTagSelect` report. Falls back to a generated id. */
|
|
40
|
+
value?: string;
|
|
41
|
+
/** An icon rendered before the text. Do not use it together with `media`.
|
|
42
|
+
* @type Snippet | Component
|
|
43
|
+
*/
|
|
44
|
+
icon?: Snippet<[SVGAttributes<SVGElement>]> | Component<SVGAttributes<SVGElement>>;
|
|
45
|
+
/** A visual element rendered before the text, usually an `Avatar`. Do not use it together with `icon`.
|
|
46
|
+
* @type Snippet | Component
|
|
47
|
+
*/
|
|
48
|
+
media?: Snippet | Component;
|
|
49
|
+
/** A second line of text that describes or complements the main text.
|
|
50
|
+
* @type string | Snippet
|
|
51
|
+
*/
|
|
52
|
+
secondaryText?: string | Snippet;
|
|
53
|
+
/** The icon of the dismiss control.
|
|
54
|
+
* @default DismissRegular
|
|
55
|
+
* @type Snippet | Component
|
|
56
|
+
*/
|
|
57
|
+
dismissIcon?: Snippet<[SVGAttributes<SVGElement>]> | Component<SVGAttributes<SVGElement>>;
|
|
58
|
+
/** The accessible name of the dismiss control. When the tag is named through `aria-label` or `aria-labelledby`
|
|
59
|
+
* instead, the dismiss icon is hidden from assistive technologies.
|
|
60
|
+
* @default 'Dismiss'
|
|
61
|
+
*/
|
|
62
|
+
dismissLabel?: string;
|
|
63
|
+
/** Called when the tag is dismissed. The consumer owns the data: the tag does not remove itself. */
|
|
64
|
+
onDismiss?: (e: MouseEvent | KeyboardEvent, value: string) => void;
|
|
65
|
+
/** Called when the tag is activated. On an interactive tag it is the click of the primary button. */
|
|
66
|
+
onclick?: (e: MouseEvent) => void;
|
|
67
|
+
/** Called when a key is pressed on the tag. */
|
|
68
|
+
onkeydown?: (e: KeyboardEvent) => void;
|
|
69
|
+
/** Attributes for the primary button of an interactive tag, for example `aria-haspopup`. If you give it
|
|
70
|
+
* a custom `id`, the dismiss button is named after it.
|
|
71
|
+
* @type HTMLButtonAttributes
|
|
72
|
+
*/
|
|
73
|
+
primaryButtonAttributes?: Omit<HTMLButtonAttributes, 'children' | 'onclick'>;
|
|
74
|
+
/** Attributes for the dismiss button of an interactive tag. Use `aria-label` together with
|
|
75
|
+
* `aria-labelledby: undefined` to give the button a name that stands on its own.
|
|
76
|
+
* @type HTMLButtonAttributes
|
|
77
|
+
*/
|
|
78
|
+
dismissButtonAttributes?: Omit<HTMLButtonAttributes, 'children' | 'onclick'>;
|
|
79
|
+
/** The primary text of the tag. */
|
|
80
|
+
children?: Snippet;
|
|
81
|
+
/** The DOM reference of the tag element.
|
|
82
|
+
* @bindable
|
|
83
|
+
*/
|
|
84
|
+
ref?: HTMLElement | null;
|
|
85
|
+
} & Omit<PolymorphicProps<'span'>, 'children' | 'onclick' | 'onkeydown'>;
|
|
86
|
+
/** @propsmith TagGroupProps */
|
|
87
|
+
export type TagGroupProps = {
|
|
88
|
+
/** The size given to the tags of the group that do not set their own.
|
|
89
|
+
* @default 'medium'
|
|
90
|
+
*/
|
|
91
|
+
size?: TagSize;
|
|
92
|
+
/** The appearance given to the tags of the group that do not set their own. */
|
|
93
|
+
appearance?: TagAppearance;
|
|
94
|
+
/** Disables every tag of the group.
|
|
95
|
+
* @default false
|
|
96
|
+
*/
|
|
97
|
+
disabled?: boolean;
|
|
98
|
+
/** Makes the tags of the group that do not set their own dismissible. */
|
|
99
|
+
dismissible?: boolean;
|
|
100
|
+
/** The values of the selected interactive tags.
|
|
101
|
+
* @default []
|
|
102
|
+
* @bindable
|
|
103
|
+
*/
|
|
104
|
+
selectedValues?: string[];
|
|
105
|
+
/** Called when an interactive tag of the group is activated, with the value it toggles. */
|
|
106
|
+
onTagSelect?: (e: MouseEvent, data: {
|
|
107
|
+
value: string;
|
|
108
|
+
selected: boolean;
|
|
109
|
+
}) => void;
|
|
110
|
+
/** Called when a tag of the group is dismissed. The consumer owns the data: the group does not remove the tag. */
|
|
111
|
+
onDismiss?: (e: MouseEvent | KeyboardEvent, data: {
|
|
112
|
+
value: string;
|
|
113
|
+
}) => void;
|
|
114
|
+
/** The role of the group. Use `list` together with `role="listitem"` on each tag when none of them is actionable.
|
|
115
|
+
* @default 'toolbar'
|
|
116
|
+
*/
|
|
117
|
+
role?: HTMLAttributes<HTMLDivElement>['role'];
|
|
118
|
+
/** The tags of the group. */
|
|
119
|
+
children?: Snippet;
|
|
120
|
+
/** The DOM reference of the group element.
|
|
121
|
+
* @bindable
|
|
122
|
+
*/
|
|
123
|
+
ref?: HTMLDivElement | null;
|
|
124
|
+
} & Omit<PolymorphicProps<'div'>, 'children' | 'role'>;
|
|
125
|
+
export type TagGroupContext = FSContext<{
|
|
126
|
+
readonly size?: TagSize;
|
|
127
|
+
readonly appearance?: TagAppearance;
|
|
128
|
+
readonly disabled?: boolean;
|
|
129
|
+
readonly dismissible?: boolean;
|
|
130
|
+
}, {
|
|
131
|
+
readonly selectedValues: string[];
|
|
132
|
+
}, null, {
|
|
133
|
+
/** Toggles the value in `selectedValues` and reports it. */
|
|
134
|
+
select: (e: MouseEvent, value: string) => void;
|
|
135
|
+
/** Reports the dismissed value. */
|
|
136
|
+
dismiss: (e: MouseEvent | KeyboardEvent, value: string) => void;
|
|
137
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|