function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } import { checkOptions } from './checkOptions'; import { createStore } from './createStore'; import { getAutocompleteSetters } from './getAutocompleteSetters'; import { getDefaultProps } from './getDefaultProps'; import { getPropGetters } from './getPropGetters'; import { getMetadata, injectMetadata } from './metadata'; import { onInput } from './onInput'; import { stateReducer } from './stateReducer'; export function createAutocomplete(options) { checkOptions(options); var subscribers = []; var props = getDefaultProps(options, subscribers); var store = createStore(stateReducer, props, onStoreStateChange); var setters = getAutocompleteSetters({ store: store }); var propGetters = getPropGetters(_objectSpread({ props: props, refresh: refresh, store: store }, setters)); function onStoreStateChange(_ref) { var prevState = _ref.prevState, state = _ref.state; props.onStateChange(_objectSpread({ prevState: prevState, state: state, refresh: refresh }, setters)); } function refresh() { return onInput(_objectSpread({ event: new Event('input'), nextState: { isOpen: store.getState().isOpen }, props: props, query: store.getState().query, refresh: refresh, store: store }, setters)); } props.plugins.forEach(function (plugin) { var _plugin$subscribe; return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, { refresh: refresh, onSelect: function onSelect(fn) { subscribers.push({ onSelect: fn }); }, onActive: function onActive(fn) { subscribers.push({ onActive: fn }); } })); }); injectMetadata({ metadata: getMetadata({ plugins: props.plugins, options: options }), environment: props.environment }); return _objectSpread(_objectSpread({ refresh: refresh }, propGetters), setters); }