fluentui-svelte 0.6.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 +2 -2
- package/dist/components/dialog/dialog-content.svelte +2 -2
- package/dist/components/dialog/dialog-surface.svelte +102 -9
- package/dist/components/dialog/dialog-title.svelte +2 -2
- package/dist/components/dialog/dialog-trigger.svelte +2 -2
- package/dist/components/dialog/dialog.svelte +22 -11
- package/dist/components/dialog/docs/llms.md +56 -19
- package/dist/components/dialog/types.d.ts +25 -7
- 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 +15 -14
- package/dist/components/rating/rating.svelte +66 -29
- package/dist/components/rating/rating.svelte.d.ts +1 -1
- package/dist/components/rating/types.d.ts +8 -8
- 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 +26 -26
- package/dist/components/tag/tag-group.svelte +2 -2
- package/dist/components/tag/tag.svelte +13 -12
- package/dist/components/tag/types.d.ts +6 -4
- package/dist/components/tag-picker/docs/llms.md +61 -55
- package/dist/components/tag-picker/option-group.svelte +17 -4
- package/dist/components/tag-picker/option-group.svelte.d.ts +1 -1
- package/dist/components/tag-picker/option.svelte +15 -4
- package/dist/components/tag-picker/tag-picker.svelte +137 -65
- package/dist/components/tag-picker/tag-picker.svelte.d.ts +2 -2
- package/dist/components/tag-picker/types.d.ts +36 -16
- 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 +18 -0
- package/dist/index.js +20 -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/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 +50 -36
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
onDismiss,
|
|
26
26
|
onclick,
|
|
27
27
|
onkeydown,
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
primaryButtonAttributes,
|
|
29
|
+
dismissButtonAttributes,
|
|
30
30
|
class: classes,
|
|
31
|
-
ref = $bindable(),
|
|
31
|
+
ref = $bindable(null),
|
|
32
32
|
children,
|
|
33
33
|
...attributes
|
|
34
34
|
}: TagProps = $props();
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
/** A plain tag is the dismiss button itself when it is dismissible. An interactive one holds its own buttons. */
|
|
45
45
|
const tag = $derived(interactive ? 'div' : _dismissible ? 'button' : 'span');
|
|
46
46
|
|
|
47
|
-
const primaryId = $derived(
|
|
48
|
-
const dismissId = $derived(
|
|
47
|
+
const primaryId = $derived(primaryButtonAttributes?.id ?? `${FALLBACK_ID}-primary`);
|
|
48
|
+
const dismissId = $derived(dismissButtonAttributes?.id ?? `${FALLBACK_ID}-dismiss`);
|
|
49
49
|
|
|
50
50
|
/** The dismiss icon names the button, unless the consumer named the tag itself. */
|
|
51
51
|
const named = $derived(!!(attributes['aria-label'] || attributes['aria-labelledby']));
|
|
@@ -109,6 +109,7 @@
|
|
|
109
109
|
|
|
110
110
|
<svelte:element
|
|
111
111
|
this={tag}
|
|
112
|
+
{...attributes}
|
|
112
113
|
bind:this={ref}
|
|
113
114
|
class={[
|
|
114
115
|
'fs-tag',
|
|
@@ -125,31 +126,31 @@
|
|
|
125
126
|
]}
|
|
126
127
|
type={tag === 'button' ? 'button' : undefined}
|
|
127
128
|
disabled={tag === 'button' ? _disabled : undefined}
|
|
128
|
-
{...attributes}
|
|
129
129
|
onclick={rootClick}
|
|
130
130
|
onkeydown={handleKeydown}
|
|
131
131
|
>
|
|
132
132
|
{#if interactive}
|
|
133
133
|
<button
|
|
134
|
+
{...primaryButtonAttributes}
|
|
134
135
|
type="button"
|
|
135
|
-
class=
|
|
136
|
+
class={['fs-tag-primary', primaryButtonAttributes?.class]}
|
|
136
137
|
id={primaryId}
|
|
137
138
|
disabled={_disabled}
|
|
138
139
|
aria-pressed={group ? _selected : undefined}
|
|
139
|
-
{...primaryProps}
|
|
140
140
|
onclick={handlePrimaryClick}
|
|
141
141
|
>
|
|
142
142
|
{@render content()}
|
|
143
143
|
</button>
|
|
144
144
|
{#if _dismissible}
|
|
145
145
|
<button
|
|
146
|
+
{...dismissButtonAttributes}
|
|
146
147
|
type="button"
|
|
147
|
-
class=
|
|
148
|
+
class={['fs-tag-dismiss', dismissButtonAttributes?.class]}
|
|
148
149
|
id={dismissId}
|
|
149
150
|
disabled={_disabled}
|
|
150
|
-
aria-label={dismissLabel}
|
|
151
|
-
aria-labelledby=
|
|
152
|
-
|
|
151
|
+
aria-label={dismissButtonAttributes?.['aria-label'] ?? dismissLabel}
|
|
152
|
+
aria-labelledby={dismissButtonAttributes?.['aria-labelledby'] ??
|
|
153
|
+
(dismissButtonAttributes?.['aria-label'] ? undefined : `${primaryId} ${dismissId}`)}
|
|
153
154
|
onclick={dismiss}
|
|
154
155
|
>
|
|
155
156
|
<RenderSoC SoC={dismissIcon} />
|
|
@@ -68,18 +68,20 @@ export type TagProps = {
|
|
|
68
68
|
onkeydown?: (e: KeyboardEvent) => void;
|
|
69
69
|
/** Attributes for the primary button of an interactive tag, for example `aria-haspopup`. If you give it
|
|
70
70
|
* a custom `id`, the dismiss button is named after it.
|
|
71
|
+
* @type HTMLButtonAttributes
|
|
71
72
|
*/
|
|
72
|
-
|
|
73
|
+
primaryButtonAttributes?: Omit<HTMLButtonAttributes, 'children' | 'onclick'>;
|
|
73
74
|
/** Attributes for the dismiss button of an interactive tag. Use `aria-label` together with
|
|
74
75
|
* `aria-labelledby: undefined` to give the button a name that stands on its own.
|
|
76
|
+
* @type HTMLButtonAttributes
|
|
75
77
|
*/
|
|
76
|
-
|
|
78
|
+
dismissButtonAttributes?: Omit<HTMLButtonAttributes, 'children' | 'onclick'>;
|
|
77
79
|
/** The primary text of the tag. */
|
|
78
80
|
children?: Snippet;
|
|
79
81
|
/** The DOM reference of the tag element.
|
|
80
82
|
* @bindable
|
|
81
83
|
*/
|
|
82
|
-
ref?: HTMLElement;
|
|
84
|
+
ref?: HTMLElement | null;
|
|
83
85
|
} & Omit<PolymorphicProps<'span'>, 'children' | 'onclick' | 'onkeydown'>;
|
|
84
86
|
/** @propsmith TagGroupProps */
|
|
85
87
|
export type TagGroupProps = {
|
|
@@ -118,7 +120,7 @@ export type TagGroupProps = {
|
|
|
118
120
|
/** The DOM reference of the group element.
|
|
119
121
|
* @bindable
|
|
120
122
|
*/
|
|
121
|
-
ref?: HTMLDivElement;
|
|
123
|
+
ref?: HTMLDivElement | null;
|
|
122
124
|
} & Omit<PolymorphicProps<'div'>, 'children' | 'role'>;
|
|
123
125
|
export type TagGroupContext = FSContext<{
|
|
124
126
|
readonly size?: TagSize;
|
|
@@ -15,7 +15,7 @@ A TagPicker combines a text field and a dropdown, giving people a way to choose
|
|
|
15
15
|
|
|
16
16
|
<TagPicker
|
|
17
17
|
bind:selectedOptions
|
|
18
|
-
|
|
18
|
+
inputAttributes={{ 'aria-label': 'Select Employees' }}
|
|
19
19
|
tagGroupProps={{ 'aria-label': 'Selected Employees' }}
|
|
20
20
|
>
|
|
21
21
|
{#each options as option (option)}
|
|
@@ -30,7 +30,7 @@ A TagPicker combines a text field and a dropdown, giving people a way to choose
|
|
|
30
30
|
- Selecting an option adds a tag and clears the text. The option is not offered again until its tag is removed.
|
|
31
31
|
- The options are filtered by what is typed in the input: a case-insensitive substring of the `text` of the option (its `value` when there is no `text`). The first match is highlighted.
|
|
32
32
|
- A multiple picker keeps the list open after each choice. With `single` a new choice replaces the tag and closes the list.
|
|
33
|
-
- Give the input an accessible name with `
|
|
33
|
+
- Give the input an accessible name with `aria-label="..."`, and the group of tags one with `tagGroupProps`.
|
|
34
34
|
- Pressing Backspace in an empty input removes the last tag. Tell your users about it.
|
|
35
35
|
- A tag shows the `text` of its option, and keeps it once the option leaves the screen. This holds for a tag preselected through `selectedOptions` too, as long as the options are children of the TagPicker. A value that no option has is shown as it is, and so is every value during server-side rendering. To control what a tag says, render the tags yourself with the `tag` snippet.
|
|
36
36
|
- Do not use an interactive `Tag` inside a TagPicker.
|
|
@@ -40,7 +40,7 @@ A TagPicker combines a text field and a dropdown, giving people a way to choose
|
|
|
40
40
|
|
|
41
41
|
### Default
|
|
42
42
|
|
|
43
|
-
The `tag` snippet renders the tag of a chosen option, here with an `Avatar` as its media. Render a `Tag` with the given `value
|
|
43
|
+
The `tag` snippet renders the tag of a chosen option, here with an `Avatar` as its media. Render a `Tag` with the given `value`.
|
|
44
44
|
|
|
45
45
|
```svelte
|
|
46
46
|
<script>
|
|
@@ -51,13 +51,13 @@ The `tag` snippet renders the tag of a chosen option, here with an `Avatar` as i
|
|
|
51
51
|
{#snippet media()}
|
|
52
52
|
<Avatar aria-hidden="true" name={text} size={16} color="colorful" />
|
|
53
53
|
{/snippet}
|
|
54
|
-
<Tag
|
|
54
|
+
<Tag {value} {media} title={text}>{text}</Tag>
|
|
55
55
|
{/snippet}
|
|
56
56
|
|
|
57
57
|
<TagPicker
|
|
58
58
|
bind:selectedOptions
|
|
59
59
|
{tag}
|
|
60
|
-
|
|
60
|
+
inputAttributes={{ 'aria-label': 'Select Employees' }}
|
|
61
61
|
tagGroupProps={{ 'aria-label': 'Selected Employees' }}
|
|
62
62
|
>
|
|
63
63
|
{#each options as option (option)}
|
|
@@ -71,13 +71,13 @@ The `tag` snippet renders the tag of a chosen option, here with an `Avatar` as i
|
|
|
71
71
|
|
|
72
72
|
### Button
|
|
73
73
|
|
|
74
|
-
Make the input read only with `
|
|
74
|
+
Make the input read only with `inputAttributes={{ readonly: true }}` to use the TagPicker as a button that opens the list.
|
|
75
75
|
|
|
76
76
|
```svelte
|
|
77
77
|
<TagPicker
|
|
78
78
|
bind:selectedOptions
|
|
79
79
|
placeholder="Select employees"
|
|
80
|
-
|
|
80
|
+
inputAttributes={{ 'aria-label': 'Select Employees', readonly: true }}
|
|
81
81
|
>
|
|
82
82
|
{#each options as option (option)}
|
|
83
83
|
<TagPickerOption value={option}>{option}</TagPickerOption>
|
|
@@ -90,7 +90,7 @@ Make the input read only with `inputProps={{ readonly: true }}` to use the TagPi
|
|
|
90
90
|
A disabled TagPicker cannot be opened, typed in or changed, and its tags cannot be dismissed.
|
|
91
91
|
|
|
92
92
|
```svelte
|
|
93
|
-
<TagPicker disabled selectedOptions={[options[0]]}
|
|
93
|
+
<TagPicker disabled selectedOptions={[options[0]]} inputAttributes={{ 'aria-label': 'Select Employees' }}>
|
|
94
94
|
{#each options as option (option)}
|
|
95
95
|
<TagPickerOption value={option}>{option}</TagPickerOption>
|
|
96
96
|
{/each}
|
|
@@ -107,12 +107,12 @@ Replace the dropdown arrow with `expandIcon`, a component or a snippet, or remov
|
|
|
107
107
|
</script>
|
|
108
108
|
|
|
109
109
|
<!-- A custom icon -->
|
|
110
|
-
<TagPicker bind:selectedOptions expandIcon={ArrowDownFilled}
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
<TagPicker bind:selectedOptions expandIcon={ArrowDownFilled} inputAttributes={{ 'aria-label': 'Select Employees' }}
|
|
111
|
+
>...</TagPicker
|
|
112
|
+
>
|
|
113
113
|
|
|
114
114
|
<!-- No icon -->
|
|
115
|
-
<TagPicker bind:selectedOptions expandIcon={null}
|
|
115
|
+
<TagPicker bind:selectedOptions expandIcon={null} inputAttributes={{ 'aria-label': 'Select Employees' }}>...</TagPicker>
|
|
116
116
|
```
|
|
117
117
|
|
|
118
118
|
### Filtering
|
|
@@ -123,7 +123,7 @@ The options are filtered as the user types, and the first match is highlighted s
|
|
|
123
123
|
<TagPicker
|
|
124
124
|
bind:selectedOptions
|
|
125
125
|
notFoundText="We couldn't find any matches"
|
|
126
|
-
|
|
126
|
+
inputAttributes={{ 'aria-label': 'Select Employees' }}
|
|
127
127
|
>
|
|
128
128
|
{#each options as option (option)}
|
|
129
129
|
<TagPickerOption value={option}>{option}</TagPickerOption>
|
|
@@ -136,7 +136,7 @@ The options are filtered as the user types, and the first match is highlighted s
|
|
|
136
136
|
Group options with `TagPickerOptionGroup`. A group with no option left on screen hides itself.
|
|
137
137
|
|
|
138
138
|
```svelte
|
|
139
|
-
<TagPicker bind:selectedOptions
|
|
139
|
+
<TagPicker bind:selectedOptions inputAttributes={{ 'aria-label': 'Select Employees' }}>
|
|
140
140
|
<TagPickerOptionGroup label="Managers">
|
|
141
141
|
{#each managers as option (option)}
|
|
142
142
|
<TagPickerOption value={option}>{option}</TagPickerOption>
|
|
@@ -164,7 +164,7 @@ Leave out the options to get a TagPicker without a list, to let users enter thei
|
|
|
164
164
|
bind:selectedOptions
|
|
165
165
|
bind:value
|
|
166
166
|
placeholder="Type and press Enter"
|
|
167
|
-
|
|
167
|
+
inputAttributes={{ 'aria-label': 'Add Employees' }}
|
|
168
168
|
querySubmitted={(e, query) => {
|
|
169
169
|
if (!selectedOptions.includes(query)) selectedOptions = [...selectedOptions, query];
|
|
170
170
|
value = '';
|
|
@@ -181,7 +181,7 @@ Add a button next to the dropdown arrow with the `secondaryAction` snippet.
|
|
|
181
181
|
<Button appearance="subtle" onclick={() => (selectedOptions = [])}>All Clear</Button>
|
|
182
182
|
{/snippet}
|
|
183
183
|
|
|
184
|
-
<TagPicker bind:selectedOptions secondaryAction={allClear}
|
|
184
|
+
<TagPicker bind:selectedOptions secondaryAction={allClear} inputAttributes={{ 'aria-label': 'Select Employees' }}>
|
|
185
185
|
{#each options as option (option)}
|
|
186
186
|
<TagPickerOption value={option}>{option}</TagPickerOption>
|
|
187
187
|
{/each}
|
|
@@ -193,7 +193,7 @@ Add a button next to the dropdown arrow with the `secondaryAction` snippet.
|
|
|
193
193
|
With `single` a new choice replaces the current tag and closes the list.
|
|
194
194
|
|
|
195
195
|
```svelte
|
|
196
|
-
<TagPicker single bind:selectedOptions
|
|
196
|
+
<TagPicker single bind:selectedOptions inputAttributes={{ 'aria-label': 'Select Employee' }}>
|
|
197
197
|
{#each options as option (option)}
|
|
198
198
|
<TagPickerOption value={option}>{option}</TagPickerOption>
|
|
199
199
|
{/each}
|
|
@@ -206,7 +206,7 @@ A TagPicker is `medium` by default, or `large` or `extra-large`. The size of the
|
|
|
206
206
|
|
|
207
207
|
```svelte
|
|
208
208
|
{#each ['medium', 'large', 'extra-large'] as size}
|
|
209
|
-
<TagPicker {size} selectedOptions={[options[0]]}
|
|
209
|
+
<TagPicker {size} selectedOptions={[options[0]]} inputAttributes={{ 'aria-label': size }}>
|
|
210
210
|
{#each options as option (option)}
|
|
211
211
|
<TagPickerOption value={option}>{option}</TagPickerOption>
|
|
212
212
|
{/each}
|
|
@@ -220,10 +220,10 @@ A tag that is wider than the control, or than its own `max-width`, shortens its
|
|
|
220
220
|
|
|
221
221
|
```svelte
|
|
222
222
|
{#snippet tag({ value, text })}
|
|
223
|
-
<Tag
|
|
223
|
+
<Tag {value} title={text} style="max-width: 100px;">{text}</Tag>
|
|
224
224
|
{/snippet}
|
|
225
225
|
|
|
226
|
-
<TagPicker bind:selectedOptions {tag}
|
|
226
|
+
<TagPicker bind:selectedOptions {tag} inputAttributes={{ 'aria-label': 'Select Employees' }}>
|
|
227
227
|
{#each [...longOptions, ...options] as option (option)}
|
|
228
228
|
<TagPickerOption value={option}>
|
|
229
229
|
<span style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0;">{option}</span>
|
|
@@ -232,32 +232,36 @@ A tag that is wider than the control, or than its own `max-width`, shortens its
|
|
|
232
232
|
</TagPicker>
|
|
233
233
|
```
|
|
234
234
|
|
|
235
|
+
HTML attributes, including class, id and ARIA attributes, apply to the control element. Bind ref to access that control. Use wrapperAttributes and wrapperRef for the outer container.
|
|
236
|
+
|
|
235
237
|
## Component Props (TagPicker)
|
|
236
238
|
|
|
237
239
|
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
238
240
|
<!-- props:TagPickerProps -->
|
|
239
241
|
|
|
240
|
-
| Name
|
|
241
|
-
|
|
|
242
|
-
| `
|
|
243
|
-
| `
|
|
244
|
-
| `
|
|
245
|
-
| `
|
|
246
|
-
| `
|
|
247
|
-
| `
|
|
248
|
-
| `
|
|
249
|
-
| `
|
|
250
|
-
| `
|
|
251
|
-
| `
|
|
252
|
-
| `
|
|
253
|
-
| `
|
|
254
|
-
| `
|
|
255
|
-
| `
|
|
256
|
-
| `
|
|
257
|
-
| `
|
|
258
|
-
| `
|
|
259
|
-
| `
|
|
260
|
-
| `
|
|
242
|
+
| Name | Type | Default | Description |
|
|
243
|
+
| ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
244
|
+
| `wrapperRef` _bindable_ | `HTMLDivElement` | `null` | | The DOM reference of the wrapper element. |
|
|
245
|
+
| `ref` _bindable_ | `HTMLSelectElement` | `null` | | The DOM reference of the native multiple select that holds the selected options. The other attributes of the picker are applied to it. |
|
|
246
|
+
| `inputRef` _bindable_ | `HTMLInputElement` | `null` | | The DOM reference of the text input. |
|
|
247
|
+
| `inputAttributes` | `HTMLInputAttributes` | | The attributes to spread on the text input. |
|
|
248
|
+
| `selectedOptions` _bindable_ | `string[]` | `[]` | The values of the chosen options, shown as tags in the control. A value no option has is shown as it is. |
|
|
249
|
+
| `value` _bindable_ | `string` | `''` | The text typed in the input. It filters the options, and is cleared when one is chosen. |
|
|
250
|
+
| `open` _bindable_ | `boolean` | `false` | Controls the open state of the option list. |
|
|
251
|
+
| `single` | `boolean` | | Limits the picker to one tag: choosing an option replaces the current one and closes the list. |
|
|
252
|
+
| `disabled` | `boolean` | | Disables the user interaction: the input, the tags and the list. |
|
|
253
|
+
| `size` | `'medium'` | `'large'` | `'extra-large'` | `'medium'` | The size of the control. It also picks the size of the tags. |
|
|
254
|
+
| `placeholder` | `string` | | The placeholder text of the input. |
|
|
255
|
+
| `notFoundText` | `string` | `'No options available'` | The message shown in place of the list when there is no option left to choose. |
|
|
256
|
+
| `expandIcon` | `Snippet` | `Component` | `null` | `ChevronDownRegular` | The dropdown arrow. Pass `null` to remove it. |
|
|
257
|
+
| `secondaryAction` | `Snippet` | | A button-like element rendered at the end of the control, before the dropdown arrow. |
|
|
258
|
+
| `tag` | `Snippet<[{ value: string; text: string }]>` | | Renders the tag of a chosen option, to give it media or custom text. Falls back to a plain tag. Render a `Tag` with the given `value`. |
|
|
259
|
+
| `tagGroupProps` | `TagGroupProps` | | The props to spread on the group holding the tags. This is where its `aria-label` goes, `'Selected options'` by default. |
|
|
260
|
+
| `wrapperAttributes` | `HTMLAttributes` | | The attributes to spread on the wrapper element. |
|
|
261
|
+
| `onSelectionChange` | `(e: Event, selectedOptions: string[]) => void` | | Called when an option is chosen, or a tag is removed. |
|
|
262
|
+
| `querySubmitted` | `(e: KeyboardEvent, query: string) => void` | | Called when Enter is pressed with text in the input and no option under the cursor. This is where a free-form tag is added. |
|
|
263
|
+
| `children` | `Snippet` | | The options. Leave it out to get a picker without a list. |
|
|
264
|
+
| `NativeFieldAttributes<Omit<HTMLSelectAttributes, 'value'` | `'multiple'` | `'size'` | `'disabled'` | `'children'>>` | | | |
|
|
261
265
|
|
|
262
266
|
<!-- /props:TagPickerProps -->
|
|
263
267
|
|
|
@@ -266,14 +270,14 @@ A tag that is wider than the control, or than its own `max-width`, shortens its
|
|
|
266
270
|
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
267
271
|
<!-- props:TagPickerOptionProps -->
|
|
268
272
|
|
|
269
|
-
| Name | Type
|
|
270
|
-
| ------------------------------------------------------------------------ |
|
|
271
|
-
| `value` | `string`
|
|
272
|
-
| `text` | `string`
|
|
273
|
-
| `id` | `string`
|
|
274
|
-
| `ref` _bindable_ | `HTMLLIElement` | | The DOM reference of the option element. |
|
|
275
|
-
| `disabled` | `boolean`
|
|
276
|
-
| `ListViewItemProps<'li'>` without `as`, `value`, `onAction`, `checkmark` |
|
|
273
|
+
| Name | Type | Default | Description |
|
|
274
|
+
| ------------------------------------------------------------------------ | ----------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
275
|
+
| `value` | `string` | | The value added to `selectedOptions` when the option is chosen. |
|
|
276
|
+
| `text` | `string` | | The text the option is filtered by, and the text of its tag. Falls back to `value`. |
|
|
277
|
+
| `id` | `string` | | The id of the option element, referenced by the input through `aria-activedescendant`. Falls back to a generated id. |
|
|
278
|
+
| `ref` _bindable_ | `HTMLLIElement` | `null` | | The DOM reference of the option element. |
|
|
279
|
+
| `disabled` | `boolean` | | Takes the option out of reach: it is shown, but the cursor steps over it. |
|
|
280
|
+
| `ListViewItemProps<'li'>` without `as`, `value`, `onAction`, `checkmark` | | | |
|
|
277
281
|
|
|
278
282
|
<!-- /props:TagPickerOptionProps -->
|
|
279
283
|
|
|
@@ -282,11 +286,13 @@ A tag that is wider than the control, or than its own `max-width`, shortens its
|
|
|
282
286
|
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
283
287
|
<!-- props:TagPickerOptionGroupProps -->
|
|
284
288
|
|
|
285
|
-
| Name | Type
|
|
286
|
-
| ----------------------------------------------------- |
|
|
287
|
-
| `label` | `string`
|
|
288
|
-
| `ref` _bindable_ | `HTMLUListElement` | | The DOM reference of the group element.
|
|
289
|
-
| `children` | `Snippet`
|
|
290
|
-
| `
|
|
289
|
+
| Name | Type | Default | Description |
|
|
290
|
+
| ----------------------------------------------------- | -------------------------------- | ------- | ------------------------------------------------ |
|
|
291
|
+
| `label` | `string` | | The label of the group. |
|
|
292
|
+
| `ref` _bindable_ | `HTMLUListElement` | `null` | | The DOM reference of the group element. |
|
|
293
|
+
| `children` | `Snippet` | | The options of the group. |
|
|
294
|
+
| `wrapperAttributes` | `HTMLAttributes` | | The attributes to spread on the wrapper element. |
|
|
295
|
+
| `wrapperRef` _bindable_ | `HTMLLIElement` | `null` | | The DOM reference of the wrapper element. |
|
|
296
|
+
| `HTMLAttributes<HTMLUListElement>` without `children` | | | |
|
|
291
297
|
|
|
292
298
|
<!-- /props:TagPickerOptionGroupProps -->
|
|
@@ -5,12 +5,25 @@
|
|
|
5
5
|
const FALLBACK_ID = $props.id();
|
|
6
6
|
const LABEL_ID = `${PREFIX}-tagpicker-group-${FALLBACK_ID}-label`;
|
|
7
7
|
|
|
8
|
-
let {
|
|
8
|
+
let {
|
|
9
|
+
label,
|
|
10
|
+
ref = $bindable(null),
|
|
11
|
+
class: classes,
|
|
12
|
+
children,
|
|
13
|
+
wrapperAttributes,
|
|
14
|
+
wrapperRef = $bindable(null),
|
|
15
|
+
...attributes
|
|
16
|
+
}: TagPickerOptionGroupProps = $props();
|
|
9
17
|
</script>
|
|
10
18
|
|
|
11
|
-
<li
|
|
19
|
+
<li
|
|
20
|
+
{...wrapperAttributes}
|
|
21
|
+
class={['fs-tagpicker-group', wrapperAttributes?.class]}
|
|
22
|
+
role="presentation"
|
|
23
|
+
bind:this={wrapperRef}
|
|
24
|
+
>
|
|
12
25
|
<span class="fs-tagpicker-group-label" id={LABEL_ID}>{label}</span>
|
|
13
|
-
<ul
|
|
26
|
+
<ul {...attributes} class={classes} role="group" aria-labelledby={LABEL_ID} bind:this={ref}>
|
|
14
27
|
{@render children?.()}
|
|
15
28
|
</ul>
|
|
16
29
|
</li>
|
|
@@ -18,7 +31,7 @@
|
|
|
18
31
|
<style>
|
|
19
32
|
.fs-tagpicker-group {
|
|
20
33
|
list-style: none;
|
|
21
|
-
/* A group left without an option on screen hides itself. */
|
|
34
|
+
/* A group left without an option on screen hides itself. F*/
|
|
22
35
|
&:not(:has(:global(.fs-tagpicker-option))) {
|
|
23
36
|
display: none;
|
|
24
37
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { TagPickerOptionGroupProps } from './types.ts';
|
|
2
|
-
declare const OptionGroup: import("svelte").Component<TagPickerOptionGroupProps, {}, "ref">;
|
|
2
|
+
declare const OptionGroup: import("svelte").Component<TagPickerOptionGroupProps, {}, "ref" | "wrapperRef">;
|
|
3
3
|
type OptionGroup = ReturnType<typeof OptionGroup>;
|
|
4
4
|
export default OptionGroup;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { onMount } from 'svelte';
|
|
2
3
|
import { PREFIX } from '../../internal/constants.js';
|
|
3
4
|
import ListViewItem from '../list-view/list-view-item.svelte';
|
|
4
5
|
import { getTagPickerContext } from './tag-picker.js';
|
|
@@ -9,7 +10,7 @@
|
|
|
9
10
|
|
|
10
11
|
let {
|
|
11
12
|
disabled,
|
|
12
|
-
ref = $bindable(),
|
|
13
|
+
ref = $bindable(null),
|
|
13
14
|
id = ID,
|
|
14
15
|
value,
|
|
15
16
|
text,
|
|
@@ -37,8 +38,18 @@
|
|
|
37
38
|
if (!disabled) methods.chooseOption(e, id);
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
// The tag of the option keeps its text even when the option itself is not on screen.
|
|
41
|
-
|
|
41
|
+
// The tag of the option keeps its text even when the option itself is not on screen. It is
|
|
42
|
+
// reported as the option is created, ahead of the tags, so the server writes it too.
|
|
43
|
+
const withdraw = methods.registerLabel({
|
|
44
|
+
get value() {
|
|
45
|
+
return value;
|
|
46
|
+
},
|
|
47
|
+
get text() {
|
|
48
|
+
return label;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
onMount(() => withdraw);
|
|
42
53
|
|
|
43
54
|
// An option counts only while it is on screen: that is what makes the empty list detectable
|
|
44
55
|
// and keeps keyboard navigation off options nobody can see.
|
|
@@ -56,6 +67,7 @@
|
|
|
56
67
|
|
|
57
68
|
{#if isVisible}
|
|
58
69
|
<ListViewItem
|
|
70
|
+
{...attributes}
|
|
59
71
|
{id}
|
|
60
72
|
role="option"
|
|
61
73
|
{value}
|
|
@@ -63,7 +75,6 @@
|
|
|
63
75
|
class={['fs-tagpicker-option', classes]}
|
|
64
76
|
bind:ref
|
|
65
77
|
{disabled}
|
|
66
|
-
{...attributes}
|
|
67
78
|
onclick={handleClick}
|
|
68
79
|
>
|
|
69
80
|
{@render children?.()}
|