Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
brianvoe committed Nov 25, 2023
2 parents 8a105ca + 4813fe4 commit 94de2bd
Show file tree
Hide file tree
Showing 59 changed files with 20,734 additions and 12,331 deletions.
2 changes: 1 addition & 1 deletion dist/render.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export interface Callbacks {
open: () => void;
close: () => void;
addable?: (value: string) => Promise<OptionOptional | string> | OptionOptional | string | false | undefined | null;
setSelected: (value: string[], runAfterChange: boolean) => void;
setSelected: (value: string | string[], runAfterChange: boolean) => void;
addOption: (option: Option) => void;
search: (search: string) => void;
beforeChange?: (newVal: Option[], oldVal: Option[]) => boolean | void;
Expand Down
1 change: 1 addition & 0 deletions dist/settings.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export default class Settings {
disabled: boolean;
alwaysOpen: boolean;
showSearch: boolean;
ariaLabel: string;
searchPlaceholder: string;
searchText: string;
searchingText: string;
Expand Down
52 changes: 43 additions & 9 deletions dist/slimselect.cjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class Settings {
this.disabled = settings.disabled !== undefined ? settings.disabled : false;
this.alwaysOpen = settings.alwaysOpen !== undefined ? settings.alwaysOpen : false;
this.showSearch = settings.showSearch !== undefined ? settings.showSearch : true;
this.ariaLabel = settings.ariaLabel || 'Combobox';
this.searchPlaceholder = settings.searchPlaceholder || 'Search';
this.searchText = settings.searchText || 'No Results';
this.searchingText = settings.searchingText || 'Searching...';
Expand Down Expand Up @@ -257,6 +258,24 @@ class Store {
}, false);
return options.length ? options[0] : null;
}
getSelectType() {
return this.selectType;
}
getFirstOption() {
let option = null;
for (let dataObj of this.data) {
if (dataObj instanceof Optgroup) {
option = dataObj.options[0];
}
else if (dataObj instanceof Option) {
option = dataObj;
}
if (option) {
break;
}
}
return option;
}
search(search, searchFilter) {
search = search.trim();
if (search === '') {
Expand Down Expand Up @@ -295,9 +314,6 @@ class Store {
});
return dataSearch;
}
getSelectType() {
return this.selectType;
}
}

