UNPKG

@react-querybuilder/material

Version:

Custom MUI (Material Design) components for react-querybuilder

1 lines 36.3 kB
{"version":3,"file":"react-querybuilder_material.production.mjs","names":[],"sources":["../src/RQBMaterialContext.ts","../src/MaterialActionElement.tsx","../src/MaterialDragHandle.tsx","../src/MaterialNotToggle.tsx","../src/MaterialShiftActions.tsx","../src/MaterialValueEditor.tsx","../src/utils.tsx","../src/MaterialValueSelector.tsx","../src/translations.tsx","../src/useMuiComponents.ts","../src/index.tsx"],"sourcesContent":["import type { Context } from 'react';\nimport { createContext } from 'react';\nimport type { RQBMaterialComponents } from './types';\n\nexport interface RQBMaterialContextValue extends RQBMaterialComponents {\n showInputLabels?: boolean;\n}\n\n/**\n * @group Components\n */\nexport const RQBMaterialContext: Context<RQBMaterialContextValue | null> =\n createContext<RQBMaterialContextValue | null>(null);\n","import type { Button } from '@mui/material';\nimport type { ComponentPropsWithoutRef, ComponentType } from 'react';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport type { ActionProps } from 'react-querybuilder';\nimport { ActionElement } from 'react-querybuilder';\nimport { RQBMaterialContext } from './RQBMaterialContext';\nimport type { MuiAugmentation } from './types';\n\n/**\n * @group Props\n */\nexport interface MaterialActionProps\n extends ActionProps, ComponentPropsWithoutRef<typeof Button>, MuiAugmentation {}\n\n/**\n * @group Components\n */\nexport const MaterialActionElement = ({\n className,\n handleOnClick,\n label,\n title,\n disabled,\n disabledTranslation,\n testID,\n path,\n level,\n rules,\n context,\n validation,\n ruleOrGroup,\n schema,\n muiComponents: muiComponentsProp,\n ...otherProps\n}: MaterialActionProps): React.JSX.Element => {\n const muiComponents = useContext(RQBMaterialContext) ?? muiComponentsProp;\n const key = muiComponents ? 'mui' : 'no-mui';\n if (!muiComponents) {\n const AE = ActionElement as ComponentType<ActionProps>;\n return (\n <AE\n key={key}\n className={className}\n handleOnClick={handleOnClick}\n label={label}\n title={title}\n disabled={disabled}\n disabledTranslation={disabledTranslation}\n testID={testID}\n path={path}\n level={level}\n rules={rules}\n context={context}\n validation={validation}\n ruleOrGroup={ruleOrGroup}\n schema={schema}\n />\n );\n }\n\n const { Button } = muiComponents;\n\n return (\n <Button\n key={key}\n variant=\"contained\"\n color=\"secondary\"\n className={className}\n title={disabledTranslation && disabled ? disabledTranslation.title : title}\n size=\"small\"\n disabled={disabled && !disabledTranslation}\n onClick={e => handleOnClick(e)}\n {...otherProps}>\n {disabledTranslation && disabled ? disabledTranslation.label : label}\n </Button>\n );\n};\n","import type DragIndicator from '@mui/icons-material/DragIndicator';\nimport type { ComponentPropsWithRef } from 'react';\nimport * as React from 'react';\nimport { forwardRef, useContext } from 'react';\nimport type { DragHandleProps } from 'react-querybuilder';\nimport { DragHandle } from 'react-querybuilder';\nimport { RQBMaterialContext } from './RQBMaterialContext';\nimport type { MuiAugmentation } from './types';\n\n/**\n * @group Props\n */\nexport interface MaterialDragHandleProps\n extends\n DragHandleProps,\n Omit<ComponentPropsWithRef<typeof DragIndicator>, 'path'>,\n MuiAugmentation {}\n\n/**\n * @group Components\n */\nexport const MaterialDragHandle: React.ForwardRefExoticComponent<\n Omit<MaterialDragHandleProps, 'ref'> & React.RefAttributes<HTMLSpanElement>\n> = forwardRef<HTMLSpanElement, MaterialDragHandleProps>(\n (\n {\n className,\n title,\n path,\n level,\n testID,\n label,\n disabled,\n context,\n validation,\n schema,\n ruleOrGroup,\n muiComponents: muiComponentsProp,\n ...otherProps\n },\n dragRef\n ) => {\n const muiComponents = useContext(RQBMaterialContext) ?? muiComponentsProp;\n const key = muiComponents ? 'mui' : 'no-mui';\n if (!muiComponents) {\n return (\n <DragHandle\n key={key}\n path={path}\n level={level}\n className={className}\n title={title}\n testID={testID}\n label={label}\n disabled={disabled}\n context={context}\n validation={validation}\n schema={schema}\n ruleOrGroup={ruleOrGroup}\n />\n );\n }\n\n const { DragIndicator } = muiComponents;\n\n return (\n <span key={key} ref={dragRef} className={className} title={title}>\n <DragIndicator {...otherProps} />\n </span>\n );\n }\n);\n","import type { Switch } from '@mui/material';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport * as React from 'react';\nimport { useContext, useMemo } from 'react';\nimport type { NotToggleProps } from 'react-querybuilder';\nimport { NotToggle } from 'react-querybuilder';\nimport { RQBMaterialContext } from './RQBMaterialContext';\nimport type { MuiAugmentation, RQBMaterialComponents } from './types';\n\n/**\n * @group Props\n */\nexport type MaterialNotToggleProps = NotToggleProps &\n ComponentPropsWithoutRef<typeof Switch> &\n MuiAugmentation;\n\ntype MaterialNotToggleComponents = Pick<RQBMaterialComponents, 'FormControlLabel' | 'Switch'>;\n\n/**\n * @group Components\n */\nexport const MaterialNotToggle = ({\n className,\n handleOnChange,\n label,\n checked,\n title,\n disabled,\n level,\n path,\n context,\n validation,\n testID,\n schema,\n ruleGroup,\n muiComponents: muiComponentsProp,\n ...otherProps\n}: MaterialNotToggleProps): React.JSX.Element => {\n const muiComponents = useContext(RQBMaterialContext) ?? muiComponentsProp;\n const { FormControlLabel, Switch } = (muiComponents ?? {}) as MaterialNotToggleComponents;\n const switchControl = useMemo(\n () =>\n Switch && (\n <Switch\n checked={!!checked}\n onChange={e => handleOnChange(e.target.checked)}\n {...otherProps}\n />\n ),\n [checked, handleOnChange, otherProps, Switch]\n );\n\n const key = muiComponents ? 'mui' : 'no-mui';\n if (!muiComponents) {\n return (\n <NotToggle\n key={key}\n className={className}\n handleOnChange={handleOnChange}\n label={label}\n checked={checked}\n title={title}\n disabled={disabled}\n path={path}\n level={level}\n context={context}\n validation={validation}\n testID={testID}\n schema={schema}\n ruleGroup={ruleGroup}\n />\n );\n }\n\n return (\n <FormControlLabel\n key={key}\n className={className}\n title={title}\n disabled={disabled}\n control={switchControl}\n label={label ?? /* v8 ignore start -- @preserve */ ''} /* v8 ignore stop -- @preserve */\n />\n );\n};\n","import type { Button } from '@mui/material';\nimport * as React from 'react';\nimport type { ShiftActionsProps } from 'react-querybuilder';\nimport { ShiftActions } from 'react-querybuilder';\nimport { RQBMaterialContext } from './RQBMaterialContext';\nimport type { MuiAugmentation } from './types';\n\n/**\n * @group Props\n */\nexport interface MaterialShiftActionsProps\n extends ShiftActionsProps, React.ComponentPropsWithoutRef<typeof Button>, MuiAugmentation {}\n\n/**\n * @group Components\n */\nexport const MaterialShiftActions = ({\n path,\n shiftUp,\n shiftDown,\n shiftUpDisabled,\n shiftDownDisabled,\n disabled,\n className,\n labels,\n titles,\n testID,\n muiComponents: muiComponentsProp,\n ...otherProps\n}: MaterialShiftActionsProps): React.JSX.Element => {\n const muiComponents = React.useContext(RQBMaterialContext) ?? muiComponentsProp;\n const key = muiComponents ? 'mui' : 'no-mui';\n if (!muiComponents) {\n return (\n <ShiftActions\n key={key}\n path={path}\n disabled={disabled}\n className={className}\n labels={labels}\n titles={titles}\n testID={testID}\n shiftUp={shiftUp}\n shiftDown={shiftDown}\n shiftUpDisabled={shiftUpDisabled}\n shiftDownDisabled={shiftDownDisabled}\n {...otherProps}\n />\n );\n }\n\n const { Button } = muiComponents;\n\n return (\n <div key={key} data-testid={testID} className={className}>\n <Button\n sx={{ boxShadow: 'none' }}\n variant=\"contained\"\n color=\"secondary\"\n className={className}\n title={titles?.shiftUp}\n size=\"small\"\n disabled={disabled || shiftUpDisabled}\n onClick={shiftUp}>\n {labels?.shiftUp}\n </Button>\n <Button\n sx={{ boxShadow: 'none' }}\n variant=\"contained\"\n color=\"secondary\"\n className={className}\n title={titles?.shiftDown}\n size=\"small\"\n disabled={disabled || shiftDownDisabled}\n onClick={shiftDown}>\n {labels?.shiftDown}\n </Button>\n </div>\n );\n};\n","import * as React from 'react';\nimport { useContext, useMemo } from 'react';\nimport type { ValueEditorProps } from 'react-querybuilder';\nimport { getFirstOption, parseNumber, useValueEditor, ValueEditor } from 'react-querybuilder';\nimport type { MaterialValueSelector } from './MaterialValueSelector';\nimport type { RQBMaterialContextValue } from './RQBMaterialContext';\nimport { RQBMaterialContext } from './RQBMaterialContext';\nimport type { MuiAugmentation } from './types';\n\n/**\n * @group Props\n */\nexport interface MaterialValueEditorProps extends ValueEditorProps, MuiAugmentation {\n extraProps?: Record<string, unknown>;\n}\n\n/**\n * @group Components\n */\nexport const MaterialValueEditor = (props: MaterialValueEditorProps): React.JSX.Element | null => {\n const { muiComponents: muiComponentsProp, ...propsForValueEditor } = props;\n const {\n field: _f,\n fieldData,\n operator,\n value,\n handleOnChange,\n title,\n className,\n type,\n inputType,\n path,\n level,\n values = [],\n listsAsArrays,\n separator,\n valueSource: _vs,\n disabled,\n testID,\n selectorComponent: SelectorComponent = props.schema.controls\n .valueSelector as typeof MaterialValueSelector,\n showInputLabels: silProp,\n extraProps,\n parseNumbers: _parseNumbers,\n ...propsForValueSelector\n } = propsForValueEditor;\n const muiComponents =\n useContext(RQBMaterialContext) ?? (muiComponentsProp as RQBMaterialContextValue);\n\n const {\n valueAsArray,\n multiValueHandler,\n bigIntValueHandler,\n parseNumberMethod,\n valueListItemClassName,\n inputTypeCoerced,\n } = useValueEditor(propsForValueEditor);\n\n const masterKey = muiComponents ? 'mui' : 'no-mui';\n const {\n Checkbox,\n FormControl,\n FormControlLabel,\n Radio,\n RadioGroup,\n Switch,\n TextareaAutosize,\n TextField,\n showInputLabels: silCtx,\n } = useMemo(() => muiComponents ?? {}, [muiComponents]);\n\n if (!muiComponents) {\n return <ValueEditor skipHook key={masterKey} {...propsForValueEditor} />;\n }\n\n if (operator === 'null' || operator === 'notNull') {\n return null;\n }\n\n const placeHolderText = fieldData?.placeholder ?? '';\n const showInputLabels = silProp || silCtx;\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 <TextField\n key={key}\n variant=\"standard\"\n type={inputTypeCoerced}\n className={valueListItemClassName}\n placeholder={placeHolderText}\n value={valueAsArray[i] ?? ''}\n disabled={disabled}\n label={showInputLabels ? key : undefined}\n onChange={e => multiValueHandler(e.target.value, i)}\n {...extraProps}\n />\n );\n }\n return (\n <SelectorComponent\n key={key}\n {...propsForValueSelector}\n title={showInputLabels ? key : undefined}\n path={path}\n level={level}\n className={valueListItemClassName}\n handleOnChange={v => multiValueHandler(v, i)}\n muiComponents={muiComponents}\n disabled={disabled}\n value={valueAsArray[i] ?? getFirstOption(values)}\n options={values}\n listsAsArrays={listsAsArrays}\n />\n );\n });\n return (\n <FormControl\n key={masterKey}\n data-testid={testID}\n className={className}\n title={title}\n disabled={disabled}>\n {editors[0]}\n {separator}\n {editors[1]}\n </FormControl>\n );\n }\n\n switch (type) {\n case 'select':\n case 'multiselect':\n return (\n <SelectorComponent\n key={masterKey}\n {...propsForValueSelector}\n muiComponents={muiComponents}\n path={path}\n level={level}\n className={className}\n handleOnChange={handleOnChange}\n options={values}\n value={value}\n disabled={disabled}\n title={title}\n multiple={type === 'multiselect'}\n listsAsArrays={listsAsArrays}\n />\n );\n\n case 'textarea':\n return (\n <TextareaAutosize\n key={masterKey}\n value={value}\n title={title}\n disabled={disabled}\n className={className}\n placeholder={placeHolderText}\n onChange={e => handleOnChange(e.target.value)}\n {...extraProps}\n />\n );\n\n case 'switch':\n return (\n <Switch\n key={masterKey}\n checked={!!value}\n title={title}\n disabled={disabled}\n className={className}\n onChange={e => handleOnChange(e.target.checked)}\n {...extraProps}\n />\n );\n\n case 'checkbox':\n return (\n <Checkbox\n key={masterKey}\n className={className}\n title={title}\n onChange={e => handleOnChange(e.target.checked)}\n checked={!!value}\n disabled={disabled}\n {...extraProps}\n />\n );\n\n case 'radio':\n return (\n <FormControl\n key={masterKey}\n className={className}\n title={title}\n component=\"fieldset\"\n disabled={disabled}\n {...extraProps}>\n <RadioGroup value={value} onChange={e => handleOnChange(e.target.value)}>\n {values.map(v => (\n <FormControlLabel\n key={v.name}\n disabled={disabled}\n value={v.name}\n // oxlint-disable-next-line jsx-no-jsx-as-prop\n control={<Radio />}\n name={v.name}\n label={v.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n );\n }\n\n /**\n * TODO: Provide either (1) examples or (2) alternate exports that support `inputType`\n * \"date\", \"datetime-local\", and \"time\", with components from `@mui/x-date-pickers`\n * (`<DatePicker />`, `<DateTimePicker />`, and `<TimePicker />`, respecitively).\n */\n\n if (inputType === 'bigint') {\n return (\n <TextField\n key={masterKey}\n variant=\"standard\"\n data-testid={testID}\n type={inputTypeCoerced}\n placeholder={placeHolderText}\n value={`${value}`}\n title={title}\n className={className}\n disabled={disabled}\n label={showInputLabels ? title : undefined}\n onChange={e => bigIntValueHandler(e.target.value)}\n {...extraProps}\n />\n );\n }\n\n return (\n <TextField\n key={masterKey}\n variant=\"standard\"\n type={inputTypeCoerced}\n value={value}\n title={title}\n disabled={disabled}\n className={className}\n placeholder={placeHolderText}\n label={showInputLabels ? title : undefined}\n onChange={e =>\n handleOnChange(parseNumber(e.target.value, { parseNumbers: parseNumberMethod }))\n }\n {...extraProps}\n />\n );\n};\n","import type { JSX } from 'react';\nimport * as React from 'react';\nimport type { OptionList } from 'react-querybuilder';\nimport { isOptionGroupArray } from 'react-querybuilder';\nimport type { RQBMaterialComponents } from './types';\n\nexport { isOptionGroupArray };\n\ntype ToOptionsOptions = Pick<RQBMaterialComponents, 'ListSubheader' | 'MenuItem'>;\n\n// v8 ignore next\nconst defaultToOptionsOptions: ToOptionsOptions = {\n ListSubheader: () => null,\n MenuItem: () => <></>,\n};\n\nexport const toOptions = (\n // v8 ignore next\n arr: OptionList = [],\n // v8 ignore next\n { ListSubheader, MenuItem }: ToOptionsOptions = defaultToOptionsOptions\n): JSX.Element[] | null => {\n if (isOptionGroupArray(arr)) {\n const optArray: JSX.Element[] = [];\n for (const og of arr) {\n optArray.push(\n <ListSubheader key={og.label}>{og.label}</ListSubheader>,\n ...og.options.map(opt => (\n <MenuItem key={opt.name} value={opt.name}>\n {opt.label}\n </MenuItem>\n ))\n );\n }\n return optArray;\n }\n /* v8 ignore else -- @preserve */\n if (Array.isArray(arr)) {\n return arr.map(opt => (\n <MenuItem key={opt.name} value={opt.name}>\n {opt.label}\n </MenuItem>\n ));\n }\n /* v8 ignore next -- @preserve */\n return null;\n};\n","import type { Select, SelectChangeEvent } from '@mui/material';\nimport type { ComponentPropsWithoutRef, ComponentType } from 'react';\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport type { VersatileSelectorProps } from 'react-querybuilder';\nimport { ValueSelector, useValueSelector } from 'react-querybuilder';\nimport type { RQBMaterialContextValue } from './RQBMaterialContext';\nimport { RQBMaterialContext } from './RQBMaterialContext';\nimport type { MuiAugmentation } from './types';\nimport { toOptions } from './utils';\n\n/**\n * @group Props\n */\nexport type MaterialValueSelectorProps = VersatileSelectorProps &\n ComponentPropsWithoutRef<typeof Select> &\n MuiAugmentation;\n\n/**\n * @group Components\n */\nexport const MaterialValueSelector = ({\n className,\n handleOnChange,\n options,\n value,\n disabled,\n title,\n multiple,\n listsAsArrays,\n testID,\n rule,\n ruleGroup,\n rules,\n level,\n path,\n context,\n validation,\n operator,\n field,\n fieldData,\n schema,\n muiComponents: muiComponentsProp,\n showInputLabels: silProp,\n defaultValue: _defaultValue,\n ...otherProps\n}: MaterialValueSelectorProps): React.JSX.Element => {\n const muiComponents =\n useContext(RQBMaterialContext) ?? (muiComponentsProp as RQBMaterialContextValue);\n\n const { onChange, val } = useValueSelector({ handleOnChange, listsAsArrays, multiple, value });\n\n const muiSelectChangeHandler = React.useCallback(\n ({ target: { value: v } }: SelectChangeEvent<string | string[]>) => {\n onChange(v);\n },\n [onChange]\n );\n\n const key = muiComponents ? 'mui' : 'no-mui';\n if (!muiComponents) {\n const VS = ValueSelector as ComponentType<VersatileSelectorProps>;\n return (\n <VS\n key={key}\n className={className}\n handleOnChange={handleOnChange}\n options={options}\n value={value}\n disabled={disabled}\n title={title}\n multiple={multiple}\n listsAsArrays={listsAsArrays}\n testID={testID}\n rule={rule}\n ruleGroup={ruleGroup}\n rules={rules}\n level={level}\n path={path}\n context={context}\n validation={validation}\n operator={operator}\n field={field}\n fieldData={fieldData}\n schema={schema}\n />\n );\n }\n\n const {\n FormControl,\n InputLabel,\n ListSubheader,\n MenuItem,\n Select,\n showInputLabels: silCtx,\n } = muiComponents;\n\n const showInputLabels = silProp || silCtx;\n\n return (\n <FormControl\n key={key}\n variant=\"standard\"\n className={className}\n title={title}\n disabled={disabled}>\n {showInputLabels && <InputLabel>{title}</InputLabel>}\n <Select\n value={val}\n onChange={muiSelectChangeHandler}\n multiple={multiple}\n disabled={disabled}\n label={showInputLabels ? title : undefined}\n {...otherProps}>\n {toOptions(options, { ListSubheader, MenuItem })}\n </Select>\n </FormControl>\n );\n};\n","import * as React from 'react';\nimport type { Translations } from 'react-querybuilder';\nimport { defaultTranslations } from 'react-querybuilder';\nimport { RQBMaterialContext } from './RQBMaterialContext';\n\nconst CloseIconWrapper = () => {\n const muiComponents = React.useContext(RQBMaterialContext);\n if (!muiComponents) {\n return defaultTranslations.removeRule.label;\n }\n const { CloseIcon } = muiComponents;\n return <CloseIcon />;\n};\nconst ContentCopyIconWrapper = () => {\n const muiComponents = React.useContext(RQBMaterialContext);\n if (!muiComponents) {\n return defaultTranslations.cloneRule.label;\n }\n const { ContentCopyIcon } = muiComponents;\n return <ContentCopyIcon />;\n};\nconst LockIconWrapper = () => {\n const muiComponents = React.useContext(RQBMaterialContext);\n if (!muiComponents) {\n return defaultTranslations.lockRuleDisabled.label;\n }\n const { LockIcon } = muiComponents;\n return <LockIcon />;\n};\nconst LockOpenIconWrapper = () => {\n const muiComponents = React.useContext(RQBMaterialContext);\n if (!muiComponents) {\n return defaultTranslations.lockRule.label;\n }\n const { LockOpenIcon } = muiComponents;\n return <LockOpenIcon />;\n};\nconst ShiftDownIconWrapper = () => {\n const muiComponents = React.useContext(RQBMaterialContext);\n if (!muiComponents) {\n return defaultTranslations.shiftActionDown.label;\n }\n const { KeyboardArrowDownIcon } = muiComponents;\n return <KeyboardArrowDownIcon />;\n};\nconst ShiftUpIconWrapper = () => {\n const muiComponents = React.useContext(RQBMaterialContext);\n if (!muiComponents) {\n return defaultTranslations.shiftActionUp.label;\n }\n const { KeyboardArrowUpIcon } = muiComponents;\n return <KeyboardArrowUpIcon />;\n};\n\nexport const materialTranslations: Pick<\n Translations,\n | 'removeGroup'\n | 'removeRule'\n | 'cloneRule'\n | 'cloneRuleGroup'\n | 'lockGroup'\n | 'lockRule'\n | 'lockGroupDisabled'\n | 'lockRuleDisabled'\n | 'shiftActionDown'\n | 'shiftActionUp'\n> = {\n removeGroup: { label: <CloseIconWrapper /> },\n removeRule: { label: <CloseIconWrapper /> },\n cloneRule: { label: <ContentCopyIconWrapper /> },\n cloneRuleGroup: { label: <ContentCopyIconWrapper /> },\n lockGroup: { label: <LockOpenIconWrapper /> },\n lockRule: { label: <LockOpenIconWrapper /> },\n lockGroupDisabled: { label: <LockIconWrapper /> },\n lockRuleDisabled: { label: <LockIconWrapper /> },\n shiftActionDown: { label: <ShiftDownIconWrapper /> },\n shiftActionUp: { label: <ShiftUpIconWrapper /> },\n};\n","import CloseIcon from '@mui/icons-material/Close';\nimport ContentCopyIcon from '@mui/icons-material/ContentCopy';\nimport DragIndicator from '@mui/icons-material/DragIndicator';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport LockIcon from '@mui/icons-material/Lock';\nimport LockOpenIcon from '@mui/icons-material/LockOpen';\nimport Button from '@mui/material/Button';\nimport Checkbox from '@mui/material/Checkbox';\nimport FormControl from '@mui/material/FormControl';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport InputLabel from '@mui/material/InputLabel';\nimport ListSubheader from '@mui/material/ListSubheader';\nimport MenuItem from '@mui/material/MenuItem';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport Select from '@mui/material/Select';\nimport Switch from '@mui/material/Switch';\nimport TextareaAutosize from '@mui/material/TextareaAutosize';\nimport TextField from '@mui/material/TextField';\nimport { useContext, useMemo } from 'react';\nimport { RQBMaterialContext } from './RQBMaterialContext';\nimport type { RQBMaterialComponents } from './types';\n\nexport const defaultMuiComponents: RQBMaterialComponents = {\n DragIndicator,\n Button,\n Checkbox,\n CloseIcon,\n ContentCopyIcon,\n FormControl,\n FormControlLabel,\n InputLabel,\n KeyboardArrowDownIcon,\n KeyboardArrowUpIcon,\n ListSubheader,\n LockIcon,\n LockOpenIcon,\n MenuItem,\n Radio,\n RadioGroup,\n Select,\n Switch,\n TextareaAutosize,\n TextField,\n};\n\n/**\n * @group Hooks\n */\nexport const useMuiComponents = (\n preloadedComponents?: RQBMaterialComponents\n): RQBMaterialComponents => {\n const muiComponentsFromContext = useContext(RQBMaterialContext);\n\n const initialComponents = useMemo(\n () =>\n preloadedComponents && muiComponentsFromContext\n ? {\n ...defaultMuiComponents,\n ...muiComponentsFromContext,\n ...preloadedComponents,\n }\n : preloadedComponents\n ? { ...defaultMuiComponents, ...preloadedComponents }\n : muiComponentsFromContext\n ? { ...defaultMuiComponents, ...muiComponentsFromContext }\n : defaultMuiComponents,\n [muiComponentsFromContext, preloadedComponents]\n );\n\n return initialComponents;\n};\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport type {\n ControlElementsProp,\n FullField,\n QueryBuilderContextProvider,\n} from 'react-querybuilder';\nimport { getCompatContextProvider } from 'react-querybuilder';\nimport { MaterialActionElement } from './MaterialActionElement';\nimport { MaterialDragHandle } from './MaterialDragHandle';\nimport { MaterialNotToggle } from './MaterialNotToggle';\nimport { MaterialShiftActions } from './MaterialShiftActions';\nimport { MaterialValueEditor } from './MaterialValueEditor';\nimport { MaterialValueSelector } from './MaterialValueSelector';\nimport { RQBMaterialContext } from './RQBMaterialContext';\nimport { materialTranslations } from './translations';\nimport { useMuiComponents } from './useMuiComponents';\n\nexport * from './MaterialActionElement';\nexport * from './MaterialDragHandle';\nexport * from './MaterialNotToggle';\nexport * from './MaterialShiftActions';\nexport * from './MaterialValueEditor';\nexport * from './MaterialValueSelector';\nexport * from './RQBMaterialContext';\nexport * from './types';\nexport * from './useMuiComponents';\nexport { materialTranslations };\n\n/**\n * @group Props\n */\nexport const materialControlElements: ControlElementsProp<FullField, string> = {\n actionElement: MaterialActionElement,\n dragHandle: MaterialDragHandle,\n notToggle: MaterialNotToggle,\n shiftActions: MaterialShiftActions,\n valueEditor: MaterialValueEditor,\n valueSelector: MaterialValueSelector,\n};\n\nconst MaterialContextProvider = getCompatContextProvider({\n controlElements: materialControlElements,\n translations: materialTranslations,\n});\n\n/**\n * @group Components\n */\nexport const QueryBuilderMaterial: QueryBuilderContextProvider = ({\n muiComponents: muiComponentsProp,\n showInputLabels,\n ...props\n}) => {\n const muiComponents = useMuiComponents(muiComponentsProp);\n\n const ctxValue = useMemo(\n () => ({ ...muiComponents, ...muiComponentsProp, showInputLabels }),\n [muiComponents, muiComponentsProp, showInputLabels]\n );\n\n return (\n <RQBMaterialContext.Provider value={ctxValue}>\n <MaterialContextProvider {...props} />\n </RQBMaterialContext.Provider>\n );\n};\n"],"mappings":"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"}