@txstate-mws/svelte-components 1.5.9 → 1.5.11
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.
|
@@ -62,6 +62,7 @@ export let menuItemHilitedClass = '';
|
|
|
62
62
|
export let menuItemSelectedClass = '';
|
|
63
63
|
export let menuDividerClass = '';
|
|
64
64
|
export let hideSelectedIndicator = false;
|
|
65
|
+
export let hideEmptyText = false;
|
|
65
66
|
export let usemenurole = false;
|
|
66
67
|
let menuelement;
|
|
67
68
|
const itemelements = [];
|
|
@@ -76,8 +77,6 @@ async function reactToItems(..._) {
|
|
|
76
77
|
lastactive = items.length - [...items].reverse().findIndex(itm => 'value' in itm && !itm.disabled && !hiddenItem(itm)) - 1;
|
|
77
78
|
if (hilited && items[hilited]?.disabled)
|
|
78
79
|
hilited = firstactive;
|
|
79
|
-
if (document.activeElement === buttonelement && hasMeaningfulItems && !loading)
|
|
80
|
-
menushown = true;
|
|
81
80
|
}
|
|
82
81
|
$: void reactToItems(items, value);
|
|
83
82
|
async function reactToMenuShown(_) {
|
|
@@ -120,7 +119,7 @@ function isSelectable(itm) {
|
|
|
120
119
|
return 'value' in itm && !itm.disabled && !hiddenItem(itm);
|
|
121
120
|
}
|
|
122
121
|
function onkeydown(e) {
|
|
123
|
-
if (modifierKey(e)
|
|
122
|
+
if (modifierKey(e))
|
|
124
123
|
return;
|
|
125
124
|
if (e.key === 'ArrowDown') {
|
|
126
125
|
e.preventDefault();
|
|
@@ -209,8 +208,7 @@ let blurTimer;
|
|
|
209
208
|
function onbuttonclick(e) {
|
|
210
209
|
e.preventDefault();
|
|
211
210
|
cancelAnimationFrame(blurTimer);
|
|
212
|
-
|
|
213
|
-
menushown = !menushown;
|
|
211
|
+
menushown = !menushown;
|
|
214
212
|
}
|
|
215
213
|
function onblur(e) {
|
|
216
214
|
// tabindex=-1 on our menu elements means e.relatedTarget will be set
|
|
@@ -219,6 +217,10 @@ function onblur(e) {
|
|
|
219
217
|
menushown = false; });
|
|
220
218
|
}
|
|
221
219
|
}
|
|
220
|
+
function oninput(e) {
|
|
221
|
+
if (document.activeElement === buttonelement)
|
|
222
|
+
menushown = true;
|
|
223
|
+
}
|
|
222
224
|
function cleanup(element) {
|
|
223
225
|
for (const observer of observers)
|
|
224
226
|
observer.disconnect();
|
|
@@ -227,6 +229,7 @@ function cleanup(element) {
|
|
|
227
229
|
element.removeEventListener('click', onbuttonclick);
|
|
228
230
|
element.removeEventListener('keydown', onkeydown);
|
|
229
231
|
element.removeEventListener('blur', onblur);
|
|
232
|
+
element.removeEventListener('input', oninput);
|
|
230
233
|
element.removeAttribute('aria-disabled');
|
|
231
234
|
element.removeAttribute('aria-haspopup');
|
|
232
235
|
element.removeAttribute('aria-expanded');
|
|
@@ -273,7 +276,7 @@ const onclick = (item) => (e) => {
|
|
|
273
276
|
$: hasSelected = showSelected && !hideSelectedIndicator && items.some(itm => 'value' in itm && itm.value === value);
|
|
274
277
|
</script>
|
|
275
278
|
|
|
276
|
-
{#if menushown}
|
|
279
|
+
{#if menushown && !loading && (hasMeaningfulItems || !hideEmptyText)}
|
|
277
280
|
<div use:portal={usePortal === true ? undefined : (usePortal || null)}
|
|
278
281
|
use:glue={{ target: buttonelement, align, cover, gap, adjustparentheight, store: computedalign }}
|
|
279
282
|
class={menuContainerClass}>
|