{"version":3,"file":"select25.js","sources":["../node_modules/tslib/tslib.es6.js","../node_modules/preact/dist/preact.module.js","../control/src/announce.ts","../control/src/dictionary.ts","../control/src/util.ts","../control/src/abstract-select.tsx","../control/src/dropdown.tsx","../control/src/icons.tsx","../control/src/style.ts","../control/src/result-list.tsx","../control/src/multi-select.tsx","../control/src/single-select.tsx","../bridge/src/store.ts","../bridge/src/select25.tsx","../bridge/src/ajax.ts","../bridge/src/data.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","var n,l,u,t,i,r,f={},e=[],o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i;function c(n,l){for(var u in l)n[u]=l[u];return n}function s(n){var l=n.parentNode;l&&l.removeChild(n)}function a(n,l,u){var t,i,r,f,e=arguments;if(l=c({},l),arguments.length>3)for(u=[u],t=3;t2&&(l.children=e.slice.call(arguments,2)),h(n.type,l,l.key||n.key,l.ref||n.ref)}function L(n){var l={},u={__c:\"__cC\"+r++,__p:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var t,i=this;return this.getChildContext||(t=[],this.getChildContext=function(){return l[u.__c]=i,l},this.shouldComponentUpdate=function(n){t.some(function(l){l.__P&&(l.context=n.value,b(l))})},this.sub=function(n){t.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){t.splice(t.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Consumer.contextType=u,u}n={},d.prototype.setState=function(n,l){var u=this.__s!==this.state&&this.__s||(this.__s=c({},this.state));(\"function\"!=typeof n||(n=n(u,this.props)))&&c(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),b(this))},d.prototype.forceUpdate=function(n){var l,u,t,i=this.__v,r=this.__v.__e,f=this.__P;f&&(l=!1!==n,u=[],t=N(f,i,c({},i),this.__n,void 0!==f.ownerSVGElement,null,u,l,null==r?m(i):r),$(u,i),t!=r&&w(i)),n&&n()},d.prototype.render=p,l=[],u=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,t=/[A-Z]/g,i=\"http://www.w3.org/1999/xlink\",r=0;export{D as render,H as hydrate,a as createElement,a as h,p as Fragment,v as createRef,d as Component,I as cloneElement,L as createContext,_ as toChildArray,O as _unmount,n as options};\n//# sourceMappingURL=preact.module.js.map\n","export function initialize() {\n if (document.getElementById('s25-live')) {\n return;\n }\n\n const live = document.createElement('div');\n live.setAttribute('id', 's25-live');\n live.setAttribute('class', 's25-offscreen s25-live');\n document.body.appendChild(live);\n\n const assertive = document.createElement('div');\n assertive.setAttribute('id', 's25-live-assertive');\n assertive.setAttribute('role', 'log');\n assertive.setAttribute('aria-live', 'assertive');\n assertive.setAttribute('aria-relevant', 'additions');\n live.appendChild(assertive);\n\n const polite = document.createElement('div');\n polite.setAttribute('id', 's25-live-polite');\n polite.setAttribute('role', 'log');\n polite.setAttribute('aria-live', 'polite');\n polite.setAttribute('aria-relevant', 'additions');\n live.appendChild(polite);\n}\n\nexport function assertively(message: string) {\n add(message, document.getElementById('s25-live-assertive')!);\n}\n\nexport function politely(message: string) {\n add(message, document.getElementById('s25-live-polite')!);\n}\n\nfunction add(message: string, container: HTMLElement) {\n const node = document.createElement('div');\n node.appendChild(document.createTextNode(message));\n container.appendChild(node);\n\n // clean up old nodes\n\n let collection = document.getElementById('s25-live-assertive')!;\n while (collection.firstChild && collection.firstChild !== node) {\n collection.removeChild(collection.firstChild);\n }\n collection = document.getElementById('s25-live-polite')!;\n while (collection.firstChild && collection.firstChild !== node) {\n collection.removeChild(collection.firstChild);\n }\n}\n","// TODO make it so keys can be strings in addition to functions\nexport interface Dictionary {\n valueAdded(itemLabel: string): string;\n noSearchResults(): string;\n searchResultsLoading(): string;\n removeButtonTitle(): string;\n clearButtonTitle(): string;\n minimumCharactersMessage(len: number, min: number): string;\n multiSelectInstructions(): string;\n expandButtonTitle(): string;\n}\n\nconst EN_US: Dictionary = {\n noSearchResults() {\n return 'No results available';\n },\n\n searchResultsLoading() {\n return 'Loading...';\n },\n\n removeButtonTitle() {\n return 'Remove selected values';\n },\n\n clearButtonTitle() {\n return 'Clear selection';\n },\n\n valueAdded(itemLabel: string) {\n return itemLabel + ' added';\n },\n\n minimumCharactersMessage(len: number, min: number) {\n const delta = min - len;\n return 'Please enter ' + delta + ' more character' + (delta > 1 ? 's' : '');\n },\n\n multiSelectInstructions(): string {\n return \"Items can be removed from this list box by selecting them and activating 'Remove selected values' button. Items can be added by selecting them in the adjacent combobox.\";\n },\n\n expandButtonTitle(): string {\n return 'Expand';\n }\n};\n\nconst dictionaries = new Map();\ndictionaries.set('en_us', EN_US);\n\nexport function getDictionary(dict?: string | undefined): Dictionary {\n const fallback: Dictionary = dictionaries.get('en_us') as Dictionary;\n\n if (!dict) {\n return fallback;\n }\n\n if (typeof dict === 'string') {\n const instance = dictionaries.get(dict);\n return instance ? instance : fallback;\n } else {\n return dict;\n }\n}\n","import { ComponentChild } from 'preact';\n\nexport function extend(...params: object[]) {\n for (let i = 1; i < arguments.length; i++) {\n for (const key in arguments[i]) {\n if (arguments[i].hasOwnProperty(key)) {\n if (typeof arguments[0][key] === 'object' && typeof arguments[i][key] === 'object') {\n extend(arguments[0][key], arguments[i][key]);\n } else {\n arguments[0][key] = arguments[i][key];\n }\n }\n }\n }\n return arguments[0];\n}\n\nexport type DeepPartial = {\n [P in keyof T]?: T[P] extends Array\n ? Array>\n : T[P] extends ReadonlyArray\n ? ReadonlyArray>\n : DeepPartial\n};\n\nexport const merge = (target: T, sources: Array>): T => {\n if (!sources.length) {\n return target;\n }\n const source = sources.shift();\n if (source === undefined) {\n return merge(target, sources);\n }\n\n if (isMergebleObject(target) && isMergebleObject(source)) {\n Object.keys(source).forEach((key: string) => {\n if (isMergebleObject(source[key])) {\n if (!target[key]) {\n target[key] = {};\n }\n merge(target[key], [source[key]]);\n } else {\n target[key] = source[key];\n }\n });\n }\n\n return merge(target, sources);\n};\n\nconst isObject = (item: any): boolean => {\n return item !== null && typeof item === 'object';\n};\n\nconst isMergebleObject = (item): boolean => {\n return isObject(item) && !Array.isArray(item);\n};\n\nexport function cn(...values: any) {\n const classes: string[] = [];\n const hasOwnProperty = {}.hasOwnProperty;\n\n for (const value of values) {\n if (typeof value === 'string') {\n classes.push(value);\n } else if (typeof value === 'object') {\n for (const key in value as object) {\n if (hasOwnProperty.call(value, key) && value[key]) {\n classes.push(key);\n }\n }\n }\n }\n\n return classes.join(' ');\n}\n\nexport enum Key {\n // https://www.w3.org/TR/uievents-key/#named-key-attribute-values\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n Space = ' ',\n Enter = 'Enter',\n Tab = 'Tab',\n Home = 'Home',\n End = 'End',\n PageUp = 'PageUp',\n PageDown = 'PageDown',\n Backspace = 'Backspace',\n Delete = 'Delete',\n Clear = 'Clear',\n Escape = 'Escape',\n // IE 11\n Down = 'Down',\n Up = 'Up',\n Spacebar = 'Spacebar',\n Left = 'Left',\n Right = 'Right'\n}\n\nexport const uuid = (() => {\n let counter = 0;\n return () => 's25-' + counter++;\n})();\n\nexport function throttle(delay: number, callback: () => void): () => void {\n let timeout: number | undefined;\n return () => {\n if (timeout !== undefined) {\n window.clearTimeout(timeout);\n timeout = undefined;\n } else {\n timeout = window.setTimeout(() => {\n callback();\n timeout = undefined;\n }, delay);\n }\n };\n}\n\n// @ts-ignore\nexport function debounce(quiet: number, delegate: (...args: any[]) => void, that: object) {\n const args = Array.from(arguments);\n if (quiet <= 0) {\n return () => {\n delegate.apply(that, args);\n };\n } else {\n let timeout: number | undefined;\n return () => {\n if (timeout) {\n window.clearTimeout(timeout);\n }\n timeout = window.setTimeout(() => {\n timeout = undefined;\n delegate.apply(that, args);\n }, quiet);\n };\n }\n}\n\nexport function getScrollParents(el: HTMLElement): EventTarget[] {\n const style = window.getComputedStyle(el);\n const elementPosition = style.position;\n if (elementPosition === 'fixed') {\n return [el];\n }\n\n const parents: Array = [];\n let parent = el.parentElement;\n\n while (parent && parent.nodeType === 1) {\n const css = window.getComputedStyle(parent);\n if (/(overlay|scroll|auto)/.test(css.overflow + ' ' + css.overflowX + ' ' + css.overflowY)) {\n if (elementPosition !== 'absolute' || ['relative', 'fixed', 'absolute'].indexOf(css.position || '') >= 0) {\n parents.push(parent);\n }\n }\n parent = parent.parentElement;\n }\n\n if (el.ownerDocument) {\n parents.push(el.ownerDocument.body);\n }\n\n // iframe\n if (el.ownerDocument !== document && el.ownerDocument && el.ownerDocument.defaultView) {\n parents.push(el.ownerDocument.defaultView);\n }\n\n parents.push(window);\n return parents;\n}\n\nexport function calculateVerticalVisibility(\n container: HTMLElement,\n element: HTMLElement\n): 'hidden' | 'partial-top' | 'partial-bottom' | 'visible' {\n const c = container.getBoundingClientRect();\n const e = element.getBoundingClientRect();\n\n if (e.bottom < c.top) {\n // above the fold\n return 'hidden';\n }\n\n if (e.top > c.bottom) {\n // below the fold\n return 'hidden';\n }\n\n if (e.top < c.top && e.bottom <= c.bottom) {\n return 'partial-top';\n }\n\n if (e.top >= c.top && e.bottom > c.bottom) {\n return 'partial-bottom';\n }\n\n return 'visible';\n}\n\nexport type MouseEventListener = (event: MouseEvent) => void;\nexport type KeyboardEventListener = (event: KeyboardEvent) => void;\nexport type EventListener = (event: Event) => void;\nexport type FocusEventListener = (event: FocusEvent) => void;\n\n/** helper that makes it easier to declare a scope inside a jsx block */\nexport function scope(delegate: () => ComponentChild) {\n return delegate();\n}\n","import { Component, ComponentChild, h, h as createElement } from 'preact';\nimport * as announce from './announce';\nimport { Dictionary, getDictionary } from './dictionary';\nimport { DeepPartial, Key, merge, uuid } from './util';\nconst forceImportOfH = h;\n\ntype ToString = (item: any) => string;\n\nexport type DataItemRenderer = (string) | ((item: any, h: typeof createElement) => ComponentChild);\n\nexport type QueryFunction = (search: string, page: number, token: string) => Promise;\n\nexport interface DataItem {\n id: any;\n text: string;\n}\n\nexport interface QueryResult {\n values: DataItem[];\n more: boolean;\n token: string;\n}\n\nexport interface ResultListState {\n results: any[];\n token: string;\n active: number;\n page: number;\n\n showMinimumCharactersError: boolean;\n showNoSearchResultsFound: boolean;\n showLoadMoreResults: boolean;\n}\nexport interface State {\n search: string;\n results: ResultListState;\n loading: boolean;\n open: boolean;\n focused: boolean;\n}\n\nexport interface Props {\n containerStyle?: string;\n containerClass?: string;\n tabIndex?: number;\n valueContent?: DataItemRenderer;\n resultContent?: DataItemRenderer;\n\n query: QueryFunction;\n quiet?: number;\n allowDuplicates?: boolean;\n minimumCharacters?: number;\n openOnFocus?: boolean;\n dictionary?: string | Dictionary;\n}\n\nfunction MarkupRenderer({ markup }) {\n return
;\n}\n\nexport const DEFAULT_PROPS: Partial = {\n allowDuplicates: false,\n minimumCharacters: 0,\n quiet: 50,\n tabIndex: 0\n};\n\nexport abstract class AbstractSelect

extends Component {\n private searchTimeout: number | undefined;\n protected namespace: string;\n\n constructor(props: P) {\n super(props);\n this.searchTimeout = undefined;\n this.namespace = uuid();\n // @ts-ignore\n this.state = {\n focused: false,\n loading: false,\n open: false,\n results: {\n active: -1,\n page: 0,\n results: undefined, // TODO rename to values\n token: null,\n\n showLoadMoreResults: false,\n showMinimumCharactersError: false,\n showNoSearchResultsFound: false\n },\n search: ''\n };\n }\n\n public getItemId = (item: DataItem): string => {\n return item.id;\n };\n\n public getItemLabel = (item: DataItem): string => {\n const label = item.text;\n return item.text;\n };\n\n public renderValue = (item: DataItem): ComponentChild => {\n return this.renderItem(item, 'valueContent');\n };\n\n public renderResult = (item: DataItem): ComponentChild => {\n return this.renderItem(item, 'resultContent');\n };\n\n private renderItem = (item: DataItem, rendererName: (keyof Props) & DataItemRenderer): ComponentChild => {\n const renderer = this.props[rendererName] as DataItemRenderer;\n if (renderer) {\n if (typeof renderer === 'function') {\n const render = renderer(item, createElement);\n if (typeof render === 'string') {\n return ;\n } else {\n return render;\n }\n } else {\n return ;\n }\n } else {\n return ;\n }\n };\n\n get dictionary(): Dictionary {\n const dict = this.props.dictionary;\n if (dict) {\n if (typeof dict === 'string') {\n return getDictionary(dict);\n } else {\n return dict as Dictionary;\n }\n } else {\n return getDictionary();\n }\n }\n\n protected updateState(update: DeepPartial | Array>, callback?: () => void) {\n const state = merge(this.state, Array.isArray(update) ? update : [update]);\n this.setState(state, callback);\n }\n\n public search = (query, selectedValues, start?: DeepPartial, callback?: () => void) => {\n const dictionary = this.dictionary;\n const { minimumCharacters, allowDuplicates, quiet, query: queryFunc } = this.props;\n\n const current = this.state.results;\n\n const minimumCharactersReached = query.length >= minimumCharacters;\n const token = minimumCharactersReached ? uuid() : undefined;\n\n const control = this;\n\n this.updateState(\n // @ts-ignore\n [\n start,\n {\n loading: minimumCharactersReached,\n results: {\n active: -1,\n page: 0,\n results: undefined,\n showLoadMoreResults: false,\n showMinimumCharactersError: !minimumCharactersReached,\n showNoSearchResultsFound: false,\n token\n },\n search: query\n }\n ],\n () => {\n if (callback) {\n callback();\n }\n\n if (!minimumCharactersReached) {\n // todo - throttle this announcement?\n announce.politely(dictionary.minimumCharactersMessage(query.length, minimumCharacters!));\n return;\n }\n\n // todo - throttle this announcement?\n // announce.politely(dictionary.searchResultsLoading());\n\n const execute = async () => {\n try {\n const result = await queryFunc(query, 0, token!);\n if (result.token !== control.state.results.token) {\n // this is a stale result, ignore\n return;\n }\n\n let values = result.values || [];\n if (!allowDuplicates && values.length > 0 && selectedValues.length > 0) {\n const ids = new Set();\n selectedValues.forEach(v => ids.add(control.getItemId(v)));\n values = values.filter(v => !ids.has(control.getItemId(v)));\n }\n\n if (values.length < 1) {\n announce.politely(dictionary.noSearchResults());\n }\n\n // @ts-ignore\n control.updateState({\n loading: false,\n results: {\n active: values.length > 0 ? 0 : -1,\n page: 0,\n results: values,\n showLoadMoreResults: result.more,\n showNoSearchResultsFound: values.length < 1\n }\n });\n } catch (e) {\n // @ts-ignore\n control.updateState({ loading: false });\n }\n };\n\n if (quiet && quiet > 0) {\n if (control.searchTimeout) {\n window.clearTimeout(control.searchTimeout);\n }\n control.searchTimeout = window.setTimeout(execute, quiet);\n } else {\n execute();\n }\n }\n );\n };\n\n public loadMore() {\n const {\n loading,\n search: query,\n results: { page }\n } = this.state;\n const dict = this.dictionary;\n const { query: queryFunc } = this.props;\n const control = this;\n\n if (loading) {\n return;\n }\n\n const token = uuid();\n const nextPage = page + 1;\n\n this.updateState(\n // @ts-ignore\n {\n loading: true,\n results: {\n token\n }\n },\n async () => {\n // TODO throttle?\n // announce.politely(dict.searchResultsLoading());\n\n try {\n const result = await queryFunc(query, nextPage, token);\n\n const current = control.state.results;\n\n if (result.token !== current.token) {\n // this is a stale result, ignore\n return;\n }\n\n if (result.values && result.values.length > 0) {\n // @ts-ignore\n control.updateState({\n loading: false,\n results: {\n page: nextPage,\n results: current.results.concat(result.values),\n showLoadMoreResults: result.more\n }\n });\n } else {\n announce.politely(dict.noSearchResults());\n // @ts-ignore\n control.updateState({\n loading: false,\n results: {\n showLoadMoreResults: false\n }\n });\n }\n } catch (e) {\n // @ts-ignore\n control.updateState({ loading: false });\n }\n }\n );\n }\n\n protected handleResultNavigationKeyDown(event: KeyboardEvent): boolean {\n switch (event.key) {\n case Key.ArrowUp:\n case Key.Up:\n this.selectPreviousSearchResult();\n event.preventDefault();\n return true;\n case Key.ArrowDown:\n case Key.Down:\n this.selectNextSearchResult();\n event.preventDefault();\n return true;\n }\n return false;\n }\n\n protected selectNextSearchResult() {\n const { active, results } = this.state.results;\n if (results && active < results.length - 1) {\n // @ts-ignore\n this.updateState({ results: { active: active + 1 } });\n }\n }\n\n protected selectPreviousSearchResult() {\n const { active } = this.state.results;\n if (active > 0) {\n // @ts-ignore\n this.updateState({ results: { active: active - 1 } });\n }\n }\n\n protected getSelectedSearchResult() {\n const { results, active } = this.state.results;\n return results[active];\n }\n\n protected selectSearchResult(index: number) {\n const { active } = this.state.results;\n if (active !== index) {\n // @ts-ignore\n this.updateState({ results: { active: index } });\n }\n }\n\n protected hasSearchResults() {\n const results = this.state.results.results;\n return results && results.length > 0;\n }\n}\n","import { Component, ComponentChild, Fragment, h, RefObject, render } from 'preact';\nimport { getScrollParents, MouseEventListener, throttle } from './util';\n\nclass ContextProvider extends Component<{ context: any }> {\n public getChildContext() {\n return this.props.context;\n }\n public render() {\n return this.props.children;\n }\n}\n\nfunction Portal({ vnode, container }): null {\n // @ts-ignore\n const wrap = {vnode};\n render(wrap, container);\n return null;\n}\n\nfunction createPortal(vnode, container): ComponentChild {\n return h(Portal, { vnode, container });\n}\n\ninterface Props {\n controlRef: RefObject;\n dropdownRef: RefObject;\n class?: string;\n onClick?: MouseEventListener;\n onMouseDown?: MouseEventListener;\n onFocusOut?: EventListener;\n}\n\nexport class Dropdown extends Component {\n private container?: HTMLElement;\n private scrollParents?: EventTarget[];\n private throttledPosition;\n\n constructor(props) {\n super(props);\n this.throttledPosition = throttle(50, this.position.bind(this));\n }\n\n public componentWillMount() {\n this.container = document.createElement('div');\n if (this.props.class) {\n this.container.className = this.props.class;\n }\n\n /*\n this container needs to be able to receive focus so we can tell\n it is not leaving the control - we consider dropdown part of the control\n */\n this.container.tabIndex = -1;\n if (this.props.onClick) {\n this.container.addEventListener('click', this.props.onClick);\n }\n if (this.props.onMouseDown) {\n this.container.addEventListener('mousedown', this.props.onMouseDown);\n }\n if (this.props.onFocusOut) {\n this.container.addEventListener('focusout', this.props.onFocusOut);\n }\n document.body.appendChild(this.container);\n }\n\n public componentDidMount() {\n this.props.dropdownRef.current = this.container;\n this.scrollParents = getScrollParents(this.props.controlRef.current!);\n this.scrollParents.forEach(parent => {\n ['resize', 'scroll', 'touchmove'].forEach(event => {\n parent.addEventListener(event, this.throttledPosition);\n });\n });\n this.position();\n }\n\n public componentWillUnmount() {\n if (this.scrollParents) {\n this.scrollParents.forEach(parent => {\n ['resize', 'scroll', 'touchmove'].forEach(event => {\n parent.removeEventListener(event, this.throttledPosition);\n });\n });\n delete this.scrollParents;\n this.scrollParents = undefined;\n }\n\n this.props.dropdownRef.current = undefined;\n this.container!.parentElement!.removeChild(this.container!);\n }\n\n public componentDidUpdate() {\n this.position();\n }\n\n public render(props) {\n return createPortal({this.props.children}, this.container!);\n }\n\n private position() {\n const control = this.props.controlRef.current!;\n const rect = control.getBoundingClientRect();\n const style = `top: ${rect.top + rect.height + window.pageYOffset}px;\n left: ${rect.left + window.pageXOffset}px;\n width: ${rect.width}px;`;\n this.container!.setAttribute('style', style);\n }\n}\n","import { FunctionComponent, h } from 'preact';\n\nconst forceImportOfH = h;\n\ninterface Props {\n width: number;\n height: number;\n}\n\nexport const Toggle: FunctionComponent = ({ height, width }) => {\n const viewBox = '0 0 ' + width + ' ' + height;\n return (\n \n \n \n );\n};\nToggle.displayName = 'Toggle';\n\nexport const Remove: FunctionComponent = ({ width, height }) => {\n const viewBox = '0 0 ' + width + ' ' + height;\n return (\n \n \n \n );\n};\nRemove.displayName = 'Remove';\n","export const enum style {\n control = 's25-control',\n content = 's25-content',\n single = 's25-single',\n multi = 's25-multi',\n body = 's25-body',\n focused = 's25-focused',\n active = 's25-active',\n live = 's25-live',\n multiValues = 's25-multi-values',\n value = 's25-value',\n item = 's25-item',\n selected = 's25-selected',\n toggle = 's25-toggle',\n remove = 's25-remove',\n open = 's25-open',\n label = 's25-label',\n search = 's25-search',\n offscreen = 's25-offscreen',\n searchContainer = 's25-search-container',\n dropdown = 's25-dropdown',\n searchResults = 's25-search-results',\n options = 's25-options',\n noSearchResults = 's25-no-search-results',\n searchResultsMessage = 's25-search-results-message',\n searchResultsLoading = 's25-search-results-loading',\n searchResultsMinimumError = 's25-search-results-minimum-error',\n hiddenAccessible = 's25-hidden-accessible',\n hidden = 's25-hidden',\n placeholder = 's25-placeholder',\n scroll = 's25-scroll'\n}\n","import { Component, ComponentChild, createRef, h, RefObject } from 'preact';\nimport { Dictionary } from './dictionary';\nimport { style } from './style';\nimport { calculateVerticalVisibility, cn } from './util';\n\nconst forceImportOfH = h;\n\n// TODO if upon render loading is visible signal loadmore\n\ninterface Props {\n // TODO consistenly call search a query\n namespace: string;\n search: string;\n listboxDomId?: string;\n results: any[];\n token: string;\n active: number;\n page: number;\n loading: boolean;\n\n itemLabel: (item: any) => string;\n renderItem: (item: any) => ComponentChild;\n\n dictionary: Dictionary;\n minimumCharacters: number;\n\n showMinimumCharactersError: boolean;\n showNoSearchResultsFound: boolean;\n showLoadMoreResults: boolean;\n\n onResultClicked: (result: any, event: MouseEvent) => void;\n onMouseMove: (index: any, event: MouseEvent) => void;\n onLoadMore: () => void;\n}\n\nexport class ResultList extends Component {\n private container: RefObject;\n private lastMouseClientX?: number;\n private lastMouseClientY?: number;\n private loadMore: RefObject;\n constructor(props) {\n super(props);\n this.container = createRef();\n this.loadMore = createRef();\n }\n\n private getResultDomId(index: number) {\n return this.props.namespace + index;\n }\n\n public render(props, state, context) {\n const { dictionary, minimumCharacters, showLoadMoreResults, results } = props;\n const query = this.props.search;\n\n return (\n

\n \n {props.loading && (\n
\n {dictionary.searchResultsLoading()}\n
\n )}\n {props.showNoSearchResultsFound && (\n
\n {dictionary.noSearchResults()}\n
\n )}\n {props.showMinimumCharactersError && (\n
\n {dictionary.minimumCharactersMessage(query.length, minimumCharacters)}\n
\n )}\n {results && results.length > 0 && (\n = 0 ? this.getResultDomId(props.active) : undefined}\n >\n {results.map((result, index) => {\n const label = props.itemLabel(result);\n const render = props.renderItem(result);\n const active = props.active === index;\n const css = cn(style.item, {\n [style.active]: active\n });\n const id = this.getResultDomId(index);\n return (\n \n
{render}
\n
\n );\n })}\n \n )}\n {props.showLoadMoreResults && (\n \n {dictionary.searchResultsLoading()}\n \n )}\n \n \n );\n }\n\n private onResultClicked = (result: any) => (event: MouseEvent) => {\n this.props.onResultClicked(result, event);\n };\n\n private onMouseMove = (index: number) => (event: MouseEvent) => {\n if (this.lastMouseClientX === event.clientX && this.lastMouseClientY === event.clientY) {\n // the mouse did not move, the dropdown was scrolled instead, we do not change selected element because\n // it will be scrolled into view and mess with the scrolling of the results in the dropdown\n return;\n }\n this.lastMouseClientX = event.clientX;\n this.lastMouseClientY = event.clientY;\n\n this.props.onMouseMove(index, event);\n };\n\n private onScroll = (event: Event) => {\n if (!this.props.showLoadMoreResults) {\n return;\n }\n const more = this.loadMore.current!;\n const drop = this.container.current!;\n\n const visibility = calculateVerticalVisibility(drop, more);\n if (visibility !== 'hidden') {\n this.props.onLoadMore();\n }\n };\n\n public componentDidUpdate(prevProps: Props, prevState: Props) {\n const { active, results, showLoadMoreResults } = this.props;\n const { active: prevActive } = prevProps;\n\n if (active !== prevActive) {\n if (active >= 0 && results && results.length > 0 && active === results.length - 1 && showLoadMoreResults) {\n // last result is selected and load more is shown, make sure it is scrolled into view\n\n const drop = this.container.current!;\n const el = this.loadMore.current!;\n\n drop.scrollTop = el.offsetTop + el.offsetHeight - drop.clientHeight;\n\n // console.log(\"scrolling to see load more\");//, setting scrolltop\", drop, el, el.offsetTop - drop.clientHeight);\n } else if (active >= 0) {\n // make sure it is scrolled into view\n const id = this.getResultDomId(active);\n const el = document.getElementById(id);\n if (el != null) {\n const drop = this.container!.current!;\n const c = drop.getBoundingClientRect();\n const e = el.getBoundingClientRect();\n\n if (e.top < c.top && e.bottom <= c.bottom) {\n const delta = c.top - e.top;\n drop.scrollTop = drop.scrollTop - delta;\n }\n\n if (e.top >= c.top && e.bottom > c.bottom) {\n const delta = e.bottom - c.bottom;\n drop.scrollTop = drop.scrollTop + delta;\n }\n }\n }\n }\n }\n}\n","import { createRef, Fragment, h, RefObject } from 'preact';\nimport {\n AbstractSelect,\n DataItem,\n DEFAULT_PROPS as ABSTRACT_DEFAULT_PROPS,\n Props as SearchControllerProps,\n State as AbstractSelectState\n} from './abstract-select';\nimport * as announce from './announce';\nimport { Dropdown } from './dropdown';\nimport { Remove, Toggle } from './icons';\nimport { ResultList } from './result-list';\nimport { style } from './style';\nimport { cn, extend, Key, scope } from './util';\n\nconst forceImportOfH = h;\n\nexport interface Props extends SearchControllerProps {\n valuesLabel: string;\n comboboxLabel: string;\n values: DataItem[];\n onChange: (values: DataItem[]) => void;\n}\n\ninterface ValueListState {\n active: number;\n selected: boolean[];\n}\n\ninterface State extends AbstractSelectState {\n values: ValueListState;\n}\n\nconst DEFAULT_PROPS = extend({}, ABSTRACT_DEFAULT_PROPS, { values: [] });\n\nexport class MultiSelect extends AbstractSelect {\n private containerRef: RefObject;\n private dropdownRef: RefObject;\n private bodyRef: RefObject;\n private valuesRef: RefObject;\n private searchRef: RefObject;\n\n public static defaultProps = DEFAULT_PROPS;\n\n constructor(props) {\n super(props);\n const { values } = props;\n\n this.valuesRef = createRef();\n this.searchRef = createRef();\n this.bodyRef = createRef();\n this.containerRef = createRef();\n this.dropdownRef = createRef();\n\n this.state = extend(this.state, {\n values: {\n active: -1,\n selected: values.map(v => false)\n }\n });\n }\n\n public componentWillMount() {\n announce.initialize();\n }\n\n public render(props, state) {\n const { values, tabIndex, minimumCharacters, valuesLabel, comboboxLabel, placeholder } = props;\n const {\n open,\n loading,\n focused,\n search,\n values: { active, selected },\n results\n } = state;\n const dictionary = this.dictionary;\n\n let classes = cn(style.control, style.multi, { [style.open]: open }, { [style.focused]: focused });\n if (props.containerClass && props.containerClass.length > 0) {\n classes += ' ' + props.containerClass;\n }\n\n const instructionsDomId = this.namespace + '-instructions';\n const resultsDomId = this.namespace + '-results';\n const resultsNamespace = this.namespace + '-res-';\n return (\n \n \n
\n
\n {dictionary.multiSelectInstructions()}\n
\n {scope(() => {\n const activeDescendant = active >= 0 ? this.namespace + '-vl-' + active : undefined;\n if (values && values.length > 0) {\n return (\n \n {values.map((value: DataItem, index: number) => {\n const isSelected = selected[index];\n const isActive = active === index;\n const css = cn(style.item, {\n [style.selected]: isSelected,\n [style.active]: isActive\n });\n const id = this.namespace + '-vl-' + index;\n const label = this.getItemLabel(value);\n const render = this.renderValue(value);\n return (\n e.stopPropagation()}\n onClick={this.onValueClick(index)}\n >\n
{render}
\n
\n );\n })}\n \n );\n } else {\n return null;\n }\n })}\n {scope(() => {\n const disabled = !selected.find(x => x === true);\n const className = cn(style.remove, {\n [style.offscreen]: values.length < 1\n });\n return (\n \n \n \n \n \n );\n })}\n \n = 0 ? resultsNamespace + results.active : undefined}\n aria-busy={loading}\n onInput={this.onSearchInput}\n onKeyDown={this.onSearchKeyDown}\n onFocus={this.onSearchFocus}\n placeholder={placeholder}\n />\n \n \n \n \n \n {open && (\n \n \n \n )}\n
\n );\n }\n\n public componentDidMount() {\n const css = this.props.containerStyle;\n if (css && css.length > 0) {\n this.containerRef.current!.setAttribute('style', css);\n }\n }\n\n private onLoadMoreResults = () => {\n this.loadMore();\n };\n\n private focusSearchAndStopPropagation = (event: Event) => {\n this.searchRef.current!.focus();\n event.preventDefault();\n event.stopPropagation();\n };\n\n public onToggleClick = (event: MouseEvent) => {\n const { open } = this.state;\n if (open) {\n this.close();\n this.searchRef.current!.focus();\n } else {\n this.search(this.state.search, this.props.values, { open: true });\n this.searchRef.current!.focus();\n }\n event.preventDefault();\n event.stopPropagation();\n };\n\n public onBodyClick = (event: MouseEvent) => {\n if (event.target === this.bodyRef.current) {\n // if the element itself was clicked, (white space inside the body)\n this.searchRef.current!.focus();\n }\n };\n\n public onFocusIn = (event: FocusEvent) => {\n this.updateState({ focused: true });\n };\n\n public onFocusOut = (event: FocusEvent) => {\n const receiver = event.relatedTarget as Node;\n const container = this.containerRef.current!;\n const dropdown = this.dropdownRef.current!;\n const focused =\n container.contains(receiver) || (dropdown && (dropdown === receiver || dropdown.contains(receiver)));\n\n this.updateState({\n focused\n });\n if (!focused) {\n this.closeIfOpen();\n }\n };\n\n public onSearchFocus = (event: FocusEvent) => {\n const { openOnFocus } = this.props;\n const { open } = this.state;\n if (!open && openOnFocus) {\n this.search(this.searchRef.current!.value, this.props.values, { open: true });\n }\n };\n\n public onResultMouseMove = (index: number, event: MouseEvent) => {\n this.selectSearchResult(index);\n };\n\n public selectActiveResult = () => {\n this.selectResult(this.getSelectedSearchResult());\n };\n\n public selectResult = (result: any) => {\n const { values, onChange } = this.props;\n const next = values.slice();\n next.push(result);\n\n this.close();\n\n const label = this.getItemLabel(result);\n announce.politely(this.dictionary.valueAdded(label));\n\n onChange(next);\n };\n\n public toggleValue = (index: number) => {\n const {\n values: { selected }\n } = this.state;\n const next = selected.slice();\n next[index] = !next[index];\n this.updateState({ values: { selected: next, active: index } });\n };\n\n public onRemoveSelectedFocus = (event: FocusEvent) => {\n this.closeIfOpen();\n };\n\n public onRemoveSelectedClick = (event: Event) => {\n const {\n values: { selected }\n } = this.state;\n const { values, onChange } = this.props;\n const next = values.slice().filter((value, index) => !selected[index]);\n this.updateState({\n values: {\n selected: next.map(v => false)\n }\n });\n onChange(next);\n\n this.searchRef.current!.focus();\n };\n\n public onSearchInput = (event: Event) => {\n const value = (event.target as HTMLInputElement).value;\n this.search(value, this.props.values, { open: true });\n };\n\n public onSearchKeyDown = (event: KeyboardEvent) => {\n const { open } = this.state;\n\n if (open) {\n if (this.handleResultNavigationKeyDown(event)) {\n return;\n }\n if (this.hasSearchResults) {\n switch (event.key) {\n case Key.Enter:\n this.selectActiveResult();\n event.preventDefault();\n break;\n case Key.Escape:\n if (open) {\n this.close();\n }\n event.preventDefault();\n break;\n }\n }\n } else {\n switch (event.key) {\n case Key.ArrowDown:\n case Key.Down:\n case Key.Enter:\n this.search('', this.props.values, { open: true });\n break;\n }\n }\n };\n\n public onValueClick = (index: number) => (event: MouseEvent) => {\n this.toggleValue(index);\n event.preventDefault();\n event.stopPropagation();\n };\n\n public onValuesFocus = (event: Event) => {\n const {\n values: { active, selected }\n } = this.state;\n const { values } = this.props;\n\n // highlight the first selected value\n if (active < 0 && values.length > 0) {\n let index = 0;\n for (let i = 0; i < selected.length; i++) {\n if (selected[i]) {\n index = i;\n break;\n }\n }\n this.updateState({ values: { active: index } });\n }\n this.closeIfOpen();\n };\n\n public closeIfOpen() {\n if (this.state.open) {\n this.close();\n }\n }\n\n public close = () => {\n this.updateState({\n open: false,\n results: { results: undefined },\n search: ''\n });\n };\n\n public onValuesBlur = (event: Event) => {\n this.updateState({ values: { active: -1 } });\n };\n\n public onValuesKeyDown = (event: KeyboardEvent) => {\n const active = this.state.values.active;\n const { values } = this.props;\n\n switch (event.key) {\n case Key.ArrowLeft:\n case Key.ArrowUp:\n case Key.Up:\n case Key.Left: {\n if (active > 0) {\n this.updateState({ values: { active: active - 1 } });\n }\n event.preventDefault();\n break;\n }\n case Key.ArrowRight:\n case Key.Right:\n case Key.ArrowDown:\n case Key.Down: {\n if (active < values.length - 1) {\n this.updateState({ values: { active: active + 1 } });\n }\n event.preventDefault();\n break;\n }\n case Key.PageDown: {\n // TODO\n event.preventDefault();\n break;\n }\n case Key.PageUp: {\n // TODO\n event.preventDefault();\n break;\n }\n case Key.Home: {\n this.updateState({ values: { active: 0 } });\n event.preventDefault();\n break;\n }\n case Key.End: {\n this.updateState({ values: { active: values.length - 1 } });\n event.preventDefault();\n break;\n }\n case Key.Space:\n case Key.Spacebar: {\n this.toggleValue(active);\n event.preventDefault();\n break;\n }\n }\n };\n\n public onDropdownClick = (event: MouseEvent) => {\n // result clicks do not make it this far because they do not propagate\n // so this click is on something other than result\n event.preventDefault();\n event.stopPropagation();\n this.searchRef.current!.focus();\n };\n\n public onResultClicked = (result: any, event: MouseEvent) => {\n this.selectResult(result);\n this.searchRef.current!.focus();\n event.preventDefault();\n event.stopPropagation();\n };\n}\n","import { createRef, Fragment, h, RefObject } from 'preact';\nimport {\n AbstractSelect,\n DEFAULT_PROPS as ABSTRACT_DEFAULT_PROPS,\n Props as AbstractSelectProps,\n State as AbstractSelectState\n} from './abstract-select';\nimport * as announce from './announce';\nimport { Dropdown } from './dropdown';\nimport { Remove, Toggle } from './icons';\nimport { ResultList } from './result-list';\nimport { style } from './style';\nimport { cn, DeepPartial, extend, Key, scope } from './util';\n\nconst forceImportOfH = h;\n\nexport interface Props extends AbstractSelectProps {\n value: any;\n label: string;\n comboboxLabel: string;\n onChange: (value: any) => void;\n allowClear?: boolean;\n placeholder?: string;\n}\n\ninterface State extends AbstractSelectState {\n value: any;\n}\n\nconst DEFAULT_PROPS = extend({}, ABSTRACT_DEFAULT_PROPS, { allowClear: false });\n\nexport class SingleSelect extends AbstractSelect {\n private containerRef: RefObject;\n private dropdownRef: RefObject;\n private bodyRef: RefObject;\n private searchRef: RefObject;\n private valueRef: RefObject;\n\n public static defaultProps = DEFAULT_PROPS;\n\n constructor(props) {\n super(props);\n\n this.searchRef = createRef();\n this.bodyRef = createRef();\n this.containerRef = createRef();\n this.dropdownRef = createRef();\n this.valueRef = createRef();\n\n this.state = extend(this.state, { value: this.props.value });\n }\n\n public componentWillMount() {\n announce.initialize();\n }\n\n public render(props, state) {\n const { minimumCharacters, tabIndex, label, allowClear, placeholder } = props;\n const { value, open, loading, focused, search, results } = state;\n\n let classes = cn(style.control, style.single, { [style.open]: open }, { [style.focused]: focused });\n if (props.containerClass && props.containerClass.length > 0) {\n classes += ' ' + props.containerClass;\n }\n const resultsDomId = this.namespace + '-results';\n const optionDomId = this.namespace + '-val';\n const resultsNamespace = this.namespace + '-res-';\n const dictionary = this.dictionary;\n const showPlaceholder = !value && placeholder && placeholder.length > 0;\n const placeholderDomId = this.namespace + '-placeholder';\n return (\n \n \n
\n
\n )}\n {showPlaceholder && (\n
\n {placeholder}\n
\n )}\n \n {scope(() => {\n const disabled = !value;\n const clazz = cn(style.remove, { [style.offscreen]: !allowClear });\n return (\n \n \n \n \n \n );\n })}\n
\n \n
\n \n \n {open && (\n \n
\n = 0 ? resultsNamespace + results.active : undefined\n }\n aria-busy={loading}\n onInput={this.onSearchInput}\n onKeyDown={this.onSearchKeyDown}\n onFocus={this.onSearchFocus}\n />\n \n
\n \n )}\n
\n );\n }\n\n public componentDidMount() {\n const css = this.props.containerStyle;\n if (css && css.length > 0) {\n this.containerRef.current!.setAttribute('style', css);\n }\n }\n\n private onLoadMoreResults = () => {\n this.loadMore();\n };\n\n public onFocusIn = (event: FocusEvent) => {\n this.updateState({ focused: true });\n\n const { openOnFocus } = this.props;\n const { open } = this.state;\n if (!open && openOnFocus && this.searchRef.current !== document.activeElement) {\n this.open();\n }\n };\n\n public onFocusOut = (event: FocusEvent) => {\n const receiver = event.relatedTarget as Node;\n const container = this.containerRef.current;\n const dropdown = this.dropdownRef.current;\n const search = this.searchRef.current;\n\n const focused =\n container.contains(receiver) ||\n (dropdown && (dropdown === receiver || dropdown.contains(receiver))) ||\n receiver === search;\n\n if (this.state.focused !== focused) {\n this.updateState({\n focused\n });\n }\n if (!focused) {\n this.closeIfOpen();\n }\n };\n\n public closeIfOpen() {\n if (this.state.open) {\n this.close();\n }\n }\n\n public close = (state?: DeepPartial) => {\n const control = this;\n control.valueRef.current!.focus();\n this.updateState([\n state,\n {\n open: false,\n results: { results: null },\n search: ''\n }\n ]);\n };\n\n private getValueAsArray() {\n return this.state.value ? [this.state.value] : [];\n }\n\n private onContainerMouseDown = (event: MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n if (this.state.open) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private open(query: string = '') {\n this.search(query, this.getValueAsArray(), { open: true }, () => {\n this.searchRef.current.focus();\n });\n }\n\n private onSearchFocus = (event: FocusEvent) => {\n this.updateState({ focused: true });\n };\n\n private onSearchInput = (event: Event) => {\n const value = (event.target as HTMLInputElement).value;\n this.search(value, this.getValueAsArray());\n };\n\n private onClearFocus = (event: FocusEvent) => {\n this.closeIfOpen();\n };\n\n private onClearClick = (event: Event) => {\n this.selectResult(undefined);\n event.preventDefault();\n event.stopPropagation();\n };\n\n private onClearMouseDown = (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n };\n\n public onSearchKeyDown = (event: KeyboardEvent) => {\n if (this.handleResultNavigationKeyDown(event)) {\n return;\n }\n\n const { open } = this.state;\n\n if (open && this.hasSearchResults) {\n switch (event.key) {\n case Key.Enter:\n this.selectActiveResult();\n event.preventDefault();\n event.stopPropagation();\n break;\n case Key.Escape:\n this.close();\n event.preventDefault();\n event.stopPropagation();\n break;\n case Key.Tab:\n // TODO select on tab?\n this.close();\n event.preventDefault();\n event.stopPropagation();\n }\n }\n };\n\n public selectActiveResult = () => {\n const { active } = this.state.results;\n if (active >= 0) {\n this.selectResult(this.getSelectedSearchResult());\n }\n };\n\n public selectResult = (result: any) => {\n const { onChange } = this.props;\n\n this.close({ value: result });\n\n // TODO announce?\n // const label = this.getItemLabel(result);\n\n onChange(result);\n };\n\n private onValueKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case Key.Space:\n case Key.ArrowDown:\n case Key.Down:\n this.open();\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n if (event.key.length === 1) {\n // focus on search which will put the printable character into the field\n this.open();\n }\n };\n\n private onDropdownMouseDown = (event: MouseEvent) => {\n this.searchRef.current.focus();\n event.preventDefault();\n event.stopPropagation();\n };\n\n public onResultMouseMove = (index: number, event: MouseEvent) => {\n this.selectSearchResult(index);\n };\n\n public onResultClicked = (result: any, event: MouseEvent) => {\n this.selectResult(result);\n event.preventDefault();\n event.stopPropagation();\n };\n}\n","export class Store {\n private static stores = new WeakMap();\n\n private store = new Map();\n\n public get(key: string): any {\n return this.store.get(key);\n }\n public set(key: string, value: any) {\n this.store.set(key, value);\n }\n\n public static getStore(key: any): Store {\n let store = Store.stores.get(key);\n if (!store) {\n store = new Store();\n Store.stores.set(key, store);\n }\n return store;\n }\n\n public static hasStore(key: any) {\n return Store.stores.has(key);\n }\n\n public static removeStore(key: any) {\n Store.stores.delete(key);\n }\n}\n","/** jsx:pragma h */\nimport { Component, h, render } from 'preact';\nimport { DataItem, DataItemRenderer, QueryFunction } from '../../control/src/abstract-select';\nimport { Dictionary } from '../../control/src/dictionary';\nimport { MultiSelect } from '../../control/src/multi-select';\nimport '../../control/src/select25.scss';\nimport { SingleSelect } from '../../control/src/single-select';\nimport { extend } from '../../control/src/util';\nimport { Ajax, createQueryFromAjax } from './ajax';\nimport { createQueryFromData, DataFunction } from './data';\nimport { Store } from './store';\n\nconst forceImportOfH = h;\n\nenum StoreKeys {\n targetElement = 'te'\n}\n\ninterface BaseSelectOptions {\n containerStyle?: string;\n containerClass?: string;\n placeholder?: string;\n tabIndex?: number;\n valueContent?: DataItemRenderer;\n resultContent?: DataItemRenderer;\n query?: QueryFunction;\n data?: DataFunction;\n ajax?: Ajax;\n quiet?: number;\n minimumCharacters?: number;\n openOnFocus?: boolean;\n dictionary?: string | Dictionary;\n}\n\ninterface MultiSelectOptions extends BaseSelectOptions {\n hiddenValue?: (values: DataItem[], options: MultiSelectOptions) => string;\n valuesLabel?: string;\n comboboxLabel?: string;\n allowDuplicates: boolean;\n values: DataItem[];\n}\n\ninterface SingleSelectOptions extends BaseSelectOptions {\n hiddenValue?: (value: DataItem, options: SingleSelectOptions) => string;\n label?: string;\n value: DataItem;\n allowClear?: boolean;\n}\n\nconst BASE_DEFAULT_OPTIONS = {\n dictionary: 'en_us',\n minimumCharacters: 0,\n openOnFocus: false\n};\n\nconst DEFAULT_MULTI_SELECT_OPTIONS = extend({}, BASE_DEFAULT_OPTIONS, {\n hiddenValue: (values: DataItem[], options: MultiSelectOptions) => {\n if (values && values.length > 0) {\n return values.map(item => item.id).join(',');\n } else {\n return '';\n }\n }\n});\n\nconst DEFAULT_SINGLE_SELECT_OPTIONS = extend({}, BASE_DEFAULT_OPTIONS, {\n allowClear: false,\n hiddenValue: (value: DataItem, options: SingleSelectOptions) => {\n if (value) {\n return value.id;\n } else {\n return '';\n }\n }\n});\n\nfunction triggerOnChange(element: HTMLElement, data: any) {\n const event = document.createEvent('HTMLEvents');\n event.initEvent('change', false, true);\n event[data] = data;\n element.dispatchEvent(event);\n}\n\nclass MultiSelectWrapper extends Component<\n {\n element: HTMLInputElement;\n options: MultiSelectOptions;\n },\n { values?: DataItem[] }\n> {\n constructor(props) {\n super(props);\n this.state = { values: props.options.values || [] };\n }\n\n public componentDidUpdate() {\n this.setHiddenValue(this.state.values);\n }\n\n public componentDidMount() {\n this.setHiddenValue(this.state.values);\n }\n\n public render(props, state, context) {\n const opts = this.props.options;\n return (\n \n );\n }\n\n public onChange = (values: any[]) => {\n this.setState({ values });\n this.setHiddenValue(values);\n triggerOnChange(this.props.element, values);\n };\n\n private setHiddenValue(values: any) {\n const { element, options } = this.props;\n element.value = options.hiddenValue(values, options);\n }\n}\n\nclass SingleSelectWrapper extends Component<\n {\n options: SingleSelectOptions;\n element: HTMLInputElement;\n },\n { value?: DataItem }\n> {\n constructor(props) {\n super(props);\n this.state = { value: props.options.value };\n }\n\n public componentDidMount() {\n this.setHiddenValue(this.state.value);\n }\n\n public componentDidUpdate() {\n this.setHiddenValue(this.state.value);\n }\n\n public render(props, state, context) {\n const opts = this.props.options;\n return (\n \n );\n }\n\n public onChange = (value: DataItem) => {\n this.setState({ value });\n this.setHiddenValue(value);\n triggerOnChange(this.props.element, value);\n };\n\n private setHiddenValue(value: DataItem) {\n const { element, options } = this.props;\n element.value = options.hiddenValue(value, options);\n }\n}\n\nfunction createSingleSelect(element: HTMLInputElement, options: SingleSelectOptions) {\n options = extend({}, DEFAULT_SINGLE_SELECT_OPTIONS, options);\n fillBaseOptions(element, options);\n\n const store = Store.getStore(element);\n\n // create placeholder element into which the control will be rendered\n const parentElement = element.parentElement;\n const targetElement = document.createElement('div');\n parentElement.insertBefore(targetElement, element);\n store.set(StoreKeys.targetElement, targetElement);\n\n render(, parentElement, targetElement);\n}\n\nfunction createMultiSelect(element: HTMLInputElement, options: SingleSelectOptions) {\n options = extend({}, DEFAULT_MULTI_SELECT_OPTIONS, options);\n fillBaseOptions(element, options);\n\n const store = Store.getStore(element);\n\n // create placeholder element into which the control will be rendered\n const parentElement = element.parentElement;\n const targetElement = document.createElement('div');\n parentElement.insertBefore(targetElement, element);\n store.set(StoreKeys.targetElement, targetElement);\n\n render(, parentElement, targetElement);\n}\n\nfunction fillBaseOptions(element: HTMLInputElement, options: BaseSelectOptions) {\n if (!options.query) {\n if (options.ajax) {\n options.query = createQueryFromAjax(options.ajax);\n } else if (options.data) {\n options.query = createQueryFromData(options.data);\n }\n }\n\n if (!options.tabIndex && element.tabIndex) {\n options.tabIndex = element.tabIndex;\n }\n\n if (element.getAttribute('data-s25-container-style')) {\n let style = options.containerStyle || '';\n if (style.length > 0) {\n style += ';';\n }\n style += element.getAttribute('data-s25-container-style');\n options.containerStyle = style;\n }\n\n if (element.getAttribute('data-s25-container-class')) {\n let clazz = options.containerClass || '';\n if (clazz.length > 0) {\n clazz += ' ';\n }\n clazz += element.getAttribute('data-s25-container-class');\n options.containerClass = clazz;\n }\n}\n\nfunction destroy(element: HTMLElement) {\n if (!Store.hasStore(element)) {\n return;\n }\n const store = Store.getStore(element);\n const targetElement = store.get(StoreKeys.targetElement);\n const parentElement = element.parentElement;\n render(null, parentElement, targetElement);\n parentElement.removeChild(targetElement);\n Store.removeStore(element);\n}\n\nconst select25 = {\n createMultiSelect,\n createSingleSelect,\n destroy\n};\n\nexport { select25 };\n\ndeclare global {\n interface Window {\n select25: typeof select25;\n }\n}\n\nwindow.select25 = select25;\n","import { QueryFunction, QueryResult } from '../../control/src/abstract-select';\nimport { extend } from '../../control/src/util';\n\nexport interface Ajax {\n url: string;\n params: (term: string, page: number) => object;\n process: (data: string) => QueryResult;\n}\n\nexport function createQueryFromAjax(ajax: Ajax): QueryFunction {\n ajax = extend({}, ajax, {\n params(term: string, page: number) {\n return { term, page };\n },\n process(data: string) {\n const json = JSON.parse(data);\n return {\n more: json.more,\n values: json.values\n };\n }\n });\n\n return (term: string, page: number, token: string) => {\n return new Promise((resolve, reject) => {\n let url = ajax.url;\n const params = ajax.params(term, page);\n if (params) {\n let separator = url.indexOf('?') >= 0 ? '&' : '?';\n Object.entries(params).forEach(([key, value]) => {\n url += separator;\n separator = '&';\n url += encodeURIComponent(key) + '=' + encodeURIComponent(value);\n });\n }\n\n const request = new XMLHttpRequest();\n request.open('GET', url, true);\n request.onload = () => {\n if (request.status >= 200 && request.status < 400) {\n const data = ajax.process(request.responseText);\n resolve({ values: data.values, more: data.more, token });\n } else {\n reject();\n }\n };\n request.onerror = reject;\n request.send();\n });\n };\n}\n","import { QueryFunction, QueryResult } from '../../control/src/abstract-select';\n\nexport interface DataParam {\n term: string;\n page: number;\n selected: any[];\n}\n\nexport interface DataResult {\n values: any[];\n more: boolean;\n}\n\nexport type DataFunction = (param: DataParam) => QueryResult;\n\nexport function createQueryFromData(callback: DataFunction): QueryFunction {\n return (term: string, page: number, token: string) => {\n return new Promise((resolve, reject) => {\n const data = callback({ term, page, selected: [] });\n resolve({ values: data.values, more: data.more, token });\n });\n };\n}\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","l","u","o","c","parentNode","removeChild","a","r","children","defaultProps","key","ref","h","type","props","__k","__p","__b","__e","__c","vnode","context","__d","debounceRendering","k","sort","__v","forceUpdate","m","w","x","N","appendChild","nextSibling","insertBefore","O","A","isArray","C","style","setProperty","replace","test","toLowerCase","slice","addEventListener","removeEventListener","options","selected","removeAttributeNS","setAttributeNS","removeAttribute","setAttribute","event","contextType","__E","render","T","sub","state","__n","__h","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","componentWillUpdate","__r","__P","getChildContext","getSnapshotBeforeUpdate","base","componentDidUpdate","nodeType","localName","document","createTextNode","createElementNS","createElement","data","childNodes","dangerouslySetInnerHTML","__html","innerHTML","multiple","keys","j","diffed","z","$","current","unmount","componentWillUnmount","getDerivedStateFromError","setState","componentDidCatch","D","ownerSVGElement","initialize","getElementById","live","assertive","polite","politely","message","container","node","collection","firstChild","add","indexOf","bind","setTimeout","dictionaries","Map","getDictionary","dict","fallback","get","instance","extend","_i","params","set","noSearchResults","searchResultsLoading","removeButtonTitle","clearButtonTitle","valueAdded","itemLabel","minimumCharactersMessage","len","min","delta","multiSelectInstructions","expandButtonTitle","Key","merge","target","sources","source","shift","undefined","isMergebleObject","forEach","item","isObject","cn","values","classes","values_1","_a","join","counter","uuid","scope","delegate","MarkupRenderer","DEFAULT_PROPS","allowDuplicates","minimumCharacters","quiet","tabIndex","tslib_1.__extends","Component","AbstractSelect","dictionary","update","callback","loading","query","page","queryFunc","control","token","nextPage","updateState","results","concat","showLoadMoreResults","more","announce.politely","ArrowUp","Up","selectPreviousSearchResult","preventDefault","ArrowDown","Down","selectNextSearchResult","active","index","_super","_this","id","text","renderItem","rendererName","renderer","markup","getItemLabel","selectedValues","start","minimumCharactersReached","showMinimumCharactersError","showNoSearchResultsFound","search","execute","ids_1","Set","getItemId","filter","has","searchTimeout","window","clearTimeout","namespace","focused","open","ContextProvider","Portal","Dropdown","class","className","onClick","onMouseDown","onFocusOut","dropdownRef","scrollParents","el","elementPosition","getComputedStyle","position","parents","parent","parentElement","css","overflow","overflowX","overflowY","ownerDocument","defaultView","getScrollParents","controlRef","throttledPosition","createPortal","Fragment","rect","getBoundingClientRect","top","height","pageYOffset","left","pageXOffset","width","delay","timeout","throttle","Toggle","viewBox","focusable","displayName","Remove","ResultList","onScroll","searchResults","searchResultsMessage","searchResultsMinimumError","role","listboxDomId","getResultDomId","map","onResultClicked","onMouseMove","content","loadMore","prevProps","drop","scrollTop","offsetTop","offsetHeight","clientHeight","bottom","lastMouseClientX","clientX","lastMouseClientY","clientY","element","calculateVerticalVisibility","onLoadMore","ABSTRACT_DEFAULT_PROPS","MultiSelect","announce.initialize","valuesLabel","comboboxLabel","placeholder","_c","multi","containerClass","instructionsDomId","resultsDomId","resultsNamespace","containerRef","onFocusCapture","onFocusIn","onBlurCapture","focusSearchAndStopPropagation","bodyRef","onBodyClick","offscreen","display","activeDescendant","valuesRef","multiValues","onFocus","onValuesFocus","onBlur","onValuesBlur","onKeyDown","onValuesKeyDown","isSelected","isActive","renderValue","stopPropagation","onValueClick","disabled","find","remove","onRemoveSelectedClick","onRemoveSelectedFocus","title","htmlFor","searchRef","onInput","onSearchInput","onSearchKeyDown","onSearchFocus","toggle","onToggleClick","dropdown","onDropdownClick","renderResult","onResultMouseMove","onLoadMoreResults","containerStyle","close","focus","receiver","relatedTarget","contains","closeIfOpen","openOnFocus","selectSearchResult","selectResult","getSelectedSearchResult","onChange","handleResultNavigationKeyDown","hasSearchResults","Enter","selectActiveResult","Escape","toggleValue","ArrowLeft","Left","ArrowRight","Right","PageDown","PageUp","Home","End","Space","Spacebar","allowClear","SingleSelect","single","optionDomId","showPlaceholder","placeholderDomId","onContainerMouseDown","valueRef","onValueKeyDown","onClearClick","onClearFocus","onClearMouseDown","onDropdownMouseDown","getValueAsArray","activeElement","Tab","StoreKeys","Store","store","stores","delete","WeakMap","BASE_DEFAULT_OPTIONS","DEFAULT_MULTI_SELECT_OPTIONS","hiddenValue","DEFAULT_SINGLE_SELECT_OPTIONS","triggerOnChange","createEvent","initEvent","dispatchEvent","MultiSelectWrapper","setHiddenValue","opts","valueContent","resultContent","SingleSelectWrapper","fillBaseOptions","ajax","term","process","json","JSON","parse","url","separator_1","entries","encodeURIComponent","request","XMLHttpRequest","onload","status","responseText","onerror","send","createQueryFromAjax","createQueryFromData","getAttribute","clazz","select25","createMultiSelect","getStore","targetElement","createSingleSelect","destroy","hasStore","removeStore"],"mappings":"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"}