{"version":3,"file":"index.cjs","sources":["../src/context.js","../src/components/editor/Layout.jsx","../src/components/editor/FilterEditor.jsx","../src/components/editor/Panel.jsx","../src/components/editor/Rule.jsx","../src/components/editor/Glue.jsx","../src/components/editor/List.jsx","../src/components/Layout.jsx","../src/components/FilterBuilder.jsx","../src/components/bar/Layout.jsx","../src/components/bar/FilterBar.jsx","../src/components/suggest/Suggest.jsx","../src/components/QueryHighlight.jsx","../src/components/FilterQuery.jsx","../src/themes/Material.jsx","../src/themes/Willow.jsx","../src/themes/WillowDark.jsx"],"sourcesContent":["import { createContext } from 'react';\n\nconst store = createContext(null);\nexport default store;\n","import { useState, useEffect, useRef, useContext } from 'react';\nimport {\n  RichSelect,\n  Text,\n  Button,\n  DatePicker,\n  Checkbox,\n  DateRangePicker,\n  Combo,\n  context\n} from '@svar-ui/react-core';\nimport { getFilters, getFilter } from '@svar-ui/filter-store';\nimport { dateToString } from '@svar-ui/lib-dom';\nimport './Layout.css';\n\nexport default function Layout(props) {\n  const {\n    fields = null,\n    fieldsSelector = true,\n    field: fieldProp = null,\n    buttons = true,\n    options: optionsProp = null,\n    includes: includesProp = null,\n    type: typeProp = 'text',\n    filter: filterProp = '',\n    value: valueProp = '',\n    format: formatProp = null,\n    predicate: predicateProp = null,\n  } = props;\n\n  const onApply = props.onApply || props.onapply;\n  const onCancel = props.onCancel || props.oncancel;\n  const onChange = props.onChange || props.onchange;\n\n  const locale = useContext(context.i18n);\n  const l = locale.getRaw();\n  const f = l.filter?.dateFormat || l.formats?.dateFormat;\n  const dateFormat = dateToString(f, l.calendar);\n  const _ = locale.getGroup('filter');\n\n  const ACTION_FIELD_CHANGE = 1;\n  const ACTION_FILTER_CHANGE = 2;\n  const ACTION_VALUE_CHANGE = 4;\n  const ACTION_INCLUDES_CHANGE = 8;\n  const ACTION_TYPE_CHANGE = 16;\n  const ACTION_CHANGE = 32;\n  const ACTION_OPTIONS_CHANGE = 64;\n\n  const [_filter, set_filter] = useState();\n  const _filterRef = useRef();\n  const [_field, set_field] = useState();\n  const _fieldRef = useRef();\n  const [_type, set_type] = useState();\n  const _typeRef = useRef();\n  const [_value, set_value] = useState();\n  const _valueRef = useRef();\n  const [_includes, set_includes] = useState([]);\n  const _includesRef = useRef([]);\n  const [_options, set_options] = useState();\n  const _optionsRef = useRef();\n  const [, set_format] = useState();\n  const _formatRef = useRef();\n  const [, set_predicate] = useState();\n  const _predicateRef = useRef();\n  const [ready, setReady] = useState(false);\n\n  const [providedOptions, setProvidedOptions] = useState(null);\n\n  async function loadOptions(field) {\n    if (!optionsProp || typeof optionsProp !== 'function') return;\n\n    const result = await optionsProp(field);\n    setProvidedOptions(result || []);\n  }\n\n  const sRef = useRef(0);\n  const timerRef = useRef(null);\n\n  function arr2str(v) {\n    return v ? v.toString() : '';\n  }\n\n  function updateState(setter, ref, value) {\n    setter(value);\n    ref.current = value;\n  }\n\n  function setState(signal, value) {\n    switch (signal) {\n      case ACTION_FIELD_CHANGE:\n        if (_fieldRef.current !== value) {\n          updateState(set_field, _fieldRef, value);\n          return signal;\n        }\n        break;\n      case ACTION_TYPE_CHANGE:\n        if (_typeRef.current !== value) {\n          updateState(set_type, _typeRef, value);\n          return signal;\n        }\n        break;\n      case ACTION_FILTER_CHANGE:\n        if (_filterRef.current !== value) {\n          updateState(set_filter, _filterRef, value);\n          return signal;\n        }\n        break;\n      case ACTION_VALUE_CHANGE:\n        if (_valueRef.current !== value) {\n          updateState(set_value, _valueRef, value);\n          return signal;\n        }\n        break;\n      case ACTION_INCLUDES_CHANGE:\n        if (arr2str(_includesRef.current) != arr2str(value)) {\n          updateState(set_includes, _includesRef, value || []);\n          return signal;\n        }\n        break;\n      case ACTION_OPTIONS_CHANGE:\n        if (_optionsRef.current !== value) {\n          updateState(set_options, _optionsRef, value || []);\n          return signal;\n        }\n        break;\n    }\n    return 0;\n  }\n\n  function execSignal(signal) {\n    sRef.current = sRef.current | signal;\n    if (!timerRef.current) {\n      timerRef.current = setTimeout(() => {\n        const v = sRef.current;\n        timerRef.current = null;\n        sRef.current = 0;\n        runSignal(v);\n      });\n    }\n  }\n\n  const [allSelected, setAllSelected] = useState();\n  const allSelectedRef = useRef();\n  const [visibleValues, setVisibleValues] = useState([]);\n  const visibleValuesRef = useRef([]);\n  const [, setRule] = useState();\n  const ruleRef = useRef();\n  const [rules, setRules] = useState();\n  const rulesRef = useRef();\n\n  function runSignal(s) {\n    if (s & ACTION_FIELD_CHANGE) {\n      if (fields) {\n        updateState(set_options, _optionsRef, null);\n        const nextField = fields.find((a) => a.id === _fieldRef.current);\n        const isDate =\n          _valueRef.current instanceof Date ||\n          (_valueRef.current && typeof _valueRef.current === 'object');\n        const isTuple =\n          nextField.type === 'tuple' || _typeRef.current == 'tuple';\n        if (\n          (isDate && nextField.type !== 'date') ||\n          (!isDate && nextField.type == 'date') ||\n          (isNaN(_valueRef.current) && nextField.type == 'number') ||\n          isTuple\n        ) {\n          updateState(set_value, _valueRef, null);\n        } else if (\n          nextField.type === 'text' &&\n          typeof _valueRef.current !== 'string'\n        ) {\n          const nv =\n            _valueRef.current || _valueRef.current === 0\n              ? _valueRef.current.toString()\n              : '';\n          updateState(set_value, _valueRef, nv);\n        }\n        updateState(set_format, _formatRef, nextField.format);\n        updateState(set_predicate, _predicateRef, nextField.predicate);\n\n        s = s | setState(ACTION_TYPE_CHANGE, nextField.type || 'text');\n\n        loadOptions(_fieldRef.current);\n      }\n    }\n\n    if (s & ACTION_TYPE_CHANGE) {\n      const nextRules = getFilters(_typeRef.current).map((a) => ({\n        id: a.id,\n        label: _(a.label || a.id),\n      }));\n      updateState(setRules, rulesRef, nextRules);\n\n      if (!nextRules.some((rule) => rule?.id === _filterRef.current)) {\n        updateState(set_filter, _filterRef, null);\n      }\n    }\n\n    if (s & ACTION_TYPE_CHANGE || s & ACTION_FILTER_CHANGE) {\n      let r = getFilter(_filterRef.current, _typeRef.current);\n      if (!r) {\n        r = getFilters(_typeRef.current).find((a) => a.default);\n        s = s | setState(ACTION_FILTER_CHANGE, r.id);\n      }\n      updateState(setRule, ruleRef, r);\n\n      if (\n        typeof _valueRef.current === 'object' &&\n        !(_valueRef.current instanceof Date) &&\n        !r.range\n      ) {\n        s =\n          s |\n          setState(\n            ACTION_VALUE_CHANGE,\n            _typeRef.current === 'date' ? null : '',\n          );\n      }\n    }\n\n    if (\n      s & ACTION_FILTER_CHANGE ||\n      s & ACTION_VALUE_CHANGE ||\n      s & ACTION_OPTIONS_CHANGE\n    ) {\n      if (_optionsRef.current) {\n        const handler =\n          _valueRef.current || _valueRef.current === 0\n            ? (v) => ruleRef.current.handler(v, _valueRef.current || '')\n            : null;\n\n        const vv =\n          _filterRef.current && handler\n            ? _optionsRef.current.filter(handler)\n            : _optionsRef.current;\n\n        updateState(setVisibleValues, visibleValuesRef, vv);\n\n        let nextIncs = _includesRef.current;\n        if (_includesRef.current.length) {\n          nextIncs = _includesRef.current.filter((x) => vv.includes(x));\n        }\n\n        if (nextIncs.length) {\n          if (nextIncs.length !== _includesRef.current.length) {\n            s = s | setState(ACTION_INCLUDES_CHANGE, nextIncs);\n          }\n        } else {\n          s = s | setState(ACTION_INCLUDES_CHANGE, [...vv]);\n        }\n      } else {\n        updateState(setVisibleValues, visibleValuesRef, []);\n      }\n    }\n\n    if (s & ACTION_INCLUDES_CHANGE) {\n      const as =\n        _includesRef.current.length === visibleValuesRef.current.length;\n      updateState(setAllSelected, allSelectedRef, as);\n    }\n\n    if (s & ACTION_CHANGE) {\n      const r = getRule();\n      onChange && onChange({ value: r });\n    }\n  }\n\n  function doApply() {\n    const r = getRule();\n    onApply && onApply({ value: r });\n  }\n\n  function doCancel() {\n    onCancel && onCancel();\n  }\n\n  function toggleAll() {\n    const nextAll = !allSelectedRef.current;\n    updateState(setAllSelected, allSelectedRef, nextAll);\n    execSignal(\n      setState(\n        ACTION_INCLUDES_CHANGE,\n        nextAll ? [...visibleValuesRef.current] : [],\n      ) | ACTION_CHANGE,\n    );\n  }\n\n  function handleChange(ev) {\n    const { inputValue, value } = ev;\n    const next = value\n      ? [..._includesRef.current, inputValue]\n      : _includesRef.current.filter((a) => a != inputValue);\n    execSignal(setState(ACTION_INCLUDES_CHANGE, next) | ACTION_CHANGE);\n  }\n\n  function changeValue({ value }) {\n    if (value === '$empty') value = '';\n    execSignal(setState(ACTION_VALUE_CHANGE, value) | ACTION_CHANGE);\n  }\n\n  function changeField({ value }) {\n    execSignal(setState(ACTION_FIELD_CHANGE, value) | ACTION_CHANGE);\n  }\n\n  function changeFilter({ value }) {\n    execSignal(setState(ACTION_FILTER_CHANGE, value) | ACTION_CHANGE);\n  }\n\n  function getRule() {\n    const out = {\n      filter: _filterRef.current,\n      value: _valueRef.current,\n      type: _typeRef.current,\n    };\n\n    if (_predicateRef.current) out.predicate = _predicateRef.current;\n    if (_fieldRef.current) out.field = _fieldRef.current;\n\n    if (\n      _includesRef.current &&\n      _includesRef.current.length &&\n      _includesRef.current.length !== visibleValuesRef.current.length\n    )\n      out.includes = [..._includesRef.current];\n    else out.includes = [];\n\n    return out;\n  }\n\n  function getLabel(v) {\n    if (_formatRef.current && typeof _formatRef.current == 'function')\n      return _formatRef.current(v);\n    if (v instanceof Date)\n      return _formatRef.current\n        ? dateToString(_formatRef.current, l.calendar)(v)\n        : dateFormat(v);\n    return typeof v === 'string' ? v : v.toString();\n  }\n\n  function getComboOptions(options) {\n    let arr = options\n      ? options.map((op) => ({ id: op, label: getLabel(op) }))\n      : [];\n    return [{ id: '$empty', label: '', emptyLabel: _('None') }].concat(arr);\n  }\n\n  const inputRef = useRef(null);\n  useEffect(() => {\n    if (_fieldRef.current && inputRef.current) {\n      setTimeout(() => {\n        const el = inputRef.current;\n        const inp = el && el.querySelector('input');\n        if (inp) inp.focus();\n      }, 1);\n    }\n  }, [_field]);\n\n  useEffect(() => {\n    if (ready) execSignal(setState(ACTION_FIELD_CHANGE, fieldProp));\n  }, [fieldProp, ready]);\n\n  useEffect(() => {\n    if (ready) execSignal(setState(ACTION_TYPE_CHANGE, typeProp));\n  }, [typeProp, ready]);\n\n  useEffect(() => {\n    if (ready) execSignal(setState(ACTION_FILTER_CHANGE, filterProp));\n  }, [filterProp, ready]);\n\n  useEffect(() => {\n    if (ready) execSignal(setState(ACTION_VALUE_CHANGE, valueProp));\n  }, [valueProp, ready]);\n\n  useEffect(() => {\n    if (ready) execSignal(setState(ACTION_INCLUDES_CHANGE, includesProp));\n  }, [includesProp, ready]);\n\n  useEffect(() => {\n    const currOptions = Array.isArray(optionsProp)\n      ? optionsProp\n      : providedOptions;\n    if (ready) execSignal(setState(ACTION_OPTIONS_CHANGE, currOptions));\n  }, [optionsProp, providedOptions, ready]);\n\n  useEffect(() => {\n    if (formatProp && !fields) updateState(set_format, _formatRef, formatProp);\n    if (predicateProp && !fields)\n      updateState(set_predicate, _predicateRef, predicateProp);\n  }, [formatProp, predicateProp, fields]);\n\n  useEffect(() => {\n    setReady(true);\n  }, []);\n\n  return (\n    <context.fieldId.Provider value={null}>\n      <div className=\"wx-3z8r9Oys wx-filter-editor\">\n        {fields && fieldsSelector ? (\n          <RichSelect onChange={changeField} options={fields} value={_field} />\n        ) : null}\n        <div className=\"wx-3z8r9Oys wx-wrapper\">\n          <div className=\"wx-3z8r9Oys wx-cell\">\n            <RichSelect\n              onChange={changeFilter}\n              options={rules}\n              value={_filter}\n              placeholder={_('Click to select')}\n            />\n          </div>\n          <div className=\"wx-3z8r9Oys wx-cell\" ref={inputRef}>\n            {_type === 'date' ? (\n              _filter == 'between' || _filter == 'notBetween' ? (\n                <DateRangePicker\n                  format={f}\n                  value={_value}\n                  buttons={['done', 'clear', 'today']}\n                  onChange={changeValue}\n                />\n              ) : (\n                <DatePicker format={f} value={_value} onChange={changeValue} />\n              )\n            ) : _type === 'number' ? (\n              <Text value={_value} onChange={changeValue} type=\"number\" />\n            ) : _type === 'tuple' ? (\n              <Combo\n                value={_value}\n                options={getComboOptions(_options)}\n                onChange={changeValue}\n              >\n                {({ option }) => option.emptyLabel || option.label}\n              </Combo>\n            ) : (\n              <Text value={_value} onChange={changeValue} />\n            )}\n          </div>\n        </div>\n\n        <Button onClick={toggleAll}>\n          {allSelected ? _('Unselect all') : _('Select all')}\n        </Button>\n        <div className=\"wx-3z8r9Oys wx-list\" role=\"listbox\">\n          {visibleValues.map((option, i) => (\n            <div\n              className=\"wx-3z8r9Oys wx-item\"\n              tabIndex={i ? -1 : 0}\n              role=\"option\"\n              key={i}\n            >\n              <Checkbox\n                label={getLabel(option)}\n                inputValue={option}\n                value={_includes && _includes.includes(option)}\n                onChange={handleChange}\n              />\n            </div>\n          ))}\n        </div>\n\n        {buttons ? (\n          <div className=\"wx-3z8r9Oys wx-wrapper\">\n            <Button type={'secondary'} onClick={doCancel}>\n              {_('Cancel')}\n            </Button>\n            <Button type={'primary'} onClick={doApply}>\n              {_('Apply')}\n            </Button>\n          </div>\n        ) : null}\n      </div>\n    </context.fieldId.Provider>\n  );\n}\n","import { Locale } from '@svar-ui/react-core';\nimport { en } from '@svar-ui/filter-locales';\nimport Layout from './Layout.jsx';\n\nfunction FilterEditor(props) {\n  return (\n    <Locale words={en} optional={true}>\n      <Layout {...props} />\n    </Locale>\n  );\n}\n\nexport default FilterEditor;\n","import { useContext, useMemo, useCallback } from 'react';\nimport storeContext from '../../context';\nimport { useStore } from '@svar-ui/lib-react';\nimport FilterEditor from './FilterEditor.jsx';\nimport './Panel.css';\n\nexport default function Panel(props) {\n  const { rule, type } = props;\n\n  const includes = useMemo(\n    () => (rule.includes && rule.includes.length ? rule.includes : null),\n    [rule],\n  );\n  const filter = useMemo(() => rule.filter || 'contains', [rule]);\n  const value = useMemo(() => rule.value || '', [rule]);\n  const field = useMemo(() => rule.field, [rule]);\n  const id = useMemo(() => rule.id, [rule]);\n\n  const api = useContext(storeContext);\n  const fields = useStore(api, 'fields');\n  const options = useStore(api, 'options');\n\n  const doCancel = useCallback(() => {\n    api.exec('edit-rule', {});\n  }, [api]);\n\n  const doApply = useCallback(\n    ({ value }) => {\n      api.exec('update-rule', { id, rule: value });\n      doCancel();\n    },\n    [api, id],\n  );\n\n  const doChange = useCallback(\n    ({ value }) => {\n      api.exec('change-rule', { id, rule: value });\n    },\n    [api, id],\n  );\n\n  return (\n    <div className=\"wx-uOIGm7Ce wx-panel\">\n      <FilterEditor\n        fieldsSelector={type !== 'simple'}\n        fields={fields}\n        field={field}\n        options={options}\n        includes={includes}\n        filter={filter}\n        value={value}\n        onApply={doApply}\n        onCancel={doCancel}\n        onChange={doChange}\n      />\n    </div>\n  );\n}\n","import React, { useState, useEffect, useMemo, useRef, useContext } from 'react';\nimport { getFilter } from '@svar-ui/filter-store';\nimport { dateToString } from '@svar-ui/lib-dom';\nimport { context } from '@svar-ui/react-core';\nimport './Rule.css';\n\nexport default function Rule({\n  filter,\n  field,\n  type = 'list',\n  action = 'menu',\n}) {\n  const noChange = (v) => v;\n\n  const locale = useContext(context.i18n);\n\n  const lRef = useRef();\n  if (lRef.current === undefined) {\n    lRef.current = locale.getRaw();\n  }\n  const l = lRef.current;\n\n  const fRef = useRef();\n  if (fRef.current === undefined) {\n    fRef.current =\n      field?.format || l.filter?.dateFormat || l.formats.dateFormat;\n  }\n  const f = fRef.current;\n\n  const _format = useMemo(\n    () =>\n      typeof f === 'function'\n        ? f\n        : field?.type === 'date'\n          ? dateToString(f, l.calendar)\n          : noChange,\n    [field],\n  );\n\n  const groupRef = useRef();\n  if (groupRef.current === undefined) {\n    groupRef.current = locale.getGroup('filter');\n  }\n  const _ = groupRef.current;\n\n  const [rule, setRule] = useState();\n  const [filterValue, setFilterValue] = useState();\n\n  useEffect(() => {\n    setFilterValue(filter.value);\n    setRule(filter.filter ? getFilter(filter.filter, filter.type) : null);\n  }, [filter]);\n\n  return (\n    <div className={`wx-5GeVl88l wx-rule wx-${type}`} data-id={filter.id}>\n      <span className=\"wx-5GeVl88l wx-filter\">\n        <span className=\"wx-5GeVl88l wx-field\">{field.label}</span>\n        {filter.includes && filter.includes.length ? (\n          <>\n            {' ' + _('in') + ' '}\n            {filter.includes.map((value, i) => (\n              <React.Fragment key={value}>\n                <span className=\"wx-5GeVl88l wx-value\">{_format(value)}</span>\n                {i < filter.includes.length - 1 ? ',\\u00A0' : null}\n              </React.Fragment>\n            ))}\n          </>\n        ) : filter.filter && (filterValue || filterValue === 0) ? (\n          <>\n            {' ' + (_(rule.short || rule.label) || rule.id) + ' '}\n            {field.type === 'date' ? (\n              filterValue.start ? (\n                <>\n                  <span className=\"wx-5GeVl88l wx-value\">\n                    {_format(filterValue.start)}\n                  </span>\n                  {' ' + _('and') + ' '}\n                  <span className=\"wx-5GeVl88l wx-value\">\n                    {_format(filterValue.end)}\n                  </span>\n                </>\n              ) : (\n                <span className=\"wx-5GeVl88l wx-value\">\n                  {_format(filterValue)}\n                </span>\n              )\n            ) : (\n              <span className=\"wx-5GeVl88l wx-value\">\n                {_format(filterValue)}\n              </span>\n            )}\n          </>\n        ) : null}\n      </span>\n      <i\n        className={`wx-5GeVl88l wxi-${action === 'menu' ? 'dots-v' : action} wx-menu-icon`}\n        role=\"button\"\n        data-action={action}\n      ></i>\n    </div>\n  );\n}\n","import { useContext } from 'react';\nimport { context } from '@svar-ui/react-core';\nimport './Glue.css';\nimport storeContext from '../../context';\n\nexport default function Glue({ mode = 'and', id }) {\n  const i18n = useContext(context.i18n);\n  const _ = i18n.getGroup('filter');\n  const api = useContext(storeContext);\n\n  function toggleGlue() {\n    api.exec('toggle-glue', { id });\n  }\n\n  return (\n    <div\n      className={`wx-XRdDajFX wx-glue wx-${mode}`}\n      role=\"button\"\n      onClick={toggleGlue}\n    >\n      {_(mode)}\n    </div>\n  );\n}\n","import {\n  Fragment,\n  useState,\n  useEffect,\n  useMemo,\n  useRef,\n  useCallback,\n  useContext,\n} from 'react';\nimport { delegateClick } from '@svar-ui/lib-dom';\nimport { Portal, Popup } from '@svar-ui/react-core';\nimport storeContext from '../../context';\nimport { useStore, useStoreWithCounter } from '@svar-ui/lib-react';\n\nimport Panel from './Panel.jsx';\nimport Rule from './Rule.jsx';\nimport Glue from './Glue.jsx';\n\nimport './List.css';\n\nfunction List(props) {\n  const { group, type, onShowMenu } = props;\n\n  const api = useContext(storeContext);\n  const [valueState, valueChanged] = useStoreWithCounter(api, 'value');\n  const fieldsState = useStore(api, 'fields');\n  const editorState = useStore(api, '_editor');\n\n  const filters = useMemo(() => {\n    return (valueState && valueState.getBranch(group.id)) || [];\n  }, [valueChanged, group.id]);\n\n  const cssType = useMemo(() => (type == 'simple' ? 'line' : type), [type]);\n  const groupCss = useMemo(\n    () => (group.$level == 1 ? 'top' : 'inner'),\n    [group.$level],\n  );\n\n  const handlers = useMemo(\n    () => ({\n      dblclick: (id) => api.exec('edit-rule', { id }),\n      menu: (id, ev) => onShowMenu && onShowMenu({ id, ev }),\n      delete: (id) => {\n        api.exec('edit-rule', {});\n        api.exec('delete-rule', { id });\n      },\n    }),\n    [api, onShowMenu],\n  );\n\n  const getField = useCallback(\n    (id) => fieldsState.find((a) => a.id == id),\n    [fieldsState],\n  );\n\n  const rootRef = useRef(null);\n  const [ruleBox, setRuleBox] = useState();\n  const [ruleEditor, setRuleEditor] = useState();\n\n  useEffect(() => {\n    const node = rootRef.current;\n    if (!node) return;\n    const cleanup = delegateClick(node, handlers);\n    return cleanup;\n  }, [handlers]);\n\n  useEffect(() => {\n    if (editorState && ruleEditor === editorState.id) return;\n\n    if (\n      editorState &&\n      type !== 'list' &&\n      filters.find((a) => a.id === editorState.id)\n    ) {\n      const rootNode =\n        rootRef.current &&\n        rootRef.current.querySelector(`[data-id='${editorState.id}']`);\n      if (rootNode) {\n        setRuleBox(rootNode.getBoundingClientRect());\n        setRuleEditor(editorState.id);\n        return;\n      }\n    }\n    setRuleBox(null);\n    setRuleEditor(null);\n  }, [editorState, type, filters, ruleEditor]);\n\n  function cancel() {\n    setRuleBox(null);\n    setRuleEditor(null);\n    api.exec('edit-rule', {});\n  }\n\n  return (\n    <>\n      <div\n        ref={rootRef}\n        className={`wx-3udP2tTA wx-group wx-${groupCss} wx-${cssType}`}\n      >\n        {filters.map((rule, i) => (\n          <Fragment key={rule.id}>\n            {type === 'list' && editorState && editorState.id === rule.id ? (\n              <Panel rule={rule} />\n            ) : rule.data ? (\n              <List type={type} group={rule} onShowMenu={onShowMenu} />\n            ) : (\n              <div className=\"wx-3udP2tTA wx-rule-wrapper\">\n                <Rule\n                  action={type == 'simple' ? 'delete' : 'menu'}\n                  type={cssType}\n                  filter={rule}\n                  field={getField(rule.field)}\n                />\n              </div>\n            )}\n\n            {type !== 'simple' && i < filters.length - 1 ? (\n              <div className=\"wx-3udP2tTA wx-glue-wrapper\">\n                <Glue mode={group.glue} id={group.id} />\n              </div>\n            ) : null}\n          </Fragment>\n        ))}\n      </div>\n\n      {editorState && ruleBox ? (\n        <Portal>\n          <Popup\n            top={ruleBox.top + ruleBox.height}\n            left={ruleBox.left + ruleBox.width / 2}\n            onCancel={cancel}\n          >\n            <div className=\"wx-3udP2tTA wx-editor-wrapper\">\n              <Panel type={type} rule={valueState.byId(editorState.id)} />\n            </div>\n          </Popup>\n        </Portal>\n      ) : null}\n    </>\n  );\n}\n\nexport default List;\n","import { useContext, useMemo, useRef, useCallback } from 'react';\n\nimport { Button } from '@svar-ui/react-core';\nimport { DropDownMenu, ContextMenu } from '@svar-ui/react-menu';\nimport List from './editor/List.jsx';\nimport { context } from '@svar-ui/react-core';\nimport './Layout.css';\nimport storeContext from '../context';\nimport { useStore, useStoreWithCounter } from '@svar-ui/lib-react';\n\nexport default function Layout({ type }) {\n  const api = useContext(storeContext);\n  const i18nCtx = useContext(context.i18n);\n  const _ = useMemo(() => i18nCtx.getGroup('filter'), [i18nCtx]);\n\n  const fields = useStore(api, 'fields');\n  const [value, valueChanged] = useStoreWithCounter(api, 'value');\n\n  const group = value.getBranch(0)[0];\n\n  function addFilter(data) {\n    api.exec('add-rule', { rule: { $temp: true, ...data }, edit: true });\n  }\n\n  const newFilterOptions = useMemo(() => {\n    const now = {};\n    value.forEach((x) => (now[x.field] = true));\n    return fields\n      .filter((c) => !now[c.id])\n      .map((o) => ({ id: o.id, text: o.label }));\n  }, [valueChanged, fields]);\n\n  const selectNewFilter = useCallback(\n    (ev) => {\n      const action = ev.action;\n      if (action) {\n        addFilter({ field: action.id });\n      }\n    },\n    [addFilter],\n  );\n\n  const menuOptions = useMemo(\n    () => [\n      {\n        id: 'edit-rule',\n        text: _('Edit'),\n        icon: 'wxi-edit-outline',\n      },\n      {\n        id: 'add-rule',\n        text: _('Add filter'),\n        icon: 'wxi-filter-plus-outline',\n        resolver: (item) => ({\n          after: item,\n          rule: { $temp: true },\n          edit: true,\n        }),\n      },\n      {\n        id: 'add-group',\n        text: _('Add group'),\n        icon: 'wxi-filter-multiple-outline',\n        resolver: (item) => ({\n          after: item,\n          rule: { $temp: true },\n          edit: true,\n        }),\n      },\n      { type: 'separator' },\n      {\n        id: 'delete-rule',\n        text: _('Delete'),\n        icon: 'wxi-delete-outline',\n      },\n    ],\n    [_],\n  );\n\n  const menuRef = useRef(null);\n\n  const menuAction = useCallback(\n    (ev) => {\n      const { context: item, action } = ev;\n      if (action) {\n        const data = action.resolver ? action.resolver(item) : { id: item };\n        api.exec(action.id, data);\n      }\n    },\n    [api],\n  );\n\n  const onShowMenu = useCallback(({ ev, id }) => {\n    if (menuRef.current && typeof menuRef.current.show === 'function') {\n      menuRef.current.show(ev, id);\n    }\n  }, []);\n\n  return (\n    <>\n      <div className={`wx-VDDi7d7g wx-filter-builder wx-${type}`}>\n        {type === 'list' ? (\n          <>\n            <div className={`wx-VDDi7d7g wx-toolbar wx-${type}`}>\n              <Button type={'primary'} onClick={addFilter}>\n                {_('Add filter')}\n              </Button>\n            </div>\n            <List type={type} group={group} onShowMenu={onShowMenu} />\n          </>\n        ) : type === 'line' ? (\n          <div className={`wx-VDDi7d7g wx-toolbar wx-${type}`}>\n            <div className=\"wx-VDDi7d7g wx-filters\">\n              <List type={type} group={group} onShowMenu={onShowMenu} />\n            </div>\n\n            <div className=\"wx-VDDi7d7g wx-button\">\n              <Button type={'primary'} onClick={addFilter}>\n                {_('Add filter')}\n              </Button>\n            </div>\n          </div>\n        ) : type === 'simple' ? (\n          <div className={`wx-VDDi7d7g wx-toolbar wx-${type}`}>\n            <div className=\"wx-VDDi7d7g wx-button\">\n              <DropDownMenu\n                options={newFilterOptions}\n                onClick={selectNewFilter}\n              >\n                <Button disabled={!newFilterOptions.length} type={'primary'}>\n                  {_('Add filter')}\n                </Button>\n              </DropDownMenu>\n            </div>\n\n            <div className=\"wx-VDDi7d7g wx-filters\">\n              <List type={type} group={group} onShowMenu={onShowMenu} />\n            </div>\n          </div>\n        ) : null}\n      </div>\n      {type !== 'simple' ? (\n        <ContextMenu options={menuOptions} onClick={menuAction} ref={menuRef} />\n      ) : null}\n    </>\n  );\n}\n","import {\n  forwardRef,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n} from 'react';\nimport Layout from './Layout.jsx';\nimport { Locale } from '@svar-ui/react-core';\nimport { en } from '@svar-ui/filter-locales';\nimport { EventBusRouter } from '@svar-ui/lib-state';\nimport { DataStore } from '@svar-ui/filter-store';\nimport ContextStore from '../context';\nimport { writable } from '@svar-ui/lib-react';\n\nconst camelize = (s) =>\n  s\n    .split('-')\n    .map((part) => (part ? part.charAt(0).toUpperCase() + part.slice(1) : ''))\n    .join('');\n\nconst FilterBuilder = forwardRef(function FilterBuilder(\n  {\n    value = { glue: 'and', rules: [] },\n    fields = [],\n    options = null,\n    type = 'list',\n    init = null,\n    ...restProps\n  },\n  ref,\n) {\n  // keep latest rest props for event routing\n  const restPropsRef = useRef();\n  restPropsRef.current = restProps;\n\n  // init stores\n  const dataStore = useMemo(() => new DataStore(writable), []);\n  const firstInRoute = useMemo(() => dataStore.in, [dataStore]);\n\n  const lastInRouteRef = useRef(null);\n  if (lastInRouteRef.current === null) {\n    lastInRouteRef.current = new EventBusRouter((a, b) => {\n      const name = 'on' + camelize(a);\n      if (restPropsRef.current && restPropsRef.current[name]) {\n        restPropsRef.current[name](b);\n      }\n    });\n    firstInRoute.setNext(lastInRouteRef.current);\n  }\n\n  // public API\n  const api = useMemo(\n    () => ({\n      getState: dataStore.getState.bind(dataStore),\n      getReactiveState: dataStore.getReactive.bind(dataStore),\n      getStores: () => ({ data: dataStore }),\n      exec: firstInRoute.exec,\n      setNext: (ev) => {\n        lastInRouteRef.current = lastInRouteRef.current.setNext(ev);\n        return lastInRouteRef.current;\n      },\n      intercept: firstInRoute.intercept.bind(firstInRoute),\n      on: firstInRoute.on.bind(firstInRoute),\n      detach: firstInRoute.detach.bind(firstInRoute),\n      getValue: dataStore.getValue.bind(dataStore),\n    }),\n    [dataStore, firstInRoute],\n  );\n\n  // init logic\n  const initOnceRef = useRef(true);\n  useEffect(() => {\n    dataStore.init({\n      value,\n      fields,\n      options,\n    });\n\n    if (initOnceRef.current && init) {\n      init(api);\n      initOnceRef.current = false;\n    }\n  }, [dataStore, value, fields, options, init, api]);\n\n  if (initOnceRef.current) {\n    dataStore.init({\n      value,\n      fields,\n      options,\n    });\n\n    if (init) init(api);\n    initOnceRef.current = false;\n  }\n\n  // expose API via ref\n  useImperativeHandle(\n    ref,\n    () => ({\n      ...api,\n    }),\n    [api],\n  );\n\n  return (\n    <Locale words={en} optional={true}>\n      <ContextStore.Provider value={api}>\n        <Layout type={type} />\n      </ContextStore.Provider>\n    </Locale>\n  );\n});\n\nexport default FilterBuilder;\n","import {\n  Fragment,\n  useState,\n  useEffect,\n  useMemo,\n  useRef,\n  useContext,\n} from 'react';\nimport { RichSelect, Text, DatePicker, DateRangePicker } from '@svar-ui/react-core';\nimport { createFilterRule } from '@svar-ui/filter-store';\nimport { context } from '@svar-ui/react-core';\nimport './Layout.css';\n\nfunction Layout(props) {\n  const { fields = [], debounce = 300, onChange } = props;\n\n  const [lastField, setLastField] = useState();\n  const [lastValue, setLastValue] = useState({});\n\n  const locale = useContext(context.i18n);\n  const l = locale.getRaw();\n  const f =\n    (l.filter && l.filter.dateFormat) || (l.formats && l.formats.dateFormat);\n  const _ = locale.getGroup('filter');\n\n  function getFieldOptions(field) {\n    const options = field.options.map((a) => {\n      if (typeof a === 'string' || typeof a === 'number') {\n        return { id: a, label: a };\n      }\n      return a;\n    });\n\n    options.unshift({ id: '$empty', label: _('None') });\n\n    return options;\n  }\n\n  function normalizeField(field) {\n    if (typeof field === 'string')\n      return { id: field, type: 'text', filter: 'contains' };\n    return {\n      ...field,\n      filter: field.filter || (field.options ? 'equal' : 'contains'),\n      options: field.type !== 'date' && field.options && getFieldOptions(field),\n    };\n  }\n\n  function normalizeFieldsFn(fieldsArr) {\n    return fieldsArr.map((field) => {\n      if (field.type === 'all' || field.type === 'dynamic') {\n        return {\n          ...field,\n          by: field.by.map((b) => normalizeField(b)),\n        };\n      }\n      return normalizeField(field);\n    });\n  }\n\n  function getDynamicOptions(arr) {\n    return arr.map((a) => ({ id: a.id, label: a.id }));\n  }\n\n  const normalizedFields = useMemo(() => normalizeFieldsFn(fields), [fields]);\n\n  const originalValue = useRef(null);\n  useEffect(() => {\n    const values = {};\n    let newLastField = lastField;\n\n    normalizedFields.forEach((field) => {\n      if (field.type === 'dynamic') {\n        field.by.forEach((fItem) => {\n          if (typeof fItem.value !== 'undefined')\n            values[fItem.id] = fItem.value;\n        });\n        newLastField = field.by[0].id;\n      } else if (field.type === 'all') {\n        values[field.type] = field.value ?? '';\n      } else if (typeof field.value !== 'undefined') {\n        values[field.id] = field.value;\n      }\n    });\n\n    originalValue.current = values;\n    setLastValue(values);\n    setLastField(newLastField);\n  }, [normalizedFields]);\n\n  function computeFilters(nFields, lField, lValue) {\n    return nFields.map((field) => {\n      let base = {\n        field: field.type,\n        label: field.label,\n        placeholder: field.placeholder,\n      };\n\n      if (field.type === 'dynamic') {\n        base.dynamicField = true;\n        base.field = lField;\n\n        const currentField = field.by.find((fItem) => fItem.id === base.field);\n        if (currentField) {\n          base = {\n            ...base,\n            ...currentField,\n          };\n        }\n      } else if (field.type !== 'all') {\n        base = { ...base, ...field, field: field.id };\n      }\n\n      if (field.by) base.optionsBy = getDynamicOptions(field.by);\n      base.value = lValue[base.field];\n\n      return { type: 'text', filter: 'contains', ...base };\n    });\n  }\n\n  const filters = useMemo(\n    () => computeFilters(normalizedFields, lastField, lastValue),\n    [normalizedFields, lastField, lastValue],\n  );\n\n  function getRule(filter, valueObj) {\n    if (filter.field === 'all')\n      return createFilterRule(\n        filter.optionsBy,\n        'contains',\n        valueObj[filter.field],\n      );\n    const value = valueObj[filter.field];\n    if (!value) return null;\n\n    return {\n      field: filter.field,\n      filter: filter.filter,\n      type: filter.type,\n      value,\n    };\n  }\n\n  function getRules(valueObj) {\n    const rules = filters.map((f) => getRule(f, valueObj)).filter((a) => !!a);\n    if (rules.length === 1 && rules[0]?.glue === 'or') return rules[0];\n    return {\n      glue: 'and',\n      rules,\n    };\n  }\n\n  const timerRef = useRef(null);\n  function dispatchChange(delay, valueObj) {\n    if (timerRef.current) clearTimeout(timerRef.current);\n    timerRef.current = setTimeout(() => {\n      onChange && onChange({ value: getRules(valueObj) });\n    }, delay || debounce);\n  }\n\n  useEffect(() => {\n    if (originalValue.current && originalValue.current !== lastValue) {\n      dispatchChange(1, lastValue);\n    }\n  }, [lastValue]);\n\n  const updateValue = (value, field) => {\n    setLastValue((prev) => ({\n      ...prev,\n      [field]: value === '$empty' ? '' : value,\n    }));\n  };\n\n  const updateFiltersField = (value) => {\n    setLastValue((prev) => {\n      setLastField(value);\n      if (lastField) {\n        return { ...prev, [lastField]: '' };\n      }\n      return prev;\n    });\n  };\n\n  return (\n    <div className=\"wx-gWqAfosQ wx-filter-bar\">\n      {filters.map((filter, i) => (\n        <Fragment key={i}>\n          {filter.label ? (\n            <div className=\"wx-gWqAfosQ wx-label\">{filter.label}</div>\n          ) : null}\n\n          {filter.dynamicField ? (\n            <div className=\"wx-gWqAfosQ wx-select\">\n              <RichSelect\n                value={filter.field}\n                options={filter.optionsBy}\n                onChange={({ value }) => updateFiltersField(value, i)}\n              />\n            </div>\n          ) : null}\n\n          {filter.options ? (\n            <div className=\"wx-gWqAfosQ wx-select\">\n              <RichSelect\n                value={filter.value}\n                placeholder={\n                  filter.placeholder ?? `${_('filter by')} ${filter.field}`\n                }\n                options={filter.options}\n                onChange={({ value }) => updateValue(value, filter.field)}\n              />\n            </div>\n          ) : filter.type === 'text' || filter.type === 'number' ? (\n            <div className=\"wx-gWqAfosQ wx-text\">\n              <Text\n                value={filter.value}\n                placeholder={\n                  filter.placeholder ??\n                  `${_('filter by')} ${filter.field} (${_(filter.filter)})`\n                }\n                onChange={({ value, input }) => {\n                  if (input) updateValue(value, filter.field);\n                }}\n                type={filter.type}\n              />\n            </div>\n          ) : filter.type === 'date' ? (\n            <div className=\"wx-gWqAfosQ wx-date\">\n              {filter.filter === 'between' || filter.filter === 'notBetween' ? (\n                <DateRangePicker\n                  value={filter.value}\n                  format={f}\n                  buttons={['done', 'clear', 'today']}\n                  placeholder={\n                    filter.placeholder ??\n                    `${_('filter by')} ${filter.field} (${_(filter.filter)})`\n                  }\n                  onChange={({ value }) => updateValue(value, filter.field)}\n                />\n              ) : (\n                <DatePicker\n                  value={filter.value}\n                  format={f}\n                  placeholder={\n                    filter.placeholder ??\n                    `${_('filter by')} ${filter.field} (${_(filter.filter)})`\n                  }\n                  onChange={({ value }) => updateValue(value, filter.field)}\n                />\n              )}\n            </div>\n          ) : null}\n        </Fragment>\n      ))}\n    </div>\n  );\n}\n\nexport default Layout;\n","import { Locale } from '@svar-ui/react-core';\nimport { en } from '@svar-ui/filter-locales';\nimport Layout from './Layout.jsx';\n\nfunction FilterBar(props = {}) {\n  return (\n    <Locale words={en} optional={true}>\n      <Layout {...props} />\n    </Locale>\n  );\n}\n\nexport default FilterBar;\n","import {\n\tforwardRef,\n\tuseImperativeHandle,\n\tuseState,\n\tuseEffect,\n\tuseRef,\n} from \"react\";\nimport { Dropdown } from \"@svar-ui/react-core\";\nimport { locateID } from \"@svar-ui/lib-dom\";\n\nimport \"./Suggest.css\";\n\nconst Suggest = forwardRef(function Suggest(props, ref) {\n\tconst { items = [], children, onSelect, onClose } = props;\n\n\tconst listRef = useRef(null);\n\tconst [navIndex, setNavIndex] = useState(-1);\n\n\tfunction setNav(index) {\n\t\tsetNavIndex(index);\n\t}\n\n\tfunction navigate(dir) {\n\t\tlet index;\n\t\tif (navIndex === -1) {\n\t\t\tindex = dir > 0 ? 0 : items.length - 1;\n\t\t} else {\n\t\t\tindex = Math.max(0, Math.min(navIndex + dir, items.length - 1));\n\t\t}\n\t\tif (index === navIndex) return;\n\t\tsetNav(index);\n\t\tscrollToIndex(index);\n\t}\n\n\tfunction scrollToIndex(index) {\n\t\tif (index >= 0 && listRef.current) {\n\t\t\tconst el = listRef.current.querySelectorAll(\".wx-item\")[index];\n\t\t\tif (el) {\n\t\t\t\tel.scrollIntoView({ block: \"nearest\" });\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleMove(ev) {\n\t\tconst id = locateID(ev);\n\t\tconst index = items.findIndex(a => a.id == id);\n\t\tif (index !== -1 && index !== navIndex) {\n\t\t\tsetNav(index);\n\t\t}\n\t}\n\n\tfunction keydown(ev) {\n\t\tif (!items.length) return;\n\n\t\tswitch (ev.code) {\n\t\t\tcase \"Enter\":\n\t\t\t\tif (navIndex >= 0) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t\tonSelect && onSelect({ id: items[navIndex].id });\n\t\t\t\t} else {\n\t\t\t\t\tonClose && onClose();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"Escape\":\n\t\t\tcase \"Tab\":\n\t\t\t\tonClose && onClose();\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowDown\":\n\t\t\t\tev.preventDefault();\n\t\t\t\tnavigate(1);\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowUp\":\n\t\t\t\tev.preventDefault();\n\t\t\t\tnavigate(-1);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tuseImperativeHandle(ref, () => ({\n\t\tkeydown,\n\t}));\n\n\tfunction handleClick(ev) {\n\t\tev.stopPropagation();\n\t\tconst id = locateID(ev);\n\t\tconst item = items.find(a => a.id == id);\n\t\tif (item) {\n\t\t\tonSelect && onSelect({ id: item.id });\n\t\t}\n\t}\n\n\t// Reset selection when items change to avoid stale index\n\tuseEffect(() => {\n\t\tif (!listRef.current || !items.length) {\n\t\t\tsetNavIndex(-1);\n\t\t}\n\t}, [items]);\n\n\tif (items.length <= 0) return null;\n\n\treturn (\n\t\t<Dropdown onCancel={onClose}>\n\t\t\t<div\n\t\t\t\tclassName=\"wx-list wx-aac97azI\"\n\t\t\t\tref={listRef}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonMouseMove={handleMove}\n\t\t\t>\n\t\t\t\t{items.map((data, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={data.id}\n\t\t\t\t\t\tclassName={`wx-item wx-aac97azI${index === navIndex ? \" wx-focus\" : \"\"}`}\n\t\t\t\t\t\tdata-id={data.id}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children\n\t\t\t\t\t\t\t? children({ option: data })\n\t\t\t\t\t\t\t: data.label}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</Dropdown>\n\t);\n});\n\nexport default Suggest;\n","import { useMemo } from \"react\";\nimport { getQueryHtml } from \"@svar-ui/filter-store\";\n\nimport \"./QueryHighlight.css\";\n\nfunction QueryHighlight(props) {\n\tconst {\n\t\tquery = \"\",\n\t\tfields = [],\n\t\toptions = {},\n\t\tinline = false,\n\t\tshowErrors = true,\n\t\tcursorPos = -1,\n\t\tparse = \"allowFreeText\",\n\t} = props;\n\n\tconst highlightedHtml = useMemo(\n\t\t() =>\n\t\t\tgetQueryHtml(query, {\n\t\t\t\tfields,\n\t\t\t\toptions,\n\t\t\t\tshowErrors,\n\t\t\t\tcursorPos,\n\t\t\t\tallowFreeText: parse === \"allowFreeText\",\n\t\t\t}),\n\t\t[query, fields, options, showErrors, cursorPos, parse]\n\t);\n\n\tif (inline) {\n\t\treturn (\n\t\t\t<span dangerouslySetInnerHTML={{ __html: highlightedHtml }} />\n\t\t);\n\t}\n\n\tif (!query) return null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"wx-query-highlight wx-aacwWF55\"\n\t\t\tdangerouslySetInnerHTML={{ __html: highlightedHtml }}\n\t\t/>\n\t);\n}\n\nexport default QueryHighlight;\n","import { useState, useEffect, useMemo, useRef, useCallback, useContext } from 'react';\nimport {\n\tparseSet,\n\tgetAutocompleteContext,\n\tgetSuggestions,\n\tprepareFields,\n\tbuildFieldMaps,\n\tidsToLabels,\n\tlabelsToIds,\n} from '@svar-ui/filter-store';\nimport { useWritableProp } from '@svar-ui/lib-react';\nimport { context } from '@svar-ui/react-core';\nimport { locale } from '@svar-ui/lib-dom';\nimport { en } from '@svar-ui/filter-locales';\n\nimport Suggest from './suggest/Suggest.jsx';\nimport QueryHighlight from './QueryHighlight.jsx';\n\nimport './FilterQuery.css';\n\nfunction FilterQuery(props) {\n\tconst {\n\t\tvalue: valueProp = '',\n\t\tplaceholder = '',\n\t\tonChange: onchange = null,\n\t\tparse: parseMode = 'allowFreeText',\n\t\tfields = [],\n\t\toptions = {},\n\t} = props;\n\n\tconst i18nCtx = useContext(context.i18n);\n\tconst i18n = ((i18nCtx || locale(en)).getGroup('filter'));\n\n\tconst [value, setValue] = useWritableProp(valueProp || '');\n\n\tconst parseEnabled = useMemo(() => parseMode !== 'none', [parseMode]);\n\tconst strictParser = useMemo(() => parseMode === 'strict', [parseMode]);\n\n\tconst pFields = useMemo(() => prepareFields(fields), [fields]);\n\tconst fieldMaps = useMemo(() => buildFieldMaps(pFields), [pFields]);\n\n\tfunction getErrorMessage(error) {\n\t\tif (!error || typeof error === 'boolean') return null;\n\t\tconst fn = i18n(error.code.toString().toLowerCase());\n\t\tif (typeof fn === 'function') return fn(error.field, error.value);\n\t\treturn error.message || fn;\n\t}\n\n\tconst [text, setText_] = useState('');\n\tconst isInternalChangeRef = useRef(false);\n\tconst hasBeenSetRef = useRef(false);\n\n\tconst [progressActive, setProgressActive] = useState(false);\n\tconst [progressKey, setProgressKey] = useState(0);\n\tconst [showErrors, setShowErrors] = useState(true);\n\tconst [cursorPos, setCursorPos] = useState(0);\n\tconst [suggestOpen, setSuggestOpen] = useState(false);\n\n\tconst inputEl = useRef(null);\n\tconst highlightEl = useRef(null);\n\tconst suggestRef = useRef(null);\n\n\tconst parseResult = useMemo(\n\t\t() =>\n\t\t\tparseEnabled\n\t\t\t\t? parseSet(text, pFields, options, {\n\t\t\t\t\t\tallowFreeText: !strictParser,\n\t\t\t\t\t})\n\t\t\t\t: null,\n\t\t[parseEnabled, text, pFields, options, strictParser]\n\t);\n\n\tconst activeTokenInfo = useMemo(() => {\n\t\tif (!parseEnabled) return null;\n\t\treturn getAutocompleteContext(text, cursorPos, pFields);\n\t}, [parseEnabled, text, cursorPos, pFields]);\n\n\tconst currentTokenValue = useMemo(\n\t\t() =>\n\t\t\tactiveTokenInfo\n\t\t\t\t? text\n\t\t\t\t\t\t.slice(activeTokenInfo.start, activeTokenInfo.end)\n\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t: '',\n\t\t[activeTokenInfo, text]\n\t);\n\n\tconst suggestions = useMemo(() => {\n\t\tif (!suggestOpen) return [];\n\t\t// no autocomplete for strict-match-any\n\t\tif (activeTokenInfo && text[activeTokenInfo.start - 1] === '#')\n\t\t\treturn [];\n\t\tconst all = getSuggestions(activeTokenInfo, pFields, options);\n\t\tif (!all || !currentTokenValue) return all || [];\n\t\t// Hide suggestion that exactly matches what's already typed\n\t\treturn all.filter((s) => s.id.toLowerCase() !== currentTokenValue);\n\t}, [suggestOpen, activeTokenInfo, text, pFields, options, currentTokenValue]);\n\n\t// Refs to hold latest values for triggerFilter callback\n\tconst onchangeRef = useRef(onchange);\n\tonchangeRef.current = onchange;\n\tconst parseEnabledRef = useRef(parseEnabled);\n\tparseEnabledRef.current = parseEnabled;\n\tconst strictParserRef = useRef(strictParser);\n\tstrictParserRef.current = strictParser;\n\tconst pFieldsRef = useRef(pFields);\n\tpFieldsRef.current = pFields;\n\tconst optionsRef = useRef(options);\n\toptionsRef.current = options;\n\tconst parseResultRef = useRef(parseResult);\n\tparseResultRef.current = parseResult;\n\tconst valueRef = useRef(value);\n\tvalueRef.current = value;\n\tconst fieldMapsRef = useRef(fieldMaps);\n\tfieldMapsRef.current = fieldMaps;\n\tconst textRef = useRef(text);\n\ttextRef.current = text;\n\n\tconst startProgress = useCallback(() => {\n\t\tsetProgressKey((k) => k + 1);\n\t\tsetProgressActive(true);\n\t}, []);\n\n\tconst endProgress = useCallback(() => {\n\t\tsetProgressActive(false);\n\t}, []);\n\n\tfunction closeSuggestions() {\n\t\tsetSuggestOpen(false);\n\t}\n\n\tconst triggerFilter = useCallback(() => {\n\t\tsetSuggestOpen(false);\n\t\t// Normalize text: convert any typed field IDs to labels\n\t\tconst currentFieldMaps = fieldMapsRef.current;\n\t\tsetText_((prevText) => idsToLabels(prevText, currentFieldMaps));\n\t\tsetShowErrors(true);\n\t\tconst currentOnchange = onchangeRef.current;\n\t\tif (currentOnchange) {\n\t\t\tconst currentParseEnabled = parseEnabledRef.current;\n\t\t\tconst currentParseResult = parseResultRef.current;\n\t\t\tconst currentValue = valueRef.current;\n\t\t\tconst currentText = textRef.current;\n\t\t\tif (currentParseEnabled && currentParseResult) {\n\t\t\t\tconst error = currentParseResult.isInvalid\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...currentParseResult.isInvalid,\n\t\t\t\t\t\t\tmessage: getErrorMessage(currentParseResult.isInvalid),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null;\n\n\t\t\t\tconst finalText =\n\t\t\t\t\t!error || error.code === 'NO_DATA'\n\t\t\t\t\t\t? currentParseResult.naturalText || ''\n\t\t\t\t\t\t: currentText;\n\t\t\t\tcurrentOnchange({\n\t\t\t\t\tparsed: currentParseResult,\n\t\t\t\t\tvalue: currentParseResult.config,\n\t\t\t\t\ttext: finalText,\n\t\t\t\t\terror,\n\t\t\t\t\tstartProgress,\n\t\t\t\t\tendProgress,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcurrentOnchange({\n\t\t\t\t\tvalue: currentValue,\n\t\t\t\t\ttext: currentText,\n\t\t\t\t\tstartProgress,\n\t\t\t\t\tendProgress,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, [startProgress, endProgress]);\n\n\t// Reset hasBeenSetRef on unmount so StrictMode's remount behaves like a real mount.\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\thasBeenSetRef.current = false;\n\t\t};\n\t}, []);\n\n\t// Effect watching value — mirrors the Svelte $effect with untrack.\n\t// All reads use refs so deps stay minimal (matching Svelte's untrack() semantics).\n\t// Refs are synced before triggerFilter so it sees the new text/parseResult,\n\t// since setState is async and parseResult useMemo hasn't re-run yet.\n\tuseEffect(() => {\n\t\tif (isInternalChangeRef.current) {\n\t\t\tisInternalChangeRef.current = false;\n\t\t\treturn;\n\t\t}\n\t\tif (!hasBeenSetRef.current) {\n\t\t\thasBeenSetRef.current = true;\n\t\t\tif (!value) return;\n\t\t}\n\t\tconst newText = idsToLabels(value, fieldMapsRef.current);\n\t\tsetText_(newText);\n\t\t// Sync refs immediately so triggerFilter reads the correct values\n\t\ttextRef.current = newText;\n\t\tif (parseEnabledRef.current) {\n\t\t\tparseResultRef.current = parseSet(newText, pFieldsRef.current, optionsRef.current, {\n\t\t\t\tallowFreeText: !strictParserRef.current,\n\t\t\t});\n\t\t}\n\t\ttriggerFilter();\n\t}, [value, triggerFilter]);\n\n\tfunction setText(newText) {\n\t\tsetText_(newText);\n\t\tisInternalChangeRef.current = true;\n\t\tsetValue(labelsToIds(newText, fieldMaps));\n\t}\n\n\tfunction onkeydown(e) {\n\t\tif (suggestions && suggestions.length) {\n\t\t\tsuggestRef.current.keydown(e);\n\t\t}\n\t\t// Enter triggers filter unless Suggest handled it (selected an item)\n\t\tif (e.key === 'Enter' && !e.defaultPrevented) {\n\t\t\ttriggerFilter();\n\t\t}\n\t}\n\n\tfunction selectByEvent(event) {\n\t\tconst insertText = event.id;\n\t\tif (!activeTokenInfo) return;\n\n\t\tconst before = text.slice(0, activeTokenInfo.start);\n\t\tconst after = text.slice(activeTokenInfo.end);\n\n\t\tlet newText;\n\t\tlet newCursorPos;\n\t\tif (activeTokenInfo.type === 'field') {\n\t\t\t// Append \": \" after field name per query syntax\n\t\t\tnewText = `${before}${insertText}: ${after}`;\n\t\t\tnewCursorPos = before.length + insertText.length + 2;\n\t\t} else if (activeTokenInfo.type === 'predicate') {\n\t\t\t// Append \": \" after predicate (e.g., \"StartDate.year: \")\n\t\t\tnewText = `${before}${insertText}: ${after}`;\n\t\t\tnewCursorPos = before.length + insertText.length + 2;\n\t\t} else {\n\t\t\t// Add space after colon if missing: \"field:\" -> \"field: value\"\n\t\t\tconst needsSpace = before.endsWith(':');\n\t\t\tconst prefix = needsSpace ? ' ' : '';\n\t\t\tnewText = `${before}${prefix}${insertText}${after}`;\n\t\t\tnewCursorPos = before.length + prefix.length + insertText.length;\n\t\t}\n\n\t\tsetText(newText);\n\t\tsetCursorPos(newCursorPos);\n\t\tcloseSuggestions();\n\n\t\t// Wait for React to update DOM before setting cursor position\n\t\trequestAnimationFrame(() => {\n\t\t\tif (inputEl.current) {\n\t\t\t\tinputEl.current.setSelectionRange(newCursorPos, newCursorPos);\n\t\t\t\tinputEl.current.focus();\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction handleInput(e) {\n\t\tconst newText = e.target.value;\n\t\tsetText_(newText);\n\t\tisInternalChangeRef.current = true;\n\t\tsetValue(labelsToIds(newText, fieldMaps));\n\t\tconst pos = e.target.selectionStart;\n\t\tsetCursorPos(pos);\n\t\tsetShowErrors(pos); // Pass position to suppress errors at active token\n\t\tsetSuggestOpen(true);\n\t}\n\n\tfunction handleScroll() {\n\t\tif (highlightEl.current && inputEl.current) {\n\t\t\thighlightEl.current.scrollLeft = inputEl.current.scrollLeft;\n\t\t}\n\t}\n\n\tfunction handleInputClick() {\n\t\tcloseSuggestions();\n\t}\n\n\tfunction clear() {\n\t\tsetText_('');\n\t\tisInternalChangeRef.current = true;\n\t\tsetValue('');\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"wx-filter-query wx-aaccSW8j\"\n\t\t\tonKeyDown={onkeydown}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={`wx-progress-bar wx-aaccSW8j${progressActive ? ' active' : ''}`}\n\t\t\t>\n\t\t\t\t{progressActive && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={progressKey}\n\t\t\t\t\t\tclassName=\"wx-progress-fill wx-aaccSW8j\"\n\t\t\t\t\t></div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"wx-filter-query-row wx-aaccSW8j\">\n\t\t\t\t<div className=\"wx-filter-query-input-wrapper wx-aaccSW8j\">\n\t\t\t\t\t{parseEnabled && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={`wx-filter-query-highlight wx-aaccSW8j${!text ? ' wx-placeholder' : ''}`}\n\t\t\t\t\t\t\tref={highlightEl}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{text ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<QueryHighlight\n\t\t\t\t\t\t\t\t\t\tparse={parseMode}\n\t\t\t\t\t\t\t\t\t\tquery={text}\n\t\t\t\t\t\t\t\t\t\tfields={pFields}\n\t\t\t\t\t\t\t\t\t\toptions={options}\n\t\t\t\t\t\t\t\t\t\tinline={true}\n\t\t\t\t\t\t\t\t\t\tshowErrors={showErrors}\n\t\t\t\t\t\t\t\t\t\tcursorPos={cursorPos}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tplaceholder\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclassName={`wx-filter-query-input wx-aaccSW8j${parseEnabled ? ' wx-parse-mode' : ''}`}\n\t\t\t\t\t\tref={inputEl}\n\t\t\t\t\t\tvalue={text}\n\t\t\t\t\t\tplaceholder={parseEnabled ? '' : placeholder}\n\t\t\t\t\t\tonInput={handleInput}\n\t\t\t\t\t\tonScroll={handleScroll}\n\t\t\t\t\t\tonClick={handleInputClick}\n\t\t\t\t\t\tonChange={() => {}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{text && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"wx-filter-query-clear wx-aaccSW8j\"\n\t\t\t\t\t\tonClick={clear}\n\t\t\t\t\t\taria-label=\"Clear\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\td=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"wx-filter-query-search wx-aaccSW8j\"\n\t\t\t\t\tonClick={triggerFilter}\n\t\t\t\t\taria-label=\"Search\"\n\t\t\t\t>\n\t\t\t\t\t<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\td=\"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<Suggest\n\t\t\t\tref={suggestRef}\n\t\t\t\titems={suggestions}\n\t\t\t\tonSelect={selectByEvent}\n\t\t\t\tonClose={closeSuggestions}\n\t\t\t>\n\t\t\t\t{({ option }) => option.label}\n\t\t\t</Suggest>\n\t\t</div>\n\t);\n}\n\nexport default FilterQuery;\n","import { Material as CoreMaterial } from '@svar-ui/react-core';\nimport './Material.css';\n\nexport default function Material({ fonts = true, children }) {\n  if (children) {\n    return <CoreMaterial fonts={fonts}>{children}</CoreMaterial>;\n  } else {\n    return <CoreMaterial fonts={fonts} />;\n  }\n}\n","import { Willow as CoreWillow } from '@svar-ui/react-core';\nimport './Willow.css';\n\nfunction Willow({ fonts = true, children }) {\n  return children ? (\n    <CoreWillow fonts={fonts}>{children}</CoreWillow>\n  ) : (\n    <CoreWillow fonts={fonts} />\n  );\n}\n\nexport default Willow;\n","import { WillowDark as CoreWillowDark } from '@svar-ui/react-core';\nimport './WillowDark.css';\n\nexport default function WillowDark(props) {\n  const { fonts = true, children } = props;\n\n  if (children) {\n    return <CoreWillowDark fonts={fonts}>{children}</CoreWillowDark>;\n  } else {\n    return <CoreWillowDark fonts={fonts} />;\n  }\n}\n"],"names":["store","createContext","Layout","props","fields","fieldsSelector","fieldProp","buttons","optionsProp","includesProp","typeProp","filterProp","valueProp","formatProp","predicateProp","onApply","onCancel","onChange","locale","useContext","context","l","f","dateFormat","dateToString","_","ACTION_FIELD_CHANGE","ACTION_FILTER_CHANGE","ACTION_VALUE_CHANGE","ACTION_INCLUDES_CHANGE","ACTION_TYPE_CHANGE","ACTION_CHANGE","ACTION_OPTIONS_CHANGE","_filter","set_filter","useState","_filterRef","useRef","_field","set_field","_fieldRef","_type","set_type","_typeRef","_value","set_value","_valueRef","_includes","set_includes","_includesRef","_options","set_options","_optionsRef","set_format","_formatRef","set_predicate","_predicateRef","ready","setReady","providedOptions","setProvidedOptions","loadOptions","field","result","sRef","timerRef","arr2str","v","updateState","setter","ref","value","setState","signal","execSignal","runSignal","allSelected","setAllSelected","allSelectedRef","visibleValues","setVisibleValues","visibleValuesRef","setRule","ruleRef","rules","setRules","rulesRef","s","nextField","a","isDate","isTuple","nv","nextRules","getFilters","rule","r","getFilter","handler","vv","nextIncs","x","as","getRule","doApply","doCancel","toggleAll","nextAll","handleChange","ev","inputValue","next","changeValue","changeField","changeFilter","out","getLabel","getComboOptions","options","arr","op","inputRef","useEffect","el","inp","currOptions","jsx","jsxs","RichSelect","DateRangePicker","DatePicker","Text","Combo","option","Button","i","Checkbox","FilterEditor","Locale","en","Panel","type","includes","useMemo","filter","id","api","storeContext","useStore","useCallback","doChange","Rule","action","noChange","lRef","fRef","_format","groupRef","filterValue","setFilterValue","Fragment","React","Glue","mode","toggleGlue","List","group","onShowMenu","valueState","valueChanged","useStoreWithCounter","fieldsState","editorState","filters","cssType","groupCss","handlers","getField","rootRef","ruleBox","setRuleBox","ruleEditor","setRuleEditor","node","delegateClick","rootNode","cancel","Portal","Popup","i18nCtx","addFilter","data","newFilterOptions","now","c","o","selectNewFilter","menuOptions","item","menuRef","menuAction","DropDownMenu","ContextMenu","camelize","part","FilterBuilder","forwardRef","init","restProps","restPropsRef","dataStore","DataStore","writable","firstInRoute","lastInRouteRef","EventBusRouter","b","name","initOnceRef","useImperativeHandle","ContextStore","debounce","lastField","setLastField","lastValue","setLastValue","getFieldOptions","normalizeField","normalizeFieldsFn","fieldsArr","getDynamicOptions","normalizedFields","originalValue","values","newLastField","fItem","computeFilters","nFields","lField","lValue","base","currentField","valueObj","createFilterRule","getRules","dispatchChange","delay","updateValue","prev","updateFiltersField","input","FilterBar","Suggest","items","children","onSelect","onClose","listRef","navIndex","setNavIndex","setNav","index","navigate","dir","scrollToIndex","handleMove","locateID","keydown","handleClick","Dropdown","QueryHighlight","query","inline","showErrors","cursorPos","parse","highlightedHtml","getQueryHtml","FilterQuery","placeholder","onchange","parseMode","i18n","setValue","useWritableProp","parseEnabled","strictParser","pFields","prepareFields","fieldMaps","buildFieldMaps","getErrorMessage","error","fn","text","setText_","isInternalChangeRef","hasBeenSetRef","progressActive","setProgressActive","progressKey","setProgressKey","setShowErrors","setCursorPos","suggestOpen","setSuggestOpen","inputEl","highlightEl","suggestRef","parseResult","parseSet","activeTokenInfo","getAutocompleteContext","currentTokenValue","suggestions","all","getSuggestions","onchangeRef","parseEnabledRef","strictParserRef","pFieldsRef","optionsRef","parseResultRef","valueRef","fieldMapsRef","textRef","startProgress","k","endProgress","closeSuggestions","triggerFilter","currentFieldMaps","prevText","idsToLabels","currentOnchange","currentParseEnabled","currentParseResult","currentValue","currentText","finalText","newText","setText","labelsToIds","onkeydown","e","selectByEvent","event","insertText","before","after","newCursorPos","prefix","handleInput","pos","handleScroll","handleInputClick","clear","Material","fonts","CoreMaterial","Willow","CoreWillow","WillowDark","CoreWillowDark"],"mappings":"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"}