# Query Builder URL: /docs/web/components/query-builder Query Builder component. **Demo:** ```tsx 'use client'; import { useState } from 'react'; import { QueryBuilderDocyrus } from '@docyrus/ui/components/query-builder'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@docyrus/ui/primitives/ui/select'; import { cn } from '@docyrus/ui/primitives/lib/utils'; import { PropControls } from '@/components/prop-controls'; import { useDemoData } from '@/data/query-builder-data'; export function QueryBuilderDemo() { type Variant = 'default' | 'bordered' | 'compact' | 'striped'; const [variant, setVariant] = useState
Size
); } ``` ## Installation ```bash pnpm dlx @docyrus/cli add @docyrus/ui-query-builder ``` **Dependencies:** - [@react-querybuilder/dnd](https://www.npmjs.com/package/@react-querybuilder/dnd) - [@atlaskit/pragmatic-drag-and-drop](https://www.npmjs.com/package/@atlaskit/pragmatic-drag-and-drop) - [@dnd-kit/core](https://www.npmjs.com/package/@dnd-kit/core) - [react-dnd](https://www.npmjs.com/package/react-dnd) - [react-dnd-html5-backend](https://www.npmjs.com/package/react-dnd-html5-backend) - [react-dnd-touch-backend](https://www.npmjs.com/package/react-dnd-touch-backend) - [react-querybuilder](https://www.npmjs.com/package/react-querybuilder) - [lucide-react](https://www.npmjs.com/package/lucide-react) - [class-variance-authority](https://www.npmjs.com/package/class-variance-authority) - [jsonata](https://www.npmjs.com/package/jsonata) ## Usage ```tsx import { QueryBuilderDocyrus } from "@docyrus/ui/components/query-builder"; import type { QueryBuilderDocyrusProps, DocyrusQBField, RuleGroupType, RuleGroupTypeIC, RuleType, Field, FullField, FullOperator, FullCombinator, QueryBuilderProps, ActionProps, ValueSelectorProps, ValueEditorProps, NotToggleProps, DragHandleProps, CombinatorSelectorProps, FieldSelectorProps, OperatorSelectorProps, RuleGroupTypeAny, VersatileSelectorProps, QueryJsonataContext, EvaluateOptions, UseQuery2JsonataConverterOptions, UseQuery2JsonataConverterResult, ConvertQueryOptions, ConvertQueryResult, DateBindingSpec, OperatorApi, FilterGroup } from "@docyrus/ui/components/query-builder"; {}} onRuleRemove={() => {}} onGroupAdd={() => {}} onGroupRemove={() => {}} onClear={() => {}} enrichFieldDefaults /> ``` ## Variants | Variant | Description | |---------|-------------| | `default` | Default style | | `bordered` | Bordered — `rounded-lg border bg-card p-4 shadow-sm` | | `compact` | Compact — `text-xs [&_.rule]:py-1 [&_.rule]:px-2 [&_.rule]:gap-1` | | `striped` | Striped — `[&_.rule:nth-child(even)]:bg-muted/20` | ## Sizes | Size | Description | |------|-------------| | `sm` | Small — `[&_.qb-control]:h-7 [&_.qb-control]:text-xs` | | `default` | Default | | `lg` | Large — `[&_.qb-control]:h-10 [&_.qb-control]:text-sm` | ## API Reference | Prop | Type | Default | |------|------|---------| | `variant` | `"default"` \| `"bordered"` \| `"compact"` \| `"striped"` | `"default"` | | `size` | `"sm"` \| `"default"` \| `"lg"` | `"default"` | | `animated` | `boolean` | — | | `draggable` | `boolean` | — | | `showRuleNumbers` | `boolean` | — | | `maxDepth` | `number` | — | | `emptyMessage` | `ReactNode` | — | | `showClearButton` | `boolean` | — | | `clearButtonLabel` | `ReactNode` | — | | `onRuleAdd` | `() => void` | — | | `onRuleRemove` | `() => void` | — | | `onGroupAdd` | `() => void` | — | | `onGroupRemove` | `() => void` | — | | `onClear` | `() => void` | — | | `enrichFieldDefaults` | `boolean` | — | | `className` | `string` | — | ## Components | Component | Description | |-----------|-------------| | `QueryBuilderDocyrus` | Public export | ## Type Exports | Type | Description | |------|-------------| | `QueryBuilderDocyrusProps` | — | | `DocyrusQBField` | — | | `RuleGroupType` | — | | `RuleGroupTypeIC` | — | | `RuleType` | — | | `Field` | — | | `FullField` | — | | `FullOperator` | — | | `FullCombinator` | — | | `QueryBuilderProps` | — | | `ActionProps` | — | | `ValueSelectorProps` | — | | `ValueEditorProps` | — | | `NotToggleProps` | — | | `DragHandleProps` | — | | `CombinatorSelectorProps` | — | | `FieldSelectorProps` | — | | `OperatorSelectorProps` | — | | `RuleGroupTypeAny` | — | | `VersatileSelectorProps` | — | | `QueryJsonataContext` | — | | `EvaluateOptions` | — | | `UseQuery2JsonataConverterOptions` | — | | `UseQuery2JsonataConverterResult` | — | | `ConvertQueryOptions` | — | | `ConvertQueryResult` | — | | `DateBindingSpec` | — | | `OperatorApi` | — | | `FilterGroup` | — | ## Type Reference ### DocyrusQBField | Field | Type | Description | |-------|------|-------------| | `filterGroup` | `FilterGroup` | — | | `fieldType` | `string` | — | | `operatorValues` | `Record` | — | | `operatorValueEditorType` | `Partial>` | — | ### QueryJsonataContext | Field | Type | Description | |-------|------|-------------| | `activeUserId` | `string` | — | | `activeUserTeamMemberIds` | `string[]` | — | ### EvaluateOptions | Field | Type | Description | |-------|------|-------------| | `now` | `Date \| number` | — | | `bindings` | `Record` | — | ### UseQuery2JsonataConverterOptions | Field | Type | Description | |-------|------|-------------| ### UseQuery2JsonataConverterResult | Field | Type | Description | |-------|------|-------------| | `expression` | `string` | — | | `dateBindings` | `DateBindingSpec[]` | — | | `unsupportedOperators` | `string[]` | — | | `warnings` | `string[]` | — | | `isValid` | `boolean` | — | | `error` | `Error \| null` | — | | `evaluate` | `(data: unknown, options?: EvaluateOptions) => Promise` | — | ### ConvertQueryOptions | Field | Type | Description | |-------|------|-------------| | `resolveGroup` | `(field: string) => FilterGroup \| undefined` | — | | `fieldResolver` | `(field: string) => string` | — | | `operatorOverrides` | `Record string \| null>` | — | | `unsupportedFallback` | `boolean` | — | | `weekStartsOn` | `0 \| 1` | — | ### ConvertQueryResult | Field | Type | Description | |-------|------|-------------| | `expression` | `string` | — | | `dateBindings` | `DateBindingSpec[]` | — | | `unsupportedOperators` | `string[]` | — | | `warnings` | `string[]` | — | ### DateBindingSpec | Field | Type | Description | |-------|------|-------------| | `id` | `string` | — | | `operator` | `string` | — | | `amount` | `number` | — | ### OperatorApi | Field | Type | Description | |-------|------|-------------| | `field` | `string` | — | | `str` | `(value: unknown) => string` | — | | `num` | `(value: unknown) => string` | — | | `strArr` | `(values: unknown[]) => string` | — | | `fieldRef` | `(name: string) => string` | — | ### FilterGroup `"ALPHA"`