fluentui-extended 2026.2.17 → 2026.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Lookup/Lookup.styles.ts","../src/components/Lookup/Lookup.tsx","../src/components/QueryBuilder/QueryBuilder.styles.ts","../src/components/QueryBuilder/QueryBuilder.operators.ts","../src/components/QueryBuilder/QueryBuilder.serializer.ts","../src/components/QueryBuilder/QueryBuilder.parser.ts","../src/components/QueryBuilder/QueryBuilder.utils.ts","../src/components/QueryBuilder/QueryBuilder.LookupInput.tsx","../src/components/QueryBuilder/QueryBuilder.enrichment.ts","../src/components/QueryBuilder/QueryBuilder.tsx"],"names":["makeStyles","tokens","useId","React","Input","mergeClasses","Button","DismissRegular","Spinner","ChevronDownRegular","Portal","React2","hasValidTargets","Text","React3","Dropdown","Option","DatePicker","Menu","MenuTrigger","MoreHorizontalRegular","MenuPopover","MenuList","MenuItem","DeleteRegular","ArrowResetRegular","ArrowDownloadRegular","ArrowUploadRegular","Dialog","DialogSurface","DialogBody","DialogTitle","DialogContent","Textarea","DialogActions","DialogTrigger","CheckmarkCircleRegular","WarningRegular","Combobox","AddRegular","CopyRegular"],"mappings":"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","file":"index.js","sourcesContent":["import { makeStyles, tokens } from '@fluentui/react-components';\n\nexport const useLookupStyles = makeStyles({\n root: {\n position: 'relative',\n display: 'inline-flex',\n flexDirection: 'column',\n width: '100%',\n },\n\n inputWrapper: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n },\n\n input: {\n width: '100%',\n },\n\n iconContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: '2px',\n },\n\n iconButton: {\n minWidth: '20px',\n minHeight: '20px',\n padding: '0',\n },\n\n chevronIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '20px',\n height: '20px',\n },\n\n dropdownPortal: {\n position: 'absolute',\n padding: 0,\n minWidth: '220px',\n zIndex: 1000000,\n backgroundColor: tokens.colorNeutralBackground1,\n borderRadius: tokens.borderRadiusXLarge,\n boxShadow: tokens.shadow16,\n border: `1px solid ${tokens.colorNeutralStroke1}`,\n boxSizing: 'border-box',\n overflow: 'hidden',\n },\n\n dropdownContent: {\n maxHeight: '350px',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n },\n\n optionsList: {\n display: 'flex',\n flexDirection: 'column',\n padding: '4px',\n gap: '2px',\n },\n\n option: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n boxSizing: 'border-box',\n padding: '8px 12px',\n cursor: 'pointer',\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: 'transparent',\n border: 'none',\n width: '100%',\n overflow: 'hidden',\n textAlign: 'left',\n gap: '8px',\n\n '&:hover': {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n },\n\n '&:focus': {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n outline: `2px solid ${tokens.colorBrandStroke1}`,\n outlineOffset: '-2px',\n },\n },\n\n optionIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '20px',\n height: '20px',\n flexShrink: 0,\n color: tokens.colorNeutralForeground3,\n },\n\n optionContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 auto',\n minWidth: 0,\n },\n\n optionExpandButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n marginLeft: 'auto',\n flexShrink: 0,\n cursor: 'pointer',\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: 'transparent',\n border: 'none',\n color: tokens.colorNeutralForeground3,\n transition: 'transform 0.2s ease',\n\n '&:hover': {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n color: tokens.colorNeutralForeground1,\n },\n },\n\n optionExpandButtonExpanded: {\n transform: 'rotate(180deg)',\n },\n\n optionHighlighted: {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n },\n\n optionSelected: {\n backgroundColor: tokens.colorBrandBackground2,\n '&:hover': {\n backgroundColor: tokens.colorBrandBackground2Hover,\n },\n },\n\n optionDisabled: {\n cursor: 'not-allowed',\n opacity: 0.5,\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n\n optionText: {\n fontSize: tokens.fontSizeBase300,\n fontWeight: tokens.fontWeightRegular,\n color: tokens.colorNeutralForeground1,\n },\n\n optionSecondaryText: {\n fontSize: tokens.fontSizeBase200,\n fontWeight: tokens.fontWeightRegular,\n color: tokens.colorNeutralForeground3,\n marginTop: '2px',\n },\n\n optionDetails: {\n display: 'flex',\n flexDirection: 'column',\n marginTop: '4px',\n paddingTop: '4px',\n borderTop: `1px solid ${tokens.colorNeutralStroke2}`,\n gap: '2px',\n },\n\n optionDetailRow: {\n display: 'flex',\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorNeutralForeground3,\n gap: '4px',\n },\n\n optionDetailLabel: {\n color: tokens.colorNeutralForeground4,\n },\n\n optionDetailValue: {\n color: tokens.colorNeutralForeground3,\n },\n\n loadingContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '16px',\n },\n\n noResults: {\n padding: '16px',\n textAlign: 'center',\n color: tokens.colorNeutralForeground3,\n fontSize: tokens.fontSizeBase300,\n },\n\n headerWrapper: {\n padding: '2px',\n backgroundColor: tokens.colorNeutralBackground1,\n },\n\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderRadius: tokens.borderRadiusMedium,\n padding: '6px 12px',\n minHeight: '24px',\n backgroundColor: tokens.colorNeutralBackground3,\n backgroundImage: `repeating-linear-gradient(\n -45deg,\n transparent,\n transparent 1px,\n rgba(0, 0, 0, 0.02) 1px,\n rgba(0, 0, 0, 0.02) 2px\n )`,\n gap: '8px',\n },\n\n footerWrapper: {\n padding: '8px',\n paddingTop: '0',\n backgroundColor: tokens.colorNeutralBackground1,\n },\n\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '6px 12px',\n minHeight: '24px',\n borderTop: `1px solid ${tokens.colorNeutralStroke2}`,\n backgroundColor: tokens.colorNeutralBackground1,\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorNeutralForeground2,\n gap: '8px',\n },\n\n optionsContainer: {\n maxHeight: '250px',\n overflowY: 'auto',\n overflowX: 'hidden',\n },\n});\n","import * as React from 'react';\nimport {\n Input,\n Spinner,\n mergeClasses,\n Button,\n Portal,\n useId,\n} from '@fluentui/react-components';\nimport { DismissRegular, ChevronDownRegular } from '@fluentui/react-icons';\nimport { useLookupStyles } from './Lookup.styles';\nimport type { LookupProps, LookupOption } from './Lookup.types';\n\nexport const Lookup: React.FC<LookupProps> = ({\n id,\n options = [],\n selectedKey,\n selectedOption: selectedOptionProp,\n onOptionSelect,\n onSearchChange,\n placeholder = 'Search...',\n loading = false,\n noResultsMessage = 'No results found',\n clearable = true,\n minSearchLength = 0,\n searchDebounceMs = 300,\n matchInputWidth = true,\n disabled,\n header,\n footer,\n open: controlledOpen,\n onOpenChange,\n ...inputProps\n}) => {\n const styles = useLookupStyles();\n const ariaLabel = inputProps['aria-label'];\n const ariaLabelledBy = inputProps['aria-labelledby'];\n\n // Generate unique ID for accessibility - use provided id or auto-generate\n const autoId = useId('lookup-');\n const lookupId = id ?? autoId;\n\n const [internalOpen, setInternalOpen] = React.useState(false);\n\n // Controlled vs uncontrolled open state\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setIsOpen = React.useCallback(\n (value: boolean | ((prev: boolean) => boolean)) => {\n const nextValue = typeof value === 'function' ? value(isOpen) : value;\n if (!isControlled) {\n setInternalOpen(nextValue);\n }\n onOpenChange?.(nextValue);\n },\n [isControlled, isOpen, onOpenChange]\n );\n const [searchText, setSearchText] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n const [expandedKeys, setExpandedKeys] = React.useState<Set<string>>(new Set());\n const [internalSelectedOption, setInternalSelectedOption] = React.useState<LookupOption | null>(null);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n const inputWrapperRef = React.useRef<HTMLDivElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const debounceRef = React.useRef<ReturnType<typeof setTimeout>>();\n const justSelectedRef = React.useRef(false);\n const [dropdownPosition, setDropdownPosition] = React.useState<{ top: number; left: number; width: number }>({ top: 0, left: 0, width: 0 });\n\n // Find the selected option - prefer props, fallback to internal state\n const selectedOption = React.useMemo(\n () => selectedOptionProp ?? options.find((opt) => opt.key === selectedKey) ?? internalSelectedOption,\n [selectedOptionProp, options, selectedKey, internalSelectedOption]\n );\n\n // Filter options based on search text\n const filteredOptions = React.useMemo(() => {\n if (!searchText || searchText.length < minSearchLength) {\n return options;\n }\n const lowerSearch = searchText.toLowerCase();\n return options.filter(\n (opt) =>\n opt.text.toLowerCase().includes(lowerSearch) ||\n opt.secondaryText?.toLowerCase().includes(lowerSearch)\n );\n }, [options, searchText, minSearchLength]);\n\n const highlightedOptionId = React.useMemo(() => {\n if (!isOpen || highlightedIndex < 0 || highlightedIndex >= filteredOptions.length) {\n return undefined;\n }\n\n return `${lookupId}-option-${filteredOptions[highlightedIndex].key}`;\n }, [filteredOptions, highlightedIndex, isOpen, lookupId]);\n\n // Display value in input\n const displayValue = React.useMemo(() => {\n if (isOpen) {\n return searchText;\n }\n return selectedOption?.text ?? '';\n }, [isOpen, searchText, selectedOption]);\n\n // ─── Open / close helpers ────────────────────────────────────────\n const openDropdown = React.useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n const closeDropdown = React.useCallback(() => {\n setIsOpen(false);\n setSearchText('');\n setHighlightedIndex(-1);\n }, []);\n\n // Handle search text change with debounce\n const handleSearchChange = React.useCallback(\n (value: string) => {\n setSearchText(value);\n setHighlightedIndex(-1);\n\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n if (onSearchChange && value.length >= minSearchLength) {\n debounceRef.current = setTimeout(() => {\n onSearchChange(value);\n }, searchDebounceMs);\n }\n },\n [onSearchChange, minSearchLength, searchDebounceMs]\n );\n\n // Handle input change\n const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n handleSearchChange(value);\n if (!isOpen) {\n openDropdown();\n }\n },\n [handleSearchChange, isOpen, openDropdown]\n );\n\n // Handle option selection\n const handleSelectOption = React.useCallback(\n (option: LookupOption) => {\n if (option.disabled) return;\n\n justSelectedRef.current = true;\n setInternalSelectedOption(option);\n onOptionSelect?.(option);\n setSearchText('');\n setIsOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.focus();\n },\n [onOptionSelect]\n );\n\n // Handle clear\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n setInternalSelectedOption(null);\n onOptionSelect?.(null);\n setSearchText('');\n setHighlightedIndex(-1);\n inputRef.current?.focus();\n },\n [onOptionSelect]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n openDropdown();\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (isOpen) {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1\n );\n }\n break;\n\n case 'Enter':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0 && filteredOptions[highlightedIndex]) {\n handleSelectOption(filteredOptions[highlightedIndex]);\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n closeDropdown();\n break;\n\n case 'Tab':\n closeDropdown();\n break;\n }\n },\n [disabled, isOpen, highlightedIndex, filteredOptions, handleSelectOption, openDropdown, closeDropdown]\n );\n\n // Handle input focus — open the dropdown\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n if (!disabled) {\n // Don't reopen if we just selected an option\n if (justSelectedRef.current) {\n justSelectedRef.current = false;\n return;\n }\n openDropdown();\n }\n // Forward to consumer's onFocus if provided\n inputProps.onFocus?.(e);\n },\n [disabled, openDropdown, inputProps.onFocus]\n );\n\n // Handle click on the wrapper — also opens (in case focus doesn't fire\n // because the input is already focused, e.g. clicking the chevron area)\n const handleWrapperClick = React.useCallback(() => {\n if (!disabled && !isOpen) {\n openDropdown();\n inputRef.current?.focus();\n }\n }, [disabled, isOpen, openDropdown]);\n\n // Cleanup debounce on unmount\n React.useEffect(() => {\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n };\n }, []);\n\n // Scroll highlighted option into view\n React.useEffect(() => {\n if (highlightedIndex >= 0 && dropdownRef.current) {\n const option = dropdownRef.current.querySelector(\n `[data-index=\"${highlightedIndex}\"]`\n );\n option?.scrollIntoView({ block: 'nearest' });\n }\n }, [highlightedIndex]);\n\n // ─── Position the dropdown below the input ─────────────────────\n React.useEffect(() => {\n if (!isOpen) return;\n\n const updatePosition = () => {\n const rect = inputWrapperRef.current?.getBoundingClientRect();\n if (rect) {\n setDropdownPosition({\n top: rect.bottom + 4 + window.scrollY,\n left: rect.left + window.scrollX,\n width: matchInputWidth ? rect.width : 0,\n });\n }\n };\n\n updatePosition();\n\n // Track input resize (e.g. flex/grid layout changes)\n let resizeObserver: ResizeObserver | undefined;\n if (typeof ResizeObserver !== 'undefined' && inputWrapperRef.current) {\n resizeObserver = new ResizeObserver(() => updatePosition());\n resizeObserver.observe(inputWrapperRef.current);\n }\n\n // Track window resize\n window.addEventListener('resize', updatePosition);\n\n // Track any scroll so the portal follows the input\n window.addEventListener('scroll', updatePosition, true);\n\n return () => {\n resizeObserver?.disconnect();\n window.removeEventListener('resize', updatePosition);\n window.removeEventListener('scroll', updatePosition, true);\n };\n }, [isOpen, matchInputWidth]);\n\n // ─── Close when clicking outside ───────────────────────────────\n React.useEffect(() => {\n if (!isOpen) return;\n\n const handlePointerDownOutside = (event: MouseEvent) => {\n const target = event.target as Node | null;\n if (!target) return;\n const insideInput = inputWrapperRef.current?.contains(target);\n const insideDropdown = dropdownRef.current?.contains(target);\n if (!insideInput && !insideDropdown) {\n closeDropdown();\n }\n };\n\n // Register immediately — useEffect already runs after the browser paints,\n // so the mousedown that opened the dropdown is fully processed.\n // NOTE: Uses capture phase (true) so that stopPropagation() calls by host\n // applications (e.g., Dynamics 365) cannot prevent the handler from firing.\n document.addEventListener('mousedown', handlePointerDownOutside, true);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDownOutside, true);\n };\n }, [isOpen, closeDropdown]);\n\n const showDropdown = isOpen && !disabled;\n\n return (\n <div className={styles.root}>\n <div\n className={styles.inputWrapper}\n ref={inputWrapperRef}\n onClick={handleWrapperClick}\n >\n <Input\n {...inputProps}\n id={lookupId}\n ref={inputRef}\n className={mergeClasses(styles.input, inputProps.className)}\n value={displayValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n placeholder={placeholder}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={isOpen ? `${lookupId}-listbox` : undefined}\n aria-autocomplete=\"list\"\n aria-activedescendant={highlightedOptionId}\n aria-label={ariaLabelledBy ? undefined : ariaLabel ?? placeholder ?? 'Lookup'}\n contentAfter={\n <span className={styles.iconContainer}>\n {clearable && selectedOption && !disabled && (\n <Button\n appearance=\"subtle\"\n size=\"small\"\n icon={<DismissRegular />}\n onClick={handleClear}\n className={styles.iconButton}\n aria-label=\"Clear selection\"\n />\n )}\n {loading ? (\n <Spinner size=\"tiny\" />\n ) : (\n <span className={styles.chevronIcon}>\n <ChevronDownRegular />\n </span>\n )}\n </span>\n }\n />\n </div>\n\n {showDropdown && (\n <Portal>\n <div\n className={styles.dropdownPortal}\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n ...(matchInputWidth && dropdownPosition.width > 0\n ? { width: dropdownPosition.width }\n : { minWidth: 220 }),\n }}\n >\n <div\n id={`${lookupId}-listbox`}\n className={styles.dropdownContent}\n ref={dropdownRef}\n role=\"listbox\"\n aria-labelledby={lookupId}\n >\n {header && (\n <div className={styles.headerWrapper}>\n <div className={styles.header}>{header}</div>\n </div>\n )}\n {loading ? (\n <div className={styles.loadingContainer}>\n <Spinner size=\"small\" label=\"Loading...\" />\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={styles.noResults}>{noResultsMessage}</div>\n ) : (\n <div className={styles.optionsContainer}>\n <div className={styles.optionsList}>\n {filteredOptions.map((option, index) => {\n const isExpanded = expandedKeys.has(option.key);\n const hasDetails = option.details && option.details.length > 0;\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n setExpandedKeys((prev) => {\n const next = new Set(prev);\n if (next.has(option.key)) {\n next.delete(option.key);\n } else {\n next.add(option.key);\n }\n return next;\n });\n };\n\n return (\n <div\n key={option.key}\n id={`${lookupId}-option-${option.key}`}\n role=\"option\"\n data-index={index}\n aria-selected={option.key === selectedOption?.key ? true : false}\n aria-disabled={option.disabled === true ? true : undefined}\n className={mergeClasses(\n styles.option,\n index === highlightedIndex && styles.optionHighlighted,\n option.key === selectedOption?.key && styles.optionSelected,\n option.disabled && styles.optionDisabled\n )}\n onClick={() => handleSelectOption(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n {option.icon && (\n <span className={styles.optionIcon}>{option.icon}</span>\n )}\n <span className={styles.optionContent}>\n <span className={styles.optionText}>{option.text}</span>\n {option.secondaryText && (\n <span className={styles.optionSecondaryText}>\n {option.secondaryText}\n </span>\n )}\n {isExpanded && hasDetails && (\n <div className={styles.optionDetails}>\n {option.details!.map((detail, detailIndex) => (\n <div key={detailIndex} className={styles.optionDetailRow}>\n {detail.label && (\n <span className={styles.optionDetailLabel}>\n {detail.label}:\n </span>\n )}\n <span className={styles.optionDetailValue}>\n {detail.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </span>\n {hasDetails && (\n <span\n role=\"button\"\n tabIndex={-1}\n className={mergeClasses(\n styles.optionExpandButton,\n isExpanded && styles.optionExpandButtonExpanded\n )}\n onClick={handleExpandClick}\n aria-label={isExpanded ? 'Collapse details' : 'Expand details'}\n >\n <ChevronDownRegular />\n </span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n )}\n {footer && (\n <div className={styles.footerWrapper}>\n <div className={styles.footer}>{footer}</div>\n </div>\n )}\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n};\n\nLookup.displayName = 'Lookup';\n","import { makeStyles, mergeClasses, tokens } from '@fluentui/react-components';\n\n/** Grid with 4th column for \"between\" value2 input */\nconst gridWithBetween = 'minmax(0, 1.6fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) auto';\n/** Grid without 4th column (standard 3-column + actions) */\nconst gridWithoutBetween = 'minmax(0, 1.6fr) minmax(0, 1fr) minmax(0, 1fr) auto';\n\n/** Tree connector column width */\nconst treeConnectorWidth = '24px';\n\nexport { mergeClasses };\n\nexport const useQueryBuilderStyles = makeStyles({\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: tokens.spacingVerticalXS,\n width: '100%',\n backgroundColor: tokens.colorNeutralBackground1,\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n overflow: 'hidden',\n },\n headerRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: tokens.spacingVerticalS,\n paddingBottom: tokens.spacingVerticalS,\n paddingLeft: tokens.spacingHorizontalM,\n paddingRight: tokens.spacingHorizontalM,\n borderBottom: `1px solid ${tokens.colorNeutralStroke2}`,\n },\n headerTitle: {\n color: tokens.colorNeutralForeground1,\n fontSize: tokens.fontSizeBase400,\n },\n toolbar: {\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'center',\n gap: tokens.spacingHorizontalM,\n flexWrap: 'wrap',\n paddingTop: tokens.spacingVerticalXS,\n paddingBottom: tokens.spacingVerticalXS,\n paddingLeft: tokens.spacingHorizontalM,\n paddingRight: tokens.spacingHorizontalM,\n },\n toolbarGroup: {\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacingHorizontalS,\n flexWrap: 'wrap',\n },\n caption: {\n color: tokens.colorNeutralForeground2,\n fontSize: tokens.fontSizeBase200,\n },\n groupsContainer: {\n display: 'flex',\n flexDirection: 'column',\n paddingLeft: tokens.spacingHorizontalM,\n paddingRight: tokens.spacingHorizontalM,\n paddingBottom: tokens.spacingVerticalM,\n minWidth: 0,\n overflow: 'hidden',\n },\n rootLogicRow: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: tokens.spacingVerticalXS,\n },\n rootLogicSelect: {\n width: '70px',\n },\n /** Grid row for each group: [connector] [card] */\n groupTreeRow: {\n display: 'grid',\n gridTemplateColumns: `${treeConnectorWidth} minmax(0, 1fr)`,\n minHeight: '32px',\n },\n /** Tree connector cell - draws vertical + horizontal lines */\n treeConnector: {\n position: 'relative',\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'flex-end',\n paddingTop: '16px',\n },\n /** Vertical line extending full height of connector cell */\n treeConnectorLine: {\n position: 'absolute',\n left: '8px',\n top: 0,\n bottom: 0,\n width: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n /** Horizontal branch from vertical line to content */\n treeConnectorBranch: {\n position: 'absolute',\n left: '8px',\n top: '16px',\n width: '14px',\n height: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n /** Hide vertical line below for last item */\n treeConnectorLast: {\n ':after': {\n content: '\"\"',\n position: 'absolute',\n left: '8px',\n top: '17px',\n bottom: 0,\n width: '1px',\n backgroundColor: tokens.colorNeutralBackground1,\n },\n },\n groupCard: {\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: tokens.colorNeutralBackground2,\n padding: tokens.spacingHorizontalS,\n display: 'flex',\n flexDirection: 'column',\n marginBottom: tokens.spacingVerticalS,\n minWidth: 0,\n overflow: 'hidden',\n },\n groupHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: tokens.spacingHorizontalS,\n flexWrap: 'wrap',\n borderBottom: `1px solid ${tokens.colorNeutralStroke2}`,\n paddingBottom: tokens.spacingVerticalXS,\n marginBottom: tokens.spacingVerticalS,\n },\n groupHeaderLeft: {\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacingHorizontalS,\n },\n groupLogicSelect: {\n minWidth: '92px',\n },\n groupHeaderRight: {\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacingHorizontalXS,\n },\n /** Conditions list inside group card */\n conditionsList: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n overflow: 'hidden',\n },\n /** Grid row for each condition: [connector] [row content] */\n conditionTreeRow: {\n display: 'grid',\n gridTemplateColumns: `${treeConnectorWidth} minmax(0, 1fr)`,\n minHeight: '36px',\n alignItems: 'center',\n },\n /** Inner connector for conditions within a group */\n conditionConnector: {\n position: 'relative',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n },\n conditionConnectorLine: {\n position: 'absolute',\n left: '8px',\n top: 0,\n bottom: 0,\n width: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n conditionConnectorBranch: {\n position: 'absolute',\n left: '8px',\n top: '50%',\n width: '14px',\n height: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n conditionConnectorLast: {\n ':after': {\n content: '\"\"',\n position: 'absolute',\n left: '8px',\n top: '50%',\n bottom: 0,\n width: '1px',\n backgroundColor: tokens.colorNeutralBackground2,\n },\n },\n columnHeaderRow: {\n display: 'grid',\n gridTemplateColumns: gridWithoutBetween,\n gap: tokens.spacingHorizontalS,\n alignItems: 'center',\n minWidth: 0,\n color: tokens.colorNeutralForeground3,\n fontSize: tokens.fontSizeBase200,\n fontWeight: tokens.fontWeightRegular,\n paddingLeft: tokens.spacingHorizontalXS,\n paddingRight: tokens.spacingHorizontalXS,\n marginBottom: tokens.spacingVerticalXS,\n },\n columnHeaderRowWithBetween: {\n gridTemplateColumns: gridWithBetween,\n },\n headerField: {},\n headerOperator: {},\n headerValue: {},\n headerAnd: {},\n headerRemove: {},\n rowGrid: {\n display: 'grid',\n gridTemplateColumns: gridWithoutBetween,\n gap: tokens.spacingHorizontalS,\n alignItems: 'center',\n minWidth: 0,\n backgroundColor: tokens.colorNeutralBackground1,\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n padding: tokens.spacingHorizontalXS,\n boxSizing: 'border-box',\n },\n rowGridWithBetween: {\n gridTemplateColumns: gridWithBetween,\n },\n fieldCell: {},\n operatorCell: {},\n valueCell: {},\n andCell: {},\n compactControl: {\n width: '100%',\n minWidth: 0,\n },\n optionsetListbox: {\n maxHeight: '300px',\n minWidth: 'fit-content',\n },\n removeCell: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n /** Add button row */\n addButtonRow: {\n display: 'grid',\n gridTemplateColumns: `${treeConnectorWidth} auto 1fr`,\n minHeight: '36px',\n alignItems: 'center',\n marginTop: tokens.spacingVerticalXS,\n },\n addButtonConnector: {\n position: 'relative',\n height: '100%',\n },\n addButtonConnectorLine: {\n position: 'absolute',\n left: '8px',\n top: 0,\n height: '50%',\n width: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n addButtonConnectorBranch: {\n position: 'absolute',\n left: '8px',\n top: '50%',\n width: '14px',\n height: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n transform: 'translateY(-50%)',\n },\n menuGlyph: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '14px',\n color: tokens.colorNeutralForeground2,\n },\n /** Bottom-level add row for adding groups/related entities */\n bottomAddRow: {\n display: 'grid',\n gridTemplateColumns: `${treeConnectorWidth} auto 1fr`,\n minHeight: '36px',\n alignItems: 'center',\n },\n bottomAddConnector: {\n position: 'relative',\n height: '100%',\n },\n bottomAddConnectorLine: {\n position: 'absolute',\n left: '8px',\n top: 0,\n height: '50%',\n width: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n bottomAddConnectorBranch: {\n position: 'absolute',\n left: '8px',\n top: '50%',\n width: '14px',\n height: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n transform: 'translateY(-50%)',\n },\n previewCard: {\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: tokens.colorNeutralBackground1,\n padding: tokens.spacingHorizontalS,\n marginTop: tokens.spacingVerticalS,\n marginLeft: tokens.spacingHorizontalM,\n marginRight: tokens.spacingHorizontalM,\n marginBottom: tokens.spacingVerticalM,\n },\n previewHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n conditionInvalid: {\n backgroundColor: tokens.colorPaletteRedBackground1,\n borderRadius: tokens.borderRadiusSmall,\n },\n validationIcon: {\n marginRight: tokens.spacingHorizontalXS,\n },\n validationSuccess: {\n color: tokens.colorPaletteGreenForeground1,\n },\n validationError: {\n color: tokens.colorPaletteDarkOrangeForeground1,\n },\n validationErrorList: {\n margin: 0,\n paddingLeft: tokens.spacingHorizontalL,\n listStyleType: 'disc',\n },\n validationErrorItem: {\n marginBottom: tokens.spacingVerticalXS,\n },\n apiValidationSection: {\n borderTop: `1px solid ${tokens.colorNeutralStroke2}`,\n paddingTop: tokens.spacingVerticalM,\n },\n apiUnavailable: {\n color: tokens.colorNeutralForeground3,\n fontStyle: 'italic',\n marginTop: tokens.spacingVerticalXS,\n },\n previewCode: {\n display: 'block',\n fontSize: tokens.fontSizeBase200,\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap',\n fontFamily: 'monospace',\n color: tokens.colorNeutralForeground2,\n marginTop: tokens.spacingVerticalXS,\n },\n loadingWrap: {\n display: 'flex',\n justifyContent: 'center',\n paddingTop: tokens.spacingVerticalXL,\n paddingBottom: tokens.spacingVerticalXL,\n },\n // Related entity nested card styles\n relatedEntityCard: {\n border: `1px solid ${tokens.colorBrandStroke1}`,\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: tokens.colorNeutralBackground3,\n padding: tokens.spacingHorizontalS,\n marginTop: tokens.spacingVerticalXS,\n marginBottom: tokens.spacingVerticalS,\n },\n relatedEntityHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: tokens.spacingHorizontalS,\n },\n relatedEntityHeaderLeft: {\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacingHorizontalS,\n flexWrap: 'wrap',\n },\n relatedEntityLabel: {\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorBrandForeground1,\n fontWeight: tokens.fontWeightSemibold,\n },\n relatedEntityDropdown: {\n width: '100%',\n marginTop: tokens.spacingVerticalXS,\n marginBottom: tokens.spacingVerticalXS,\n },\n nestedLogicDropdown: {\n width: '80px',\n marginBottom: tokens.spacingVerticalXS,\n },\n relatedEntityConditions: {\n display: 'flex',\n flexDirection: 'column',\n gap: tokens.spacingVerticalXS,\n },\n nestedConditionHeader: {\n display: 'grid',\n gridTemplateColumns: gridWithoutBetween,\n gap: tokens.spacingHorizontalS,\n alignItems: 'center',\n color: tokens.colorNeutralForeground3,\n fontSize: tokens.fontSizeBase200,\n fontWeight: tokens.fontWeightRegular,\n paddingLeft: tokens.spacingHorizontalXS,\n paddingRight: tokens.spacingHorizontalXS,\n marginBottom: tokens.spacingVerticalXS,\n },\n nestedConditionRow: {\n display: 'grid',\n gridTemplateColumns: gridWithoutBetween,\n gap: tokens.spacingHorizontalS,\n alignItems: 'center',\n minHeight: '32px',\n backgroundColor: tokens.colorNeutralBackground1,\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n padding: tokens.spacingHorizontalXS,\n boxSizing: 'border-box',\n },\n nestedConditionRowWithBetween: {\n gridTemplateColumns: gridWithBetween,\n },\n relatedEntityAddRow: {\n paddingTop: tokens.spacingVerticalXS,\n },\n});\n","/**\n * QueryBuilder Operators\n * \n * Based on Microsoft Dynamics 365 FetchXML condition operators.\n * Reference: FetchXMLBuilder by Jonas Rapp (https://github.com/rappen/FetchXMLBuilder)\n */\n\nimport type { QueryBuilderDataType } from './QueryBuilder.types';\n\nexport interface OperatorDefinition {\n /** FetchXML operator value (e.g., 'eq', 'like', 'last-x-days') */\n value: string;\n /** Display label for UI */\n label: string;\n /** Whether operator requires a value */\n requiresValue: boolean;\n /** Whether operator requires a second value (e.g., between) */\n requiresValue2?: boolean;\n /** Whether operator accepts multiple values (e.g., in, not-in) */\n multipleValues?: boolean;\n /** Value type expected (number for X-days operators, date for on/on-or-before) */\n valueType?: 'number' | 'date' | 'string' | 'same';\n /** OData equivalent operator or function */\n odataOperator?: string;\n /** If true, this is a FetchXML-only operator with no OData equivalent */\n fetchXmlOnly?: boolean;\n /** Category for grouping in UI */\n category?: 'comparison' | 'text' | 'null' | 'date' | 'relative-date' | 'user-context' | 'hierarchy' | 'multi-value';\n}\n\n/**\n * All FetchXML condition operators supported by Dynamics 365\n */\nexport const ALL_OPERATORS: Record<string, OperatorDefinition> = {\n // === Comparison Operators (all types) ===\n 'eq': {\n value: 'eq',\n label: 'Equals',\n requiresValue: true,\n odataOperator: 'eq',\n category: 'comparison',\n },\n 'ne': {\n value: 'ne',\n label: 'Does Not Equal',\n requiresValue: true,\n odataOperator: 'ne',\n category: 'comparison',\n },\n 'gt': {\n value: 'gt',\n label: 'Greater Than',\n requiresValue: true,\n odataOperator: 'gt',\n category: 'comparison',\n },\n 'ge': {\n value: 'ge',\n label: 'Greater Than Or Equal',\n requiresValue: true,\n odataOperator: 'ge',\n category: 'comparison',\n },\n 'lt': {\n value: 'lt',\n label: 'Less Than',\n requiresValue: true,\n odataOperator: 'lt',\n category: 'comparison',\n },\n 'le': {\n value: 'le',\n label: 'Less Than Or Equal',\n requiresValue: true,\n odataOperator: 'le',\n category: 'comparison',\n },\n\n // === Null Operators (all types) ===\n 'null': {\n value: 'null',\n label: 'Is Empty',\n requiresValue: false,\n odataOperator: 'eq null',\n category: 'null',\n },\n 'not-null': {\n value: 'not-null',\n label: 'Has Value',\n requiresValue: false,\n odataOperator: 'ne null',\n category: 'null',\n },\n\n // === Text/String Operators ===\n 'like': {\n value: 'like',\n label: 'Like (Wildcard)',\n requiresValue: true,\n valueType: 'string',\n fetchXmlOnly: true, // OData uses functions\n category: 'text',\n },\n 'not-like': {\n value: 'not-like',\n label: 'Not Like (Wildcard)',\n requiresValue: true,\n valueType: 'string',\n fetchXmlOnly: true,\n category: 'text',\n },\n 'begins-with': {\n value: 'begins-with',\n label: 'Begins With',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'startswith',\n category: 'text',\n },\n 'not-begin-with': {\n value: 'not-begin-with',\n label: 'Does Not Begin With',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'not startswith',\n category: 'text',\n },\n 'ends-with': {\n value: 'ends-with',\n label: 'Ends With',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'endswith',\n category: 'text',\n },\n 'not-end-with': {\n value: 'not-end-with',\n label: 'Does Not End With',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'not endswith',\n category: 'text',\n },\n 'contains': {\n value: 'contains',\n label: 'Contains',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'contains',\n category: 'text',\n },\n 'not-contain': {\n value: 'not-contain',\n label: 'Does Not Contain',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'not contains',\n category: 'text',\n },\n\n // === Multi-Value Operators ===\n 'in': {\n value: 'in',\n label: 'Is One Of',\n requiresValue: true,\n multipleValues: true,\n odataOperator: 'in',\n category: 'multi-value',\n },\n 'not-in': {\n value: 'not-in',\n label: 'Is Not One Of',\n requiresValue: true,\n multipleValues: true,\n fetchXmlOnly: true, // OData requires multiple ne conditions\n category: 'multi-value',\n },\n 'between': {\n value: 'between',\n label: 'Between',\n requiresValue: true,\n requiresValue2: true,\n multipleValues: true,\n fetchXmlOnly: true, // OData uses ge/le combination\n category: 'multi-value',\n },\n 'not-between': {\n value: 'not-between',\n label: 'Not Between',\n requiresValue: true,\n requiresValue2: true,\n multipleValues: true,\n fetchXmlOnly: true,\n category: 'multi-value',\n },\n\n // === Multi-Select Picklist Operators ===\n 'contain-values': {\n value: 'contain-values',\n label: 'Contains Values',\n requiresValue: true,\n multipleValues: true,\n fetchXmlOnly: true,\n category: 'multi-value',\n },\n 'not-contain-values': {\n value: 'not-contain-values',\n label: 'Does Not Contain Values',\n requiresValue: true,\n multipleValues: true,\n fetchXmlOnly: true,\n category: 'multi-value',\n },\n\n // === Date Comparison Operators ===\n 'on': {\n value: 'on',\n label: 'On',\n requiresValue: true,\n valueType: 'date',\n odataOperator: 'eq',\n category: 'date',\n },\n 'on-or-before': {\n value: 'on-or-before',\n label: 'On Or Before',\n requiresValue: true,\n valueType: 'date',\n odataOperator: 'le',\n category: 'date',\n },\n 'on-or-after': {\n value: 'on-or-after',\n label: 'On Or After',\n requiresValue: true,\n valueType: 'date',\n odataOperator: 'ge',\n category: 'date',\n },\n 'not-on': {\n value: 'not-on',\n label: 'Not On',\n requiresValue: true,\n valueType: 'date',\n odataOperator: 'ne',\n category: 'date',\n },\n\n // === Relative Date Operators (no value required) ===\n 'today': {\n value: 'today',\n label: 'Today',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'yesterday': {\n value: 'yesterday',\n label: 'Yesterday',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'tomorrow': {\n value: 'tomorrow',\n label: 'Tomorrow',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'this-week': {\n value: 'this-week',\n label: 'This Week',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-week': {\n value: 'last-week',\n label: 'Last Week',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-week': {\n value: 'next-week',\n label: 'Next Week',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'this-month': {\n value: 'this-month',\n label: 'This Month',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-month': {\n value: 'last-month',\n label: 'Last Month',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-month': {\n value: 'next-month',\n label: 'Next Month',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'this-year': {\n value: 'this-year',\n label: 'This Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-year': {\n value: 'last-year',\n label: 'Last Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-year': {\n value: 'next-year',\n label: 'Next Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-seven-days': {\n value: 'last-seven-days',\n label: 'Last 7 Days',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-seven-days': {\n value: 'next-seven-days',\n label: 'Next 7 Days',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n\n // === Relative Date Operators with X Value ===\n 'last-x-hours': {\n value: 'last-x-hours',\n label: 'Last X Hours',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-hours': {\n value: 'next-x-hours',\n label: 'Next X Hours',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-days': {\n value: 'last-x-days',\n label: 'Last X Days',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-days': {\n value: 'next-x-days',\n label: 'Next X Days',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-weeks': {\n value: 'last-x-weeks',\n label: 'Last X Weeks',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-weeks': {\n value: 'next-x-weeks',\n label: 'Next X Weeks',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-months': {\n value: 'last-x-months',\n label: 'Last X Months',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-months': {\n value: 'next-x-months',\n label: 'Next X Months',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-years': {\n value: 'last-x-years',\n label: 'Last X Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-years': {\n value: 'next-x-years',\n label: 'Next X Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-minutes': {\n value: 'olderthan-x-minutes',\n label: 'Older Than X Minutes',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-hours': {\n value: 'olderthan-x-hours',\n label: 'Older Than X Hours',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-days': {\n value: 'olderthan-x-days',\n label: 'Older Than X Days',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-weeks': {\n value: 'olderthan-x-weeks',\n label: 'Older Than X Weeks',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-months': {\n value: 'olderthan-x-months',\n label: 'Older Than X Months',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-years': {\n value: 'olderthan-x-years',\n label: 'Older Than X Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n\n // === Fiscal Period Operators ===\n 'this-fiscal-year': {\n value: 'this-fiscal-year',\n label: 'This Fiscal Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'this-fiscal-period': {\n value: 'this-fiscal-period',\n label: 'This Fiscal Period',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-fiscal-year': {\n value: 'last-fiscal-year',\n label: 'Last Fiscal Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-fiscal-period': {\n value: 'last-fiscal-period',\n label: 'Last Fiscal Period',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-fiscal-year': {\n value: 'next-fiscal-year',\n label: 'Next Fiscal Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-fiscal-period': {\n value: 'next-fiscal-period',\n label: 'Next Fiscal Period',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-fiscal-years': {\n value: 'last-x-fiscal-years',\n label: 'Last X Fiscal Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-fiscal-periods': {\n value: 'last-x-fiscal-periods',\n label: 'Last X Fiscal Periods',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-fiscal-years': {\n value: 'next-x-fiscal-years',\n label: 'Next X Fiscal Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-fiscal-periods': {\n value: 'next-x-fiscal-periods',\n label: 'Next X Fiscal Periods',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-fiscal-year': {\n value: 'in-fiscal-year',\n label: 'In Fiscal Year',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-fiscal-period': {\n value: 'in-fiscal-period',\n label: 'In Fiscal Period',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-fiscal-period-and-year': {\n value: 'in-fiscal-period-and-year',\n label: 'In Fiscal Period And Year',\n requiresValue: true,\n requiresValue2: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-or-before-fiscal-period-and-year': {\n value: 'in-or-before-fiscal-period-and-year',\n label: 'In Or Before Fiscal Period And Year',\n requiresValue: true,\n requiresValue2: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-or-after-fiscal-period-and-year': {\n value: 'in-or-after-fiscal-period-and-year',\n label: 'In Or After Fiscal Period And Year',\n requiresValue: true,\n requiresValue2: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n\n // === User Context Operators ===\n 'eq-userid': {\n value: 'eq-userid',\n label: 'Equals Current User',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'ne-userid': {\n value: 'ne-userid',\n label: 'Does Not Equal Current User',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-userteams': {\n value: 'eq-userteams',\n label: 'Equals Current User Teams',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-useroruserteams': {\n value: 'eq-useroruserteams',\n label: 'Equals Current User Or User Teams',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-useroruserhierarchy': {\n value: 'eq-useroruserhierarchy',\n label: 'Equals Current User Or User Hierarchy',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-useroruserhierarchyandteams': {\n value: 'eq-useroruserhierarchyandteams',\n label: 'Equals Current User Or User Hierarchy And Teams',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-businessid': {\n value: 'eq-businessid',\n label: 'Equals Current Business Unit',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'ne-businessid': {\n value: 'ne-businessid',\n label: 'Does Not Equal Current Business Unit',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-userlanguage': {\n value: 'eq-userlanguage',\n label: 'Equals Current User Language',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n\n // === Hierarchy Operators ===\n 'above': {\n value: 'above',\n label: 'Above',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n 'eq-or-above': {\n value: 'eq-or-above',\n label: 'Above Or Equal',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n 'under': {\n value: 'under',\n label: 'Under',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n 'eq-or-under': {\n value: 'eq-or-under',\n label: 'Under Or Equal',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n 'not-under': {\n value: 'not-under',\n label: 'Not Under',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n};\n\n/**\n * Get operators available for a specific data type\n */\nexport const getOperatorsForType = (dataType: QueryBuilderDataType): OperatorDefinition[] => {\n // Base operators available for all types\n const base: OperatorDefinition[] = [\n ALL_OPERATORS['eq'],\n ALL_OPERATORS['ne'],\n ALL_OPERATORS['null'],\n ALL_OPERATORS['not-null'],\n ];\n\n switch (dataType) {\n case 'string':\n return [\n // Text-specific operators first\n ALL_OPERATORS['contains'],\n ALL_OPERATORS['not-contain'],\n ALL_OPERATORS['begins-with'],\n ALL_OPERATORS['not-begin-with'],\n ALL_OPERATORS['ends-with'],\n ALL_OPERATORS['not-end-with'],\n ALL_OPERATORS['like'],\n ALL_OPERATORS['not-like'],\n ...base,\n ];\n\n case 'number':\n return [\n ALL_OPERATORS['gt'],\n ALL_OPERATORS['ge'],\n ALL_OPERATORS['lt'],\n ALL_OPERATORS['le'],\n ALL_OPERATORS['between'],\n ALL_OPERATORS['not-between'],\n ...base,\n ALL_OPERATORS['in'],\n ALL_OPERATORS['not-in'],\n ];\n\n case 'datetime':\n return [\n // Comparison\n ALL_OPERATORS['on'],\n ALL_OPERATORS['on-or-before'],\n ALL_OPERATORS['on-or-after'],\n ALL_OPERATORS['not-on'],\n ALL_OPERATORS['gt'],\n ALL_OPERATORS['ge'],\n ALL_OPERATORS['lt'],\n ALL_OPERATORS['le'],\n ALL_OPERATORS['between'],\n ALL_OPERATORS['not-between'],\n ...base,\n // Relative dates (no value)\n ALL_OPERATORS['today'],\n ALL_OPERATORS['yesterday'],\n ALL_OPERATORS['tomorrow'],\n ALL_OPERATORS['this-week'],\n ALL_OPERATORS['last-week'],\n ALL_OPERATORS['next-week'],\n ALL_OPERATORS['this-month'],\n ALL_OPERATORS['last-month'],\n ALL_OPERATORS['next-month'],\n ALL_OPERATORS['this-year'],\n ALL_OPERATORS['last-year'],\n ALL_OPERATORS['next-year'],\n ALL_OPERATORS['last-seven-days'],\n ALL_OPERATORS['next-seven-days'],\n // Relative dates (with X value)\n ALL_OPERATORS['last-x-hours'],\n ALL_OPERATORS['next-x-hours'],\n ALL_OPERATORS['last-x-days'],\n ALL_OPERATORS['next-x-days'],\n ALL_OPERATORS['last-x-weeks'],\n ALL_OPERATORS['next-x-weeks'],\n ALL_OPERATORS['last-x-months'],\n ALL_OPERATORS['next-x-months'],\n ALL_OPERATORS['last-x-years'],\n ALL_OPERATORS['next-x-years'],\n ALL_OPERATORS['older-than-x-minutes'],\n ALL_OPERATORS['older-than-x-hours'],\n ALL_OPERATORS['older-than-x-days'],\n ALL_OPERATORS['older-than-x-weeks'],\n ALL_OPERATORS['older-than-x-months'],\n ALL_OPERATORS['older-than-x-years'],\n // Fiscal periods\n ALL_OPERATORS['this-fiscal-year'],\n ALL_OPERATORS['this-fiscal-period'],\n ALL_OPERATORS['last-fiscal-year'],\n ALL_OPERATORS['last-fiscal-period'],\n ALL_OPERATORS['next-fiscal-year'],\n ALL_OPERATORS['next-fiscal-period'],\n ALL_OPERATORS['last-x-fiscal-years'],\n ALL_OPERATORS['last-x-fiscal-periods'],\n ALL_OPERATORS['next-x-fiscal-years'],\n ALL_OPERATORS['next-x-fiscal-periods'],\n ALL_OPERATORS['in-fiscal-year'],\n ALL_OPERATORS['in-fiscal-period'],\n ALL_OPERATORS['in-fiscal-period-and-year'],\n ALL_OPERATORS['in-or-before-fiscal-period-and-year'],\n ALL_OPERATORS['in-or-after-fiscal-period-and-year'],\n ];\n\n case 'boolean':\n return base;\n\n case 'optionset':\n return [\n ...base,\n ALL_OPERATORS['in'],\n ALL_OPERATORS['not-in'],\n ];\n\n case 'lookup':\n return [\n ...base,\n ALL_OPERATORS['in'],\n ALL_OPERATORS['not-in'],\n // User context operators for owner/lookup fields\n ALL_OPERATORS['eq-userid'],\n ALL_OPERATORS['ne-userid'],\n ALL_OPERATORS['eq-userteams'],\n ALL_OPERATORS['eq-useroruserteams'],\n ALL_OPERATORS['eq-useroruserhierarchy'],\n ALL_OPERATORS['eq-useroruserhierarchyandteams'],\n ALL_OPERATORS['eq-businessid'],\n ALL_OPERATORS['ne-businessid'],\n // Hierarchy operators\n ALL_OPERATORS['above'],\n ALL_OPERATORS['eq-or-above'],\n ALL_OPERATORS['under'],\n ALL_OPERATORS['eq-or-under'],\n ALL_OPERATORS['not-under'],\n ];\n\n default:\n return base;\n }\n};\n\n/**\n * Get operator definition by value\n */\nexport const getOperatorByValue = (value: string): OperatorDefinition | undefined => {\n return ALL_OPERATORS[value];\n};\n\n/**\n * Check if an operator requires a value input\n */\nexport const operatorRequiresValue = (operator: string): boolean => {\n // Handle legacy aliases\n const legacyAliases: Record<string, string> = {\n 'notnull': 'not-null',\n 'startswith': 'begins-with',\n 'endswith': 'ends-with',\n 'notcontains': 'not-contain',\n };\n const normalized = legacyAliases[operator] || operator;\n const def = ALL_OPERATORS[normalized];\n return def?.requiresValue ?? true;\n};\n\n/**\n * Check if an operator accepts multiple values\n */\nexport const operatorIsMultiValue = (operator: string): boolean => {\n const def = ALL_OPERATORS[operator];\n return def?.multipleValues ?? false;\n};\n\n/**\n * Check if an operator requires a second value\n */\nexport const operatorRequiresValue2 = (operator: string): boolean => {\n const def = ALL_OPERATORS[operator];\n return def?.requiresValue2 ?? false;\n};\n\n/**\n * Get the expected value type for an operator (for X-days operators, this returns 'number')\n */\nexport const getOperatorValueType = (operator: string): 'number' | 'date' | 'string' | 'same' => {\n const def = ALL_OPERATORS[operator];\n return def?.valueType ?? 'same';\n};\n\n/**\n * Check if operator is FetchXML-only (no OData equivalent)\n */\nexport const isOperatorFetchXmlOnly = (operator: string): boolean => {\n const def = ALL_OPERATORS[operator];\n return def?.fetchXmlOnly ?? false;\n};\n\n/**\n * Legacy function for backward compatibility - converts to simplified format\n */\nexport const getOperatorsForTypeSimple = (dataType: QueryBuilderDataType): Array<{ value: string; label: string }> => {\n return getOperatorsForType(dataType).map(op => ({\n value: op.value,\n label: op.label,\n }));\n};\n","/**\n * QueryBuilder Serializer\n * \n * Converts QueryBuilder state to FetchXML and OData formats.\n */\n\nimport type {\n QueryBuilderCondition,\n QueryBuilderField,\n QueryBuilderState,\n QueryBuilderApplyResult,\n} from './QueryBuilder.types';\nimport { ALL_OPERATORS, getOperatorByValue } from './QueryBuilder.operators';\n\n/** Fallback field if none provided */\nconst FALLBACK_FIELD: QueryBuilderField = { id: 'name', label: 'Name', dataType: 'string' };\n\n/**\n * Escape XML special characters\n */\nexport const escapeXml = (value: string): string =>\n value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n\n/**\n * Pretty print XML with indentation\n */\nexport const prettyPrintXml = (xml: string): string => {\n const INDENT = ' ';\n let formatted = '';\n let indent = 0;\n const tokens = xml.replace(/>\\s*</g, '><').split(/(<[^>]+>)/g).filter(Boolean);\n\n for (const token of tokens) {\n if (token.startsWith('</')) {\n indent--;\n formatted += INDENT.repeat(Math.max(indent, 0)) + token + '\\n';\n } else if (token.startsWith('<') && token.endsWith('/>')) {\n formatted += INDENT.repeat(indent) + token + '\\n';\n } else if (token.startsWith('<')) {\n formatted += INDENT.repeat(indent) + token + '\\n';\n indent++;\n } else {\n formatted += INDENT.repeat(indent) + token + '\\n';\n }\n }\n\n return formatted.trim();\n};\n\n/**\n * Map internal operator names to FetchXML operator names\n */\nconst getFetchXmlOperator = (operator: string): string => {\n // Direct mapping operators\n const directMap: Record<string, string> = {\n 'eq': 'eq',\n 'ne': 'ne',\n 'gt': 'gt',\n 'ge': 'ge',\n 'lt': 'lt',\n 'le': 'le',\n 'null': 'null',\n 'notnull': 'not-null', // Legacy internal format\n 'not-null': 'not-null',\n 'in': 'in',\n 'not-in': 'not-in',\n // Legacy contains operators (converted to like)\n 'contains': 'like',\n 'notcontains': 'not-like',\n 'startswith': 'like',\n 'endswith': 'like',\n };\n\n // If it's in the direct map, use that\n if (directMap[operator]) {\n return directMap[operator];\n }\n\n // Otherwise, assume the operator IS the FetchXML operator\n return operator;\n};\n\n/**\n * Convert a single condition to FetchXML\n */\nexport const conditionToFetchXml = (\n condition: QueryBuilderCondition,\n field: QueryBuilderField\n): string => {\n // Related entity conditions are handled separately as link-entity\n if (condition.kind === 'relatedEntity') {\n return '';\n }\n\n const attr = escapeXml(condition.fieldId);\n const operatorDef = getOperatorByValue(condition.operator);\n const fetchXmlOp = getFetchXmlOperator(condition.operator);\n \n // Build entityname attribute if condition references a link-entity alias\n const entityNameAttr = condition.entityAlias ? ` entityname=\"${escapeXml(condition.entityAlias)}\"` : '';\n\n // Null operators - no value needed\n if (condition.operator === 'null' || condition.operator === 'not-null' || condition.operator === 'notnull') {\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\" />`;\n }\n\n // No-value relative date operators (today, yesterday, this-week, etc.)\n if (operatorDef && !operatorDef.requiresValue) {\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\" />`;\n }\n\n // Between operator - needs two values\n if (condition.operator === 'between') {\n // FetchXML uses <value> elements for between\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"between\"><value>${escapeXml(String(condition.value ?? ''))}</value><value>${escapeXml(String(condition.value2 ?? ''))}</value></condition>`;\n }\n\n // Not-between operator\n if (condition.operator === 'not-between') {\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"not-between\"><value>${escapeXml(String(condition.value ?? ''))}</value><value>${escapeXml(String(condition.value2 ?? ''))}</value></condition>`;\n }\n\n // Multi-value operators (in, not-in, contain-values, etc.)\n if (operatorDef?.multipleValues && (condition.operator === 'in' || condition.operator === 'not-in' ||\n condition.operator === 'contain-values' || condition.operator === 'not-contain-values')) {\n const values = Array.isArray(condition.value) ? condition.value : [condition.value];\n const valueElements = values\n .filter(v => v !== undefined && v !== null && String(v) !== '')\n .map(v => `<value>${escapeXml(String(v))}</value>`)\n .join('');\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\">${valueElements}</condition>`;\n }\n\n // Fiscal period and year operators with two values\n if (condition.operator === 'in-fiscal-period-and-year' ||\n condition.operator === 'in-or-before-fiscal-period-and-year' ||\n condition.operator === 'in-or-after-fiscal-period-and-year') {\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\"><value>${escapeXml(String(condition.value ?? ''))}</value><value>${escapeXml(String(condition.value2 ?? ''))}</value></condition>`;\n }\n\n // Standard value-based operators\n let value = condition.value;\n\n // Boolean conversion\n if (field.dataType === 'boolean') {\n value = value === true || value === 'true' || value === 1 || value === '1' ? '1' : '0';\n }\n\n // Legacy contains/startswith/endswith using LIKE pattern\n if (condition.operator === 'contains' || condition.operator === 'notcontains') {\n value = `%${value}%`;\n }\n if (condition.operator === 'startswith') {\n value = `${value}%`;\n }\n if (condition.operator === 'endswith') {\n value = `%${value}`;\n }\n\n // Include uiname/uitype for lookup fields with display name\n if (field.dataType === 'lookup' && condition.valueDisplayName) {\n const uitype = field.targets?.[0]?.entityLogicalName || '';\n const uinameAttr = ` uiname=\"${escapeXml(condition.valueDisplayName)}\"`;\n const uitypeAttr = uitype ? ` uitype=\"${escapeXml(uitype)}\"` : '';\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\" value=\"${escapeXml(String(value ?? ''))}\"${uinameAttr}${uitypeAttr} />`;\n }\n\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\" value=\"${escapeXml(String(value ?? ''))}\" />`;\n};\n\n/**\n * Generate link-entity XML for related entity conditions\n */\nexport const relatedEntityToLinkEntity = (\n condition: QueryBuilderCondition,\n defaultField: QueryBuilderField\n): string => {\n if (condition.kind !== 'relatedEntity' || !condition.relatedEntityTarget) {\n return '';\n }\n\n const targetEntityName = escapeXml(condition.relatedEntityTarget);\n const lookupField = escapeXml(condition.relatedEntityName || '');\n // Use provided alias or generate one from lookup field name\n const alias = condition.relatedEntityAlias \n ? escapeXml(condition.relatedEntityAlias) \n : `related_${lookupField}`;\n const fromField = `${targetEntityName}id`;\n const toField = lookupField;\n\n // Build nested filter from nestedConditions\n let nestedFilterXml = '';\n if (condition.nestedConditions && condition.nestedConditions.length > 0) {\n const nestedFields = condition.nestedFields || [];\n const nestedConditionsXml = condition.nestedConditions\n .map((nestedCond) => {\n const nestedField = nestedFields.find((f) => f.id === nestedCond.fieldId) || defaultField;\n return conditionToFetchXml(nestedCond, nestedField);\n })\n .filter(Boolean)\n .join('');\n\n if (nestedConditionsXml) {\n nestedFilterXml = `<filter type=\"${condition.nestedLogic || 'and'}\">${nestedConditionsXml}</filter>`;\n }\n }\n\n return `<link-entity name=\"${targetEntityName}\" from=\"${fromField}\" to=\"${toField}\" link-type=\"inner\" alias=\"${alias}\">${nestedFilterXml}</link-entity>`;\n};\n\n/**\n * Quote a value for OData based on field data type\n */\nconst quoteODataValue = (val: any, field: QueryBuilderField): string => {\n const isLookup = field.dataType === 'lookup';\n\n if (field.dataType === 'number') return String(val ?? 0);\n if (field.dataType === 'optionset') return String(parseInt(val, 10) || 0);\n if (field.dataType === 'boolean') return val === true || val === 'true' || val === 1 || val === '1' ? 'true' : 'false';\n if (isLookup) {\n // Lookup GUIDs are not quoted in OData v4\n return String(val ?? '');\n }\n if (field.dataType === 'datetime') {\n const dateVal = String(val ?? '');\n if (dateVal.match(/^\\d{4}-\\d{2}-\\d{2}/)) {\n return dateVal.includes('T') ? dateVal : `${dateVal}T00:00:00Z`;\n }\n const parsed = new Date(dateVal);\n return !isNaN(parsed.getTime()) ? parsed.toISOString() : dateVal;\n }\n return `'${String(val ?? '').replace(/'/g, \"''\")}'`;\n};\n\n/**\n * Convert a single condition to OData filter\n */\nexport const conditionToOData = (condition: QueryBuilderCondition, field: QueryBuilderField): string => {\n // Related entity conditions are handled separately\n if (condition.kind === 'relatedEntity') {\n return '';\n }\n\n const isLookup = field.dataType === 'lookup';\n const odataFieldName = isLookup ? `_${condition.fieldId}_value` : condition.fieldId;\n const quote = (val: any) => quoteODataValue(val, field);\n // Helper to always quote as string (for string functions like contains/startswith/endswith)\n const quoteAsString = (val: any) => `'${String(val ?? '').replace(/'/g, \"''\")}'`;\n const operatorDef = getOperatorByValue(condition.operator);\n\n // FetchXML-only operators cannot be converted to OData\n if (operatorDef?.fetchXmlOnly) {\n // For some operators, we can approximate\n switch (condition.operator) {\n case 'like':\n // like with wildcards - can use contains/startswith/endswith\n const likeVal = String(condition.value ?? '');\n if (likeVal.startsWith('%') && likeVal.endsWith('%')) {\n return `contains(${odataFieldName}, '${likeVal.slice(1, -1).replace(/'/g, \"''\")}')`;\n } else if (likeVal.endsWith('%')) {\n return `startswith(${odataFieldName}, '${likeVal.slice(0, -1).replace(/'/g, \"''\")}')`;\n } else if (likeVal.startsWith('%')) {\n return `endswith(${odataFieldName}, '${likeVal.slice(1).replace(/'/g, \"''\")}')`;\n }\n return `contains(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'not-like':\n const notLikeVal = String(condition.value ?? '');\n if (notLikeVal.startsWith('%') && notLikeVal.endsWith('%')) {\n return `not contains(${odataFieldName}, '${notLikeVal.slice(1, -1).replace(/'/g, \"''\")}')`;\n }\n return `not contains(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'not-in':\n // OData doesn't have \"not in\", use multiple \"ne\" conditions with \"and\"\n const values = Array.isArray(condition.value) ? condition.value : [condition.value];\n const conditions = values.filter(v => v !== undefined && v !== null).map(v => `${odataFieldName} ne ${quote(v)}`);\n return conditions.length > 1 ? `(${conditions.join(' and ')})` : conditions[0] || '';\n case 'between':\n case 'not-between':\n // between can be expressed as ge/le\n const op1 = condition.operator === 'between' ? 'ge' : 'lt';\n const op2 = condition.operator === 'between' ? 'le' : 'gt';\n const logic = condition.operator === 'between' ? 'and' : 'or';\n return `(${odataFieldName} ${op1} ${quote(condition.value)} ${logic} ${odataFieldName} ${op2} ${quote(condition.value2)})`;\n default:\n // Cannot convert - return comment\n return `/* FetchXML-only operator: ${condition.operator} */`;\n }\n }\n\n switch (condition.operator) {\n case 'eq':\n return `${odataFieldName} eq ${quote(condition.value)}`;\n case 'ne':\n return `${odataFieldName} ne ${quote(condition.value)}`;\n case 'gt':\n return `${odataFieldName} gt ${quote(condition.value)}`;\n case 'ge':\n return `${odataFieldName} ge ${quote(condition.value)}`;\n case 'lt':\n return `${odataFieldName} lt ${quote(condition.value)}`;\n case 'le':\n return `${odataFieldName} le ${quote(condition.value)}`;\n case 'null':\n case 'not-null':\n return `${odataFieldName} ${condition.operator === 'null' ? 'eq' : 'ne'} null`;\n case 'notnull': // Legacy format\n return `${odataFieldName} ne null`;\n case 'contains':\n return `contains(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'notcontains':\n case 'not-contain':\n return `not contains(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'startswith':\n case 'begins-with':\n return `startswith(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'not-begin-with':\n return `not startswith(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'endswith':\n case 'ends-with':\n return `endswith(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'not-end-with':\n return `not endswith(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'on':\n return `${odataFieldName} eq ${quote(condition.value)}`;\n case 'on-or-before':\n return `${odataFieldName} le ${quote(condition.value)}`;\n case 'on-or-after':\n return `${odataFieldName} ge ${quote(condition.value)}`;\n case 'not-on':\n return `${odataFieldName} ne ${quote(condition.value)}`;\n case 'in': {\n const inValues = Array.isArray(condition.value) ? condition.value : [condition.value];\n const quotedValues = inValues.filter(v => v !== undefined && v !== null).map(v => quote(v)).join(', ');\n return `${odataFieldName} in (${quotedValues})`;\n }\n default:\n return `${odataFieldName} eq ${quote(condition.value)}`;\n }\n};\n\n/**\n * Generate OData filter for related entity conditions\n */\nexport const relatedEntityToOData = (\n condition: QueryBuilderCondition,\n defaultField: QueryBuilderField\n): string => {\n if (condition.kind !== 'relatedEntity' || !condition.relatedEntityName) {\n return '';\n }\n\n const navigationProperty = condition.relatedEntityName;\n\n if (!condition.nestedConditions || condition.nestedConditions.length === 0) {\n return '';\n }\n\n const nestedFields = condition.nestedFields || [];\n const nestedLogic = condition.nestedLogic || 'and';\n\n const nestedFilters = condition.nestedConditions\n .map((nestedCond) => {\n const nestedField = nestedFields.find((f) => f.id === nestedCond.fieldId) || defaultField;\n const isLookup = nestedField.dataType === 'lookup';\n const fieldName = isLookup ? `_${nestedCond.fieldId}_value` : nestedCond.fieldId;\n const odataFieldName = `${navigationProperty}/${fieldName}`;\n\n // Create a virtual field for quoting purposes\n const virtualField: QueryBuilderField = { ...nestedField, id: fieldName };\n const quote = (val: any) => quoteODataValue(val, virtualField);\n\n switch (nestedCond.operator) {\n case 'eq':\n return `${odataFieldName} eq ${quote(nestedCond.value)}`;\n case 'ne':\n return `${odataFieldName} ne ${quote(nestedCond.value)}`;\n case 'gt':\n return `${odataFieldName} gt ${quote(nestedCond.value)}`;\n case 'ge':\n return `${odataFieldName} ge ${quote(nestedCond.value)}`;\n case 'lt':\n return `${odataFieldName} lt ${quote(nestedCond.value)}`;\n case 'le':\n return `${odataFieldName} le ${quote(nestedCond.value)}`;\n case 'null':\n return `${odataFieldName} eq null`;\n case 'notnull':\n case 'not-null':\n return `${odataFieldName} ne null`;\n case 'contains':\n return `contains(${odataFieldName}, ${quote(nestedCond.value)})`;\n case 'notcontains':\n case 'not-contain':\n return `not contains(${odataFieldName}, ${quote(nestedCond.value)})`;\n case 'startswith':\n case 'begins-with':\n return `startswith(${odataFieldName}, ${quote(nestedCond.value)})`;\n case 'endswith':\n case 'ends-with':\n return `endswith(${odataFieldName}, ${quote(nestedCond.value)})`;\n case 'between':\n return `(${odataFieldName} ge ${quote(nestedCond.value)} and ${odataFieldName} le ${quote(nestedCond.value2)})`;\n case 'in': {\n const values = Array.isArray(nestedCond.value) ? nestedCond.value : [nestedCond.value];\n const quotedValues = values.filter(v => v !== undefined && v !== null).map(v => quote(v)).join(', ');\n return `${odataFieldName} in (${quotedValues})`;\n }\n case 'not-in': {\n const values = Array.isArray(nestedCond.value) ? nestedCond.value : [nestedCond.value];\n const conditions = values.filter(v => v !== undefined && v !== null).map(v => `${odataFieldName} ne ${quote(v)}`);\n return conditions.length > 1 ? `(${conditions.join(' and ')})` : conditions[0] || '';\n }\n default:\n return `${odataFieldName} eq ${quote(nestedCond.value)}`;\n }\n })\n .filter(Boolean);\n\n if (nestedFilters.length === 0) {\n return '';\n }\n\n return nestedFilters.length > 1\n ? `(${nestedFilters.join(` ${nestedLogic} `)})`\n : nestedFilters[0];\n};\n\n/**\n * Serialize QueryBuilder state to FetchXML and OData\n */\nexport const serializeQueryBuilderState = (\n state: QueryBuilderState,\n fields: QueryBuilderField[],\n entityName: string,\n entitySetName?: string,\n): QueryBuilderApplyResult => {\n const defaultField = fields[0] || FALLBACK_FIELD;\n\n // Collect all link-entity elements from related entity conditions\n const linkEntities: string[] = [];\n state.groups.forEach((group) => {\n group.conditions.forEach((condition) => {\n if (condition.kind === 'relatedEntity') {\n const linkEntity = relatedEntityToLinkEntity(condition, defaultField);\n if (linkEntity) {\n linkEntities.push(linkEntity);\n }\n }\n });\n });\n\n const filterParts = state.groups.map((group) => {\n // Filter out related entity conditions (they're handled as link-entity)\n const regularConditions = group.conditions.filter((c) => c.kind !== 'relatedEntity');\n\n const conditionsXml = regularConditions\n .map((condition) => {\n const field = fields.find((candidate) => candidate.id === condition.fieldId) || defaultField;\n return conditionToFetchXml(condition, field);\n })\n .join('');\n\n return conditionsXml ? `<filter type=\"${group.logic}\">${conditionsXml}</filter>` : '';\n }).filter(Boolean);\n\n const fetchXmlFilter =\n filterParts.length > 1 ? `<filter type=\"and\">${filterParts.join('')}</filter>` : filterParts[0] || '';\n\n // Combine filters and link-entities in the entity element\n const entityContent = fetchXmlFilter + linkEntities.join('');\n const fetchXml = `<fetch version=\"1.0\"><entity name=\"${escapeXml(entityName)}\">${entityContent || '<filter type=\"and\"></filter>'}</entity></fetch>`;\n\n const odataFilter = state.groups\n .map((group) => {\n const rowFilters = group.conditions\n .map((condition) => {\n if (condition.kind === 'relatedEntity') {\n return relatedEntityToOData(condition, defaultField);\n }\n const field = fields.find((candidate) => candidate.id === condition.fieldId) || defaultField;\n return conditionToOData(condition, field);\n })\n .filter(Boolean);\n\n return rowFilters.length > 1 ? `(${rowFilters.join(` ${group.logic} `)})` : rowFilters[0] || '';\n })\n .filter(Boolean)\n .join(' and ');\n\n const odataQuery = entitySetName && odataFilter\n ? `${entitySetName}?$filter=${odataFilter}`\n : entitySetName\n ? entitySetName\n : undefined;\n\n return {\n state: JSON.parse(JSON.stringify(state)) as QueryBuilderState,\n fetchXmlFilter,\n fetchXml,\n odataFilter,\n odataQuery,\n };\n};\n","/**\n * QueryBuilder Parser\n * \n * Parses FetchXML to QueryBuilder state.\n */\n\nimport type {\n QueryBuilderCondition,\n QueryBuilderField,\n QueryBuilderGroup,\n QueryBuilderState,\n} from './QueryBuilder.types';\nimport { ALL_OPERATORS } from './QueryBuilder.operators';\n\nexport interface ParseFetchXmlResult {\n state: QueryBuilderState | null;\n error: string | null;\n}\n\n/**\n * Map FetchXML operator to internal operator format\n */\nconst parseFetchXmlOperator = (op: string): string => {\n // Check if it's a valid ALL_OPERATORS key\n if (ALL_OPERATORS[op]) {\n return op;\n }\n\n // Legacy mappings\n const legacyMap: Record<string, string> = {\n 'not-null': 'not-null',\n 'notnull': 'not-null',\n // Like patterns are handled by the parser based on value pattern\n 'like': 'like',\n 'not-like': 'not-like',\n };\n\n return legacyMap[op] || op;\n};\n\n/**\n * Create a new condition with unique ID\n */\nconst createParsedCondition = (\n attr: string,\n operator: string,\n value: string | (string | number)[],\n value2?: string | number,\n fieldMatch?: QueryBuilderField,\n valueDisplayName?: string,\n entityAlias?: string\n): QueryBuilderCondition => ({\n id: `cond_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: 'field',\n fieldId: fieldMatch?.id || attr,\n operator: operator as any,\n value,\n value2: value2 ?? '',\n ...(valueDisplayName ? { valueDisplayName } : {}),\n ...(entityAlias ? { entityAlias } : {}),\n});\n\n/**\n * Parse a single condition element from FetchXML\n */\nconst parseConditionElement = (\n condEl: Element,\n fields: QueryBuilderField[]\n): QueryBuilderCondition => {\n const attr = condEl.getAttribute('attribute') || '';\n const rawOp = condEl.getAttribute('operator') || 'eq';\n let value: string | (string | number)[] = condEl.getAttribute('value') || '';\n // Extract lookup display name from uiname attribute (used for resolved lookup values)\n const uiname = condEl.getAttribute('uiname') || undefined;\n // Extract entityname attribute (alias referencing a link-entity)\n const entityAlias = condEl.getAttribute('entityname') || undefined;\n let value2: string | number | undefined;\n\n // Handle in/not-in operators with multiple <value> child elements\n if (rawOp === 'in' || rawOp === 'not-in' || \n rawOp === 'contain-values' || rawOp === 'not-contain-values') {\n const valueElements = condEl.querySelectorAll(':scope > value');\n if (valueElements.length > 0) {\n const values: (string | number)[] = [];\n valueElements.forEach((valEl) => {\n const text = valEl.textContent || '';\n const num = Number(text);\n values.push(!isNaN(num) && text.trim() !== '' ? num : text);\n });\n value = values;\n }\n }\n\n // Handle between/not-between with two <value> elements\n if (rawOp === 'between' || rawOp === 'not-between' ||\n rawOp === 'in-fiscal-period-and-year' ||\n rawOp === 'in-or-before-fiscal-period-and-year' ||\n rawOp === 'in-or-after-fiscal-period-and-year') {\n const valueElements = condEl.querySelectorAll(':scope > value');\n if (valueElements.length >= 2) {\n const v1 = valueElements[0].textContent || '';\n const v2 = valueElements[1].textContent || '';\n const num2 = Number(v2);\n // Keep value as string (for between, first value goes in value, second in value2)\n value = v1;\n value2 = !isNaN(num2) && v2.trim() !== '' ? num2 : v2;\n }\n }\n\n // Parse the operator\n let operator = parseFetchXmlOperator(rawOp);\n\n // Handle like patterns - convert to contains/startswith/endswith for UI\n if (rawOp === 'like' && typeof value === 'string') {\n if (value.startsWith('%') && value.endsWith('%')) {\n operator = 'contains';\n value = value.slice(1, -1);\n } else if (value.endsWith('%')) {\n operator = 'begins-with';\n value = value.slice(0, -1);\n } else if (value.startsWith('%')) {\n operator = 'ends-with';\n value = value.slice(1);\n }\n // If no wildcards, keep as 'like' operator\n }\n\n if (rawOp === 'not-like' && typeof value === 'string') {\n if (value.startsWith('%') && value.endsWith('%')) {\n operator = 'not-contain';\n value = value.slice(1, -1);\n } else if (value.endsWith('%')) {\n operator = 'not-begin-with';\n value = value.slice(0, -1);\n } else if (value.startsWith('%')) {\n operator = 'not-end-with';\n value = value.slice(1);\n }\n }\n\n const field = fields.find((f) => f.id === attr);\n return createParsedCondition(attr, operator, value, value2, field, uiname, entityAlias);\n};\n\n/**\n * Parse FetchXML string to QueryBuilder state\n */\nexport const parseFetchXmlToState = (xml: string, fields: QueryBuilderField[]): ParseFetchXmlResult => {\n try {\n const trimmed = xml.trim();\n if (!trimmed) {\n return { state: null, error: 'Please enter FetchXML content.' };\n }\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(trimmed, 'application/xml');\n const parseError = doc.querySelector('parsererror');\n if (parseError) {\n const errorText = parseError.textContent || 'Unknown XML parsing error';\n return { state: null, error: `XML parsing error: ${errorText.slice(0, 200)}` };\n }\n\n const groups: QueryBuilderGroup[] = [];\n let groupCounter = 0;\n\n /**\n * Recursively process a filter element.\n * If it has direct conditions, create a group from them.\n * If it has child filters, recurse into them.\n */\n const processFilterElement = (filterEl: Element) => {\n const logic = (filterEl.getAttribute('type') || 'and').toLowerCase() as 'and' | 'or';\n const conditions: QueryBuilderCondition[] = [];\n\n // Get conditions directly under this filter (not in nested filters)\n filterEl.querySelectorAll(':scope > condition').forEach((condEl) => {\n conditions.push(parseConditionElement(condEl, fields));\n });\n\n if (conditions.length > 0) {\n groups.push({\n id: `grp_${Date.now()}_${groupCounter++}`,\n logic,\n conditions,\n });\n }\n\n // Recurse into nested filters (handles the wrapper pattern from serializer)\n const nestedFilters = filterEl.querySelectorAll(':scope > filter');\n nestedFilters.forEach((nestedFilterEl) => {\n processFilterElement(nestedFilterEl);\n });\n\n // If filter has no conditions AND no nested filters, create a default group\n if (conditions.length === 0 && nestedFilters.length === 0) {\n const defaultFieldId = fields.length > 0 ? fields[0].id : 'name';\n groups.push({\n id: `grp_${Date.now()}_${groupCounter++}`,\n logic,\n conditions: [{\n id: `cond_${Date.now()}_default`,\n kind: 'field',\n fieldId: defaultFieldId,\n operator: 'eq',\n value: '',\n }],\n });\n }\n };\n\n // Find the entity element\n const entityEl = doc.querySelector('fetch > entity, entity');\n\n if (entityEl) {\n // Find filter elements DIRECTLY under entity (not inside link-entity)\n const filterElements = entityEl.querySelectorAll(':scope > filter');\n\n // Also gather any standalone condition elements not inside a filter\n const topLevelConditions: QueryBuilderCondition[] = [];\n\n filterElements.forEach((filterEl) => {\n processFilterElement(filterEl);\n });\n\n // If no filter elements, look for conditions directly under entity\n if (filterElements.length === 0) {\n const entityConditions = entityEl.querySelectorAll(':scope > condition');\n entityConditions.forEach((condEl) => {\n topLevelConditions.push(parseConditionElement(condEl, fields));\n });\n\n if (topLevelConditions.length > 0) {\n groups.push({\n id: `grp_${Date.now()}_0`,\n logic: 'and',\n conditions: topLevelConditions,\n });\n }\n }\n\n // Parse link-entity elements for related entity conditions (direct children of entity only)\n // Each link-entity becomes its own separate group\n const linkEntities = entityEl.querySelectorAll(':scope > link-entity');\n linkEntities.forEach((linkEl, idx) => {\n const relatedEntityCondition = parseLinkEntity(linkEl, fields);\n if (relatedEntityCondition) {\n // Create a separate group for each link-entity\n groups.push({\n id: `grp_${Date.now()}_link_${idx}`,\n logic: 'and',\n conditions: [relatedEntityCondition],\n });\n }\n });\n } else {\n // No entity element - try to parse bare <filter> fragments\n const filterElements = doc.querySelectorAll('filter');\n filterElements.forEach((filterEl) => {\n processFilterElement(filterEl);\n });\n }\n\n // If still no groups, inform user no filter conditions were found\n if (groups.length === 0) {\n return {\n state: null,\n error: 'No filter conditions found in the FetchXML. The QueryBuilder imports <filter> and <condition> elements.',\n };\n }\n\n return { state: { groups }, error: null };\n } catch (err) {\n return { state: null, error: `Error parsing FetchXML: ${err instanceof Error ? err.message : 'Unknown error'}` };\n }\n};\n\n/**\n * Parse a link-entity element to a related entity condition\n */\nconst parseLinkEntity = (\n linkEl: Element,\n fields: QueryBuilderField[]\n): QueryBuilderCondition | null => {\n const targetEntityName = linkEl.getAttribute('name') || '';\n const toField = linkEl.getAttribute('to') || '';\n const alias = linkEl.getAttribute('alias') || undefined;\n\n if (!targetEntityName || !toField) {\n return null;\n }\n\n // Find nested filter/conditions\n const nestedConditions: QueryBuilderCondition[] = [];\n const filterEl = linkEl.querySelector(':scope > filter');\n \n if (filterEl) {\n filterEl.querySelectorAll(':scope > condition').forEach((condEl) => {\n nestedConditions.push(parseConditionElement(condEl, []));\n });\n }\n\n return {\n id: `rel_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: 'relatedEntity',\n fieldId: toField,\n operator: 'containsdata',\n value: '',\n relatedEntityName: toField,\n relatedEntityTarget: targetEntityName,\n relatedEntityAlias: alias,\n nestedConditions,\n nestedLogic: (filterEl?.getAttribute('type') || 'and').toLowerCase() as 'and' | 'or',\n nestedFields: [],\n };\n};\n\n/**\n * Validate FetchXML syntax (basic XML validation)\n */\nexport const validateFetchXmlSyntax = (xml: string): { valid: boolean; error?: string } => {\n try {\n const trimmed = xml.trim();\n if (!trimmed) {\n return { valid: false, error: 'Empty FetchXML' };\n }\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(trimmed, 'application/xml');\n const parseError = doc.querySelector('parsererror');\n \n if (parseError) {\n return { valid: false, error: parseError.textContent || 'XML parsing error' };\n }\n\n // Check for required elements\n const fetch = doc.querySelector('fetch');\n if (!fetch) {\n return { valid: false, error: 'Missing <fetch> element' };\n }\n\n const entity = doc.querySelector('entity');\n if (!entity) {\n return { valid: false, error: 'Missing <entity> element' };\n }\n\n return { valid: true };\n } catch (err) {\n return { valid: false, error: err instanceof Error ? err.message : 'Unknown error' };\n }\n};\n","/**\n * QueryBuilder Utils\n * \n * Validation, helpers, and metadata utilities for QueryBuilder.\n */\n\nimport type {\n QueryBuilderCondition,\n QueryBuilderField,\n QueryBuilderGroup,\n QueryBuilderState,\n QueryBuilderDataType,\n} from './QueryBuilder.types';\nimport { getOperatorsForType, getOperatorByValue, operatorRequiresValue } from './QueryBuilder.operators';\n\n/** Fallback fields for when none are provided */\nexport const FALLBACK_FIELDS: QueryBuilderField[] = [\n { id: 'name', label: 'Name', dataType: 'string' },\n { id: 'createdon', label: 'Created On', dataType: 'datetime' },\n {\n id: 'statecode',\n label: 'State',\n dataType: 'optionset',\n options: [\n { label: 'Active', value: 0 },\n { label: 'Inactive', value: 1 },\n ],\n },\n { id: 'ownerid', label: 'Owner', dataType: 'lookup' },\n];\n\n/**\n * Validation error details\n */\nexport interface QueryBuilderValidationError {\n groupId: string;\n conditionId: string;\n fieldLabel: string;\n message: string;\n}\n\n/**\n * Validation result\n */\nexport interface QueryBuilderValidationResult {\n isValid: boolean;\n errors: QueryBuilderValidationError[];\n apiValidation?: {\n available: boolean;\n tested: boolean;\n success?: boolean;\n recordCount?: number;\n errorMessage?: string;\n };\n}\n\n/**\n * Validate the QueryBuilder state\n */\nexport const validateQueryBuilderState = (\n state: QueryBuilderState,\n fields: QueryBuilderField[]\n): QueryBuilderValidationResult => {\n const errors: QueryBuilderValidationError[] = [];\n\n for (const group of state.groups) {\n if (group.conditions.length === 0) {\n errors.push({\n groupId: group.id,\n conditionId: '',\n fieldLabel: 'Group',\n message: 'Group has no conditions',\n });\n continue;\n }\n\n for (const condition of group.conditions) {\n if (condition.kind === 'relatedEntity') {\n validateRelatedEntityCondition(condition, group.id, errors);\n continue;\n }\n\n validateFieldCondition(condition, group.id, fields, errors);\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n};\n\n/**\n * Validate a related entity condition\n */\nconst validateRelatedEntityCondition = (\n condition: QueryBuilderCondition,\n groupId: string,\n errors: QueryBuilderValidationError[]\n): void => {\n if (!condition.relatedEntityName) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel: 'Related Entity',\n message: 'Related entity not selected',\n });\n return;\n }\n\n if (!condition.nestedConditions || condition.nestedConditions.length === 0) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel: 'Related Entity',\n message: 'At least one nested condition is required',\n });\n return;\n }\n\n // Validate each nested condition\n const nestedFields = condition.nestedFields || [];\n for (const nestedCond of condition.nestedConditions) {\n const nestedField = nestedFields.find((f) => f.id === nestedCond.fieldId);\n const nestedFieldLabel = nestedField?.label || nestedCond.fieldId || 'Field';\n\n // Skip value check for operators that don't require values\n const requiresValue = operatorRequiresValue(nestedCond.operator);\n if (!requiresValue) continue;\n\n // Check for empty value (handle arrays for in/not-in)\n if (isValueEmpty(nestedCond.value)) {\n errors.push({\n groupId,\n conditionId: nestedCond.id,\n fieldLabel: nestedFieldLabel,\n message: 'Value is required',\n });\n }\n }\n};\n\n/**\n * Validate a field condition\n */\nconst validateFieldCondition = (\n condition: QueryBuilderCondition,\n groupId: string,\n fields: QueryBuilderField[],\n errors: QueryBuilderValidationError[]\n): void => {\n const field = fields.find((f) => f.id === condition.fieldId);\n const fieldLabel = field?.label || condition.fieldId;\n\n // Check if field exists\n if (!field) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel,\n message: `Unknown field: ${condition.fieldId}`,\n });\n return;\n }\n\n // Skip value check for operators that don't require values\n const requiresValue = operatorRequiresValue(condition.operator);\n if (!requiresValue) return;\n\n // Check for empty value\n if (isValueEmpty(condition.value)) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel,\n message: 'Value is required',\n });\n }\n\n // Check between/two-value operators have second value\n const operatorDef = getOperatorByValue(condition.operator);\n if (operatorDef?.requiresValue2) {\n if (isValueEmpty(condition.value2)) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel,\n message: 'Second value is required for this operator',\n });\n }\n }\n};\n\n/**\n * Check if a value is empty\n */\nconst isValueEmpty = (value: any): boolean => {\n if (value === undefined || value === null) return true;\n if (Array.isArray(value)) {\n return value.length === 0 || value.every(v => v === undefined || v === null || String(v).trim() === '');\n }\n return String(value).trim() === '';\n};\n\n/**\n * Infer data type from Dynamics 365 attribute metadata\n */\nexport const dataTypeFromAttribute = (attribute: any): QueryBuilderDataType => {\n // Handle both AttributeType (string) and AttributeTypeName (object with Value property)\n const typeValue = attribute?.AttributeTypeName?.Value || attribute?.AttributeType || attribute?.Type || '';\n const type = String(typeValue).toLowerCase();\n \n // Check if the attribute has Targets array - definitive indicator of lookup\n if (attribute?.Targets && Array.isArray(attribute.Targets) && attribute.Targets.length > 0) {\n return 'lookup';\n }\n \n if (['picklist', 'state', 'status'].includes(type)) return 'optionset';\n if (['lookup', 'customer', 'owner', 'partylist', 'uniqueidentifier', 'lookuptype'].includes(type)) return 'lookup';\n if (['datetime'].includes(type)) return 'datetime';\n if (['boolean'].includes(type)) return 'boolean';\n if (['integer', 'decimal', 'double', 'money', 'bigint', 'int'].includes(type)) return 'number';\n \n return 'string';\n};\n\n/**\n * Get default value for a field based on its type\n */\nexport const getDefaultValueForField = (field: QueryBuilderField): string | number | boolean => {\n if (field.dataType === 'optionset' && field.options && field.options.length > 0) {\n return String(field.options[0].value);\n }\n return '';\n};\n\n/**\n * Create a new condition for a field\n */\nexport const createCondition = (defaultField: QueryBuilderField): QueryBuilderCondition => {\n const operators = getOperatorsForType(defaultField.dataType);\n return {\n id: `cond_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: 'field',\n fieldId: defaultField.id,\n operator: operators[0]?.value as any || 'eq',\n value: getDefaultValueForField(defaultField),\n value2: '',\n };\n};\n\n/**\n * Create a new related entity condition\n */\nexport const createRelatedCondition = (\n relatedEntityName?: string,\n relatedEntityTarget?: string\n): QueryBuilderCondition => ({\n id: `rel_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: 'relatedEntity',\n fieldId: relatedEntityName || '__related_entity__',\n operator: 'containsdata',\n value: '',\n value2: '',\n relatedEntityName,\n relatedEntityTarget,\n nestedConditions: [],\n nestedLogic: 'and',\n nestedFields: [],\n});\n\n/**\n * Create a new group\n */\nexport const createGroup = (defaultField: QueryBuilderField): QueryBuilderGroup => ({\n id: `grp_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n logic: 'and',\n conditions: [createCondition(defaultField)],\n});\n\n/**\n * Clone state for immutable updates\n */\nexport const cloneState = (\n state: QueryBuilderState | undefined,\n defaultField: QueryBuilderField\n): QueryBuilderState => {\n if (!state?.groups?.length) {\n return { groups: [createGroup(defaultField)] };\n }\n\n return {\n groups: state.groups.map((group) => ({\n id: group.id || `grp_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n logic: group.logic || 'and',\n conditions: (group.conditions || []).map((condition) => ({\n id: condition.id || `cond_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: condition.kind || 'field',\n fieldId: condition.fieldId || defaultField.id,\n operator: (condition.operator || 'eq') as any,\n value: condition.value ?? '',\n value2: condition.value2 ?? '',\n relatedEntityName: condition.relatedEntityName,\n relatedEntityTarget: condition.relatedEntityTarget,\n nestedConditions: condition.nestedConditions ? [...condition.nestedConditions] : undefined,\n nestedLogic: condition.nestedLogic,\n nestedFields: condition.nestedFields ? [...condition.nestedFields] : undefined,\n })),\n })),\n };\n};\n\n/**\n * Generate a unique ID\n */\nexport const generateId = (prefix: string = 'id'): string => {\n return `${prefix}_${Date.now()}_${Math.floor(Math.random() * 10000)}`;\n};\n\n/**\n * Deep compare two QueryBuilder states\n */\nexport const statesEqual = (a: QueryBuilderState, b: QueryBuilderState): boolean => {\n return JSON.stringify(a) === JSON.stringify(b);\n};\n\n/**\n * Get operators available for a data type (for UI dropdown)\n */\nexport const getOperatorOptionsForType = (\n dataType: QueryBuilderDataType\n): Array<{ value: string; label: string }> => {\n return getOperatorsForType(dataType).map(op => ({\n value: op.value,\n label: op.label,\n }));\n};\n\n/**\n * Check if an operator is valid for a data type\n */\nexport const isOperatorValidForType = (operator: string, dataType: QueryBuilderDataType): boolean => {\n const operators = getOperatorsForType(dataType);\n return operators.some(op => op.value === operator);\n};\n","/**\n * QueryBuilder LookupInput Component\n * \n * Internal component for lookup field value input with automatic Web API search.\n */\n\nimport * as React from 'react';\nimport { Input, Text } from '@fluentui/react-components';\nimport { Lookup, type LookupOption } from '../Lookup';\nimport type { QueryBuilderLookupOption, QueryBuilderLookupTarget } from './QueryBuilder.types';\n\nexport interface LookupValueInputProps {\n fieldId: string;\n value: string;\n displayName: string;\n disabled: boolean;\n /** Target entities for the lookup (used for automatic search) */\n targets?: QueryBuilderLookupTarget[];\n onLookupSearch?: (fieldId: string, searchText: string) => Promise<QueryBuilderLookupOption[]> | QueryBuilderLookupOption[];\n onValueChange: (value: string, displayName: string) => void;\n}\n\nexport const LookupValueInput: React.FC<LookupValueInputProps> = ({\n fieldId,\n value,\n displayName,\n disabled,\n targets,\n onLookupSearch,\n onValueChange,\n}) => {\n const [lookupOptions, setLookupOptions] = React.useState<LookupOption[]>([]);\n const [lookupLoading, setLookupLoading] = React.useState(false);\n const [resultCount, setResultCount] = React.useState<number>(0);\n const [headerText, setHeaderText] = React.useState<string>('');\n\n // Automatic search using native Web API when targets are available\n const searchUsingWebApi = React.useCallback(async (searchText: string, limit: number = 15): Promise<{ results: LookupOption[]; entityDisplayName: string }> => {\n if (!targets || targets.length === 0) {\n return { results: [], entityDisplayName: '' };\n }\n\n const results: LookupOption[] = [];\n let entityDisplayName = '';\n\n // Search each target entity\n for (const target of targets) {\n if (!target.entitySetName || !target.primaryNameAttribute) continue;\n\n // Use entity display name for header\n if (!entityDisplayName && target.displayName) {\n entityDisplayName = target.displayName;\n }\n\n try {\n const nameAttr = target.primaryNameAttribute;\n let queryOptions = `$select=${nameAttr}&$top=${limit}`;\n\n if (searchText) {\n queryOptions += `&$filter=contains(${nameAttr},'${searchText.replace(/'/g, \"''\")}')`;\n }\n\n const response = await fetch(`/api/data/v9.2/${target.entitySetName}?${queryOptions}`, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n\n if (!response.ok) continue;\n\n const data = await response.json();\n const records = data.value || [];\n \n for (const record of records) {\n // Extract the ID from the record (entityLogicalName + 'id')\n const idField = `${target.entityLogicalName}id`;\n const id = record[idField] || record.id || '';\n const name = record[nameAttr] || 'Unnamed';\n\n results.push({\n key: id,\n text: name,\n secondaryText: targets.length > 1 ? target.displayName : undefined,\n });\n }\n } catch (error) {\n console.error(`[QueryBuilder] Lookup search failed for ${target.entityLogicalName}:`, error);\n }\n }\n\n return { results, entityDisplayName };\n }, [targets]);\n\n // Load initial top 5 records when the lookup becomes usable\n React.useEffect(() => {\n const loadInitialRecords = async () => {\n const hasValidTargets = targets && targets.length > 0 && targets.some(t => t.entitySetName && t.primaryNameAttribute);\n \n // Only pre-load if we have valid targets (and no custom search)\n if (!disabled && hasValidTargets && !onLookupSearch) {\n setLookupLoading(true);\n try {\n const searchResult = await searchUsingWebApi('', 5); // Get top 5 records\n setLookupOptions(searchResult.results);\n setResultCount(searchResult.results.length);\n setHeaderText(searchResult.entityDisplayName);\n } finally {\n setLookupLoading(false);\n }\n }\n };\n \n loadInitialRecords();\n }, [targets, disabled, onLookupSearch, searchUsingWebApi]);\n\n const handleSearchChange = React.useCallback(\n async (searchText: string) => {\n setLookupLoading(true);\n try {\n let results: LookupOption[];\n let entityName = '';\n\n if (onLookupSearch) {\n // Use consumer-provided search function\n const customResults = await onLookupSearch(fieldId, searchText);\n results = customResults.map((r) => ({\n key: r.key,\n text: r.text,\n secondaryText: r.secondaryText,\n }));\n // Use first target display name if available\n entityName = targets?.[0]?.displayName || '';\n } else {\n // Use native Web API search\n const searchResult = await searchUsingWebApi(searchText);\n results = searchResult.results;\n entityName = searchResult.entityDisplayName;\n }\n\n setLookupOptions(results);\n setResultCount(results.length);\n setHeaderText(entityName);\n } finally {\n setLookupLoading(false);\n }\n },\n [fieldId, onLookupSearch, searchUsingWebApi, targets],\n );\n\n const handleOptionSelect = React.useCallback(\n (option: LookupOption | null) => {\n if (option) {\n onValueChange(option.key, option.text);\n } else {\n onValueChange('', '');\n }\n },\n [onValueChange],\n );\n\n // Determine if lookup is usable (has either onLookupSearch or valid targets)\n const hasValidTargets = targets && targets.length > 0 && targets.some(t => t.entitySetName && t.primaryNameAttribute);\n const isUsable = !disabled && (onLookupSearch || hasValidTargets);\n\n // If lookup metadata isn't available, show a plain input for manual GUID entry\n if (!isUsable && !disabled) {\n return (\n <Input\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Lookup GUID\"\n type=\"text\"\n value={value || ''}\n onChange={(_, data) => onValueChange(data.value, displayName)}\n placeholder=\"Enter GUID...\"\n contentAfter={\n <Text size={100} style={{ whiteSpace: 'nowrap', color: 'var(--colorNeutralForeground3)' }}>\n Manual entry\n </Text>\n }\n />\n );\n }\n\n // Build selected option for display\n const selectedOption: LookupOption | null = value\n ? { key: value, text: displayName || value }\n : null;\n\n // Header showing entity type\n const header = headerText ? (\n <Text size={200} weight=\"semibold\" style={{ padding: '4px 8px', display: 'block' }}>\n {headerText}\n </Text>\n ) : undefined;\n\n // Footer showing record count\n const footer = resultCount > 0 ? (\n <Text size={100} style={{ padding: '4px 8px', display: 'block', color: 'var(--colorNeutralForeground3)' }}>\n {resultCount} record{resultCount !== 1 ? 's' : ''} found\n </Text>\n ) : undefined;\n\n return (\n <Lookup\n size=\"small\"\n appearance=\"filled-darker\"\n placeholder=\"Search...\"\n aria-label=\"Lookup value\"\n options={lookupOptions}\n selectedOption={selectedOption}\n onSearchChange={handleSearchChange}\n onOptionSelect={handleOptionSelect}\n loading={lookupLoading}\n disabled={!isUsable}\n clearable\n minSearchLength={0}\n header={header}\n footer={footer}\n />\n );\n};\n","/**\n * QueryBuilder Field Enrichment Functions\n * \n * Reusable functions for enriching fields with lookup targets and optionset options.\n * These functions work for both main entity fields and related entity fields.\n */\n\nimport type { QueryBuilderField, QueryBuilderLookupTarget, QueryBuilderOption } from './QueryBuilder.types';\n\n/**\n * Enrich lookup fields with target entity metadata (EntitySetName, PrimaryNameAttribute, DisplayName).\n * This enables automatic search functionality in lookup inputs.\n * \n * @param fields - Array of fields that may contain lookup fields\n * @param entityName - The entity that owns these fields\n * @param trace - Optional trace callback for debugging\n * @returns Fields with enriched lookup metadata\n */\nexport const enrichLookupFields = async (\n fields: (QueryBuilderField & { _raw?: any })[],\n entityName: string,\n trace?: (message: string, data?: any) => void\n): Promise<QueryBuilderField[]> => {\n trace?.('[QueryBuilder] Enriching lookup targets for lookup fields', { entityName, fieldCount: fields.length });\n \n const lookupFields = fields.filter((f: any) => f.dataType === 'lookup' && f._raw);\n \n for (const field of lookupFields) {\n try {\n const attr = field._raw;\n const attrType = attr.AttributeType || attr.AttributeTypeName?.Value;\n \n if (attrType === 'Lookup' || attrType === 'Customer' || attrType === 'Owner') {\n const typeCast = attrType === 'Customer' ? 'CustomerAttributeMetadata' :\n attrType === 'Owner' ? 'OwnerAttributeMetadata' :\n 'LookupAttributeMetadata';\n const targetsUrl = `/api/data/v9.2/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${field.id}')/Microsoft.Dynamics.CRM.${typeCast}?$select=LogicalName,Targets`;\n \n const targetsResponse = await fetch(targetsUrl, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n \n if (targetsResponse.ok) {\n const targetsData = await targetsResponse.json();\n \n if (targetsData.Targets && Array.isArray(targetsData.Targets)) {\n // Fetch entity metadata for each target\n const enrichedTargets: QueryBuilderLookupTarget[] = [];\n \n for (const targetEntityName of targetsData.Targets) {\n try {\n const entityMetaUrl = `/api/data/v9.2/EntityDefinitions(LogicalName='${targetEntityName}')?$select=LogicalName,EntitySetName,PrimaryNameAttribute,DisplayName`;\n const entityMetaResponse = await fetch(entityMetaUrl, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n \n if (entityMetaResponse.ok) {\n const entityMeta = await entityMetaResponse.json();\n enrichedTargets.push({\n entityLogicalName: targetEntityName,\n entitySetName: entityMeta.EntitySetName,\n primaryNameAttribute: entityMeta.PrimaryNameAttribute,\n displayName: entityMeta.DisplayName?.UserLocalizedLabel?.Label || targetEntityName,\n });\n } else {\n // Fallback without metadata\n enrichedTargets.push({\n entityLogicalName: targetEntityName,\n });\n }\n } catch {\n // Fallback without metadata\n enrichedTargets.push({\n entityLogicalName: targetEntityName,\n });\n }\n }\n \n field.targets = enrichedTargets;\n \n trace?.('[QueryBuilder] Enriched lookup targets', { \n field: field.id, \n targetCount: field.targets.length,\n targets: field.targets.map((t: QueryBuilderLookupTarget) => ({\n entity: t.entityLogicalName,\n hasMetadata: !!(t.entitySetName && t.primaryNameAttribute)\n }))\n });\n }\n }\n }\n } catch (lookupError) {\n trace?.('[QueryBuilder] Failed to enrich lookup field', { \n field: field.id,\n error: lookupError instanceof Error ? lookupError.message : String(lookupError)\n });\n }\n }\n \n // Remove _raw property and return\n return fields.map((f: any) => {\n const { _raw, ...field } = f;\n return field;\n });\n};\n\n/**\n * Enrich optionset fields with their option values.\n * Web API limitation requires fetching optionsets separately with type casting.\n * \n * @param fields - Array of fields that may contain optionset fields\n * @param entityName - The entity that owns these fields\n * @param trace - Optional trace callback for debugging\n * @returns Fields with enriched optionset options\n */\nexport const enrichOptionsetFields = async (\n fields: (QueryBuilderField & { _raw?: any })[],\n entityName: string,\n trace?: (message: string, data?: any) => void\n): Promise<(QueryBuilderField & { _raw?: any })[]> => {\n trace?.('[QueryBuilder] Enriching optionset metadata for optionset fields', { entityName });\n \n const optionsetFields = fields.filter((f: any) => f.dataType === 'optionset' && f._raw);\n \n for (const field of optionsetFields) {\n try {\n const attr = field._raw;\n const attrType = attr.AttributeType || attr.AttributeTypeName?.Value;\n let optionsetUrl = '';\n \n // Use appropriate URL based on attribute type\n if (attrType === 'Picklist' || attrType === 'State' || attrType === 'Status') {\n const typeCast = attrType === 'Picklist' ? 'PicklistAttributeMetadata' : \n attrType === 'State' ? 'StateAttributeMetadata' : \n 'StatusAttributeMetadata';\n optionsetUrl = `/api/data/v9.2/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${field.id}')/Microsoft.Dynamics.CRM.${typeCast}?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`;\n }\n \n if (optionsetUrl) {\n const optResponse = await fetch(optionsetUrl, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n \n if (optResponse.ok) {\n const optData = await optResponse.json();\n const optionSet = optData.OptionSet || optData.GlobalOptionSet;\n \n if (optionSet?.Options) {\n field.options = optionSet.Options\n .filter((opt: any) => opt?.Value != null)\n .map((opt: any) => ({\n label: opt.Label?.UserLocalizedLabel?.Label || String(opt.Value),\n value: opt.Value,\n }));\n \n trace?.('[QueryBuilder] Enriched optionset options', { \n field: field.id, \n optionCount: field.options?.length ?? 0\n });\n }\n }\n }\n } catch (optError) {\n trace?.('[QueryBuilder] Failed to enrich optionset field', { \n field: field.id,\n error: optError instanceof Error ? optError.message : String(optError)\n });\n }\n }\n \n return fields;\n};\n","import * as React from 'react';\nimport { Button, Combobox, Dialog, DialogActions, DialogBody, DialogContent, DialogSurface, DialogTitle, DialogTrigger, Dropdown, Input, Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, Option, Spinner, Text, Textarea } from '@fluentui/react-components';\nimport { DatePicker } from '@fluentui/react-datepicker-compat';\nimport { AddRegular, ArrowDownloadRegular, ArrowResetRegular, ArrowUploadRegular, CheckmarkCircleRegular, CopyRegular, DeleteRegular, DismissRegular, MoreHorizontalRegular, WarningRegular } from '@fluentui/react-icons';\nimport { mergeClasses, useQueryBuilderStyles } from './QueryBuilder.styles';\nimport { Lookup } from '../Lookup';\nimport type { LookupOption } from '../Lookup';\nimport type {\n QueryBuilderApplyResult,\n QueryBuilderCondition,\n QueryBuilderField,\n QueryBuilderGroup,\n QueryBuilderLookupOption,\n QueryBuilderLookupTarget,\n QueryBuilderOption,\n QueryBuilderProps,\n QueryBuilderRelatedEntity,\n QueryBuilderState,\n} from './QueryBuilder.types';\n\n// Import from new modular files\nimport { getOperatorsForType, getOperatorsForTypeSimple, operatorRequiresValue, operatorIsMultiValue, operatorRequiresValue2, getOperatorValueType } from './QueryBuilder.operators';\nimport { serializeQueryBuilderState, prettyPrintXml, escapeXml } from './QueryBuilder.serializer';\nimport { parseFetchXmlToState, ParseFetchXmlResult } from './QueryBuilder.parser';\nimport {\n FALLBACK_FIELDS,\n validateQueryBuilderState,\n dataTypeFromAttribute,\n getDefaultValueForField,\n createCondition,\n createRelatedCondition,\n createGroup,\n cloneState,\n getOperatorOptionsForType,\n QueryBuilderValidationError,\n QueryBuilderValidationResult,\n} from './QueryBuilder.utils';\nimport { LookupValueInput } from './QueryBuilder.LookupInput';\nimport { loadEntityFields, useEntityFields, extractAttributesArray, isValidAttribute, parseAttributeToField } from './QueryBuilder.hooks';\nimport { enrichLookupFields, enrichOptionsetFields } from './QueryBuilder.enrichment';\n\n// Re-export for backward compatibility\nexport type { QueryBuilderValidationError, QueryBuilderValidationResult };\nexport { validateQueryBuilderState, serializeQueryBuilderState, parseFetchXmlToState };\nexport type { ParseFetchXmlResult };\n\nexport const QueryBuilder: React.FC<QueryBuilderProps> = (props) => {\n const styles = useQueryBuilderStyles();\n \n // Helper function for debug tracing with purple background\n const trace = React.useCallback((message: string, data?: any) => {\n console.debug(\n '%c FluentUI-Extended ',\n 'background: #845EF7; color: white; padding: 2px 4px; border-radius: 2px; font-weight: bold;',\n message,\n data || ''\n );\n props.onTrace?.(message, data);\n }, [props]);\n \n const [loading, setLoading] = React.useState(false);\n const [availableFields, setAvailableFields] = React.useState<QueryBuilderField[]>(\n props.fields && props.fields.length > 0 ? props.fields : FALLBACK_FIELDS,\n );\n // EntitySetName for OData queries (e.g., \"accounts\" instead of \"account\")\n const [entitySetName, setEntitySetName] = React.useState<string | undefined>(props.entitySetName);\n\n const defaultField = availableFields[0] || FALLBACK_FIELDS[0];\n\n // Convert fields to LookupOption format for field selector\n const fieldLookupOptions: LookupOption[] = React.useMemo(() => {\n const formatDataType = (dataType: QueryBuilderField['dataType']): string => {\n const labels: Record<QueryBuilderField['dataType'], string> = {\n string: 'Text',\n number: 'Number',\n datetime: 'Date/Time',\n boolean: 'Yes/No',\n optionset: 'Choice',\n lookup: 'Lookup',\n };\n return labels[dataType] || dataType;\n };\n\n // Deduplicate fields by id (take first occurrence)\n const uniqueFields = availableFields.reduce((acc, field) => {\n if (!acc.some(f => f.id === field.id)) {\n acc.push(field);\n }\n return acc;\n }, [] as QueryBuilderField[]);\n\n return uniqueFields.map((field) => ({\n key: field.id,\n text: field.label,\n details: [\n { label: 'Logical Name', value: field.id },\n ...(field.schemaName ? [{ label: 'Schema Name', value: field.schemaName }] : []),\n { label: 'Type', value: formatDataType(field.dataType) },\n ],\n data: field,\n }));\n }, [availableFields]);\n\n // Compute related entities from lookup fields (auto-detect if not provided via props)\n const computedRelatedEntities: QueryBuilderRelatedEntity[] = React.useMemo(() => {\n // If consumer provided related entities, use those\n if (props.relatedEntities && props.relatedEntities.length > 0) {\n return props.relatedEntities;\n }\n\n // Auto-detect from lookup fields\n const related: QueryBuilderRelatedEntity[] = [];\n for (const field of availableFields) {\n if (field.dataType === 'lookup' && field.targets && field.targets.length > 0) {\n for (const target of field.targets) {\n related.push({\n id: field.id, // Use lookup field name as ID (for link-entity)\n label: `${field.label} (${target.displayName || target.entityLogicalName})`,\n lookupField: field.id,\n targetEntity: target.entityLogicalName,\n targetEntitySetName: target.entitySetName,\n });\n }\n }\n }\n return related;\n }, [availableFields, props.relatedEntities]);\n\n const [builderState, setBuilderState] = React.useState<QueryBuilderState>(() => cloneState(props.initialState, defaultField));\n const initialFetchXmlParsedRef = React.useRef(false);\n\n // Parse initialFetchXml once fields are available\n React.useEffect(() => {\n if (\n props.initialFetchXml &&\n !initialFetchXmlParsedRef.current &&\n availableFields.length > 0 &&\n availableFields !== FALLBACK_FIELDS\n ) {\n const result = parseFetchXmlToState(props.initialFetchXml, availableFields);\n if (result.state) {\n setBuilderState(result.state);\n initialFetchXmlParsedRef.current = true;\n }\n }\n }, [props.initialFetchXml, availableFields]);\n\n React.useEffect(() => {\n if (props.fields && props.fields.length > 0) {\n setAvailableFields(props.fields);\n }\n }, [props.fields]);\n\n React.useEffect(() => {\n let disposed = false;\n\n const loadFields = async () => {\n if (props.fields && props.fields.length > 0) {\n return;\n }\n\n setLoading(true);\n try {\n // Fetch entity metadata using native Web API\n const entityResponse = await fetch(\n `/api/data/v9.2/EntityDefinitions(LogicalName='${props.entityName}')?$select=EntitySetName,DisplayName,PrimaryNameAttribute`,\n {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n }\n );\n\n if (!entityResponse.ok) {\n console.warn('[QueryBuilder] Failed to fetch entity metadata');\n return;\n }\n\n const entityMetadata = await entityResponse.json();\n\n // Extract EntitySetName for OData queries\n if (entityMetadata?.EntitySetName && !disposed) {\n setEntitySetName(entityMetadata.EntitySetName);\n }\n\n // Fetch regular attributes\n const attributesResponse = await fetch(\n `/api/data/v9.2/EntityDefinitions(LogicalName='${props.entityName}')/Attributes?$select=LogicalName,SchemaName,DisplayName,AttributeType,AttributeTypeName`,\n {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n }\n );\n\n if (!attributesResponse.ok) {\n console.warn('[QueryBuilder] Failed to fetch entity attributes');\n return;\n }\n\n const attributesData = await attributesResponse.json();\n const attributesArray = attributesData.value || [];\n\n // Fetch lookup attributes separately with Targets property\n const lookupResponse = await fetch(\n `/api/data/v9.2/EntityDefinitions(LogicalName='${props.entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=LogicalName,SchemaName,DisplayName,AttributeType,AttributeTypeName,Targets`,\n {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n }\n );\n\n const lookupData = lookupResponse.ok ? await lookupResponse.json() : { value: [] };\n const lookupAttributes = lookupData.value || [];\n\n // Create a map of lookup attributes by LogicalName for easy lookup\n const lookupMap = new Map<string, any>(lookupAttributes.map((attr: any) => [attr.LogicalName, attr]));\n\n // Merge lookup Targets into the main attributes array\n const mergedAttributes = attributesArray.map((attr: any) => {\n const lookupAttr = lookupMap.get(attr.LogicalName);\n if (lookupAttr?.Targets) {\n return { ...attr, Targets: lookupAttr.Targets };\n }\n return attr;\n });\n\n // First pass: collect all unique target entity names from lookup fields\n const targetEntityNames = new Set<string>();\n for (const attribute of mergedAttributes) {\n if (Array.isArray(attribute?.Targets)) {\n for (const target of attribute.Targets) {\n const entityName = typeof target === 'string' ? target : target?.entityLogicalName;\n if (entityName) targetEntityNames.add(entityName);\n }\n }\n }\n\n // Fetch metadata for each target entity to get entitySetName and primaryNameAttribute\n const targetMetadataCache: Record<string, { entitySetName?: string; displayName?: string; primaryNameAttribute?: string }> = {};\n for (const targetEntityName of targetEntityNames) {\n try {\n const targetResponse = await fetch(\n `/api/data/v9.2/EntityDefinitions(LogicalName='${targetEntityName}')?$select=EntitySetName,DisplayName,PrimaryNameAttribute`,\n {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n }\n );\n if (targetResponse.ok) {\n const targetMeta = await targetResponse.json();\n targetMetadataCache[targetEntityName] = {\n entitySetName: targetMeta?.EntitySetName,\n displayName: targetMeta?.DisplayName?.UserLocalizedLabel?.Label || targetMeta?.LogicalName,\n primaryNameAttribute: targetMeta?.PrimaryNameAttribute,\n };\n }\n } catch (targetErr) {\n console.warn(`[QueryBuilder] Could not fetch metadata for target entity \"${targetEntityName}\":`, targetErr);\n }\n }\n\n const resolvedFields: QueryBuilderField[] = mergedAttributes\n .filter((attribute: any) => attribute?.LogicalName && attribute?.IsValidForAdvancedFind !== false)\n .map((attribute: any) => {\n const dataType = dataTypeFromAttribute(attribute);\n\n // Parse lookup targets and enrich with cached metadata\n const targets = dataType === 'lookup' && Array.isArray(attribute.Targets)\n ? attribute.Targets.map((target: any) => {\n const entityLogicalName = typeof target === 'string' ? target : (target?.entityLogicalName || target);\n const cached = targetMetadataCache[entityLogicalName] || {};\n return {\n entityLogicalName,\n entitySetName: target?.entitySetName || cached.entitySetName,\n displayName: target?.displayName || cached.displayName,\n primaryNameAttribute: target?.primaryNameAttribute || cached.primaryNameAttribute,\n };\n })\n : undefined;\n\n // DisplayName can be an object with UserLocalizedLabel or a string\n const displayName = attribute.DisplayName;\n const label = typeof displayName === 'string'\n ? displayName\n : (displayName?.UserLocalizedLabel?.Label || attribute.SchemaName || attribute.LogicalName);\n\n return {\n id: attribute.LogicalName,\n label,\n schemaName: attribute.SchemaName,\n dataType,\n targets,\n };\n })\n .sort((left: QueryBuilderField, right: QueryBuilderField) => String(left.label).localeCompare(String(right.label), undefined, { sensitivity: 'base' }));\n\n if (!disposed && resolvedFields.length > 0) {\n setAvailableFields(resolvedFields);\n }\n } catch (error) {\n console.error('[QueryBuilder] Error loading fields:', error);\n } finally {\n if (!disposed) {\n setLoading(false);\n }\n }\n };\n\n loadFields();\n return () => {\n disposed = true;\n };\n }, [props.entityName, props.fields]);\n\n React.useEffect(() => {\n props.onStateChange?.(builderState);\n }, [builderState, props.onStateChange]);\n\n // Debounce serialization to avoid recalculating on every keystroke\n React.useEffect(() => {\n if (!props.onSerializedChange) return;\n const timeout = setTimeout(() => {\n props.onSerializedChange?.(serializeQueryBuilderState(builderState, availableFields, props.entityName, entitySetName));\n }, 150);\n return () => clearTimeout(timeout);\n }, [availableFields, builderState, entitySetName, props.entityName, props.onSerializedChange]);\n\n React.useEffect(() => {\n const fallbackField = availableFields[0] || FALLBACK_FIELDS[0];\n\n if (!fallbackField) {\n return;\n }\n\n setBuilderState((previous) => {\n let hasChanges = false;\n\n const groups = previous.groups.map((group) => {\n const conditions = group.conditions.map((condition) => {\n if (condition.kind === 'relatedEntity') {\n return condition;\n }\n\n const matchedField = availableFields.find((field) => field.id === condition.fieldId) || fallbackField;\n const operators = getOperatorsForType(matchedField.dataType);\n const nextOperator = operators.some((item) => item.value === condition.operator)\n ? condition.operator\n : (operators[0]?.value as any);\n\n let nextValue = condition.value;\n if (matchedField.dataType === 'optionset' && matchedField.options && matchedField.options.length > 0) {\n const isValidOption = matchedField.options.some((item) => String(item.value) === String(condition.value ?? ''));\n if (!isValidOption) {\n nextValue = String(matchedField.options[0].value);\n }\n }\n\n if (condition.fieldId !== matchedField.id || condition.operator !== nextOperator || condition.value !== nextValue) {\n hasChanges = true;\n return {\n ...condition,\n fieldId: matchedField.id,\n operator: nextOperator,\n value: nextValue,\n };\n }\n\n return condition;\n });\n\n if (conditions !== group.conditions) {\n return { ...group, conditions };\n }\n\n return group;\n });\n\n return hasChanges ? { groups } : previous;\n });\n }, [availableFields]);\n\n const updateGroup = React.useCallback((groupId: string, updater: (group: QueryBuilderGroup) => QueryBuilderGroup) => {\n setBuilderState((previous) => ({\n groups: previous.groups.map((group) => (group.id === groupId ? updater(group) : group)),\n }));\n }, []);\n\n const removeCondition = React.useCallback(\n (groupId: string, conditionId: string) => {\n updateGroup(groupId, (group) => {\n const remaining = group.conditions.filter((condition) => condition.id !== conditionId);\n return {\n ...group,\n conditions: remaining.length > 0 ? remaining : [createCondition(defaultField)],\n };\n });\n },\n [defaultField, updateGroup],\n );\n\n // Load metadata for a related entity and store fields in nestedFields\n const loadRelatedEntityFields = React.useCallback(\n async (groupId: string, conditionId: string, targetEntity: string) => {\n trace('[QueryBuilder] Loading related entity fields', { groupId, conditionId, targetEntity });\n \n try {\n let resolvedFields: QueryBuilderField[] = [];\n\n // Use callback if provided, otherwise use native Web API\n if (props.onFetchEntityFields) {\n trace('[QueryBuilder] Using custom onFetchEntityFields callback');\n resolvedFields = await props.onFetchEntityFields(targetEntity);\n } else {\n // Use native Web API directly (same origin)\n // Note: Cannot select Targets or expand OptionSet on base Attributes collection\n const url = `/api/data/v9.2/EntityDefinitions(LogicalName='${targetEntity}')/Attributes?$select=LogicalName,SchemaName,DisplayName,AttributeType,AttributeTypeName`;\n trace('[QueryBuilder] Fetching entity metadata', { url });\n \n const response = await fetch(url, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n\n if (!response.ok) {\n // Try to get error details from response\n let errorDetails: any = null;\n try {\n errorDetails = await response.json();\n } catch {\n // Ignore if response isn't JSON\n }\n \n const errorMsg = `Failed to fetch entity metadata: ${response.status} ${response.statusText}`;\n console.warn('[QueryBuilder]', errorMsg);\n trace('[QueryBuilder] Metadata fetch failed', { \n status: response.status, \n statusText: response.statusText,\n url,\n targetEntity,\n error: errorDetails?.error || errorDetails\n });\n \n // Log specific error message if available\n if (errorDetails?.error?.message) {\n console.warn('[QueryBuilder] API Error:', errorDetails.error.message);\n trace('[QueryBuilder] API Error Message', { message: errorDetails.error.message });\n }\n \n return;\n }\n\n const data = await response.json();\n const attributesArray = data.value || [];\n trace('[QueryBuilder] Received attributes', { count: attributesArray.length });\n\n if (attributesArray.length === 0) {\n console.warn('[QueryBuilder] No attributes found for entity:', targetEntity);\n trace('[QueryBuilder] No attributes found', { targetEntity });\n return;\n }\n\n // Map attributes to fields\n const fieldsWithoutOptions = attributesArray\n .filter((attr: any) => {\n if (!attr?.LogicalName) return false;\n const attrType = attr.AttributeType || attr.AttributeTypeName?.Value;\n if (attrType === 'Virtual' || attrType === 'CalendarRules') return false;\n if (attrType === 'Uniqueidentifier' && !attr.LogicalName.endsWith('id')) return false;\n return true;\n })\n .map((attr: any) => {\n const dataType = dataTypeFromAttribute(attr);\n const displayName = attr.DisplayName;\n const label = typeof displayName === 'string'\n ? displayName\n : (displayName?.UserLocalizedLabel?.Label || attr.SchemaName || attr.LogicalName);\n\n return {\n id: attr.LogicalName,\n label,\n schemaName: attr.SchemaName,\n dataType,\n // Store raw attribute for metadata fetching\n _raw: attr,\n };\n });\n\n // Enrich lookup fields with target metadata\n await enrichLookupFields(fieldsWithoutOptions, targetEntity, trace);\n \n // Enrich optionset fields with option values\n await enrichOptionsetFields(fieldsWithoutOptions, targetEntity, trace);\n \n // Remove _raw property before returning\n resolvedFields = fieldsWithoutOptions.map((f: any) => {\n const { _raw, ...field } = f;\n return field;\n }).sort((a: QueryBuilderField, b: QueryBuilderField) => String(a.label).localeCompare(String(b.label), undefined, { sensitivity: 'base' }));\n \n trace('[QueryBuilder] Resolved fields', { \n count: resolvedFields.length,\n fields: resolvedFields.map(f => ({ id: f.id, dataType: f.dataType, hasOptions: !!f.options }))\n });\n }\n\n if (resolvedFields.length > 0) {\n // Auto-add a default condition if none exist\n const defaultCondition = createCondition(resolvedFields[0]);\n trace('[QueryBuilder] Creating default nested condition', { \n field: resolvedFields[0].id,\n dataType: resolvedFields[0].dataType,\n hasOptions: !!resolvedFields[0].options\n });\n\n updateGroup(groupId, (group) => ({\n ...group,\n conditions: group.conditions.map((cond) =>\n cond.id === conditionId\n ? {\n ...cond,\n nestedFields: resolvedFields,\n nestedConditions: (!cond.nestedConditions || cond.nestedConditions.length === 0)\n ? [defaultCondition]\n : cond.nestedConditions,\n }\n : cond\n ),\n }));\n } else {\n console.warn('[QueryBuilder] No valid fields resolved for entity:', targetEntity);\n trace('[QueryBuilder] No valid fields resolved', { targetEntity });\n }\n } catch (error) {\n console.error('[QueryBuilder] Error loading related entity fields:', error);\n trace('[QueryBuilder] Exception in loadRelatedEntityFields', { \n targetEntity,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n });\n }\n },\n [props.onFetchEntityFields, updateGroup, trace],\n );\n\n // Add a nested condition to a related entity\n const addNestedCondition = React.useCallback(\n (groupId: string, conditionId: string, nestedFields: QueryBuilderField[]) => {\n const nestedDefault = nestedFields[0] || defaultField;\n const newCondition = createCondition(nestedDefault);\n\n updateGroup(groupId, (group) => ({\n ...group,\n conditions: group.conditions.map((cond) =>\n cond.id === conditionId\n ? { ...cond, nestedConditions: [...(cond.nestedConditions || []), newCondition] }\n : cond\n ),\n }));\n },\n [defaultField, updateGroup],\n );\n\n // Remove a nested condition from a related entity\n const removeNestedCondition = React.useCallback(\n (groupId: string, conditionId: string, nestedConditionId: string) => {\n updateGroup(groupId, (group) => ({\n ...group,\n conditions: group.conditions.map((cond) =>\n cond.id === conditionId\n ? { ...cond, nestedConditions: (cond.nestedConditions || []).filter((nc) => nc.id !== nestedConditionId) }\n : cond\n ),\n }));\n },\n [updateGroup],\n );\n\n // Update a nested condition within a related entity\n const updateNestedCondition = React.useCallback(\n (groupId: string, conditionId: string, nestedConditionId: string, updater: (nc: QueryBuilderCondition) => QueryBuilderCondition) => {\n updateGroup(groupId, (group) => ({\n ...group,\n conditions: group.conditions.map((cond) =>\n cond.id === conditionId\n ? {\n ...cond,\n nestedConditions: (cond.nestedConditions || []).map((nc) =>\n nc.id === nestedConditionId ? updater(nc) : nc\n ),\n }\n : cond\n ),\n }));\n },\n [updateGroup],\n );\n\n const addItem = React.useCallback((action: 'group' | 'related') => {\n setBuilderState((previous) => {\n if (action === 'group') {\n if (props.allowGroups === false) {\n return previous;\n }\n return { groups: [...previous.groups, createGroup(defaultField)] };\n }\n\n if (action === 'related') {\n if (props.allowRelatedEntity === false) {\n return previous;\n }\n\n const firstRelated = computedRelatedEntities[0];\n const relatedGroup = createGroup(defaultField);\n relatedGroup.conditions = [createRelatedCondition(firstRelated?.id, firstRelated?.targetEntity)];\n\n return {\n groups: [...previous.groups, relatedGroup],\n };\n }\n\n return previous;\n });\n }, [computedRelatedEntities, defaultField, props.allowGroups, props.allowRelatedEntity]);\n\n // Auto-load fields for related entity conditions that have a relatedEntityName but no nestedFields\n // Also ensure relatedEntityTarget is set for existing conditions\n React.useEffect(() => {\n for (const group of builderState.groups) {\n for (const condition of group.conditions) {\n if (\n condition.kind === 'relatedEntity' &&\n condition.relatedEntityName\n ) {\n // Find the related entity to get targetEntity\n const related = computedRelatedEntities.find(r => r.id === condition.relatedEntityName);\n\n // Set relatedEntityTarget if not set (migration for existing data)\n if (related?.targetEntity && !condition.relatedEntityTarget) {\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((c) =>\n c.id === condition.id\n ? { ...c, relatedEntityTarget: related.targetEntity, fieldId: condition.relatedEntityName || c.fieldId }\n : c\n ),\n }));\n }\n\n // Load fields if not loaded\n if (related?.targetEntity && (!condition.nestedFields || condition.nestedFields.length === 0)) {\n loadRelatedEntityFields(group.id, condition.id, related.targetEntity);\n }\n }\n }\n }\n }, [builderState.groups, computedRelatedEntities, loadRelatedEntityFields, updateGroup]);\n\n const addRowToGroup = React.useCallback(\n (groupId: string) => {\n updateGroup(groupId, (current) => ({\n ...current,\n conditions: [...current.conditions, createCondition(defaultField)],\n }));\n },\n [defaultField, updateGroup],\n );\n\n const onReset = React.useCallback(() => {\n const nextState = cloneState(props.defaultState, defaultField);\n setBuilderState(nextState);\n props.onResetToDefault?.(nextState);\n }, [defaultField, props]);\n\n const onDeleteAll = React.useCallback(() => {\n const resetState: QueryBuilderState = { groups: [createGroup(defaultField)] };\n setBuilderState(resetState);\n props.onDeleteAllFilters?.();\n }, [defaultField, props]);\n\n const onDownloadFetchXml = React.useCallback(() => {\n const payload = serializeQueryBuilderState(builderState, availableFields, props.entityName, entitySetName);\n const blob = new Blob([payload.fetchXml], { type: 'application/xml' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `${props.entityName}-filters.xml`;\n anchor.click();\n URL.revokeObjectURL(url);\n }, [availableFields, builderState, entitySetName, props.entityName]);\n\n const [uploadDialogOpen, setUploadDialogOpen] = React.useState(false);\n const [uploadXmlText, setUploadXmlText] = React.useState('');\n const [uploadError, setUploadError] = React.useState<string | null>(null);\n\n const [validationDialogOpen, setValidationDialogOpen] = React.useState(false);\n const [validationResult, setValidationResult] = React.useState<QueryBuilderValidationResult | null>(null);\n const [apiValidating, setApiValidating] = React.useState(false);\n const invalidConditionIds = React.useMemo(() => {\n if (!validationResult) return new Set<string>();\n return new Set(validationResult.errors.map((e) => e.conditionId).filter(Boolean));\n }, [validationResult]);\n\n const onValidate = React.useCallback(async () => {\n const result = validateQueryBuilderState(builderState, availableFields);\n\n // If local validation failed, don't test API\n if (!result.isValid) {\n result.apiValidation = {\n available: true,\n tested: false,\n };\n setValidationResult(result);\n setValidationDialogOpen(true);\n return;\n }\n\n // Test against Web API directly\n setApiValidating(true);\n setValidationResult(result);\n setValidationDialogOpen(true);\n\n try {\n const { odataFilter } = serializeQueryBuilderState(builderState, availableFields, props.entityName, entitySetName);\n const entitySetForApi = entitySetName || props.entityName;\n const queryOptions = odataFilter ? `$filter=${odataFilter}&$top=1&$count=true` : '$top=1&$count=true';\n\n const response = await fetch(`/api/data/v9.2/${entitySetForApi}?${queryOptions}`, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n 'Prefer': 'odata.include-annotations=\"*\"',\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(errorText || `HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n setValidationResult({\n ...result,\n apiValidation: {\n available: true,\n tested: true,\n success: true,\n recordCount: data['@odata.count'] ?? data.value?.length ?? 0,\n },\n });\n } catch (err: any) {\n setValidationResult({\n ...result,\n apiValidation: {\n available: true,\n tested: true,\n success: false,\n errorMessage: err?.message || 'Unknown API error',\n },\n });\n } finally {\n setApiValidating(false);\n }\n }, [builderState, availableFields, entitySetName, props.entityName]);\n\n const onOpenUploadDialog = React.useCallback(() => {\n setUploadXmlText('');\n setUploadError(null);\n setUploadDialogOpen(true);\n }, []);\n\n const onApplyUploadedXml = React.useCallback(() => {\n const result = parseFetchXmlToState(uploadXmlText, availableFields);\n if (result.state) {\n setBuilderState(result.state);\n setUploadDialogOpen(false);\n setUploadError(null);\n } else {\n setUploadError(result.error || 'Invalid FetchXML.');\n }\n }, [uploadXmlText, availableFields]);\n\n const serialized = serializeQueryBuilderState(builderState, availableFields, props.entityName, entitySetName);\n\n const renderValueInput = React.useCallback(\n (\n field: QueryBuilderField,\n condition: QueryBuilderCondition,\n isNullOperator: boolean,\n onValueChange: (value: string | number | boolean | (string | number)[], displayName?: string) => void,\n ) => {\n // If we have valueDisplayName but field type is not detected as lookup,\n // still render as lookup (this happens when parsing FetchXML where field metadata isn't loaded yet)\n const hasLookupDisplayName = condition.valueDisplayName && condition.valueDisplayName.trim() !== '';\n const shouldRenderAsLookup = field.dataType === 'lookup' || hasLookupDisplayName;\n \n if (shouldRenderAsLookup) {\n return (\n <LookupValueInput\n fieldId={condition.fieldId}\n value={String(condition.value ?? '')}\n displayName={condition.valueDisplayName ?? ''}\n disabled={isNullOperator}\n targets={field.targets}\n onLookupSearch={props.onLookupSearch}\n onValueChange={(value, displayName) => onValueChange(value, displayName)}\n />\n );\n }\n\n switch (field.dataType) {\n case 'optionset': {\n if (!field.options) return null;\n\n const isMultiSelect = condition.operator === 'in' || condition.operator === 'not-in';\n\n if (isMultiSelect) {\n // Multi-select mode for in/not-in operators\n const currentValues: (string | number)[] = Array.isArray(condition.value)\n ? condition.value\n : (condition.value !== undefined && condition.value !== null && String(condition.value) !== ''\n ? [condition.value as string | number]\n : []);\n\n const selectedLabels = currentValues\n .map(v => field.options!.find(opt => String(opt.value) === String(v))?.label)\n .filter(Boolean)\n .join(', ') || 'Select values...';\n\n return (\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n listbox={{ className: styles.optionsetListbox }}\n multiselect\n selectedOptions={currentValues.map(v => String(v))}\n value={selectedLabels}\n disabled={isNullOperator}\n onOptionSelect={(_, data) => {\n const newValues = data.selectedOptions.map(v => {\n // Try to preserve number type if original was number\n const opt = field.options!.find(o => String(o.value) === v);\n return opt ? opt.value : v;\n });\n onValueChange(newValues as (string | number)[]);\n }}\n >\n {field.options.map((option) => (\n <Option key={String(option.value)} value={String(option.value)}>\n {option.label}\n </Option>\n ))}\n </Dropdown>\n );\n }\n\n // Single-select mode for eq/ne operators\n return (\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n listbox={{ className: styles.optionsetListbox }}\n selectedOptions={[\n condition.value !== undefined && condition.value !== null && String(condition.value) !== ''\n ? String(condition.value)\n : String(field.options[0]?.value ?? '')\n ]}\n value={\n field.options.find(opt => String(opt.value) === String(condition.value))?.label\n || field.options[0]?.label\n || ''\n }\n disabled={isNullOperator}\n onOptionSelect={(_, data) => onValueChange(data.optionValue ?? String(condition.value ?? ''))}\n >\n {field.options.map((option) => (\n <Option key={String(option.value)} value={String(option.value)}>\n {option.label}\n </Option>\n ))}\n </Dropdown>\n );\n }\n\n case 'datetime':\n return (\n <DatePicker\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n value={condition.value ? new Date(String(condition.value)) : null}\n onSelectDate={(date) => onValueChange(date ? date.toISOString().split('T')[0] : '')}\n disabled={isNullOperator}\n placeholder=\"Select date...\"\n />\n );\n\n case 'boolean':\n return (\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n selectedOptions={[String(condition.value ?? 'true')]}\n value={String(condition.value ?? 'true') === 'true' ? 'Yes' : 'No'}\n disabled={isNullOperator}\n onOptionSelect={(_, data) => onValueChange(data.optionValue ?? 'true')}\n >\n <Option value=\"true\">Yes</Option>\n <Option value=\"false\">No</Option>\n </Dropdown>\n );\n\n case 'number':\n return (\n <Input\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n type=\"number\"\n value={String(condition.value ?? '')}\n onChange={(_, data) => onValueChange(data.value)}\n disabled={isNullOperator}\n placeholder=\"Value\"\n />\n );\n\n default: // 'string' and any other types\n return (\n <Input\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n type=\"text\"\n value={String(condition.value ?? '')}\n onChange={(_, data) => onValueChange(data.value)}\n disabled={isNullOperator}\n placeholder=\"Value\"\n />\n );\n }\n },\n [styles.compactControl, styles.optionsetListbox, props.onLookupSearch],\n );\n\n const renderRowActions = React.useCallback(\n (onDelete: () => void) => (\n <Menu positioning=\"below-end\">\n <MenuTrigger disableButtonEnhancement>\n <Button size=\"small\" appearance=\"outline\" icon={<MoreHorizontalRegular />} aria-label=\"Row options\" />\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n <MenuItem icon={<DeleteRegular />} onClick={onDelete}>\n Delete\n </MenuItem>\n <MenuItem disabled>Make group</MenuItem>\n </MenuList>\n </MenuPopover>\n </Menu>\n ),\n [],\n );\n\n return (\n <div className={styles.container}>\n <div className={styles.headerRow}>\n <Text weight=\"semibold\" className={styles.headerTitle}>\n Edit filters: {props.entityDisplayName || props.entityName}\n </Text>\n </div>\n\n <div className={styles.toolbar}>\n <div className={styles.toolbarGroup}>\n {props.showResetToDefaultButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<ArrowResetRegular />}\n onClick={onReset}\n >\n Reset to default\n </Button>\n )}\n {props.showDownloadFetchXmlButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<ArrowDownloadRegular />}\n onClick={onDownloadFetchXml}\n >\n Download FetchXML\n </Button>\n )}\n {props.showUploadFetchXmlButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<ArrowUploadRegular />}\n onClick={onOpenUploadDialog}\n >\n Import FetchXML\n </Button>\n )}\n\n <Dialog open={uploadDialogOpen} onOpenChange={(_, data) => setUploadDialogOpen(data.open)}>\n <DialogSurface style={{ maxWidth: '600px' }}>\n <DialogBody>\n <DialogTitle>Import FetchXML</DialogTitle>\n <DialogContent style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <Text>Paste your FetchXML below to rebuild the query:</Text>\n <Textarea\n placeholder=\"<fetch><entity name='account'><filter>...</filter></entity></fetch>\"\n value={uploadXmlText}\n onChange={(_, data) => setUploadXmlText(data.value)}\n style={{ minHeight: '200px', fontFamily: 'monospace' }}\n resize=\"vertical\"\n />\n {uploadError && (\n <Text style={{ color: 'var(--colorStatusDangerForeground1)' }}>{uploadError}</Text>\n )}\n </DialogContent>\n <DialogActions>\n <DialogTrigger disableButtonEnhancement>\n <Button appearance=\"secondary\">Cancel</Button>\n </DialogTrigger>\n <Button appearance=\"primary\" onClick={onApplyUploadedXml} disabled={!uploadXmlText.trim()}>\n Apply\n </Button>\n </DialogActions>\n </DialogBody>\n </DialogSurface>\n </Dialog>\n {props.showValidateButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<CheckmarkCircleRegular />}\n onClick={onValidate}\n >\n Validate\n </Button>\n )}\n\n <Dialog open={validationDialogOpen} onOpenChange={(_, data) => setValidationDialogOpen(data.open)}>\n <DialogSurface style={{ maxWidth: '500px' }}>\n <DialogBody>\n <DialogTitle>Query Validation</DialogTitle>\n <DialogContent style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n {/* Local Validation Section */}\n <div>\n <Text weight=\"semibold\" style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n {validationResult?.isValid ? (\n <span className={styles.validationSuccess}>\n <CheckmarkCircleRegular className={styles.validationIcon} />\n Query Structure: Valid\n </span>\n ) : (\n <span className={styles.validationError}>\n <WarningRegular className={styles.validationIcon} />\n Query Structure: Errors Found\n </span>\n )}\n </Text>\n {!validationResult?.isValid && (\n <ul className={styles.validationErrorList}>\n {validationResult?.errors.map((error, idx) => (\n <li key={idx} className={styles.validationErrorItem}>\n <strong>{error.fieldLabel}:</strong> {error.message}\n </li>\n ))}\n </ul>\n )}\n </div>\n\n {/* API Validation Section */}\n <div className={styles.apiValidationSection}>\n <Text weight=\"semibold\" style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n Dynamics 365 API Test\n </Text>\n {!validationResult?.apiValidation?.available ? (\n <Text className={styles.apiUnavailable}>\n API validation unavailable — not running in Dynamics 365 environment.\n </Text>\n ) : !validationResult?.isValid ? (\n <Text className={styles.apiUnavailable}>\n Fix query structure errors before testing against the API.\n </Text>\n ) : apiValidating ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <Spinner size=\"tiny\" />\n <Text>Testing query against Dynamics 365...</Text>\n </div>\n ) : validationResult?.apiValidation?.tested ? (\n validationResult.apiValidation.success ? (\n <Text className={styles.validationSuccess}>\n <CheckmarkCircleRegular className={styles.validationIcon} />\n Query executed successfully. {validationResult.apiValidation.recordCount ?? 0} record(s) would match.\n </Text>\n ) : (\n <Text className={styles.validationError}>\n <WarningRegular className={styles.validationIcon} />\n API Error: {validationResult.apiValidation.errorMessage}\n </Text>\n )\n ) : (\n <Text className={styles.apiUnavailable}>Waiting for validation...</Text>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <DialogTrigger disableButtonEnhancement>\n <Button appearance=\"primary\">OK</Button>\n </DialogTrigger>\n </DialogActions>\n </DialogBody>\n </DialogSurface>\n </Dialog>\n {props.showDeleteAllFiltersButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<DeleteRegular />}\n onClick={onDeleteAll}\n >\n Delete all filters\n </Button>\n )}\n </div>\n </div>\n\n {loading ? (\n <div className={styles.loadingWrap}>\n <Spinner label=\"Loading fields...\" />\n </div>\n ) : (\n <div className={styles.groupsContainer}>\n <div className={styles.rootLogicRow}>\n <Combobox className={styles.rootLogicSelect} size=\"small\" appearance=\"filled-darker\" value=\"AND\" disabled>\n <Option value=\"AND\">AND</Option>\n </Combobox>\n </div>\n {builderState.groups.map((group, groupIndex) => {\n const hasBetweenOperator = group.conditions.some((c) => c.operator === 'between');\n const headerRowClass = mergeClasses(\n styles.columnHeaderRow,\n hasBetweenOperator && styles.columnHeaderRowWithBetween,\n );\n const rowGridClass = mergeClasses(\n styles.rowGrid,\n hasBetweenOperator && styles.rowGridWithBetween,\n );\n const isLastGroup = groupIndex === builderState.groups.length - 1;\n // Hide group logic dropdown when the only condition is a related entity\n const isOnlySingleRelatedEntity = group.conditions.length === 1 && group.conditions[0].kind === 'relatedEntity';\n const showGroupLogic = !isOnlySingleRelatedEntity;\n\n return (\n <div className={styles.groupTreeRow} key={group.id}>\n {/* Tree connector column */}\n <div className={mergeClasses(styles.treeConnector, isLastGroup && styles.treeConnectorLast)}>\n <div className={styles.treeConnectorLine} />\n <div className={styles.treeConnectorBranch} />\n </div>\n\n {/* Group card */}\n <div className={styles.groupCard} role=\"grid\" aria-label={`Filter group ${groupIndex + 1}`}>\n <div className={styles.groupHeader}>\n <div className={styles.groupHeaderLeft}>\n {showGroupLogic && (\n <Combobox\n className={styles.groupLogicSelect}\n size=\"small\"\n appearance=\"filled-darker\"\n selectedOptions={[group.logic]}\n value={group.logic === 'or' ? 'OR' : 'AND'}\n aria-label=\"Group logic\"\n onOptionSelect={(_, data) =>\n updateGroup(group.id, (current) => ({\n ...current,\n logic: data.optionValue === 'or' ? 'or' : 'and',\n }))\n }\n >\n <Option value=\"and\">AND</Option>\n <Option value=\"or\">OR</Option>\n </Combobox>\n )}\n </div>\n\n <div className={styles.groupHeaderRight}>\n {props.allowGroups !== false && builderState.groups.length > 1 && (\n <Button\n size=\"small\"\n appearance=\"subtle\"\n icon={<DismissRegular />}\n aria-label=\"Remove group\"\n onClick={() =>\n setBuilderState((previous) => ({\n groups: previous.groups.filter((candidate) => candidate.id !== group.id),\n }))\n }\n />\n )}\n </div>\n </div>\n\n <div className={headerRowClass} role=\"row\" aria-hidden=\"true\">\n <span className={styles.headerField}>Field</span>\n <span className={styles.headerOperator}>Operator</span>\n <span className={styles.headerValue}>Value</span>\n {hasBetweenOperator && <span className={styles.headerAnd}>And</span>}\n <span className={styles.headerRemove} />\n </div>\n\n <div className={styles.conditionsList}>\n {group.conditions.map((condition, conditionIndex) => {\n const isLastCondition = conditionIndex === group.conditions.length - 1;\n const connectorClass = mergeClasses(\n styles.conditionConnector,\n isLastCondition && styles.conditionConnectorLast,\n );\n\n if (condition.kind === 'relatedEntity') {\n const relatedEntityRowClass = mergeClasses(\n styles.conditionTreeRow,\n invalidConditionIds.has(condition.id) && styles.conditionInvalid,\n );\n const selectedRelated = computedRelatedEntities.find(r => r.id === condition.relatedEntityName);\n const nestedFields = condition.nestedFields || [];\n const nestedConditions = condition.nestedConditions || [];\n const nestedDefaultField = nestedFields[0] || defaultField;\n\n // Handler to select related entity and load its fields\n const handleRelatedEntitySelect = (_: any, data: { optionValue?: string }) => {\n const relatedId = data.optionValue;\n const related = computedRelatedEntities.find(r => r.id === relatedId);\n\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? {\n ...row,\n relatedEntityName: relatedId,\n relatedEntityTarget: related?.targetEntity,\n fieldId: relatedId || '__related_entity__',\n nestedConditions: [],\n nestedFields: [],\n }\n : row,\n ),\n }));\n\n // Load fields for the related entity\n if (related?.targetEntity) {\n loadRelatedEntityFields(group.id, condition.id, related.targetEntity);\n }\n };\n\n return (\n <div className={relatedEntityRowClass} key={condition.id}>\n <div className={connectorClass}>\n <div className={styles.conditionConnectorLine} />\n <div className={styles.conditionConnectorBranch} />\n </div>\n <div className={styles.relatedEntityCard}>\n <div className={styles.relatedEntityHeader}>\n <Text className={styles.relatedEntityLabel}>Related:</Text>\n <Button\n size=\"small\"\n appearance=\"subtle\"\n icon={<DismissRegular />}\n aria-label=\"Remove related entity\"\n onClick={() => removeCondition(group.id, condition.id)}\n />\n </div>\n <Dropdown\n className={styles.relatedEntityDropdown}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Related entity\"\n listbox={{ className: styles.optionsetListbox }}\n selectedOptions={condition.relatedEntityName ? [condition.relatedEntityName] : []}\n value={selectedRelated?.label || 'Select related entity...'}\n onOptionSelect={handleRelatedEntitySelect}\n >\n {computedRelatedEntities.length > 0 ? (\n computedRelatedEntities.map((related) => (\n <Option key={related.id} value={related.id}>\n {related.label}\n </Option>\n ))\n ) : (\n <Option value=\"\">No related entities available</Option>\n )}\n </Dropdown>\n {nestedConditions.length > 1 && (\n <Combobox\n size=\"small\"\n appearance=\"filled-darker\"\n className={styles.nestedLogicDropdown}\n selectedOptions={[condition.nestedLogic || 'and']}\n value={condition.nestedLogic === 'or' ? 'OR' : 'AND'}\n aria-label=\"Nested logic\"\n onOptionSelect={(_, data) =>\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? { ...row, nestedLogic: data.optionValue === 'or' ? 'or' : 'and' }\n : row,\n ),\n }))\n }\n >\n <Option value=\"and\">AND</Option>\n <Option value=\"or\">OR</Option>\n </Combobox>\n )}\n\n {/* Nested conditions for the related entity */}\n {/* Show if: we have fields loaded, OR we have existing conditions (from parsed FetchXML) */}\n {selectedRelated && (nestedFields.length > 0 || nestedConditions.length > 0) && (\n <div className={styles.relatedEntityConditions}>\n {/* Column headers for nested conditions */}\n <div className={styles.nestedConditionHeader}>\n <span>Field</span>\n <span>Operator</span>\n <span>Value</span>\n <span />\n </div>\n\n {nestedConditions.map((nestedCond) => {\n const nestedField = nestedFields.find(f => f.id === nestedCond.fieldId) || nestedDefaultField;\n const nestedOperators = getOperatorsForType(nestedField.dataType);\n const isNestedNullOp = nestedCond.operator === 'null' || nestedCond.operator === 'notnull';\n\n // Build lookup options for nested field selector using same format as main field selector\n const formatDataType = (dataType: QueryBuilderField['dataType']): string => {\n const labels: Record<QueryBuilderField['dataType'], string> = {\n string: 'Text',\n number: 'Number',\n datetime: 'Date/Time',\n boolean: 'Yes/No',\n optionset: 'Choice',\n lookup: 'Lookup',\n };\n return labels[dataType] || dataType;\n };\n\n const nestedFieldLookupOptions: LookupOption[] = nestedFields.map((f) => ({\n key: f.id,\n text: f.label,\n details: [\n { label: 'Logical Name', value: f.id },\n ...(f.schemaName ? [{ label: 'Schema Name', value: f.schemaName }] : []),\n { label: 'Type', value: formatDataType(f.dataType) },\n ],\n data: f,\n }));\n\n return (\n <div key={nestedCond.id} className={styles.nestedConditionRow}>\n <Lookup\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Field\"\n options={nestedFieldLookupOptions}\n selectedKey={nestedCond.fieldId}\n clearable={false}\n placeholder=\"Select field...\"\n onOptionSelect={(option) => {\n if (!option) return;\n const newField = (option.data as QueryBuilderField) || nestedFields.find(f => f.id === option.key) || nestedDefaultField;\n updateNestedCondition(group.id, condition.id, nestedCond.id, (nc) => ({\n ...nc,\n fieldId: newField.id,\n operator: getOperatorsForType(newField.dataType)[0].value as any,\n value: getDefaultValueForField(newField),\n }));\n }}\n />\n\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Operator\"\n selectedOptions={[nestedCond.operator]}\n value={nestedOperators.find(op => op.value === nestedCond.operator)?.label || ''}\n onOptionSelect={(_, data) =>\n updateNestedCondition(group.id, condition.id, nestedCond.id, (nc) => ({\n ...nc,\n operator: (data.optionValue as any) || nc.operator,\n }))\n }\n >\n {nestedOperators.map(op => (\n <Option key={op.value} value={op.value}>{op.label}</Option>\n ))}\n </Dropdown>\n\n {renderValueInput(nestedField, nestedCond, isNestedNullOp, (value, displayName) => {\n updateNestedCondition(group.id, condition.id, nestedCond.id, (nc) => ({\n ...nc,\n value,\n valueDisplayName: displayName,\n }));\n })}\n\n {renderRowActions(() => removeNestedCondition(group.id, condition.id, nestedCond.id))}\n </div>\n );\n })}\n\n <div className={styles.relatedEntityAddRow}>\n <Button\n size=\"small\"\n appearance=\"outline\"\n icon={<AddRegular />}\n onClick={() => addNestedCondition(group.id, condition.id, nestedFields)}\n >\n Add condition\n </Button>\n </div>\n </div>\n )}\n\n {/* Show loading state only when no conditions exist and fields are loading */}\n {selectedRelated && nestedFields.length === 0 && nestedConditions.length === 0 && (\n <div style={{ padding: '8px 0', color: 'var(--colorNeutralForeground3)', fontSize: '12px' }}>\n <Spinner size=\"tiny\" label=\"Loading fields...\" />\n </div>\n )}\n {!selectedRelated && (\n <div style={{ padding: '8px 0', color: 'var(--colorNeutralForeground3)', fontSize: '12px' }}>\n Select a related entity to add filter conditions.\n </div>\n )}\n </div>\n </div>\n );\n }\n\n const selectedField = availableFields.find((field) => field.id === condition.fieldId) || defaultField;\n const operators = getOperatorsForType(selectedField.dataType);\n const isNullOperator = condition.operator === 'null' || condition.operator === 'notnull';\n const isBetween = condition.operator === 'between';\n const conditionRowClass = mergeClasses(\n styles.conditionTreeRow,\n invalidConditionIds.has(condition.id) && styles.conditionInvalid,\n );\n\n return (\n <div className={conditionRowClass} key={condition.id}>\n <div className={connectorClass}>\n <div className={styles.conditionConnectorLine} />\n <div className={styles.conditionConnectorBranch} />\n </div>\n <div className={rowGridClass} role=\"row\">\n <div className={styles.fieldCell} role=\"gridcell\">\n <Lookup\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Field\"\n options={fieldLookupOptions}\n selectedKey={condition.fieldId}\n clearable={false}\n placeholder=\"Select field...\"\n onOptionSelect={(option) => {\n if (!option) return;\n const nextField = (option.data as QueryBuilderField) || availableFields.find((field) => field.id === option.key) || defaultField;\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? {\n ...row,\n fieldId: nextField.id,\n operator: getOperatorsForType(nextField.dataType)[0].value as any,\n value: getDefaultValueForField(nextField),\n value2: '',\n }\n : row,\n ),\n }));\n }}\n />\n </div>\n\n <div className={styles.operatorCell} role=\"gridcell\">\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Operator\"\n value={operators.find((op) => op.value === condition.operator)?.label || ''}\n selectedOptions={[condition.operator]}\n onOptionSelect={(_, data) =>\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? {\n ...row,\n operator: (data.optionValue as any) || row.operator,\n }\n : row,\n ),\n }))\n }\n >\n {operators.map((operator) => (\n <Option key={operator.value} value={operator.value}>\n {operator.label}\n </Option>\n ))}\n </Dropdown>\n </div>\n\n <div className={styles.valueCell} role=\"gridcell\">\n {renderValueInput(selectedField, condition, isNullOperator, (value, displayName) => {\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? { ...row, value, valueDisplayName: displayName }\n : row,\n ),\n }));\n })}\n </div>\n\n {hasBetweenOperator && (\n isBetween ? (\n <div className={styles.andCell} role=\"gridcell\">\n {selectedField.dataType === 'datetime' ? (\n <DatePicker\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Second value\"\n value={condition.value2 ? new Date(String(condition.value2)) : null}\n onSelectDate={(date) =>\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? { ...row, value2: date ? date.toISOString().split('T')[0] : '' }\n : row,\n ),\n }))\n }\n placeholder=\"And\"\n />\n ) : (\n <Input\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Second value\"\n type={selectedField.dataType === 'number' ? 'number' : 'text'}\n value={String(condition.value2 ?? '')}\n onChange={(_, data) =>\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id ? { ...row, value2: data.value } : row,\n ),\n }))\n }\n placeholder=\"And\"\n />\n )}\n </div>\n ) : (\n <div className={styles.andCell} role=\"gridcell\" />\n )\n )}\n\n <div className={styles.removeCell} role=\"gridcell\">\n {renderRowActions(() => removeCondition(group.id, condition.id))}\n </div>\n </div>\n </div>\n );\n })}\n\n {/* Add condition button */}\n <div className={styles.addButtonRow}>\n <div className={styles.addButtonConnector}>\n <div className={styles.addButtonConnectorLine} />\n <div className={styles.addButtonConnectorBranch} />\n </div>\n <Button appearance=\"outline\" size=\"small\" icon={<AddRegular />} onClick={() => addRowToGroup(group.id)}>\n Add condition\n </Button>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n\n {/* Bottom-level Add button for groups and related entities */}\n <div className={styles.bottomAddRow}>\n <div className={styles.bottomAddConnector}>\n <div className={styles.bottomAddConnectorLine} />\n <div className={styles.bottomAddConnectorBranch} />\n </div>\n <Menu positioning=\"below-start\">\n <MenuTrigger disableButtonEnhancement>\n <Button appearance=\"outline\" size=\"small\" icon={<AddRegular />}>\n Add\n </Button>\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n {props.allowGroups !== false && (\n <MenuItem icon={<span className={styles.menuGlyph}>≡</span>} onClick={() => addItem('group')}>\n Add group\n </MenuItem>\n )}\n {props.allowRelatedEntity !== false && computedRelatedEntities.length > 0 && (\n <MenuItem icon={<span className={styles.menuGlyph}>▦</span>} onClick={() => addItem('related')}>\n Add related entity\n </MenuItem>\n )}\n </MenuList>\n </MenuPopover>\n </Menu>\n </div>\n </div>\n )}\n\n {props.showODataPreview && (\n <div className={styles.previewCard}>\n <div className={styles.previewHeader}>\n <Text weight=\"semibold\">OData Preview</Text>\n <Button\n appearance=\"subtle\"\n icon={<CopyRegular />}\n size=\"small\"\n onClick={() => navigator.clipboard.writeText(serialized.odataFilter || '')}\n title=\"Copy to clipboard\"\n />\n </div>\n <Text className={styles.previewCode}>{serialized.odataFilter || '(empty)'}</Text>\n </div>\n )}\n\n {props.showFetchXmlPreview && (\n <div className={styles.previewCard}>\n <div className={styles.previewHeader}>\n <Text weight=\"semibold\">FetchXML Preview</Text>\n <Button\n appearance=\"subtle\"\n icon={<CopyRegular />}\n size=\"small\"\n onClick={() => navigator.clipboard.writeText(serialized.fetchXml || '')}\n title=\"Copy to clipboard\"\n />\n </div>\n <Text className={styles.previewCode}>{serialized.fetchXml ? prettyPrintXml(serialized.fetchXml) : '(empty)'}</Text>\n </div>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Lookup/Lookup.styles.ts","../src/components/Lookup/Lookup.tsx","../src/components/QueryBuilder/QueryBuilder.styles.ts","../src/components/QueryBuilder/QueryBuilder.operators.ts","../src/components/QueryBuilder/QueryBuilder.serializer.ts","../src/components/QueryBuilder/QueryBuilder.parser.ts","../src/components/QueryBuilder/QueryBuilder.utils.ts","../src/components/QueryBuilder/QueryBuilder.LookupInput.tsx","../src/components/QueryBuilder/QueryBuilder.enrichment.ts","../src/components/QueryBuilder/QueryBuilder.tsx"],"names":["makeStyles","tokens","useId","React","ownerWin","Input","mergeClasses","Button","DismissRegular","Spinner","ChevronDownRegular","Portal","React2","hasValidTargets","Text","React3","Dropdown","Option","DatePicker","Menu","MenuTrigger","MoreHorizontalRegular","MenuPopover","MenuList","MenuItem","DeleteRegular","ArrowResetRegular","ArrowDownloadRegular","ArrowUploadRegular","Dialog","DialogSurface","DialogBody","DialogTitle","DialogContent","Textarea","DialogActions","DialogTrigger","CheckmarkCircleRegular","WarningRegular","Combobox","AddRegular","CopyRegular"],"mappings":"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","file":"index.js","sourcesContent":["import { makeStyles, tokens } from '@fluentui/react-components';\n\nexport const useLookupStyles = makeStyles({\n root: {\n position: 'relative',\n display: 'inline-flex',\n flexDirection: 'column',\n width: '100%',\n },\n\n inputWrapper: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n },\n\n input: {\n width: '100%',\n },\n\n iconContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: '2px',\n },\n\n iconButton: {\n minWidth: '20px',\n minHeight: '20px',\n padding: '0',\n },\n\n chevronIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '20px',\n height: '20px',\n },\n\n dropdownPortal: {\n position: 'absolute',\n padding: 0,\n minWidth: '220px',\n zIndex: 1000000,\n backgroundColor: tokens.colorNeutralBackground1,\n borderRadius: tokens.borderRadiusXLarge,\n boxShadow: tokens.shadow16,\n border: `1px solid ${tokens.colorNeutralStroke1}`,\n boxSizing: 'border-box',\n overflow: 'hidden',\n },\n\n dropdownContent: {\n maxHeight: '350px',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n },\n\n optionsList: {\n display: 'flex',\n flexDirection: 'column',\n padding: '4px',\n gap: '2px',\n },\n\n option: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n boxSizing: 'border-box',\n padding: '8px 12px',\n cursor: 'pointer',\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: 'transparent',\n border: 'none',\n width: '100%',\n overflow: 'hidden',\n textAlign: 'left',\n gap: '8px',\n\n '&:hover': {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n },\n\n '&:focus': {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n outline: `2px solid ${tokens.colorBrandStroke1}`,\n outlineOffset: '-2px',\n },\n },\n\n optionIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '20px',\n height: '20px',\n flexShrink: 0,\n color: tokens.colorNeutralForeground3,\n },\n\n optionContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 auto',\n minWidth: 0,\n },\n\n optionExpandButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n marginLeft: 'auto',\n flexShrink: 0,\n cursor: 'pointer',\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: 'transparent',\n border: 'none',\n color: tokens.colorNeutralForeground3,\n transition: 'transform 0.2s ease',\n\n '&:hover': {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n color: tokens.colorNeutralForeground1,\n },\n },\n\n optionExpandButtonExpanded: {\n transform: 'rotate(180deg)',\n },\n\n optionHighlighted: {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n },\n\n optionSelected: {\n backgroundColor: tokens.colorBrandBackground2,\n '&:hover': {\n backgroundColor: tokens.colorBrandBackground2Hover,\n },\n },\n\n optionDisabled: {\n cursor: 'not-allowed',\n opacity: 0.5,\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n\n optionText: {\n fontSize: tokens.fontSizeBase300,\n fontWeight: tokens.fontWeightRegular,\n color: tokens.colorNeutralForeground1,\n },\n\n optionSecondaryText: {\n fontSize: tokens.fontSizeBase200,\n fontWeight: tokens.fontWeightRegular,\n color: tokens.colorNeutralForeground3,\n marginTop: '2px',\n },\n\n optionDetails: {\n display: 'flex',\n flexDirection: 'column',\n marginTop: '4px',\n paddingTop: '4px',\n borderTop: `1px solid ${tokens.colorNeutralStroke2}`,\n gap: '2px',\n },\n\n optionDetailRow: {\n display: 'flex',\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorNeutralForeground3,\n gap: '4px',\n },\n\n optionDetailLabel: {\n color: tokens.colorNeutralForeground4,\n },\n\n optionDetailValue: {\n color: tokens.colorNeutralForeground3,\n },\n\n loadingContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '16px',\n },\n\n noResults: {\n padding: '16px',\n textAlign: 'center',\n color: tokens.colorNeutralForeground3,\n fontSize: tokens.fontSizeBase300,\n },\n\n headerWrapper: {\n padding: '2px',\n backgroundColor: tokens.colorNeutralBackground1,\n },\n\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderRadius: tokens.borderRadiusMedium,\n padding: '6px 12px',\n minHeight: '24px',\n backgroundColor: tokens.colorNeutralBackground3,\n backgroundImage: `repeating-linear-gradient(\n -45deg,\n transparent,\n transparent 1px,\n rgba(0, 0, 0, 0.02) 1px,\n rgba(0, 0, 0, 0.02) 2px\n )`,\n gap: '8px',\n },\n\n footerWrapper: {\n padding: '8px',\n paddingTop: '0',\n backgroundColor: tokens.colorNeutralBackground1,\n },\n\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '6px 12px',\n minHeight: '24px',\n borderTop: `1px solid ${tokens.colorNeutralStroke2}`,\n backgroundColor: tokens.colorNeutralBackground1,\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorNeutralForeground2,\n gap: '8px',\n },\n\n optionsContainer: {\n maxHeight: '250px',\n overflowY: 'auto',\n overflowX: 'hidden',\n },\n});\n","import * as React from 'react';\nimport {\n Input,\n Spinner,\n mergeClasses,\n Button,\n Portal,\n useId,\n} from '@fluentui/react-components';\nimport { DismissRegular, ChevronDownRegular } from '@fluentui/react-icons';\nimport { useLookupStyles } from './Lookup.styles';\nimport type { LookupProps, LookupOption } from './Lookup.types';\n\nexport const Lookup: React.FC<LookupProps> = ({\n id,\n options = [],\n selectedKey,\n selectedOption: selectedOptionProp,\n onOptionSelect,\n onSearchChange,\n placeholder = 'Search...',\n loading = false,\n noResultsMessage = 'No results found',\n clearable = true,\n minSearchLength = 0,\n searchDebounceMs = 300,\n matchInputWidth = true,\n disabled,\n header,\n footer,\n open: controlledOpen,\n onOpenChange,\n ...inputProps\n}) => {\n const styles = useLookupStyles();\n const ariaLabel = inputProps['aria-label'];\n const ariaLabelledBy = inputProps['aria-labelledby'];\n\n // Generate unique ID for accessibility - use provided id or auto-generate\n const autoId = useId('lookup-');\n const lookupId = id ?? autoId;\n\n const [internalOpen, setInternalOpen] = React.useState(false);\n\n // Controlled vs uncontrolled open state\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setIsOpen = React.useCallback(\n (value: boolean | ((prev: boolean) => boolean)) => {\n const nextValue = typeof value === 'function' ? value(isOpen) : value;\n if (!isControlled) {\n setInternalOpen(nextValue);\n }\n onOpenChange?.(nextValue);\n },\n [isControlled, isOpen, onOpenChange]\n );\n const [searchText, setSearchText] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n const [expandedKeys, setExpandedKeys] = React.useState<Set<string>>(new Set());\n const [internalSelectedOption, setInternalSelectedOption] = React.useState<LookupOption | null>(null);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n const inputWrapperRef = React.useRef<HTMLDivElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const debounceRef = React.useRef<ReturnType<typeof setTimeout>>();\n const justSelectedRef = React.useRef(false);\n const [dropdownPosition, setDropdownPosition] = React.useState<{ top: number; left: number; width: number }>({ top: 0, left: 0, width: 0 });\n\n // Find the selected option - prefer props, fallback to internal state\n const selectedOption = React.useMemo(\n () => selectedOptionProp ?? options.find((opt) => opt.key === selectedKey) ?? internalSelectedOption,\n [selectedOptionProp, options, selectedKey, internalSelectedOption]\n );\n\n // Filter options based on search text\n const filteredOptions = React.useMemo(() => {\n if (!searchText || searchText.length < minSearchLength) {\n return options;\n }\n const lowerSearch = searchText.toLowerCase();\n return options.filter(\n (opt) =>\n opt.text.toLowerCase().includes(lowerSearch) ||\n opt.secondaryText?.toLowerCase().includes(lowerSearch)\n );\n }, [options, searchText, minSearchLength]);\n\n const highlightedOptionId = React.useMemo(() => {\n if (!isOpen || highlightedIndex < 0 || highlightedIndex >= filteredOptions.length) {\n return undefined;\n }\n\n return `${lookupId}-option-${filteredOptions[highlightedIndex].key}`;\n }, [filteredOptions, highlightedIndex, isOpen, lookupId]);\n\n // Display value in input\n const displayValue = React.useMemo(() => {\n if (isOpen) {\n return searchText;\n }\n return selectedOption?.text ?? '';\n }, [isOpen, searchText, selectedOption]);\n\n // ─── Open / close helpers ────────────────────────────────────────\n const openDropdown = React.useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n const closeDropdown = React.useCallback(() => {\n setIsOpen(false);\n setSearchText('');\n setHighlightedIndex(-1);\n }, []);\n\n // Handle search text change with debounce\n const handleSearchChange = React.useCallback(\n (value: string) => {\n setSearchText(value);\n setHighlightedIndex(-1);\n\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n if (onSearchChange && value.length >= minSearchLength) {\n debounceRef.current = setTimeout(() => {\n onSearchChange(value);\n }, searchDebounceMs);\n }\n },\n [onSearchChange, minSearchLength, searchDebounceMs]\n );\n\n // Handle input change\n const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n handleSearchChange(value);\n if (!isOpen) {\n openDropdown();\n }\n },\n [handleSearchChange, isOpen, openDropdown]\n );\n\n // Handle option selection\n const handleSelectOption = React.useCallback(\n (option: LookupOption) => {\n if (option.disabled) return;\n\n justSelectedRef.current = true;\n setInternalSelectedOption(option);\n onOptionSelect?.(option);\n setSearchText('');\n setIsOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.focus();\n },\n [onOptionSelect]\n );\n\n // Handle clear\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n setInternalSelectedOption(null);\n onOptionSelect?.(null);\n setSearchText('');\n setHighlightedIndex(-1);\n inputRef.current?.focus();\n },\n [onOptionSelect]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n openDropdown();\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (isOpen) {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1\n );\n }\n break;\n\n case 'Enter':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0 && filteredOptions[highlightedIndex]) {\n handleSelectOption(filteredOptions[highlightedIndex]);\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n closeDropdown();\n break;\n\n case 'Tab':\n closeDropdown();\n break;\n }\n },\n [disabled, isOpen, highlightedIndex, filteredOptions, handleSelectOption, openDropdown, closeDropdown]\n );\n\n // Handle input focus — open the dropdown\n const handleFocus = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n if (!disabled) {\n // Don't reopen if we just selected an option\n if (justSelectedRef.current) {\n justSelectedRef.current = false;\n return;\n }\n openDropdown();\n }\n // Forward to consumer's onFocus if provided\n inputProps.onFocus?.(e);\n },\n [disabled, openDropdown, inputProps.onFocus]\n );\n\n // Handle click on the wrapper — also opens (in case focus doesn't fire\n // because the input is already focused, e.g. clicking the chevron area)\n const handleWrapperClick = React.useCallback(() => {\n if (!disabled && !isOpen) {\n openDropdown();\n inputRef.current?.focus();\n }\n }, [disabled, isOpen, openDropdown]);\n\n // Cleanup debounce on unmount\n React.useEffect(() => {\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n };\n }, []);\n\n // Scroll highlighted option into view\n React.useEffect(() => {\n if (highlightedIndex >= 0 && dropdownRef.current) {\n const option = dropdownRef.current.querySelector(\n `[data-index=\"${highlightedIndex}\"]`\n );\n option?.scrollIntoView({ block: 'nearest' });\n }\n }, [highlightedIndex]);\n\n // ─── Position the dropdown below the input ─────────────────────\n React.useEffect(() => {\n if (!isOpen) return;\n\n const updatePosition = () => {\n const rect = inputWrapperRef.current?.getBoundingClientRect();\n if (rect) {\n // Use ownerDocument's window for scroll offsets (cross-document safe)\n const ownerWin = inputWrapperRef.current?.ownerDocument?.defaultView ?? window;\n setDropdownPosition({\n top: rect.bottom + 4 + ownerWin.scrollY,\n left: rect.left + ownerWin.scrollX,\n width: matchInputWidth ? rect.width : 0,\n });\n }\n };\n\n updatePosition();\n\n // Track input resize (e.g. flex/grid layout changes)\n let resizeObserver: ResizeObserver | undefined;\n if (typeof ResizeObserver !== 'undefined' && inputWrapperRef.current) {\n resizeObserver = new ResizeObserver(() => updatePosition());\n resizeObserver.observe(inputWrapperRef.current);\n }\n\n // Use the ownerDocument's window for event listeners.\n // In cross-document scenarios (e.g., D365 iframes where React mounts\n // into the top window's document), the global `window` refers to the\n // iframe window, but events fire on the top window where the DOM lives.\n const ownerWin = inputWrapperRef.current?.ownerDocument?.defaultView ?? window;\n\n // Track window resize\n ownerWin.addEventListener('resize', updatePosition);\n\n // Track any scroll so the portal follows the input\n ownerWin.addEventListener('scroll', updatePosition, true);\n\n return () => {\n resizeObserver?.disconnect();\n ownerWin.removeEventListener('resize', updatePosition);\n ownerWin.removeEventListener('scroll', updatePosition, true);\n };\n }, [isOpen, matchInputWidth]);\n\n // ─── Close when clicking outside ───────────────────────────────\n React.useEffect(() => {\n if (!isOpen) return;\n\n const handlePointerDownOutside = (event: MouseEvent) => {\n const target = event.target as Node | null;\n if (!target) return;\n const insideInput = inputWrapperRef.current?.contains(target);\n const insideDropdown = dropdownRef.current?.contains(target);\n if (!insideInput && !insideDropdown) {\n closeDropdown();\n }\n };\n\n // Use ownerDocument instead of the global `document`.\n // In cross-document scenarios (e.g., D365 iframes where React renders\n // into the top window's document), the global `document` refers to the\n // iframe's document, but mousedown events fire on the top document\n // where the actual DOM elements live. Using ownerDocument ensures the\n // listener is on the correct document.\n //\n // Uses capture phase (true) so that stopPropagation() calls by host\n // applications (e.g., Dynamics 365) cannot prevent the handler from firing.\n const ownerDoc = inputWrapperRef.current?.ownerDocument ?? document;\n ownerDoc.addEventListener('mousedown', handlePointerDownOutside, true);\n\n return () => {\n ownerDoc.removeEventListener('mousedown', handlePointerDownOutside, true);\n };\n }, [isOpen, closeDropdown]);\n\n const showDropdown = isOpen && !disabled;\n\n return (\n <div className={styles.root}>\n <div\n className={styles.inputWrapper}\n ref={inputWrapperRef}\n onClick={handleWrapperClick}\n >\n <Input\n {...inputProps}\n id={lookupId}\n ref={inputRef}\n className={mergeClasses(styles.input, inputProps.className)}\n value={displayValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n placeholder={placeholder}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={isOpen ? `${lookupId}-listbox` : undefined}\n aria-autocomplete=\"list\"\n aria-activedescendant={highlightedOptionId}\n aria-label={ariaLabelledBy ? undefined : ariaLabel ?? placeholder ?? 'Lookup'}\n contentAfter={\n <span className={styles.iconContainer}>\n {clearable && selectedOption && !disabled && (\n <Button\n appearance=\"subtle\"\n size=\"small\"\n icon={<DismissRegular />}\n onClick={handleClear}\n className={styles.iconButton}\n aria-label=\"Clear selection\"\n />\n )}\n {loading ? (\n <Spinner size=\"tiny\" />\n ) : (\n <span className={styles.chevronIcon}>\n <ChevronDownRegular />\n </span>\n )}\n </span>\n }\n />\n </div>\n\n {showDropdown && (\n <Portal>\n <div\n className={styles.dropdownPortal}\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n ...(matchInputWidth && dropdownPosition.width > 0\n ? { width: dropdownPosition.width }\n : { minWidth: 220 }),\n }}\n >\n <div\n id={`${lookupId}-listbox`}\n className={styles.dropdownContent}\n ref={dropdownRef}\n role=\"listbox\"\n aria-labelledby={lookupId}\n >\n {header && (\n <div className={styles.headerWrapper}>\n <div className={styles.header}>{header}</div>\n </div>\n )}\n {loading ? (\n <div className={styles.loadingContainer}>\n <Spinner size=\"small\" label=\"Loading...\" />\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={styles.noResults}>{noResultsMessage}</div>\n ) : (\n <div className={styles.optionsContainer}>\n <div className={styles.optionsList}>\n {filteredOptions.map((option, index) => {\n const isExpanded = expandedKeys.has(option.key);\n const hasDetails = option.details && option.details.length > 0;\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n setExpandedKeys((prev) => {\n const next = new Set(prev);\n if (next.has(option.key)) {\n next.delete(option.key);\n } else {\n next.add(option.key);\n }\n return next;\n });\n };\n\n return (\n <div\n key={option.key}\n id={`${lookupId}-option-${option.key}`}\n role=\"option\"\n data-index={index}\n aria-selected={option.key === selectedOption?.key ? true : false}\n aria-disabled={option.disabled === true ? true : undefined}\n className={mergeClasses(\n styles.option,\n index === highlightedIndex && styles.optionHighlighted,\n option.key === selectedOption?.key && styles.optionSelected,\n option.disabled && styles.optionDisabled\n )}\n onClick={() => handleSelectOption(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n {option.icon && (\n <span className={styles.optionIcon}>{option.icon}</span>\n )}\n <span className={styles.optionContent}>\n <span className={styles.optionText}>{option.text}</span>\n {option.secondaryText && (\n <span className={styles.optionSecondaryText}>\n {option.secondaryText}\n </span>\n )}\n {isExpanded && hasDetails && (\n <div className={styles.optionDetails}>\n {option.details!.map((detail, detailIndex) => (\n <div key={detailIndex} className={styles.optionDetailRow}>\n {detail.label && (\n <span className={styles.optionDetailLabel}>\n {detail.label}:\n </span>\n )}\n <span className={styles.optionDetailValue}>\n {detail.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </span>\n {hasDetails && (\n <span\n role=\"button\"\n tabIndex={-1}\n className={mergeClasses(\n styles.optionExpandButton,\n isExpanded && styles.optionExpandButtonExpanded\n )}\n onClick={handleExpandClick}\n aria-label={isExpanded ? 'Collapse details' : 'Expand details'}\n >\n <ChevronDownRegular />\n </span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n )}\n {footer && (\n <div className={styles.footerWrapper}>\n <div className={styles.footer}>{footer}</div>\n </div>\n )}\n </div>\n </div>\n </Portal>\n )}\n </div>\n );\n};\n\nLookup.displayName = 'Lookup';\n","import { makeStyles, mergeClasses, tokens } from '@fluentui/react-components';\n\n/** Grid with 4th column for \"between\" value2 input */\nconst gridWithBetween = 'minmax(0, 1.6fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) auto';\n/** Grid without 4th column (standard 3-column + actions) */\nconst gridWithoutBetween = 'minmax(0, 1.6fr) minmax(0, 1fr) minmax(0, 1fr) auto';\n\n/** Tree connector column width */\nconst treeConnectorWidth = '24px';\n\nexport { mergeClasses };\n\nexport const useQueryBuilderStyles = makeStyles({\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: tokens.spacingVerticalXS,\n width: '100%',\n backgroundColor: tokens.colorNeutralBackground1,\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n overflow: 'hidden',\n },\n headerRow: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: tokens.spacingVerticalS,\n paddingBottom: tokens.spacingVerticalS,\n paddingLeft: tokens.spacingHorizontalM,\n paddingRight: tokens.spacingHorizontalM,\n borderBottom: `1px solid ${tokens.colorNeutralStroke2}`,\n },\n headerTitle: {\n color: tokens.colorNeutralForeground1,\n fontSize: tokens.fontSizeBase400,\n },\n toolbar: {\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'center',\n gap: tokens.spacingHorizontalM,\n flexWrap: 'wrap',\n paddingTop: tokens.spacingVerticalXS,\n paddingBottom: tokens.spacingVerticalXS,\n paddingLeft: tokens.spacingHorizontalM,\n paddingRight: tokens.spacingHorizontalM,\n },\n toolbarGroup: {\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacingHorizontalS,\n flexWrap: 'wrap',\n },\n caption: {\n color: tokens.colorNeutralForeground2,\n fontSize: tokens.fontSizeBase200,\n },\n groupsContainer: {\n display: 'flex',\n flexDirection: 'column',\n paddingLeft: tokens.spacingHorizontalM,\n paddingRight: tokens.spacingHorizontalM,\n paddingBottom: tokens.spacingVerticalM,\n minWidth: 0,\n overflow: 'hidden',\n },\n rootLogicRow: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: tokens.spacingVerticalXS,\n },\n rootLogicSelect: {\n width: '70px',\n },\n /** Grid row for each group: [connector] [card] */\n groupTreeRow: {\n display: 'grid',\n gridTemplateColumns: `${treeConnectorWidth} minmax(0, 1fr)`,\n minHeight: '32px',\n },\n /** Tree connector cell - draws vertical + horizontal lines */\n treeConnector: {\n position: 'relative',\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'flex-end',\n paddingTop: '16px',\n },\n /** Vertical line extending full height of connector cell */\n treeConnectorLine: {\n position: 'absolute',\n left: '8px',\n top: 0,\n bottom: 0,\n width: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n /** Horizontal branch from vertical line to content */\n treeConnectorBranch: {\n position: 'absolute',\n left: '8px',\n top: '16px',\n width: '14px',\n height: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n /** Hide vertical line below for last item */\n treeConnectorLast: {\n ':after': {\n content: '\"\"',\n position: 'absolute',\n left: '8px',\n top: '17px',\n bottom: 0,\n width: '1px',\n backgroundColor: tokens.colorNeutralBackground1,\n },\n },\n groupCard: {\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: tokens.colorNeutralBackground2,\n padding: tokens.spacingHorizontalS,\n display: 'flex',\n flexDirection: 'column',\n marginBottom: tokens.spacingVerticalS,\n minWidth: 0,\n overflow: 'hidden',\n },\n groupHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: tokens.spacingHorizontalS,\n flexWrap: 'wrap',\n borderBottom: `1px solid ${tokens.colorNeutralStroke2}`,\n paddingBottom: tokens.spacingVerticalXS,\n marginBottom: tokens.spacingVerticalS,\n },\n groupHeaderLeft: {\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacingHorizontalS,\n },\n groupLogicSelect: {\n minWidth: '92px',\n },\n groupHeaderRight: {\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacingHorizontalXS,\n },\n /** Conditions list inside group card */\n conditionsList: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n overflow: 'hidden',\n },\n /** Grid row for each condition: [connector] [row content] */\n conditionTreeRow: {\n display: 'grid',\n gridTemplateColumns: `${treeConnectorWidth} minmax(0, 1fr)`,\n minHeight: '36px',\n alignItems: 'center',\n },\n /** Inner connector for conditions within a group */\n conditionConnector: {\n position: 'relative',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n },\n conditionConnectorLine: {\n position: 'absolute',\n left: '8px',\n top: 0,\n bottom: 0,\n width: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n conditionConnectorBranch: {\n position: 'absolute',\n left: '8px',\n top: '50%',\n width: '14px',\n height: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n conditionConnectorLast: {\n ':after': {\n content: '\"\"',\n position: 'absolute',\n left: '8px',\n top: '50%',\n bottom: 0,\n width: '1px',\n backgroundColor: tokens.colorNeutralBackground2,\n },\n },\n columnHeaderRow: {\n display: 'grid',\n gridTemplateColumns: gridWithoutBetween,\n gap: tokens.spacingHorizontalS,\n alignItems: 'center',\n minWidth: 0,\n color: tokens.colorNeutralForeground3,\n fontSize: tokens.fontSizeBase200,\n fontWeight: tokens.fontWeightRegular,\n paddingLeft: tokens.spacingHorizontalXS,\n paddingRight: tokens.spacingHorizontalXS,\n marginBottom: tokens.spacingVerticalXS,\n },\n columnHeaderRowWithBetween: {\n gridTemplateColumns: gridWithBetween,\n },\n headerField: {},\n headerOperator: {},\n headerValue: {},\n headerAnd: {},\n headerRemove: {},\n rowGrid: {\n display: 'grid',\n gridTemplateColumns: gridWithoutBetween,\n gap: tokens.spacingHorizontalS,\n alignItems: 'center',\n minWidth: 0,\n backgroundColor: tokens.colorNeutralBackground1,\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n padding: tokens.spacingHorizontalXS,\n boxSizing: 'border-box',\n },\n rowGridWithBetween: {\n gridTemplateColumns: gridWithBetween,\n },\n fieldCell: {},\n operatorCell: {},\n valueCell: {},\n andCell: {},\n compactControl: {\n width: '100%',\n minWidth: 0,\n },\n optionsetListbox: {\n maxHeight: '300px',\n minWidth: 'fit-content',\n },\n removeCell: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n /** Add button row */\n addButtonRow: {\n display: 'grid',\n gridTemplateColumns: `${treeConnectorWidth} auto 1fr`,\n minHeight: '36px',\n alignItems: 'center',\n marginTop: tokens.spacingVerticalXS,\n },\n addButtonConnector: {\n position: 'relative',\n height: '100%',\n },\n addButtonConnectorLine: {\n position: 'absolute',\n left: '8px',\n top: 0,\n height: '50%',\n width: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n addButtonConnectorBranch: {\n position: 'absolute',\n left: '8px',\n top: '50%',\n width: '14px',\n height: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n transform: 'translateY(-50%)',\n },\n menuGlyph: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '14px',\n color: tokens.colorNeutralForeground2,\n },\n /** Bottom-level add row for adding groups/related entities */\n bottomAddRow: {\n display: 'grid',\n gridTemplateColumns: `${treeConnectorWidth} auto 1fr`,\n minHeight: '36px',\n alignItems: 'center',\n },\n bottomAddConnector: {\n position: 'relative',\n height: '100%',\n },\n bottomAddConnectorLine: {\n position: 'absolute',\n left: '8px',\n top: 0,\n height: '50%',\n width: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n },\n bottomAddConnectorBranch: {\n position: 'absolute',\n left: '8px',\n top: '50%',\n width: '14px',\n height: '1px',\n backgroundColor: tokens.colorBrandStroke1,\n transform: 'translateY(-50%)',\n },\n previewCard: {\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: tokens.colorNeutralBackground1,\n padding: tokens.spacingHorizontalS,\n marginTop: tokens.spacingVerticalS,\n marginLeft: tokens.spacingHorizontalM,\n marginRight: tokens.spacingHorizontalM,\n marginBottom: tokens.spacingVerticalM,\n },\n previewHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n conditionInvalid: {\n backgroundColor: tokens.colorPaletteRedBackground1,\n borderRadius: tokens.borderRadiusSmall,\n },\n validationIcon: {\n marginRight: tokens.spacingHorizontalXS,\n },\n validationSuccess: {\n color: tokens.colorPaletteGreenForeground1,\n },\n validationError: {\n color: tokens.colorPaletteDarkOrangeForeground1,\n },\n validationErrorList: {\n margin: 0,\n paddingLeft: tokens.spacingHorizontalL,\n listStyleType: 'disc',\n },\n validationErrorItem: {\n marginBottom: tokens.spacingVerticalXS,\n },\n apiValidationSection: {\n borderTop: `1px solid ${tokens.colorNeutralStroke2}`,\n paddingTop: tokens.spacingVerticalM,\n },\n apiUnavailable: {\n color: tokens.colorNeutralForeground3,\n fontStyle: 'italic',\n marginTop: tokens.spacingVerticalXS,\n },\n previewCode: {\n display: 'block',\n fontSize: tokens.fontSizeBase200,\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap',\n fontFamily: 'monospace',\n color: tokens.colorNeutralForeground2,\n marginTop: tokens.spacingVerticalXS,\n },\n loadingWrap: {\n display: 'flex',\n justifyContent: 'center',\n paddingTop: tokens.spacingVerticalXL,\n paddingBottom: tokens.spacingVerticalXL,\n },\n // Related entity nested card styles\n relatedEntityCard: {\n border: `1px solid ${tokens.colorBrandStroke1}`,\n borderRadius: tokens.borderRadiusSmall,\n backgroundColor: tokens.colorNeutralBackground3,\n padding: tokens.spacingHorizontalS,\n marginTop: tokens.spacingVerticalXS,\n marginBottom: tokens.spacingVerticalS,\n },\n relatedEntityHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: tokens.spacingHorizontalS,\n },\n relatedEntityHeaderLeft: {\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacingHorizontalS,\n flexWrap: 'wrap',\n },\n relatedEntityLabel: {\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorBrandForeground1,\n fontWeight: tokens.fontWeightSemibold,\n },\n relatedEntityDropdown: {\n width: '100%',\n marginTop: tokens.spacingVerticalXS,\n marginBottom: tokens.spacingVerticalXS,\n },\n nestedLogicDropdown: {\n width: '80px',\n marginBottom: tokens.spacingVerticalXS,\n },\n relatedEntityConditions: {\n display: 'flex',\n flexDirection: 'column',\n gap: tokens.spacingVerticalXS,\n },\n nestedConditionHeader: {\n display: 'grid',\n gridTemplateColumns: gridWithoutBetween,\n gap: tokens.spacingHorizontalS,\n alignItems: 'center',\n color: tokens.colorNeutralForeground3,\n fontSize: tokens.fontSizeBase200,\n fontWeight: tokens.fontWeightRegular,\n paddingLeft: tokens.spacingHorizontalXS,\n paddingRight: tokens.spacingHorizontalXS,\n marginBottom: tokens.spacingVerticalXS,\n },\n nestedConditionRow: {\n display: 'grid',\n gridTemplateColumns: gridWithoutBetween,\n gap: tokens.spacingHorizontalS,\n alignItems: 'center',\n minHeight: '32px',\n backgroundColor: tokens.colorNeutralBackground1,\n border: `1px solid ${tokens.colorNeutralStroke2}`,\n borderRadius: tokens.borderRadiusSmall,\n padding: tokens.spacingHorizontalXS,\n boxSizing: 'border-box',\n },\n nestedConditionRowWithBetween: {\n gridTemplateColumns: gridWithBetween,\n },\n relatedEntityAddRow: {\n paddingTop: tokens.spacingVerticalXS,\n },\n});\n","/**\n * QueryBuilder Operators\n * \n * Based on Microsoft Dynamics 365 FetchXML condition operators.\n * Reference: FetchXMLBuilder by Jonas Rapp (https://github.com/rappen/FetchXMLBuilder)\n */\n\nimport type { QueryBuilderDataType } from './QueryBuilder.types';\n\nexport interface OperatorDefinition {\n /** FetchXML operator value (e.g., 'eq', 'like', 'last-x-days') */\n value: string;\n /** Display label for UI */\n label: string;\n /** Whether operator requires a value */\n requiresValue: boolean;\n /** Whether operator requires a second value (e.g., between) */\n requiresValue2?: boolean;\n /** Whether operator accepts multiple values (e.g., in, not-in) */\n multipleValues?: boolean;\n /** Value type expected (number for X-days operators, date for on/on-or-before) */\n valueType?: 'number' | 'date' | 'string' | 'same';\n /** OData equivalent operator or function */\n odataOperator?: string;\n /** If true, this is a FetchXML-only operator with no OData equivalent */\n fetchXmlOnly?: boolean;\n /** Category for grouping in UI */\n category?: 'comparison' | 'text' | 'null' | 'date' | 'relative-date' | 'user-context' | 'hierarchy' | 'multi-value';\n}\n\n/**\n * All FetchXML condition operators supported by Dynamics 365\n */\nexport const ALL_OPERATORS: Record<string, OperatorDefinition> = {\n // === Comparison Operators (all types) ===\n 'eq': {\n value: 'eq',\n label: 'Equals',\n requiresValue: true,\n odataOperator: 'eq',\n category: 'comparison',\n },\n 'ne': {\n value: 'ne',\n label: 'Does Not Equal',\n requiresValue: true,\n odataOperator: 'ne',\n category: 'comparison',\n },\n 'gt': {\n value: 'gt',\n label: 'Greater Than',\n requiresValue: true,\n odataOperator: 'gt',\n category: 'comparison',\n },\n 'ge': {\n value: 'ge',\n label: 'Greater Than Or Equal',\n requiresValue: true,\n odataOperator: 'ge',\n category: 'comparison',\n },\n 'lt': {\n value: 'lt',\n label: 'Less Than',\n requiresValue: true,\n odataOperator: 'lt',\n category: 'comparison',\n },\n 'le': {\n value: 'le',\n label: 'Less Than Or Equal',\n requiresValue: true,\n odataOperator: 'le',\n category: 'comparison',\n },\n\n // === Null Operators (all types) ===\n 'null': {\n value: 'null',\n label: 'Is Empty',\n requiresValue: false,\n odataOperator: 'eq null',\n category: 'null',\n },\n 'not-null': {\n value: 'not-null',\n label: 'Has Value',\n requiresValue: false,\n odataOperator: 'ne null',\n category: 'null',\n },\n\n // === Text/String Operators ===\n 'like': {\n value: 'like',\n label: 'Like (Wildcard)',\n requiresValue: true,\n valueType: 'string',\n fetchXmlOnly: true, // OData uses functions\n category: 'text',\n },\n 'not-like': {\n value: 'not-like',\n label: 'Not Like (Wildcard)',\n requiresValue: true,\n valueType: 'string',\n fetchXmlOnly: true,\n category: 'text',\n },\n 'begins-with': {\n value: 'begins-with',\n label: 'Begins With',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'startswith',\n category: 'text',\n },\n 'not-begin-with': {\n value: 'not-begin-with',\n label: 'Does Not Begin With',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'not startswith',\n category: 'text',\n },\n 'ends-with': {\n value: 'ends-with',\n label: 'Ends With',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'endswith',\n category: 'text',\n },\n 'not-end-with': {\n value: 'not-end-with',\n label: 'Does Not End With',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'not endswith',\n category: 'text',\n },\n 'contains': {\n value: 'contains',\n label: 'Contains',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'contains',\n category: 'text',\n },\n 'not-contain': {\n value: 'not-contain',\n label: 'Does Not Contain',\n requiresValue: true,\n valueType: 'string',\n odataOperator: 'not contains',\n category: 'text',\n },\n\n // === Multi-Value Operators ===\n 'in': {\n value: 'in',\n label: 'Is One Of',\n requiresValue: true,\n multipleValues: true,\n odataOperator: 'in',\n category: 'multi-value',\n },\n 'not-in': {\n value: 'not-in',\n label: 'Is Not One Of',\n requiresValue: true,\n multipleValues: true,\n fetchXmlOnly: true, // OData requires multiple ne conditions\n category: 'multi-value',\n },\n 'between': {\n value: 'between',\n label: 'Between',\n requiresValue: true,\n requiresValue2: true,\n multipleValues: true,\n fetchXmlOnly: true, // OData uses ge/le combination\n category: 'multi-value',\n },\n 'not-between': {\n value: 'not-between',\n label: 'Not Between',\n requiresValue: true,\n requiresValue2: true,\n multipleValues: true,\n fetchXmlOnly: true,\n category: 'multi-value',\n },\n\n // === Multi-Select Picklist Operators ===\n 'contain-values': {\n value: 'contain-values',\n label: 'Contains Values',\n requiresValue: true,\n multipleValues: true,\n fetchXmlOnly: true,\n category: 'multi-value',\n },\n 'not-contain-values': {\n value: 'not-contain-values',\n label: 'Does Not Contain Values',\n requiresValue: true,\n multipleValues: true,\n fetchXmlOnly: true,\n category: 'multi-value',\n },\n\n // === Date Comparison Operators ===\n 'on': {\n value: 'on',\n label: 'On',\n requiresValue: true,\n valueType: 'date',\n odataOperator: 'eq',\n category: 'date',\n },\n 'on-or-before': {\n value: 'on-or-before',\n label: 'On Or Before',\n requiresValue: true,\n valueType: 'date',\n odataOperator: 'le',\n category: 'date',\n },\n 'on-or-after': {\n value: 'on-or-after',\n label: 'On Or After',\n requiresValue: true,\n valueType: 'date',\n odataOperator: 'ge',\n category: 'date',\n },\n 'not-on': {\n value: 'not-on',\n label: 'Not On',\n requiresValue: true,\n valueType: 'date',\n odataOperator: 'ne',\n category: 'date',\n },\n\n // === Relative Date Operators (no value required) ===\n 'today': {\n value: 'today',\n label: 'Today',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'yesterday': {\n value: 'yesterday',\n label: 'Yesterday',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'tomorrow': {\n value: 'tomorrow',\n label: 'Tomorrow',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'this-week': {\n value: 'this-week',\n label: 'This Week',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-week': {\n value: 'last-week',\n label: 'Last Week',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-week': {\n value: 'next-week',\n label: 'Next Week',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'this-month': {\n value: 'this-month',\n label: 'This Month',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-month': {\n value: 'last-month',\n label: 'Last Month',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-month': {\n value: 'next-month',\n label: 'Next Month',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'this-year': {\n value: 'this-year',\n label: 'This Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-year': {\n value: 'last-year',\n label: 'Last Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-year': {\n value: 'next-year',\n label: 'Next Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-seven-days': {\n value: 'last-seven-days',\n label: 'Last 7 Days',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-seven-days': {\n value: 'next-seven-days',\n label: 'Next 7 Days',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n\n // === Relative Date Operators with X Value ===\n 'last-x-hours': {\n value: 'last-x-hours',\n label: 'Last X Hours',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-hours': {\n value: 'next-x-hours',\n label: 'Next X Hours',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-days': {\n value: 'last-x-days',\n label: 'Last X Days',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-days': {\n value: 'next-x-days',\n label: 'Next X Days',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-weeks': {\n value: 'last-x-weeks',\n label: 'Last X Weeks',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-weeks': {\n value: 'next-x-weeks',\n label: 'Next X Weeks',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-months': {\n value: 'last-x-months',\n label: 'Last X Months',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-months': {\n value: 'next-x-months',\n label: 'Next X Months',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-years': {\n value: 'last-x-years',\n label: 'Last X Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-years': {\n value: 'next-x-years',\n label: 'Next X Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-minutes': {\n value: 'olderthan-x-minutes',\n label: 'Older Than X Minutes',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-hours': {\n value: 'olderthan-x-hours',\n label: 'Older Than X Hours',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-days': {\n value: 'olderthan-x-days',\n label: 'Older Than X Days',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-weeks': {\n value: 'olderthan-x-weeks',\n label: 'Older Than X Weeks',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-months': {\n value: 'olderthan-x-months',\n label: 'Older Than X Months',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'older-than-x-years': {\n value: 'olderthan-x-years',\n label: 'Older Than X Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n\n // === Fiscal Period Operators ===\n 'this-fiscal-year': {\n value: 'this-fiscal-year',\n label: 'This Fiscal Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'this-fiscal-period': {\n value: 'this-fiscal-period',\n label: 'This Fiscal Period',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-fiscal-year': {\n value: 'last-fiscal-year',\n label: 'Last Fiscal Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-fiscal-period': {\n value: 'last-fiscal-period',\n label: 'Last Fiscal Period',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-fiscal-year': {\n value: 'next-fiscal-year',\n label: 'Next Fiscal Year',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-fiscal-period': {\n value: 'next-fiscal-period',\n label: 'Next Fiscal Period',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-fiscal-years': {\n value: 'last-x-fiscal-years',\n label: 'Last X Fiscal Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'last-x-fiscal-periods': {\n value: 'last-x-fiscal-periods',\n label: 'Last X Fiscal Periods',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-fiscal-years': {\n value: 'next-x-fiscal-years',\n label: 'Next X Fiscal Years',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'next-x-fiscal-periods': {\n value: 'next-x-fiscal-periods',\n label: 'Next X Fiscal Periods',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-fiscal-year': {\n value: 'in-fiscal-year',\n label: 'In Fiscal Year',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-fiscal-period': {\n value: 'in-fiscal-period',\n label: 'In Fiscal Period',\n requiresValue: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-fiscal-period-and-year': {\n value: 'in-fiscal-period-and-year',\n label: 'In Fiscal Period And Year',\n requiresValue: true,\n requiresValue2: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-or-before-fiscal-period-and-year': {\n value: 'in-or-before-fiscal-period-and-year',\n label: 'In Or Before Fiscal Period And Year',\n requiresValue: true,\n requiresValue2: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n 'in-or-after-fiscal-period-and-year': {\n value: 'in-or-after-fiscal-period-and-year',\n label: 'In Or After Fiscal Period And Year',\n requiresValue: true,\n requiresValue2: true,\n valueType: 'number',\n fetchXmlOnly: true,\n category: 'relative-date',\n },\n\n // === User Context Operators ===\n 'eq-userid': {\n value: 'eq-userid',\n label: 'Equals Current User',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'ne-userid': {\n value: 'ne-userid',\n label: 'Does Not Equal Current User',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-userteams': {\n value: 'eq-userteams',\n label: 'Equals Current User Teams',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-useroruserteams': {\n value: 'eq-useroruserteams',\n label: 'Equals Current User Or User Teams',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-useroruserhierarchy': {\n value: 'eq-useroruserhierarchy',\n label: 'Equals Current User Or User Hierarchy',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-useroruserhierarchyandteams': {\n value: 'eq-useroruserhierarchyandteams',\n label: 'Equals Current User Or User Hierarchy And Teams',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-businessid': {\n value: 'eq-businessid',\n label: 'Equals Current Business Unit',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'ne-businessid': {\n value: 'ne-businessid',\n label: 'Does Not Equal Current Business Unit',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n 'eq-userlanguage': {\n value: 'eq-userlanguage',\n label: 'Equals Current User Language',\n requiresValue: false,\n fetchXmlOnly: true,\n category: 'user-context',\n },\n\n // === Hierarchy Operators ===\n 'above': {\n value: 'above',\n label: 'Above',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n 'eq-or-above': {\n value: 'eq-or-above',\n label: 'Above Or Equal',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n 'under': {\n value: 'under',\n label: 'Under',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n 'eq-or-under': {\n value: 'eq-or-under',\n label: 'Under Or Equal',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n 'not-under': {\n value: 'not-under',\n label: 'Not Under',\n requiresValue: true,\n fetchXmlOnly: true,\n category: 'hierarchy',\n },\n};\n\n/**\n * Get operators available for a specific data type\n */\nexport const getOperatorsForType = (dataType: QueryBuilderDataType): OperatorDefinition[] => {\n // Base operators available for all types\n const base: OperatorDefinition[] = [\n ALL_OPERATORS['eq'],\n ALL_OPERATORS['ne'],\n ALL_OPERATORS['null'],\n ALL_OPERATORS['not-null'],\n ];\n\n switch (dataType) {\n case 'string':\n return [\n // Text-specific operators first\n ALL_OPERATORS['contains'],\n ALL_OPERATORS['not-contain'],\n ALL_OPERATORS['begins-with'],\n ALL_OPERATORS['not-begin-with'],\n ALL_OPERATORS['ends-with'],\n ALL_OPERATORS['not-end-with'],\n ALL_OPERATORS['like'],\n ALL_OPERATORS['not-like'],\n ...base,\n ];\n\n case 'number':\n return [\n ALL_OPERATORS['gt'],\n ALL_OPERATORS['ge'],\n ALL_OPERATORS['lt'],\n ALL_OPERATORS['le'],\n ALL_OPERATORS['between'],\n ALL_OPERATORS['not-between'],\n ...base,\n ALL_OPERATORS['in'],\n ALL_OPERATORS['not-in'],\n ];\n\n case 'datetime':\n return [\n // Comparison\n ALL_OPERATORS['on'],\n ALL_OPERATORS['on-or-before'],\n ALL_OPERATORS['on-or-after'],\n ALL_OPERATORS['not-on'],\n ALL_OPERATORS['gt'],\n ALL_OPERATORS['ge'],\n ALL_OPERATORS['lt'],\n ALL_OPERATORS['le'],\n ALL_OPERATORS['between'],\n ALL_OPERATORS['not-between'],\n ...base,\n // Relative dates (no value)\n ALL_OPERATORS['today'],\n ALL_OPERATORS['yesterday'],\n ALL_OPERATORS['tomorrow'],\n ALL_OPERATORS['this-week'],\n ALL_OPERATORS['last-week'],\n ALL_OPERATORS['next-week'],\n ALL_OPERATORS['this-month'],\n ALL_OPERATORS['last-month'],\n ALL_OPERATORS['next-month'],\n ALL_OPERATORS['this-year'],\n ALL_OPERATORS['last-year'],\n ALL_OPERATORS['next-year'],\n ALL_OPERATORS['last-seven-days'],\n ALL_OPERATORS['next-seven-days'],\n // Relative dates (with X value)\n ALL_OPERATORS['last-x-hours'],\n ALL_OPERATORS['next-x-hours'],\n ALL_OPERATORS['last-x-days'],\n ALL_OPERATORS['next-x-days'],\n ALL_OPERATORS['last-x-weeks'],\n ALL_OPERATORS['next-x-weeks'],\n ALL_OPERATORS['last-x-months'],\n ALL_OPERATORS['next-x-months'],\n ALL_OPERATORS['last-x-years'],\n ALL_OPERATORS['next-x-years'],\n ALL_OPERATORS['older-than-x-minutes'],\n ALL_OPERATORS['older-than-x-hours'],\n ALL_OPERATORS['older-than-x-days'],\n ALL_OPERATORS['older-than-x-weeks'],\n ALL_OPERATORS['older-than-x-months'],\n ALL_OPERATORS['older-than-x-years'],\n // Fiscal periods\n ALL_OPERATORS['this-fiscal-year'],\n ALL_OPERATORS['this-fiscal-period'],\n ALL_OPERATORS['last-fiscal-year'],\n ALL_OPERATORS['last-fiscal-period'],\n ALL_OPERATORS['next-fiscal-year'],\n ALL_OPERATORS['next-fiscal-period'],\n ALL_OPERATORS['last-x-fiscal-years'],\n ALL_OPERATORS['last-x-fiscal-periods'],\n ALL_OPERATORS['next-x-fiscal-years'],\n ALL_OPERATORS['next-x-fiscal-periods'],\n ALL_OPERATORS['in-fiscal-year'],\n ALL_OPERATORS['in-fiscal-period'],\n ALL_OPERATORS['in-fiscal-period-and-year'],\n ALL_OPERATORS['in-or-before-fiscal-period-and-year'],\n ALL_OPERATORS['in-or-after-fiscal-period-and-year'],\n ];\n\n case 'boolean':\n return base;\n\n case 'optionset':\n return [\n ...base,\n ALL_OPERATORS['in'],\n ALL_OPERATORS['not-in'],\n ];\n\n case 'lookup':\n return [\n ...base,\n ALL_OPERATORS['in'],\n ALL_OPERATORS['not-in'],\n // User context operators for owner/lookup fields\n ALL_OPERATORS['eq-userid'],\n ALL_OPERATORS['ne-userid'],\n ALL_OPERATORS['eq-userteams'],\n ALL_OPERATORS['eq-useroruserteams'],\n ALL_OPERATORS['eq-useroruserhierarchy'],\n ALL_OPERATORS['eq-useroruserhierarchyandteams'],\n ALL_OPERATORS['eq-businessid'],\n ALL_OPERATORS['ne-businessid'],\n // Hierarchy operators\n ALL_OPERATORS['above'],\n ALL_OPERATORS['eq-or-above'],\n ALL_OPERATORS['under'],\n ALL_OPERATORS['eq-or-under'],\n ALL_OPERATORS['not-under'],\n ];\n\n default:\n return base;\n }\n};\n\n/**\n * Get operator definition by value\n */\nexport const getOperatorByValue = (value: string): OperatorDefinition | undefined => {\n return ALL_OPERATORS[value];\n};\n\n/**\n * Check if an operator requires a value input\n */\nexport const operatorRequiresValue = (operator: string): boolean => {\n // Handle legacy aliases\n const legacyAliases: Record<string, string> = {\n 'notnull': 'not-null',\n 'startswith': 'begins-with',\n 'endswith': 'ends-with',\n 'notcontains': 'not-contain',\n };\n const normalized = legacyAliases[operator] || operator;\n const def = ALL_OPERATORS[normalized];\n return def?.requiresValue ?? true;\n};\n\n/**\n * Check if an operator accepts multiple values\n */\nexport const operatorIsMultiValue = (operator: string): boolean => {\n const def = ALL_OPERATORS[operator];\n return def?.multipleValues ?? false;\n};\n\n/**\n * Check if an operator requires a second value\n */\nexport const operatorRequiresValue2 = (operator: string): boolean => {\n const def = ALL_OPERATORS[operator];\n return def?.requiresValue2 ?? false;\n};\n\n/**\n * Get the expected value type for an operator (for X-days operators, this returns 'number')\n */\nexport const getOperatorValueType = (operator: string): 'number' | 'date' | 'string' | 'same' => {\n const def = ALL_OPERATORS[operator];\n return def?.valueType ?? 'same';\n};\n\n/**\n * Check if operator is FetchXML-only (no OData equivalent)\n */\nexport const isOperatorFetchXmlOnly = (operator: string): boolean => {\n const def = ALL_OPERATORS[operator];\n return def?.fetchXmlOnly ?? false;\n};\n\n/**\n * Legacy function for backward compatibility - converts to simplified format\n */\nexport const getOperatorsForTypeSimple = (dataType: QueryBuilderDataType): Array<{ value: string; label: string }> => {\n return getOperatorsForType(dataType).map(op => ({\n value: op.value,\n label: op.label,\n }));\n};\n","/**\n * QueryBuilder Serializer\n * \n * Converts QueryBuilder state to FetchXML and OData formats.\n */\n\nimport type {\n QueryBuilderCondition,\n QueryBuilderField,\n QueryBuilderState,\n QueryBuilderApplyResult,\n} from './QueryBuilder.types';\nimport { ALL_OPERATORS, getOperatorByValue } from './QueryBuilder.operators';\n\n/** Fallback field if none provided */\nconst FALLBACK_FIELD: QueryBuilderField = { id: 'name', label: 'Name', dataType: 'string' };\n\n/**\n * Escape XML special characters\n */\nexport const escapeXml = (value: string): string =>\n value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n\n/**\n * Pretty print XML with indentation\n */\nexport const prettyPrintXml = (xml: string): string => {\n const INDENT = ' ';\n let formatted = '';\n let indent = 0;\n const tokens = xml.replace(/>\\s*</g, '><').split(/(<[^>]+>)/g).filter(Boolean);\n\n for (const token of tokens) {\n if (token.startsWith('</')) {\n indent--;\n formatted += INDENT.repeat(Math.max(indent, 0)) + token + '\\n';\n } else if (token.startsWith('<') && token.endsWith('/>')) {\n formatted += INDENT.repeat(indent) + token + '\\n';\n } else if (token.startsWith('<')) {\n formatted += INDENT.repeat(indent) + token + '\\n';\n indent++;\n } else {\n formatted += INDENT.repeat(indent) + token + '\\n';\n }\n }\n\n return formatted.trim();\n};\n\n/**\n * Map internal operator names to FetchXML operator names\n */\nconst getFetchXmlOperator = (operator: string): string => {\n // Direct mapping operators\n const directMap: Record<string, string> = {\n 'eq': 'eq',\n 'ne': 'ne',\n 'gt': 'gt',\n 'ge': 'ge',\n 'lt': 'lt',\n 'le': 'le',\n 'null': 'null',\n 'notnull': 'not-null', // Legacy internal format\n 'not-null': 'not-null',\n 'in': 'in',\n 'not-in': 'not-in',\n // Legacy contains operators (converted to like)\n 'contains': 'like',\n 'notcontains': 'not-like',\n 'startswith': 'like',\n 'endswith': 'like',\n };\n\n // If it's in the direct map, use that\n if (directMap[operator]) {\n return directMap[operator];\n }\n\n // Otherwise, assume the operator IS the FetchXML operator\n return operator;\n};\n\n/**\n * Convert a single condition to FetchXML\n */\nexport const conditionToFetchXml = (\n condition: QueryBuilderCondition,\n field: QueryBuilderField\n): string => {\n // Related entity conditions are handled separately as link-entity\n if (condition.kind === 'relatedEntity') {\n return '';\n }\n\n const attr = escapeXml(condition.fieldId);\n const operatorDef = getOperatorByValue(condition.operator);\n const fetchXmlOp = getFetchXmlOperator(condition.operator);\n \n // Build entityname attribute if condition references a link-entity alias\n const entityNameAttr = condition.entityAlias ? ` entityname=\"${escapeXml(condition.entityAlias)}\"` : '';\n\n // Null operators - no value needed\n if (condition.operator === 'null' || condition.operator === 'not-null' || condition.operator === 'notnull') {\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\" />`;\n }\n\n // No-value relative date operators (today, yesterday, this-week, etc.)\n if (operatorDef && !operatorDef.requiresValue) {\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\" />`;\n }\n\n // Between operator - needs two values\n if (condition.operator === 'between') {\n // FetchXML uses <value> elements for between\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"between\"><value>${escapeXml(String(condition.value ?? ''))}</value><value>${escapeXml(String(condition.value2 ?? ''))}</value></condition>`;\n }\n\n // Not-between operator\n if (condition.operator === 'not-between') {\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"not-between\"><value>${escapeXml(String(condition.value ?? ''))}</value><value>${escapeXml(String(condition.value2 ?? ''))}</value></condition>`;\n }\n\n // Multi-value operators (in, not-in, contain-values, etc.)\n if (operatorDef?.multipleValues && (condition.operator === 'in' || condition.operator === 'not-in' ||\n condition.operator === 'contain-values' || condition.operator === 'not-contain-values')) {\n const values = Array.isArray(condition.value) ? condition.value : [condition.value];\n const valueElements = values\n .filter(v => v !== undefined && v !== null && String(v) !== '')\n .map(v => `<value>${escapeXml(String(v))}</value>`)\n .join('');\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\">${valueElements}</condition>`;\n }\n\n // Fiscal period and year operators with two values\n if (condition.operator === 'in-fiscal-period-and-year' ||\n condition.operator === 'in-or-before-fiscal-period-and-year' ||\n condition.operator === 'in-or-after-fiscal-period-and-year') {\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\"><value>${escapeXml(String(condition.value ?? ''))}</value><value>${escapeXml(String(condition.value2 ?? ''))}</value></condition>`;\n }\n\n // Standard value-based operators\n let value = condition.value;\n\n // Boolean conversion\n if (field.dataType === 'boolean') {\n value = value === true || value === 'true' || value === 1 || value === '1' ? '1' : '0';\n }\n\n // Legacy contains/startswith/endswith using LIKE pattern\n if (condition.operator === 'contains' || condition.operator === 'notcontains') {\n value = `%${value}%`;\n }\n if (condition.operator === 'startswith') {\n value = `${value}%`;\n }\n if (condition.operator === 'endswith') {\n value = `%${value}`;\n }\n\n // Include uiname/uitype for lookup fields with display name\n if (field.dataType === 'lookup' && condition.valueDisplayName) {\n const uitype = field.targets?.[0]?.entityLogicalName || '';\n const uinameAttr = ` uiname=\"${escapeXml(condition.valueDisplayName)}\"`;\n const uitypeAttr = uitype ? ` uitype=\"${escapeXml(uitype)}\"` : '';\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\" value=\"${escapeXml(String(value ?? ''))}\"${uinameAttr}${uitypeAttr} />`;\n }\n\n return `<condition${entityNameAttr} attribute=\"${attr}\" operator=\"${fetchXmlOp}\" value=\"${escapeXml(String(value ?? ''))}\" />`;\n};\n\n/**\n * Generate link-entity XML for related entity conditions\n */\nexport const relatedEntityToLinkEntity = (\n condition: QueryBuilderCondition,\n defaultField: QueryBuilderField\n): string => {\n if (condition.kind !== 'relatedEntity' || !condition.relatedEntityTarget) {\n return '';\n }\n\n const targetEntityName = escapeXml(condition.relatedEntityTarget);\n const lookupField = escapeXml(condition.relatedEntityName || '');\n // Use provided alias or generate one from lookup field name\n const alias = condition.relatedEntityAlias \n ? escapeXml(condition.relatedEntityAlias) \n : `related_${lookupField}`;\n const fromField = `${targetEntityName}id`;\n const toField = lookupField;\n\n // Build nested filter from nestedConditions\n let nestedFilterXml = '';\n if (condition.nestedConditions && condition.nestedConditions.length > 0) {\n const nestedFields = condition.nestedFields || [];\n const nestedConditionsXml = condition.nestedConditions\n .map((nestedCond) => {\n const nestedField = nestedFields.find((f) => f.id === nestedCond.fieldId) || defaultField;\n return conditionToFetchXml(nestedCond, nestedField);\n })\n .filter(Boolean)\n .join('');\n\n if (nestedConditionsXml) {\n nestedFilterXml = `<filter type=\"${condition.nestedLogic || 'and'}\">${nestedConditionsXml}</filter>`;\n }\n }\n\n return `<link-entity name=\"${targetEntityName}\" from=\"${fromField}\" to=\"${toField}\" link-type=\"inner\" alias=\"${alias}\">${nestedFilterXml}</link-entity>`;\n};\n\n/**\n * Quote a value for OData based on field data type\n */\nconst quoteODataValue = (val: any, field: QueryBuilderField): string => {\n const isLookup = field.dataType === 'lookup';\n\n if (field.dataType === 'number') return String(val ?? 0);\n if (field.dataType === 'optionset') return String(parseInt(val, 10) || 0);\n if (field.dataType === 'boolean') return val === true || val === 'true' || val === 1 || val === '1' ? 'true' : 'false';\n if (isLookup) {\n // Lookup GUIDs are not quoted in OData v4\n return String(val ?? '');\n }\n if (field.dataType === 'datetime') {\n const dateVal = String(val ?? '');\n if (dateVal.match(/^\\d{4}-\\d{2}-\\d{2}/)) {\n return dateVal.includes('T') ? dateVal : `${dateVal}T00:00:00Z`;\n }\n const parsed = new Date(dateVal);\n return !isNaN(parsed.getTime()) ? parsed.toISOString() : dateVal;\n }\n return `'${String(val ?? '').replace(/'/g, \"''\")}'`;\n};\n\n/**\n * Convert a single condition to OData filter\n */\nexport const conditionToOData = (condition: QueryBuilderCondition, field: QueryBuilderField): string => {\n // Related entity conditions are handled separately\n if (condition.kind === 'relatedEntity') {\n return '';\n }\n\n const isLookup = field.dataType === 'lookup';\n const odataFieldName = isLookup ? `_${condition.fieldId}_value` : condition.fieldId;\n const quote = (val: any) => quoteODataValue(val, field);\n // Helper to always quote as string (for string functions like contains/startswith/endswith)\n const quoteAsString = (val: any) => `'${String(val ?? '').replace(/'/g, \"''\")}'`;\n const operatorDef = getOperatorByValue(condition.operator);\n\n // FetchXML-only operators cannot be converted to OData\n if (operatorDef?.fetchXmlOnly) {\n // For some operators, we can approximate\n switch (condition.operator) {\n case 'like':\n // like with wildcards - can use contains/startswith/endswith\n const likeVal = String(condition.value ?? '');\n if (likeVal.startsWith('%') && likeVal.endsWith('%')) {\n return `contains(${odataFieldName}, '${likeVal.slice(1, -1).replace(/'/g, \"''\")}')`;\n } else if (likeVal.endsWith('%')) {\n return `startswith(${odataFieldName}, '${likeVal.slice(0, -1).replace(/'/g, \"''\")}')`;\n } else if (likeVal.startsWith('%')) {\n return `endswith(${odataFieldName}, '${likeVal.slice(1).replace(/'/g, \"''\")}')`;\n }\n return `contains(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'not-like':\n const notLikeVal = String(condition.value ?? '');\n if (notLikeVal.startsWith('%') && notLikeVal.endsWith('%')) {\n return `not contains(${odataFieldName}, '${notLikeVal.slice(1, -1).replace(/'/g, \"''\")}')`;\n }\n return `not contains(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'not-in':\n // OData doesn't have \"not in\", use multiple \"ne\" conditions with \"and\"\n const values = Array.isArray(condition.value) ? condition.value : [condition.value];\n const conditions = values.filter(v => v !== undefined && v !== null).map(v => `${odataFieldName} ne ${quote(v)}`);\n return conditions.length > 1 ? `(${conditions.join(' and ')})` : conditions[0] || '';\n case 'between':\n case 'not-between':\n // between can be expressed as ge/le\n const op1 = condition.operator === 'between' ? 'ge' : 'lt';\n const op2 = condition.operator === 'between' ? 'le' : 'gt';\n const logic = condition.operator === 'between' ? 'and' : 'or';\n return `(${odataFieldName} ${op1} ${quote(condition.value)} ${logic} ${odataFieldName} ${op2} ${quote(condition.value2)})`;\n default:\n // Cannot convert - return comment\n return `/* FetchXML-only operator: ${condition.operator} */`;\n }\n }\n\n switch (condition.operator) {\n case 'eq':\n return `${odataFieldName} eq ${quote(condition.value)}`;\n case 'ne':\n return `${odataFieldName} ne ${quote(condition.value)}`;\n case 'gt':\n return `${odataFieldName} gt ${quote(condition.value)}`;\n case 'ge':\n return `${odataFieldName} ge ${quote(condition.value)}`;\n case 'lt':\n return `${odataFieldName} lt ${quote(condition.value)}`;\n case 'le':\n return `${odataFieldName} le ${quote(condition.value)}`;\n case 'null':\n case 'not-null':\n return `${odataFieldName} ${condition.operator === 'null' ? 'eq' : 'ne'} null`;\n case 'notnull': // Legacy format\n return `${odataFieldName} ne null`;\n case 'contains':\n return `contains(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'notcontains':\n case 'not-contain':\n return `not contains(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'startswith':\n case 'begins-with':\n return `startswith(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'not-begin-with':\n return `not startswith(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'endswith':\n case 'ends-with':\n return `endswith(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'not-end-with':\n return `not endswith(${odataFieldName}, ${quoteAsString(condition.value)})`;\n case 'on':\n return `${odataFieldName} eq ${quote(condition.value)}`;\n case 'on-or-before':\n return `${odataFieldName} le ${quote(condition.value)}`;\n case 'on-or-after':\n return `${odataFieldName} ge ${quote(condition.value)}`;\n case 'not-on':\n return `${odataFieldName} ne ${quote(condition.value)}`;\n case 'in': {\n const inValues = Array.isArray(condition.value) ? condition.value : [condition.value];\n const quotedValues = inValues.filter(v => v !== undefined && v !== null).map(v => quote(v)).join(', ');\n return `${odataFieldName} in (${quotedValues})`;\n }\n default:\n return `${odataFieldName} eq ${quote(condition.value)}`;\n }\n};\n\n/**\n * Generate OData filter for related entity conditions\n */\nexport const relatedEntityToOData = (\n condition: QueryBuilderCondition,\n defaultField: QueryBuilderField\n): string => {\n if (condition.kind !== 'relatedEntity' || !condition.relatedEntityName) {\n return '';\n }\n\n const navigationProperty = condition.relatedEntityName;\n\n if (!condition.nestedConditions || condition.nestedConditions.length === 0) {\n return '';\n }\n\n const nestedFields = condition.nestedFields || [];\n const nestedLogic = condition.nestedLogic || 'and';\n\n const nestedFilters = condition.nestedConditions\n .map((nestedCond) => {\n const nestedField = nestedFields.find((f) => f.id === nestedCond.fieldId) || defaultField;\n const isLookup = nestedField.dataType === 'lookup';\n const fieldName = isLookup ? `_${nestedCond.fieldId}_value` : nestedCond.fieldId;\n const odataFieldName = `${navigationProperty}/${fieldName}`;\n\n // Create a virtual field for quoting purposes\n const virtualField: QueryBuilderField = { ...nestedField, id: fieldName };\n const quote = (val: any) => quoteODataValue(val, virtualField);\n\n switch (nestedCond.operator) {\n case 'eq':\n return `${odataFieldName} eq ${quote(nestedCond.value)}`;\n case 'ne':\n return `${odataFieldName} ne ${quote(nestedCond.value)}`;\n case 'gt':\n return `${odataFieldName} gt ${quote(nestedCond.value)}`;\n case 'ge':\n return `${odataFieldName} ge ${quote(nestedCond.value)}`;\n case 'lt':\n return `${odataFieldName} lt ${quote(nestedCond.value)}`;\n case 'le':\n return `${odataFieldName} le ${quote(nestedCond.value)}`;\n case 'null':\n return `${odataFieldName} eq null`;\n case 'notnull':\n case 'not-null':\n return `${odataFieldName} ne null`;\n case 'contains':\n return `contains(${odataFieldName}, ${quote(nestedCond.value)})`;\n case 'notcontains':\n case 'not-contain':\n return `not contains(${odataFieldName}, ${quote(nestedCond.value)})`;\n case 'startswith':\n case 'begins-with':\n return `startswith(${odataFieldName}, ${quote(nestedCond.value)})`;\n case 'endswith':\n case 'ends-with':\n return `endswith(${odataFieldName}, ${quote(nestedCond.value)})`;\n case 'between':\n return `(${odataFieldName} ge ${quote(nestedCond.value)} and ${odataFieldName} le ${quote(nestedCond.value2)})`;\n case 'in': {\n const values = Array.isArray(nestedCond.value) ? nestedCond.value : [nestedCond.value];\n const quotedValues = values.filter(v => v !== undefined && v !== null).map(v => quote(v)).join(', ');\n return `${odataFieldName} in (${quotedValues})`;\n }\n case 'not-in': {\n const values = Array.isArray(nestedCond.value) ? nestedCond.value : [nestedCond.value];\n const conditions = values.filter(v => v !== undefined && v !== null).map(v => `${odataFieldName} ne ${quote(v)}`);\n return conditions.length > 1 ? `(${conditions.join(' and ')})` : conditions[0] || '';\n }\n default:\n return `${odataFieldName} eq ${quote(nestedCond.value)}`;\n }\n })\n .filter(Boolean);\n\n if (nestedFilters.length === 0) {\n return '';\n }\n\n return nestedFilters.length > 1\n ? `(${nestedFilters.join(` ${nestedLogic} `)})`\n : nestedFilters[0];\n};\n\n/**\n * Serialize QueryBuilder state to FetchXML and OData\n */\nexport const serializeQueryBuilderState = (\n state: QueryBuilderState,\n fields: QueryBuilderField[],\n entityName: string,\n entitySetName?: string,\n): QueryBuilderApplyResult => {\n const defaultField = fields[0] || FALLBACK_FIELD;\n\n // Collect all link-entity elements from related entity conditions\n const linkEntities: string[] = [];\n state.groups.forEach((group) => {\n group.conditions.forEach((condition) => {\n if (condition.kind === 'relatedEntity') {\n const linkEntity = relatedEntityToLinkEntity(condition, defaultField);\n if (linkEntity) {\n linkEntities.push(linkEntity);\n }\n }\n });\n });\n\n const filterParts = state.groups.map((group) => {\n // Filter out related entity conditions (they're handled as link-entity)\n const regularConditions = group.conditions.filter((c) => c.kind !== 'relatedEntity');\n\n const conditionsXml = regularConditions\n .map((condition) => {\n const field = fields.find((candidate) => candidate.id === condition.fieldId) || defaultField;\n return conditionToFetchXml(condition, field);\n })\n .join('');\n\n return conditionsXml ? `<filter type=\"${group.logic}\">${conditionsXml}</filter>` : '';\n }).filter(Boolean);\n\n const fetchXmlFilter =\n filterParts.length > 1 ? `<filter type=\"and\">${filterParts.join('')}</filter>` : filterParts[0] || '';\n\n // Combine filters and link-entities in the entity element\n const entityContent = fetchXmlFilter + linkEntities.join('');\n const fetchXml = `<fetch version=\"1.0\"><entity name=\"${escapeXml(entityName)}\">${entityContent || '<filter type=\"and\"></filter>'}</entity></fetch>`;\n\n const odataFilter = state.groups\n .map((group) => {\n const rowFilters = group.conditions\n .map((condition) => {\n if (condition.kind === 'relatedEntity') {\n return relatedEntityToOData(condition, defaultField);\n }\n const field = fields.find((candidate) => candidate.id === condition.fieldId) || defaultField;\n return conditionToOData(condition, field);\n })\n .filter(Boolean);\n\n return rowFilters.length > 1 ? `(${rowFilters.join(` ${group.logic} `)})` : rowFilters[0] || '';\n })\n .filter(Boolean)\n .join(' and ');\n\n const odataQuery = entitySetName && odataFilter\n ? `${entitySetName}?$filter=${odataFilter}`\n : entitySetName\n ? entitySetName\n : undefined;\n\n return {\n state: JSON.parse(JSON.stringify(state)) as QueryBuilderState,\n fetchXmlFilter,\n fetchXml,\n odataFilter,\n odataQuery,\n };\n};\n","/**\n * QueryBuilder Parser\n * \n * Parses FetchXML to QueryBuilder state.\n */\n\nimport type {\n QueryBuilderCondition,\n QueryBuilderField,\n QueryBuilderGroup,\n QueryBuilderState,\n} from './QueryBuilder.types';\nimport { ALL_OPERATORS } from './QueryBuilder.operators';\n\nexport interface ParseFetchXmlResult {\n state: QueryBuilderState | null;\n error: string | null;\n}\n\n/**\n * Map FetchXML operator to internal operator format\n */\nconst parseFetchXmlOperator = (op: string): string => {\n // Check if it's a valid ALL_OPERATORS key\n if (ALL_OPERATORS[op]) {\n return op;\n }\n\n // Legacy mappings\n const legacyMap: Record<string, string> = {\n 'not-null': 'not-null',\n 'notnull': 'not-null',\n // Like patterns are handled by the parser based on value pattern\n 'like': 'like',\n 'not-like': 'not-like',\n };\n\n return legacyMap[op] || op;\n};\n\n/**\n * Create a new condition with unique ID\n */\nconst createParsedCondition = (\n attr: string,\n operator: string,\n value: string | (string | number)[],\n value2?: string | number,\n fieldMatch?: QueryBuilderField,\n valueDisplayName?: string,\n entityAlias?: string\n): QueryBuilderCondition => ({\n id: `cond_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: 'field',\n fieldId: fieldMatch?.id || attr,\n operator: operator as any,\n value,\n value2: value2 ?? '',\n ...(valueDisplayName ? { valueDisplayName } : {}),\n ...(entityAlias ? { entityAlias } : {}),\n});\n\n/**\n * Parse a single condition element from FetchXML\n */\nconst parseConditionElement = (\n condEl: Element,\n fields: QueryBuilderField[]\n): QueryBuilderCondition => {\n const attr = condEl.getAttribute('attribute') || '';\n const rawOp = condEl.getAttribute('operator') || 'eq';\n let value: string | (string | number)[] = condEl.getAttribute('value') || '';\n // Extract lookup display name from uiname attribute (used for resolved lookup values)\n const uiname = condEl.getAttribute('uiname') || undefined;\n // Extract entityname attribute (alias referencing a link-entity)\n const entityAlias = condEl.getAttribute('entityname') || undefined;\n let value2: string | number | undefined;\n\n // Handle in/not-in operators with multiple <value> child elements\n if (rawOp === 'in' || rawOp === 'not-in' || \n rawOp === 'contain-values' || rawOp === 'not-contain-values') {\n const valueElements = condEl.querySelectorAll(':scope > value');\n if (valueElements.length > 0) {\n const values: (string | number)[] = [];\n valueElements.forEach((valEl) => {\n const text = valEl.textContent || '';\n const num = Number(text);\n values.push(!isNaN(num) && text.trim() !== '' ? num : text);\n });\n value = values;\n }\n }\n\n // Handle between/not-between with two <value> elements\n if (rawOp === 'between' || rawOp === 'not-between' ||\n rawOp === 'in-fiscal-period-and-year' ||\n rawOp === 'in-or-before-fiscal-period-and-year' ||\n rawOp === 'in-or-after-fiscal-period-and-year') {\n const valueElements = condEl.querySelectorAll(':scope > value');\n if (valueElements.length >= 2) {\n const v1 = valueElements[0].textContent || '';\n const v2 = valueElements[1].textContent || '';\n const num2 = Number(v2);\n // Keep value as string (for between, first value goes in value, second in value2)\n value = v1;\n value2 = !isNaN(num2) && v2.trim() !== '' ? num2 : v2;\n }\n }\n\n // Parse the operator\n let operator = parseFetchXmlOperator(rawOp);\n\n // Handle like patterns - convert to contains/startswith/endswith for UI\n if (rawOp === 'like' && typeof value === 'string') {\n if (value.startsWith('%') && value.endsWith('%')) {\n operator = 'contains';\n value = value.slice(1, -1);\n } else if (value.endsWith('%')) {\n operator = 'begins-with';\n value = value.slice(0, -1);\n } else if (value.startsWith('%')) {\n operator = 'ends-with';\n value = value.slice(1);\n }\n // If no wildcards, keep as 'like' operator\n }\n\n if (rawOp === 'not-like' && typeof value === 'string') {\n if (value.startsWith('%') && value.endsWith('%')) {\n operator = 'not-contain';\n value = value.slice(1, -1);\n } else if (value.endsWith('%')) {\n operator = 'not-begin-with';\n value = value.slice(0, -1);\n } else if (value.startsWith('%')) {\n operator = 'not-end-with';\n value = value.slice(1);\n }\n }\n\n const field = fields.find((f) => f.id === attr);\n return createParsedCondition(attr, operator, value, value2, field, uiname, entityAlias);\n};\n\n/**\n * Parse FetchXML string to QueryBuilder state\n */\nexport const parseFetchXmlToState = (xml: string, fields: QueryBuilderField[]): ParseFetchXmlResult => {\n try {\n const trimmed = xml.trim();\n if (!trimmed) {\n return { state: null, error: 'Please enter FetchXML content.' };\n }\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(trimmed, 'application/xml');\n const parseError = doc.querySelector('parsererror');\n if (parseError) {\n const errorText = parseError.textContent || 'Unknown XML parsing error';\n return { state: null, error: `XML parsing error: ${errorText.slice(0, 200)}` };\n }\n\n const groups: QueryBuilderGroup[] = [];\n let groupCounter = 0;\n\n /**\n * Recursively process a filter element.\n * If it has direct conditions, create a group from them.\n * If it has child filters, recurse into them.\n */\n const processFilterElement = (filterEl: Element) => {\n const logic = (filterEl.getAttribute('type') || 'and').toLowerCase() as 'and' | 'or';\n const conditions: QueryBuilderCondition[] = [];\n\n // Get conditions directly under this filter (not in nested filters)\n filterEl.querySelectorAll(':scope > condition').forEach((condEl) => {\n conditions.push(parseConditionElement(condEl, fields));\n });\n\n if (conditions.length > 0) {\n groups.push({\n id: `grp_${Date.now()}_${groupCounter++}`,\n logic,\n conditions,\n });\n }\n\n // Recurse into nested filters (handles the wrapper pattern from serializer)\n const nestedFilters = filterEl.querySelectorAll(':scope > filter');\n nestedFilters.forEach((nestedFilterEl) => {\n processFilterElement(nestedFilterEl);\n });\n\n // If filter has no conditions AND no nested filters, create a default group\n if (conditions.length === 0 && nestedFilters.length === 0) {\n const defaultFieldId = fields.length > 0 ? fields[0].id : 'name';\n groups.push({\n id: `grp_${Date.now()}_${groupCounter++}`,\n logic,\n conditions: [{\n id: `cond_${Date.now()}_default`,\n kind: 'field',\n fieldId: defaultFieldId,\n operator: 'eq',\n value: '',\n }],\n });\n }\n };\n\n // Find the entity element\n const entityEl = doc.querySelector('fetch > entity, entity');\n\n if (entityEl) {\n // Find filter elements DIRECTLY under entity (not inside link-entity)\n const filterElements = entityEl.querySelectorAll(':scope > filter');\n\n // Also gather any standalone condition elements not inside a filter\n const topLevelConditions: QueryBuilderCondition[] = [];\n\n filterElements.forEach((filterEl) => {\n processFilterElement(filterEl);\n });\n\n // If no filter elements, look for conditions directly under entity\n if (filterElements.length === 0) {\n const entityConditions = entityEl.querySelectorAll(':scope > condition');\n entityConditions.forEach((condEl) => {\n topLevelConditions.push(parseConditionElement(condEl, fields));\n });\n\n if (topLevelConditions.length > 0) {\n groups.push({\n id: `grp_${Date.now()}_0`,\n logic: 'and',\n conditions: topLevelConditions,\n });\n }\n }\n\n // Parse link-entity elements for related entity conditions (direct children of entity only)\n // Each link-entity becomes its own separate group\n const linkEntities = entityEl.querySelectorAll(':scope > link-entity');\n linkEntities.forEach((linkEl, idx) => {\n const relatedEntityCondition = parseLinkEntity(linkEl, fields);\n if (relatedEntityCondition) {\n // Create a separate group for each link-entity\n groups.push({\n id: `grp_${Date.now()}_link_${idx}`,\n logic: 'and',\n conditions: [relatedEntityCondition],\n });\n }\n });\n } else {\n // No entity element - try to parse bare <filter> fragments\n const filterElements = doc.querySelectorAll('filter');\n filterElements.forEach((filterEl) => {\n processFilterElement(filterEl);\n });\n }\n\n // If still no groups, inform user no filter conditions were found\n if (groups.length === 0) {\n return {\n state: null,\n error: 'No filter conditions found in the FetchXML. The QueryBuilder imports <filter> and <condition> elements.',\n };\n }\n\n return { state: { groups }, error: null };\n } catch (err) {\n return { state: null, error: `Error parsing FetchXML: ${err instanceof Error ? err.message : 'Unknown error'}` };\n }\n};\n\n/**\n * Parse a link-entity element to a related entity condition\n */\nconst parseLinkEntity = (\n linkEl: Element,\n fields: QueryBuilderField[]\n): QueryBuilderCondition | null => {\n const targetEntityName = linkEl.getAttribute('name') || '';\n const toField = linkEl.getAttribute('to') || '';\n const alias = linkEl.getAttribute('alias') || undefined;\n\n if (!targetEntityName || !toField) {\n return null;\n }\n\n // Find nested filter/conditions\n const nestedConditions: QueryBuilderCondition[] = [];\n const filterEl = linkEl.querySelector(':scope > filter');\n \n if (filterEl) {\n filterEl.querySelectorAll(':scope > condition').forEach((condEl) => {\n nestedConditions.push(parseConditionElement(condEl, []));\n });\n }\n\n return {\n id: `rel_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: 'relatedEntity',\n fieldId: toField,\n operator: 'containsdata',\n value: '',\n relatedEntityName: toField,\n relatedEntityTarget: targetEntityName,\n relatedEntityAlias: alias,\n nestedConditions,\n nestedLogic: (filterEl?.getAttribute('type') || 'and').toLowerCase() as 'and' | 'or',\n nestedFields: [],\n };\n};\n\n/**\n * Validate FetchXML syntax (basic XML validation)\n */\nexport const validateFetchXmlSyntax = (xml: string): { valid: boolean; error?: string } => {\n try {\n const trimmed = xml.trim();\n if (!trimmed) {\n return { valid: false, error: 'Empty FetchXML' };\n }\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(trimmed, 'application/xml');\n const parseError = doc.querySelector('parsererror');\n \n if (parseError) {\n return { valid: false, error: parseError.textContent || 'XML parsing error' };\n }\n\n // Check for required elements\n const fetch = doc.querySelector('fetch');\n if (!fetch) {\n return { valid: false, error: 'Missing <fetch> element' };\n }\n\n const entity = doc.querySelector('entity');\n if (!entity) {\n return { valid: false, error: 'Missing <entity> element' };\n }\n\n return { valid: true };\n } catch (err) {\n return { valid: false, error: err instanceof Error ? err.message : 'Unknown error' };\n }\n};\n","/**\n * QueryBuilder Utils\n * \n * Validation, helpers, and metadata utilities for QueryBuilder.\n */\n\nimport type {\n QueryBuilderCondition,\n QueryBuilderField,\n QueryBuilderGroup,\n QueryBuilderState,\n QueryBuilderDataType,\n} from './QueryBuilder.types';\nimport { getOperatorsForType, getOperatorByValue, operatorRequiresValue } from './QueryBuilder.operators';\n\n/** Fallback fields for when none are provided */\nexport const FALLBACK_FIELDS: QueryBuilderField[] = [\n { id: 'name', label: 'Name', dataType: 'string' },\n { id: 'createdon', label: 'Created On', dataType: 'datetime' },\n {\n id: 'statecode',\n label: 'State',\n dataType: 'optionset',\n options: [\n { label: 'Active', value: 0 },\n { label: 'Inactive', value: 1 },\n ],\n },\n { id: 'ownerid', label: 'Owner', dataType: 'lookup' },\n];\n\n/**\n * Validation error details\n */\nexport interface QueryBuilderValidationError {\n groupId: string;\n conditionId: string;\n fieldLabel: string;\n message: string;\n}\n\n/**\n * Validation result\n */\nexport interface QueryBuilderValidationResult {\n isValid: boolean;\n errors: QueryBuilderValidationError[];\n apiValidation?: {\n available: boolean;\n tested: boolean;\n success?: boolean;\n recordCount?: number;\n errorMessage?: string;\n };\n}\n\n/**\n * Validate the QueryBuilder state\n */\nexport const validateQueryBuilderState = (\n state: QueryBuilderState,\n fields: QueryBuilderField[]\n): QueryBuilderValidationResult => {\n const errors: QueryBuilderValidationError[] = [];\n\n for (const group of state.groups) {\n if (group.conditions.length === 0) {\n errors.push({\n groupId: group.id,\n conditionId: '',\n fieldLabel: 'Group',\n message: 'Group has no conditions',\n });\n continue;\n }\n\n for (const condition of group.conditions) {\n if (condition.kind === 'relatedEntity') {\n validateRelatedEntityCondition(condition, group.id, errors);\n continue;\n }\n\n validateFieldCondition(condition, group.id, fields, errors);\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n};\n\n/**\n * Validate a related entity condition\n */\nconst validateRelatedEntityCondition = (\n condition: QueryBuilderCondition,\n groupId: string,\n errors: QueryBuilderValidationError[]\n): void => {\n if (!condition.relatedEntityName) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel: 'Related Entity',\n message: 'Related entity not selected',\n });\n return;\n }\n\n if (!condition.nestedConditions || condition.nestedConditions.length === 0) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel: 'Related Entity',\n message: 'At least one nested condition is required',\n });\n return;\n }\n\n // Validate each nested condition\n const nestedFields = condition.nestedFields || [];\n for (const nestedCond of condition.nestedConditions) {\n const nestedField = nestedFields.find((f) => f.id === nestedCond.fieldId);\n const nestedFieldLabel = nestedField?.label || nestedCond.fieldId || 'Field';\n\n // Skip value check for operators that don't require values\n const requiresValue = operatorRequiresValue(nestedCond.operator);\n if (!requiresValue) continue;\n\n // Check for empty value (handle arrays for in/not-in)\n if (isValueEmpty(nestedCond.value)) {\n errors.push({\n groupId,\n conditionId: nestedCond.id,\n fieldLabel: nestedFieldLabel,\n message: 'Value is required',\n });\n }\n }\n};\n\n/**\n * Validate a field condition\n */\nconst validateFieldCondition = (\n condition: QueryBuilderCondition,\n groupId: string,\n fields: QueryBuilderField[],\n errors: QueryBuilderValidationError[]\n): void => {\n const field = fields.find((f) => f.id === condition.fieldId);\n const fieldLabel = field?.label || condition.fieldId;\n\n // Check if field exists\n if (!field) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel,\n message: `Unknown field: ${condition.fieldId}`,\n });\n return;\n }\n\n // Skip value check for operators that don't require values\n const requiresValue = operatorRequiresValue(condition.operator);\n if (!requiresValue) return;\n\n // Check for empty value\n if (isValueEmpty(condition.value)) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel,\n message: 'Value is required',\n });\n }\n\n // Check between/two-value operators have second value\n const operatorDef = getOperatorByValue(condition.operator);\n if (operatorDef?.requiresValue2) {\n if (isValueEmpty(condition.value2)) {\n errors.push({\n groupId,\n conditionId: condition.id,\n fieldLabel,\n message: 'Second value is required for this operator',\n });\n }\n }\n};\n\n/**\n * Check if a value is empty\n */\nconst isValueEmpty = (value: any): boolean => {\n if (value === undefined || value === null) return true;\n if (Array.isArray(value)) {\n return value.length === 0 || value.every(v => v === undefined || v === null || String(v).trim() === '');\n }\n return String(value).trim() === '';\n};\n\n/**\n * Infer data type from Dynamics 365 attribute metadata\n */\nexport const dataTypeFromAttribute = (attribute: any): QueryBuilderDataType => {\n // Handle both AttributeType (string) and AttributeTypeName (object with Value property)\n const typeValue = attribute?.AttributeTypeName?.Value || attribute?.AttributeType || attribute?.Type || '';\n const type = String(typeValue).toLowerCase();\n \n // Check if the attribute has Targets array - definitive indicator of lookup\n if (attribute?.Targets && Array.isArray(attribute.Targets) && attribute.Targets.length > 0) {\n return 'lookup';\n }\n \n if (['picklist', 'state', 'status'].includes(type)) return 'optionset';\n if (['lookup', 'customer', 'owner', 'partylist', 'uniqueidentifier', 'lookuptype'].includes(type)) return 'lookup';\n if (['datetime'].includes(type)) return 'datetime';\n if (['boolean'].includes(type)) return 'boolean';\n if (['integer', 'decimal', 'double', 'money', 'bigint', 'int'].includes(type)) return 'number';\n \n return 'string';\n};\n\n/**\n * Get default value for a field based on its type\n */\nexport const getDefaultValueForField = (field: QueryBuilderField): string | number | boolean => {\n if (field.dataType === 'optionset' && field.options && field.options.length > 0) {\n return String(field.options[0].value);\n }\n return '';\n};\n\n/**\n * Create a new condition for a field\n */\nexport const createCondition = (defaultField: QueryBuilderField): QueryBuilderCondition => {\n const operators = getOperatorsForType(defaultField.dataType);\n return {\n id: `cond_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: 'field',\n fieldId: defaultField.id,\n operator: operators[0]?.value as any || 'eq',\n value: getDefaultValueForField(defaultField),\n value2: '',\n };\n};\n\n/**\n * Create a new related entity condition\n */\nexport const createRelatedCondition = (\n relatedEntityName?: string,\n relatedEntityTarget?: string\n): QueryBuilderCondition => ({\n id: `rel_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: 'relatedEntity',\n fieldId: relatedEntityName || '__related_entity__',\n operator: 'containsdata',\n value: '',\n value2: '',\n relatedEntityName,\n relatedEntityTarget,\n nestedConditions: [],\n nestedLogic: 'and',\n nestedFields: [],\n});\n\n/**\n * Create a new group\n */\nexport const createGroup = (defaultField: QueryBuilderField): QueryBuilderGroup => ({\n id: `grp_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n logic: 'and',\n conditions: [createCondition(defaultField)],\n});\n\n/**\n * Clone state for immutable updates\n */\nexport const cloneState = (\n state: QueryBuilderState | undefined,\n defaultField: QueryBuilderField\n): QueryBuilderState => {\n if (!state?.groups?.length) {\n return { groups: [createGroup(defaultField)] };\n }\n\n return {\n groups: state.groups.map((group) => ({\n id: group.id || `grp_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n logic: group.logic || 'and',\n conditions: (group.conditions || []).map((condition) => ({\n id: condition.id || `cond_${Date.now()}_${Math.floor(Math.random() * 10000)}`,\n kind: condition.kind || 'field',\n fieldId: condition.fieldId || defaultField.id,\n operator: (condition.operator || 'eq') as any,\n value: condition.value ?? '',\n value2: condition.value2 ?? '',\n relatedEntityName: condition.relatedEntityName,\n relatedEntityTarget: condition.relatedEntityTarget,\n nestedConditions: condition.nestedConditions ? [...condition.nestedConditions] : undefined,\n nestedLogic: condition.nestedLogic,\n nestedFields: condition.nestedFields ? [...condition.nestedFields] : undefined,\n })),\n })),\n };\n};\n\n/**\n * Generate a unique ID\n */\nexport const generateId = (prefix: string = 'id'): string => {\n return `${prefix}_${Date.now()}_${Math.floor(Math.random() * 10000)}`;\n};\n\n/**\n * Deep compare two QueryBuilder states\n */\nexport const statesEqual = (a: QueryBuilderState, b: QueryBuilderState): boolean => {\n return JSON.stringify(a) === JSON.stringify(b);\n};\n\n/**\n * Get operators available for a data type (for UI dropdown)\n */\nexport const getOperatorOptionsForType = (\n dataType: QueryBuilderDataType\n): Array<{ value: string; label: string }> => {\n return getOperatorsForType(dataType).map(op => ({\n value: op.value,\n label: op.label,\n }));\n};\n\n/**\n * Check if an operator is valid for a data type\n */\nexport const isOperatorValidForType = (operator: string, dataType: QueryBuilderDataType): boolean => {\n const operators = getOperatorsForType(dataType);\n return operators.some(op => op.value === operator);\n};\n","/**\n * QueryBuilder LookupInput Component\n * \n * Internal component for lookup field value input with automatic Web API search.\n */\n\nimport * as React from 'react';\nimport { Input, Text } from '@fluentui/react-components';\nimport { Lookup, type LookupOption } from '../Lookup';\nimport type { QueryBuilderLookupOption, QueryBuilderLookupTarget } from './QueryBuilder.types';\n\nexport interface LookupValueInputProps {\n fieldId: string;\n value: string;\n displayName: string;\n disabled: boolean;\n /** Target entities for the lookup (used for automatic search) */\n targets?: QueryBuilderLookupTarget[];\n onLookupSearch?: (fieldId: string, searchText: string) => Promise<QueryBuilderLookupOption[]> | QueryBuilderLookupOption[];\n onValueChange: (value: string, displayName: string) => void;\n}\n\nexport const LookupValueInput: React.FC<LookupValueInputProps> = ({\n fieldId,\n value,\n displayName,\n disabled,\n targets,\n onLookupSearch,\n onValueChange,\n}) => {\n const [lookupOptions, setLookupOptions] = React.useState<LookupOption[]>([]);\n const [lookupLoading, setLookupLoading] = React.useState(false);\n const [resultCount, setResultCount] = React.useState<number>(0);\n const [headerText, setHeaderText] = React.useState<string>('');\n\n // Automatic search using native Web API when targets are available\n const searchUsingWebApi = React.useCallback(async (searchText: string, limit: number = 15): Promise<{ results: LookupOption[]; entityDisplayName: string }> => {\n if (!targets || targets.length === 0) {\n return { results: [], entityDisplayName: '' };\n }\n\n const results: LookupOption[] = [];\n let entityDisplayName = '';\n\n // Search each target entity\n for (const target of targets) {\n if (!target.entitySetName || !target.primaryNameAttribute) continue;\n\n // Use entity display name for header\n if (!entityDisplayName && target.displayName) {\n entityDisplayName = target.displayName;\n }\n\n try {\n const nameAttr = target.primaryNameAttribute;\n let queryOptions = `$select=${nameAttr}&$top=${limit}`;\n\n if (searchText) {\n queryOptions += `&$filter=contains(${nameAttr},'${searchText.replace(/'/g, \"''\")}')`;\n }\n\n const response = await fetch(`/api/data/v9.2/${target.entitySetName}?${queryOptions}`, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n\n if (!response.ok) continue;\n\n const data = await response.json();\n const records = data.value || [];\n \n for (const record of records) {\n // Extract the ID from the record (entityLogicalName + 'id')\n const idField = `${target.entityLogicalName}id`;\n const id = record[idField] || record.id || '';\n const name = record[nameAttr] || 'Unnamed';\n\n results.push({\n key: id,\n text: name,\n secondaryText: targets.length > 1 ? target.displayName : undefined,\n });\n }\n } catch (error) {\n console.error(`[QueryBuilder] Lookup search failed for ${target.entityLogicalName}:`, error);\n }\n }\n\n return { results, entityDisplayName };\n }, [targets]);\n\n // Load initial top 5 records when the lookup becomes usable\n React.useEffect(() => {\n const loadInitialRecords = async () => {\n const hasValidTargets = targets && targets.length > 0 && targets.some(t => t.entitySetName && t.primaryNameAttribute);\n \n // Only pre-load if we have valid targets (and no custom search)\n if (!disabled && hasValidTargets && !onLookupSearch) {\n setLookupLoading(true);\n try {\n const searchResult = await searchUsingWebApi('', 5); // Get top 5 records\n setLookupOptions(searchResult.results);\n setResultCount(searchResult.results.length);\n setHeaderText(searchResult.entityDisplayName);\n } finally {\n setLookupLoading(false);\n }\n }\n };\n \n loadInitialRecords();\n }, [targets, disabled, onLookupSearch, searchUsingWebApi]);\n\n const handleSearchChange = React.useCallback(\n async (searchText: string) => {\n setLookupLoading(true);\n try {\n let results: LookupOption[];\n let entityName = '';\n\n if (onLookupSearch) {\n // Use consumer-provided search function\n const customResults = await onLookupSearch(fieldId, searchText);\n results = customResults.map((r) => ({\n key: r.key,\n text: r.text,\n secondaryText: r.secondaryText,\n }));\n // Use first target display name if available\n entityName = targets?.[0]?.displayName || '';\n } else {\n // Use native Web API search\n const searchResult = await searchUsingWebApi(searchText);\n results = searchResult.results;\n entityName = searchResult.entityDisplayName;\n }\n\n setLookupOptions(results);\n setResultCount(results.length);\n setHeaderText(entityName);\n } finally {\n setLookupLoading(false);\n }\n },\n [fieldId, onLookupSearch, searchUsingWebApi, targets],\n );\n\n const handleOptionSelect = React.useCallback(\n (option: LookupOption | null) => {\n if (option) {\n onValueChange(option.key, option.text);\n } else {\n onValueChange('', '');\n }\n },\n [onValueChange],\n );\n\n // Determine if lookup is usable (has either onLookupSearch or valid targets)\n const hasValidTargets = targets && targets.length > 0 && targets.some(t => t.entitySetName && t.primaryNameAttribute);\n const isUsable = !disabled && (onLookupSearch || hasValidTargets);\n\n // If lookup metadata isn't available, show a plain input for manual GUID entry\n if (!isUsable && !disabled) {\n return (\n <Input\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Lookup GUID\"\n type=\"text\"\n value={value || ''}\n onChange={(_, data) => onValueChange(data.value, displayName)}\n placeholder=\"Enter GUID...\"\n contentAfter={\n <Text size={100} style={{ whiteSpace: 'nowrap', color: 'var(--colorNeutralForeground3)' }}>\n Manual entry\n </Text>\n }\n />\n );\n }\n\n // Build selected option for display\n const selectedOption: LookupOption | null = value\n ? { key: value, text: displayName || value }\n : null;\n\n // Header showing entity type\n const header = headerText ? (\n <Text size={200} weight=\"semibold\" style={{ padding: '4px 8px', display: 'block' }}>\n {headerText}\n </Text>\n ) : undefined;\n\n // Footer showing record count\n const footer = resultCount > 0 ? (\n <Text size={100} style={{ padding: '4px 8px', display: 'block', color: 'var(--colorNeutralForeground3)' }}>\n {resultCount} record{resultCount !== 1 ? 's' : ''} found\n </Text>\n ) : undefined;\n\n return (\n <Lookup\n size=\"small\"\n appearance=\"filled-darker\"\n placeholder=\"Search...\"\n aria-label=\"Lookup value\"\n options={lookupOptions}\n selectedOption={selectedOption}\n onSearchChange={handleSearchChange}\n onOptionSelect={handleOptionSelect}\n loading={lookupLoading}\n disabled={!isUsable}\n clearable\n minSearchLength={0}\n header={header}\n footer={footer}\n />\n );\n};\n","/**\n * QueryBuilder Field Enrichment Functions\n * \n * Reusable functions for enriching fields with lookup targets and optionset options.\n * These functions work for both main entity fields and related entity fields.\n */\n\nimport type { QueryBuilderField, QueryBuilderLookupTarget, QueryBuilderOption } from './QueryBuilder.types';\n\n/**\n * Enrich lookup fields with target entity metadata (EntitySetName, PrimaryNameAttribute, DisplayName).\n * This enables automatic search functionality in lookup inputs.\n * \n * @param fields - Array of fields that may contain lookup fields\n * @param entityName - The entity that owns these fields\n * @param trace - Optional trace callback for debugging\n * @returns Fields with enriched lookup metadata\n */\nexport const enrichLookupFields = async (\n fields: (QueryBuilderField & { _raw?: any })[],\n entityName: string,\n trace?: (message: string, data?: any) => void\n): Promise<QueryBuilderField[]> => {\n trace?.('[QueryBuilder] Enriching lookup targets for lookup fields', { entityName, fieldCount: fields.length });\n \n const lookupFields = fields.filter((f: any) => f.dataType === 'lookup' && f._raw);\n \n for (const field of lookupFields) {\n try {\n const attr = field._raw;\n const attrType = attr.AttributeType || attr.AttributeTypeName?.Value;\n \n if (attrType === 'Lookup' || attrType === 'Customer' || attrType === 'Owner') {\n const typeCast = attrType === 'Customer' ? 'CustomerAttributeMetadata' :\n attrType === 'Owner' ? 'OwnerAttributeMetadata' :\n 'LookupAttributeMetadata';\n const targetsUrl = `/api/data/v9.2/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${field.id}')/Microsoft.Dynamics.CRM.${typeCast}?$select=LogicalName,Targets`;\n \n const targetsResponse = await fetch(targetsUrl, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n \n if (targetsResponse.ok) {\n const targetsData = await targetsResponse.json();\n \n if (targetsData.Targets && Array.isArray(targetsData.Targets)) {\n // Fetch entity metadata for each target\n const enrichedTargets: QueryBuilderLookupTarget[] = [];\n \n for (const targetEntityName of targetsData.Targets) {\n try {\n const entityMetaUrl = `/api/data/v9.2/EntityDefinitions(LogicalName='${targetEntityName}')?$select=LogicalName,EntitySetName,PrimaryNameAttribute,DisplayName`;\n const entityMetaResponse = await fetch(entityMetaUrl, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n \n if (entityMetaResponse.ok) {\n const entityMeta = await entityMetaResponse.json();\n enrichedTargets.push({\n entityLogicalName: targetEntityName,\n entitySetName: entityMeta.EntitySetName,\n primaryNameAttribute: entityMeta.PrimaryNameAttribute,\n displayName: entityMeta.DisplayName?.UserLocalizedLabel?.Label || targetEntityName,\n });\n } else {\n // Fallback without metadata\n enrichedTargets.push({\n entityLogicalName: targetEntityName,\n });\n }\n } catch {\n // Fallback without metadata\n enrichedTargets.push({\n entityLogicalName: targetEntityName,\n });\n }\n }\n \n field.targets = enrichedTargets;\n \n trace?.('[QueryBuilder] Enriched lookup targets', { \n field: field.id, \n targetCount: field.targets.length,\n targets: field.targets.map((t: QueryBuilderLookupTarget) => ({\n entity: t.entityLogicalName,\n hasMetadata: !!(t.entitySetName && t.primaryNameAttribute)\n }))\n });\n }\n }\n }\n } catch (lookupError) {\n trace?.('[QueryBuilder] Failed to enrich lookup field', { \n field: field.id,\n error: lookupError instanceof Error ? lookupError.message : String(lookupError)\n });\n }\n }\n \n // Remove _raw property and return\n return fields.map((f: any) => {\n const { _raw, ...field } = f;\n return field;\n });\n};\n\n/**\n * Enrich optionset fields with their option values.\n * Web API limitation requires fetching optionsets separately with type casting.\n * \n * @param fields - Array of fields that may contain optionset fields\n * @param entityName - The entity that owns these fields\n * @param trace - Optional trace callback for debugging\n * @returns Fields with enriched optionset options\n */\nexport const enrichOptionsetFields = async (\n fields: (QueryBuilderField & { _raw?: any })[],\n entityName: string,\n trace?: (message: string, data?: any) => void\n): Promise<(QueryBuilderField & { _raw?: any })[]> => {\n trace?.('[QueryBuilder] Enriching optionset metadata for optionset fields', { entityName });\n \n const optionsetFields = fields.filter((f: any) => f.dataType === 'optionset' && f._raw);\n \n for (const field of optionsetFields) {\n try {\n const attr = field._raw;\n const attrType = attr.AttributeType || attr.AttributeTypeName?.Value;\n let optionsetUrl = '';\n \n // Use appropriate URL based on attribute type\n if (attrType === 'Picklist' || attrType === 'State' || attrType === 'Status') {\n const typeCast = attrType === 'Picklist' ? 'PicklistAttributeMetadata' : \n attrType === 'State' ? 'StateAttributeMetadata' : \n 'StatusAttributeMetadata';\n optionsetUrl = `/api/data/v9.2/EntityDefinitions(LogicalName='${entityName}')/Attributes(LogicalName='${field.id}')/Microsoft.Dynamics.CRM.${typeCast}?$select=LogicalName&$expand=OptionSet($select=Options),GlobalOptionSet($select=Options)`;\n }\n \n if (optionsetUrl) {\n const optResponse = await fetch(optionsetUrl, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n \n if (optResponse.ok) {\n const optData = await optResponse.json();\n const optionSet = optData.OptionSet || optData.GlobalOptionSet;\n \n if (optionSet?.Options) {\n field.options = optionSet.Options\n .filter((opt: any) => opt?.Value != null)\n .map((opt: any) => ({\n label: opt.Label?.UserLocalizedLabel?.Label || String(opt.Value),\n value: opt.Value,\n }));\n \n trace?.('[QueryBuilder] Enriched optionset options', { \n field: field.id, \n optionCount: field.options?.length ?? 0\n });\n }\n }\n }\n } catch (optError) {\n trace?.('[QueryBuilder] Failed to enrich optionset field', { \n field: field.id,\n error: optError instanceof Error ? optError.message : String(optError)\n });\n }\n }\n \n return fields;\n};\n","import * as React from 'react';\nimport { Button, Combobox, Dialog, DialogActions, DialogBody, DialogContent, DialogSurface, DialogTitle, DialogTrigger, Dropdown, Input, Menu, MenuItem, MenuList, MenuPopover, MenuTrigger, Option, Spinner, Text, Textarea } from '@fluentui/react-components';\nimport { DatePicker } from '@fluentui/react-datepicker-compat';\nimport { AddRegular, ArrowDownloadRegular, ArrowResetRegular, ArrowUploadRegular, CheckmarkCircleRegular, CopyRegular, DeleteRegular, DismissRegular, MoreHorizontalRegular, WarningRegular } from '@fluentui/react-icons';\nimport { mergeClasses, useQueryBuilderStyles } from './QueryBuilder.styles';\nimport { Lookup } from '../Lookup';\nimport type { LookupOption } from '../Lookup';\nimport type {\n QueryBuilderApplyResult,\n QueryBuilderCondition,\n QueryBuilderField,\n QueryBuilderGroup,\n QueryBuilderLookupOption,\n QueryBuilderLookupTarget,\n QueryBuilderOption,\n QueryBuilderProps,\n QueryBuilderRelatedEntity,\n QueryBuilderState,\n} from './QueryBuilder.types';\n\n// Import from new modular files\nimport { getOperatorsForType, getOperatorsForTypeSimple, operatorRequiresValue, operatorIsMultiValue, operatorRequiresValue2, getOperatorValueType } from './QueryBuilder.operators';\nimport { serializeQueryBuilderState, prettyPrintXml, escapeXml } from './QueryBuilder.serializer';\nimport { parseFetchXmlToState, ParseFetchXmlResult } from './QueryBuilder.parser';\nimport {\n FALLBACK_FIELDS,\n validateQueryBuilderState,\n dataTypeFromAttribute,\n getDefaultValueForField,\n createCondition,\n createRelatedCondition,\n createGroup,\n cloneState,\n getOperatorOptionsForType,\n QueryBuilderValidationError,\n QueryBuilderValidationResult,\n} from './QueryBuilder.utils';\nimport { LookupValueInput } from './QueryBuilder.LookupInput';\nimport { loadEntityFields, useEntityFields, extractAttributesArray, isValidAttribute, parseAttributeToField } from './QueryBuilder.hooks';\nimport { enrichLookupFields, enrichOptionsetFields } from './QueryBuilder.enrichment';\n\n// Re-export for backward compatibility\nexport type { QueryBuilderValidationError, QueryBuilderValidationResult };\nexport { validateQueryBuilderState, serializeQueryBuilderState, parseFetchXmlToState };\nexport type { ParseFetchXmlResult };\n\nexport const QueryBuilder: React.FC<QueryBuilderProps> = (props) => {\n const styles = useQueryBuilderStyles();\n \n // Helper function for debug tracing with purple background\n const trace = React.useCallback((message: string, data?: any) => {\n console.debug(\n '%c FluentUI-Extended ',\n 'background: #845EF7; color: white; padding: 2px 4px; border-radius: 2px; font-weight: bold;',\n message,\n data || ''\n );\n props.onTrace?.(message, data);\n }, [props]);\n \n const [loading, setLoading] = React.useState(false);\n const [availableFields, setAvailableFields] = React.useState<QueryBuilderField[]>(\n props.fields && props.fields.length > 0 ? props.fields : FALLBACK_FIELDS,\n );\n // EntitySetName for OData queries (e.g., \"accounts\" instead of \"account\")\n const [entitySetName, setEntitySetName] = React.useState<string | undefined>(props.entitySetName);\n\n const defaultField = availableFields[0] || FALLBACK_FIELDS[0];\n\n // Convert fields to LookupOption format for field selector\n const fieldLookupOptions: LookupOption[] = React.useMemo(() => {\n const formatDataType = (dataType: QueryBuilderField['dataType']): string => {\n const labels: Record<QueryBuilderField['dataType'], string> = {\n string: 'Text',\n number: 'Number',\n datetime: 'Date/Time',\n boolean: 'Yes/No',\n optionset: 'Choice',\n lookup: 'Lookup',\n };\n return labels[dataType] || dataType;\n };\n\n // Deduplicate fields by id (take first occurrence)\n const uniqueFields = availableFields.reduce((acc, field) => {\n if (!acc.some(f => f.id === field.id)) {\n acc.push(field);\n }\n return acc;\n }, [] as QueryBuilderField[]);\n\n return uniqueFields.map((field) => ({\n key: field.id,\n text: field.label,\n details: [\n { label: 'Logical Name', value: field.id },\n ...(field.schemaName ? [{ label: 'Schema Name', value: field.schemaName }] : []),\n { label: 'Type', value: formatDataType(field.dataType) },\n ],\n data: field,\n }));\n }, [availableFields]);\n\n // Compute related entities from lookup fields (auto-detect if not provided via props)\n const computedRelatedEntities: QueryBuilderRelatedEntity[] = React.useMemo(() => {\n // If consumer provided related entities, use those\n if (props.relatedEntities && props.relatedEntities.length > 0) {\n return props.relatedEntities;\n }\n\n // Auto-detect from lookup fields\n const related: QueryBuilderRelatedEntity[] = [];\n for (const field of availableFields) {\n if (field.dataType === 'lookup' && field.targets && field.targets.length > 0) {\n for (const target of field.targets) {\n related.push({\n id: field.id, // Use lookup field name as ID (for link-entity)\n label: `${field.label} (${target.displayName || target.entityLogicalName})`,\n lookupField: field.id,\n targetEntity: target.entityLogicalName,\n targetEntitySetName: target.entitySetName,\n });\n }\n }\n }\n return related;\n }, [availableFields, props.relatedEntities]);\n\n const [builderState, setBuilderState] = React.useState<QueryBuilderState>(() => cloneState(props.initialState, defaultField));\n const initialFetchXmlParsedRef = React.useRef(false);\n\n // Parse initialFetchXml once fields are available\n React.useEffect(() => {\n if (\n props.initialFetchXml &&\n !initialFetchXmlParsedRef.current &&\n availableFields.length > 0 &&\n availableFields !== FALLBACK_FIELDS\n ) {\n const result = parseFetchXmlToState(props.initialFetchXml, availableFields);\n if (result.state) {\n setBuilderState(result.state);\n initialFetchXmlParsedRef.current = true;\n }\n }\n }, [props.initialFetchXml, availableFields]);\n\n React.useEffect(() => {\n if (props.fields && props.fields.length > 0) {\n setAvailableFields(props.fields);\n }\n }, [props.fields]);\n\n React.useEffect(() => {\n let disposed = false;\n\n const loadFields = async () => {\n if (props.fields && props.fields.length > 0) {\n return;\n }\n\n setLoading(true);\n try {\n // Fetch entity metadata using native Web API\n const entityResponse = await fetch(\n `/api/data/v9.2/EntityDefinitions(LogicalName='${props.entityName}')?$select=EntitySetName,DisplayName,PrimaryNameAttribute`,\n {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n }\n );\n\n if (!entityResponse.ok) {\n console.warn('[QueryBuilder] Failed to fetch entity metadata');\n return;\n }\n\n const entityMetadata = await entityResponse.json();\n\n // Extract EntitySetName for OData queries\n if (entityMetadata?.EntitySetName && !disposed) {\n setEntitySetName(entityMetadata.EntitySetName);\n }\n\n // Fetch regular attributes\n const attributesResponse = await fetch(\n `/api/data/v9.2/EntityDefinitions(LogicalName='${props.entityName}')/Attributes?$select=LogicalName,SchemaName,DisplayName,AttributeType,AttributeTypeName`,\n {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n }\n );\n\n if (!attributesResponse.ok) {\n console.warn('[QueryBuilder] Failed to fetch entity attributes');\n return;\n }\n\n const attributesData = await attributesResponse.json();\n const attributesArray = attributesData.value || [];\n\n // Fetch lookup attributes separately with Targets property\n const lookupResponse = await fetch(\n `/api/data/v9.2/EntityDefinitions(LogicalName='${props.entityName}')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=LogicalName,SchemaName,DisplayName,AttributeType,AttributeTypeName,Targets`,\n {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n }\n );\n\n const lookupData = lookupResponse.ok ? await lookupResponse.json() : { value: [] };\n const lookupAttributes = lookupData.value || [];\n\n // Create a map of lookup attributes by LogicalName for easy lookup\n const lookupMap = new Map<string, any>(lookupAttributes.map((attr: any) => [attr.LogicalName, attr]));\n\n // Merge lookup Targets into the main attributes array\n const mergedAttributes = attributesArray.map((attr: any) => {\n const lookupAttr = lookupMap.get(attr.LogicalName);\n if (lookupAttr?.Targets) {\n return { ...attr, Targets: lookupAttr.Targets };\n }\n return attr;\n });\n\n // First pass: collect all unique target entity names from lookup fields\n const targetEntityNames = new Set<string>();\n for (const attribute of mergedAttributes) {\n if (Array.isArray(attribute?.Targets)) {\n for (const target of attribute.Targets) {\n const entityName = typeof target === 'string' ? target : target?.entityLogicalName;\n if (entityName) targetEntityNames.add(entityName);\n }\n }\n }\n\n // Fetch metadata for each target entity to get entitySetName and primaryNameAttribute\n const targetMetadataCache: Record<string, { entitySetName?: string; displayName?: string; primaryNameAttribute?: string }> = {};\n for (const targetEntityName of targetEntityNames) {\n try {\n const targetResponse = await fetch(\n `/api/data/v9.2/EntityDefinitions(LogicalName='${targetEntityName}')?$select=EntitySetName,DisplayName,PrimaryNameAttribute`,\n {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n }\n );\n if (targetResponse.ok) {\n const targetMeta = await targetResponse.json();\n targetMetadataCache[targetEntityName] = {\n entitySetName: targetMeta?.EntitySetName,\n displayName: targetMeta?.DisplayName?.UserLocalizedLabel?.Label || targetMeta?.LogicalName,\n primaryNameAttribute: targetMeta?.PrimaryNameAttribute,\n };\n }\n } catch (targetErr) {\n console.warn(`[QueryBuilder] Could not fetch metadata for target entity \"${targetEntityName}\":`, targetErr);\n }\n }\n\n const resolvedFields: QueryBuilderField[] = mergedAttributes\n .filter((attribute: any) => attribute?.LogicalName && attribute?.IsValidForAdvancedFind !== false)\n .map((attribute: any) => {\n const dataType = dataTypeFromAttribute(attribute);\n\n // Parse lookup targets and enrich with cached metadata\n const targets = dataType === 'lookup' && Array.isArray(attribute.Targets)\n ? attribute.Targets.map((target: any) => {\n const entityLogicalName = typeof target === 'string' ? target : (target?.entityLogicalName || target);\n const cached = targetMetadataCache[entityLogicalName] || {};\n return {\n entityLogicalName,\n entitySetName: target?.entitySetName || cached.entitySetName,\n displayName: target?.displayName || cached.displayName,\n primaryNameAttribute: target?.primaryNameAttribute || cached.primaryNameAttribute,\n };\n })\n : undefined;\n\n // DisplayName can be an object with UserLocalizedLabel or a string\n const displayName = attribute.DisplayName;\n const label = typeof displayName === 'string'\n ? displayName\n : (displayName?.UserLocalizedLabel?.Label || attribute.SchemaName || attribute.LogicalName);\n\n return {\n id: attribute.LogicalName,\n label,\n schemaName: attribute.SchemaName,\n dataType,\n targets,\n };\n })\n .sort((left: QueryBuilderField, right: QueryBuilderField) => String(left.label).localeCompare(String(right.label), undefined, { sensitivity: 'base' }));\n\n if (!disposed && resolvedFields.length > 0) {\n setAvailableFields(resolvedFields);\n }\n } catch (error) {\n console.error('[QueryBuilder] Error loading fields:', error);\n } finally {\n if (!disposed) {\n setLoading(false);\n }\n }\n };\n\n loadFields();\n return () => {\n disposed = true;\n };\n }, [props.entityName, props.fields]);\n\n React.useEffect(() => {\n props.onStateChange?.(builderState);\n }, [builderState, props.onStateChange]);\n\n // Debounce serialization to avoid recalculating on every keystroke\n React.useEffect(() => {\n if (!props.onSerializedChange) return;\n const timeout = setTimeout(() => {\n props.onSerializedChange?.(serializeQueryBuilderState(builderState, availableFields, props.entityName, entitySetName));\n }, 150);\n return () => clearTimeout(timeout);\n }, [availableFields, builderState, entitySetName, props.entityName, props.onSerializedChange]);\n\n React.useEffect(() => {\n const fallbackField = availableFields[0] || FALLBACK_FIELDS[0];\n\n if (!fallbackField) {\n return;\n }\n\n setBuilderState((previous) => {\n let hasChanges = false;\n\n const groups = previous.groups.map((group) => {\n const conditions = group.conditions.map((condition) => {\n if (condition.kind === 'relatedEntity') {\n return condition;\n }\n\n const matchedField = availableFields.find((field) => field.id === condition.fieldId) || fallbackField;\n const operators = getOperatorsForType(matchedField.dataType);\n const nextOperator = operators.some((item) => item.value === condition.operator)\n ? condition.operator\n : (operators[0]?.value as any);\n\n let nextValue = condition.value;\n if (matchedField.dataType === 'optionset' && matchedField.options && matchedField.options.length > 0) {\n const isValidOption = matchedField.options.some((item) => String(item.value) === String(condition.value ?? ''));\n if (!isValidOption) {\n nextValue = String(matchedField.options[0].value);\n }\n }\n\n if (condition.fieldId !== matchedField.id || condition.operator !== nextOperator || condition.value !== nextValue) {\n hasChanges = true;\n return {\n ...condition,\n fieldId: matchedField.id,\n operator: nextOperator,\n value: nextValue,\n };\n }\n\n return condition;\n });\n\n if (conditions !== group.conditions) {\n return { ...group, conditions };\n }\n\n return group;\n });\n\n return hasChanges ? { groups } : previous;\n });\n }, [availableFields]);\n\n const updateGroup = React.useCallback((groupId: string, updater: (group: QueryBuilderGroup) => QueryBuilderGroup) => {\n setBuilderState((previous) => ({\n groups: previous.groups.map((group) => (group.id === groupId ? updater(group) : group)),\n }));\n }, []);\n\n const removeCondition = React.useCallback(\n (groupId: string, conditionId: string) => {\n updateGroup(groupId, (group) => {\n const remaining = group.conditions.filter((condition) => condition.id !== conditionId);\n return {\n ...group,\n conditions: remaining.length > 0 ? remaining : [createCondition(defaultField)],\n };\n });\n },\n [defaultField, updateGroup],\n );\n\n // Load metadata for a related entity and store fields in nestedFields\n const loadRelatedEntityFields = React.useCallback(\n async (groupId: string, conditionId: string, targetEntity: string) => {\n trace('[QueryBuilder] Loading related entity fields', { groupId, conditionId, targetEntity });\n \n try {\n let resolvedFields: QueryBuilderField[] = [];\n\n // Use callback if provided, otherwise use native Web API\n if (props.onFetchEntityFields) {\n trace('[QueryBuilder] Using custom onFetchEntityFields callback');\n resolvedFields = await props.onFetchEntityFields(targetEntity);\n } else {\n // Use native Web API directly (same origin)\n // Note: Cannot select Targets or expand OptionSet on base Attributes collection\n const url = `/api/data/v9.2/EntityDefinitions(LogicalName='${targetEntity}')/Attributes?$select=LogicalName,SchemaName,DisplayName,AttributeType,AttributeTypeName`;\n trace('[QueryBuilder] Fetching entity metadata', { url });\n \n const response = await fetch(url, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n },\n });\n\n if (!response.ok) {\n // Try to get error details from response\n let errorDetails: any = null;\n try {\n errorDetails = await response.json();\n } catch {\n // Ignore if response isn't JSON\n }\n \n const errorMsg = `Failed to fetch entity metadata: ${response.status} ${response.statusText}`;\n console.warn('[QueryBuilder]', errorMsg);\n trace('[QueryBuilder] Metadata fetch failed', { \n status: response.status, \n statusText: response.statusText,\n url,\n targetEntity,\n error: errorDetails?.error || errorDetails\n });\n \n // Log specific error message if available\n if (errorDetails?.error?.message) {\n console.warn('[QueryBuilder] API Error:', errorDetails.error.message);\n trace('[QueryBuilder] API Error Message', { message: errorDetails.error.message });\n }\n \n return;\n }\n\n const data = await response.json();\n const attributesArray = data.value || [];\n trace('[QueryBuilder] Received attributes', { count: attributesArray.length });\n\n if (attributesArray.length === 0) {\n console.warn('[QueryBuilder] No attributes found for entity:', targetEntity);\n trace('[QueryBuilder] No attributes found', { targetEntity });\n return;\n }\n\n // Map attributes to fields\n const fieldsWithoutOptions = attributesArray\n .filter((attr: any) => {\n if (!attr?.LogicalName) return false;\n const attrType = attr.AttributeType || attr.AttributeTypeName?.Value;\n if (attrType === 'Virtual' || attrType === 'CalendarRules') return false;\n if (attrType === 'Uniqueidentifier' && !attr.LogicalName.endsWith('id')) return false;\n return true;\n })\n .map((attr: any) => {\n const dataType = dataTypeFromAttribute(attr);\n const displayName = attr.DisplayName;\n const label = typeof displayName === 'string'\n ? displayName\n : (displayName?.UserLocalizedLabel?.Label || attr.SchemaName || attr.LogicalName);\n\n return {\n id: attr.LogicalName,\n label,\n schemaName: attr.SchemaName,\n dataType,\n // Store raw attribute for metadata fetching\n _raw: attr,\n };\n });\n\n // Enrich lookup fields with target metadata\n await enrichLookupFields(fieldsWithoutOptions, targetEntity, trace);\n \n // Enrich optionset fields with option values\n await enrichOptionsetFields(fieldsWithoutOptions, targetEntity, trace);\n \n // Remove _raw property before returning\n resolvedFields = fieldsWithoutOptions.map((f: any) => {\n const { _raw, ...field } = f;\n return field;\n }).sort((a: QueryBuilderField, b: QueryBuilderField) => String(a.label).localeCompare(String(b.label), undefined, { sensitivity: 'base' }));\n \n trace('[QueryBuilder] Resolved fields', { \n count: resolvedFields.length,\n fields: resolvedFields.map(f => ({ id: f.id, dataType: f.dataType, hasOptions: !!f.options }))\n });\n }\n\n if (resolvedFields.length > 0) {\n // Auto-add a default condition if none exist\n const defaultCondition = createCondition(resolvedFields[0]);\n trace('[QueryBuilder] Creating default nested condition', { \n field: resolvedFields[0].id,\n dataType: resolvedFields[0].dataType,\n hasOptions: !!resolvedFields[0].options\n });\n\n updateGroup(groupId, (group) => ({\n ...group,\n conditions: group.conditions.map((cond) =>\n cond.id === conditionId\n ? {\n ...cond,\n nestedFields: resolvedFields,\n nestedConditions: (!cond.nestedConditions || cond.nestedConditions.length === 0)\n ? [defaultCondition]\n : cond.nestedConditions,\n }\n : cond\n ),\n }));\n } else {\n console.warn('[QueryBuilder] No valid fields resolved for entity:', targetEntity);\n trace('[QueryBuilder] No valid fields resolved', { targetEntity });\n }\n } catch (error) {\n console.error('[QueryBuilder] Error loading related entity fields:', error);\n trace('[QueryBuilder] Exception in loadRelatedEntityFields', { \n targetEntity,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n });\n }\n },\n [props.onFetchEntityFields, updateGroup, trace],\n );\n\n // Add a nested condition to a related entity\n const addNestedCondition = React.useCallback(\n (groupId: string, conditionId: string, nestedFields: QueryBuilderField[]) => {\n const nestedDefault = nestedFields[0] || defaultField;\n const newCondition = createCondition(nestedDefault);\n\n updateGroup(groupId, (group) => ({\n ...group,\n conditions: group.conditions.map((cond) =>\n cond.id === conditionId\n ? { ...cond, nestedConditions: [...(cond.nestedConditions || []), newCondition] }\n : cond\n ),\n }));\n },\n [defaultField, updateGroup],\n );\n\n // Remove a nested condition from a related entity\n const removeNestedCondition = React.useCallback(\n (groupId: string, conditionId: string, nestedConditionId: string) => {\n updateGroup(groupId, (group) => ({\n ...group,\n conditions: group.conditions.map((cond) =>\n cond.id === conditionId\n ? { ...cond, nestedConditions: (cond.nestedConditions || []).filter((nc) => nc.id !== nestedConditionId) }\n : cond\n ),\n }));\n },\n [updateGroup],\n );\n\n // Update a nested condition within a related entity\n const updateNestedCondition = React.useCallback(\n (groupId: string, conditionId: string, nestedConditionId: string, updater: (nc: QueryBuilderCondition) => QueryBuilderCondition) => {\n updateGroup(groupId, (group) => ({\n ...group,\n conditions: group.conditions.map((cond) =>\n cond.id === conditionId\n ? {\n ...cond,\n nestedConditions: (cond.nestedConditions || []).map((nc) =>\n nc.id === nestedConditionId ? updater(nc) : nc\n ),\n }\n : cond\n ),\n }));\n },\n [updateGroup],\n );\n\n const addItem = React.useCallback((action: 'group' | 'related') => {\n setBuilderState((previous) => {\n if (action === 'group') {\n if (props.allowGroups === false) {\n return previous;\n }\n return { groups: [...previous.groups, createGroup(defaultField)] };\n }\n\n if (action === 'related') {\n if (props.allowRelatedEntity === false) {\n return previous;\n }\n\n const firstRelated = computedRelatedEntities[0];\n const relatedGroup = createGroup(defaultField);\n relatedGroup.conditions = [createRelatedCondition(firstRelated?.id, firstRelated?.targetEntity)];\n\n return {\n groups: [...previous.groups, relatedGroup],\n };\n }\n\n return previous;\n });\n }, [computedRelatedEntities, defaultField, props.allowGroups, props.allowRelatedEntity]);\n\n // Auto-load fields for related entity conditions that have a relatedEntityName but no nestedFields\n // Also ensure relatedEntityTarget is set for existing conditions\n React.useEffect(() => {\n for (const group of builderState.groups) {\n for (const condition of group.conditions) {\n if (\n condition.kind === 'relatedEntity' &&\n condition.relatedEntityName\n ) {\n // Find the related entity to get targetEntity\n const related = computedRelatedEntities.find(r => r.id === condition.relatedEntityName);\n\n // Set relatedEntityTarget if not set (migration for existing data)\n if (related?.targetEntity && !condition.relatedEntityTarget) {\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((c) =>\n c.id === condition.id\n ? { ...c, relatedEntityTarget: related.targetEntity, fieldId: condition.relatedEntityName || c.fieldId }\n : c\n ),\n }));\n }\n\n // Load fields if not loaded\n if (related?.targetEntity && (!condition.nestedFields || condition.nestedFields.length === 0)) {\n loadRelatedEntityFields(group.id, condition.id, related.targetEntity);\n }\n }\n }\n }\n }, [builderState.groups, computedRelatedEntities, loadRelatedEntityFields, updateGroup]);\n\n const addRowToGroup = React.useCallback(\n (groupId: string) => {\n updateGroup(groupId, (current) => ({\n ...current,\n conditions: [...current.conditions, createCondition(defaultField)],\n }));\n },\n [defaultField, updateGroup],\n );\n\n const onReset = React.useCallback(() => {\n const nextState = cloneState(props.defaultState, defaultField);\n setBuilderState(nextState);\n props.onResetToDefault?.(nextState);\n }, [defaultField, props]);\n\n const onDeleteAll = React.useCallback(() => {\n const resetState: QueryBuilderState = { groups: [createGroup(defaultField)] };\n setBuilderState(resetState);\n props.onDeleteAllFilters?.();\n }, [defaultField, props]);\n\n const onDownloadFetchXml = React.useCallback(() => {\n const payload = serializeQueryBuilderState(builderState, availableFields, props.entityName, entitySetName);\n const blob = new Blob([payload.fetchXml], { type: 'application/xml' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `${props.entityName}-filters.xml`;\n anchor.click();\n URL.revokeObjectURL(url);\n }, [availableFields, builderState, entitySetName, props.entityName]);\n\n const [uploadDialogOpen, setUploadDialogOpen] = React.useState(false);\n const [uploadXmlText, setUploadXmlText] = React.useState('');\n const [uploadError, setUploadError] = React.useState<string | null>(null);\n\n const [validationDialogOpen, setValidationDialogOpen] = React.useState(false);\n const [validationResult, setValidationResult] = React.useState<QueryBuilderValidationResult | null>(null);\n const [apiValidating, setApiValidating] = React.useState(false);\n const invalidConditionIds = React.useMemo(() => {\n if (!validationResult) return new Set<string>();\n return new Set(validationResult.errors.map((e) => e.conditionId).filter(Boolean));\n }, [validationResult]);\n\n const onValidate = React.useCallback(async () => {\n const result = validateQueryBuilderState(builderState, availableFields);\n\n // If local validation failed, don't test API\n if (!result.isValid) {\n result.apiValidation = {\n available: true,\n tested: false,\n };\n setValidationResult(result);\n setValidationDialogOpen(true);\n return;\n }\n\n // Test against Web API directly\n setApiValidating(true);\n setValidationResult(result);\n setValidationDialogOpen(true);\n\n try {\n const { odataFilter } = serializeQueryBuilderState(builderState, availableFields, props.entityName, entitySetName);\n const entitySetForApi = entitySetName || props.entityName;\n const queryOptions = odataFilter ? `$filter=${odataFilter}&$top=1&$count=true` : '$top=1&$count=true';\n\n const response = await fetch(`/api/data/v9.2/${entitySetForApi}?${queryOptions}`, {\n headers: {\n 'OData-MaxVersion': '4.0',\n 'OData-Version': '4.0',\n 'Accept': 'application/json',\n 'Prefer': 'odata.include-annotations=\"*\"',\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(errorText || `HTTP ${response.status}`);\n }\n\n const data = await response.json();\n\n setValidationResult({\n ...result,\n apiValidation: {\n available: true,\n tested: true,\n success: true,\n recordCount: data['@odata.count'] ?? data.value?.length ?? 0,\n },\n });\n } catch (err: any) {\n setValidationResult({\n ...result,\n apiValidation: {\n available: true,\n tested: true,\n success: false,\n errorMessage: err?.message || 'Unknown API error',\n },\n });\n } finally {\n setApiValidating(false);\n }\n }, [builderState, availableFields, entitySetName, props.entityName]);\n\n const onOpenUploadDialog = React.useCallback(() => {\n setUploadXmlText('');\n setUploadError(null);\n setUploadDialogOpen(true);\n }, []);\n\n const onApplyUploadedXml = React.useCallback(() => {\n const result = parseFetchXmlToState(uploadXmlText, availableFields);\n if (result.state) {\n setBuilderState(result.state);\n setUploadDialogOpen(false);\n setUploadError(null);\n } else {\n setUploadError(result.error || 'Invalid FetchXML.');\n }\n }, [uploadXmlText, availableFields]);\n\n const serialized = serializeQueryBuilderState(builderState, availableFields, props.entityName, entitySetName);\n\n const renderValueInput = React.useCallback(\n (\n field: QueryBuilderField,\n condition: QueryBuilderCondition,\n isNullOperator: boolean,\n onValueChange: (value: string | number | boolean | (string | number)[], displayName?: string) => void,\n ) => {\n // If we have valueDisplayName but field type is not detected as lookup,\n // still render as lookup (this happens when parsing FetchXML where field metadata isn't loaded yet)\n const hasLookupDisplayName = condition.valueDisplayName && condition.valueDisplayName.trim() !== '';\n const shouldRenderAsLookup = field.dataType === 'lookup' || hasLookupDisplayName;\n \n if (shouldRenderAsLookup) {\n return (\n <LookupValueInput\n fieldId={condition.fieldId}\n value={String(condition.value ?? '')}\n displayName={condition.valueDisplayName ?? ''}\n disabled={isNullOperator}\n targets={field.targets}\n onLookupSearch={props.onLookupSearch}\n onValueChange={(value, displayName) => onValueChange(value, displayName)}\n />\n );\n }\n\n switch (field.dataType) {\n case 'optionset': {\n if (!field.options) return null;\n\n const isMultiSelect = condition.operator === 'in' || condition.operator === 'not-in';\n\n if (isMultiSelect) {\n // Multi-select mode for in/not-in operators\n const currentValues: (string | number)[] = Array.isArray(condition.value)\n ? condition.value\n : (condition.value !== undefined && condition.value !== null && String(condition.value) !== ''\n ? [condition.value as string | number]\n : []);\n\n const selectedLabels = currentValues\n .map(v => field.options!.find(opt => String(opt.value) === String(v))?.label)\n .filter(Boolean)\n .join(', ') || 'Select values...';\n\n return (\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n listbox={{ className: styles.optionsetListbox }}\n multiselect\n selectedOptions={currentValues.map(v => String(v))}\n value={selectedLabels}\n disabled={isNullOperator}\n onOptionSelect={(_, data) => {\n const newValues = data.selectedOptions.map(v => {\n // Try to preserve number type if original was number\n const opt = field.options!.find(o => String(o.value) === v);\n return opt ? opt.value : v;\n });\n onValueChange(newValues as (string | number)[]);\n }}\n >\n {field.options.map((option) => (\n <Option key={String(option.value)} value={String(option.value)}>\n {option.label}\n </Option>\n ))}\n </Dropdown>\n );\n }\n\n // Single-select mode for eq/ne operators\n return (\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n listbox={{ className: styles.optionsetListbox }}\n selectedOptions={[\n condition.value !== undefined && condition.value !== null && String(condition.value) !== ''\n ? String(condition.value)\n : String(field.options[0]?.value ?? '')\n ]}\n value={\n field.options.find(opt => String(opt.value) === String(condition.value))?.label\n || field.options[0]?.label\n || ''\n }\n disabled={isNullOperator}\n onOptionSelect={(_, data) => onValueChange(data.optionValue ?? String(condition.value ?? ''))}\n >\n {field.options.map((option) => (\n <Option key={String(option.value)} value={String(option.value)}>\n {option.label}\n </Option>\n ))}\n </Dropdown>\n );\n }\n\n case 'datetime':\n return (\n <DatePicker\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n value={condition.value ? new Date(String(condition.value)) : null}\n onSelectDate={(date) => onValueChange(date ? date.toISOString().split('T')[0] : '')}\n disabled={isNullOperator}\n placeholder=\"Select date...\"\n />\n );\n\n case 'boolean':\n return (\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n selectedOptions={[String(condition.value ?? 'true')]}\n value={String(condition.value ?? 'true') === 'true' ? 'Yes' : 'No'}\n disabled={isNullOperator}\n onOptionSelect={(_, data) => onValueChange(data.optionValue ?? 'true')}\n >\n <Option value=\"true\">Yes</Option>\n <Option value=\"false\">No</Option>\n </Dropdown>\n );\n\n case 'number':\n return (\n <Input\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n type=\"number\"\n value={String(condition.value ?? '')}\n onChange={(_, data) => onValueChange(data.value)}\n disabled={isNullOperator}\n placeholder=\"Value\"\n />\n );\n\n default: // 'string' and any other types\n return (\n <Input\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Value\"\n type=\"text\"\n value={String(condition.value ?? '')}\n onChange={(_, data) => onValueChange(data.value)}\n disabled={isNullOperator}\n placeholder=\"Value\"\n />\n );\n }\n },\n [styles.compactControl, styles.optionsetListbox, props.onLookupSearch],\n );\n\n const renderRowActions = React.useCallback(\n (onDelete: () => void) => (\n <Menu positioning=\"below-end\">\n <MenuTrigger disableButtonEnhancement>\n <Button size=\"small\" appearance=\"outline\" icon={<MoreHorizontalRegular />} aria-label=\"Row options\" />\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n <MenuItem icon={<DeleteRegular />} onClick={onDelete}>\n Delete\n </MenuItem>\n <MenuItem disabled>Make group</MenuItem>\n </MenuList>\n </MenuPopover>\n </Menu>\n ),\n [],\n );\n\n return (\n <div className={styles.container}>\n <div className={styles.headerRow}>\n <Text weight=\"semibold\" className={styles.headerTitle}>\n Edit filters: {props.entityDisplayName || props.entityName}\n </Text>\n </div>\n\n <div className={styles.toolbar}>\n <div className={styles.toolbarGroup}>\n {props.showResetToDefaultButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<ArrowResetRegular />}\n onClick={onReset}\n >\n Reset to default\n </Button>\n )}\n {props.showDownloadFetchXmlButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<ArrowDownloadRegular />}\n onClick={onDownloadFetchXml}\n >\n Download FetchXML\n </Button>\n )}\n {props.showUploadFetchXmlButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<ArrowUploadRegular />}\n onClick={onOpenUploadDialog}\n >\n Import FetchXML\n </Button>\n )}\n\n <Dialog open={uploadDialogOpen} onOpenChange={(_, data) => setUploadDialogOpen(data.open)}>\n <DialogSurface style={{ maxWidth: '600px' }}>\n <DialogBody>\n <DialogTitle>Import FetchXML</DialogTitle>\n <DialogContent style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <Text>Paste your FetchXML below to rebuild the query:</Text>\n <Textarea\n placeholder=\"<fetch><entity name='account'><filter>...</filter></entity></fetch>\"\n value={uploadXmlText}\n onChange={(_, data) => setUploadXmlText(data.value)}\n style={{ minHeight: '200px', fontFamily: 'monospace' }}\n resize=\"vertical\"\n />\n {uploadError && (\n <Text style={{ color: 'var(--colorStatusDangerForeground1)' }}>{uploadError}</Text>\n )}\n </DialogContent>\n <DialogActions>\n <DialogTrigger disableButtonEnhancement>\n <Button appearance=\"secondary\">Cancel</Button>\n </DialogTrigger>\n <Button appearance=\"primary\" onClick={onApplyUploadedXml} disabled={!uploadXmlText.trim()}>\n Apply\n </Button>\n </DialogActions>\n </DialogBody>\n </DialogSurface>\n </Dialog>\n {props.showValidateButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<CheckmarkCircleRegular />}\n onClick={onValidate}\n >\n Validate\n </Button>\n )}\n\n <Dialog open={validationDialogOpen} onOpenChange={(_, data) => setValidationDialogOpen(data.open)}>\n <DialogSurface style={{ maxWidth: '500px' }}>\n <DialogBody>\n <DialogTitle>Query Validation</DialogTitle>\n <DialogContent style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n {/* Local Validation Section */}\n <div>\n <Text weight=\"semibold\" style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n {validationResult?.isValid ? (\n <span className={styles.validationSuccess}>\n <CheckmarkCircleRegular className={styles.validationIcon} />\n Query Structure: Valid\n </span>\n ) : (\n <span className={styles.validationError}>\n <WarningRegular className={styles.validationIcon} />\n Query Structure: Errors Found\n </span>\n )}\n </Text>\n {!validationResult?.isValid && (\n <ul className={styles.validationErrorList}>\n {validationResult?.errors.map((error, idx) => (\n <li key={idx} className={styles.validationErrorItem}>\n <strong>{error.fieldLabel}:</strong> {error.message}\n </li>\n ))}\n </ul>\n )}\n </div>\n\n {/* API Validation Section */}\n <div className={styles.apiValidationSection}>\n <Text weight=\"semibold\" style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n Dynamics 365 API Test\n </Text>\n {!validationResult?.apiValidation?.available ? (\n <Text className={styles.apiUnavailable}>\n API validation unavailable — not running in Dynamics 365 environment.\n </Text>\n ) : !validationResult?.isValid ? (\n <Text className={styles.apiUnavailable}>\n Fix query structure errors before testing against the API.\n </Text>\n ) : apiValidating ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <Spinner size=\"tiny\" />\n <Text>Testing query against Dynamics 365...</Text>\n </div>\n ) : validationResult?.apiValidation?.tested ? (\n validationResult.apiValidation.success ? (\n <Text className={styles.validationSuccess}>\n <CheckmarkCircleRegular className={styles.validationIcon} />\n Query executed successfully. {validationResult.apiValidation.recordCount ?? 0} record(s) would match.\n </Text>\n ) : (\n <Text className={styles.validationError}>\n <WarningRegular className={styles.validationIcon} />\n API Error: {validationResult.apiValidation.errorMessage}\n </Text>\n )\n ) : (\n <Text className={styles.apiUnavailable}>Waiting for validation...</Text>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <DialogTrigger disableButtonEnhancement>\n <Button appearance=\"primary\">OK</Button>\n </DialogTrigger>\n </DialogActions>\n </DialogBody>\n </DialogSurface>\n </Dialog>\n {props.showDeleteAllFiltersButton !== false && (\n <Button\n size=\"small\"\n appearance=\"transparent\"\n icon={<DeleteRegular />}\n onClick={onDeleteAll}\n >\n Delete all filters\n </Button>\n )}\n </div>\n </div>\n\n {loading ? (\n <div className={styles.loadingWrap}>\n <Spinner label=\"Loading fields...\" />\n </div>\n ) : (\n <div className={styles.groupsContainer}>\n <div className={styles.rootLogicRow}>\n <Combobox className={styles.rootLogicSelect} size=\"small\" appearance=\"filled-darker\" value=\"AND\" disabled>\n <Option value=\"AND\">AND</Option>\n </Combobox>\n </div>\n {builderState.groups.map((group, groupIndex) => {\n const hasBetweenOperator = group.conditions.some((c) => c.operator === 'between');\n const headerRowClass = mergeClasses(\n styles.columnHeaderRow,\n hasBetweenOperator && styles.columnHeaderRowWithBetween,\n );\n const rowGridClass = mergeClasses(\n styles.rowGrid,\n hasBetweenOperator && styles.rowGridWithBetween,\n );\n const isLastGroup = groupIndex === builderState.groups.length - 1;\n // Hide group logic dropdown when the only condition is a related entity\n const isOnlySingleRelatedEntity = group.conditions.length === 1 && group.conditions[0].kind === 'relatedEntity';\n const showGroupLogic = !isOnlySingleRelatedEntity;\n\n return (\n <div className={styles.groupTreeRow} key={group.id}>\n {/* Tree connector column */}\n <div className={mergeClasses(styles.treeConnector, isLastGroup && styles.treeConnectorLast)}>\n <div className={styles.treeConnectorLine} />\n <div className={styles.treeConnectorBranch} />\n </div>\n\n {/* Group card */}\n <div className={styles.groupCard} role=\"grid\" aria-label={`Filter group ${groupIndex + 1}`}>\n <div className={styles.groupHeader}>\n <div className={styles.groupHeaderLeft}>\n {showGroupLogic && (\n <Combobox\n className={styles.groupLogicSelect}\n size=\"small\"\n appearance=\"filled-darker\"\n selectedOptions={[group.logic]}\n value={group.logic === 'or' ? 'OR' : 'AND'}\n aria-label=\"Group logic\"\n onOptionSelect={(_, data) =>\n updateGroup(group.id, (current) => ({\n ...current,\n logic: data.optionValue === 'or' ? 'or' : 'and',\n }))\n }\n >\n <Option value=\"and\">AND</Option>\n <Option value=\"or\">OR</Option>\n </Combobox>\n )}\n </div>\n\n <div className={styles.groupHeaderRight}>\n {props.allowGroups !== false && builderState.groups.length > 1 && (\n <Button\n size=\"small\"\n appearance=\"subtle\"\n icon={<DismissRegular />}\n aria-label=\"Remove group\"\n onClick={() =>\n setBuilderState((previous) => ({\n groups: previous.groups.filter((candidate) => candidate.id !== group.id),\n }))\n }\n />\n )}\n </div>\n </div>\n\n <div className={headerRowClass} role=\"row\" aria-hidden=\"true\">\n <span className={styles.headerField}>Field</span>\n <span className={styles.headerOperator}>Operator</span>\n <span className={styles.headerValue}>Value</span>\n {hasBetweenOperator && <span className={styles.headerAnd}>And</span>}\n <span className={styles.headerRemove} />\n </div>\n\n <div className={styles.conditionsList}>\n {group.conditions.map((condition, conditionIndex) => {\n const isLastCondition = conditionIndex === group.conditions.length - 1;\n const connectorClass = mergeClasses(\n styles.conditionConnector,\n isLastCondition && styles.conditionConnectorLast,\n );\n\n if (condition.kind === 'relatedEntity') {\n const relatedEntityRowClass = mergeClasses(\n styles.conditionTreeRow,\n invalidConditionIds.has(condition.id) && styles.conditionInvalid,\n );\n const selectedRelated = computedRelatedEntities.find(r => r.id === condition.relatedEntityName);\n const nestedFields = condition.nestedFields || [];\n const nestedConditions = condition.nestedConditions || [];\n const nestedDefaultField = nestedFields[0] || defaultField;\n\n // Handler to select related entity and load its fields\n const handleRelatedEntitySelect = (_: any, data: { optionValue?: string }) => {\n const relatedId = data.optionValue;\n const related = computedRelatedEntities.find(r => r.id === relatedId);\n\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? {\n ...row,\n relatedEntityName: relatedId,\n relatedEntityTarget: related?.targetEntity,\n fieldId: relatedId || '__related_entity__',\n nestedConditions: [],\n nestedFields: [],\n }\n : row,\n ),\n }));\n\n // Load fields for the related entity\n if (related?.targetEntity) {\n loadRelatedEntityFields(group.id, condition.id, related.targetEntity);\n }\n };\n\n return (\n <div className={relatedEntityRowClass} key={condition.id}>\n <div className={connectorClass}>\n <div className={styles.conditionConnectorLine} />\n <div className={styles.conditionConnectorBranch} />\n </div>\n <div className={styles.relatedEntityCard}>\n <div className={styles.relatedEntityHeader}>\n <Text className={styles.relatedEntityLabel}>Related:</Text>\n <Button\n size=\"small\"\n appearance=\"subtle\"\n icon={<DismissRegular />}\n aria-label=\"Remove related entity\"\n onClick={() => removeCondition(group.id, condition.id)}\n />\n </div>\n <Dropdown\n className={styles.relatedEntityDropdown}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Related entity\"\n listbox={{ className: styles.optionsetListbox }}\n selectedOptions={condition.relatedEntityName ? [condition.relatedEntityName] : []}\n value={selectedRelated?.label || 'Select related entity...'}\n onOptionSelect={handleRelatedEntitySelect}\n >\n {computedRelatedEntities.length > 0 ? (\n computedRelatedEntities.map((related) => (\n <Option key={related.id} value={related.id}>\n {related.label}\n </Option>\n ))\n ) : (\n <Option value=\"\">No related entities available</Option>\n )}\n </Dropdown>\n {nestedConditions.length > 1 && (\n <Combobox\n size=\"small\"\n appearance=\"filled-darker\"\n className={styles.nestedLogicDropdown}\n selectedOptions={[condition.nestedLogic || 'and']}\n value={condition.nestedLogic === 'or' ? 'OR' : 'AND'}\n aria-label=\"Nested logic\"\n onOptionSelect={(_, data) =>\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? { ...row, nestedLogic: data.optionValue === 'or' ? 'or' : 'and' }\n : row,\n ),\n }))\n }\n >\n <Option value=\"and\">AND</Option>\n <Option value=\"or\">OR</Option>\n </Combobox>\n )}\n\n {/* Nested conditions for the related entity */}\n {/* Show if: we have fields loaded, OR we have existing conditions (from parsed FetchXML) */}\n {selectedRelated && (nestedFields.length > 0 || nestedConditions.length > 0) && (\n <div className={styles.relatedEntityConditions}>\n {/* Column headers for nested conditions */}\n <div className={styles.nestedConditionHeader}>\n <span>Field</span>\n <span>Operator</span>\n <span>Value</span>\n <span />\n </div>\n\n {nestedConditions.map((nestedCond) => {\n const nestedField = nestedFields.find(f => f.id === nestedCond.fieldId) || nestedDefaultField;\n const nestedOperators = getOperatorsForType(nestedField.dataType);\n const isNestedNullOp = nestedCond.operator === 'null' || nestedCond.operator === 'notnull';\n\n // Build lookup options for nested field selector using same format as main field selector\n const formatDataType = (dataType: QueryBuilderField['dataType']): string => {\n const labels: Record<QueryBuilderField['dataType'], string> = {\n string: 'Text',\n number: 'Number',\n datetime: 'Date/Time',\n boolean: 'Yes/No',\n optionset: 'Choice',\n lookup: 'Lookup',\n };\n return labels[dataType] || dataType;\n };\n\n const nestedFieldLookupOptions: LookupOption[] = nestedFields.map((f) => ({\n key: f.id,\n text: f.label,\n details: [\n { label: 'Logical Name', value: f.id },\n ...(f.schemaName ? [{ label: 'Schema Name', value: f.schemaName }] : []),\n { label: 'Type', value: formatDataType(f.dataType) },\n ],\n data: f,\n }));\n\n return (\n <div key={nestedCond.id} className={styles.nestedConditionRow}>\n <Lookup\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Field\"\n options={nestedFieldLookupOptions}\n selectedKey={nestedCond.fieldId}\n clearable={false}\n placeholder=\"Select field...\"\n onOptionSelect={(option) => {\n if (!option) return;\n const newField = (option.data as QueryBuilderField) || nestedFields.find(f => f.id === option.key) || nestedDefaultField;\n updateNestedCondition(group.id, condition.id, nestedCond.id, (nc) => ({\n ...nc,\n fieldId: newField.id,\n operator: getOperatorsForType(newField.dataType)[0].value as any,\n value: getDefaultValueForField(newField),\n }));\n }}\n />\n\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Operator\"\n selectedOptions={[nestedCond.operator]}\n value={nestedOperators.find(op => op.value === nestedCond.operator)?.label || ''}\n onOptionSelect={(_, data) =>\n updateNestedCondition(group.id, condition.id, nestedCond.id, (nc) => ({\n ...nc,\n operator: (data.optionValue as any) || nc.operator,\n }))\n }\n >\n {nestedOperators.map(op => (\n <Option key={op.value} value={op.value}>{op.label}</Option>\n ))}\n </Dropdown>\n\n {renderValueInput(nestedField, nestedCond, isNestedNullOp, (value, displayName) => {\n updateNestedCondition(group.id, condition.id, nestedCond.id, (nc) => ({\n ...nc,\n value,\n valueDisplayName: displayName,\n }));\n })}\n\n {renderRowActions(() => removeNestedCondition(group.id, condition.id, nestedCond.id))}\n </div>\n );\n })}\n\n <div className={styles.relatedEntityAddRow}>\n <Button\n size=\"small\"\n appearance=\"outline\"\n icon={<AddRegular />}\n onClick={() => addNestedCondition(group.id, condition.id, nestedFields)}\n >\n Add condition\n </Button>\n </div>\n </div>\n )}\n\n {/* Show loading state only when no conditions exist and fields are loading */}\n {selectedRelated && nestedFields.length === 0 && nestedConditions.length === 0 && (\n <div style={{ padding: '8px 0', color: 'var(--colorNeutralForeground3)', fontSize: '12px' }}>\n <Spinner size=\"tiny\" label=\"Loading fields...\" />\n </div>\n )}\n {!selectedRelated && (\n <div style={{ padding: '8px 0', color: 'var(--colorNeutralForeground3)', fontSize: '12px' }}>\n Select a related entity to add filter conditions.\n </div>\n )}\n </div>\n </div>\n );\n }\n\n const selectedField = availableFields.find((field) => field.id === condition.fieldId) || defaultField;\n const operators = getOperatorsForType(selectedField.dataType);\n const isNullOperator = condition.operator === 'null' || condition.operator === 'notnull';\n const isBetween = condition.operator === 'between';\n const conditionRowClass = mergeClasses(\n styles.conditionTreeRow,\n invalidConditionIds.has(condition.id) && styles.conditionInvalid,\n );\n\n return (\n <div className={conditionRowClass} key={condition.id}>\n <div className={connectorClass}>\n <div className={styles.conditionConnectorLine} />\n <div className={styles.conditionConnectorBranch} />\n </div>\n <div className={rowGridClass} role=\"row\">\n <div className={styles.fieldCell} role=\"gridcell\">\n <Lookup\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Field\"\n options={fieldLookupOptions}\n selectedKey={condition.fieldId}\n clearable={false}\n placeholder=\"Select field...\"\n onOptionSelect={(option) => {\n if (!option) return;\n const nextField = (option.data as QueryBuilderField) || availableFields.find((field) => field.id === option.key) || defaultField;\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? {\n ...row,\n fieldId: nextField.id,\n operator: getOperatorsForType(nextField.dataType)[0].value as any,\n value: getDefaultValueForField(nextField),\n value2: '',\n }\n : row,\n ),\n }));\n }}\n />\n </div>\n\n <div className={styles.operatorCell} role=\"gridcell\">\n <Dropdown\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Operator\"\n value={operators.find((op) => op.value === condition.operator)?.label || ''}\n selectedOptions={[condition.operator]}\n onOptionSelect={(_, data) =>\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? {\n ...row,\n operator: (data.optionValue as any) || row.operator,\n }\n : row,\n ),\n }))\n }\n >\n {operators.map((operator) => (\n <Option key={operator.value} value={operator.value}>\n {operator.label}\n </Option>\n ))}\n </Dropdown>\n </div>\n\n <div className={styles.valueCell} role=\"gridcell\">\n {renderValueInput(selectedField, condition, isNullOperator, (value, displayName) => {\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? { ...row, value, valueDisplayName: displayName }\n : row,\n ),\n }));\n })}\n </div>\n\n {hasBetweenOperator && (\n isBetween ? (\n <div className={styles.andCell} role=\"gridcell\">\n {selectedField.dataType === 'datetime' ? (\n <DatePicker\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Second value\"\n value={condition.value2 ? new Date(String(condition.value2)) : null}\n onSelectDate={(date) =>\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id\n ? { ...row, value2: date ? date.toISOString().split('T')[0] : '' }\n : row,\n ),\n }))\n }\n placeholder=\"And\"\n />\n ) : (\n <Input\n className={styles.compactControl}\n size=\"small\"\n appearance=\"filled-darker\"\n aria-label=\"Second value\"\n type={selectedField.dataType === 'number' ? 'number' : 'text'}\n value={String(condition.value2 ?? '')}\n onChange={(_, data) =>\n updateGroup(group.id, (current) => ({\n ...current,\n conditions: current.conditions.map((row) =>\n row.id === condition.id ? { ...row, value2: data.value } : row,\n ),\n }))\n }\n placeholder=\"And\"\n />\n )}\n </div>\n ) : (\n <div className={styles.andCell} role=\"gridcell\" />\n )\n )}\n\n <div className={styles.removeCell} role=\"gridcell\">\n {renderRowActions(() => removeCondition(group.id, condition.id))}\n </div>\n </div>\n </div>\n );\n })}\n\n {/* Add condition button */}\n <div className={styles.addButtonRow}>\n <div className={styles.addButtonConnector}>\n <div className={styles.addButtonConnectorLine} />\n <div className={styles.addButtonConnectorBranch} />\n </div>\n <Button appearance=\"outline\" size=\"small\" icon={<AddRegular />} onClick={() => addRowToGroup(group.id)}>\n Add condition\n </Button>\n </div>\n </div>\n </div>\n </div>\n );\n })}\n\n {/* Bottom-level Add button for groups and related entities */}\n <div className={styles.bottomAddRow}>\n <div className={styles.bottomAddConnector}>\n <div className={styles.bottomAddConnectorLine} />\n <div className={styles.bottomAddConnectorBranch} />\n </div>\n <Menu positioning=\"below-start\">\n <MenuTrigger disableButtonEnhancement>\n <Button appearance=\"outline\" size=\"small\" icon={<AddRegular />}>\n Add\n </Button>\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n {props.allowGroups !== false && (\n <MenuItem icon={<span className={styles.menuGlyph}>≡</span>} onClick={() => addItem('group')}>\n Add group\n </MenuItem>\n )}\n {props.allowRelatedEntity !== false && computedRelatedEntities.length > 0 && (\n <MenuItem icon={<span className={styles.menuGlyph}>▦</span>} onClick={() => addItem('related')}>\n Add related entity\n </MenuItem>\n )}\n </MenuList>\n </MenuPopover>\n </Menu>\n </div>\n </div>\n )}\n\n {props.showODataPreview && (\n <div className={styles.previewCard}>\n <div className={styles.previewHeader}>\n <Text weight=\"semibold\">OData Preview</Text>\n <Button\n appearance=\"subtle\"\n icon={<CopyRegular />}\n size=\"small\"\n onClick={() => navigator.clipboard.writeText(serialized.odataFilter || '')}\n title=\"Copy to clipboard\"\n />\n </div>\n <Text className={styles.previewCode}>{serialized.odataFilter || '(empty)'}</Text>\n </div>\n )}\n\n {props.showFetchXmlPreview && (\n <div className={styles.previewCard}>\n <div className={styles.previewHeader}>\n <Text weight=\"semibold\">FetchXML Preview</Text>\n <Button\n appearance=\"subtle\"\n icon={<CopyRegular />}\n size=\"small\"\n onClick={() => navigator.clipboard.writeText(serialized.fetchXml || '')}\n title=\"Copy to clipboard\"\n />\n </div>\n <Text className={styles.previewCode}>{serialized.fetchXml ? prettyPrintXml(serialized.fetchXml) : '(empty)'}</Text>\n </div>\n )}\n </div>\n );\n};\n"]}