class Render {
Expand Down Expand Up @@ -417,7 +433,7 @@ class Render {
var _a;
const main = document.createElement('div');
main.dataset.id = this.settings.id;
main.id = this.settings.id;
main.setAttribute('aria-label', this.settings.ariaLabel);
main.tabIndex = 0;
main.onkeydown = (e) => {
switch (e.key) {
Expand All @@ -441,6 +457,7 @@ class Render {
this.callbacks.close();
return false;
}
return false;
};
main.onclick = (e) => {
if (this.settings.disabled) {
Expand Down Expand Up @@ -477,13 +494,15 @@ class Render {
this.updateDeselectAll();
}
else {
this.callbacks.setSelected([''], false);
const firstOption = this.store.getFirstOption();
const value = firstOption ? firstOption.value : '';
this.callbacks.setSelected(value, false);
}
if (this.settings.closeOnSelect) {
this.callbacks.close();
}
if (this.callbacks.afterChange) {
this.callbacks.afterChange(after);
this.callbacks.afterChange(this.store.getSelectedOptions());
}
}
};
Expand Down Expand Up @@ -706,7 +725,6 @@ class Render {
contentDiv() {
const main = document.createElement('div');
main.dataset.id = this.settings.id;
main.id = this.settings.id;
const search = this.searchDiv();
main.appendChild(search.main);
const list = this.listDiv();
Expand Down Expand Up @@ -787,6 +805,7 @@ class Render {
}
return true;
}
return true;
};
main.appendChild(input);
if (this.callbacks.addable) {
Expand Down Expand Up @@ -890,6 +909,20 @@ class Render {
return;
}
}
let highlighted = false;
for (const o of options) {
if (o.classList.contains(this.classes.highlighted)) {
highlighted = true;
}
}
if (!highlighted) {
for (const o of options) {
if (o.classList.contains(this.classes.selected)) {
o.classList.add(this.classes.highlighted);
break;
}
}
}
for (let i = 0; i < options.length; i++) {
if (options[i].classList.contains(this.classes.highlighted)) {
const prevOption = options[i];
Expand Down Expand Up @@ -1262,7 +1295,8 @@ class Select {
this.listen = false;
this.observer = null;
this.select = select;
this.select.addEventListener('change', this.valueChange.bind(this), {
this.valueChange = this.valueChange.bind(this);
this.select.addEventListener('change', this.valueChange, {
passive: true,
});
this.observer = new MutationObserver(this.observeCall.bind(this));
Expand Down Expand Up @@ -1518,7 +1552,7 @@ class Select {
}
destroy() {
this.changeListen(false);
this.select.removeEventListener('change', this.valueChange.bind(this));
this.select.removeEventListener('change', this.valueChange);
if (this.observer) {
this.observer.disconnect();
this.observer = null;
Expand Down
2 changes: 1 addition & 1 deletion dist/slimselect.css

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/slimselect.css.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

52 changes: 43 additions & 9 deletions dist/slimselect.es.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class Settings {
this.disabled = settings.disabled !== undefined ? settings.disabled : false;
this.alwaysOpen = settings.alwaysOpen !== undefined ? settings.alwaysOpen : false;
this.showSearch = settings.showSearch !== undefined ? settings.showSearch : true;
this.ariaLabel = settings.ariaLabel || 'Combobox';
this.searchPlaceholder = settings.searchPlaceholder || 'Search';
this.searchText = settings.searchText || 'No Results';
this.searchingText = settings.searchingText || 'Searching...';
Expand Down Expand Up @@ -255,6 +256,24 @@ class Store {
}, false);
return options.length ? options[0] : null;
}
getSelectType() {
return this.selectType;
}
getFirstOption() {
let option = null;
for (let dataObj of this.data) {
if (dataObj instanceof Optgroup) {
option = dataObj.options[0];
}
else if (dataObj instanceof Option) {
option = dataObj;
}
if (option) {
break;
}
}
return option;
}
search(search, searchFilter) {
search = search.trim();
if (search === '') {
Expand Down Expand Up @@ -293,9 +312,6 @@ class Store {
});
return dataSearch;
}
getSelectType() {
return this.selectType;
}
}

class Render {
Expand Down Expand Up @@ -415,7 +431,7 @@ class Render {
var _a;
const main = document.createElement('div');
main.dataset.id = this.settings.id;
main.id = this.settings.id;
main.setAttribute('aria-label', this.settings.ariaLabel);
main.tabIndex = 0;
main.onkeydown = (e) => {
switch (e.key) {
Expand All @@ -439,6 +455,7 @@ class Render {
this.callbacks.close();
return false;
}
return false;
};
main.onclick = (e) => {
if (this.settings.disabled) {
Expand Down Expand Up @@ -475,13 +492,15 @@ class Render {
this.updateDeselectAll();
}
else {
this.callbacks.setSelected([''], false);
const firstOption = this.store.getFirstOption();
const value = firstOption ? firstOption.value : '';
this.callbacks.setSelected(value, false);
}
if (this.settings.closeOnSelect) {
this.callbacks.close();
}
if (this.callbacks.afterChange) {
this.callbacks.afterChange(after);
this.callbacks.afterChange(this.store.getSelectedOptions());
}
}
};
Expand Down Expand Up @@ -704,7 +723,6 @@ class Render {
contentDiv() {
const main = document.createElement('div');
main.dataset.id = this.settings.id;
main.id = this.settings.id;
const search = this.searchDiv();
main.appendChild(search.main);
const list = this.listDiv();
Expand Down Expand Up @@ -785,6 +803,7 @@ class Render {
}
return true;
}
return true;
};
main.appendChild(input);
if (this.callbacks.addable) {
Expand Down Expand Up @@ -888,6 +907,20 @@ class Render {
return;
}
}
let highlighted = false;
for (const o of options) {
if (o.classList.contains(this.classes.highlighted)) {
highlighted = true;
}
}
if (!highlighted) {
for (const o of options) {
if (o.classList.contains(this.classes.selected)) {
o.classList.add(this.classes.highlighted);
break;
}
}
}
for (let i = 0; i < options.length; i++) {
if (options[i].classList.contains(this.classes.highlighted)) {
const prevOption = options[i];
Expand Down Expand Up @@ -1260,7 +1293,8 @@ class Select {
this.listen = false;
this.observer = null;
this.select = select;
this.select.addEventListener('change', this.valueChange.bind(this), {
this.valueChange = this.valueChange.bind(this);
this.select.addEventListener('change', this.valueChange, {
passive: true,
});
this.observer = new MutationObserver(this.observeCall.bind(this));
Expand Down Expand Up @@ -1516,7 +1550,7 @@ class Select {
}
destroy() {
this.changeListen(false);
this.select.removeEventListener('change', this.valueChange.bind(this));
this.select.removeEventListener('change', this.valueChange);
if (this.observer) {
this.observer.disconnect();
this.observer = null;
Expand Down
Loading

0 comments on commit 94de2bd

Please sign in to comment.