{"version":3,"file":"react-querybuilder_bootstrap.mjs","names":[],"sources":["../src/BootstrapNotToggle.tsx","../src/BootstrapValueEditor.tsx","../src/index.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useId } from 'react';\nimport type { NotToggleProps } from 'react-querybuilder';\n\n/**\n * @group Components\n */\nexport const BootstrapNotToggle = ({\n  className,\n  handleOnChange,\n  title,\n  label,\n  checked,\n  disabled,\n}: NotToggleProps): React.JSX.Element => {\n  const id = useId();\n\n  return (\n    <div className={`form-check-inline form-switch ${className}`}>\n      <input\n        id={id}\n        className=\"form-check-input\"\n        type=\"checkbox\"\n        onChange={e => handleOnChange(e.target.checked)}\n        checked={!!checked}\n        disabled={disabled}\n      />\n      <label title={title} htmlFor={id} className=\"form-check-label\">\n        {label}\n      </label>\n    </div>\n  );\n};\n","import * as React from 'react';\nimport type { ValueEditorProps } from 'react-querybuilder';\nimport { standardClassnames, useValueEditor, ValueEditor } from 'react-querybuilder';\n\n// Extracted from callback so we can use `useId`\nconst RadioButton = (props: {\n  name: string;\n  disabled?: boolean;\n  checked: boolean;\n  handleOnChange: (v: string) => void;\n  label: string;\n}) => {\n  const id = React.useId();\n  return (\n    <div className=\"form-check form-check-inline\">\n      <input\n        className=\"form-check-input\"\n        type=\"radio\"\n        id={id}\n        value={props.name}\n        checked={props.checked}\n        disabled={props.disabled}\n        onChange={e => props.handleOnChange(e.target.value)}\n      />\n      <label className=\"form-check-label\" htmlFor={id}>\n        {props.label}\n      </label>\n    </div>\n  );\n};\n\n/**\n * @group Components\n */\nexport const BootstrapValueEditor = (props: ValueEditorProps): React.JSX.Element | null => {\n  const { valueListItemClassName } = useValueEditor(props);\n\n  if (props.operator === 'null' || props.operator === 'notNull') {\n    return null;\n  }\n\n  if (\n    (props.operator === 'between' || props.operator === 'notBetween') &&\n    (props.type === 'select' || props.type === 'text')\n  ) {\n    const listItemClasses =\n      props.type === 'text' ? 'form-control form-control-sm' : 'form-select form-select-sm';\n    return (\n      <ValueEditor\n        {...props}\n        skipHook\n        schema={{\n          ...props.schema,\n          classNames: {\n            ...props.schema.classNames,\n            valueListItem: `${valueListItemClassName} ${listItemClasses}`,\n          },\n        }}\n      />\n    );\n  }\n\n  switch (props.type) {\n    case 'select':\n    case 'multiselect':\n      return (\n        <ValueEditor\n          {...props}\n          skipHook\n          className={`${props.className} form-select form-select-sm`}\n        />\n      );\n\n    case 'switch':\n      return (\n        <span className={`${props.className} custom-control custom-switch`}>\n          <input\n            type=\"checkbox\"\n            className=\"form-check-input custom-control-input\"\n            title={props.title}\n            disabled={props.disabled}\n            onChange={e => props.handleOnChange(e.target.checked)}\n            checked={!!props.value}\n          />\n        </span>\n      );\n\n    case 'checkbox':\n      return <ValueEditor {...props} skipHook className={`${props.className} form-check-input`} />;\n\n    case 'radio':\n      return (\n        <span title={props.title} className={standardClassnames.value}>\n          {props.values?.map(v => (\n            <RadioButton\n              key={v.name}\n              name={v.name}\n              disabled={props.disabled}\n              checked={props.value === v.name}\n              handleOnChange={props.handleOnChange}\n              label={v.label}\n            />\n          ))}\n        </span>\n      );\n  }\n\n  return (\n    <ValueEditor\n      {...props}\n      skipHook\n      className={`${props.className} form-control form-control-sm`}\n    />\n  );\n};\n","import * as React from 'react';\nimport type {\n  Classnames,\n  ControlElementsProp,\n  FullField,\n  QueryBuilderContextProvider,\n  Translations,\n} from 'react-querybuilder';\nimport { getCompatContextProvider } from 'react-querybuilder';\nimport { BootstrapNotToggle } from './BootstrapNotToggle';\nimport { BootstrapValueEditor } from './BootstrapValueEditor';\n\nexport * from './BootstrapNotToggle';\nexport * from './BootstrapValueEditor';\n\n/**\n * @group Props\n */\nexport const bootstrapControlElements: ControlElementsProp<FullField, string> = {\n  notToggle: BootstrapNotToggle,\n  valueEditor: BootstrapValueEditor,\n};\n\n/**\n * @group Props\n */\nexport const bootstrapControlClassnames: Partial<Classnames> = {\n  actionElement: 'btn btn-sm',\n  addGroup: 'btn-secondary',\n  addRule: 'btn-primary',\n  cloneGroup: 'btn-secondary',\n  cloneRule: 'btn-secondary',\n  ungroup: 'btn-secondary',\n  lockGroup: 'btn-secondary',\n  lockRule: 'btn-secondary',\n  removeGroup: 'btn-danger',\n  removeRule: 'btn-danger',\n  undoAction: 'btn-secondary',\n  redoAction: 'btn-secondary',\n  // BootstrapValueEditor adds its own classnames\n  // value: '',\n  valueSelector: 'form-select form-select-sm',\n};\n\n/**\n * @group Props\n */\nexport const bootstrapTranslations: Partial<Translations> = {\n  removeGroup: { label: <i className=\"bi bi-x\" /> },\n  removeRule: { label: <i className=\"bi bi-x\" /> },\n  cloneRule: { label: <i className=\"bi bi-copy\" /> },\n  cloneRuleGroup: { label: <i className=\"bi bi-copy\" /> },\n  ungroupRuleGroup: { label: <i className=\"bi bi-box-arrow-up-left\" /> },\n  dragHandle: { label: <i className=\"bi bi-grip-vertical\" /> },\n  lockGroup: { label: <i className=\"bi bi-unlock\" /> },\n  lockRule: { label: <i className=\"bi bi-unlock\" /> },\n  lockGroupDisabled: { label: <i className=\"bi bi-lock\" /> },\n  lockRuleDisabled: { label: <i className=\"bi bi-lock\" /> },\n  shiftActionUp: { label: <i className=\"bi bi-chevron-compact-up\" /> },\n  shiftActionDown: { label: <i className=\"bi bi-chevron-compact-down\" /> },\n  undo: { label: <i className=\"bi bi-arrow-counterclockwise\" /> },\n  redo: { label: <i className=\"bi bi-arrow-clockwise\" /> },\n};\n\n/**\n * @group Components\n */\nexport const QueryBuilderBootstrap: QueryBuilderContextProvider = getCompatContextProvider({\n  controlClassnames: bootstrapControlClassnames,\n  controlElements: bootstrapControlElements,\n  translations: bootstrapTranslations,\n});\n"],"mappings":"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"}