UNPKG

@react-querybuilder/material

Version:

Custom MUI (Material Design) components for react-querybuilder

1 lines 34.4 kB
{"version":3,"file":"react-querybuilder_material.mjs","names":["RQBMaterialContext: Context<RQBMaterialComponents | null>","Button","MaterialDragHandle: React.ForwardRefExoticComponent<\n Omit<MaterialDragHandleProps, 'ref'> & React.RefAttributes<HTMLSpanElement>\n>","DragIndicator","Switch","FormControlLabel","Button","TextField","FormControl","TextareaAutosize","Switch","Checkbox","RadioGroup","FormControlLabel","Radio","optArray: JSX.Element[]","ListSubheader","MenuItem","value","FormControl","Select","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>","defaultMuiComponents: RQBMaterialComponents","materialControlElements: ControlElementsProp<FullField, string>","QueryBuilderMaterial: QueryBuilderContextProvider<{\n muiComponents?: RQBMaterialComponents;\n}>"],"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\n/**\n * @group Components\n */\nexport const RQBMaterialContext: Context<RQBMaterialComponents | null> =\n createContext<RQBMaterialComponents | 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 { RQBMaterialComponents } from './types';\n\n/**\n * @group Props\n */\nexport interface MaterialActionProps extends ActionProps, ComponentPropsWithoutRef<typeof Button> {\n muiComponents?: RQBMaterialComponents;\n}\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 { RQBMaterialComponents } from './types';\n\n/**\n * @group Props\n */\nexport interface MaterialDragHandleProps\n extends DragHandleProps,\n Omit<ComponentPropsWithRef<typeof DragIndicator>, 'path'> {\n muiComponents?: RQBMaterialComponents;\n}\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 { RQBMaterialComponents } from './types';\n\n/**\n * @group Props\n */\nexport type MaterialNotToggleProps = NotToggleProps &\n ComponentPropsWithoutRef<typeof Switch> & {\n muiComponents?: RQBMaterialComponents;\n };\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 ?? /* istanbul ignore next */ ''}\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 { RQBMaterialComponents } from './types';\n\n/**\n * @group Props\n */\nexport interface MaterialShiftActionsProps\n extends ShiftActionsProps,\n React.ComponentPropsWithoutRef<typeof Button> {\n muiComponents?: RQBMaterialComponents;\n}\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 { RQBMaterialContext } from './RQBMaterialContext';\nimport type { RQBMaterialComponents } from './types';\n\n/**\n * @group Props\n */\nexport interface MaterialValueEditorProps extends ValueEditorProps {\n muiComponents?: RQBMaterialComponents;\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 extraProps,\n parseNumbers: _parseNumbers,\n ...propsForValueSelector\n } = propsForValueEditor;\n const muiComponents = useContext(RQBMaterialContext) ?? muiComponentsProp;\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 } = useMemo(() => (muiComponents ?? {}) as RQBMaterialComponents, [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\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 onChange={e => multiValueHandler(e.target.value, i)}\n {...extraProps}\n />\n );\n }\n return (\n <SelectorComponent\n key={key}\n {...propsForValueSelector}\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 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 {...extraProps}\n />\n );\n }\n\n return (\n <TextField\n variant=\"standard\"\n key={masterKey}\n type={inputTypeCoerced}\n value={value}\n title={title}\n disabled={disabled}\n className={className}\n placeholder={placeHolderText}\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\nexport const toOptions = (\n arr: OptionList,\n { ListSubheader, MenuItem }: ToOptionsOptions\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 /* istanbul ignore else */\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 /* istanbul ignore next */\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 { RQBMaterialContext } from './RQBMaterialContext';\nimport type { RQBMaterialComponents } from './types';\nimport { toOptions } from './utils';\n\n/**\n * @group Props\n */\nexport type MaterialValueSelectorProps = VersatileSelectorProps &\n ComponentPropsWithoutRef<typeof Select> & {\n muiComponents?: RQBMaterialComponents;\n };\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 defaultValue: _defaultValue,\n ...otherProps\n}: MaterialValueSelectorProps): React.JSX.Element => {\n const muiComponents = useContext(RQBMaterialContext) ?? muiComponentsProp;\n\n const { onChange, val } = useValueSelector({ handleOnChange, listsAsArrays, multiple, value });\n\n const muiSelectChangeHandler = React.useCallback(\n ({ target: { value } }: SelectChangeEvent<string | string[]>) => {\n onChange(value);\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 { FormControl, Select, ListSubheader, MenuItem } = muiComponents;\n\n return (\n <FormControl\n key={key}\n variant=\"standard\"\n className={className}\n title={title}\n disabled={disabled}>\n <Select\n value={val}\n onChange={muiSelectChangeHandler}\n multiple={multiple}\n disabled={disabled}\n {...otherProps}>\n {toOptions(options ?? /* istanbul ignore next */ [], {\n ListSubheader,\n MenuItem,\n })}\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 {\n Close as CloseIcon,\n ContentCopy as ContentCopyIcon,\n DragIndicator,\n KeyboardArrowDown as KeyboardArrowDownIcon,\n KeyboardArrowUp as KeyboardArrowUpIcon,\n Lock as LockIcon,\n LockOpen as LockOpenIcon,\n} from '@mui/icons-material';\nimport {\n Button,\n Checkbox,\n FormControl,\n FormControlLabel,\n ListSubheader,\n MenuItem,\n Radio,\n RadioGroup,\n Select,\n Switch,\n TextareaAutosize,\n TextField,\n} from '@mui/material';\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 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 type { RQBMaterialComponents } from './types';\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?: RQBMaterialComponents;\n}> = ({ muiComponents: muiComponentsProp, ...props }) => {\n const muiComponents = useMuiComponents(muiComponentsProp);\n\n const ctxValue = useMemo(\n () => ({ ...muiComponents, ...muiComponentsProp }),\n [muiComponents, muiComponentsProp]\n );\n\n return (\n <RQBMaterialContext.Provider value={ctxValue}>\n <MaterialContextProvider {...props} />\n </RQBMaterialContext.Provider>\n );\n};\n"],"mappings":"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"}