{"version":3,"file":"defaults-FmvgcbMr.mjs","names":["initialState","QueryBuilderContext","_QBC"],"sources":["../src/components/ActionElement.tsx","../src/components/DragHandle.tsx","../src/components/InlineCombinator.tsx","../src/components/MatchModeEditor.tsx","../src/components/NotToggle.tsx","../src/messages.ts","../src/redux/queriesSlice.ts","../src/redux/QueryBuilderStateContext.ts","../src/redux/warningsSlice.ts","../src/redux/rootReducer.ts","../src/redux/_internal/hooks.ts","../src/redux/_internal/index.ts","../src/hooks/usePrevious.ts","../src/hooks/useControlledOrUncontrolled.ts","../src/hooks/useDeprecatedProps.ts","../src/hooks/useFields.ts","../src/redux/configureRqbStore.ts","../src/redux/getRqbStore.ts","../src/redux/selectors.ts","../src/redux/hooks.ts","../src/components/QueryBuilder.useQueryBuilderSchema.ts","../src/components/QueryBuilder.useQueryBuilderSetup.ts","../src/components/QueryBuilder.useQueryBuilder.ts","../src/components/QueryBuilderContext.ts","../src/components/RuleGroup.tsx","../src/components/ShiftActions.tsx","../src/components/ValueEditor.tsx","../src/hooks/useSelectElementChangeHandler.ts","../src/utils/getCompatContextProvider.tsx","../src/utils/mergeTranslations.ts","../src/utils/toOptions.tsx","../src/components/ValueSelector.tsx","../src/components/QueryBuilderInternal.tsx","../src/hooks/useMergedContext.ts","../src/hooks/useOptionListProp.ts","../src/hooks/usePathsMemo.ts","../src/hooks/usePreferProp.ts","../src/hooks/useReactDndWarning.ts","../src/hooks/useStopEventPropagation.ts","../src/components/Rule.tsx","../src/defaults.ts"],"sourcesContent":["import * as React from 'react';\nimport type { ActionProps } from '../types';\n\n/**\n * Default `<button>` component used by {@link QueryBuilder}.\n *\n * @group Components\n */\nexport const ActionElement = (props: ActionProps): React.JSX.Element => (\n  <button\n    type=\"button\"\n    data-testid={props.testID}\n    disabled={props.disabled && !props.disabledTranslation}\n    className={props.className}\n    title={\n      props.disabledTranslation && props.disabled ? props.disabledTranslation.title : props.title\n    }\n    onClick={e => props.handleOnClick(e)}>\n    {props.disabledTranslation && props.disabled ? props.disabledTranslation.label : props.label}\n  </button>\n);\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport type { DragHandleProps } from '../types';\n\n/**\n * Default drag handle component used by {@link QueryBuilder} when `enableDragAndDrop` is `true`.\n *\n * @group Components\n */\nexport const DragHandle: React.ForwardRefExoticComponent<\n  DragHandleProps & React.RefAttributes<HTMLSpanElement>\n> = forwardRef<HTMLSpanElement, DragHandleProps>((props, dragRef) => (\n  <span data-testid={props.testID} ref={dragRef} className={props.className} title={props.title}>\n    {props.label}\n  </span>\n));\n","import { clsx, standardClassnames, TestID } from '@react-querybuilder/core';\nimport * as React from 'react';\nimport type { InlineCombinatorProps } from '../types';\n\n/**\n * Default `inlineCombinator` component used by {@link QueryBuilder}. A small `<div>`\n * wrapper around the `combinatorSelector` component, used when either\n * `showCombinatorsBetweenRules` or `independentCombinators` are `true`.\n *\n * @group Components\n */\nexport const InlineCombinator = (allProps: InlineCombinatorProps): React.JSX.Element => {\n  const { component: CombinatorSelectorComponent, ...props } = allProps;\n\n  const className = clsx(\n    props.schema.suppressStandardClassnames || standardClassnames.betweenRules,\n    props.schema.classNames.betweenRules\n  );\n\n  return (\n    <div className={className} data-testid={TestID.inlineCombinator}>\n      <CombinatorSelectorComponent {...props} testID={TestID.combinators} />\n    </div>\n  );\n};\n","import type { FullField, MatchMode, Path, RuleType } from '@react-querybuilder/core';\nimport { lc, parseNumber } from '@react-querybuilder/core';\nimport * as React from 'react';\nimport { useCallback, useMemo } from 'react';\nimport type { MatchModeEditorProps, Schema } from '../types';\n\nconst dummyFieldData: FullField = { name: '', value: '', label: '' };\nconst requiresThreshold = (mm?: string | null) =>\n  ['atleast', 'atmost', 'exactly'].includes(lc(mm) ?? '');\nconst dummyPath: Path = [];\n\n/**\n * Default `matchModeEditor` component used by {@link QueryBuilder}.\n *\n * @group Components\n */\nexport const MatchModeEditor = (props: MatchModeEditorProps): React.JSX.Element | null => {\n  const {\n    match,\n    options,\n    title,\n    className,\n    disabled,\n    testID,\n    schema,\n    thresholdPlaceholder,\n    selectorComponent: SelectorComponent = props.schema.controls.valueSelector,\n    numericEditorComponent: NumericEditorComponent = props.schema.controls.valueEditor,\n  } = props;\n\n  const { thresholdNum, thresholdRule, thresholdSchema, handleChangeMode, handleChangeThreshold } =\n    useMatchModeEditor(props);\n\n  const thresholdFieldData = useMemo<FullField>(\n    () =>\n      thresholdPlaceholder\n        ? { ...dummyFieldData, placeholder: thresholdPlaceholder }\n        : dummyFieldData,\n    [thresholdPlaceholder]\n  );\n\n  return (\n    <React.Fragment>\n      <SelectorComponent\n        schema={schema}\n        testID={testID}\n        className={className}\n        title={title}\n        handleOnChange={handleChangeMode}\n        disabled={disabled}\n        value={match.mode}\n        options={options}\n        multiple={false}\n        listsAsArrays={false}\n        path={dummyPath}\n        level={0}\n      />\n      {requiresThreshold(match.mode) && (\n        <NumericEditorComponent\n          skipHook\n          testID={testID}\n          inputType=\"number\"\n          title={title}\n          className={className}\n          disabled={disabled}\n          handleOnChange={handleChangeThreshold}\n          field={''}\n          operator={''}\n          value={thresholdNum}\n          valueSource={'value'}\n          fieldData={thresholdFieldData}\n          schema={thresholdSchema}\n          path={dummyPath}\n          level={0}\n          rule={thresholdRule}\n        />\n      )}\n    </React.Fragment>\n  );\n};\n\nexport interface UseMatchModeEditor {\n  thresholdNum: number;\n  thresholdRule: RuleType;\n  thresholdSchema: Schema<FullField, string>;\n  handleChangeMode: (mode: MatchMode) => void;\n  handleChangeThreshold: (threshold: number) => void;\n}\nexport const useMatchModeEditor = (props: MatchModeEditorProps): UseMatchModeEditor => {\n  const { match, handleOnChange } = props;\n\n  const thresholdNum = React.useMemo(\n    () => (typeof match.threshold === 'number' ? Math.max(0, match.threshold) : 1),\n    [match.threshold]\n  );\n  const thresholdRule = React.useMemo(\n    () => ({ field: '', operator: '=', value: thresholdNum }),\n    [thresholdNum]\n  );\n  const thresholdSchema = React.useMemo(\n    () => ({ ...props.schema, parseNumbers: true }),\n    [props.schema]\n  );\n\n  const handleChangeMode = useCallback(\n    (mode: MatchMode) => {\n      if (requiresThreshold(mode) && typeof match.threshold !== 'number') {\n        handleOnChange({ ...match, mode, threshold: 1 });\n      } else {\n        handleOnChange({ ...match, mode });\n      }\n    },\n    [handleOnChange, match]\n  );\n\n  const handleChangeThreshold = useCallback(\n    (threshold: number) => {\n      handleOnChange({ ...match, threshold: parseNumber(threshold, { parseNumbers: true }) });\n    },\n    [handleOnChange, match]\n  );\n\n  return {\n    thresholdNum,\n    thresholdRule,\n    thresholdSchema,\n    handleChangeMode,\n    handleChangeThreshold,\n  };\n};\n","import * as React from 'react';\nimport type { NotToggleProps } from '../types';\n\n/**\n * Default `notToggle` (aka inversion) component used by {@link QueryBuilder}.\n *\n * @group Components\n */\nexport const NotToggle = (props: NotToggleProps): React.JSX.Element => {\n  const id = React.useId();\n  return (\n    <label data-testid={props.testID} className={props.className} title={props.title} htmlFor={id}>\n      <input\n        id={id}\n        type=\"checkbox\"\n        onChange={e => props.handleOnChange(e.target.checked)}\n        checked={!!props.checked}\n        disabled={props.disabled}\n      />\n      {props.label}\n    </label>\n  );\n};\n","export const messages = {\n  errorInvalidIndependentCombinatorsProp:\n    'QueryBuilder was rendered with a truthy independentCombinators prop. This prop is deprecated and unnecessary. Furthermore, the initial query/defaultQuery prop was of type RuleGroupType instead of type RuleGroupIC. More info: https://react-querybuilder.js.org/docs/components/querybuilder#independent-combinators',\n\n  errorUnnecessaryIndependentCombinatorsProp:\n    'QueryBuilder was rendered with the deprecated and unnecessary independentCombinators prop. To use independent combinators, make sure the query/defaultQuery prop is of type RuleGroupIC when the component mounts. More info: https://react-querybuilder.js.org/docs/components/querybuilder#independent-combinators',\n\n  errorDeprecatedRuleGroupProps:\n    'A custom RuleGroup component has rendered a standard RuleGroup component with deprecated props. The combinator, not, and rules props should not be used. Instead, the full group object should be passed as the ruleGroup prop.',\n\n  errorDeprecatedRuleProps:\n    'A custom RuleGroup component has rendered a standard Rule component with deprecated props. The field, operator, value, and valueSource props should not be used. Instead, the full rule object should be passed as the rule prop.',\n\n  errorBothQueryDefaultQuery:\n    'QueryBuilder was rendered with both query and defaultQuery props. QueryBuilder must be either controlled or uncontrolled (specify either the query prop, or the defaultQuery prop, but not both). Decide between using a controlled or uncontrolled query builder and remove one of these props. More info: https://reactjs.org/link/controlled-components',\n\n  errorUncontrolledToControlled:\n    'QueryBuilder is changing from an uncontrolled component to be controlled. This is likely caused by the query changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled query builder for the lifetime of the component. More info: https://reactjs.org/link/controlled-components',\n\n  errorControlledToUncontrolled:\n    'QueryBuilder is changing from a controlled component to be uncontrolled. This is likely caused by the query changing from defined to undefined, which should not happen. Decide between using a controlled or uncontrolled query builder for the lifetime of the component. More info: https://reactjs.org/link/controlled-components',\n\n  errorEnabledDndWithoutReactDnD:\n    'QueryBuilder was rendered with the enableDragAndDrop prop set to true, but either react-dnd was not detected or one of react-dnd-html5-backend or react-dnd-touch-backend was not detected. To enable drag-and-drop functionality, install react-dnd and one of the backend packages and wrap QueryBuilder in QueryBuilderDnD from @react-querybuilder/dnd.',\n\n  errorDeprecatedDebugImport: `Importing from react-querybuilder/debug is deprecated. To enable Redux DevTools for React Query Builder's internal store, set globalThis.__RQB_DEVTOOLS__ = true.`,\n} as const;\n","import type { RuleGroupTypeAny } from '@react-querybuilder/core';\nimport type { PayloadAction, Slice } from '@reduxjs/toolkit';\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport type QueriesSliceState = Record<string, RuleGroupTypeAny>;\n\nexport interface SetQueryStateParams {\n  qbId: string;\n  query: RuleGroupTypeAny;\n}\n\nconst initialState: QueriesSliceState = {};\n\nexport const queriesSlice: Slice<\n  QueriesSliceState,\n  {\n    setQueryState: (\n      state: QueriesSliceState,\n      { payload: { qbId, query } }: PayloadAction<SetQueryStateParams>\n    ) => void;\n  },\n  'queries',\n  'queries',\n  { getQuerySelectorById: (state: QueriesSliceState, qbId: string) => RuleGroupTypeAny }\n> = createSlice({\n  name: 'queries',\n  initialState,\n  reducers: {\n    setQueryState: (state, { payload: { qbId, query } }) => {\n      state[qbId] = query;\n    },\n  },\n  selectors: {\n    getQuerySelectorById: (state, qbId) => state[qbId],\n  },\n});\n","import * as React from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport type { RqbState } from './types';\n\nexport const QueryBuilderStateContext: React.Context<ReactReduxContextValue<RqbState> | null> =\n  React.createContext<ReactReduxContextValue<RqbState> | null>(null);\n","import type { PayloadAction, Slice } from '@reduxjs/toolkit';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { messages } from '../messages';\n\ntype ValuesAsKeys<T> =\n  T extends Record<infer _K, infer V>\n    ? [V] extends [string]\n      ? { [Key in V]: boolean }\n      : never\n    : never;\ntype ValuesType<T> =\n  T extends Record<infer _K, infer V> ? ([V] extends [string] ? V : never) : never;\nexport type WarningsSliceState = ValuesAsKeys<typeof messages>;\nexport type Messages = ValuesType<typeof messages>;\nconst initialState: WarningsSliceState = {\n  [messages.errorInvalidIndependentCombinatorsProp]: false,\n  [messages.errorUnnecessaryIndependentCombinatorsProp]: false,\n  [messages.errorDeprecatedRuleGroupProps]: false,\n  [messages.errorDeprecatedRuleProps]: false,\n  [messages.errorBothQueryDefaultQuery]: false,\n  [messages.errorUncontrolledToControlled]: false,\n  [messages.errorControlledToUncontrolled]: false,\n  [messages.errorEnabledDndWithoutReactDnD]: false,\n  [messages.errorDeprecatedDebugImport]: false,\n};\n\nexport const warningsSlice: Slice<\n  WarningsSliceState,\n  {\n    // oxlint-disable-next-line typescript/no-explicit-any\n    rqbWarn: (state: any, { payload }: PayloadAction<Messages>) => void;\n  },\n  'warnings'\n> = createSlice({\n  name: 'warnings',\n  initialState,\n  reducers: {\n    rqbWarn: (state, { payload }) => {\n      if (!state[payload]) {\n        console.error(payload);\n        state[payload] = true;\n      }\n    },\n  },\n});\n","import type { CombinedSliceReducer } from '@reduxjs/toolkit';\nimport { combineSlices } from '@reduxjs/toolkit';\nimport type { QueriesSliceState } from './queriesSlice';\nimport { queriesSlice } from './queriesSlice';\nimport type { WarningsSliceState } from './warningsSlice';\nimport { warningsSlice } from './warningsSlice';\n\nexport interface LazyLoadedSlices {}\n\nexport const rootReducer: CombinedSliceReducer<{\n  queries: QueriesSliceState;\n  warnings: WarningsSliceState;\n}> = combineSlices(queriesSlice, warningsSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n","import type { Dispatch, Store, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport React from 'react';\nimport type { ReactReduxContextValue, TypedUseSelectorHook, UseStore } from 'react-redux';\nimport { createDispatchHook, createSelectorHook, createStoreHook } from 'react-redux';\nimport type { RqbState } from '../types';\n\nconst genUseQueryBuilderDispatch = (\n  ctx: React.Context<ReactReduxContextValue<RqbState> | null>\n): UseQueryBuilderDispatch => createDispatchHook(ctx);\nexport type UseQueryBuilderDispatch = () => ThunkDispatch<RqbState, undefined, UnknownAction> &\n  Dispatch;\n\nconst genUseQueryBuilderStore = (\n  ctx: React.Context<ReactReduxContextValue<RqbState> | null>\n): UseStore<Store<RqbState>> => createStoreHook(ctx);\n\nconst genUseQueryBuilderSelector = (\n  ctx: React.Context<ReactReduxContextValue<RqbState> | null>\n): TypedUseSelectorHook<RqbState> => createSelectorHook(ctx);\n\nexport const getInternalHooks = (\n  ctx: React.Context<ReactReduxContextValue<RqbState> | null>\n): {\n  useRQB_INTERNAL_QueryBuilderDispatch: UseQueryBuilderDispatch;\n  useRQB_INTERNAL_QueryBuilderStore: UseStore<Store<RqbState>>;\n  useRQB_INTERNAL_QueryBuilderSelector: TypedUseSelectorHook<RqbState>;\n} => ({\n  useRQB_INTERNAL_QueryBuilderDispatch: genUseQueryBuilderDispatch(ctx),\n  useRQB_INTERNAL_QueryBuilderStore: genUseQueryBuilderStore(ctx),\n  useRQB_INTERNAL_QueryBuilderSelector: genUseQueryBuilderSelector(ctx),\n});\n","import type { RuleGroupType, RuleGroupTypeIC } from '@react-querybuilder/core';\nimport type { ConfigureStoreOptions, PayloadAction, Store, ThunkAction } from '@reduxjs/toolkit';\nimport type { TypedUseSelectorHook, UseStore } from 'react-redux';\nimport type { SetQueryStateParams } from '../queriesSlice';\nimport { queriesSlice } from '../queriesSlice';\nimport { QueryBuilderStateContext } from '../QueryBuilderStateContext';\nimport { rootReducer } from '../rootReducer';\nimport type { RqbState } from '../types';\nimport type { Messages } from '../warningsSlice';\nimport { warningsSlice } from '../warningsSlice';\nimport type { UseQueryBuilderDispatch } from './hooks';\nimport { getInternalHooks } from './hooks';\n\nexport const _RQB_INTERNAL_dispatchThunk =\n  ({\n    payload,\n    onQueryChange,\n  }: {\n    payload: SetQueryStateParams;\n    onQueryChange?: ((query: RuleGroupType) => void) | ((query: RuleGroupTypeIC) => void);\n  }): ThunkAction<void, RqbState, unknown, PayloadAction<SetQueryStateParams>> =>\n  dispatch => {\n    dispatch(queriesSlice.actions.setQueryState(payload));\n    if (typeof onQueryChange === 'function') {\n      onQueryChange(payload.query as never /* ??? */);\n    }\n  };\n\nconst internalHooks = getInternalHooks(QueryBuilderStateContext);\n\n/**\n * Gets the `dispatch` function for the RQB Redux store.\n */\nexport const useRQB_INTERNAL_QueryBuilderDispatch: UseQueryBuilderDispatch =\n  internalHooks.useRQB_INTERNAL_QueryBuilderDispatch;\n/**\n * Gets the full RQB Redux store.\n */\nexport const useRQB_INTERNAL_QueryBuilderStore: UseStore<Store<RqbState>> =\n  internalHooks.useRQB_INTERNAL_QueryBuilderStore;\n/**\n * General purpose selector hook for the RQB Redux store.\n */\nexport const useRQB_INTERNAL_QueryBuilderSelector: TypedUseSelectorHook<RqbState> =\n  internalHooks.useRQB_INTERNAL_QueryBuilderSelector;\n\nconst { rqbWarn: _SYNC_rqbWarn } = warningsSlice.actions;\n\nexport const rqbWarn =\n  (msg: Messages): ThunkAction<void, RqbState, unknown, PayloadAction<Messages>> =>\n  dispatch => {\n    setTimeout(() => dispatch(_SYNC_rqbWarn(msg)));\n  };\n\nconst preloadedState = {\n  queries: queriesSlice.getInitialState(),\n  warnings: warningsSlice.getInitialState(),\n  // Avoid importing the async slice itself to ensure lazy loading\n  // asyncOptionLists: { cache: {}, loading: {}, errors: {} },\n} as RqbState;\n\nexport const storeCommon: ConfigureStoreOptions = {\n  reducer: rootReducer,\n  preloadedState,\n  middleware: getDefaultMiddleware =>\n    getDefaultMiddleware({\n      // Ignore non-serializable values in setQueryState actions and rule `value`s\n      // https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data\n      serializableCheck: {\n        ignoredActions: [queriesSlice.actions.setQueryState.type],\n        ignoredPaths: [/^queries\\b.*\\.rules\\.\\d+\\.value$/],\n      },\n    }),\n};\n","import { useRef } from 'react';\n\n/**\n * Returns the prop value from the last render.\n *\n * Adapted from https://usehooks.com/usePrevious/.\n *\n * @group Hooks\n */\nexport const usePrevious = <T>(value: T): T | null => {\n  const ref = useRef<{ value: T | null; prev: T | null }>({ value, prev: null });\n\n  const current = ref.current.value;\n\n  if (value !== current) {\n    // ref.current = { value, prev: current };\n    ref.current.prev = current;\n    ref.current.value = value;\n  }\n\n  return ref.current.prev;\n};\n","import type { RuleGroupTypeAny } from '@react-querybuilder/core';\nimport { messages } from '../messages';\nimport { rqbWarn, useRQB_INTERNAL_QueryBuilderDispatch } from '../redux/_internal';\nimport { usePrevious } from './usePrevious';\n\nexport interface UseControlledOrUncontrolledParams {\n  defaultQuery?: RuleGroupTypeAny;\n  queryProp?: RuleGroupTypeAny;\n}\n\n/**\n * Logs a warning when the component changes from controlled to uncontrolled,\n * vice versa, or both `query` and `defaultQuery` are provided.\n *\n * @group Hooks\n */\nexport const useControlledOrUncontrolled = (params: UseControlledOrUncontrolledParams): void => {\n  const dispatch = useRQB_INTERNAL_QueryBuilderDispatch();\n  const { defaultQuery, queryProp } = params;\n  const prevQueryPresent = usePrevious(!!queryProp);\n\n  // v8 ignore else\n  if (process.env.NODE_ENV !== 'production') {\n    if (!!queryProp && !!defaultQuery) {\n      dispatch(rqbWarn(messages.errorBothQueryDefaultQuery));\n    } else if (prevQueryPresent === true && !queryProp && !!defaultQuery) {\n      dispatch(rqbWarn(messages.errorControlledToUncontrolled));\n    } else if (prevQueryPresent === false && !!queryProp && !defaultQuery) {\n      dispatch(rqbWarn(messages.errorUncontrolledToControlled));\n    }\n  }\n};\n","import { messages } from '../messages';\nimport { rqbWarn, useRQB_INTERNAL_QueryBuilderDispatch } from '../redux/_internal';\n\n/**\n * Logs an error to the console if any of the following are true:\n * - `QueryBuilder` is rendered with an `independentCombinators` prop\n * - `RuleGroup` is rendered with `combinator` or `rules` props (deprecated in favor of `ruleGroup`)\n * - `Rule` is rendered with `field`, `operator`, or `value` props (deprecated in favor of `rule`)\n *\n * @group Hooks\n */\nfunction useDeprecatedProps(\n  type: 'independentCombinators',\n  logWarning: boolean,\n  otherParams: 'invalid' | 'unnecessary'\n): void;\nfunction useDeprecatedProps(type: 'rule' | 'ruleGroup', logWarning: boolean): void;\nfunction useDeprecatedProps(\n  /** Type of error to be logged, if logWarning is true. */\n  type: 'independentCombinators' | 'rule' | 'ruleGroup',\n  /** If true, the error (well...warning, really) will be logged. */\n  logWarning: boolean,\n  otherParams?: 'invalid' | 'unnecessary'\n) {\n  const dispatch = useRQB_INTERNAL_QueryBuilderDispatch();\n  if (process.env.NODE_ENV !== 'production' && logWarning) {\n    if (type === 'independentCombinators') {\n      if (otherParams === 'invalid') {\n        dispatch(rqbWarn(messages.errorInvalidIndependentCombinatorsProp));\n      }\n\n      if (otherParams === 'unnecessary') {\n        dispatch(rqbWarn(messages.errorUnnecessaryIndependentCombinatorsProp));\n      }\n    }\n\n    if (type === 'rule') {\n      dispatch(rqbWarn(messages.errorDeprecatedRuleProps));\n    }\n\n    if (type === 'ruleGroup') {\n      dispatch(rqbWarn(messages.errorDeprecatedRuleGroupProps));\n    }\n  }\n}\n\nexport { useDeprecatedProps };\n","import type {\n  FullCombinator,\n  FullField,\n  FullOperator,\n  FullOptionList,\n  FullOptionRecord,\n  RuleGroupTypeAny,\n} from '@react-querybuilder/core';\nimport { prepareOptionList } from '@react-querybuilder/core';\nimport { useMemo } from 'react';\nimport type { QueryBuilderProps, TranslationsFull } from '../types';\n\nexport interface UseFields<F extends FullField> {\n  defaultField: FullField;\n  fields: FullOptionList<F>;\n  fieldMap: Partial<FullOptionRecord<FullField>>;\n}\n\nexport const useFields = <F extends FullField>(\n  props: { translations: TranslationsFull } & Pick<\n    QueryBuilderProps<RuleGroupTypeAny, F, FullOperator, FullCombinator>,\n    'fields' | 'baseField' | 'autoSelectField'\n  >\n): UseFields<F> => {\n  const {\n    optionList: fields,\n    optionsMap: fieldMap,\n    defaultOption: defaultField,\n  } = useMemo(\n    () =>\n      prepareOptionList({\n        placeholder: props.translations.fields,\n        optionList: props.fields,\n        autoSelectOption: props.autoSelectField,\n        baseOption: props.baseField,\n      }),\n    [props.autoSelectField, props.baseField, props.fields, props.translations.fields]\n  );\n  return { fields, fieldMap, defaultField };\n};\n","import type { Slice } from '@reduxjs/toolkit';\nimport { configureStore } from '@reduxjs/toolkit';\nimport { storeCommon } from './_internal';\nimport { rootReducer } from './rootReducer';\nimport type { RqbStore } from './types';\n\nexport const configureRqbStore = (devTools?: boolean): RqbStore => {\n  const queryBuilderStore = configureStore({\n    ...storeCommon,\n    devTools: devTools ? /* v8 ignore next -- @preserve */ { name: 'React Query Builder' } : false,\n  }) as RqbStore;\n\n  queryBuilderStore.addSlice = (slice: Slice) => {\n    rootReducer.inject(slice);\n    // Initialize state for the new slice. This action is a no-op because\n    // the `type` is random and will never match any reducers.\n    queryBuilderStore.dispatch({\n      type: crypto.randomUUID().slice(0, 8),\n      meta: `Initializing state for slice \"${slice.name}\"`,\n    });\n  };\n\n  return queryBuilderStore;\n};\n","import type { Slice } from '@reduxjs/toolkit';\nimport { configureRqbStore } from './configureRqbStore';\nimport type { RqbStore } from './types';\n\nlet _store: RqbStore | null = null;\n\ndeclare global {\n  var __RQB_DEVTOOLS__: boolean | undefined;\n}\n\n/**\n * Gets the singleton React Query Builder store instance.\n * DevTools are enabled if either:\n * - globalThis.__RQB_DEVTOOLS__ is truthy\n * - window.__RQB_DEVTOOLS__ is truthy\n */\nexport function getRqbStore(devTools?: boolean): RqbStore {\n  if (!_store) {\n    const devToolsEnabled = devTools || globalThis?.__RQB_DEVTOOLS__;\n\n    _store = configureRqbStore(devToolsEnabled);\n  }\n  return _store;\n}\n\n/**\n * Injects a slice into the React Query Builder store. Useful for extensions\n * that need to integrate their own state management.\n */\nexport const injectSlice = (slice: Slice): void => getRqbStore().addSlice(slice);\n","import type { RuleGroupTypeAny } from '@react-querybuilder/core';\nimport { queriesSlice } from './queriesSlice';\nimport type { RqbState } from './types';\n\n/**\n * Given a `qbId` (passed to every component as part of the `schema` prop), returns\n * a Redux selector for use with {@link useQueryBuilderSelector}.\n *\n * Note that {@link useQueryBuilderQuery} is a more concise way of accessing the\n * query for the nearest ancestor {@link QueryBuilder} component.\n */\nexport const getQuerySelectorById =\n  (qbId: string) =>\n  (state: RqbState): RuleGroupTypeAny =>\n    queriesSlice.selectors.getQuerySelectorById({ queries: state.queries }, qbId);\n","import type { RuleGroupTypeAny } from '@react-querybuilder/core';\nimport * as React from 'react';\nimport type { TypedUseSelectorHook } from 'react-redux';\nimport { QueryBuilderContext } from '../components';\nimport { useRQB_INTERNAL_QueryBuilderSelector } from './_internal';\nimport { getQuerySelectorById } from './selectors';\nimport type { RqbState } from './types';\n\n/**\n * A Redux `useSelector` hook for RQB's internal store. See also {@link getQuerySelectorById}.\n *\n * **TIP:** Prefer {@link useQueryBuilderQuery} if you only need to access the query object\n * for the nearest ancestor {@link QueryBuilder} component.\n *\n * @group Hooks\n */\nexport const useQueryBuilderSelector: TypedUseSelectorHook<RqbState> = (selector, other) => {\n  const rqbContext = React.useContext(QueryBuilderContext);\n  // TypedUseSelectorHook's equalityFn param doesn't match internal hook's signature\n  const result = useRQB_INTERNAL_QueryBuilderSelector(selector, other as undefined);\n  return result ?? rqbContext?.initialQuery;\n};\n\n/**\n * Retrieves the full, latest query object for the nearest ancestor {@link QueryBuilder}\n * component.\n *\n * The optional parameter should only be used when retrieving a query object from a different\n * {@link QueryBuilder} than the nearest ancestor. It can be a full props object as passed\n * to a custom component or any object matching the interface `{ schema: { qbId: string } }`.\n *\n * Must follow React's [Rules of Hooks](https://react.dev/warnings/invalid-hook-call-warning).\n *\n * @group Hooks\n */\nexport const useQueryBuilderQuery = (props?: { schema: { qbId: string } }): RuleGroupTypeAny => {\n  const rqbContext = React.useContext(QueryBuilderContext);\n  return (\n    useRQB_INTERNAL_QueryBuilderSelector(\n      getQuerySelectorById(\n        props?.schema.qbId ??\n          rqbContext.qbId ??\n          /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n      )\n    ) ?? rqbContext?.initialQuery\n  );\n};\n","import type {\n  FullCombinator,\n  FullField,\n  FullOperator,\n  FullOptionMap,\n  GetOptionIdentifierType,\n  GetRuleTypeFromGroupWithFieldAndOperator,\n  MatchModeOptions,\n  Path,\n  QueryActions,\n  QueryValidator,\n  RuleGroupTypeAny,\n  RuleGroupTypeIC,\n  UpdateableProperties,\n  ValidationMap,\n  ValueSourceFullOptions,\n} from '@react-querybuilder/core';\nimport {\n  add,\n  clsx,\n  findPath,\n  generateAccessibleDescription,\n  group,\n  isRuleGroup,\n  isRuleGroupTypeIC,\n  LogType,\n  move,\n  pathIsDisabled,\n  prepareRuleGroup,\n  remove,\n  standardClassnames,\n  update,\n} from '@react-querybuilder/core';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useControlledOrUncontrolled, useDeprecatedProps } from '../hooks/';\nimport { getQuerySelectorById, useQueryBuilderSelector } from '../redux';\nimport {\n  _RQB_INTERNAL_dispatchThunk,\n  useRQB_INTERNAL_QueryBuilderDispatch,\n  useRQB_INTERNAL_QueryBuilderStore,\n} from '../redux/_internal';\nimport type { QueryBuilderProps, RuleGroupProps, Schema, TranslationsFull } from '../types';\nimport type { UseQueryBuilderSetup } from './QueryBuilder.useQueryBuilderSetup';\n\nconst defaultValidationResult: ReturnType<QueryValidator> = {};\nconst defaultValidationMap: ValidationMap = {};\nconst defaultDisabledPaths: Path[] = [];\nconst icCombinatorPropObject = {} as const;\nconst defaultGetValueEditorSeparator = () => null;\nconst defaultGetRuleOrGroupClassname = () => '';\nconst defaultOnAddMoveRemove = () => true;\n// v8 ignore next\nconst defaultOnLog = (...params: unknown[]) => {\n  console.log(...params);\n};\n\nexport type UseQueryBuilderSchema<\n  RG extends RuleGroupTypeAny,\n  F extends FullField,\n  O extends FullOperator,\n  C extends FullCombinator,\n> = Pick<UseQueryBuilderSetup<RG, F, O, C>, 'rqbContext'> & {\n  actions: QueryActions;\n  rootGroup: RuleGroupTypeAny<GetRuleTypeFromGroupWithFieldAndOperator<RG, F, O>>;\n  rootGroupDisabled: boolean;\n  queryDisabled: boolean;\n  schema: Schema<F, GetOptionIdentifierType<O>>;\n  translations: TranslationsFull;\n  wrapperClassName: string;\n  dndEnabledAttr: string;\n  inlineCombinatorsAttr: string;\n  combinatorPropObject: Pick<RuleGroupProps, 'combinator'>;\n};\n\n/**\n * For given {@link QueryBuilderProps} and setup values from {@link useQueryBuilderSetup},\n * prepares and returns all values required to render a query builder.\n *\n * @group Hooks\n */\nexport function useQueryBuilderSchema<\n  RG extends RuleGroupTypeAny,\n  F extends FullField,\n  O extends FullOperator,\n  C extends FullCombinator,\n>(\n  props: QueryBuilderProps<RG, F, O, C>,\n  setup: UseQueryBuilderSetup<RG, F, O, C>\n): UseQueryBuilderSchema<RG, F, O, C> {\n  type R = GetRuleTypeFromGroupWithFieldAndOperator<RG, F, O>;\n\n  const {\n    query: queryProp,\n    defaultQuery: defaultQueryProp,\n    getValueEditorSeparator = defaultGetValueEditorSeparator,\n    getRuleClassname = defaultGetRuleOrGroupClassname,\n    getRuleGroupClassname = defaultGetRuleOrGroupClassname,\n    onAddRule = defaultOnAddMoveRemove,\n    onAddGroup = defaultOnAddMoveRemove,\n    onMoveRule = defaultOnAddMoveRemove,\n    onMoveGroup = defaultOnAddMoveRemove,\n    onGroupRule = defaultOnAddMoveRemove,\n    onGroupGroup = defaultOnAddMoveRemove,\n    onRemove = defaultOnAddMoveRemove,\n    onQueryChange,\n    showCombinatorsBetweenRules: showCombinatorsBetweenRulesProp = false,\n    showNotToggle: showNotToggleProp = false,\n    showShiftActions: showShiftActionsProp = false,\n    showCloneButtons: showCloneButtonsProp = false,\n    showLockButtons: showLockButtonsProp = false,\n    showMuteButtons: showMuteButtonsProp = false,\n    suppressStandardClassnames: suppressStandardClassnamesProp = false,\n    resetOnFieldChange: resetOnFieldChangeProp = true,\n    resetOnOperatorChange: resetOnOperatorChangeProp = false,\n    autoSelectField: autoSelectFieldProp = true,\n    autoSelectOperator: autoSelectOperatorProp = true,\n    autoSelectValue: autoSelectValueProp = true,\n    addRuleToNewGroups: addRuleToNewGroupsProp = false,\n    listsAsArrays: listsAsArraysProp = false,\n    parseNumbers = false,\n    disabled = false,\n    validator,\n    onLog = defaultOnLog,\n    idGenerator,\n    accessibleDescriptionGenerator = generateAccessibleDescription,\n  } = props;\n\n  const {\n    qbId,\n    rqbContext: incomingRqbContext,\n    fields,\n    fieldMap,\n    combinators,\n    getOperatorsMain,\n    getMatchModesMain,\n    getRuleDefaultOperator,\n    getSubQueryBuilderPropsMain,\n    getValueEditorTypeMain,\n    getValueSourcesMain,\n    getValuesMain,\n    getRuleDefaultValue,\n    getInputTypeMain,\n    createRule,\n    createRuleGroup,\n  } = setup;\n\n  const {\n    controlClassnames,\n    controlElements: controls,\n    debugMode,\n    enableDragAndDrop,\n    enableMountQueryChange,\n    translations,\n  } = incomingRqbContext;\n\n  // #region Type coercions\n  // oxlint-disable typescript/no-unnecessary-type-conversion\n  const showCombinatorsBetweenRules = !!showCombinatorsBetweenRulesProp;\n  const showNotToggle = !!showNotToggleProp;\n  const showShiftActions = !!showShiftActionsProp;\n  const showCloneButtons = !!showCloneButtonsProp;\n  const showLockButtons = !!showLockButtonsProp;\n  const showMuteButtons = !!showMuteButtonsProp;\n  const resetOnFieldChange = !!resetOnFieldChangeProp;\n  const resetOnOperatorChange = !!resetOnOperatorChangeProp;\n  const autoSelectField = !!autoSelectFieldProp;\n  const autoSelectOperator = !!autoSelectOperatorProp;\n  const autoSelectValue = !!autoSelectValueProp;\n  const addRuleToNewGroups = !!addRuleToNewGroupsProp;\n  const listsAsArrays = !!listsAsArraysProp;\n  const suppressStandardClassnames = !!suppressStandardClassnamesProp;\n  const maxLevels = (props.maxLevels ?? 0) > 0 ? Number(props.maxLevels) : Infinity;\n  // oxlint-enable typescript/no-unnecessary-type-conversion\n  // #endregion\n\n  const log = useCallback(\n    (...params: unknown[]) => {\n      if (debugMode) {\n        onLog(...params);\n      }\n    },\n    [debugMode, onLog]\n  );\n\n  // #region Controlled vs uncontrolled mode\n  useControlledOrUncontrolled({\n    defaultQuery: defaultQueryProp,\n    queryProp,\n  });\n\n  const queryBuilderStore = useRQB_INTERNAL_QueryBuilderStore();\n  const queryBuilderDispatch = useRQB_INTERNAL_QueryBuilderDispatch();\n\n  const querySelector = useMemo(() => getQuerySelectorById(qbId), [qbId]);\n  const storeQuery = useQueryBuilderSelector(querySelector);\n  const getQuery = useCallback(\n    () => querySelector(queryBuilderStore.getState()),\n    [queryBuilderStore, querySelector]\n  );\n\n  const fallbackQuery = useMemo(() => createRuleGroup(), [createRuleGroup]);\n\n  // We assume here that if the query has an `id` property, the query has already\n  // been prepared. If `candidateQuery === query`, the user is probably just\n  // passing back the parameter from the `onQueryChange` callback.\n  const candidateQuery = queryProp ?? storeQuery ?? defaultQueryProp ?? fallbackQuery;\n  const rootGroup = (\n    candidateQuery.id ? candidateQuery : prepareRuleGroup(candidateQuery, { idGenerator })\n  ) as RuleGroupTypeAny<R>;\n\n  const [initialQuery] = useState(rootGroup);\n  const rqbContext = useMemo(\n    () => ({ ...incomingRqbContext, initialQuery }),\n    [incomingRqbContext, initialQuery]\n  );\n\n  // If a new `query` prop is passed in that doesn't match the query in the store,\n  // update the store to match the prop _without_ calling `onQueryChange`.\n  useEffect(() => {\n    if (!!queryProp && !Object.is(queryProp, storeQuery)) {\n      queryBuilderDispatch(\n        _RQB_INTERNAL_dispatchThunk({\n          payload: { qbId, query: queryProp },\n          onQueryChange: undefined,\n        })\n      );\n    }\n  }, [queryProp, qbId, storeQuery, queryBuilderDispatch]);\n\n  const independentCombinators = useMemo(() => isRuleGroupTypeIC(rootGroup), [rootGroup]);\n  const invalidIC = !!props.independentCombinators && !independentCombinators;\n  useDeprecatedProps(\n    'independentCombinators',\n    invalidIC || (!invalidIC && (props.independentCombinators ?? 'not present') !== 'not present'),\n    invalidIC ? 'invalid' : 'unnecessary'\n  );\n\n  const hasRunMountQueryChange = useRef(false);\n  useEffect(() => {\n    if (hasRunMountQueryChange.current) return;\n    hasRunMountQueryChange.current = true;\n    queryBuilderDispatch(\n      _RQB_INTERNAL_dispatchThunk({\n        payload: { qbId, query: rootGroup },\n        onQueryChange:\n          // Leave `onQueryChange` undefined if `enableMountQueryChange` is disabled\n          enableMountQueryChange && typeof onQueryChange === 'function' ? onQueryChange : undefined,\n      })\n    );\n  }, [enableMountQueryChange, onQueryChange, qbId, queryBuilderDispatch, rootGroup]);\n\n  /**\n   * Updates the redux-based query, then calls `onQueryChange` with the updated\n   * query object. NOTE: `useCallback` is only effective here when the user's\n   * `onQueryChange` handler is undefined or has a stable reference, which usually\n   * means that it's wrapped in its own `useCallback`.\n   */\n  const dispatchQuery = useCallback(\n    (newQuery: RuleGroupTypeAny) => {\n      queryBuilderDispatch(\n        _RQB_INTERNAL_dispatchThunk({ payload: { qbId, query: newQuery }, onQueryChange })\n      );\n    },\n    [onQueryChange, qbId, queryBuilderDispatch]\n  );\n  // #endregion\n\n  // #region Query update methods\n  const disabledPaths = (Array.isArray(disabled) && disabled) || defaultDisabledPaths;\n  const queryDisabled = disabled === true;\n  const rootGroupDisabled = rootGroup.disabled || disabledPaths.some(p => p.length === 0);\n\n  const onRuleAdd = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (rule: R, parentPath: Path, context?: any) => {\n      const queryLocal = getQuerySelectorById(qbId)(queryBuilderStore.getState()) as RG;\n      // v8 ignore if\n      if (!queryLocal) return;\n      if (pathIsDisabled(parentPath, queryLocal) || queryDisabled) {\n        log({ qbId, type: LogType.parentPathDisabled, rule, parentPath, query: queryLocal });\n        return;\n      }\n      // @ts-expect-error `queryLocal` is type `RuleGroupTypeAny`, but it doesn't matter here\n      const nextRule = onAddRule(rule, parentPath, queryLocal, context);\n      if (!nextRule) {\n        log({ qbId, type: LogType.onAddRuleFalse, rule, parentPath, query: queryLocal });\n        return;\n      }\n      const newRule = nextRule === true ? rule : nextRule;\n      const newQuery = add(queryLocal, newRule, parentPath, {\n        combinators,\n        combinatorPreceding: newRule.combinatorPreceding ?? undefined,\n        idGenerator,\n      });\n      log({ qbId, type: LogType.add, query: queryLocal, newQuery, newRule, parentPath });\n      dispatchQuery(newQuery);\n    },\n    [\n      combinators,\n      dispatchQuery,\n      idGenerator,\n      log,\n      onAddRule,\n      qbId,\n      queryBuilderStore,\n      queryDisabled,\n    ]\n  );\n\n  const onGroupAdd = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (ruleGroup: RG, parentPath: Path, context?: any) => {\n      if (parentPath.length >= maxLevels) return;\n      const queryLocal = getQuerySelectorById(qbId)(queryBuilderStore.getState()) as RG;\n      // v8 ignore if\n      if (!queryLocal) return;\n      if (pathIsDisabled(parentPath, queryLocal) || queryDisabled) {\n        log({\n          qbId,\n          type: LogType.parentPathDisabled,\n          ruleGroup,\n          parentPath,\n          query: queryLocal,\n        });\n        return;\n      }\n      // @ts-expect-error `queryLocal` is type `RuleGroupTypeAny`, but it doesn't matter here\n      const nextGroup = onAddGroup(ruleGroup, parentPath, queryLocal, context);\n      if (!nextGroup) {\n        log({ qbId, type: LogType.onAddGroupFalse, ruleGroup, parentPath, query: queryLocal });\n        return;\n      }\n      const newGroup = nextGroup === true ? ruleGroup : nextGroup;\n      const newQuery = add(queryLocal, newGroup, parentPath, {\n        combinators,\n        combinatorPreceding: (newGroup as RuleGroupTypeIC).combinatorPreceding ?? undefined,\n        idGenerator,\n      });\n      log({ qbId, type: LogType.add, query: queryLocal, newQuery, newGroup, parentPath });\n      dispatchQuery(newQuery);\n    },\n    [\n      combinators,\n      dispatchQuery,\n      idGenerator,\n      log,\n      maxLevels,\n      onAddGroup,\n      qbId,\n      queryBuilderStore,\n      queryDisabled,\n    ]\n  );\n\n  const onPropChange = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (prop: UpdateableProperties, value: any, path: Path) => {\n      const queryLocal = getQuerySelectorById(qbId)(queryBuilderStore.getState());\n      // v8 ignore if\n      if (!queryLocal) return;\n      if ((pathIsDisabled(path, queryLocal) && prop !== 'disabled') || queryDisabled) {\n        log({ qbId, type: LogType.pathDisabled, path, prop, value, query: queryLocal });\n        return;\n      }\n\n      const newQuery = update(queryLocal, prop, value, path, {\n        resetOnFieldChange,\n        resetOnOperatorChange,\n        getRuleDefaultOperator: getRuleDefaultOperator as (field: string) => string,\n        getValueSources: getValueSourcesMain as (\n          field: string,\n          operator: string\n        ) => ValueSourceFullOptions,\n        getRuleDefaultValue,\n        getMatchModes: getMatchModesMain as (field: string) => MatchModeOptions,\n      });\n      log({ qbId, type: LogType.update, query: queryLocal, newQuery, prop, value, path });\n      dispatchQuery(newQuery);\n    },\n    [\n      dispatchQuery,\n      getMatchModesMain,\n      getRuleDefaultOperator,\n      getRuleDefaultValue,\n      getValueSourcesMain,\n      log,\n      qbId,\n      queryBuilderStore,\n      queryDisabled,\n      resetOnFieldChange,\n      resetOnOperatorChange,\n    ]\n  );\n\n  const onRuleOrGroupRemove = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (path: Path, context?: any) => {\n      const queryLocal = getQuerySelectorById(qbId)(queryBuilderStore.getState()) as RG;\n      // v8 ignore if\n      if (!queryLocal) return;\n      if (pathIsDisabled(path, queryLocal) || queryDisabled) {\n        log({ qbId, type: LogType.pathDisabled, path, query: queryLocal });\n        return;\n      }\n      const ruleOrGroup = findPath(path, queryLocal) as RG | R;\n      // v8 ignore else\n      if (ruleOrGroup) {\n        // @ts-expect-error `ruleOrGroup` and `queryLocal` are type `RuleGroupTypeAny`,\n        // but it doesn't matter here\n        if (onRemove(ruleOrGroup, path, queryLocal, context)) {\n          const newQuery = remove(queryLocal, path);\n          log({ qbId, type: LogType.remove, query: queryLocal, newQuery, path, ruleOrGroup });\n          dispatchQuery(newQuery);\n        } else {\n          log({ qbId, type: LogType.onRemoveFalse, ruleOrGroup, path, query: queryLocal });\n        }\n      }\n    },\n    [dispatchQuery, log, onRemove, qbId, queryBuilderStore, queryDisabled]\n  );\n\n  const moveRule = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (oldPath: Path, newPath: Path | 'up' | 'down', clone?: boolean, context?: any) => {\n      const queryLocal = getQuerySelectorById(qbId)(queryBuilderStore.getState()) as RG;\n      // v8 ignore if\n      if (!queryLocal) return;\n      if (pathIsDisabled(oldPath, queryLocal) || queryDisabled) {\n        log({ qbId, type: LogType.pathDisabled, oldPath, newPath, query: queryLocal });\n        return;\n      }\n      const nextQuery = move(queryLocal, oldPath, newPath, { clone, combinators, idGenerator });\n      const ruleOrGroup = findPath(oldPath, queryLocal)!;\n      const isGroup = isRuleGroup(ruleOrGroup);\n      const callbackResult = (\n        (isGroup ? onMoveGroup : onMoveRule) as (...args: unknown[]) => RG | boolean\n      )(ruleOrGroup, oldPath, newPath, queryLocal, nextQuery, { clone, combinators }, context);\n      if (!callbackResult) {\n        log({\n          qbId,\n          type: isGroup ? LogType.onMoveGroupFalse : LogType.onMoveRuleFalse,\n          ruleOrGroup,\n          oldPath,\n          newPath,\n          clone,\n          query: queryLocal,\n          nextQuery,\n        });\n        return;\n      }\n      const newQuery = isRuleGroup(callbackResult) ? callbackResult : nextQuery;\n      log({ qbId, type: LogType.move, query: queryLocal, newQuery, oldPath, newPath, clone });\n      dispatchQuery(newQuery);\n    },\n    [\n      combinators,\n      dispatchQuery,\n      idGenerator,\n      log,\n      onMoveGroup,\n      onMoveRule,\n      qbId,\n      queryBuilderStore,\n      queryDisabled,\n    ]\n  );\n\n  const groupRule = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (sourcePath: Path, targetPath: Path, clone?: boolean, context?: any) => {\n      const queryLocal = getQuerySelectorById(qbId)(queryBuilderStore.getState()) as RG;\n      // v8 ignore if\n      if (!queryLocal) return;\n      if (pathIsDisabled(sourcePath, queryLocal) || queryDisabled) {\n        log({ qbId, type: LogType.pathDisabled, sourcePath, targetPath, query: queryLocal });\n        return;\n      }\n      const nextQuery = group(queryLocal, sourcePath, targetPath, {\n        clone,\n        combinators,\n        idGenerator,\n      });\n      const ruleOrGroup = findPath(sourcePath, queryLocal)!;\n      const isGroup = isRuleGroup(ruleOrGroup);\n      const callbackResult = (\n        (isGroup ? onGroupGroup : onGroupRule) as (...args: unknown[]) => RG | boolean\n      )(\n        ruleOrGroup,\n        sourcePath,\n        targetPath,\n        queryLocal,\n        nextQuery,\n        { clone, combinators },\n        context\n      );\n      if (!callbackResult) {\n        log({\n          qbId,\n          type: isGroup ? LogType.onGroupGroupFalse : LogType.onGroupRuleFalse,\n          ruleOrGroup,\n          sourcePath,\n          targetPath,\n          clone,\n          query: queryLocal,\n          nextQuery,\n        });\n        return;\n      }\n      const newQuery = isRuleGroup(callbackResult) ? callbackResult : nextQuery;\n      log({\n        qbId,\n        type: LogType.group,\n        query: queryLocal,\n        newQuery,\n        sourcePath,\n        targetPath,\n        clone,\n      });\n      dispatchQuery(newQuery);\n    },\n    [\n      combinators,\n      dispatchQuery,\n      idGenerator,\n      log,\n      onGroupGroup,\n      onGroupRule,\n      qbId,\n      queryBuilderStore,\n      queryDisabled,\n    ]\n  );\n  // #endregion\n\n  // #region Validation\n  const { validationResult, validationMap } = useMemo(() => {\n    const vr =\n      typeof validator === 'function' && rootGroup ? validator(rootGroup) : defaultValidationResult;\n    const valMap = typeof vr === 'boolean' ? defaultValidationMap : vr;\n    return { validationResult: vr, validationMap: valMap };\n  }, [rootGroup, validator]);\n  // #endregion\n\n  // #region Miscellaneous\n  const dndEnabledAttr = enableDragAndDrop ? 'enabled' : 'disabled';\n  const inlineCombinatorsAttr =\n    independentCombinators || showCombinatorsBetweenRules ? 'enabled' : 'disabled';\n  const combinatorPropObject: Pick<RuleGroupProps, 'combinator'> = useMemo(\n    () =>\n      typeof rootGroup.combinator === 'string'\n        ? { combinator: rootGroup.combinator }\n        : icCombinatorPropObject,\n    [rootGroup.combinator]\n  );\n  const wrapperClassName = useMemo(\n    () =>\n      clsx(\n        suppressStandardClassnames || standardClassnames.queryBuilder,\n        clsx(controlClassnames.queryBuilder),\n        // custom conditional classes\n        queryDisabled && controlClassnames.disabled,\n        typeof validationResult === 'boolean' && validationResult && controlClassnames.valid,\n        typeof validationResult === 'boolean' && !validationResult && controlClassnames.invalid,\n        // standard conditional classes\n        suppressStandardClassnames || {\n          [standardClassnames.disabled]: queryDisabled,\n          [standardClassnames.valid]: typeof validationResult === 'boolean' && validationResult,\n          [standardClassnames.invalid]: typeof validationResult === 'boolean' && !validationResult,\n        }\n      ),\n    [\n      controlClassnames.disabled,\n      controlClassnames.invalid,\n      controlClassnames.queryBuilder,\n      controlClassnames.valid,\n      queryDisabled,\n      suppressStandardClassnames,\n      validationResult,\n    ]\n  );\n  // #endregion\n\n  // #region Setup overrides\n  /**\n   * This function overrides `createRuleGroup` from `useQueryBuilderSetup`, removing the\n   * requirement to pass a `boolean` parameter. If `independentCombinators` is `true`, it will\n   * always create a `RuleGroupTypeIC` even if called with no parameters. (We have to override\n   * it here because `independentCombinators` is not evaluated in `useQueryBuilderSetup`.)\n   */\n  const createRuleGroupOverride = useCallback(\n    (ic?: boolean) => createRuleGroup(ic ?? independentCombinators),\n    [createRuleGroup, independentCombinators]\n  );\n  // #endregion\n\n  // #region Schema/actions\n  const schema = useMemo(\n    (): Schema<F, GetOptionIdentifierType<O>> => ({\n      addRuleToNewGroups,\n      accessibleDescriptionGenerator,\n      autoSelectField,\n      autoSelectOperator,\n      autoSelectValue,\n      classNames: controlClassnames,\n      combinators,\n      controls,\n      createRule,\n      createRuleGroup: createRuleGroupOverride,\n      disabledPaths,\n      enableDragAndDrop,\n      fieldMap: fieldMap as FullOptionMap<F>,\n      fields,\n      dispatchQuery,\n      getQuery,\n      getInputType: getInputTypeMain,\n      getOperators: getOperatorsMain,\n      getMatchModes: getMatchModesMain,\n      getRuleClassname,\n      getRuleGroupClassname,\n      getSubQueryBuilderProps: getSubQueryBuilderPropsMain,\n      getValueEditorSeparator,\n      getValueEditorType: getValueEditorTypeMain,\n      getValues: getValuesMain,\n      getValueSources: getValueSourcesMain,\n      independentCombinators,\n      listsAsArrays,\n      maxLevels,\n      parseNumbers,\n      qbId,\n      showCloneButtons,\n      showCombinatorsBetweenRules,\n      showLockButtons,\n      showMuteButtons,\n      showNotToggle,\n      showShiftActions,\n      suppressStandardClassnames,\n      validationMap,\n    }),\n    [\n      accessibleDescriptionGenerator,\n      addRuleToNewGroups,\n      autoSelectField,\n      autoSelectOperator,\n      autoSelectValue,\n      combinators,\n      controlClassnames,\n      controls,\n      createRule,\n      createRuleGroupOverride,\n      disabledPaths,\n      dispatchQuery,\n      enableDragAndDrop,\n      fieldMap,\n      fields,\n      getInputTypeMain,\n      getOperatorsMain,\n      getMatchModesMain,\n      getQuery,\n      getRuleClassname,\n      getRuleGroupClassname,\n      getSubQueryBuilderPropsMain,\n      getValueEditorSeparator,\n      getValueEditorTypeMain,\n      getValuesMain,\n      getValueSourcesMain,\n      independentCombinators,\n      listsAsArrays,\n      maxLevels,\n      parseNumbers,\n      qbId,\n      showCloneButtons,\n      showCombinatorsBetweenRules,\n      showLockButtons,\n      showMuteButtons,\n      showNotToggle,\n      showShiftActions,\n      suppressStandardClassnames,\n      validationMap,\n    ]\n  );\n\n  const actions = useMemo(\n    (): QueryActions => ({\n      moveRule,\n      onGroupAdd,\n      onGroupRemove: onRuleOrGroupRemove,\n      onPropChange,\n      onRuleAdd,\n      onRuleRemove: onRuleOrGroupRemove,\n      groupRule,\n    }),\n    [groupRule, moveRule, onGroupAdd, onPropChange, onRuleAdd, onRuleOrGroupRemove]\n  );\n  // #endregion\n\n  return {\n    actions,\n    rootGroup,\n    rootGroupDisabled,\n    queryDisabled,\n    rqbContext,\n    schema,\n    translations,\n    wrapperClassName,\n    dndEnabledAttr,\n    inlineCombinatorsAttr,\n    combinatorPropObject,\n  };\n}\n","import type {\n  BaseOption,\n  FlexibleOptionList,\n  FullCombinator,\n  FullField,\n  FullOperator,\n  FullOption,\n  FullOptionList,\n  FullOptionMap,\n  GetOptionIdentifierType,\n  GetRuleTypeFromGroupWithFieldAndOperator,\n  MatchModeOptions,\n  Option,\n  OptionGroup,\n  RemoveNullability,\n  RuleGroupTypeAny,\n  RuleType,\n  ValueSourceFullOptions,\n  WithUnknownIndex,\n} from '@react-querybuilder/core';\nimport {\n  defaultCombinatorLabelMap,\n  defaultCombinators,\n  defaultOperatorLabelMap,\n  defaultOperators,\n  filterFieldsByComparator,\n  generateID,\n  getFirstOption,\n  getMatchModesUtil,\n  getOption,\n  getValueSourcesUtil,\n  joinWith,\n  prepareOptionList,\n} from '@react-querybuilder/core';\nimport { useCallback, useMemo, useState } from 'react';\nimport type { UseMergedContext } from '../hooks';\nimport { useFields, useMergedContext } from '../hooks';\nimport type { QueryBuilderProps } from '../types';\n\n// oxlint-disable-next-line typescript/no-explicit-any\nconst getFirstOptionsFrom = (opts: any[], r: RuleType, listsAsArrays?: boolean) => {\n  const firstOption = getFirstOption(opts);\n\n  if (r.operator === 'between' || r.operator === 'notBetween') {\n    const valueAsArray = [firstOption, firstOption];\n    return listsAsArrays\n      ? valueAsArray\n      : joinWith(\n          valueAsArray.map(\n            v => v ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n          ),\n          ','\n        );\n  }\n\n  return firstOption;\n};\n\nexport type UseQueryBuilderSetup<\n  RG extends RuleGroupTypeAny,\n  F extends FullField,\n  O extends FullOperator,\n  C extends FullCombinator,\n> = {\n  qbId: string;\n  rqbContext: UseMergedContext<F, GetOptionIdentifierType<O>, true>;\n  fields: FullOptionList<F>;\n  fieldMap: FullOptionMap<\n    FullField<string, string, string, FullOption, FullOption>,\n    GetOptionIdentifierType<F>\n  >;\n  combinators:\n    | WithUnknownIndex<BaseOption & FullOption>[]\n    | OptionGroup<WithUnknownIndex<BaseOption & FullOption>>[];\n  getRuleDefaultValue: // oxlint-disable-next-line typescript/no-unnecessary-type-parameters\n  <RT extends RuleType = GetRuleTypeFromGroupWithFieldAndOperator<RG, F, O>>(r: RT) => any; // oxlint-disable-line typescript/no-explicit-any\n  createRule: () => GetRuleTypeFromGroupWithFieldAndOperator<RG, F, O>;\n  createRuleGroup: (independentCombinators?: boolean) => RG;\n} & RemoveNullability<{\n  getInputTypeMain: QueryBuilderProps<RG, F, O, C>['getInputType'];\n  getRuleDefaultOperator: QueryBuilderProps<RG, F, O, C>['getDefaultOperator'];\n  getValueEditorTypeMain: QueryBuilderProps<RG, F, O, C>['getValueEditorType'];\n}> & {\n    getValueSourcesMain: (\n      field: GetOptionIdentifierType<F>,\n      operator: GetOptionIdentifierType<O>,\n      misc: { fieldData: F }\n    ) => ValueSourceFullOptions;\n    getSubQueryBuilderPropsMain: (\n      field: GetOptionIdentifierType<F>,\n      misc: { fieldData: F }\n    ) => Record<string, unknown>;\n    getMatchModesMain: (\n      field: GetOptionIdentifierType<F>,\n      misc?: { fieldData: F }\n    ) => MatchModeOptions;\n    getOperatorsMain: (\n      ...p: Parameters<NonNullable<QueryBuilderProps<RG, F, O, C>['getOperators']>>\n    ) => FullOptionList<O>;\n    getValuesMain: (\n      ...p: Parameters<NonNullable<QueryBuilderProps<RG, F, O, C>['getValues']>>\n    ) => FullOptionList<Option>;\n  };\n\n/**\n * Massages the props as necessary and prepares the basic update/generate methods\n * for use by the {@link QueryBuilder} component.\n *\n * @group Hooks\n */\nexport const useQueryBuilderSetup = <\n  RG extends RuleGroupTypeAny,\n  F extends FullField,\n  O extends FullOperator,\n  C extends FullCombinator,\n>(\n  props: QueryBuilderProps<RG, F, O, C>\n): UseQueryBuilderSetup<RG, F, O, C> => {\n  type R = GetRuleTypeFromGroupWithFieldAndOperator<RG, F, O>;\n  type FieldName = GetOptionIdentifierType<F>;\n  type OperatorName = GetOptionIdentifierType<O>;\n\n  const [qbId] = useState(generateID);\n\n  const {\n    fields: fieldsProp,\n    baseField,\n    operators: operatorsProp,\n    baseOperator,\n    combinators: combinatorsProp,\n    baseCombinator,\n    translations: translationsProp,\n    enableMountQueryChange: enableMountQueryChangeProp = true,\n    controlClassnames: controlClassnamesProp,\n    controlElements: controlElementsProp,\n    getDefaultField,\n    getDefaultOperator,\n    getDefaultValue,\n    getMatchModes,\n    getOperators,\n    getSubQueryBuilderProps,\n    getValueEditorType,\n    getValueSources,\n    getInputType,\n    getValues,\n    autoSelectField = true,\n    autoSelectOperator = true,\n    autoSelectValue = true,\n    addRuleToNewGroups = false,\n    enableDragAndDrop: enableDragAndDropProp,\n    listsAsArrays = false,\n    debugMode: debugModeProp = false,\n    idGenerator = generateID,\n  } = props;\n\n  const [initialQueryProp] = useState(props.query ?? props.defaultQuery);\n\n  const rqbContext = useMergedContext({\n    controlClassnames: controlClassnamesProp,\n    controlElements: controlElementsProp,\n    debugMode: debugModeProp,\n    enableDragAndDrop: enableDragAndDropProp,\n    enableMountQueryChange: enableMountQueryChangeProp,\n    translations: translationsProp,\n    initialQuery: initialQueryProp,\n    qbId: qbId,\n    finalize: true,\n  });\n\n  const { translations } = rqbContext;\n\n  // #region `fields`\n  const { fields, fieldMap } = useFields({\n    fields: fieldsProp,\n    baseField,\n    autoSelectField,\n    translations,\n  });\n  // #endregion\n\n  // #region `combinators`\n  const { optionList: combinators } = useMemo(\n    () =>\n      prepareOptionList({\n        optionList: combinatorsProp ?? (defaultCombinators as FlexibleOptionList<C>),\n        labelMap: defaultCombinatorLabelMap,\n        baseOption: baseCombinator,\n        autoSelectOption: true,\n      }),\n    [baseCombinator, combinatorsProp]\n  );\n  // #endregion\n\n  // #region `operators`\n  const { optionList: operators } = useMemo(\n    () =>\n      prepareOptionList({\n        optionList: operatorsProp ?? (defaultOperators as FlexibleOptionList<O>),\n        placeholder: translations.operators,\n        labelMap: defaultOperatorLabelMap,\n        baseOption: baseOperator,\n        autoSelectOption: autoSelectOperator,\n      }),\n    [autoSelectOperator, baseOperator, operatorsProp, translations.operators]\n  );\n\n  const getOperatorsMain = useCallback(\n    (field: FieldName, { fieldData }: { fieldData: F }) =>\n      prepareOptionList({\n        optionList: fieldData?.operators ?? getOperators?.(field, { fieldData }) ?? operators,\n        placeholder: translations.operators,\n        baseOption: baseOperator,\n        labelMap: defaultOperatorLabelMap,\n        autoSelectOption: autoSelectOperator,\n      }).optionList as FullOptionList<O>,\n    [autoSelectOperator, baseOperator, getOperators, operators, translations.operators]\n  );\n\n  const getRuleDefaultOperator = useCallback(\n    (field: FieldName): OperatorName => {\n      const fieldData = fieldMap[field] as F;\n\n      if (fieldData?.defaultOperator) {\n        return fieldData.defaultOperator as OperatorName;\n      }\n\n      if (getDefaultOperator) {\n        return typeof getDefaultOperator === 'function'\n          ? (getDefaultOperator(field, { fieldData }) as OperatorName)\n          : getDefaultOperator;\n      }\n\n      const ops =\n        getOperatorsMain(field, { fieldData }) ??\n        /* v8 ignore start -- @preserve */ [] /* v8 ignore stop -- @preserve */;\n      return (getFirstOption(ops) ??\n        /* v8 ignore start -- @preserve */ '') /* v8 ignore stop -- @preserve */ as OperatorName;\n    },\n    [fieldMap, getDefaultOperator, getOperatorsMain]\n  );\n  // #endregion\n\n  // #region Rule property getters\n  const getValueEditorTypeMain = useCallback(\n    (field: FieldName, operator: OperatorName, { fieldData }: { fieldData: F }) => {\n      if (fieldData.valueEditorType) {\n        if (typeof fieldData.valueEditorType === 'function') {\n          return fieldData.valueEditorType(operator);\n        }\n        return fieldData.valueEditorType;\n      }\n\n      return getValueEditorType?.(field, operator, { fieldData }) ?? 'text';\n    },\n    [getValueEditorType]\n  );\n\n  const getValueSourcesMain = useCallback(\n    (field: FieldName, operator: OperatorName, _misc?: { fieldData: F }) =>\n      getValueSourcesUtil(fieldMap[field] as F, operator, getValueSources),\n    [fieldMap, getValueSources]\n  );\n\n  const getMatchModesMain = useCallback(\n    (field: FieldName, _misc?: { fieldData: F }) =>\n      getMatchModesUtil(fieldMap[field] as F, getMatchModes),\n    [fieldMap, getMatchModes]\n  );\n\n  const getSubQueryBuilderPropsMain = useCallback(\n    (field: FieldName, misc: { fieldData: F }): Record<string, unknown> =>\n      // oxlint-disable-next-line typescript/no-explicit-any\n      getSubQueryBuilderProps?.(field, misc) ?? ({} as any),\n    [getSubQueryBuilderProps]\n  );\n\n  const getValuesMain = useCallback(\n    (field: FieldName, operator: OperatorName, { fieldData }: { fieldData: F }) =>\n      prepareOptionList({\n        optionList: fieldData?.values ?? getValues?.(field, operator, { fieldData }) ?? [],\n        placeholder: translations.values,\n        autoSelectOption: autoSelectValue,\n      }).optionList,\n    [autoSelectValue, getValues, translations.values]\n  );\n\n  const getRuleDefaultValue = useCallback(\n    // oxlint-disable-next-line typescript/no-unnecessary-type-parameters\n    <RT extends RuleType = R>(r: RT) => {\n      const fieldData = (fieldMap[r.field as FieldName] ?? {}) as F;\n      if (fieldData?.defaultValue !== undefined && fieldData.defaultValue !== null) {\n        return fieldData.defaultValue;\n      } else if (getDefaultValue) {\n        return getDefaultValue(r, { fieldData });\n      }\n\n      let value: string | (string | null)[] | boolean | null = '';\n\n      const values = getValuesMain(r.field as FieldName, r.operator as OperatorName, {\n        fieldData,\n      });\n\n      if (r.valueSource === 'field') {\n        const filteredFields = filterFieldsByComparator(fieldData, fields, r.operator);\n        value =\n          filteredFields.length > 0 ? getFirstOptionsFrom(filteredFields, r, listsAsArrays) : '';\n      } else if (values.length > 0) {\n        const editorType = getValueEditorTypeMain(\n          r.field as FieldName,\n          r.operator as OperatorName,\n          { fieldData }\n        );\n        if (editorType === 'multiselect') {\n          value = listsAsArrays ? [] : '';\n        } else if (editorType === 'select' || editorType === 'radio') {\n          value = getFirstOptionsFrom(values, r, listsAsArrays);\n        }\n      } else {\n        const editorType = getValueEditorTypeMain(\n          r.field as FieldName,\n          r.operator as OperatorName,\n          { fieldData }\n        );\n        if (editorType === 'checkbox') {\n          value = false;\n        }\n      }\n\n      return value;\n    },\n    [fieldMap, fields, getDefaultValue, getValueEditorTypeMain, getValuesMain, listsAsArrays]\n  );\n\n  const getInputTypeMain = useCallback(\n    (field: FieldName, operator: OperatorName, { fieldData }: { fieldData: F }) => {\n      if (getInputType) {\n        const inputType = getInputType(field, operator, { fieldData });\n        if (inputType) return inputType;\n      }\n\n      return 'text';\n    },\n    [getInputType]\n  );\n  // #endregion\n\n  // #region Rule/group creators\n  const createRule = useCallback((): R => {\n    let field = '' as FieldName;\n    const flds = fields as FullOptionList<F>;\n    /* v8 ignore else -- @preserve */\n    if (flds?.length > 0 && flds[0]) {\n      const fo = getFirstOption(flds) as FieldName;\n      /* v8 ignore else -- @preserve */\n      if (fo) field = fo;\n    }\n    if (getDefaultField) {\n      if (typeof getDefaultField === 'function') {\n        const df = getDefaultField(flds) as FieldName;\n        /* v8 ignore else -- @preserve */\n        if (df) field = df;\n      } else {\n        field = getDefaultField;\n      }\n    }\n\n    const operator = getRuleDefaultOperator(field);\n\n    const valueSource =\n      getFirstOption(\n        getValueSourcesMain(field, operator, { fieldData: getOption(flds, field) as F })\n      ) ?? 'value';\n\n    const matchMode = getFirstOption(\n      getMatchModesMain(field, { fieldData: getOption(flds, field) as F })\n    );\n\n    const newRule = {\n      id: idGenerator(),\n      field,\n      operator,\n      valueSource,\n      value: '',\n      ...(matchMode ? { match: { mode: matchMode, threshold: 1 } } : null),\n    } as R;\n\n    const value = getRuleDefaultValue(newRule);\n\n    return { ...newRule, value };\n  }, [\n    fields,\n    getDefaultField,\n    getMatchModesMain,\n    getRuleDefaultOperator,\n    getRuleDefaultValue,\n    getValueSourcesMain,\n    idGenerator,\n  ]);\n\n  const createRuleGroup = useCallback(\n    (independentCombinators?: boolean): RG => {\n      if (independentCombinators) {\n        return {\n          id: idGenerator(),\n          rules: addRuleToNewGroups ? [createRule() as RuleType] : [],\n          not: false,\n        } as RG;\n      }\n      return {\n        id: idGenerator(),\n        rules: addRuleToNewGroups ? [createRule()] : [],\n        combinator:\n          getFirstOption(combinators) ??\n          /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */,\n        not: false,\n      } as unknown as RG;\n    },\n    [addRuleToNewGroups, combinators, createRule, idGenerator]\n  );\n  // #endregion\n\n  return {\n    qbId,\n    rqbContext,\n    fields,\n    fieldMap,\n    combinators,\n    getMatchModesMain,\n    getOperatorsMain,\n    getRuleDefaultOperator,\n    getSubQueryBuilderPropsMain,\n    getValueEditorTypeMain,\n    getValueSourcesMain,\n    getValuesMain,\n    getRuleDefaultValue,\n    getInputTypeMain,\n    createRule,\n    createRuleGroup,\n  };\n};\n","import type {\n  FullCombinator,\n  FullField,\n  FullOperator,\n  RuleGroupTypeAny,\n} from '@react-querybuilder/core';\nimport type { QueryBuilderProps } from '../types';\nimport type { UseQueryBuilderSchema } from './QueryBuilder.useQueryBuilderSchema';\nimport { useQueryBuilderSchema } from './QueryBuilder.useQueryBuilderSchema';\nimport { useQueryBuilderSetup } from './QueryBuilder.useQueryBuilderSetup';\n\n/**\n * Calls {@link useQueryBuilderSetup} to massage the props and prepare basic\n * update/generate methods, then passes the result to {@link useQueryBuilderSchema}\n * to prepare and return all values required to render {@link QueryBuilder}.\n *\n * @group Hooks\n */\nexport const useQueryBuilder = <\n  RG extends RuleGroupTypeAny,\n  F extends FullField,\n  O extends FullOperator,\n  C extends FullCombinator,\n>(\n  props: QueryBuilderProps<RG, F, O, C>\n): UseQueryBuilderSchema<RG, F, O, C> =>\n  useQueryBuilderSchema<RG, F, O, C>(props, useQueryBuilderSetup(props));\n","import type { RuleGroupTypeAny } from '@react-querybuilder/core';\nimport type { Context } from 'react';\nimport { createContext } from 'react';\nimport type { QueryBuilderContextProps } from '../types';\n\ninterface QueryBuilderContextType\n  // oxlint-disable-next-line typescript/no-explicit-any\n  extends QueryBuilderContextProps<any, any> {\n  initialQuery?: RuleGroupTypeAny;\n  qbId?: string;\n}\n\n/**\n * Context provider for {@link QueryBuilder}. Any descendant query builders\n * will inherit the props from a context provider.\n */\nexport const QueryBuilderContext: Context<QueryBuilderContextType> = createContext({});\n","import type {\n  ActionElementEventHandler,\n  Classnames,\n  Path,\n  RuleGroupType,\n  RuleGroupTypeAny,\n  RuleGroupTypeIC,\n  ValidationResult,\n  ValueChangeEventHandler,\n} from '@react-querybuilder/core';\nimport {\n  clsx,\n  getFirstOption,\n  getOption,\n  getParentPath,\n  getValidationClassNames,\n  isRuleGroup,\n  isRuleGroupType,\n  pathsAreEqual,\n  standardClassnames,\n  TestID,\n} from '@react-querybuilder/core';\nimport type { MouseEvent } from 'react';\nimport * as React from 'react';\nimport { Fragment, useCallback, useMemo } from 'react';\nimport {\n  useDeprecatedProps,\n  usePathsMemo,\n  useReactDndWarning,\n  useStopEventPropagation,\n} from '../hooks';\nimport type { RuleGroupProps, ShiftActionsProps } from '../types';\n\n/**\n * Default component to display {@link RuleGroupType} and {@link RuleGroupTypeIC}\n * objects. This is actually a small wrapper around {@link RuleGroupHeaderComponents}\n * and {@link RuleGroupBodyComponents}.\n *\n * @group Components\n */\nexport const RuleGroup: React.MemoExoticComponent<(props: RuleGroupProps) => React.JSX.Element> =\n  React.memo(function RuleGroup(props: RuleGroupProps) {\n    const rg = useRuleGroup(props);\n\n    const {\n      schema: {\n        controls: {\n          ruleGroupBodyElements: RuleGroupBodyElements,\n          ruleGroupHeaderElements: RuleGroupHeaderElements,\n        },\n      },\n    } = rg;\n\n    const addRule = useStopEventPropagation(rg.addRule);\n    const addGroup = useStopEventPropagation(rg.addGroup);\n    const cloneGroup = useStopEventPropagation(rg.cloneGroup);\n    const toggleLockGroup = useStopEventPropagation(rg.toggleLockGroup);\n    const toggleMuteGroup = useStopEventPropagation(rg.toggleMuteGroup);\n    const removeGroup = useStopEventPropagation(rg.removeGroup);\n    const shiftGroupUp = useStopEventPropagation(rg.shiftGroupUp);\n    const shiftGroupDown = useStopEventPropagation(rg.shiftGroupDown);\n\n    const actions = useMemo(\n      () => ({\n        addRule,\n        addGroup,\n        cloneGroup,\n        toggleLockGroup,\n        toggleMuteGroup,\n        removeGroup,\n        shiftGroupUp,\n        shiftGroupDown,\n      }),\n      [\n        addRule,\n        addGroup,\n        cloneGroup,\n        toggleLockGroup,\n        toggleMuteGroup,\n        removeGroup,\n        shiftGroupUp,\n        shiftGroupDown,\n      ]\n    );\n\n    return (\n      <div\n        ref={rg.previewRef}\n        title={rg.accessibleDescription}\n        className={rg.outerClassName}\n        data-testid={TestID.ruleGroup}\n        data-not={rg.ruleGroup.not ? 'true' : undefined}\n        data-dragmonitorid={rg.dragMonitorId}\n        data-dropmonitorid={rg.dropMonitorId}\n        data-rule-group-id={rg.id}\n        data-level={rg.path.length}\n        data-path={JSON.stringify(rg.path)}>\n        <div ref={rg.dropRef} className={rg.classNames.header}>\n          <RuleGroupHeaderElements {...rg} {...actions} />\n        </div>\n        <div className={rg.classNames.body}>\n          <RuleGroupBodyElements {...rg} {...actions} />\n        </div>\n      </div>\n    );\n  });\n\n/**\n * Renders a `React.Fragment` containing an array of form controls for managing\n * a {@link RuleGroupType} or {@link RuleGroupTypeIC}.\n *\n * @group Components\n */\nexport const RuleGroupHeaderComponents: React.MemoExoticComponent<\n  (rg: UseRuleGroup) => React.JSX.Element\n> = React.memo(function RuleGroupHeaderComponents(rg: UseRuleGroup) {\n  const {\n    schema: {\n      controls: {\n        shiftActions: ShiftActionsControlElement,\n        dragHandle: DragHandleControlElement,\n        combinatorSelector: CombinatorSelectorControlElement,\n        notToggle: NotToggleControlElement,\n        addRuleAction: AddRuleActionControlElement,\n        addGroupAction: AddGroupActionControlElement,\n        cloneGroupAction: CloneGroupActionControlElement,\n        lockGroupAction: LockGroupActionControlElement,\n        muteGroupAction: MuteGroupActionControlElement,\n        removeGroupAction: RemoveGroupActionControlElement,\n      },\n    },\n  } = rg;\n\n  const commonSubcomponentProps = useMemo(\n    () => ({\n      level: rg.path.length,\n      path: rg.path,\n      disabled: rg.disabled,\n      context: rg.context,\n      validation: rg.validationResult,\n      schema: rg.schema,\n    }),\n    [rg.path, rg.disabled, rg.context, rg.validationResult, rg.schema]\n  );\n\n  const shiftTitles = useMemo(\n    (): ShiftActionsProps['titles'] =>\n      rg.schema.showShiftActions\n        ? {\n            shiftUp: rg.translations.shiftActionUp.title,\n            shiftDown: rg.translations.shiftActionDown.title,\n          }\n        : undefined,\n    [rg.schema.showShiftActions, rg.translations]\n  );\n  const shiftLabels = useMemo(\n    (): ShiftActionsProps['labels'] =>\n      rg.schema.showShiftActions\n        ? {\n            shiftUp: rg.translations.shiftActionUp.label,\n            shiftDown: rg.translations.shiftActionDown.label,\n          }\n        : undefined,\n    [rg.schema.showShiftActions, rg.translations]\n  );\n\n  return (\n    <Fragment>\n      {rg.schema.showShiftActions && rg.path.length > 0 && (\n        <ShiftActionsControlElement\n          key={TestID.shiftActions}\n          {...commonSubcomponentProps}\n          testID={TestID.shiftActions}\n          titles={shiftTitles}\n          labels={shiftLabels}\n          className={rg.classNames.shiftActions}\n          shiftUp={rg.shiftGroupUp}\n          shiftDown={rg.shiftGroupDown}\n          shiftUpDisabled={rg.shiftUpDisabled}\n          shiftDownDisabled={rg.shiftDownDisabled}\n          ruleOrGroup={rg.ruleGroup}\n        />\n      )}\n      {rg.path.length > 0 && rg.schema.enableDragAndDrop && (\n        <DragHandleControlElement\n          key={TestID.dragHandle}\n          {...commonSubcomponentProps}\n          testID={TestID.dragHandle}\n          ref={rg.dragRef}\n          title={rg.translations.dragHandle.title}\n          label={rg.translations.dragHandle.label}\n          className={rg.classNames.dragHandle}\n          ruleOrGroup={rg.ruleGroup}\n        />\n      )}\n      {!rg.schema.showCombinatorsBetweenRules && !rg.schema.independentCombinators && (\n        <CombinatorSelectorControlElement\n          key={TestID.combinators}\n          {...commonSubcomponentProps}\n          testID={TestID.combinators}\n          options={rg.schema.combinators}\n          value={rg.combinator}\n          title={rg.translations.combinators.title}\n          className={rg.classNames.combinators}\n          handleOnChange={rg.onCombinatorChange}\n          rules={rg.ruleGroup.rules}\n          ruleGroup={rg.ruleGroup}\n        />\n      )}\n      {rg.schema.showNotToggle && (\n        <NotToggleControlElement\n          key={TestID.notToggle}\n          {...commonSubcomponentProps}\n          testID={TestID.notToggle}\n          className={rg.classNames.notToggle}\n          title={rg.translations.notToggle.title}\n          label={rg.translations.notToggle.label}\n          checked={rg.ruleGroup.not}\n          handleOnChange={rg.onNotToggleChange}\n          ruleGroup={rg.ruleGroup}\n        />\n      )}\n      <AddRuleActionControlElement\n        key={TestID.addRule}\n        {...commonSubcomponentProps}\n        testID={TestID.addRule}\n        label={rg.translations.addRule.label}\n        title={rg.translations.addRule.title}\n        className={rg.classNames.addRule}\n        handleOnClick={rg.addRule}\n        rules={rg.ruleGroup.rules}\n        ruleOrGroup={rg.ruleGroup}\n      />\n      {rg.schema.maxLevels > rg.path.length && (\n        <AddGroupActionControlElement\n          key={TestID.addGroup}\n          {...commonSubcomponentProps}\n          testID={TestID.addGroup}\n          label={rg.translations.addGroup.label}\n          title={rg.translations.addGroup.title}\n          className={rg.classNames.addGroup}\n          handleOnClick={rg.addGroup}\n          rules={rg.ruleGroup.rules}\n          ruleOrGroup={rg.ruleGroup}\n        />\n      )}\n      {rg.schema.showCloneButtons && rg.path.length > 0 && (\n        <CloneGroupActionControlElement\n          key={TestID.cloneGroup}\n          {...commonSubcomponentProps}\n          testID={TestID.cloneGroup}\n          label={rg.translations.cloneRuleGroup.label}\n          title={rg.translations.cloneRuleGroup.title}\n          className={rg.classNames.cloneGroup}\n          handleOnClick={rg.cloneGroup}\n          rules={rg.ruleGroup.rules}\n          ruleOrGroup={rg.ruleGroup}\n        />\n      )}\n      {rg.schema.showLockButtons && (\n        <LockGroupActionControlElement\n          key={TestID.lockGroup}\n          {...commonSubcomponentProps}\n          testID={TestID.lockGroup}\n          label={rg.translations.lockGroup.label}\n          title={rg.translations.lockGroup.title}\n          className={rg.classNames.lockGroup}\n          handleOnClick={rg.toggleLockGroup}\n          rules={rg.ruleGroup.rules}\n          disabledTranslation={rg.parentDisabled ? undefined : rg.translations.lockGroupDisabled}\n          ruleOrGroup={rg.ruleGroup}\n        />\n      )}\n      {rg.schema.showMuteButtons && (\n        <MuteGroupActionControlElement\n          key={TestID.muteGroup}\n          {...commonSubcomponentProps}\n          testID={TestID.muteGroup}\n          label={\n            rg.ruleGroup.muted ? rg.translations.unmuteGroup.label : rg.translations.muteGroup.label\n          }\n          title={\n            rg.ruleGroup.muted ? rg.translations.unmuteGroup.title : rg.translations.muteGroup.title\n          }\n          className={rg.classNames.muteGroup}\n          handleOnClick={rg.toggleMuteGroup}\n          rules={rg.ruleGroup.rules}\n          ruleOrGroup={rg.ruleGroup}\n        />\n      )}\n      {rg.path.length > 0 && (\n        <RemoveGroupActionControlElement\n          key={TestID.removeGroup}\n          {...commonSubcomponentProps}\n          testID={TestID.removeGroup}\n          label={rg.translations.removeGroup.label}\n          title={rg.translations.removeGroup.title}\n          className={rg.classNames.removeGroup}\n          handleOnClick={rg.removeGroup}\n          rules={rg.ruleGroup.rules}\n          ruleOrGroup={rg.ruleGroup}\n        />\n      )}\n    </Fragment>\n  );\n});\n\n/**\n * Renders a `React.Fragment` containing an array of either (1) {@link Rule} and\n * {@link RuleGroup}, or (2) {@link Rule}, {@link RuleGroup}, and {@link InlineCombinator}.\n *\n * @group Components\n */\nexport const RuleGroupBodyComponents: React.MemoExoticComponent<\n  (rg: UseRuleGroup) => React.JSX.Element\n> = React.memo(function RuleGroupBodyComponents(rg: UseRuleGroup) {\n  const {\n    schema: {\n      controls: {\n        combinatorSelector: CombinatorSelectorControlElement,\n        inlineCombinator: InlineCombinatorControlElement,\n        ruleGroup: RuleGroupControlElement,\n        rule: RuleControlElement,\n      },\n    },\n  } = rg;\n\n  return (\n    <Fragment>\n      {rg.ruleGroup.rules.map((r, idx, { length: ruleArrayLength }) => {\n        const thisPathMemo = rg.pathsMemo[idx];\n        const thisPath = thisPathMemo.path;\n        const thisPathDisabled = thisPathMemo.disabled || (typeof r !== 'string' && r.disabled);\n        const shiftUpDisabled = pathsAreEqual([0], thisPath);\n        const shiftDownDisabled = rg.path.length === 0 && idx === ruleArrayLength - 1;\n        const key = typeof r === 'string' ? [...thisPath, r].join('-') : r.id;\n        return (\n          <Fragment key={key}>\n            {idx > 0 &&\n              !rg.schema.independentCombinators &&\n              rg.schema.showCombinatorsBetweenRules && (\n                <InlineCombinatorControlElement\n                  key={TestID.inlineCombinator}\n                  options={rg.schema.combinators}\n                  value={rg.combinator}\n                  title={rg.translations.combinators.title}\n                  className={rg.classNames.combinators}\n                  handleOnChange={rg.onCombinatorChange}\n                  rules={rg.ruleGroup.rules}\n                  level={rg.path.length}\n                  context={rg.context}\n                  validation={rg.validationResult}\n                  component={CombinatorSelectorControlElement}\n                  path={thisPath}\n                  disabled={rg.disabled}\n                  schema={rg.schema}\n                  ruleGroup={rg.ruleGroup}\n                />\n              )}\n            {typeof r === 'string' ? (\n              <InlineCombinatorControlElement\n                key={`${TestID.inlineCombinator}-independent`}\n                options={rg.schema.combinators}\n                value={r}\n                title={rg.translations.combinators.title}\n                className={rg.classNames.combinators}\n                // oxlint-disable-next-line jsx-no-new-function-as-prop\n                handleOnChange={val => rg.onIndependentCombinatorChange(val, idx)}\n                rules={rg.ruleGroup.rules}\n                level={rg.path.length}\n                context={rg.context}\n                validation={rg.validationResult}\n                component={CombinatorSelectorControlElement}\n                path={thisPath}\n                disabled={thisPathDisabled}\n                schema={rg.schema}\n                ruleGroup={rg.ruleGroup}\n              />\n            ) : isRuleGroup(r) ? (\n              <RuleGroupControlElement\n                key={TestID.ruleGroup}\n                id={r.id}\n                schema={rg.schema}\n                actions={rg.actions}\n                path={thisPath}\n                translations={rg.translations}\n                ruleGroup={r}\n                rules={r.rules}\n                combinator={isRuleGroupType(r) ? r.combinator : undefined}\n                not={!!r.not}\n                disabled={thisPathDisabled}\n                parentDisabled={rg.parentDisabled || rg.disabled}\n                parentMuted={rg.parentMuted || rg.muted}\n                shiftUpDisabled={shiftUpDisabled}\n                shiftDownDisabled={shiftDownDisabled}\n                context={rg.context}\n              />\n            ) : (\n              <RuleControlElement\n                key={TestID.rule}\n                id={r.id}\n                rule={r}\n                field={r.field}\n                operator={r.operator}\n                value={r.value}\n                valueSource={r.valueSource}\n                schema={rg.schema}\n                actions={rg.actions}\n                path={thisPath}\n                disabled={thisPathDisabled}\n                parentDisabled={rg.parentDisabled || rg.disabled}\n                parentMuted={rg.parentMuted || rg.muted}\n                translations={rg.translations}\n                shiftUpDisabled={shiftUpDisabled}\n                shiftDownDisabled={shiftDownDisabled}\n                context={rg.context}\n              />\n            )}\n          </Fragment>\n        );\n      })}\n    </Fragment>\n  );\n});\n\n/* oxlint-disable typescript/no-explicit-any */\nexport interface UseRuleGroup extends RuleGroupProps {\n  addGroup: ActionElementEventHandler;\n  addRule: ActionElementEventHandler;\n  accessibleDescription: string;\n  muted?: boolean;\n  classNames: Pick<\n    { [k in keyof Classnames]: string },\n    | 'header'\n    | 'shiftActions'\n    | 'dragHandle'\n    | 'combinators'\n    | 'notToggle'\n    | 'addRule'\n    | 'addGroup'\n    | 'cloneGroup'\n    | 'lockGroup'\n    | 'muteGroup'\n    | 'removeGroup'\n    | 'body'\n  >;\n  cloneGroup: ActionElementEventHandler;\n  onCombinatorChange: ValueChangeEventHandler;\n  onGroupAdd: (group: RuleGroupTypeAny, parentPath: Path, context?: any) => void;\n  onIndependentCombinatorChange: (value: any, index: number, context?: any) => void;\n  onNotToggleChange: (checked: boolean, context?: any) => void;\n  outerClassName: string;\n  pathsMemo: { path: Path; disabled: boolean }[];\n  removeGroup: ActionElementEventHandler;\n  ruleGroup: RuleGroupType | RuleGroupTypeIC;\n  shiftGroupDown: (event?: MouseEvent, context?: any) => void;\n  shiftGroupUp: (event?: MouseEvent, context?: any) => void;\n  toggleLockGroup: ActionElementEventHandler;\n  toggleMuteGroup: ActionElementEventHandler;\n  validationClassName: string;\n  validationResult: boolean | ValidationResult;\n}\n/* oxlint-enable typescript/no-explicit-any */\n\n/**\n * Prepares all values and methods used by the {@link RuleGroup} component.\n *\n * @group Hooks\n */\nexport const useRuleGroup = (props: RuleGroupProps): UseRuleGroup => {\n  const {\n    id,\n    path,\n    ruleGroup: ruleGroupProp,\n    schema: {\n      qbId,\n      accessibleDescriptionGenerator,\n      classNames: classNamesProp,\n      combinators,\n      createRule,\n      createRuleGroup,\n      disabledPaths,\n      independentCombinators,\n      validationMap,\n      enableDragAndDrop,\n      getRuleGroupClassname,\n      suppressStandardClassnames,\n    },\n    actions: { onGroupAdd, onGroupRemove, onPropChange, onRuleAdd, moveRule },\n    disabled: disabledProp,\n    parentDisabled,\n    parentMuted,\n    shiftUpDisabled,\n    shiftDownDisabled,\n    combinator: combinatorProp,\n    rules: rulesProp,\n    not: notProp,\n    // Drag-and-drop\n    dropEffect = 'move',\n    groupItems = false,\n    dragMonitorId = '',\n    dropMonitorId = '',\n    previewRef = null,\n    dragRef = null,\n    dropRef = null,\n    isDragging = false,\n    isOver = false,\n    dropNotAllowed = false,\n  } = props;\n\n  useDeprecatedProps('ruleGroup', !ruleGroupProp);\n\n  useReactDndWarning(\n    enableDragAndDrop,\n    !!(dragMonitorId || dropMonitorId || previewRef || dragRef || dropRef)\n  );\n\n  const disabled = !!parentDisabled || !!disabledProp;\n  const muted = !!parentMuted || !!ruleGroupProp?.muted;\n\n  const combinator = useMemo(\n    () =>\n      ruleGroupProp && isRuleGroupType(ruleGroupProp)\n        ? ruleGroupProp.combinator\n        : ruleGroupProp\n          ? getFirstOption(combinators)!\n          : (combinatorProp ?? getFirstOption(combinators)!),\n    [combinatorProp, combinators, ruleGroupProp]\n  );\n\n  // TODO?: Type this properly with generics\n  const ruleGroup = useMemo((): RuleGroupTypeAny => {\n    if (ruleGroupProp) {\n      if (ruleGroupProp.combinator === combinator || independentCombinators) {\n        return ruleGroupProp;\n      }\n      const newRG = structuredClone(ruleGroupProp);\n      newRG.combinator = combinator;\n      return newRG;\n    }\n    return { rules: rulesProp, not: notProp } as RuleGroupTypeIC;\n  }, [combinator, independentCombinators, notProp, ruleGroupProp, rulesProp]);\n\n  const classNames = useMemo(\n    () => ({\n      header: clsx(\n        suppressStandardClassnames || standardClassnames.header,\n        classNamesProp.header,\n        isOver && dropEffect === 'copy' && classNamesProp.dndCopy,\n        dropNotAllowed && classNamesProp.dndDropNotAllowed,\n        suppressStandardClassnames || {\n          [standardClassnames.dndOver]: isOver,\n          [standardClassnames.dndCopy]: isOver && dropEffect === 'copy',\n          [standardClassnames.dndDropNotAllowed]: dropNotAllowed,\n        }\n      ),\n      shiftActions: clsx(\n        suppressStandardClassnames || standardClassnames.shiftActions,\n        classNamesProp.shiftActions\n      ),\n      dragHandle: clsx(\n        suppressStandardClassnames || standardClassnames.dragHandle,\n        classNamesProp.dragHandle\n      ),\n      combinators: clsx(\n        suppressStandardClassnames || standardClassnames.combinators,\n        classNamesProp.valueSelector,\n        classNamesProp.combinators\n      ),\n      notToggle: clsx(\n        suppressStandardClassnames || standardClassnames.notToggle,\n        classNamesProp.notToggle\n      ),\n      addRule: clsx(\n        suppressStandardClassnames || standardClassnames.addRule,\n        classNamesProp.actionElement,\n        classNamesProp.addRule\n      ),\n      addGroup: clsx(\n        suppressStandardClassnames || standardClassnames.addGroup,\n        classNamesProp.actionElement,\n        classNamesProp.addGroup\n      ),\n      cloneGroup: clsx(\n        suppressStandardClassnames || standardClassnames.cloneGroup,\n        classNamesProp.actionElement,\n        classNamesProp.cloneGroup\n      ),\n      lockGroup: clsx(\n        suppressStandardClassnames || standardClassnames.lockGroup,\n        classNamesProp.actionElement,\n        classNamesProp.lockGroup\n      ),\n      muteGroup: clsx(\n        suppressStandardClassnames || standardClassnames.muteGroup,\n        classNamesProp.actionElement,\n        classNamesProp.muteGroup\n      ),\n      removeGroup: clsx(\n        suppressStandardClassnames || standardClassnames.removeGroup,\n        classNamesProp.actionElement,\n        classNamesProp.removeGroup\n      ),\n      body: clsx(suppressStandardClassnames || standardClassnames.body, classNamesProp.body),\n    }),\n    [\n      classNamesProp.actionElement,\n      classNamesProp.addGroup,\n      classNamesProp.addRule,\n      classNamesProp.body,\n      classNamesProp.cloneGroup,\n      classNamesProp.combinators,\n      classNamesProp.dndCopy,\n      classNamesProp.dndDropNotAllowed,\n      classNamesProp.dragHandle,\n      classNamesProp.header,\n      classNamesProp.lockGroup,\n      classNamesProp.muteGroup,\n      classNamesProp.notToggle,\n      classNamesProp.removeGroup,\n      classNamesProp.shiftActions,\n      classNamesProp.valueSelector,\n      dropEffect,\n      dropNotAllowed,\n      isOver,\n      suppressStandardClassnames,\n    ]\n  );\n\n  const onCombinatorChange: ValueChangeEventHandler = useCallback(\n    value => {\n      if (!disabled) {\n        onPropChange('combinator', value, path);\n      }\n    },\n    [disabled, onPropChange, path]\n  );\n\n  const onIndependentCombinatorChange = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (value: any, index: number, _context?: any) => {\n      if (!disabled) {\n        onPropChange('combinator', value, [...path, index]);\n      }\n    },\n    [disabled, onPropChange, path]\n  );\n\n  const onNotToggleChange = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (checked: boolean, _context?: any) => {\n      if (!disabled) {\n        onPropChange('not', checked, path);\n      }\n    },\n    [disabled, onPropChange, path]\n  );\n\n  const addRule: ActionElementEventHandler = useCallback(\n    (_e, context) => {\n      if (!disabled) {\n        const newRule = createRule();\n        onRuleAdd(newRule, path, context);\n      }\n    },\n    [createRule, disabled, onRuleAdd, path]\n  );\n\n  const addGroup: ActionElementEventHandler = useCallback(\n    (_e, context) => {\n      if (!disabled) {\n        const newGroup = createRuleGroup();\n        onGroupAdd(newGroup, path, context);\n      }\n    },\n    [createRuleGroup, disabled, onGroupAdd, path]\n  );\n\n  const cloneGroup: ActionElementEventHandler = useCallback(() => {\n    if (!disabled) {\n      const newPath = [...getParentPath(path), path.at(-1)! + 1];\n      moveRule(path, newPath, true);\n    }\n  }, [disabled, moveRule, path]);\n\n  const shiftGroupUp = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (event?: MouseEvent, _context?: any) => {\n      if (!disabled && !shiftUpDisabled) {\n        moveRule(path, 'up', event?.altKey);\n      }\n    },\n    [disabled, moveRule, path, shiftUpDisabled]\n  );\n\n  const shiftGroupDown = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (event?: MouseEvent, _context?: any) => {\n      if (!disabled && !shiftDownDisabled) {\n        moveRule(path, 'down', event?.altKey);\n      }\n    },\n    [disabled, moveRule, path, shiftDownDisabled]\n  );\n\n  const toggleLockGroup: ActionElementEventHandler = useCallback(() => {\n    onPropChange('disabled', !disabled, path);\n  }, [disabled, onPropChange, path]);\n\n  const toggleMuteGroup: ActionElementEventHandler = useCallback(() => {\n    onPropChange('muted', !ruleGroup.muted, path);\n  }, [ruleGroup.muted, onPropChange, path]);\n\n  const removeGroup: ActionElementEventHandler = useCallback(() => {\n    if (!disabled) {\n      onGroupRemove(path);\n    }\n  }, [disabled, onGroupRemove, path]);\n\n  const validationResult =\n    validationMap[id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */];\n  const validationClassName = useMemo(\n    () => getValidationClassNames(validationResult),\n    [validationResult]\n  );\n  const combinatorBasedClassName = useMemo(\n    () => (independentCombinators ? null : (getOption(combinators, combinator)?.className ?? '')),\n    [combinator, combinators, independentCombinators]\n  );\n\n  const ruleGroupClassname = useMemo(\n    () => getRuleGroupClassname(ruleGroup),\n    [getRuleGroupClassname, ruleGroup]\n  );\n\n  const outerClassName = useMemo(\n    () =>\n      clsx(\n        ruleGroupClassname,\n        combinatorBasedClassName,\n        suppressStandardClassnames || standardClassnames.ruleGroup,\n        classNamesProp.ruleGroup,\n        disabled && classNamesProp.disabled,\n        muted && classNamesProp.muted,\n        isDragging && classNamesProp.dndDragging,\n        isOver && groupItems && classNamesProp.dndGroup,\n        suppressStandardClassnames || {\n          [standardClassnames.disabled]: disabled,\n          [standardClassnames.muted]: muted,\n          [standardClassnames.dndDragging]: isDragging,\n          [standardClassnames.dndGroup]: isOver && groupItems,\n        },\n        validationClassName\n      ),\n    [\n      classNamesProp.disabled,\n      classNamesProp.muted,\n      classNamesProp.dndDragging,\n      classNamesProp.dndGroup,\n      classNamesProp.ruleGroup,\n      combinatorBasedClassName,\n      disabled,\n      muted,\n      groupItems,\n      isDragging,\n      isOver,\n      ruleGroupClassname,\n      suppressStandardClassnames,\n      validationClassName,\n    ]\n  );\n\n  const pathsMemo = usePathsMemo({ disabled, disabledPaths, path, nestedArray: ruleGroup.rules });\n\n  const accessibleDescription = useMemo(\n    () => accessibleDescriptionGenerator({ path, qbId }),\n    [accessibleDescriptionGenerator, path, qbId]\n  );\n\n  return {\n    ...props,\n    addGroup,\n    addRule,\n    accessibleDescription,\n    classNames,\n    cloneGroup,\n    combinator,\n    disabled,\n    dragMonitorId,\n    dragRef,\n    dropMonitorId,\n    dropRef,\n    isDragging,\n    isOver,\n    muted,\n    onCombinatorChange,\n    onGroupAdd,\n    onIndependentCombinatorChange,\n    onNotToggleChange,\n    outerClassName,\n    parentDisabled,\n    pathsMemo,\n    previewRef,\n    removeGroup,\n    ruleGroup,\n    shiftGroupUp,\n    shiftGroupDown,\n    toggleLockGroup,\n    toggleMuteGroup,\n    validationClassName,\n    validationResult,\n  };\n};\n","import * as React from 'react';\nimport type { ShiftActionsProps } from '../types';\n\n/**\n * Default \"shift up\"/\"shift down\" buttons used by {@link QueryBuilder}.\n *\n * @group Components\n */\nexport const ShiftActions = (props: ShiftActionsProps): React.JSX.Element => (\n  <div data-testid={props.testID} className={props.className}>\n    <button\n      disabled={props.disabled || props.shiftUpDisabled}\n      onClick={props.shiftUp}\n      title={props.titles?.shiftUp}>\n      {props.labels?.shiftUp}\n    </button>\n    <button\n      disabled={props.disabled || props.shiftDownDisabled}\n      onClick={props.shiftDown}\n      title={props.titles?.shiftDown}>\n      {props.labels?.shiftDown}\n    </button>\n  </div>\n);\n","import type { FullField, InputType, ParseNumberMethod } from '@react-querybuilder/core';\nimport {\n  clsx,\n  getFirstOption,\n  getParseNumberMethod,\n  joinWith,\n  parseNumber,\n  standardClassnames,\n  toArray,\n} from '@react-querybuilder/core';\nimport * as React from 'react';\nimport { useCallback, useEffect, useMemo } from 'react';\nimport type { Schema, ValueEditorProps } from '../types';\n\ninterface RadioButtonProps {\n  name: string;\n  disabled?: boolean;\n  checked: boolean;\n  handleOnChange: (v: unknown) => void;\n  label: string;\n}\n// Extracted from callback so we can use `useId`\nconst RadioButton = ({ name, disabled, checked, label, handleOnChange }: RadioButtonProps) => {\n  const id = React.useId();\n  return (\n    <label htmlFor={id}>\n      <input\n        id={id}\n        type=\"radio\"\n        value={name}\n        disabled={disabled}\n        checked={checked}\n        onChange={e => handleOnChange(e.target.value)}\n      />\n      {label}\n    </label>\n  );\n};\n\n/**\n * Default `valueEditor` component used by {@link QueryBuilder}.\n *\n * @group Components\n */\nexport const ValueEditor = <F extends FullField>(\n  allProps: ValueEditorProps<F>\n): React.JSX.Element | null => {\n  const {\n    operator,\n    value,\n    handleOnChange,\n    title,\n    className,\n    type = 'text',\n    inputType,\n    values = [],\n    listsAsArrays,\n    fieldData,\n    disabled,\n    separator = null,\n    testID,\n    selectorComponent: SelectorComponent = allProps.schema.controls.valueSelector,\n    // Some value selectors spread all extra props to the rendered component, so\n    // we cherry pick these out of `propsForValueSelector` to keep them from being\n    // assigned to DOM elements. (The props with mixed case are the only ones that\n    // really matter. Props in all lowercase don't emit warnings.)\n    parseNumbers: _parseNumbers,\n    skipHook: _skipHook,\n    valueSource: _valueSource,\n    ...propsForValueSelector\n  } = allProps;\n\n  const {\n    valueAsArray,\n    multiValueHandler,\n    bigIntValueHandler,\n    parseNumberMethod,\n    valueListItemClassName,\n    inputTypeCoerced,\n  } = useValueEditor(allProps);\n\n  if (operator === 'null' || operator === 'notNull') {\n    return null;\n  }\n\n  const placeHolderText = fieldData?.placeholder ?? '';\n\n  if (\n    (operator === 'between' || operator === 'notBetween') &&\n    (type === 'select' || type === 'text')\n  ) {\n    const editors = ['from', 'to'].map((key, i) => {\n      if (type === 'text') {\n        return (\n          <input\n            key={key}\n            type={inputTypeCoerced}\n            placeholder={placeHolderText}\n            value={valueAsArray[i] ?? ''}\n            className={valueListItemClassName}\n            disabled={disabled}\n            onChange={e => multiValueHandler(e.target.value, i)}\n          />\n        );\n      }\n      return (\n        <SelectorComponent\n          key={key}\n          {...propsForValueSelector}\n          schema={allProps.schema as Schema<FullField, string>}\n          className={valueListItemClassName}\n          handleOnChange={v => multiValueHandler(v, i)}\n          disabled={disabled}\n          value={valueAsArray[i] ?? getFirstOption(values)}\n          options={values}\n          listsAsArrays={listsAsArrays}\n        />\n      );\n    });\n\n    return (\n      <span data-testid={testID} className={className} title={title}>\n        {editors[0]}\n        {separator}\n        {editors[1]}\n      </span>\n    );\n  }\n\n  switch (type) {\n    case 'select':\n    case 'multiselect':\n      return (\n        <SelectorComponent\n          {...propsForValueSelector}\n          schema={allProps.schema as Schema<FullField, string>}\n          testID={testID}\n          className={className}\n          title={title}\n          handleOnChange={handleOnChange}\n          disabled={disabled}\n          value={value}\n          options={values}\n          multiple={type === 'multiselect'}\n          listsAsArrays={listsAsArrays}\n        />\n      );\n\n    case 'textarea':\n      return (\n        <textarea\n          data-testid={testID}\n          placeholder={placeHolderText}\n          value={value}\n          title={title}\n          className={className}\n          disabled={disabled}\n          onChange={e => handleOnChange(e.target.value)}\n        />\n      );\n\n    case 'switch':\n    case 'checkbox':\n      return (\n        <input\n          data-testid={testID}\n          type=\"checkbox\"\n          className={className}\n          title={title}\n          onChange={e => handleOnChange(e.target.checked)}\n          checked={!!value}\n          disabled={disabled}\n        />\n      );\n\n    case 'radio':\n      return (\n        <span data-testid={testID} className={className} title={title}>\n          {values.map(v => (\n            <RadioButton\n              key={v.name}\n              name={v.name}\n              disabled={disabled}\n              checked={value === v.name}\n              handleOnChange={handleOnChange}\n              label={v.label}\n            />\n          ))}\n        </span>\n      );\n  }\n\n  // Note that we don't use `inputTypeCoerced` for this condition.\n  // We need to know that its uncoerced value is \"bigint\".\n  if (inputType === 'bigint') {\n    return (\n      <input\n        data-testid={testID}\n        type={inputTypeCoerced}\n        placeholder={placeHolderText}\n        value={`${value}`}\n        title={title}\n        className={className}\n        disabled={disabled}\n        onChange={e => bigIntValueHandler(e.target.value)}\n      />\n    );\n  }\n\n  return (\n    <input\n      data-testid={testID}\n      type={inputTypeCoerced}\n      placeholder={placeHolderText}\n      value={value}\n      title={title}\n      className={className}\n      disabled={disabled}\n      onChange={e =>\n        handleOnChange(parseNumber(e.target.value, { parseNumbers: parseNumberMethod }))\n      }\n    />\n  );\n};\n\nexport interface UseValueEditor {\n  /**\n   * Array of values for when the main value represents a list, e.g. when operator\n   * is \"between\" or \"in\".\n   */\n  // oxlint-disable-next-line typescript/no-explicit-any\n  valueAsArray: any[];\n  /**\n   * An update handler for a series of value editors, e.g. when operator is \"between\".\n   * Calling this function will update a single element of the value array and leave\n   * the rest of the array as is.\n   *\n   * @param {string} val The new value for the editor\n   * @param {number} idx The index of the editor (and the array element to update)\n   */\n  multiValueHandler: (val: unknown, idx: number) => void;\n  /**\n   * An update handler for bigint editors, e.g. when `inputType` is \"bigint\" and\n   * `parseNumbersMethod` is truthy.\n   */\n  bigIntValueHandler: (val: unknown) => void;\n  /**\n   * Evaluated `parseNumber` method based on `parseNumbers` prop. This property ends up\n   * being the same as the `parseNumbers` prop minus the \"-limited\" suffix, unless\n   * the \"-limited\" suffix is present and the `inputType` is not \"number\", in which case\n   * it's set to `false`.\n   */\n  parseNumberMethod: ParseNumberMethod;\n  /**\n   * Class for items in a value editor series (e.g. \"between\" value editors).\n   */\n  valueListItemClassName: string;\n  /**\n   * Coerced `inputType` based on `inputType` and `operator`.\n   */\n  inputTypeCoerced: InputType;\n}\n\n/**\n * This hook is primarily concerned with multi-value editors like date range\n * pickers, editors for 'in' and 'between' operators, etc.\n *\n * @returns The value as an array (`valueAsArray`), a change handler for\n * series of editors (`multiValueHandler`), a processed version of the\n * `parseNumbers` prop (`parseNumberMethod`), and the classname(s) to be applied\n * to each editor in editor series (`valueListItemClassName`).\n *\n * **NOTE:** The following logic only applies if `skipHook` is not `true`. To avoid\n * automatically updating the `value`, pass `{ skipHook: true }`.\n *\n * If the `value` is an array of non-zero length, the `operator` is _not_ one of\n * the known multi-value operators (\"between\", \"notBetween\", \"in\", \"notIn\"), and\n * the `type` is not \"multiselect\", then the `value` will be set to the first\n * element of the array (i.e., `value[0]`).\n *\n * The same thing will happen if `inputType` is \"number\" and `value` is a string\n * containing a comma, since `<input type=\"number\">` doesn't handle commas.\n *\n * @example\n * // Consider the following rule:\n * `{ field: \"f1\", operator: \"in\", value: [\"twelve\",\"fourteen\"] }`\n * // If `operator` changes to \"=\", the value will be reset to \"twelve\".\n *\n * @example\n * // Consider the following rule:\n * `{ field: \"f1\", operator: \"between\", value: \"12,14\" }`\n * // If `operator` changes to \"=\", the value will be reset to \"12\".\n *\n * @group Hooks\n */\nexport const useValueEditor = <F extends FullField = FullField, O extends string = string>(\n  props: ValueEditorProps<F, O>\n): UseValueEditor => {\n  const {\n    handleOnChange,\n    inputType,\n    operator,\n    value,\n    listsAsArrays,\n    parseNumbers,\n    values,\n    type,\n    skipHook,\n    schema: { classNames: classNamesProp, suppressStandardClassnames },\n  } = props;\n\n  useEffect(() => {\n    if (\n      !skipHook &&\n      type !== 'multiselect' &&\n      !['between', 'notBetween', 'in', 'notIn'].includes(operator) &&\n      (Array.isArray(value) ||\n        (inputType === 'number' && typeof value === 'string' && value.includes(',')))\n    ) {\n      handleOnChange(toArray(value, { retainEmptyStrings: true })[0] ?? '');\n    }\n  }, [handleOnChange, inputType, operator, skipHook, type, value]);\n\n  const valueAsArray = useMemo(() => toArray(value, { retainEmptyStrings: true }), [value]);\n\n  const parseNumberMethod = useMemo(\n    () => getParseNumberMethod({ parseNumbers, inputType }),\n    [inputType, parseNumbers]\n  );\n\n  const multiValueHandler = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (val: any, idx: number) => {\n      const parsedVal = parseNumber(val, { parseNumbers: parseNumberMethod });\n      const needsBetweenFix =\n        idx === 0 &&\n        (operator === 'between' || operator === 'notBetween') &&\n        (valueAsArray.length < 2 || valueAsArray[1] === undefined);\n      // Check if value at index is already the same and no between/notBetween fix needed\n      if (valueAsArray[idx] === parsedVal && !needsBetweenFix) {\n        // Return the array as-is\n        handleOnChange(listsAsArrays ? valueAsArray : joinWith(valueAsArray, ','));\n        return;\n      }\n      const v = [...valueAsArray];\n      v[idx] = parsedVal;\n      // Enforce an array length of (at least) two for \"between\"/\"notBetween\"\n      if (needsBetweenFix) {\n        v[1] = getFirstOption(values);\n      }\n      handleOnChange(listsAsArrays ? v : joinWith(v, ','));\n    },\n    [handleOnChange, listsAsArrays, operator, parseNumberMethod, valueAsArray, values]\n  );\n\n  const bigIntValueHandler = useCallback(\n    (v: unknown) => {\n      const valAsMaybeNumber = parseNumber(v, {\n        parseNumbers: parseNumberMethod,\n        bigIntOnOverflow: true,\n      });\n      let bi: bigint;\n      try {\n        bi = BigInt(valAsMaybeNumber);\n      } catch {\n        handleOnChange(valAsMaybeNumber);\n        return;\n      }\n      handleOnChange(bi);\n    },\n    [handleOnChange, parseNumberMethod]\n  );\n\n  const valueListItemClassName = clsx(\n    suppressStandardClassnames || standardClassnames.valueListItem,\n    // Optional chaining is necessary for QueryBuilderNative\n    classNamesProp?.valueListItem\n  );\n\n  const inputTypeCoerced =\n    inputType === 'bigint' || operator === 'in' || operator === 'notIn'\n      ? 'text'\n      : inputType || 'text';\n\n  return {\n    valueAsArray,\n    multiValueHandler,\n    bigIntValueHandler,\n    parseNumberMethod,\n    valueListItemClassName,\n    inputTypeCoerced,\n  };\n};\n","import type { ChangeEvent } from 'react';\nimport { useMemo } from 'react';\n\nexport interface UseSelectElementChangeHandlerParams {\n  onChange: (v: string | string[]) => void;\n  multiple?: boolean;\n}\n\n/**\n * Returns a memoized change handler for HTML `<select>` elements.\n *\n * @group Hooks\n */\nexport const useSelectElementChangeHandler = (\n  params: UseSelectElementChangeHandlerParams\n): ((e: ChangeEvent<HTMLSelectElement>) => void) => {\n  const { multiple, onChange } = params;\n  const selectElementChangeHandler = useMemo(\n    () =>\n      multiple\n        ? (e: ChangeEvent<HTMLSelectElement>) =>\n            onChange(Array.from(e.target.selectedOptions).map(o => o.value))\n        : (e: ChangeEvent<HTMLSelectElement>) => onChange(e.target.value),\n    [multiple, onChange]\n  );\n\n  return selectElementChangeHandler;\n};\n","import type { FullField } from '@react-querybuilder/core';\nimport type { ReactNode } from 'react';\nimport * as React from 'react';\nimport { QueryBuilderContext } from '../components';\nimport { useMergedContext } from '../hooks';\nimport type {\n  QueryBuilderContextProps,\n  QueryBuilderContextProvider,\n  QueryBuilderContextProviderProps,\n} from '../types';\n\nexport type GetCompatContextProviderProps = QueryBuilderContextProps;\n\nconst QBContextInner = (props: QueryBuilderContextProviderProps) => {\n  const rqbContext = useMergedContext(props);\n\n  return (\n    <QueryBuilderContext.Provider value={rqbContext}>{props.children}</QueryBuilderContext.Provider>\n  );\n};\n\n/**\n * Generates a context provider for a compatibility package.\n */\nexport const getCompatContextProvider = <F extends FullField, O extends string>(\n  gccpProps: QueryBuilderContextProps<F, O>\n): QueryBuilderContextProvider => {\n  const QBContextWrapper = (props: { children: ReactNode }) => {\n    const rqbContext = useMergedContext(gccpProps);\n    return (\n      <QueryBuilderContext.Provider value={rqbContext}>\n        {props.children}\n      </QueryBuilderContext.Provider>\n    );\n  };\n\n  return props => {\n    return (\n      <QBContextWrapper>\n        <QBContextInner {...props}>{props.children}</QBContextInner>\n      </QBContextWrapper>\n    );\n  };\n};\n","import {\n  defaultTranslations,\n  mergeAnyTranslation,\n  mergeAnyTranslations,\n} from '@react-querybuilder/core';\nimport type { ReactNode } from 'react';\nimport type { Translations } from '../types';\n\n/**\n * Merges any number of partial {@link Translations} into a single definition.\n */\nexport const mergeTranslations = (\n  base: Partial<Translations>,\n  ...otherTranslations: (Partial<Translations> | undefined)[]\n): Partial<Translations> =>\n  mergeAnyTranslations(\n    base as Record<string, Record<string, unknown>>,\n    ...(otherTranslations as (Record<string, Record<string, unknown>> | undefined)[])\n  ) as Partial<Translations>;\n\nexport const mergeTranslation = (\n  el: keyof Translations,\n  keyPropContextMap: Record<string, [ReactNode, ReactNode]>,\n  finalize?: boolean\n): Record<string, Record<string, string>> | undefined =>\n  mergeAnyTranslation(\n    el,\n    keyPropContextMap,\n    finalize ? (defaultTranslations as Record<string, Record<string, string>>) : undefined\n  ) as Record<string, Record<string, string>> | undefined;\n","import type { OptionList } from '@react-querybuilder/core';\nimport { isOptionGroupArray } from '@react-querybuilder/core';\nimport * as React from 'react';\n\n/**\n * Generates an array of `<option>` or `<optgroup>` elements\n * from a given {@link OptionList}.\n *\n * @group Option Lists\n */\nexport const toOptions = (arr?: OptionList): React.JSX.Element[] | null =>\n  isOptionGroupArray(arr)\n    ? arr.map(og => (\n        <optgroup key={og.label} label={og.label}>\n          {og.options.map(opt => (\n            <option key={opt.name} value={opt.name} disabled={opt.disabled}>\n              {opt.label}\n            </option>\n          ))}\n        </optgroup>\n      ))\n    : Array.isArray(arr)\n      ? arr.map(opt => (\n          <option key={opt.name} value={opt.name} disabled={opt.disabled}>\n            {opt.label}\n          </option>\n        ))\n      : null;\n","import type { FullOption } from '@react-querybuilder/core';\nimport { joinWith, toArray } from '@react-querybuilder/core';\nimport * as React from 'react';\nimport { useCallback, useMemo } from 'react';\nimport { useSelectElementChangeHandler } from '../hooks/useSelectElementChangeHandler';\nimport type { ValueSelectorProps } from '../types';\nimport { toOptions } from '../utils';\n\n/**\n * Default `<select>` component used by {@link QueryBuilder}.\n *\n * @group Components\n */\nexport const ValueSelector = <Opt extends FullOption = FullOption>(\n  props: ValueSelectorProps<Opt>\n): React.JSX.Element => {\n  const { onChange, val } = useValueSelector(props);\n\n  const selectElementChangeHandler = useSelectElementChangeHandler({\n    multiple: props.multiple,\n    onChange,\n  });\n\n  return (\n    <select\n      data-testid={props.testID}\n      className={props.className}\n      value={val}\n      title={props.title}\n      disabled={props.disabled}\n      multiple={!!props.multiple}\n      onChange={selectElementChangeHandler}>\n      {toOptions(props.options)}\n    </select>\n  );\n};\n\nexport type UseValueSelectorParams = Pick<\n  ValueSelectorProps,\n  'handleOnChange' | 'listsAsArrays' | 'multiple' | 'value'\n>;\n\n/**\n * Transforms a value into an array when appropriate and provides a memoized change handler.\n *\n * @group Hooks\n */\nexport const useValueSelector = (\n  props: UseValueSelectorParams\n): {\n  /**\n   * Memoized change handler for value selectors\n   */\n  onChange: (v: string | string[]) => void;\n  /**\n   * The value as provided or, if appropriate, as an array\n   */\n  // oxlint-disable-next-line typescript/no-explicit-any\n  val: string | any[] | undefined;\n} => {\n  const { handleOnChange, listsAsArrays = false, multiple = false, value } = props;\n\n  const onChange = useCallback(\n    (v: string | string[]) => {\n      if (multiple) {\n        const valueAsArray = toArray(v);\n        handleOnChange(listsAsArrays ? valueAsArray : joinWith(valueAsArray, ','));\n      } else {\n        handleOnChange(v);\n      }\n    },\n    [handleOnChange, listsAsArrays, multiple]\n  );\n\n  // Normalize multiselect values to strings so they match option names,\n  // which are always strings (e.g., value [42] becomes [\"42\"]).\n  const val = useMemo(() => (multiple ? toArray(value).map(String) : value), [multiple, value]);\n\n  return {\n    onChange,\n    val,\n  };\n};\n","import type {\n  FullCombinator,\n  FullField,\n  FullOperator,\n  GetOptionIdentifierType,\n  RuleGroupTypeAny,\n} from '@react-querybuilder/core';\nimport { rootPath } from '@react-querybuilder/core';\nimport * as React from 'react';\nimport type { QueryBuilderContextProps, QueryBuilderProps } from '../types';\nimport { useQueryBuilder } from './QueryBuilder.useQueryBuilder';\nimport { QueryBuilderContext as _QBC } from './QueryBuilderContext';\n\nexport const QueryBuilderInternal = <\n  RG extends RuleGroupTypeAny,\n  F extends FullField,\n  O extends FullOperator,\n  C extends FullCombinator,\n>({\n  props,\n}: {\n  props: QueryBuilderProps<RG, F, O, C>;\n}): React.JSX.Element => {\n  const qb = useQueryBuilder<RG, F, O, C>(props);\n\n  const RuleGroupControlElement = qb.schema.controls.ruleGroup;\n\n  const QueryBuilderContext = _QBC as React.Context<\n    QueryBuilderContextProps<F, GetOptionIdentifierType<O>>\n  >;\n\n  return (\n    <QueryBuilderContext.Provider key={qb.dndEnabledAttr} value={qb.rqbContext}>\n      <div\n        role=\"form\"\n        className={qb.wrapperClassName}\n        data-dnd={qb.dndEnabledAttr}\n        data-inlinecombinators={qb.inlineCombinatorsAttr}>\n        <RuleGroupControlElement\n          translations={qb.translations}\n          ruleGroup={qb.rootGroup}\n          rules={qb.rootGroup.rules}\n          {...qb.combinatorPropObject}\n          not={!!qb.rootGroup.not}\n          schema={qb.schema}\n          actions={qb.actions}\n          id={qb.rootGroup.id}\n          path={rootPath}\n          disabled={qb.rootGroupDisabled}\n          shiftUpDisabled\n          shiftDownDisabled\n          parentDisabled={qb.queryDisabled}\n          context={props.context}\n        />\n      </div>\n    </QueryBuilderContext.Provider>\n  );\n};\n","import type {\n  Classnames,\n  FullField,\n  QueryBuilderFlags,\n  RuleGroupTypeAny,\n} from '@react-querybuilder/core';\nimport {\n  defaultControlClassnames,\n  defaultTranslations,\n  mergeAnyTranslation,\n  mergeClassnames,\n  preferFlagProps,\n  preferProp,\n} from '@react-querybuilder/core';\nimport type { ComponentType, ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { forwardRef, useCallback, useContext, useMemo } from 'react';\nimport { QueryBuilderContext } from '../components';\nimport { defaultControlElements } from '../defaults';\nimport type {\n  ControlElementsProp,\n  Controls,\n  DragHandleProps,\n  QueryBuilderContextProps,\n  Translations,\n  TranslationsFull,\n  ValueEditorProps,\n} from '../types';\n\nexport type UseMergedContextParams<\n  F extends FullField = FullField,\n  O extends string = string,\n  Finalize extends boolean | undefined = undefined,\n> = QueryBuilderContextProps<F, O> & {\n  initialQuery?: RuleGroupTypeAny;\n  qbId?: string;\n  /**\n   * When true, props and context are merged with defaults to ensure all properties\n   * are defined. Action elements and value selectors are merged with their respective\n   * bulk override components. Only needs to be true when run from `QueryBuilder`.\n   */\n  finalize?: Finalize;\n};\n\nexport interface UseMergedContext<\n  F extends FullField = FullField,\n  O extends string = string,\n  Finalize extends boolean | undefined = undefined,\n>\n  extends QueryBuilderContextProps<F, O>, QueryBuilderFlags {\n  enableDragAndDrop: Finalize extends true ? boolean : boolean | undefined;\n  initialQuery?: RuleGroupTypeAny;\n  qbId?: string;\n  controlElements: Finalize extends true ? Controls<F, O> : Partial<Controls<F, O>>;\n  controlClassnames: Classnames;\n  translations: Finalize extends true ? TranslationsFull : Partial<Translations>;\n}\n\nconst nullComp = () => null;\nconst nullFwdComp: ForwardRefExoticComponent<DragHandleProps & RefAttributes<HTMLElement>> =\n  forwardRef(nullComp);\nconst emptyObject = {} as const;\n\n/**\n * Merges inherited context values with props, giving precedence to props.\n *\n * @group Hooks\n */\nexport const useMergedContext = <\n  F extends FullField = FullField,\n  O extends string = string,\n  Finalize extends boolean | undefined = undefined,\n>({\n  finalize,\n  ...props\n}: UseMergedContextParams<F, O, Finalize>): UseMergedContext<F, O, Finalize> => {\n  const rqbContext: QueryBuilderContextProps<F, O> = useContext(QueryBuilderContext);\n\n  const queryBuilderFlags = useMemo(\n    () => preferFlagProps(props, rqbContext, finalize),\n    [props, rqbContext, finalize]\n  );\n\n  // Drag-and-drop should be disabled if context sets it to false because\n  // QueryBuilderDnD might not have loaded react-dnd yet. Therefore we prefer\n  // the prop here only if context is true or undefined.\n  const enableDragAndDrop = finalize\n    ? rqbContext.enableDragAndDrop !== false &&\n      preferProp(false, props.enableDragAndDrop, rqbContext.enableDragAndDrop)\n    : (props.enableDragAndDrop ?? (rqbContext.enableDragAndDrop as boolean));\n\n  const cc = useMemo(\n    () =>\n      mergeClassnames(\n        finalize ? Object.assign({}, defaultControlClassnames) : emptyObject,\n        rqbContext.controlClassnames,\n        props.controlClassnames\n      ),\n    [rqbContext.controlClassnames, props.controlClassnames, finalize]\n  );\n\n  const controlClassnames = useMemo(\n    () => ({\n      actionElement: cc.actionElement,\n      addGroup: cc.addGroup,\n      addRule: cc.addRule,\n      body: cc.body,\n      cloneGroup: cc.cloneGroup,\n      cloneRule: cc.cloneRule,\n      combinators: cc.combinators,\n      dragHandle: cc.dragHandle,\n      fields: cc.fields,\n      header: cc.header,\n      lockGroup: cc.lockGroup,\n      lockRule: cc.lockRule,\n      muteGroup: cc.muteGroup,\n      muteRule: cc.muteRule,\n      muted: cc.muted,\n      notToggle: cc.notToggle,\n      operators: cc.operators,\n      queryBuilder: cc.queryBuilder,\n      removeGroup: cc.removeGroup,\n      removeRule: cc.removeRule,\n      rule: cc.rule,\n      ruleGroup: cc.ruleGroup,\n      shiftActions: cc.shiftActions,\n      value: cc.value,\n      valueSelector: cc.valueSelector,\n      valueSource: cc.valueSource,\n      betweenRules: cc.betweenRules,\n      valid: cc.valid,\n      invalid: cc.invalid,\n      dndDragging: cc.dndDragging,\n      dndOver: cc.dndOver,\n      dndCopy: cc.dndCopy,\n      dndGroup: cc.dndGroup,\n      dndDropNotAllowed: cc.dndDropNotAllowed,\n      dndPreviewPosition: cc.dndPreviewPosition,\n      dndHidden: cc.dndHidden,\n      disabled: cc.disabled,\n      valueListItem: cc.valueListItem,\n      matchMode: cc.matchMode,\n      matchThreshold: cc.matchThreshold,\n      branches: cc.branches,\n      hasSubQuery: cc.hasSubQuery,\n      loading: cc.loading,\n    }),\n    [\n      cc.actionElement,\n      cc.addGroup,\n      cc.addRule,\n      cc.betweenRules,\n      cc.body,\n      cc.branches,\n      cc.cloneGroup,\n      cc.cloneRule,\n      cc.combinators,\n      cc.disabled,\n      cc.dndCopy,\n      cc.dndDropNotAllowed,\n      cc.dndPreviewPosition,\n      cc.dndHidden,\n      cc.dndGroup,\n      cc.dndDragging,\n      cc.dndOver,\n      cc.dragHandle,\n      cc.fields,\n      cc.hasSubQuery,\n      cc.header,\n      cc.invalid,\n      cc.loading,\n      cc.lockGroup,\n      cc.lockRule,\n      cc.muteGroup,\n      cc.muteRule,\n      cc.muted,\n      cc.matchMode,\n      cc.matchThreshold,\n      cc.notToggle,\n      cc.operators,\n      cc.queryBuilder,\n      cc.removeGroup,\n      cc.removeRule,\n      cc.rule,\n      cc.ruleGroup,\n      cc.shiftActions,\n      cc.valid,\n      cc.value,\n      cc.valueListItem,\n      cc.valueSelector,\n      cc.valueSource,\n    ]\n  );\n\n  const contextCE: ControlElementsProp<F, O> = rqbContext.controlElements ?? emptyObject;\n  const propsCE: ControlElementsProp<F, O> = props.controlElements ?? emptyObject;\n  const mergeControlElement = useCallback(\n    (\n      name: keyof Controls<F, O>,\n      // oxlint-disable-next-line typescript/no-explicit-any\n      propComp: ComponentType<any> | null | undefined,\n      // oxlint-disable-next-line typescript/no-explicit-any\n      contextComp: ComponentType<any> | null | undefined\n    ) => {\n      const nc = name === 'dragHandle' ? nullFwdComp : nullComp;\n      const propBulkOverride =\n        (name.endsWith('Action') && propsCE.actionElement ? propsCE.actionElement : undefined) ??\n        (name.endsWith('Selector') && propsCE.valueSelector ? propsCE.valueSelector : undefined);\n      const contextBulkOverride =\n        (name.endsWith('Action') && contextCE.actionElement\n          ? contextCE.actionElement\n          : undefined) ??\n        (name.endsWith('Selector') && contextCE.valueSelector\n          ? contextCE.valueSelector\n          : undefined);\n      const comp =\n        propComp === null\n          ? nc\n          : (propComp ??\n            (finalize ? propBulkOverride : undefined) ??\n            (contextComp === null\n              ? nc\n              : (contextComp ?? (finalize ? contextBulkOverride : undefined))));\n      return comp\n        ? { [name]: comp }\n        : finalize\n          ? { [name]: defaultControlElements[name] }\n          : emptyObject;\n    },\n    [\n      contextCE.actionElement,\n      contextCE.valueSelector,\n      finalize,\n      propsCE.actionElement,\n      propsCE.valueSelector,\n    ]\n  );\n  const controlElements = useMemo(\n    () =>\n      // For some reason TypeScript doesn't like the object spread syntax here.\n      // Something about a union type being too complex to represent.\n      Object.assign(\n        {},\n        mergeControlElement('addGroupAction', propsCE.addGroupAction, contextCE.addGroupAction),\n        mergeControlElement('addRuleAction', propsCE.addRuleAction, contextCE.addRuleAction),\n        mergeControlElement(\n          'cloneGroupAction',\n          propsCE.cloneGroupAction,\n          contextCE.cloneGroupAction\n        ),\n        mergeControlElement('cloneRuleAction', propsCE.cloneRuleAction, contextCE.cloneRuleAction),\n        mergeControlElement(\n          'combinatorSelector',\n          propsCE.combinatorSelector,\n          contextCE.combinatorSelector\n        ),\n        mergeControlElement('dragHandle', propsCE.dragHandle, contextCE.dragHandle),\n        mergeControlElement('fieldSelector', propsCE.fieldSelector, contextCE.fieldSelector),\n        mergeControlElement(\n          'inlineCombinator',\n          propsCE.inlineCombinator,\n          contextCE.inlineCombinator\n        ),\n        mergeControlElement('lockGroupAction', propsCE.lockGroupAction, contextCE.lockGroupAction),\n        mergeControlElement('lockRuleAction', propsCE.lockRuleAction, contextCE.lockRuleAction),\n        mergeControlElement('muteGroupAction', propsCE.muteGroupAction, contextCE.muteGroupAction),\n        mergeControlElement('muteRuleAction', propsCE.muteRuleAction, contextCE.muteRuleAction),\n        mergeControlElement('notToggle', propsCE.notToggle, contextCE.notToggle),\n        mergeControlElement(\n          'operatorSelector',\n          propsCE.operatorSelector,\n          contextCE.operatorSelector\n        ),\n        mergeControlElement(\n          'removeGroupAction',\n          propsCE.removeGroupAction,\n          contextCE.removeGroupAction\n        ),\n        mergeControlElement(\n          'removeRuleAction',\n          propsCE.removeRuleAction,\n          contextCE.removeRuleAction\n        ),\n        mergeControlElement('shiftActions', propsCE.shiftActions, contextCE.shiftActions),\n        {\n          valueEditor:\n            propsCE.valueEditor === null\n              ? nullComp\n              : (propsCE.valueEditor ??\n                (contextCE.valueEditor === null ? nullComp : contextCE.valueEditor) ??\n                (defaultControlElements.valueEditor as unknown as ComponentType<\n                  ValueEditorProps<F, O>\n                >)),\n        },\n        mergeControlElement(\n          'valueSourceSelector',\n          propsCE.valueSourceSelector,\n          contextCE.valueSourceSelector\n        ),\n        mergeControlElement('matchModeEditor', propsCE.matchModeEditor, contextCE.matchModeEditor),\n        mergeControlElement('rule', propsCE.rule, contextCE.rule),\n        mergeControlElement('ruleGroup', propsCE.ruleGroup, contextCE.ruleGroup),\n        mergeControlElement(\n          'ruleGroupBodyElements',\n          propsCE.ruleGroupBodyElements,\n          contextCE.ruleGroupBodyElements\n        ),\n        mergeControlElement(\n          'ruleGroupHeaderElements',\n          propsCE.ruleGroupHeaderElements,\n          contextCE.ruleGroupHeaderElements\n        ),\n        {\n          actionElement:\n            propsCE.actionElement ??\n            contextCE.actionElement ??\n            (finalize ? defaultControlElements.actionElement : undefined),\n        },\n        {\n          valueSelector:\n            propsCE.valueSelector ??\n            contextCE.valueSelector ??\n            (finalize ? defaultControlElements.valueSelector : undefined),\n        }\n      ) as Finalize extends true ? ControlElementsProp<F, O> : Partial<ControlElementsProp<F, O>>,\n    [\n      contextCE.actionElement,\n      contextCE.addGroupAction,\n      contextCE.addRuleAction,\n      contextCE.cloneGroupAction,\n      contextCE.cloneRuleAction,\n      contextCE.combinatorSelector,\n      contextCE.dragHandle,\n      contextCE.fieldSelector,\n      contextCE.inlineCombinator,\n      contextCE.lockGroupAction,\n      contextCE.lockRuleAction,\n      contextCE.muteGroupAction,\n      contextCE.muteRuleAction,\n      contextCE.matchModeEditor,\n      contextCE.notToggle,\n      contextCE.operatorSelector,\n      contextCE.removeGroupAction,\n      contextCE.removeRuleAction,\n      contextCE.rule,\n      contextCE.ruleGroup,\n      contextCE.ruleGroupBodyElements,\n      contextCE.ruleGroupHeaderElements,\n      contextCE.shiftActions,\n      contextCE.valueEditor,\n      contextCE.valueSelector,\n      contextCE.valueSourceSelector,\n      mergeControlElement,\n      finalize,\n      propsCE.actionElement,\n      propsCE.addGroupAction,\n      propsCE.addRuleAction,\n      propsCE.cloneGroupAction,\n      propsCE.cloneRuleAction,\n      propsCE.combinatorSelector,\n      propsCE.dragHandle,\n      propsCE.fieldSelector,\n      propsCE.inlineCombinator,\n      propsCE.lockGroupAction,\n      propsCE.lockRuleAction,\n      propsCE.muteGroupAction,\n      propsCE.muteRuleAction,\n      propsCE.matchModeEditor,\n      propsCE.notToggle,\n      propsCE.operatorSelector,\n      propsCE.removeGroupAction,\n      propsCE.removeRuleAction,\n      propsCE.rule,\n      propsCE.ruleGroup,\n      propsCE.ruleGroupBodyElements,\n      propsCE.ruleGroupHeaderElements,\n      propsCE.shiftActions,\n      propsCE.valueEditor,\n      propsCE.valueSelector,\n      propsCE.valueSourceSelector,\n    ]\n  ) as Finalize extends true ? Controls<F, O> : Partial<Controls<F, O>>;\n\n  const propsT: Partial<Translations> = props.translations ?? emptyObject;\n  const contextT: Partial<Translations> = rqbContext.translations ?? emptyObject;\n  const translations = useMemo(\n    () =>\n      Object.assign(\n        {},\n        mergeAnyTranslation(\n          'addGroup',\n          {\n            label: [propsT.addGroup?.label, contextT.addGroup?.label],\n            title: [propsT.addGroup?.title, contextT.addGroup?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'addRule',\n          {\n            label: [propsT.addRule?.label, contextT.addRule?.label],\n            title: [propsT.addRule?.title, contextT.addRule?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'cloneRule',\n          {\n            label: [propsT.cloneRule?.label, contextT.cloneRule?.label],\n            title: [propsT.cloneRule?.title, contextT.cloneRule?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'cloneRuleGroup',\n          {\n            label: [propsT.cloneRuleGroup?.label, contextT.cloneRuleGroup?.label],\n            title: [propsT.cloneRuleGroup?.title, contextT.cloneRuleGroup?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'combinators',\n          { title: [propsT.combinators?.title, contextT.combinators?.title] },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'dragHandle',\n          {\n            label: [propsT.dragHandle?.label, contextT.dragHandle?.label],\n            title: [propsT.dragHandle?.title, contextT.dragHandle?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'fields',\n          {\n            placeholderGroupLabel: [\n              propsT.fields?.placeholderGroupLabel,\n              contextT.fields?.placeholderGroupLabel,\n            ],\n            placeholderLabel: [propsT.fields?.placeholderLabel, contextT.fields?.placeholderLabel],\n            placeholderName: [propsT.fields?.placeholderName, contextT.fields?.placeholderName],\n            title: [propsT.fields?.title, contextT.fields?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'lockGroup',\n          {\n            label: [propsT.lockGroup?.label, contextT.lockGroup?.label],\n            title: [propsT.lockGroup?.title, contextT.lockGroup?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'lockGroupDisabled',\n          {\n            label: [propsT.lockGroupDisabled?.label, contextT.lockGroupDisabled?.label],\n            title: [propsT.lockGroupDisabled?.title, contextT.lockGroupDisabled?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'lockRule',\n          {\n            label: [propsT.lockRule?.label, contextT.lockRule?.label],\n            title: [propsT.lockRule?.title, contextT.lockRule?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'lockRuleDisabled',\n          {\n            label: [propsT.lockRuleDisabled?.label, contextT.lockRuleDisabled?.label],\n            title: [propsT.lockRuleDisabled?.title, contextT.lockRuleDisabled?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'muteGroup',\n          {\n            label: [propsT.muteGroup?.label, contextT.muteGroup?.label],\n            title: [propsT.muteGroup?.title, contextT.muteGroup?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'unmuteGroup',\n          {\n            label: [propsT.unmuteGroup?.label, contextT.unmuteGroup?.label],\n            title: [propsT.unmuteGroup?.title, contextT.unmuteGroup?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'muteRule',\n          {\n            label: [propsT.muteRule?.label, contextT.muteRule?.label],\n            title: [propsT.muteRule?.title, contextT.muteRule?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'unmuteRule',\n          {\n            label: [propsT.unmuteRule?.label, contextT.unmuteRule?.label],\n            title: [propsT.unmuteRule?.title, contextT.unmuteRule?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'notToggle',\n          {\n            label: [propsT.notToggle?.label, contextT.notToggle?.label],\n            title: [propsT.notToggle?.title, contextT.notToggle?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'operators',\n          {\n            placeholderGroupLabel: [\n              propsT.operators?.placeholderGroupLabel,\n              contextT.operators?.placeholderGroupLabel,\n            ],\n            placeholderLabel: [\n              propsT.operators?.placeholderLabel,\n              contextT.operators?.placeholderLabel,\n            ],\n            placeholderName: [\n              propsT.operators?.placeholderName,\n              contextT.operators?.placeholderName,\n            ],\n            title: [propsT.operators?.title, contextT.operators?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'values',\n          {\n            placeholderGroupLabel: [\n              propsT.values?.placeholderGroupLabel,\n              contextT.values?.placeholderGroupLabel,\n            ],\n            placeholderLabel: [propsT.values?.placeholderLabel, contextT.values?.placeholderLabel],\n            placeholderName: [propsT.values?.placeholderName, contextT.values?.placeholderName],\n            title: [propsT.values?.title, contextT.values?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'removeGroup',\n          {\n            label: [propsT.removeGroup?.label, contextT.removeGroup?.label],\n            title: [propsT.removeGroup?.title, contextT.removeGroup?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'removeRule',\n          {\n            label: [propsT.removeRule?.label, contextT.removeRule?.label],\n            title: [propsT.removeRule?.title, contextT.removeRule?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'shiftActionDown',\n          {\n            label: [propsT.shiftActionDown?.label, contextT.shiftActionDown?.label],\n            title: [propsT.shiftActionDown?.title, contextT.shiftActionDown?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'shiftActionUp',\n          {\n            label: [propsT.shiftActionUp?.label, contextT.shiftActionUp?.label],\n            title: [propsT.shiftActionUp?.title, contextT.shiftActionUp?.title],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'matchMode',\n          { title: [propsT.matchMode?.title, contextT.matchMode?.title] },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'matchThreshold',\n          {\n            title: [propsT.matchThreshold?.title, contextT.matchThreshold?.title],\n            placeholderName: [\n              propsT.matchThreshold?.placeholderName,\n              contextT.matchThreshold?.placeholderName,\n            ],\n          },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'value',\n          { title: [propsT.value?.title, contextT.value?.title] },\n          finalize ? defaultTranslations : undefined\n        ),\n        mergeAnyTranslation(\n          'valueSourceSelector',\n          { title: [propsT.valueSourceSelector?.title, contextT.valueSourceSelector?.title] },\n          finalize ? defaultTranslations : undefined\n        )\n      ),\n    [\n      contextT.addGroup?.label,\n      contextT.addGroup?.title,\n      contextT.addRule?.label,\n      contextT.addRule?.title,\n      contextT.cloneRule?.label,\n      contextT.cloneRule?.title,\n      contextT.cloneRuleGroup?.label,\n      contextT.cloneRuleGroup?.title,\n      contextT.combinators?.title,\n      contextT.dragHandle?.label,\n      contextT.dragHandle?.title,\n      contextT.fields?.placeholderGroupLabel,\n      contextT.fields?.placeholderLabel,\n      contextT.fields?.placeholderName,\n      contextT.fields?.title,\n      contextT.lockGroup?.label,\n      contextT.lockGroup?.title,\n      contextT.lockGroupDisabled?.label,\n      contextT.lockGroupDisabled?.title,\n      contextT.lockRule?.label,\n      contextT.lockRule?.title,\n      contextT.lockRuleDisabled?.label,\n      contextT.lockRuleDisabled?.title,\n      contextT.muteGroup?.label,\n      contextT.muteGroup?.title,\n      contextT.unmuteGroup?.label,\n      contextT.unmuteGroup?.title,\n      contextT.muteRule?.label,\n      contextT.muteRule?.title,\n      contextT.unmuteRule?.label,\n      contextT.unmuteRule?.title,\n      contextT.matchMode?.title,\n      contextT.matchThreshold?.title,\n      contextT.matchThreshold?.placeholderName,\n      contextT.notToggle?.label,\n      contextT.notToggle?.title,\n      contextT.operators?.placeholderGroupLabel,\n      contextT.operators?.placeholderLabel,\n      contextT.operators?.placeholderName,\n      contextT.operators?.title,\n      contextT.removeGroup?.label,\n      contextT.removeGroup?.title,\n      contextT.removeRule?.label,\n      contextT.removeRule?.title,\n      contextT.shiftActionDown?.label,\n      contextT.shiftActionDown?.title,\n      contextT.shiftActionUp?.label,\n      contextT.shiftActionUp?.title,\n      contextT.value?.title,\n      contextT.values?.placeholderGroupLabel,\n      contextT.values?.placeholderLabel,\n      contextT.values?.placeholderName,\n      contextT.values?.title,\n      contextT.valueSourceSelector?.title,\n      finalize,\n      propsT.addGroup?.label,\n      propsT.addGroup?.title,\n      propsT.addRule?.label,\n      propsT.addRule?.title,\n      propsT.cloneRule?.label,\n      propsT.cloneRule?.title,\n      propsT.cloneRuleGroup?.label,\n      propsT.cloneRuleGroup?.title,\n      propsT.combinators?.title,\n      propsT.dragHandle?.label,\n      propsT.dragHandle?.title,\n      propsT.fields?.placeholderGroupLabel,\n      propsT.fields?.placeholderLabel,\n      propsT.fields?.placeholderName,\n      propsT.fields?.title,\n      propsT.lockGroup?.label,\n      propsT.lockGroup?.title,\n      propsT.lockGroupDisabled?.label,\n      propsT.lockGroupDisabled?.title,\n      propsT.lockRule?.label,\n      propsT.lockRule?.title,\n      propsT.lockRuleDisabled?.label,\n      propsT.lockRuleDisabled?.title,\n      propsT.muteGroup?.label,\n      propsT.muteGroup?.title,\n      propsT.unmuteGroup?.label,\n      propsT.unmuteGroup?.title,\n      propsT.muteRule?.label,\n      propsT.muteRule?.title,\n      propsT.unmuteRule?.label,\n      propsT.unmuteRule?.title,\n      propsT.matchMode?.title,\n      propsT.matchThreshold?.title,\n      propsT.matchThreshold?.placeholderName,\n      propsT.notToggle?.label,\n      propsT.notToggle?.title,\n      propsT.operators?.placeholderGroupLabel,\n      propsT.operators?.placeholderLabel,\n      propsT.operators?.placeholderName,\n      propsT.operators?.title,\n      propsT.removeGroup?.label,\n      propsT.removeGroup?.title,\n      propsT.removeRule?.label,\n      propsT.removeRule?.title,\n      propsT.shiftActionDown?.label,\n      propsT.shiftActionDown?.title,\n      propsT.shiftActionUp?.label,\n      propsT.shiftActionUp?.title,\n      propsT.value?.title,\n      propsT.values?.placeholderGroupLabel,\n      propsT.values?.placeholderLabel,\n      propsT.values?.placeholderName,\n      propsT.values?.title,\n      propsT.valueSourceSelector?.title,\n    ]\n  ) as Finalize extends true ? TranslationsFull : Partial<Translations>;\n\n  return {\n    ...queryBuilderFlags,\n    controlClassnames,\n    controlElements,\n    enableDragAndDrop,\n    translations,\n    initialQuery: props.initialQuery,\n    qbId: props.qbId,\n  };\n};\n","import type {\n  FullOption,\n  PreparedOptionList,\n  PrepareOptionListParams,\n} from '@react-querybuilder/core';\nimport { prepareOptionList } from '@react-querybuilder/core';\nimport { useMemo } from 'react';\n\nexport interface UseOptionListProp<O extends FullOption> extends PreparedOptionList<O> {}\n\nexport interface UseOptionListPropParams<O extends FullOption> extends PrepareOptionListParams<O> {}\n\n/**\n * @group Hooks\n * @deprecated Memoize the result of `prepareOptionList` instead.\n */\n// v8 ignore next\nexport const useOptionListProp = <O extends FullOption>(\n  props: UseOptionListPropParams<O>\n): UseOptionListProp<O> =>\n  useMemo(\n    () => prepareOptionList(props),\n    // oxlint-disable-next-line exhaustive-deps\n    Object.values(props)\n  );\n\n// // \"Enumerated props\" version:\n// export const useOptionListProp = <O extends FullOption>(\n//   props: UseOptionListPropParams<O>\n// ): UseOptionListProp<O> => {\n//   const { placeholder, optionList, baseOption, labelMap, autoSelectOption } = props;\n//   return useMemo(\n//     () =>\n//       prepareOptionList({\n//         placeholder,\n//         optionList,\n//         baseOption,\n//         labelMap,\n//         autoSelectOption,\n//       }),\n//     [placeholder, optionList, baseOption, labelMap, autoSelectOption]\n//   );\n// };\n","import { pathsAreEqual, type Path } from '@react-querybuilder/core';\nimport { useMemo } from 'react';\n\nexport interface PathInfo {\n  path: Path;\n  disabled: boolean;\n}\n\n// Memoize the path info so every render doesn't generate a new array\nexport const usePathsMemo = ({\n  disabled,\n  path,\n  nestedArray,\n  disabledPaths,\n}: {\n  disabled: boolean;\n  path: Path;\n  nestedArray: unknown[];\n  disabledPaths: Path[];\n}): PathInfo[] => {\n  const nestedArrayLength = nestedArray.length;\n\n  return useMemo(() => {\n    const paths: PathInfo[] = [];\n    for (let i = 0; i < nestedArrayLength; i++) {\n      const thisPath = [...path, i];\n      paths[i] = {\n        path: thisPath,\n        disabled: disabled || disabledPaths.some(p => pathsAreEqual(thisPath, p)),\n      };\n    }\n    return paths;\n  }, [disabled, path, nestedArrayLength, disabledPaths]);\n};\n","import { preferAnyProp, preferProp } from '@react-querybuilder/core';\n\n/**\n * For given default, prop, and context values, return the first provided of prop,\n * context, and default, in that order.\n *\n * @group Hooks\n */\nexport const usePreferProp = (\n  def: boolean,\n  prop?: boolean,\n  context?: boolean,\n  doNotFinalize?: boolean\n): boolean => preferProp(def, prop, context, doNotFinalize);\n\n/**\n * For given default, prop, and context values, return the first provided of prop,\n * context, and default, in that order.\n *\n * @group Hooks\n */\n// oxlint-disable-next-line typescript/no-explicit-any\nexport const usePreferAnyProp = (def?: any, prop?: any, context?: any): any =>\n  preferAnyProp(def, prop, context);\n","import { messages } from '../messages';\n\nlet didWarnEnabledDndWithoutReactDnD = false;\n\n/**\n * Logs a warning if drag-and-drop is enabled but the required dependencies\n * (`react-dnd` and either `react-dnd-html5-backend` or `react-dnd-touch-backend`)\n * were not detected.\n *\n * @group Hooks\n */\nexport const useReactDndWarning = (enableDragAndDrop: boolean, dndRefs: boolean): void => {\n  if (\n    process.env.NODE_ENV !== 'production' &&\n    !didWarnEnabledDndWithoutReactDnD &&\n    enableDragAndDrop &&\n    !dndRefs\n  ) {\n    console.error(messages.errorEnabledDndWithoutReactDnD);\n    didWarnEnabledDndWithoutReactDnD = true;\n  }\n};\n","import type { MouseEvent } from 'react';\nimport { useCallback } from 'react';\n\ninterface RQBMouseEventHandler {\n  // oxlint-disable-next-line typescript/no-explicit-any\n  (event?: MouseEvent, context?: any): void;\n}\n\n/**\n * Wraps an event handler function in another function that calls\n * `event.preventDefault()` and `event.stopPropagation()` first. The\n * returned function accepts and forwards a second `context` argument.\n *\n * @group Hooks\n */\nexport const useStopEventPropagation = (method: RQBMouseEventHandler): RQBMouseEventHandler =>\n  useCallback(\n    (event, context) => {\n      event?.preventDefault();\n      event?.stopPropagation();\n      method(event, context);\n    },\n    [method]\n  );\n","import type {\n  ActionElementEventHandler,\n  FlexibleOptionList,\n  FullField,\n  FullOperator,\n  FullOption,\n  InputType,\n  MatchModeOptions,\n  Option,\n  OptionList,\n  RuleGroupType,\n  RuleType,\n  ValidationResult,\n  ValueChangeEventHandler,\n  ValueEditorType,\n  ValueSourceFullOptions,\n  ValueSources,\n} from '@react-querybuilder/core';\nimport {\n  clsx,\n  filterFieldsByComparator,\n  getOption,\n  getParentPath,\n  getValidationClassNames,\n  isFlexibleOptionArray,\n  isFlexibleOptionGroupArray,\n  isPojo,\n  isRuleGroup,\n  lc,\n  rootPath,\n  standardClassnames,\n  TestID,\n  toFullOptionList,\n} from '@react-querybuilder/core';\nimport type { MouseEvent } from 'react';\nimport * as React from 'react';\nimport { useCallback, useMemo } from 'react';\nimport type { UseFields } from '../hooks';\nimport {\n  useDeprecatedProps,\n  useFields,\n  useReactDndWarning,\n  useStopEventPropagation,\n} from '../hooks';\nimport type { RuleProps, ShiftActionsProps, TranslationsFull } from '../types';\nimport { useQueryBuilder } from './QueryBuilder.useQueryBuilder';\nimport type { UseRuleGroup } from './RuleGroup';\nimport { useRuleGroup } from './RuleGroup';\n\nconst defaultMatch = { mode: 'all' } as const;\n\nconst defaultSubproperties: FullOption[] = [{ name: '', value: '', label: '' }];\n\n/**\n * Default component to display {@link RuleType} objects. This is\n * actually a small wrapper around {@link RuleComponents}.\n *\n * @group Components\n */\nexport const Rule: React.MemoExoticComponent<(r: RuleProps) => React.JSX.Element> = React.memo(\n  function Rule(props: RuleProps): React.JSX.Element {\n    const r = useRule(props);\n\n    const cloneRule = useStopEventPropagation(r.cloneRule);\n    const toggleLockRule = useStopEventPropagation(r.toggleLockRule);\n    const toggleMuteRule = useStopEventPropagation(r.toggleMuteRule);\n    const removeRule = useStopEventPropagation(r.removeRule);\n    const shiftRuleUp = useStopEventPropagation(r.shiftRuleUp);\n    const shiftRuleDown = useStopEventPropagation(r.shiftRuleDown);\n\n    const actions = useMemo(\n      () => ({\n        cloneRule,\n        toggleLockRule,\n        toggleMuteRule,\n        removeRule,\n        shiftRuleUp,\n        shiftRuleDown,\n      }),\n      [cloneRule, removeRule, shiftRuleDown, shiftRuleUp, toggleLockRule, toggleMuteRule]\n    );\n\n    return (\n      <div\n        ref={r.dndRef}\n        data-testid={TestID.rule}\n        data-dragmonitorid={r.dragMonitorId}\n        data-dropmonitorid={r.dropMonitorId}\n        className={r.outerClassName}\n        data-rule-id={r.id}\n        data-level={r.path.length}\n        data-path={JSON.stringify(r.path)}>\n        {r.matchModes.length > 0 ? (\n          <RuleComponentsWithSubQuery {...r} {...actions} />\n        ) : (\n          <RuleComponents {...r} {...actions} />\n        )}\n      </div>\n    );\n  }\n);\n\ninterface RuleComponentsProps extends UseRule {\n  subQuery?: UseRuleGroup;\n  groupComponentsWrapper?: React.ComponentType<{\n    children: React.ReactNode;\n    className: string;\n  }>;\n}\n\n/**\n * Renders a `React.Fragment` containing an array of form controls for managing a {@link RuleType}.\n *\n * @group Components\n */\nexport const RuleComponents: React.MemoExoticComponent<\n  (r: RuleComponentsProps) => React.JSX.Element\n> = React.memo(function RuleComponents(r: RuleComponentsProps) {\n  const {\n    schema: {\n      controls: {\n        shiftActions: ShiftActionsControlElement,\n        dragHandle: DragHandleControlElement,\n        fieldSelector: FieldSelectorControlElement,\n        matchModeEditor: MatchModeEditorControlElement,\n        operatorSelector: OperatorSelectorControlElement,\n        valueSourceSelector: ValueSourceSelectorControlElement,\n        valueEditor: ValueEditorControlElement,\n        cloneRuleAction: CloneRuleActionControlElement,\n        lockRuleAction: LockRuleActionControlElement,\n        muteRuleAction: MuteRuleActionControlElement,\n        removeRuleAction: RemoveRuleActionControlElement,\n        ruleGroupBodyElements: RuleGroupBodyControlElements,\n        ruleGroupHeaderElements: RuleGroupHeaderControlElements,\n      },\n    },\n    groupComponentsWrapper: GroupComponentsWrapper = React.Fragment,\n  } = r;\n\n  const commonSubcomponentProps = useMemo(\n    () => ({\n      level: r.path.length,\n      path: r.path,\n      disabled: r.disabled,\n      context: r.context,\n      validation: r.validationResult,\n      schema: r.schema,\n      rule: r.rule,\n    }),\n    [r.path, r.disabled, r.context, r.validationResult, r.schema, r.rule]\n  );\n\n  const showFieldSelector = useMemo(\n    () =>\n      !(\n        r.schema.fields.length === 1 &&\n        isPojo(r.schema.fields[0]) &&\n        'value' in r.schema.fields[0] &&\n        r.schema.fields[0].value === ''\n      ),\n    [r.schema.fields]\n  );\n\n  const shiftTitles = useMemo(\n    (): ShiftActionsProps['titles'] =>\n      r.schema.showShiftActions\n        ? {\n            shiftUp: r.translations.shiftActionUp.title,\n            shiftDown: r.translations.shiftActionDown.title,\n          }\n        : undefined,\n    [r.schema.showShiftActions, r.translations]\n  );\n  const shiftLabels = useMemo(\n    (): ShiftActionsProps['labels'] =>\n      r.schema.showShiftActions\n        ? {\n            shiftUp: r.translations.shiftActionUp.label,\n            shiftDown: r.translations.shiftActionDown.label,\n          }\n        : undefined,\n    [r.schema.showShiftActions, r.translations]\n  );\n\n  return (\n    <React.Fragment>\n      {r.schema.showShiftActions && (\n        <ShiftActionsControlElement\n          key={TestID.shiftActions}\n          {...commonSubcomponentProps}\n          testID={TestID.shiftActions}\n          titles={shiftTitles}\n          labels={shiftLabels}\n          className={r.classNames.shiftActions}\n          ruleOrGroup={r.rule}\n          shiftUp={r.shiftRuleUp}\n          shiftDown={r.shiftRuleDown}\n          shiftUpDisabled={r.shiftUpDisabled}\n          shiftDownDisabled={r.shiftDownDisabled}\n        />\n      )}\n      {r.schema.enableDragAndDrop && (\n        <DragHandleControlElement\n          key={TestID.dragHandle}\n          {...commonSubcomponentProps}\n          testID={TestID.dragHandle}\n          ref={r.dragRef}\n          title={r.translations.dragHandle.title}\n          label={r.translations.dragHandle.label}\n          className={r.classNames.dragHandle}\n          ruleOrGroup={r.rule}\n        />\n      )}\n      {showFieldSelector && (\n        <FieldSelectorControlElement\n          key={TestID.fields}\n          {...commonSubcomponentProps}\n          testID={TestID.fields}\n          options={r.schema.fields}\n          title={r.translations.fields.title}\n          value={r.rule.field}\n          operator={r.rule.operator}\n          className={r.classNames.fields}\n          handleOnChange={r.onChangeField}\n        />\n      )}\n      {(r.schema.autoSelectField || r.rule.field !== r.translations.fields.placeholderName) &&\n        (r.subQuery ? (\n          <MatchModeEditorControlElement\n            key={TestID.matchModeEditor}\n            {...commonSubcomponentProps}\n            testID={TestID.matchModeEditor}\n            field={r.rule.field}\n            fieldData={r.fieldData}\n            title={r.translations.matchMode.title}\n            options={r.matchModes}\n            thresholdPlaceholder={r.translations.matchThreshold.placeholderName}\n            // TODO: Support `defaultMatchMode` at query or field level?\n            match={\n              r.rule.match ?? /* v8 ignore start -- @preserve */ defaultMatch\n            } /* v8 ignore stop -- @preserve */\n            className={r.classNames.matchMode}\n            classNames={r.classNames}\n            handleOnChange={r.onChangeMatchMode}\n          />\n        ) : (\n          <React.Fragment>\n            <OperatorSelectorControlElement\n              key={TestID.operators}\n              {...commonSubcomponentProps}\n              testID={TestID.operators}\n              field={r.rule.field}\n              fieldData={r.fieldData}\n              title={r.translations.operators.title}\n              options={r.operators}\n              value={r.rule.operator}\n              className={r.classNames.operators}\n              handleOnChange={r.onChangeOperator}\n            />\n            {(r.schema.autoSelectOperator ||\n              r.rule.operator !== r.translations.operators.placeholderName) &&\n              !r.hideValueControls && (\n                <React.Fragment>\n                  {!['null', 'notnull'].includes(lc(`${r.rule.operator}`)) &&\n                    r.valueSources.length > 1 && (\n                      <ValueSourceSelectorControlElement\n                        key={TestID.valueSourceSelector}\n                        {...commonSubcomponentProps}\n                        testID={TestID.valueSourceSelector}\n                        field={r.rule.field}\n                        fieldData={r.fieldData}\n                        title={r.translations.valueSourceSelector.title}\n                        options={r.valueSourceOptions}\n                        value={r.rule.valueSource ?? 'value'}\n                        className={r.classNames.valueSource}\n                        handleOnChange={r.onChangeValueSource}\n                      />\n                    )}\n                  <ValueEditorControlElement\n                    key={TestID.valueEditor}\n                    {...commonSubcomponentProps}\n                    testID={TestID.valueEditor}\n                    field={r.rule.field}\n                    fieldData={r.fieldData}\n                    title={r.translations.value.title}\n                    operator={r.rule.operator}\n                    value={r.rule.value}\n                    valueSource={r.rule.valueSource ?? 'value'}\n                    type={r.valueEditorType}\n                    inputType={r.inputType}\n                    values={r.values}\n                    listsAsArrays={r.schema.listsAsArrays}\n                    parseNumbers={r.schema.parseNumbers}\n                    separator={r.valueEditorSeparator}\n                    className={r.classNames.value}\n                    handleOnChange={r.onChangeValue}\n                  />\n                </React.Fragment>\n              )}\n          </React.Fragment>\n        ))}\n      {r.subQuery && (\n        <GroupComponentsWrapper className={r.subQuery.classNames.header}>\n          <RuleGroupHeaderControlElements {...r.subQuery} />\n        </GroupComponentsWrapper>\n      )}\n      {r.schema.showCloneButtons && (\n        <CloneRuleActionControlElement\n          key={TestID.cloneRule}\n          {...commonSubcomponentProps}\n          testID={TestID.cloneRule}\n          label={r.translations.cloneRule.label}\n          title={r.translations.cloneRule.title}\n          className={r.classNames.cloneRule}\n          ruleOrGroup={r.rule}\n          handleOnClick={r.cloneRule}\n        />\n      )}\n      {r.schema.showLockButtons && (\n        <LockRuleActionControlElement\n          key={TestID.lockRule}\n          {...commonSubcomponentProps}\n          testID={TestID.lockRule}\n          label={r.translations.lockRule.label}\n          title={r.translations.lockRule.title}\n          className={r.classNames.lockRule}\n          ruleOrGroup={r.rule}\n          handleOnClick={r.toggleLockRule}\n          disabledTranslation={r.parentDisabled ? undefined : r.translations.lockRuleDisabled}\n        />\n      )}\n      {r.schema.showMuteButtons && (\n        <MuteRuleActionControlElement\n          key={TestID.muteRule}\n          {...commonSubcomponentProps}\n          testID={TestID.muteRule}\n          label={r.rule.muted ? r.translations.unmuteRule.label : r.translations.muteRule.label}\n          title={r.rule.muted ? r.translations.unmuteRule.title : r.translations.muteRule.title}\n          className={r.classNames.muteRule}\n          ruleOrGroup={r.rule}\n          handleOnClick={r.toggleMuteRule}\n        />\n      )}\n      <RemoveRuleActionControlElement\n        key={TestID.removeRule}\n        {...commonSubcomponentProps}\n        testID={TestID.removeRule}\n        label={r.translations.removeRule.label}\n        title={r.translations.removeRule.title}\n        className={r.classNames.removeRule}\n        ruleOrGroup={r.rule}\n        handleOnClick={r.removeRule}\n      />\n      {r.subQuery && (\n        <GroupComponentsWrapper className={r.subQuery.classNames.body}>\n          <RuleGroupBodyControlElements {...r.subQuery} />\n        </GroupComponentsWrapper>\n      )}\n    </React.Fragment>\n  );\n});\n\n/**\n * @group Components\n */\nexport const RuleWithSubQueryGroupComponentsWrapper = (\n  props: React.PropsWithChildren\n): React.JSX.Element => <div {...props} />;\n\n/**\n * @group Components\n */\nexport const RuleComponentsWithSubQuery: React.MemoExoticComponent<\n  (r: RuleComponentsProps) => React.JSX.Element\n> = React.memo(function RuleComponentsWithSubQuery(r: RuleComponentsProps) {\n  const initialQuery = useMemo(() => r.schema.createRuleGroup() as RuleGroupType, [r.schema]);\n  const subQB = useQueryBuilder({\n    ...r.subQueryBuilderProps,\n    enableDragAndDrop: false,\n    disabled: r.disabled,\n    fields: r.subproperties.fields,\n    // Update the value on first render if the value is not a valid rule group\n    enableMountQueryChange: !isRuleGroup(r.rule.value) || !r.rule.value.id,\n    query: isRuleGroup(r.rule.value) ? (r.rule.value as RuleGroupType) : initialQuery,\n    onQueryChange: r.onChangeValue,\n  });\n  const subQuery = useRuleGroup({\n    ...subQB,\n    ruleGroup: subQB.rootGroup,\n    path: rootPath,\n    disabled: r.disabled,\n    parentDisabled: subQB.queryDisabled,\n    id: subQB.rootGroup.id,\n    shiftUpDisabled: true,\n    shiftDownDisabled: true,\n  });\n  const addRule = useStopEventPropagation(subQuery.addRule);\n  const addGroup = useStopEventPropagation(subQuery.addGroup);\n  const cloneGroup = useStopEventPropagation(subQuery.cloneGroup);\n  const toggleLockGroup = useStopEventPropagation(subQuery.toggleLockGroup);\n  const removeGroup = useStopEventPropagation(subQuery.removeGroup);\n  const shiftGroupUp = useStopEventPropagation(subQuery.shiftGroupUp);\n  const shiftGroupDown = useStopEventPropagation(subQuery.shiftGroupDown);\n  const memoizedSubQuery = useMemo(\n    () => ({\n      ...subQuery,\n      addGroup,\n      addRule,\n      cloneGroup,\n      removeGroup,\n      shiftGroupDown,\n      shiftGroupUp,\n      toggleLockGroup,\n    }),\n    [\n      addGroup,\n      addRule,\n      cloneGroup,\n      removeGroup,\n      shiftGroupDown,\n      shiftGroupUp,\n      subQuery,\n      toggleLockGroup,\n    ]\n  );\n\n  return (\n    <RuleComponents\n      {...r}\n      groupComponentsWrapper={r.groupComponentsWrapper ?? RuleWithSubQueryGroupComponentsWrapper}\n      subQuery={memoizedSubQuery}\n    />\n  );\n});\n\n/* oxlint-disable typescript/no-explicit-any */\nexport interface UseRule extends RuleProps {\n  classNames: {\n    shiftActions: string;\n    dragHandle: string;\n    fields: string;\n    matchMode: string;\n    matchThreshold: string;\n    operators: string;\n    valueSource: string;\n    value: string;\n    cloneRule: string;\n    lockRule: string;\n    muteRule: string;\n    removeRule: string;\n  };\n  muted?: boolean;\n  parentMuted?: boolean;\n  cloneRule: ActionElementEventHandler;\n  fieldData: FullField<string, string, string, FullOption, FullOption>;\n  generateOnChangeHandler: (\n    prop: Exclude<keyof RuleType, 'id' | 'path'>\n  ) => ValueChangeEventHandler;\n  onChangeValueSource: ValueChangeEventHandler;\n  onChangeField: ValueChangeEventHandler;\n  onChangeMatchMode: ValueChangeEventHandler;\n  onChangeOperator: ValueChangeEventHandler;\n  onChangeValue: ValueChangeEventHandler;\n  hideValueControls: boolean;\n  inputType: InputType | null;\n  matchModes: MatchModeOptions;\n  operators: OptionList<FullOperator>;\n  outerClassName: string;\n  removeRule: ActionElementEventHandler;\n  shiftRuleUp: (event?: MouseEvent, _context?: any) => void;\n  shiftRuleDown: (event?: MouseEvent, _context?: any) => void;\n  subproperties: UseFields<FullField>;\n  subQueryBuilderProps: Record<string, unknown>;\n  toggleLockRule: ActionElementEventHandler;\n  toggleMuteRule: ActionElementEventHandler;\n  validationResult: boolean | ValidationResult;\n  valueEditorSeparator: React.ReactNode;\n  valueEditorType: ValueEditorType;\n  values: FlexibleOptionList<Option>;\n  valueSourceOptions: ValueSourceFullOptions;\n  valueSources: ValueSources;\n}\n/* oxlint-enable typescript/no-explicit-any */\n\n/**\n * Prepares all values and methods used by the {@link Rule} component.\n *\n * @group Hooks\n */\nexport const useRule = (props: RuleProps): UseRule => {\n  const {\n    id,\n    path,\n    rule: ruleProp,\n    schema: {\n      classNames: classNamesProp,\n      fields,\n      fieldMap,\n      getInputType,\n      getMatchModes,\n      getOperators,\n      getSubQueryBuilderProps,\n      getValueEditorType,\n      getValueEditorSeparator,\n      getValueSources,\n      getValues,\n      validationMap,\n      enableDragAndDrop,\n      getRuleClassname,\n      suppressStandardClassnames,\n    },\n    actions: { moveRule, onPropChange, onRuleRemove },\n    disabled: disabledProp,\n    parentDisabled,\n    parentMuted,\n    shiftUpDisabled,\n    shiftDownDisabled,\n    field: fieldProp,\n    operator: operatorProp,\n    value: valueProp,\n    valueSource: valueSourceProp,\n    // Drag-and-drop\n    dropEffect = 'move',\n    groupItems = false,\n    dragMonitorId = '',\n    dropMonitorId = '',\n    dndRef = null,\n    dragRef = null,\n    isDragging = false,\n    isOver = false,\n    dropNotAllowed = false,\n  } = props;\n\n  useDeprecatedProps('rule', !ruleProp);\n\n  useReactDndWarning(enableDragAndDrop, !!(dragMonitorId || dropMonitorId || dndRef || dragRef));\n\n  const disabled = !!parentDisabled || !!disabledProp;\n  const muted = !!parentMuted || !!ruleProp?.muted;\n\n  const rule = useMemo(\n    () =>\n      ruleProp ?? {\n        id,\n        field: fieldProp ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */,\n        operator:\n          operatorProp ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */,\n        value: valueProp,\n        valueSource: valueSourceProp,\n      },\n    [fieldProp, id, operatorProp, ruleProp, valueProp, valueSourceProp]\n  );\n\n  const classNames = useMemo(\n    () => ({\n      shiftActions: clsx(\n        suppressStandardClassnames || standardClassnames.shiftActions,\n        classNamesProp.shiftActions\n      ),\n      dragHandle: clsx(\n        suppressStandardClassnames || standardClassnames.dragHandle,\n        classNamesProp.dragHandle\n      ),\n      fields: clsx(\n        suppressStandardClassnames || standardClassnames.fields,\n        classNamesProp.valueSelector,\n        classNamesProp.fields\n      ),\n      matchMode: clsx(\n        suppressStandardClassnames || standardClassnames.matchMode,\n        classNamesProp.valueSelector,\n        classNamesProp.matchMode\n      ),\n      matchThreshold: clsx(\n        suppressStandardClassnames || standardClassnames.matchThreshold,\n        classNamesProp.valueSelector,\n        classNamesProp.matchThreshold\n      ),\n      operators: clsx(\n        suppressStandardClassnames || standardClassnames.operators,\n        classNamesProp.valueSelector,\n        classNamesProp.operators\n      ),\n      valueSource: clsx(\n        suppressStandardClassnames || standardClassnames.valueSource,\n        classNamesProp.valueSelector,\n        classNamesProp.valueSource\n      ),\n      value: clsx(suppressStandardClassnames || standardClassnames.value, classNamesProp.value),\n      cloneRule: clsx(\n        suppressStandardClassnames || standardClassnames.cloneRule,\n        classNamesProp.actionElement,\n        classNamesProp.cloneRule\n      ),\n      lockRule: clsx(\n        suppressStandardClassnames || standardClassnames.lockRule,\n        classNamesProp.actionElement,\n        classNamesProp.lockRule\n      ),\n      muteRule: clsx(\n        suppressStandardClassnames || standardClassnames.muteRule,\n        classNamesProp.actionElement,\n        classNamesProp.muteRule\n      ),\n      removeRule: clsx(\n        suppressStandardClassnames || standardClassnames.removeRule,\n        classNamesProp.actionElement,\n        classNamesProp.removeRule\n      ),\n      valueListItem: clsx(\n        suppressStandardClassnames || standardClassnames.valueListItem,\n        classNamesProp.valueListItem\n      ),\n    }),\n    [\n      classNamesProp.shiftActions,\n      classNamesProp.dragHandle,\n      classNamesProp.valueSelector,\n      classNamesProp.fields,\n      classNamesProp.matchMode,\n      classNamesProp.matchThreshold,\n      classNamesProp.operators,\n      classNamesProp.valueSource,\n      classNamesProp.value,\n      classNamesProp.actionElement,\n      classNamesProp.cloneRule,\n      classNamesProp.lockRule,\n      classNamesProp.muteRule,\n      classNamesProp.removeRule,\n      classNamesProp.valueListItem,\n      suppressStandardClassnames,\n    ]\n  );\n\n  const getChangeHandler = useCallback(\n    // oxlint-disable-next-line typescript/no-explicit-any\n    (prop: Exclude<keyof RuleType, 'id' | 'path'>) => (value: any, context?: any) => {\n      if (!disabled) {\n        onPropChange(prop, value, path, context);\n      }\n    },\n    [disabled, onPropChange, path]\n  );\n\n  const onChangeField = useMemo(() => getChangeHandler('field'), [getChangeHandler]);\n  const onChangeOperator = useMemo(() => getChangeHandler('operator'), [getChangeHandler]);\n  const onChangeMatchMode = useMemo(() => getChangeHandler('match'), [getChangeHandler]);\n  const onChangeValueSource = useMemo(() => getChangeHandler('valueSource'), [getChangeHandler]);\n  const onChangeValue = useMemo(() => getChangeHandler('value'), [getChangeHandler]);\n\n  const cloneRule: ActionElementEventHandler = useCallback(\n    (_event, context) => {\n      if (!disabled) {\n        const newPath = [...getParentPath(path), path.at(-1)! + 1];\n        moveRule(path, newPath, true, context);\n      }\n    },\n    [disabled, moveRule, path]\n  );\n\n  const toggleLockRule: ActionElementEventHandler = useCallback(\n    (_event, context) => onPropChange('disabled', !disabled, path, context),\n    [disabled, onPropChange, path]\n  );\n\n  const toggleMuteRule: ActionElementEventHandler = useCallback(\n    (_event, context) => onPropChange('muted', !rule.muted, path, context),\n    [rule.muted, onPropChange, path]\n  );\n\n  const removeRule: ActionElementEventHandler = useCallback(\n    (_event, _context) => {\n      if (!disabled) {\n        onRuleRemove(path);\n      }\n    },\n    [disabled, onRuleRemove, path]\n  );\n\n  const shiftRuleUp: ActionElementEventHandler = useCallback(\n    (event, context) => {\n      if (!disabled && !shiftUpDisabled) {\n        moveRule(path, 'up', (event as MouseEvent)?.altKey, context);\n      }\n    },\n    [disabled, moveRule, path, shiftUpDisabled]\n  );\n\n  const shiftRuleDown: ActionElementEventHandler = useCallback(\n    (event, context) => {\n      if (!disabled && !shiftDownDisabled) {\n        moveRule(path, 'down', (event as MouseEvent)?.altKey, context);\n      }\n    },\n    [disabled, moveRule, path, shiftDownDisabled]\n  );\n\n  const fieldData: FullField = useMemo(\n    () => fieldMap?.[rule.field] ?? { name: rule.field, value: rule.field, label: rule.field },\n    [fieldMap, rule.field]\n  );\n  const inputType = useMemo(\n    () => fieldData.inputType ?? getInputType(rule.field, rule.operator, { fieldData }),\n    [fieldData, getInputType, rule.field, rule.operator]\n  );\n  const matchModes = useMemo(\n    () => getMatchModes(rule.field, { fieldData }),\n    [fieldData, getMatchModes, rule.field]\n  );\n  const operators = useMemo(\n    () => getOperators(rule.field, { fieldData }),\n    [fieldData, getOperators, rule.field]\n  );\n  const operatorObject = useMemo(\n    () => getOption(operators, rule.operator),\n    [operators, rule.operator]\n  );\n  const arity = operatorObject?.arity;\n  const hideValueControls =\n    (typeof arity === 'string' && arity === 'unary') || (typeof arity === 'number' && arity < 2);\n  const valueSourceOptions = useMemo(() => {\n    const configuredVSs = getValueSources(rule.field, rule.operator, { fieldData });\n    if (rule.valueSource && !getOption(configuredVSs, rule.valueSource)) {\n      return [\n        ...configuredVSs,\n        { name: rule.valueSource, value: rule.valueSource, label: rule.valueSource },\n      ] as ValueSourceFullOptions;\n    }\n    return configuredVSs;\n  }, [fieldData, getValueSources, rule.field, rule.operator, rule.valueSource]);\n  const valueSources = useMemo(\n    () => valueSourceOptions.map(({ value }) => value) as ValueSources,\n    [valueSourceOptions]\n  );\n  const valueEditorType = useMemo(\n    () =>\n      rule.valueSource === 'field'\n        ? 'select'\n        : getValueEditorType(rule.field, rule.operator, { fieldData }),\n    [fieldData, getValueEditorType, rule.field, rule.operator, rule.valueSource]\n  );\n  const valueEditorSeparator = useMemo(\n    () => getValueEditorSeparator(rule.field, rule.operator, { fieldData }),\n    [fieldData, getValueEditorSeparator, rule.field, rule.operator]\n  );\n  const values = useMemo(() => {\n    const v =\n      rule.valueSource === 'field'\n        ? filterFieldsByComparator(fieldData, fields, rule.operator)\n        : getValues(rule.field, rule.operator, { fieldData });\n    return isFlexibleOptionArray(v) || isFlexibleOptionGroupArray(v) ? toFullOptionList(v) : v;\n  }, [fieldData, fields, getValues, rule.field, rule.operator, rule.valueSource]);\n  const subQueryBuilderProps = useMemo(\n    () => getSubQueryBuilderProps(rule.field, { fieldData }) as Record<string, unknown>,\n    [fieldData, getSubQueryBuilderProps, rule.field]\n  );\n  const subproperties = useFields({\n    translations: props.translations as TranslationsFull,\n    fields: fieldData.subproperties ?? subQueryBuilderProps.fields ?? defaultSubproperties,\n    autoSelectField: props.schema.autoSelectField || !!fieldData.subproperties,\n  });\n\n  const validationResult = useMemo(\n    () =>\n      validationMap[\n        id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n      ] ?? (typeof fieldData.validator === 'function' ? fieldData.validator(rule) : null),\n    [fieldData, id, rule, validationMap]\n  );\n  const validationClassName = useMemo(\n    () => getValidationClassNames(validationResult),\n    [validationResult]\n  );\n  const fieldBasedClassName = fieldData?.className ?? '';\n  const operatorBasedClassName = operatorObject?.className ?? '';\n  const hasSubQuery = matchModes.length > 0;\n\n  const outerClassName = useMemo(\n    () =>\n      clsx(\n        getRuleClassname(rule, { fieldData }),\n        fieldBasedClassName,\n        operatorBasedClassName,\n        suppressStandardClassnames || standardClassnames.rule,\n        classNamesProp.rule,\n        // custom conditional classes\n        disabled && classNamesProp.disabled,\n        muted && classNamesProp.muted,\n        isDragging && classNamesProp.dndDragging,\n        isOver && classNamesProp.dndOver,\n        isOver && dropEffect === 'copy' && classNamesProp.dndCopy,\n        isOver && groupItems && classNamesProp.dndGroup,\n        dropNotAllowed && classNamesProp.dndDropNotAllowed,\n        hasSubQuery && classNamesProp.hasSubQuery,\n        // standard conditional classes\n        suppressStandardClassnames || {\n          [standardClassnames.disabled]: disabled,\n          [standardClassnames.muted]: muted,\n          [standardClassnames.dndDragging]: isDragging,\n          [standardClassnames.dndOver]: isOver,\n          [standardClassnames.dndCopy]: isOver && dropEffect === 'copy',\n          [standardClassnames.dndGroup]: isOver && groupItems,\n          [standardClassnames.dndDropNotAllowed]: dropNotAllowed,\n          [standardClassnames.hasSubQuery]: hasSubQuery,\n        },\n        validationClassName\n      ),\n    [\n      classNamesProp.disabled,\n      classNamesProp.muted,\n      classNamesProp.dndCopy,\n      classNamesProp.dndDragging,\n      classNamesProp.dndGroup,\n      classNamesProp.dndOver,\n      classNamesProp.dndDropNotAllowed,\n      classNamesProp.hasSubQuery,\n      classNamesProp.rule,\n      disabled,\n      dropEffect,\n      dropNotAllowed,\n      muted,\n      fieldBasedClassName,\n      fieldData,\n      getRuleClassname,\n      groupItems,\n      hasSubQuery,\n      isDragging,\n      isOver,\n      operatorBasedClassName,\n      rule,\n      suppressStandardClassnames,\n      validationClassName,\n    ]\n  );\n\n  return {\n    ...props,\n    classNames,\n    cloneRule,\n    disabled,\n    dndRef,\n    dragMonitorId,\n    dragRef,\n    dropMonitorId,\n    fieldData,\n    generateOnChangeHandler: getChangeHandler,\n    onChangeField,\n    onChangeMatchMode,\n    onChangeOperator,\n    onChangeValueSource,\n    onChangeValue,\n    hideValueControls,\n    inputType,\n    matchModes,\n    muted,\n    operators,\n    outerClassName,\n    removeRule,\n    rule,\n    shiftRuleUp,\n    shiftRuleDown,\n    subproperties,\n    subQueryBuilderProps,\n    toggleLockRule,\n    toggleMuteRule,\n    validationResult,\n    valueEditorSeparator,\n    valueEditorType,\n    values,\n    valueSourceOptions,\n    valueSources,\n  };\n};\n","import type { FullField } from '@react-querybuilder/core';\nimport { ActionElement } from './components/ActionElement';\nimport { DragHandle } from './components/DragHandle';\nimport { InlineCombinator } from './components/InlineCombinator';\nimport { MatchModeEditor } from './components/MatchModeEditor';\nimport { NotToggle } from './components/NotToggle';\nimport { Rule } from './components/Rule';\nimport {\n  RuleGroup,\n  RuleGroupBodyComponents,\n  RuleGroupHeaderComponents,\n} from './components/RuleGroup';\nimport { ShiftActions } from './components/ShiftActions';\nimport { ValueEditor } from './components/ValueEditor';\nimport { ValueSelector } from './components/ValueSelector';\nimport type { Controls } from './types';\n\n/**\n * Default components used by {@link QueryBuilder}.\n *\n * @group Defaults\n */\nexport const defaultControlElements: {\n  actionElement: typeof ActionElement;\n  addGroupAction: typeof ActionElement;\n  addRuleAction: typeof ActionElement;\n  cloneGroupAction: typeof ActionElement;\n  cloneRuleAction: typeof ActionElement;\n  combinatorSelector: typeof ValueSelector;\n  dragHandle: typeof DragHandle;\n  fieldSelector: typeof ValueSelector;\n  inlineCombinator: typeof InlineCombinator;\n  lockGroupAction: typeof ActionElement;\n  lockRuleAction: typeof ActionElement;\n  matchModeEditor: typeof MatchModeEditor;\n  muteGroupAction: typeof ActionElement;\n  muteRuleAction: typeof ActionElement;\n  notToggle: typeof NotToggle;\n  operatorSelector: typeof ValueSelector;\n  removeGroupAction: typeof ActionElement;\n  removeRuleAction: typeof ActionElement;\n  rule: typeof Rule;\n  ruleGroup: typeof RuleGroup;\n  ruleGroupBodyElements: typeof RuleGroupBodyComponents;\n  ruleGroupHeaderElements: typeof RuleGroupHeaderComponents;\n  shiftActions: typeof ShiftActions;\n  valueEditor: typeof ValueEditor;\n  valueSelector: typeof ValueSelector;\n  valueSourceSelector: typeof ValueSelector;\n} = {\n  actionElement: ActionElement,\n  addGroupAction: ActionElement,\n  addRuleAction: ActionElement,\n  cloneGroupAction: ActionElement,\n  cloneRuleAction: ActionElement,\n  combinatorSelector: ValueSelector,\n  dragHandle: DragHandle,\n  fieldSelector: ValueSelector,\n  inlineCombinator: InlineCombinator,\n  lockGroupAction: ActionElement,\n  lockRuleAction: ActionElement,\n  matchModeEditor: MatchModeEditor,\n  muteGroupAction: ActionElement,\n  muteRuleAction: ActionElement,\n  notToggle: NotToggle,\n  operatorSelector: ValueSelector,\n  removeGroupAction: ActionElement,\n  removeRuleAction: ActionElement,\n  rule: Rule,\n  ruleGroup: RuleGroup,\n  ruleGroupBodyElements: RuleGroupBodyComponents,\n  ruleGroupHeaderElements: RuleGroupHeaderComponents,\n  shiftActions: ShiftActions,\n  valueEditor: ValueEditor,\n  valueSelector: ValueSelector,\n  valueSourceSelector: ValueSelector,\n} satisfies Controls<FullField, string>;\n"],"mappings":"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AkB,QAClB,EAAkB,aAClB,EAAkB,MAClB,EACA,GACA,CACF,CACF,EAUM,GAA0B,EAC7B,GAAiB,GAAgB,GAAM,EAAsB,EAC9D,CAAC,GAAiB,EAAsB,CAC1C,EAIM,GAAS,OACiC,CAC5C,sBACA,kCACA,mBACA,sBACA,mBACA,WAAY,EACZ,cACA,YACA,cACA,gBAAiB,GACjB,iBACA,qBACU,YACV,SACA,gBACA,YACA,aAAc,EACd,aAAc,GACd,cAAe,EACf,mBACA,wBACA,wBAAyB,GACzB,0BACA,mBAAoB,GACpB,UAAW,EACX,gBAAiB,GACjB,0BACA,iBACA,aACA,eACA,OACA,oBACA,+BACA,mBACA,mBACA,iBACA,oBACA,8BACA,gBACF,GACA,CACE,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,EACA,EACA,GACA,EACA,GACA,EACA,EACA,GACA,EACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACF,CACF,EAgBA,MAAO,CACL,QAfc,OACO,CACnB,YACA,cACA,cAAe,GACf,gBACA,aACA,aAAc,GACd,YACF,GACA,CAAC,GAAW,GAAU,GAAY,GAAc,GAAW,EAAmB,CAKxE,EACN,YACA,qBACA,gBACA,cACA,UACA,gBACA,oBACA,kBACA,yBACA,uBACF,CACF,CC5pBA,MAAM,IAAuB,EAAa,EAAa,IAA4B,CACjF,IAAM,EAAc,EAAe,CAAI,EAEvC,GAAI,EAAE,WAAa,WAAa,EAAE,WAAa,aAAc,CAC3D,IAAM,EAAe,CAAC,EAAa,CAAW,EAC9C,OAAO,EACH,EACA,GACE,EAAa,IACX,GAAK,GAAwC,EAC/C,EACA,GACF,CACN,CAEA,OAAO,CACT,EAsDa,GAMX,GACsC,CAKtC,GAAM,CAAC,GAAQ,GAAS,CAAU,EAE5B,CACJ,OAAQ,EACR,YACA,UAAW,EACX,eACA,YAAa,EACb,iBACA,aAAc,GACd,uBAAwB,GAA6B,GACrD,kBAAmB,EACnB,gBAAiB,GACjB,kBACA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"}