diff --git a/.changeset/fifty-pears-wash.md b/.changeset/fifty-pears-wash.md new file mode 100644 index 000000000..3d6df0c24 --- /dev/null +++ b/.changeset/fifty-pears-wash.md @@ -0,0 +1,5 @@ +--- +'svelte-ux': minor +--- + +[MultiSelectMenu] Add optionProps to easily set `variant` on MultiSelectOption diff --git a/.changeset/serious-starfishes-pump.md b/.changeset/serious-starfishes-pump.md new file mode 100644 index 000000000..dd1bdb826 --- /dev/null +++ b/.changeset/serious-starfishes-pump.md @@ -0,0 +1,5 @@ +--- +'svelte-ux': minor +--- + +[MultiSelectField] Add optionProps to easily set `variant` on MultiSelectOption diff --git a/.changeset/tricky-jars-live.md b/.changeset/tricky-jars-live.md new file mode 100644 index 000000000..361cdbba7 --- /dev/null +++ b/.changeset/tricky-jars-live.md @@ -0,0 +1,5 @@ +--- +'svelte-ux': minor +--- + +[MultiSelectOption] Add variant support (checkbox (default), checkmark, and fill) diff --git a/packages/svelte-ux/src/lib/components/MultiSelect.svelte b/packages/svelte-ux/src/lib/components/MultiSelect.svelte index b1e8260c1..3d7c5c967 100644 --- a/packages/svelte-ux/src/lib/components/MultiSelect.svelte +++ b/packages/svelte-ux/src/lib/components/MultiSelect.svelte @@ -25,6 +25,7 @@ export let inlineSearch = false; export let autoFocusSearch = false; export let placeholder = 'Search items'; + export let optionProps: Partial> | undefined = undefined; /** Wrap options in `InfiniteScroll` to amortize rendering of a large number of options */ export let infiniteScroll = false; @@ -202,7 +203,13 @@ {disabled} {onChange} > - + {label} @@ -254,7 +261,13 @@ {disabled} {onChange} > - + {label} diff --git a/packages/svelte-ux/src/lib/components/MultiSelectField.svelte b/packages/svelte-ux/src/lib/components/MultiSelectField.svelte index 28bc4e010..613db039b 100644 --- a/packages/svelte-ux/src/lib/components/MultiSelectField.svelte +++ b/packages/svelte-ux/src/lib/components/MultiSelectField.svelte @@ -29,6 +29,7 @@ export let max: number | undefined = undefined; export let placement: Placement = 'bottom-start'; export let infiniteScroll = false; + export let optionProps: Partial> | undefined = undefined; // TextField props export let label = ''; @@ -235,7 +236,13 @@ let:onChange > - + {label} diff --git a/packages/svelte-ux/src/lib/components/MultiSelectMenu.svelte b/packages/svelte-ux/src/lib/components/MultiSelectMenu.svelte index c0664cfdd..6272db825 100644 --- a/packages/svelte-ux/src/lib/components/MultiSelectMenu.svelte +++ b/packages/svelte-ux/src/lib/components/MultiSelectMenu.svelte @@ -27,6 +27,7 @@ export let searchText = ''; /** Maximum number of options that can be selected */ export let max: number | undefined = undefined; + export let optionProps: Partial> | undefined = undefined; export let classes: { root?: string; @@ -93,7 +94,13 @@ let:onChange > - + {label} diff --git a/packages/svelte-ux/src/lib/components/MultiSelectOption.svelte b/packages/svelte-ux/src/lib/components/MultiSelectOption.svelte index a81292263..7308b064f 100644 --- a/packages/svelte-ux/src/lib/components/MultiSelectOption.svelte +++ b/packages/svelte-ux/src/lib/components/MultiSelectOption.svelte @@ -1,13 +1,16 @@
- -
dispatch('change')} + {disabled} + classes={{ + root: 'px-2 rounded hover:bg-surface-content/5', + label: 'py-2', + ...settingsClasses.checkbox, + ...classes.checkbox, + }} + > +
+ +
+ + {:else if variant === 'checkmark'} + + {:else if variant === 'fill'} +
-
+ + {/if}
diff --git a/packages/svelte-ux/src/routes/docs/components/MultiSelect/+page.svelte b/packages/svelte-ux/src/routes/docs/components/MultiSelect/+page.svelte index b046aaf95..c331b71c6 100644 --- a/packages/svelte-ux/src/routes/docs/components/MultiSelect/+page.svelte +++ b/packages/svelte-ux/src/routes/docs/components/MultiSelect/+page.svelte @@ -36,6 +36,30 @@ (value = e.detail.value)} /> +

options variant: checkmark

+ + + {value.length} selected + (value = e.detail.value)} + /> + + +

options variant: fill

+ + + {value.length} selected + (value = e.detail.value)} + /> + +

inlineSearch

diff --git a/packages/svelte-ux/src/routes/docs/components/MultiSelectField/+page.svelte b/packages/svelte-ux/src/routes/docs/components/MultiSelectField/+page.svelte index 9cb92e585..be0ca3cc3 100644 --- a/packages/svelte-ux/src/routes/docs/components/MultiSelectField/+page.svelte +++ b/packages/svelte-ux/src/routes/docs/components/MultiSelectField/+page.svelte @@ -34,6 +34,34 @@ (value = e.detail.value)} /> +

options variants

+ + +
+ (value = e.detail.value)} + /> + (value = e.detail.value)} + /> + (value = e.detail.value)} + /> +
+
+

disabled

diff --git a/packages/svelte-ux/src/routes/docs/components/MultiSelectMenu/+page.svelte b/packages/svelte-ux/src/routes/docs/components/MultiSelectMenu/+page.svelte index d6d0696d3..bbdae0b33 100644 --- a/packages/svelte-ux/src/routes/docs/components/MultiSelectMenu/+page.svelte +++ b/packages/svelte-ux/src/routes/docs/components/MultiSelectMenu/+page.svelte @@ -41,6 +41,57 @@ +

options variants

+ + +
+ + {value.length} selected + { + // @ts-expect-error + value = e.detail.value; + }} + {open} + on:close={toggleOff} + /> + + + + {value.length} selected + { + // @ts-expect-error + value = e.detail.value; + }} + {open} + on:close={toggleOff} + /> + + + + {value.length} selected + { + // @ts-expect-error + value = e.detail.value; + }} + {open} + on:close={toggleOff} + /> + +
+
+

inlineSearch