@react-querybuilder/core 8.23.0 → 8.24.0

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.
Files changed (80) hide show
  1. package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +507 -448
  2. package/dist/cjs/react-querybuilder_core.cjs.development.js +169 -6
  3. package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
  4. package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +507 -448
  5. package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
  6. package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
  7. package/dist/derivations.d.mts +288 -237
  8. package/dist/derivations.d.ts +288 -237
  9. package/dist/derivations.js +137 -4
  10. package/dist/derivations.js.map +1 -1
  11. package/dist/derivations.mjs +136 -5
  12. package/dist/derivations.mjs.map +1 -1
  13. package/dist/formatQuery.d.mts +1 -1
  14. package/dist/formatQuery.d.ts +1 -1
  15. package/dist/formatQuery.js +7 -4
  16. package/dist/formatQuery.js.map +1 -1
  17. package/dist/formatQuery.mjs +7 -4
  18. package/dist/formatQuery.mjs.map +1 -1
  19. package/dist/{index-OF2Q1gTp.d.mts → index-94yESPHr.d.mts} +4 -2
  20. package/dist/{index-XueTy_XQ.d.ts → index-D41_Ba4j.d.ts} +4 -2
  21. package/dist/parseCEL.d.mts +110 -110
  22. package/dist/parseCEL.d.ts +110 -110
  23. package/dist/parseCEL.js +4 -4
  24. package/dist/parseCEL.js.map +1 -1
  25. package/dist/parseCEL.mjs +4 -4
  26. package/dist/parseCEL.mjs.map +1 -1
  27. package/dist/parseCypher.d.mts +7 -7
  28. package/dist/parseCypher.d.ts +7 -7
  29. package/dist/parseGremlin.d.mts +4 -4
  30. package/dist/parseGremlin.d.ts +4 -4
  31. package/dist/parseJSONata.d.mts +37 -37
  32. package/dist/parseJSONata.d.ts +37 -37
  33. package/dist/parseJSONata.js +2 -2
  34. package/dist/parseJSONata.mjs +2 -2
  35. package/dist/parseJsonLogic.d.mts +8 -8
  36. package/dist/parseJsonLogic.d.ts +8 -8
  37. package/dist/parseJsonLogic.js +3 -3
  38. package/dist/parseJsonLogic.mjs +3 -3
  39. package/dist/parseMongoDB.d.mts +7 -7
  40. package/dist/parseMongoDB.d.ts +7 -7
  41. package/dist/parseMongoDB.js +3 -3
  42. package/dist/parseMongoDB.mjs +3 -3
  43. package/dist/parseSPARQL.d.mts +4 -4
  44. package/dist/parseSPARQL.d.ts +4 -4
  45. package/dist/parseSQL.d.mts +61 -61
  46. package/dist/parseSQL.d.ts +61 -61
  47. package/dist/parseSQL.js +4 -4
  48. package/dist/parseSQL.js.map +1 -1
  49. package/dist/parseSQL.mjs +4 -4
  50. package/dist/parseSQL.mjs.map +1 -1
  51. package/dist/parseSpEL.d.mts +55 -55
  52. package/dist/parseSpEL.d.ts +55 -55
  53. package/dist/parseSpEL.js +4 -4
  54. package/dist/parseSpEL.js.map +1 -1
  55. package/dist/parseSpEL.mjs +4 -4
  56. package/dist/parseSpEL.mjs.map +1 -1
  57. package/dist/{parserUtils-DbBXyAht.js → parserUtils-2VtG7m8L.js} +3 -3
  58. package/dist/{parserUtils-DbBXyAht.js.map → parserUtils-2VtG7m8L.js.map} +1 -1
  59. package/dist/{parserUtils-BKPstAaO.mjs → parserUtils-BlafvoFb.mjs} +3 -3
  60. package/dist/{parserUtils-BKPstAaO.mjs.map → parserUtils-BlafvoFb.mjs.map} +1 -1
  61. package/dist/{prepareQueryObjects-Dj9cTl9D.js → prepareQueryObjects-DJ_VjOLb.js} +2 -2
  62. package/dist/{prepareQueryObjects-Dj9cTl9D.js.map → prepareQueryObjects-DJ_VjOLb.js.map} +1 -1
  63. package/dist/{prepareQueryObjects-Dmyf3Wi_.mjs → prepareQueryObjects-DawsH4e3.mjs} +2 -2
  64. package/dist/{prepareQueryObjects-Dmyf3Wi_.mjs.map → prepareQueryObjects-DawsH4e3.mjs.map} +1 -1
  65. package/dist/react-querybuilder_core.d.mts +507 -448
  66. package/dist/react-querybuilder_core.legacy-esm.d.ts +507 -448
  67. package/dist/react-querybuilder_core.legacy-esm.js +172 -14
  68. package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
  69. package/dist/react-querybuilder_core.mjs +168 -7
  70. package/dist/react-querybuilder_core.mjs.map +1 -1
  71. package/dist/react-querybuilder_core.production.d.mts +507 -448
  72. package/dist/react-querybuilder_core.production.mjs +1 -1
  73. package/dist/react-querybuilder_core.production.mjs.map +1 -1
  74. package/dist/{utils-e-7KHkjV.js → utils-B4E1-ZvU.js} +12 -2
  75. package/dist/utils-B4E1-ZvU.js.map +1 -0
  76. package/dist/{utils-CP5Jqy1P.mjs → utils-DLZCoyAh.mjs} +12 -2
  77. package/dist/utils-DLZCoyAh.mjs.map +1 -0
  78. package/package.json +20 -19
  79. package/dist/utils-CP5Jqy1P.mjs.map +0 -1
  80. package/dist/utils-e-7KHkjV.js.map +0 -1
@@ -122,6 +122,10 @@ const defaultTranslations = {
122
122
  label: "⧉",
123
123
  title: "Clone group"
124
124
  },
125
+ ungroupRuleGroup: {
126
+ label: "⊟",
127
+ title: "Ungroup"
128
+ },
125
129
  shiftActionUp: {
126
130
  label: "˄",
127
131
  title: "Shift up"
@@ -449,6 +453,7 @@ const standardClassnames = {
449
453
  addGroup: "ruleGroup-addGroup",
450
454
  cloneRule: "rule-cloneRule",
451
455
  cloneGroup: "ruleGroup-cloneGroup",
456
+ ungroup: "ruleGroup-ungroup",
452
457
  removeGroup: "ruleGroup-remove",
453
458
  notToggle: "ruleGroup-notToggle",
454
459
  rule: "rule",
@@ -503,6 +508,7 @@ const defaultControlClassnames = {
503
508
  addGroup: "",
504
509
  cloneRule: "",
505
510
  cloneGroup: "",
511
+ ungroup: "",
506
512
  removeGroup: "",
507
513
  notToggle: "",
508
514
  rule: "",
@@ -564,6 +570,7 @@ const TestID = {
564
570
  addGroup: "add-group",
565
571
  removeGroup: "remove-group",
566
572
  cloneGroup: "clone-group",
573
+ ungroup: "ungroup",
567
574
  cloneRule: "clone-rule",
568
575
  addRule: "add-rule",
569
576
  removeRule: "remove-rule",
@@ -595,11 +602,13 @@ const LogType = {
595
602
  onMoveRuleFalse: "onMoveRule callback returned false",
596
603
  onMoveGroupFalse: "onMoveGroup callback returned false",
597
604
  onRemoveFalse: "onRemove callback returned false",
605
+ onUngroupFalse: "onUngroup callback returned false",
598
606
  add: "rule or group added",
599
607
  remove: "rule or group removed",
600
608
  update: "rule or group updated",
601
609
  move: "rule or group moved",
602
- group: "rule or group grouped with another"
610
+ group: "rule or group grouped with another",
611
+ ungroup: "group replaced by its own rules"
603
612
  };
604
613
  /**
605
614
  * The {@link Path} of the root group.
@@ -632,6 +641,7 @@ const queryBuilderFlagDefaults = {
632
641
  showNotToggle: false,
633
642
  showShiftActions: false,
634
643
  showUndoRedo: false,
644
+ showUngroupButtons: false,
635
645
  suppressStandardClassnames: false
636
646
  };
637
647
  /**
@@ -1776,4 +1786,4 @@ Object.defineProperty(exports, "wrapLikeFragment", {
1776
1786
  }
1777
1787
  });
1778
1788
 
1779
- //# sourceMappingURL=utils-e-7KHkjV.js.map
1789
+ //# sourceMappingURL=utils-B4E1-ZvU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-B4E1-ZvU.js","names":["isPojo","objectKeys","numericQuantity","lc","isRuleGroup","numericRegex","isPojo"],"sources":["../src/defaults.ts","../src/utils/arrayUtils.ts","../src/utils/optGroupUtils.ts","../src/utils/parseNumber.ts","../src/utils/getParseNumberMethod.ts","../src/utils/formatQuery/utils.ts"],"sourcesContent":["import type {\n BaseTranslationsFull,\n Classnames,\n DefaultCombinatorName,\n DefaultCombinatorNameExtended,\n DefaultOperatorName,\n MatchMode,\n Path,\n QueryBuilderFlags,\n StringUnionToFullOptionArray,\n} from './types';\n\n// DO NOT ALTER OR REMOVE REGION NAMES. Some of them are used\n// to generate code snippets in the documentation.\n\n/**\n * @group Defaults\n */\nexport const defaultPlaceholderName = '~';\n/**\n * @group Defaults\n */\nexport const defaultPlaceholderLabel = '------';\n/**\n * Default `name` for placeholder option in the `fields` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderFieldName: typeof defaultPlaceholderName = defaultPlaceholderName;\n/**\n * Default `label` for placeholder option in the `fields` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderFieldLabel: typeof defaultPlaceholderLabel = defaultPlaceholderLabel;\n/**\n * Default `label` for placeholder option group in the `fields` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderFieldGroupLabel: typeof defaultPlaceholderLabel =\n defaultPlaceholderLabel;\n/**\n * Default `name` for placeholder option in the `operators` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderOperatorName: typeof defaultPlaceholderName = defaultPlaceholderName;\n/**\n * Default `label` for placeholder option in the `operators` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderOperatorLabel: typeof defaultPlaceholderLabel =\n defaultPlaceholderLabel;\n/**\n * Default `label` for placeholder option group in the `operators` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderOperatorGroupLabel: typeof defaultPlaceholderLabel =\n defaultPlaceholderLabel;\n/**\n * Default `name` for placeholder option in the `values` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderValueName: typeof defaultPlaceholderName = defaultPlaceholderName;\n/**\n * Default `label` for placeholder option in the `values` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderValueLabel: typeof defaultPlaceholderLabel = defaultPlaceholderLabel;\n/**\n * Default `label` for placeholder option group in the `values` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderValueGroupLabel: typeof defaultPlaceholderLabel =\n defaultPlaceholderLabel;\n\n/**\n * Default configuration of translatable strings.\n *\n * @group Defaults\n */\n// #region docs-translations\nexport const defaultTranslations: BaseTranslationsFull = {\n fields: {\n title: 'Field',\n placeholderName: defaultPlaceholderFieldName,\n placeholderLabel: defaultPlaceholderFieldLabel,\n placeholderGroupLabel: defaultPlaceholderFieldGroupLabel,\n } as const,\n operators: {\n title: 'Operator',\n placeholderName: defaultPlaceholderOperatorName,\n placeholderLabel: defaultPlaceholderOperatorLabel,\n placeholderGroupLabel: defaultPlaceholderOperatorGroupLabel,\n } as const,\n values: {\n title: 'Values',\n placeholderName: defaultPlaceholderValueName,\n placeholderLabel: defaultPlaceholderValueLabel,\n placeholderGroupLabel: defaultPlaceholderValueGroupLabel,\n } as const,\n matchMode: { title: 'Match mode' } as const,\n matchThreshold: { title: 'Match threshold', placeholderName: '#' } as const,\n value: { title: 'Value' } as const,\n removeRule: { label: '⨯', title: 'Remove rule' } as const,\n removeGroup: { label: '⨯', title: 'Remove group' } as const,\n addRule: { label: '+ Rule', title: 'Add rule' } as const,\n addGroup: { label: '+ Group', title: 'Add group' } as const,\n combinators: { title: 'Combinator' } as const,\n notToggle: { label: 'Not', title: 'Invert this group' } as const,\n cloneRule: { label: '⧉', title: 'Clone rule' } as const,\n cloneRuleGroup: { label: '⧉', title: 'Clone group' } as const,\n ungroupRuleGroup: { label: '⊟', title: 'Ungroup' } as const,\n shiftActionUp: { label: '˄', title: 'Shift up' } as const,\n shiftActionDown: { label: '˅', title: 'Shift down' } as const,\n undo: { label: '↶', title: 'Undo' } as const,\n redo: { label: '↷', title: 'Redo' } as const,\n dragHandle: { label: '⁞⁞', title: 'Drag handle' } as const,\n lockRule: { label: '🔓', title: 'Lock rule' } as const,\n lockGroup: { label: '🔓', title: 'Lock group' } as const,\n lockRuleDisabled: { label: '🔒', title: 'Unlock rule' } as const,\n lockGroupDisabled: { label: '🔒', title: 'Unlock group' } as const,\n muteRule: { label: '🔊', title: 'Mute rule' } as const,\n muteGroup: { label: '🔊', title: 'Mute group' } as const,\n unmuteRule: { label: '🔇', title: 'Unmute rule' } as const,\n unmuteGroup: { label: '🔇', title: 'Unmute group' } as const,\n valueSourceSelector: { title: 'Value source' } as const,\n} satisfies BaseTranslationsFull;\n// #endregion\n\n/**\n * Default character used to `.join` and `.split` arrays.\n *\n * @group Defaults\n */\nexport const defaultJoinChar = ',';\n\nexport type DefaultOperators = StringUnionToFullOptionArray<DefaultOperatorName>;\n\nexport const defaultOperatorLabelMap: Record<DefaultOperatorName, string> = {\n '=': '=',\n '!=': '!=',\n '<': '<',\n '>': '>',\n '<=': '<=',\n '>=': '>=',\n contains: 'contains',\n beginsWith: 'begins with',\n endsWith: 'ends with',\n doesNotContain: 'does not contain',\n doesNotBeginWith: 'does not begin with',\n doesNotEndWith: 'does not end with',\n null: 'is null',\n notNull: 'is not null',\n in: 'in',\n notIn: 'not in',\n between: 'between',\n notBetween: 'not between',\n};\n\nexport const defaultCombinatorLabelMap: Record<DefaultCombinatorNameExtended, string> = {\n and: 'AND',\n or: 'OR',\n xor: 'XOR',\n};\n\n/**\n * Default operator list.\n *\n * @group Defaults\n */\n// #region docs-operators\nexport const defaultOperators: DefaultOperators = [\n { name: '=', value: '=', label: '=' },\n { name: '!=', value: '!=', label: '!=' },\n { name: '<', value: '<', label: '<' },\n { name: '>', value: '>', label: '>' },\n { name: '<=', value: '<=', label: '<=' },\n { name: '>=', value: '>=', label: '>=' },\n { name: 'contains', value: 'contains', label: 'contains' },\n { name: 'beginsWith', value: 'beginsWith', label: 'begins with' },\n { name: 'endsWith', value: 'endsWith', label: 'ends with' },\n { name: 'doesNotContain', value: 'doesNotContain', label: 'does not contain' },\n { name: 'doesNotBeginWith', value: 'doesNotBeginWith', label: 'does not begin with' },\n { name: 'doesNotEndWith', value: 'doesNotEndWith', label: 'does not end with' },\n { name: 'null', value: 'null', label: 'is null' },\n { name: 'notNull', value: 'notNull', label: 'is not null' },\n { name: 'in', value: 'in', label: 'in' },\n { name: 'notIn', value: 'notIn', label: 'not in' },\n { name: 'between', value: 'between', label: 'between' },\n { name: 'notBetween', value: 'notBetween', label: 'not between' },\n];\n// #endregion\n\n/**\n * Map of default operators to their respective opposite/negating operators.\n *\n * @group Defaults\n */\nexport const defaultOperatorNegationMap: Record<DefaultOperatorName, DefaultOperatorName> = {\n '=': '!=',\n '!=': '=',\n '<': '>=',\n '<=': '>',\n '>': '<=',\n '>=': '<',\n beginsWith: 'doesNotBeginWith',\n doesNotBeginWith: 'beginsWith',\n endsWith: 'doesNotEndWith',\n doesNotEndWith: 'endsWith',\n contains: 'doesNotContain',\n doesNotContain: 'contains',\n between: 'notBetween',\n notBetween: 'between',\n in: 'notIn',\n notIn: 'in',\n notNull: 'null',\n null: 'notNull',\n} satisfies Record<DefaultOperatorName, DefaultOperatorName>;\n\n/**\n * Relational/comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`).\n *\n * @group Defaults\n */\nexport const relationalOperators: Set<DefaultOperatorName> = new Set([\n '=',\n '!=',\n '<',\n '>',\n '<=',\n '>=',\n]);\n\n/**\n * Substring/text-matching operators (`contains`, `beginsWith`, `endsWith`, and negations).\n *\n * @group Defaults\n */\nexport const substringOperators: Set<DefaultOperatorName> = new Set([\n 'contains',\n 'beginsWith',\n 'endsWith',\n 'doesNotContain',\n 'doesNotBeginWith',\n 'doesNotEndWith',\n]);\n\n/**\n * Null-check operators (`null`, `notNull`).\n *\n * @group Defaults\n */\nexport const nullOperators: Set<DefaultOperatorName> = new Set(['null', 'notNull']);\n\n/**\n * List-membership operators (`in`, `notIn`).\n *\n * @group Defaults\n */\nexport const inOperators: Set<DefaultOperatorName> = new Set(['in', 'notIn']);\n\n/**\n * Range operators (`between`, `notBetween`).\n *\n * @group Defaults\n */\nexport const betweenOperators: Set<DefaultOperatorName> = new Set(['between', 'notBetween']);\n\nexport type DefaultCombinators = StringUnionToFullOptionArray<DefaultCombinatorName>;\n\n/**\n * Default combinator list.\n *\n * @group Defaults\n */\n// #region docs-combinators\nexport const defaultCombinators: DefaultCombinators = [\n { name: 'and', value: 'and', label: 'AND' } as const,\n { name: 'or', value: 'or', label: 'OR' } as const,\n];\n// #endregion\n\nexport type DefaultCombinatorsExtended =\n StringUnionToFullOptionArray<DefaultCombinatorNameExtended>;\n\n/**\n * Default combinator list, with `XOR` added.\n *\n * @group Defaults\n */\nexport const defaultCombinatorsExtended: DefaultCombinatorsExtended = [\n ...defaultCombinators,\n { name: 'xor', value: 'xor', label: 'XOR' } as const,\n];\n\nexport type DefaultMatchModes = StringUnionToFullOptionArray<MatchMode>;\n\n/**\n * Default match modes.\n *\n * @group Defaults\n */\n// #region docs-matchmodes\nexport const defaultMatchModes: DefaultMatchModes = [\n { name: 'all', value: 'all', label: 'all' },\n { name: 'some', value: 'some', label: 'some' },\n { name: 'none', value: 'none', label: 'none' },\n { name: 'atLeast', value: 'atLeast', label: 'at least' },\n { name: 'atMost', value: 'atMost', label: 'at most' },\n { name: 'exactly', value: 'exactly', label: 'exactly' },\n];\n// #endregion\n\n/**\n * Standard classnames applied to each component.\n *\n * @group Defaults\n */\n// #region docs-standardclassnames\nexport const standardClassnames = {\n queryBuilder: 'queryBuilder',\n ruleGroup: 'ruleGroup',\n header: 'ruleGroup-header',\n body: 'ruleGroup-body',\n combinators: 'ruleGroup-combinators',\n addRule: 'ruleGroup-addRule',\n addGroup: 'ruleGroup-addGroup',\n cloneRule: 'rule-cloneRule',\n cloneGroup: 'ruleGroup-cloneGroup',\n ungroup: 'ruleGroup-ungroup',\n removeGroup: 'ruleGroup-remove',\n notToggle: 'ruleGroup-notToggle',\n rule: 'rule',\n fields: 'rule-fields',\n matchMode: 'rule-matchMode',\n matchThreshold: 'rule-matchThreshold',\n operators: 'rule-operators',\n value: 'rule-value',\n removeRule: 'rule-remove',\n betweenRules: 'betweenRules',\n valid: 'queryBuilder-valid',\n invalid: 'queryBuilder-invalid',\n shiftActions: 'shiftActions',\n undoRedoActions: 'undoRedoActions',\n undoAction: 'undoRedoActions-undo',\n redoAction: 'undoRedoActions-redo',\n dndDragging: 'dndDragging',\n dndOver: 'dndOver',\n dndCopy: 'dndCopy',\n dndGroup: 'dndGroup',\n dndDropNotAllowed: 'dndDropNotAllowed',\n dndPreviewPosition: 'dndPreviewPosition',\n dndHidden: 'dndHidden',\n dragHandle: 'queryBuilder-dragHandle',\n disabled: 'queryBuilder-disabled',\n muted: 'queryBuilder-muted',\n lockRule: 'rule-lock',\n lockGroup: 'ruleGroup-lock',\n muteRule: 'rule-mute',\n muteGroup: 'ruleGroup-mute',\n valueSource: 'rule-valueSource',\n valueListItem: 'rule-value-list-item',\n branches: 'queryBuilder-branches',\n justified: 'queryBuilder-justified',\n responsive: 'queryBuilder-responsive',\n hasSubQuery: 'rule-hasSubQuery',\n loading: 'queryBuilder-loading',\n valueDateTimeRelative: 'rule-value-dateTimeRelative',\n} as const;\n// #endregion\n\n/**\n * Default classnames for each component.\n *\n * @group Defaults\n */\nexport const defaultControlClassnames: Classnames = {\n queryBuilder: '',\n ruleGroup: '',\n header: '',\n body: '',\n combinators: '',\n addRule: '',\n addGroup: '',\n cloneRule: '',\n cloneGroup: '',\n ungroup: '',\n removeGroup: '',\n notToggle: '',\n rule: '',\n fields: '',\n matchMode: '',\n matchThreshold: '',\n operators: '',\n value: '',\n removeRule: '',\n shiftActions: '',\n undoRedoActions: '',\n undoAction: '',\n redoAction: '',\n dragHandle: '',\n lockRule: '',\n lockGroup: '',\n muteRule: '',\n muteGroup: '',\n muted: '',\n valueSource: '',\n actionElement: '',\n valueSelector: '',\n betweenRules: '',\n valid: '',\n invalid: '',\n dndDragging: '',\n dndOver: '',\n dndGroup: '',\n dndCopy: '',\n dndDropNotAllowed: '',\n dndPreviewPosition: '',\n dndHidden: '',\n disabled: '',\n valueListItem: '',\n branches: '',\n hasSubQuery: '',\n loading: '',\n valueDateTimeRelative: '',\n} satisfies Classnames;\n\n/**\n * Default reason codes for a group being invalid.\n *\n * @group Defaults\n */\nexport const groupInvalidReasons = {\n empty: 'empty',\n invalidCombinator: 'invalid combinator',\n invalidIndependentCombinators: 'invalid independent combinators',\n} as const;\n\n/**\n * Component identifiers for testing.\n *\n * @group Defaults\n */\nexport const TestID = {\n rule: 'rule',\n ruleGroup: 'rule-group',\n inlineCombinator: 'inline-combinator',\n addGroup: 'add-group',\n removeGroup: 'remove-group',\n cloneGroup: 'clone-group',\n ungroup: 'ungroup',\n cloneRule: 'clone-rule',\n addRule: 'add-rule',\n removeRule: 'remove-rule',\n combinators: 'combinators',\n fields: 'fields',\n operators: 'operators',\n valueEditor: 'value-editor',\n notToggle: 'not-toggle',\n shiftActions: 'shift-actions',\n undoRedoActions: 'undo-redo-actions',\n undoAction: 'undo-action',\n redoAction: 'redo-action',\n dragHandle: 'drag-handle',\n lockRule: 'lock-rule',\n lockGroup: 'lock-group',\n muteRule: 'mute-rule',\n muteGroup: 'mute-group',\n valueSourceSelector: 'value-source-selector',\n matchModeEditor: 'match-mode-editor',\n} as const;\n\nexport const LogType = {\n parentPathDisabled: 'action aborted: parent path disabled',\n pathDisabled: 'action aborted: path is disabled',\n queryUpdate: 'query updated',\n onAddRuleFalse: 'onAddRule callback returned false',\n onAddGroupFalse: 'onAddGroup callback returned false',\n onGroupRuleFalse: 'onGroupRule callback returned false',\n onGroupGroupFalse: 'onGroupGroup callback returned false',\n onMoveRuleFalse: 'onMoveRule callback returned false',\n onMoveGroupFalse: 'onMoveGroup callback returned false',\n onRemoveFalse: 'onRemove callback returned false',\n onUngroupFalse: 'onUngroup callback returned false',\n add: 'rule or group added',\n remove: 'rule or group removed',\n update: 'rule or group updated',\n move: 'rule or group moved',\n group: 'rule or group grouped with another',\n ungroup: 'group replaced by its own rules',\n} as const;\n\n/**\n * The {@link Path} of the root group.\n *\n * @group Defaults\n */\nexport const rootPath: Path = [] satisfies Path;\n\n/**\n * Default values for all `boolean`\n * {@link react-querybuilder!QueryBuilder QueryBuilder} options.\n *\n * @group Defaults\n */\nexport const queryBuilderFlagDefaults: Required<QueryBuilderFlags> = {\n addRuleToNewGroups: false,\n autoSelectField: true,\n autoSelectOperator: true,\n autoSelectValue: false,\n debugMode: false,\n enableDragAndDrop: false,\n enableMountQueryChange: true,\n listsAsArrays: false,\n preserveQueryStateOnUnmount: false,\n resetOnFieldChange: true,\n resetOnOperatorChange: false,\n showCloneButtons: false,\n showCombinatorsBetweenRules: false,\n showLockButtons: false,\n showMuteButtons: false,\n showNotToggle: false,\n showShiftActions: false,\n showUndoRedo: false,\n showUngroupButtons: false,\n suppressStandardClassnames: false,\n};\n\n/**\n * Default maximum number of undo steps retained by query history.\n *\n * @group Defaults\n */\nexport const defaultMaxHistory = 50;\n\n/**\n * Default time window (in milliseconds) within which consecutive changes to the same\n * property of the same rule are coalesced into a single undo step.\n *\n * @group Defaults\n */\nexport const defaultCoalesceMs = 500;\n","import { defaultJoinChar } from '../defaults';\n\n/**\n * Splits a string by a given character (see {@link defaultJoinChar}). Escaped characters\n * (characters preceded by a backslash) will not apply to the split, and the backslash will\n * be removed in the array element. Inverse of {@link joinWith}.\n *\n * @example\n * splitBy('this\\\\,\\\\,that,,the other,,,\\\\,')\n * // or\n * splitBy('this\\\\,\\\\,that,,the other,,,\\\\,', ',')\n * // would return\n * ['this,,that', '', 'the other', '', '', ',']\n */\nexport const splitBy = (str?: string, splitChar: string = defaultJoinChar): string[] =>\n typeof str === 'string'\n ? str\n .split(`\\\\${splitChar}`)\n .map(c => c.split(splitChar))\n .reduce((prev, curr, idx) => {\n if (idx === 0) {\n return curr;\n }\n return [...prev.slice(0, -1), `${prev.at(-1)}${splitChar}${curr[0]}`, ...curr.slice(1)];\n }, [])\n : [];\n\n/**\n * Joins an array of strings using the given character (see {@link defaultJoinChar}). When\n * the given character appears in an array element, a backslash will be added just before it\n * to distinguish it from the join character. Effectively the inverse of {@link splitBy}.\n *\n * TIP: The join character can actually be a string of any length. Only the first character\n * will be searched for in the array elements and preceded by a backslash.\n *\n * @example\n * joinWith(['this,,that', '', 'the other', '', '', ','], ', ')\n * // would return\n * 'this\\\\,\\\\,that, , the other, , , \\\\,'\n */\nexport const joinWith = (strArr: unknown[], joinChar: string = defaultJoinChar): string =>\n strArr.map(str => `${str ?? ''}`.replaceAll(joinChar[0], `\\\\${joinChar[0]}`)).join(joinChar);\n\ntype IsUnknown<T> = unknown extends T ? true : false;\ntype Trimmed<T> = IsUnknown<T> extends true ? string : T;\n\n/**\n * Trims the value if it is a string. Otherwise returns the value as is.\n */\nexport const trimIfString = <T>(val: T): Trimmed<T> =>\n (typeof val === 'string' ? val.trim() : val) as Trimmed<T>;\n\ntype ToArrayResult<T> =\n IsUnknown<T> extends true\n ? string[]\n : T extends readonly (infer U)[]\n ? Trimmed<U>[]\n : T extends string\n ? string[]\n : T extends number\n ? number[]\n : never[];\n\n/**\n * Splits a string by comma then trims each element. Arrays are returned as is except\n * any string elements are trimmed.\n */\nexport const toArray = <T>(\n a: T,\n { retainEmptyStrings }: { retainEmptyStrings?: boolean } = {}\n): ToArrayResult<T> =>\n (Array.isArray(a)\n ? a.map(trimIfString)\n : typeof a === 'string'\n ? splitBy(a, defaultJoinChar)\n .filter(retainEmptyStrings ? () => true : s => !/^\\s*$/.test(s))\n .map(s => s.trim())\n : typeof a === 'number'\n ? [a]\n : []) as ToArrayResult<T>;\n\n/**\n * Determines if an array is free of `null`/`undefined`.\n */\nexport const nullFreeArray = <T>(arr: T[]): arr is Exclude<T, null>[] =>\n arr.every(el => el === false || (el ?? false) !== false);\n","import type { RequireAtLeastOne } from 'type-fest';\nimport { defaultPlaceholderLabel, defaultPlaceholderName } from '../defaults';\nimport type {\n BaseOption,\n BaseOptionMap,\n FlexibleOption,\n FlexibleOptionGroup,\n FlexibleOptionList,\n FlexibleOptionListProp,\n FullOption,\n FullOptionList,\n FullOptionMap,\n FullOptionRecord,\n GetOptionIdentifierType,\n Option,\n OptionGroup,\n Placeholder,\n ToFullOption,\n ValueOption,\n WithUnknownIndex,\n} from '../types';\nimport { isPojo } from './misc';\nimport { objectKeys } from './objectUtils';\n\nconst isOptionWithName = (opt: BaseOption): opt is Option =>\n isPojo(opt) && 'name' in opt && typeof opt.name === 'string';\nconst isOptionWithValue = (opt: BaseOption): opt is ValueOption =>\n isPojo(opt) && 'value' in opt && typeof opt.value === 'string';\n\n/**\n * Converts an {@link Option} or {@link ValueOption} (i.e., {@link BaseOption})\n * into a {@link FullOption}. Full options are left unchanged.\n *\n * @group Option Lists\n */\nexport function toFullOption<Opt extends BaseOption>(\n opt: Opt | string,\n baseProperties?: Record<string, unknown>,\n labelMap?: Record<string, unknown>\n): ToFullOption<Opt> {\n if (typeof opt === 'string') {\n return {\n ...baseProperties,\n name: opt,\n value: opt,\n label: labelMap?.[opt] ?? opt,\n } as ToFullOption<Opt>;\n }\n\n const idObj: { name?: string; value?: string } = {};\n let needsUpdating = !!baseProperties;\n\n if (isOptionWithName(opt) && !isOptionWithValue(opt)) {\n idObj.value = opt.name;\n needsUpdating = true;\n } else if (!isOptionWithName(opt) && isOptionWithValue(opt)) {\n idObj.name = opt.value;\n needsUpdating = true;\n }\n\n if (needsUpdating) {\n return Object.assign({}, baseProperties, opt, idObj) as ToFullOption<Opt>;\n }\n\n return opt as ToFullOption<Opt>;\n}\n\n/**\n * Converts an {@link OptionList} or {@link FlexibleOptionList} into a {@link FullOptionList}.\n * Lists of full options are left unchanged.\n *\n * @group Option Lists\n */\nexport function toFullOptionList<Opt extends BaseOption>(\n optList: unknown[],\n baseProperties?: Record<string, unknown>,\n labelMap?: Record<string, unknown>\n): FullOptionList<Opt> {\n if (!Array.isArray(optList)) {\n return [] as unknown as FullOptionList<Opt>;\n }\n\n const list = optList as FlexibleOptionList<Opt>;\n\n if (isFlexibleOptionGroupArray(list)) {\n return list.map(optGroup => ({\n ...optGroup,\n options: optGroup.options.map(opt => toFullOption(opt, baseProperties, labelMap)),\n })) as unknown as FullOptionList<Opt>;\n }\n\n return (list as Opt[]).map(opt =>\n toFullOption(opt, baseProperties, labelMap)\n ) as FullOptionList<Opt>;\n}\n\n/**\n * Converts a {@link FlexibleOptionList} into a {@link FullOptionList}.\n * Lists of full options are left unchanged.\n *\n * @group Option Lists\n */\nexport function toFullOptionMap<OptMap extends BaseOptionMap>(\n optMap: OptMap,\n baseProperties?: Record<string, unknown>\n): OptMap extends BaseOptionMap<infer V, infer K> ? Partial<Record<K, ToFullOption<V>>> : never {\n type FullOptMapType =\n OptMap extends BaseOptionMap<infer VT, infer KT>\n ? Partial<Record<KT, ToFullOption<VT>>>\n : never;\n\n return Object.fromEntries(\n (Object.entries(optMap) as [string, FlexibleOption][]).map(([k, v]) => [\n k,\n toFullOption(v, baseProperties),\n ])\n ) as FullOptMapType;\n}\n\n/**\n * @deprecated Renamed to {@link uniqByIdentifier}.\n *\n * @group Option Lists\n */\nexport const uniqByName = <\n T extends { name: string; value?: string } | { name?: string; value: string },\n>(\n originalArray: T[]\n): T[] => uniqByIdentifier(originalArray);\n\n/**\n * Generates a new array of objects with duplicates removed based\n * on the identifying property (`value` or `name`)\n *\n * @group Option Lists\n */\nexport const uniqByIdentifier = <\n T extends RequireAtLeastOne<{ name: string; value: string }, 'name' | 'value'>,\n>(\n originalArray: T[]\n): T[] => {\n const names = new Set<string>();\n const newArray: T[] = [];\n for (const el of originalArray) {\n if (!names.has((el.value ?? el.name)!)) {\n names.add((el.value ?? el.name)!);\n newArray.push(el);\n }\n }\n return originalArray.length === newArray.length ? originalArray : newArray;\n};\n\n/**\n * Determines if an {@link OptionList} is an {@link OptionGroup} array.\n *\n * @group Option Lists\n */\nexport const isOptionGroupArray = (arr: unknown): arr is OptionGroup<BaseOption>[] =>\n Array.isArray(arr) &&\n arr.length > 0 &&\n isPojo(arr[0]) &&\n 'options' in arr[0] &&\n Array.isArray(arr[0].options);\n\n/**\n * Determines if an array is a flat array of {@link FlexibleOption}.\n *\n * @group Option Lists\n */\nexport const isFlexibleOptionArray = (arr: unknown): arr is FlexibleOption[] => {\n let isFOA = false;\n if (Array.isArray(arr)) {\n for (const o of arr) {\n if (isOptionWithName(o) || isOptionWithValue(o)) {\n isFOA = true;\n } else {\n return false;\n }\n }\n }\n return isFOA;\n};\n\n/**\n * Determines if an array is a flat array of {@link FullOption}.\n *\n * @group Option Lists\n */\nexport const isFullOptionArray = (arr: unknown): arr is FullOption[] => {\n let isFOA = false;\n if (Array.isArray(arr)) {\n for (const o of arr) {\n if (isOptionWithName(o) && isOptionWithValue(o)) {\n isFOA = true;\n } else {\n return false;\n }\n }\n }\n return isFOA;\n};\n\n/**\n * Determines if a {@link FlexibleOptionList} is a {@link FlexibleOptionGroup} array.\n *\n * @group Option Lists\n */\nexport const isFlexibleOptionGroupArray = (\n arr: unknown,\n { allowEmpty = false }: { allowEmpty?: boolean } = {}\n): arr is FlexibleOptionGroup[] => {\n let isFOGA = false;\n if (Array.isArray(arr)) {\n for (const og of arr) {\n if (\n isPojo(og) &&\n 'options' in og &&\n (isFlexibleOptionArray(og.options) ||\n (allowEmpty && Array.isArray(og.options) && og.options.length === 0))\n ) {\n isFOGA = true;\n } else {\n return false;\n }\n }\n }\n return isFOGA;\n};\n\n/**\n * Determines if a {@link FlexibleOptionList} is a {@link OptionGroup} array of {@link FullOption}.\n *\n * @group Option Lists\n */\nexport const isFullOptionGroupArray = (\n arr: unknown,\n { allowEmpty = false }: { allowEmpty?: boolean } = {}\n): arr is OptionGroup<FullOption>[] => {\n let isFOGA = false;\n if (Array.isArray(arr)) {\n for (const og of arr) {\n if (\n isPojo(og) &&\n 'options' in og &&\n (isFullOptionArray(og.options) ||\n (allowEmpty && Array.isArray(og.options) && og.options.length === 0))\n ) {\n isFOGA = true;\n } else {\n return false;\n }\n }\n }\n return isFOGA;\n};\n\n/**\n * Gets the option from an {@link OptionList} with the given `name`. Handles\n * {@link Option} arrays as well as {@link OptionGroup} arrays.\n *\n * @group Option Lists\n */\nexport function getOption<OptType extends FullOption>(\n arr: FullOptionList<OptType>,\n name: string\n): OptType | undefined;\nexport function getOption<OptType extends ValueOption>(\n arr: FlexibleOptionList<OptType>,\n name: string\n): OptType | undefined;\nexport function getOption<OptType extends Option>(\n arr: FlexibleOptionList<OptType>,\n name: string\n): OptType | undefined;\nexport function getOption<OptType extends BaseOption>(\n arr: FlexibleOptionList<OptType>,\n name: string\n): OptType | undefined {\n const options = isFlexibleOptionGroupArray(arr, { allowEmpty: true })\n ? arr.flatMap(og => og.options)\n : arr;\n return options.find(op => op.value === name || op.name === name) as OptType | undefined;\n}\n\n/**\n * Gets the first option from an {@link OptionList}.\n *\n * @group Option Lists\n */\nexport function getFirstOption<Opt extends FullOption>(\n arr?: OptionGroup<Opt>[] | Opt[]\n): GetOptionIdentifierType<Opt> | null;\nexport function getFirstOption<Opt extends ValueOption>(\n arr?: OptionGroup<Opt>[] | Opt[]\n): GetOptionIdentifierType<Opt> | null;\nexport function getFirstOption<Opt extends Option>(\n arr?: OptionGroup<Opt>[] | Opt[]\n): GetOptionIdentifierType<Opt> | null;\nexport function getFirstOption<Opt extends BaseOption>(\n arr?: FlexibleOptionGroup<Opt>[] | Opt[]\n): GetOptionIdentifierType<Opt> | null {\n if (!Array.isArray(arr) || arr.length === 0) {\n return null;\n } else if (isFlexibleOptionGroupArray(arr, { allowEmpty: true })) {\n for (const og of arr) {\n if (og.options.length > 0) {\n return (og.options[0].value ?? og.options[0].name) as GetOptionIdentifierType<Opt>;\n }\n }\n // v8 ignore next\n return null;\n }\n\n return (arr[0].value ?? arr[0].name) as GetOptionIdentifierType<Opt>;\n}\n\n/**\n * Flattens {@link FlexibleOptionGroup} arrays into {@link BaseOption} arrays.\n * If the array is already flat, it is returned as is.\n *\n * @group Option Lists\n */\nexport const toFlatOptionArray = <T extends FullOption>(arr: FullOptionList<T>) =>\n uniqByIdentifier(isOptionGroupArray(arr) ? arr.flatMap(og => og.options) : arr) as T[];\n\n/**\n * Generates a new {@link OptionGroup} array with duplicates\n * removed based on the identifying property (`value` or `name`).\n *\n * @group Option Lists\n */\nexport const uniqOptGroups = <T extends BaseOption>(\n originalArray: FlexibleOptionGroup<T>[]\n): OptionGroup<ToFullOption<T>>[] => {\n type K = T extends BaseOption<infer KT> ? KT : never;\n const labels = new Set<string>();\n const names = new Set<K>();\n const newArray: OptionGroup<ToFullOption<T>>[] = [];\n for (const el of originalArray) {\n if (!labels.has(el.label)) {\n labels.add(el.label);\n const optionsForThisGroup: WithUnknownIndex<ToFullOption<T>>[] = [];\n for (const opt of el.options) {\n if (!names.has((opt.value ?? opt.name) as K)) {\n names.add((opt.value ?? opt.name) as K);\n optionsForThisGroup.push(toFullOption(opt) as WithUnknownIndex<ToFullOption<T>>);\n }\n }\n newArray.push({ ...el, options: optionsForThisGroup });\n }\n }\n return newArray;\n};\n\n/**\n * Generates a new {@link Option} or {@link OptionGroup} array with duplicates\n * removed based on the identifier property (`value` or `name`).\n *\n * @group Option Lists\n */\nexport const uniqOptList = <T extends BaseOption>(\n originalArray: FlexibleOptionList<T>\n): WithUnknownIndex<BaseOption & FullOption>[] | OptionGroup<ToFullOption<T>>[] => {\n if (isFlexibleOptionGroupArray(originalArray)) {\n return uniqOptGroups(originalArray) as OptionGroup<ToFullOption<T>>[];\n }\n return uniqByIdentifier((originalArray as BaseOption[]).map(o => toFullOption(o)));\n};\n\n/** Result of {@link prepareOptionList}. */\nexport interface PreparedOptionList<O extends FullOption> {\n defaultOption: FullOption;\n optionList: FullOptionList<O>;\n optionsMap: Partial<FullOptionRecord<O>>;\n}\n\n/** Parameters for {@link prepareOptionList}. */\nexport interface PrepareOptionListParams<O extends FullOption> {\n placeholder?: Placeholder;\n optionList?: FlexibleOptionListProp<O> | BaseOptionMap<O>;\n baseOption?: Record<string, unknown>;\n labelMap?: Record<string, string>;\n autoSelectOption?: boolean;\n}\n\n/**\n * Normalizes any accepted option list shape—array, option groups, or a record—into a\n * `FullOptionList`, applying `baseOption` properties and (when `autoSelectOption` is `false`)\n * a leading placeholder option. Also returns the flattened lookup map and the option that\n * should be selected by default.\n *\n * Note: `labelMap` overrides only apply to array/option group input (where string options are\n * expanded); record input derives labels from the record values themselves.\n *\n * This is the same normalization `<QueryBuilder />` applies to `fields`, `operators`,\n * `combinators`, and value lists, so a non-React implementation resolves options identically.\n *\n * @group Option Lists\n */\nexport const prepareOptionList = <O extends FullOption>(\n props: PrepareOptionListParams<O>\n): PreparedOptionList<O> => {\n type OptionIdentifier = GetOptionIdentifierType<O>;\n\n // v8 ignore next\n const {\n optionList: optionListPropOriginal,\n baseOption = {},\n labelMap = {},\n placeholder: {\n placeholderName = defaultPlaceholderName,\n placeholderLabel = defaultPlaceholderLabel,\n placeholderGroupLabel = defaultPlaceholderLabel,\n } = {},\n autoSelectOption = true,\n } = props;\n\n const defaultOption = {\n id: placeholderName,\n name: placeholderName,\n value: placeholderName,\n label: placeholderLabel,\n } as FullOption;\n\n const optionsProp = optionListPropOriginal ?? ([defaultOption] as FlexibleOptionList<O>);\n\n let optionList: FullOptionList<O>;\n const opts = (\n Array.isArray(optionsProp)\n ? toFullOptionList(optionsProp, baseOption, labelMap)\n : (objectKeys(toFullOptionMap(optionsProp, baseOption)) as unknown as OptionIdentifier[])\n // oxlint-disable-next-line no-map-spread\n .map<FullOption<OptionIdentifier>>(opt => ({\n ...optionsProp[opt]!,\n name: opt,\n value: opt,\n }))\n // oxlint-disable-next-line no-array-sort\n .sort((a, b) => a.label.localeCompare(b.label))\n ) as FullOptionList<O>;\n if (isFlexibleOptionGroupArray(opts)) {\n optionList = autoSelectOption\n ? (uniqOptGroups(opts) as FullOptionList<O>)\n : (uniqOptGroups([\n {\n label: placeholderGroupLabel,\n options: [defaultOption],\n },\n ...opts,\n ]) as FullOptionList<O>);\n } else {\n optionList = autoSelectOption\n ? (uniqByIdentifier(opts as O[]) as FullOptionList<O>)\n : (uniqByIdentifier([defaultOption, ...(opts as O[])]) as FullOptionList<O>);\n }\n\n let optionsMap: Partial<FullOptionRecord<O>> = {};\n if (!Array.isArray(optionsProp)) {\n const op = toFullOptionMap(optionsProp, baseOption) as FullOptionMap<O, OptionIdentifier>;\n optionsMap = autoSelectOption ? op : { ...op, [placeholderName]: defaultOption };\n } else {\n if (isFlexibleOptionGroupArray(optionList)) {\n for (const og of optionList as OptionGroup<ToFullOption<O>>[]) {\n for (const opt of og.options) {\n optionsMap[\n (opt.value ??\n /* v8 ignore start -- @preserve */ opt.name) /* v8 ignore stop -- @preserve */ as OptionIdentifier\n ] = toFullOption(opt, baseOption);\n }\n }\n } else {\n for (const opt of optionList as ToFullOption<O>[]) {\n optionsMap[\n (opt.value ??\n /* v8 ignore start -- @preserve */ opt.name) /* v8 ignore stop -- @preserve */ as OptionIdentifier\n ] = toFullOption(opt, baseOption);\n }\n }\n }\n\n return { defaultOption, optionList, optionsMap };\n};\n","import { numericQuantity } from 'numeric-quantity';\nimport type { ParseNumberMethod } from '../types';\n\n/**\n * Options object for {@link parseNumber}.\n */\nexport interface ParseNumberOptions {\n parseNumbers?: ParseNumberMethod;\n /**\n * Generates a `bigint` value if the string represents a valid integer\n * outside the safe boundaries of the `number` type.\n */\n bigIntOnOverflow?: boolean;\n}\n\n/**\n * Converts a string to a number. Uses native `parseFloat` if `parseNumbers` is \"native\",\n * otherwise uses [`numeric-quantity`](https://jakeboone02.github.io/numeric-quantity/).\n * If that returns `NaN`, the string is returned unchanged. Numeric values are returned\n * as-is regardless of the `parseNumbers` option.\n */\nexport const parseNumber = (\n val: unknown,\n { parseNumbers, bigIntOnOverflow }: ParseNumberOptions = {}\n // oxlint-disable-next-line typescript/no-explicit-any\n): any => {\n if (!parseNumbers || typeof val === 'bigint' || typeof val === 'number') {\n return val;\n }\n\n if (parseNumbers === 'native') {\n return Number.parseFloat(val as string);\n }\n\n const valAsNum: number | bigint =\n // TODO?: Make these options configurable\n numericQuantity(val, {\n allowTrailingInvalid: parseNumbers === 'enhanced',\n bigIntOnOverflow,\n romanNumerals: false,\n round: false,\n });\n\n return typeof valAsNum === 'bigint' || !Number.isNaN(valAsNum) ? valAsNum : val;\n};\n","import type { InputType, ParseNumberMethod, ParseNumbersPropConfig } from '../types';\n\nexport const getParseNumberMethod = ({\n parseNumbers,\n inputType,\n}: {\n parseNumbers?: ParseNumbersPropConfig;\n inputType?: InputType | null;\n}): ParseNumberMethod => {\n if (typeof parseNumbers === 'string') {\n const [method, level] = parseNumbers.split('-') as\n | [ParseNumberMethod, 'limited']\n | [ParseNumberMethod];\n if (level === 'limited') {\n return inputType === 'number' ? method : false;\n }\n\n return method;\n }\n\n return parseNumbers ? 'strict' : false;\n};\n","import type { SetRequired } from 'type-fest';\nimport type {\n ConstituentWordOrder,\n DefaultCombinatorName,\n FormatQueryOptions,\n FullField,\n GroupVariantCondition,\n MatchMode,\n NLTranslationKey,\n NLTranslations,\n OptionList,\n RuleGroupTypeAny,\n RuleType,\n ValueProcessorByRule,\n ValueProcessorLegacy,\n ValueProcessorOptions,\n} from '../../types';\nimport { joinWith, splitBy, toArray } from '../arrayUtils';\nimport { getParseNumberMethod } from '../getParseNumberMethod';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isPojo, lc, numericRegex } from '../misc';\nimport { getOption } from '../optGroupUtils';\nimport { parseNumber } from '../parseNumber';\n\n/**\n * Maps a {@link DefaultOperatorName} to a SQL operator.\n *\n * @group Export\n */\nexport const mapSQLOperator = (rqbOperator: string): string => {\n switch (lc(rqbOperator)) {\n case 'null':\n return 'is null';\n case 'notnull':\n return 'is not null';\n case 'notin':\n return 'not in';\n case 'notbetween':\n return 'not between';\n case 'contains':\n case 'beginswith':\n case 'endswith':\n return 'like';\n case 'doesnotcontain':\n case 'doesnotbeginwith':\n case 'doesnotendwith':\n return 'not like';\n default:\n return rqbOperator;\n }\n};\n\n/**\n * Returns a preset-aware SQL string-concatenation function. Emits `CONCAT(a, b, ...)` when\n * `concatOperator` is `\"CONCAT\"` (case-insensitive), otherwise joins with the infix operator\n * (e.g. `a || b`, `a + b`).\n *\n * @group Export\n */\nexport const getSQLConcat =\n (concatOperator = '||') =>\n (...values: string[]): string =>\n concatOperator.toUpperCase() === 'CONCAT'\n ? `CONCAT(${values.join(', ')})`\n : values.join(` ${concatOperator} `);\n\n/**\n * Returns the `[prefix, suffix]` `LIKE` wildcards for a string-match operator (e.g. `contains`\n * → `['%', '%']`, `beginsWith` → `['', '%']`, `endsWith` → `['%', '']`). Unknown operators\n * yield `['', '']`.\n *\n * @group Export\n */\nexport const getLikeWildcards = (operatorLC: string): [string, string] => {\n switch (operatorLC) {\n case 'contains':\n case 'doesnotcontain':\n return ['%', '%'];\n case 'beginswith':\n case 'doesnotbeginwith':\n return ['', '%'];\n case 'endswith':\n case 'doesnotendwith':\n return ['%', ''];\n default:\n return ['', ''];\n }\n};\n\n/**\n * Wraps an already-serialized SQL fragment (a quoted field name or an expression) with the\n * `LIKE` wildcards for the given (lowercase) string-match operator, concatenating the literal\n * `%` markers via the preset-aware {@link getSQLConcat}. Returns the fragment untouched for\n * operators without wildcards.\n *\n * @group Export\n */\nexport const wrapLikeFragment = (\n fragment: string,\n operatorLC: string,\n {\n concatOperator = '||',\n quoteValuesWith,\n wrapValueWith = ['', ''],\n }: {\n concatOperator?: string;\n quoteValuesWith?: string;\n wrapValueWith?: [string, string];\n } = {}\n): string => {\n const [pre, post] = getLikeWildcards(operatorLC);\n const quoteChar = quoteValuesWith || `'`;\n const quote = (p: string) => `${wrapValueWith[0]}${quoteChar}${p}${quoteChar}${wrapValueWith[1]}`;\n const parts = [pre && quote(pre), fragment, post && quote(post)].filter(Boolean);\n return parts.length > 1 ? getSQLConcat(concatOperator)(...parts) : fragment;\n};\n\n/**\n * Maps a (lowercase) {@link DefaultOperatorName} to a MongoDB operator.\n *\n * @group Export\n */\nexport const mongoOperators = {\n '=': '$eq',\n '!=': '$ne',\n '<': '$lt',\n '<=': '$lte',\n '>': '$gt',\n '>=': '$gte',\n in: '$in',\n notin: '$nin',\n notIn: '$nin', // only here for backwards compatibility\n};\n\n/**\n * Maps a (lowercase) {@link DefaultOperatorName} to a Prisma ORM operator.\n *\n * @group Export\n */\nexport const prismaOperators = {\n '=': 'equals',\n '!=': 'not',\n '<': 'lt',\n '<=': 'lte',\n '>': 'gt',\n '>=': 'gte',\n in: 'in',\n notin: 'notIn',\n};\n\n/**\n * Maps a {@link DefaultCombinatorName} to a CEL combinator.\n *\n * @group Export\n */\nexport const celCombinatorMap: {\n and: '&&';\n or: '||';\n} = {\n and: '&&',\n or: '||',\n} satisfies Record<DefaultCombinatorName, '&&' | '||'>;\n\n/**\n * Register these operators with `jsonLogic` before applying the result\n * of `formatQuery(query, 'jsonlogic')`.\n *\n * @example\n * ```\n * for (const [op, func] of Object.entries(jsonLogicAdditionalOperators)) {\n * jsonLogic.add_operation(op, func);\n * }\n * jsonLogic.apply({ \"startsWith\": [{ \"var\": \"firstName\" }, \"Stev\"] }, data);\n * ```\n *\n * @group Export\n */\nexport const jsonLogicAdditionalOperators: Record<\n 'startsWith' | 'endsWith',\n (a: string, b: string) => boolean\n> = {\n startsWith: (a: string, b: string) => typeof a === 'string' && a.startsWith(b),\n endsWith: (a: string, b: string) => typeof a === 'string' && a.endsWith(b),\n};\n\n/**\n * Returns a new query object with all `string`-type `value` properties converted\n * to `number` where appropriate.\n *\n * Used by {@link formatQuery} for the `json*` formats when `parseNumbers` is `true`.\n *\n * @group Export\n */\nexport const numerifyValues = (\n rg: RuleGroupTypeAny,\n options: SetRequired<FormatQueryOptions, 'fields'>\n): RuleGroupTypeAny => ({\n ...rg,\n // @ts-expect-error TS doesn't keep track of odd/even indexes here\n rules: rg.rules.map(r => {\n if (typeof r === 'string') {\n return r;\n }\n\n if (isRuleGroup(r)) {\n return numerifyValues(r, options);\n }\n\n const fieldData = getOption(options.fields as OptionList<FullField>, r.field);\n const parseNumbers = getParseNumberMethod({\n parseNumbers: options.parseNumbers,\n inputType: fieldData?.inputType,\n });\n\n if (Array.isArray(r.value)) {\n return { ...r, value: r.value.map(v => parseNumber(v, { parseNumbers })) };\n }\n\n const valAsArray = toArray(r.value, { retainEmptyStrings: true }).map(v =>\n parseNumber(v, { parseNumbers })\n );\n if (valAsArray.every(v => typeof v === 'number')) {\n // v8 ignore else\n if (valAsArray.length > 1) {\n return { ...r, value: valAsArray };\n } else if (valAsArray.length === 1) {\n return { ...r, value: valAsArray[0] };\n }\n }\n\n return r;\n }),\n});\n\n/**\n * Determines whether a value is _anything_ except an empty `string` or `NaN`.\n *\n * @group Export\n */\nexport const isValidValue = (value: unknown): boolean =>\n (typeof value === 'string' && value.length > 0) ||\n (typeof value === 'number' && !Number.isNaN(value)) ||\n (typeof value !== 'string' && typeof value !== 'number');\n\n/**\n * Determines whether {@link formatQuery} should render the given value as a number.\n * As long as `parseNumbers` is `true`, `number` and `bigint` values will return `true` and\n * `string` values will return `true` if they test positive against {@link numericRegex}.\n *\n * @group Export\n */\nexport const shouldRenderAsNumber = (value: unknown, parseNumbers?: boolean): boolean =>\n !!parseNumbers &&\n (typeof value === 'number' ||\n typeof value === 'bigint' ||\n (typeof value === 'string' && numericRegex.test(value)));\n\n/**\n * Used by {@link formatQuery} to determine whether the given value processor is a\n * \"legacy\" value processor by counting the number of arguments. Legacy value\n * processors take 3 arguments (not counting any arguments with default values), while\n * rule-based value processors take no more than 2 arguments.\n *\n * @group Export\n */\nexport const isValueProcessorLegacy = (\n valueProcessor: ValueProcessorLegacy | ValueProcessorByRule\n): valueProcessor is ValueProcessorLegacy => valueProcessor.length >= 3;\n\n/**\n * Converts the `quoteFieldNamesWith` option into an array of two strings.\n * If the option is a string, the array elements are both that string.\n *\n * @default\n * ['', '']\n *\n * @group Export\n */\nexport const getQuoteFieldNamesWithArray = (\n // v8 ignore next\n quoteFieldNamesWith: null | string | [string, string] = ['', '']\n): [string, string] =>\n Array.isArray(quoteFieldNamesWith)\n ? quoteFieldNamesWith\n : typeof quoteFieldNamesWith === 'string'\n ? [quoteFieldNamesWith, quoteFieldNamesWith]\n : (quoteFieldNamesWith ?? ['', '']);\n\n/**\n * Given a field name and relevant {@link ValueProcessorOptions}, returns the field name\n * wrapped in the configured quote character(s).\n *\n * @group Export\n */\nexport const getQuotedFieldName = (\n fieldName: string,\n { quoteFieldNamesWith, fieldIdentifierSeparator }: ValueProcessorOptions\n): string => {\n const [qPre, qPost] = getQuoteFieldNamesWithArray(quoteFieldNamesWith);\n return typeof fieldIdentifierSeparator === 'string' && fieldIdentifierSeparator.length > 0\n ? joinWith(\n splitBy(fieldName, fieldIdentifierSeparator).map(part => `${qPre}${part}${qPost}`),\n fieldIdentifierSeparator\n )\n : `${qPre}${fieldName}${qPost}`;\n};\n\nconst defaultWordOrder = ['S', 'V', 'O'];\n\n/**\n * Given a [Constituent word order](https://en.wikipedia.org/wiki/Word_order#Constituent_word_orders)\n * like \"svo\" or \"sov\", returns a permutation of `[\"S\", \"V\", \"O\"]` based on the first occurrence of\n * each letter in the input string (case insensitive). This widens the valid input from abbreviations\n * like \"svo\" to more expressive strings like \"subject-verb-object\" or \"sub ver obj\". Any missing\n * letters are appended in the default order \"SVO\" (e.g., \"object\" would yield `[\"O\", \"S\", \"V\"]`).\n *\n * @group Export\n */\nexport const normalizeConstituentWordOrder = (input: string): ConstituentWordOrder => {\n const result: string[] = [];\n const letterSet = new Set(defaultWordOrder);\n\n for (const char of input.toUpperCase()) {\n if (letterSet.has(char)) {\n result.push(char);\n letterSet.delete(char);\n if (letterSet.size === 0) break;\n }\n }\n\n // Add any missing letters in default order\n for (const letter of defaultWordOrder) {\n if (letterSet.has(letter)) {\n result.push(letter);\n }\n }\n\n return result as ConstituentWordOrder;\n};\n\n/**\n * Prefixes a named-parameter value with the given `paramPrefix` unless the value already\n * begins with it. Used by {@link formatQuery} to render rules whose `valueSource` is\n * `\"parameter\"` (e.g. `\"p1\"` with prefix `\":\"` → `\":p1\"`; `\":p1\"` → `\":p1\"`).\n *\n * @group Export\n */\nexport const withParamPrefix = (value: unknown, paramPrefix = ':'): string => {\n const v = `${value ?? ''}`;\n return paramPrefix && v.startsWith(paramPrefix) ? v : `${paramPrefix}${v}`;\n};\n\n/**\n * Strips a leading `paramPrefix` from a named-parameter value if present. Inverse of\n * {@link withParamPrefix}; used to normalize parameter names for validation/lookup.\n *\n * @group Export\n */\nexport const stripParamPrefix = (value: unknown, paramPrefix = ':'): string => {\n const v = `${value ?? ''}`;\n return paramPrefix && v.startsWith(paramPrefix) ? v.slice(paramPrefix.length) : v;\n};\n\n/**\n * Default translations used by {@link formatQuery} for \"natural_language\" format.\n *\n * @group Export\n */\n// The ones commented below are unnecessary for the default implementation,\n// but they can be overridden for customized implementations.\nexport const defaultNLTranslations: NLTranslations = {\n // and: 'and',\n // or: 'or',\n // true: 'true',\n // false: 'false',\n groupPrefix: '',\n // groupPrefix_not: '',\n groupPrefix_not_xor: 'either zero or more than one of',\n groupPrefix_xor: 'exactly one of',\n groupSuffix: 'is true',\n groupSuffix_not: 'is not true',\n // groupSuffix_not_xor: 'is true',\n // groupSuffix_xor: 'is true',\n};\n\n/**\n * Note: This function assumes `conditions.length > 0`\n */\nconst translationMatchFilter = (\n key: NLTranslationKey,\n keyToTest: string,\n conditions: GroupVariantCondition[]\n) =>\n // The translation matches the base key\n keyToTest.startsWith(key) &&\n // The translation specifies all conditions\n conditions.every(\n c =>\n // This translation specifies _this_ condition\n keyToTest.includes(`_${c}`) &&\n // This translation specifies the same _total number_ of conditions\n keyToTest.match(/_/g)?.length === conditions.length\n );\n\n/**\n * Used by {@link formatQuery} to get a translation based on certain conditions\n * for the \"natural_language\" format.\n *\n * @group Export\n */\nexport const getNLTranslataion = (\n key: NLTranslationKey,\n translations: NLTranslations,\n conditions: GroupVariantCondition[] = []\n): string =>\n conditions.length === 0\n ? (translations[key] ??\n defaultNLTranslations[key] ??\n /* v8 ignore start -- @preserve */ '') /* v8 ignore stop -- @preserve */\n : (Object.entries(translations).find(([keyToTest]) =>\n translationMatchFilter(key, keyToTest, conditions)\n )?.[1] ??\n Object.entries(defaultNLTranslations).find(([keyToTest]) =>\n translationMatchFilter(key, keyToTest, conditions)\n )?.[1] ??\n defaultNLTranslations[key] ??\n /* v8 ignore next -- @preserve */ '');\n\ntype ProcessedMatchMode =\n | { mode: 'all'; threshold?: number | null | undefined }\n | { mode: 'none'; threshold?: number | null | undefined }\n | { mode: 'some'; threshold?: number | null | undefined }\n | { mode: 'atleast'; threshold: number }\n | { mode: 'atmost'; threshold: number }\n | { mode: 'exactly'; threshold: number };\n\n/**\n * Transforms\n * - `match: { mode: \"atLeast\", threshold: 1 }` to `match: { mode: \"some\" }`\n * - `match: { mode: \"atMost\", threshold: 0 }` to `match: { mode: \"none\" }`.\n *\n * Returns:\n * - Processed `{ mode, threshold }` object for valid subqueries\n * - `null` if match mode is not applicable for the rule\n * - `false` if match mode is valid, but either\n * 1. `threshold` is required and invalid, or\n * 2. `value` is not a valid rule group.\n */\nexport const processMatchMode = (rule: RuleType): null | false | ProcessedMatchMode => {\n const { mode, threshold } = rule.match ?? {};\n\n if (!mode) return null;\n\n if (!isRuleGroup(rule.value)) return false;\n\n const matchModeLC = lc(mode) as Lowercase<MatchMode>;\n\n const matchModeCoerced =\n matchModeLC === 'atleast' && threshold === 1\n ? 'some'\n : matchModeLC === 'atmost' && threshold === 0\n ? 'none'\n : matchModeLC;\n\n if (\n (matchModeCoerced === 'atleast' ||\n matchModeCoerced === 'atmost' ||\n matchModeCoerced === 'exactly') &&\n (typeof threshold !== 'number' || threshold < 0)\n ) {\n return false;\n }\n\n return { mode: matchModeCoerced, threshold: threshold! };\n};\n\n/**\n * Base alias assigned to the element binding of a subquery generated for a rule's\n * {@link MatchMode `match` mode} (e.g. `unnest(field) as elem_alias`).\n */\nexport const subqueryElementAliasBase = 'elem_alias';\n\n/**\n * Returns the element alias for a subquery at the given nesting depth. Depth 0 (the common,\n * non-nested case) uses {@link subqueryElementAliasBase} unchanged; deeper levels are suffixed\n * with the depth, so a subquery nested within a subquery cannot shadow its parent's binding.\n *\n * Deterministic by depth rather than randomized, so output remains stable and snapshot-friendly.\n *\n * @group Export\n */\nexport const getSubqueryElementAlias = (subqueryDepth = 0): string =>\n subqueryDepth > 0 ? `${subqueryElementAliasBase}_${subqueryDepth}` : subqueryElementAliasBase;\n\n/**\n * \"Replacer\" method for JSON.stringify's second argument. Converts `bigint` values to\n * objects with a `$bigint` property having a value of a string representation of\n * the actual `bigint`-type value.\n *\n * Inverse of {@link bigIntJsonParseReviver}.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#use_within_json\n */\nexport const bigIntJsonStringifyReplacer = (_key: string, value: unknown): unknown =>\n typeof value === 'bigint' ? { $bigint: value.toString() } : value;\n\n/**\n * \"Reviver\" method for JSON.parse's second argument. Converts objects having a single\n * `$bigint: string` property to an actual `bigint` value.\n *\n * Inverse of {@link bigIntJsonStringifyReplacer}.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#use_within_json\n */\nexport const bigIntJsonParseReviver = (_key: string, value: unknown): unknown =>\n isPojo(value) && Object.keys(value).length === 1 && typeof value.$bigint === 'string'\n ? BigInt(value.$bigint)\n : value;\n"],"mappings":"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"}
@@ -122,6 +122,10 @@ const defaultTranslations = {
122
122
  label: "⧉",
123
123
  title: "Clone group"
124
124
  },
125
+ ungroupRuleGroup: {
126
+ label: "⊟",
127
+ title: "Ungroup"
128
+ },
125
129
  shiftActionUp: {
126
130
  label: "˄",
127
131
  title: "Shift up"
@@ -449,6 +453,7 @@ const standardClassnames = {
449
453
  addGroup: "ruleGroup-addGroup",
450
454
  cloneRule: "rule-cloneRule",
451
455
  cloneGroup: "ruleGroup-cloneGroup",
456
+ ungroup: "ruleGroup-ungroup",
452
457
  removeGroup: "ruleGroup-remove",
453
458
  notToggle: "ruleGroup-notToggle",
454
459
  rule: "rule",
@@ -503,6 +508,7 @@ const defaultControlClassnames = {
503
508
  addGroup: "",
504
509
  cloneRule: "",
505
510
  cloneGroup: "",
511
+ ungroup: "",
506
512
  removeGroup: "",
507
513
  notToggle: "",
508
514
  rule: "",
@@ -564,6 +570,7 @@ const TestID = {
564
570
  addGroup: "add-group",
565
571
  removeGroup: "remove-group",
566
572
  cloneGroup: "clone-group",
573
+ ungroup: "ungroup",
567
574
  cloneRule: "clone-rule",
568
575
  addRule: "add-rule",
569
576
  removeRule: "remove-rule",
@@ -595,11 +602,13 @@ const LogType = {
595
602
  onMoveRuleFalse: "onMoveRule callback returned false",
596
603
  onMoveGroupFalse: "onMoveGroup callback returned false",
597
604
  onRemoveFalse: "onRemove callback returned false",
605
+ onUngroupFalse: "onUngroup callback returned false",
598
606
  add: "rule or group added",
599
607
  remove: "rule or group removed",
600
608
  update: "rule or group updated",
601
609
  move: "rule or group moved",
602
- group: "rule or group grouped with another"
610
+ group: "rule or group grouped with another",
611
+ ungroup: "group replaced by its own rules"
603
612
  };
604
613
  /**
605
614
  * The {@link Path} of the root group.
@@ -632,6 +641,7 @@ const queryBuilderFlagDefaults = {
632
641
  showNotToggle: false,
633
642
  showShiftActions: false,
634
643
  showUndoRedo: false,
644
+ showUngroupButtons: false,
635
645
  suppressStandardClassnames: false
636
646
  };
637
647
  /**
@@ -1291,4 +1301,4 @@ const bigIntJsonParseReviver = (_key, value) => isPojo(value) && Object.keys(val
1291
1301
  //#endregion
1292
1302
  export { defaultCombinators as $, isFlexibleOptionGroupArray as A, uniqByName as B, withParamPrefix as C, queryBuilderFlagDefaults as Ct, getFirstOption as D, substringOperators as Dt, parseNumber as E, standardClassnames as Et, toFlatOptionArray as F, splitBy as G, uniqOptList as H, toFullOption as I, LogType as J, toArray as K, toFullOptionList as L, isFullOptionGroupArray as M, isOptionGroupArray as N, getOption as O, prepareOptionList as P, defaultCombinatorLabelMap as Q, toFullOptionMap as R, subqueryElementAliasBase as S, nullOperators as St, getParseNumberMethod as T, rootPath as Tt, joinWith as U, uniqOptGroups as V, nullFreeArray as W, betweenOperators as X, TestID as Y, defaultCoalesceMs as Z, numerifyValues as _, defaultPlaceholderValueLabel as _t, getLikeWildcards as a, defaultOperatorLabelMap as at, shouldRenderAsNumber as b, groupInvalidReasons as bt, getQuotedFieldName as c, defaultPlaceholderFieldGroupLabel as ct, isValidValue as d, defaultPlaceholderLabel as dt, defaultCombinatorsExtended as et, isValueProcessorLegacy as f, defaultPlaceholderName as ft, normalizeConstituentWordOrder as g, defaultPlaceholderValueGroupLabel as gt, mongoOperators as h, defaultPlaceholderOperatorName as ht, defaultNLTranslations as i, defaultMaxHistory as it, isFullOptionArray as j, isFlexibleOptionArray as k, getSQLConcat as l, defaultPlaceholderFieldLabel as lt, mapSQLOperator as m, defaultPlaceholderOperatorLabel as mt, bigIntJsonStringifyReplacer as n, defaultJoinChar as nt, getNLTranslataion as o, defaultOperatorNegationMap as ot, jsonLogicAdditionalOperators as p, defaultPlaceholderOperatorGroupLabel as pt, trimIfString as q, celCombinatorMap as r, defaultMatchModes as rt, getQuoteFieldNamesWithArray as s, defaultOperators as st, bigIntJsonParseReviver as t, defaultControlClassnames as tt, getSubqueryElementAlias as u, defaultPlaceholderFieldName as ut, prismaOperators as v, defaultPlaceholderValueName as vt, wrapLikeFragment as w, relationalOperators as wt, stripParamPrefix as x, inOperators as xt, processMatchMode as y, defaultTranslations as yt, uniqByIdentifier as z };
1293
1303
 
1294
- //# sourceMappingURL=utils-CP5Jqy1P.mjs.map
1304
+ //# sourceMappingURL=utils-DLZCoyAh.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-DLZCoyAh.mjs","names":["numericRegex"],"sources":["../src/defaults.ts","../src/utils/arrayUtils.ts","../src/utils/optGroupUtils.ts","../src/utils/parseNumber.ts","../src/utils/getParseNumberMethod.ts","../src/utils/formatQuery/utils.ts"],"sourcesContent":["import type {\n BaseTranslationsFull,\n Classnames,\n DefaultCombinatorName,\n DefaultCombinatorNameExtended,\n DefaultOperatorName,\n MatchMode,\n Path,\n QueryBuilderFlags,\n StringUnionToFullOptionArray,\n} from './types';\n\n// DO NOT ALTER OR REMOVE REGION NAMES. Some of them are used\n// to generate code snippets in the documentation.\n\n/**\n * @group Defaults\n */\nexport const defaultPlaceholderName = '~';\n/**\n * @group Defaults\n */\nexport const defaultPlaceholderLabel = '------';\n/**\n * Default `name` for placeholder option in the `fields` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderFieldName: typeof defaultPlaceholderName = defaultPlaceholderName;\n/**\n * Default `label` for placeholder option in the `fields` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderFieldLabel: typeof defaultPlaceholderLabel = defaultPlaceholderLabel;\n/**\n * Default `label` for placeholder option group in the `fields` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderFieldGroupLabel: typeof defaultPlaceholderLabel =\n defaultPlaceholderLabel;\n/**\n * Default `name` for placeholder option in the `operators` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderOperatorName: typeof defaultPlaceholderName = defaultPlaceholderName;\n/**\n * Default `label` for placeholder option in the `operators` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderOperatorLabel: typeof defaultPlaceholderLabel =\n defaultPlaceholderLabel;\n/**\n * Default `label` for placeholder option group in the `operators` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderOperatorGroupLabel: typeof defaultPlaceholderLabel =\n defaultPlaceholderLabel;\n/**\n * Default `name` for placeholder option in the `values` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderValueName: typeof defaultPlaceholderName = defaultPlaceholderName;\n/**\n * Default `label` for placeholder option in the `values` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderValueLabel: typeof defaultPlaceholderLabel = defaultPlaceholderLabel;\n/**\n * Default `label` for placeholder option group in the `values` array.\n *\n * @group Defaults\n */\nexport const defaultPlaceholderValueGroupLabel: typeof defaultPlaceholderLabel =\n defaultPlaceholderLabel;\n\n/**\n * Default configuration of translatable strings.\n *\n * @group Defaults\n */\n// #region docs-translations\nexport const defaultTranslations: BaseTranslationsFull = {\n fields: {\n title: 'Field',\n placeholderName: defaultPlaceholderFieldName,\n placeholderLabel: defaultPlaceholderFieldLabel,\n placeholderGroupLabel: defaultPlaceholderFieldGroupLabel,\n } as const,\n operators: {\n title: 'Operator',\n placeholderName: defaultPlaceholderOperatorName,\n placeholderLabel: defaultPlaceholderOperatorLabel,\n placeholderGroupLabel: defaultPlaceholderOperatorGroupLabel,\n } as const,\n values: {\n title: 'Values',\n placeholderName: defaultPlaceholderValueName,\n placeholderLabel: defaultPlaceholderValueLabel,\n placeholderGroupLabel: defaultPlaceholderValueGroupLabel,\n } as const,\n matchMode: { title: 'Match mode' } as const,\n matchThreshold: { title: 'Match threshold', placeholderName: '#' } as const,\n value: { title: 'Value' } as const,\n removeRule: { label: '⨯', title: 'Remove rule' } as const,\n removeGroup: { label: '⨯', title: 'Remove group' } as const,\n addRule: { label: '+ Rule', title: 'Add rule' } as const,\n addGroup: { label: '+ Group', title: 'Add group' } as const,\n combinators: { title: 'Combinator' } as const,\n notToggle: { label: 'Not', title: 'Invert this group' } as const,\n cloneRule: { label: '⧉', title: 'Clone rule' } as const,\n cloneRuleGroup: { label: '⧉', title: 'Clone group' } as const,\n ungroupRuleGroup: { label: '⊟', title: 'Ungroup' } as const,\n shiftActionUp: { label: '˄', title: 'Shift up' } as const,\n shiftActionDown: { label: '˅', title: 'Shift down' } as const,\n undo: { label: '↶', title: 'Undo' } as const,\n redo: { label: '↷', title: 'Redo' } as const,\n dragHandle: { label: '⁞⁞', title: 'Drag handle' } as const,\n lockRule: { label: '🔓', title: 'Lock rule' } as const,\n lockGroup: { label: '🔓', title: 'Lock group' } as const,\n lockRuleDisabled: { label: '🔒', title: 'Unlock rule' } as const,\n lockGroupDisabled: { label: '🔒', title: 'Unlock group' } as const,\n muteRule: { label: '🔊', title: 'Mute rule' } as const,\n muteGroup: { label: '🔊', title: 'Mute group' } as const,\n unmuteRule: { label: '🔇', title: 'Unmute rule' } as const,\n unmuteGroup: { label: '🔇', title: 'Unmute group' } as const,\n valueSourceSelector: { title: 'Value source' } as const,\n} satisfies BaseTranslationsFull;\n// #endregion\n\n/**\n * Default character used to `.join` and `.split` arrays.\n *\n * @group Defaults\n */\nexport const defaultJoinChar = ',';\n\nexport type DefaultOperators = StringUnionToFullOptionArray<DefaultOperatorName>;\n\nexport const defaultOperatorLabelMap: Record<DefaultOperatorName, string> = {\n '=': '=',\n '!=': '!=',\n '<': '<',\n '>': '>',\n '<=': '<=',\n '>=': '>=',\n contains: 'contains',\n beginsWith: 'begins with',\n endsWith: 'ends with',\n doesNotContain: 'does not contain',\n doesNotBeginWith: 'does not begin with',\n doesNotEndWith: 'does not end with',\n null: 'is null',\n notNull: 'is not null',\n in: 'in',\n notIn: 'not in',\n between: 'between',\n notBetween: 'not between',\n};\n\nexport const defaultCombinatorLabelMap: Record<DefaultCombinatorNameExtended, string> = {\n and: 'AND',\n or: 'OR',\n xor: 'XOR',\n};\n\n/**\n * Default operator list.\n *\n * @group Defaults\n */\n// #region docs-operators\nexport const defaultOperators: DefaultOperators = [\n { name: '=', value: '=', label: '=' },\n { name: '!=', value: '!=', label: '!=' },\n { name: '<', value: '<', label: '<' },\n { name: '>', value: '>', label: '>' },\n { name: '<=', value: '<=', label: '<=' },\n { name: '>=', value: '>=', label: '>=' },\n { name: 'contains', value: 'contains', label: 'contains' },\n { name: 'beginsWith', value: 'beginsWith', label: 'begins with' },\n { name: 'endsWith', value: 'endsWith', label: 'ends with' },\n { name: 'doesNotContain', value: 'doesNotContain', label: 'does not contain' },\n { name: 'doesNotBeginWith', value: 'doesNotBeginWith', label: 'does not begin with' },\n { name: 'doesNotEndWith', value: 'doesNotEndWith', label: 'does not end with' },\n { name: 'null', value: 'null', label: 'is null' },\n { name: 'notNull', value: 'notNull', label: 'is not null' },\n { name: 'in', value: 'in', label: 'in' },\n { name: 'notIn', value: 'notIn', label: 'not in' },\n { name: 'between', value: 'between', label: 'between' },\n { name: 'notBetween', value: 'notBetween', label: 'not between' },\n];\n// #endregion\n\n/**\n * Map of default operators to their respective opposite/negating operators.\n *\n * @group Defaults\n */\nexport const defaultOperatorNegationMap: Record<DefaultOperatorName, DefaultOperatorName> = {\n '=': '!=',\n '!=': '=',\n '<': '>=',\n '<=': '>',\n '>': '<=',\n '>=': '<',\n beginsWith: 'doesNotBeginWith',\n doesNotBeginWith: 'beginsWith',\n endsWith: 'doesNotEndWith',\n doesNotEndWith: 'endsWith',\n contains: 'doesNotContain',\n doesNotContain: 'contains',\n between: 'notBetween',\n notBetween: 'between',\n in: 'notIn',\n notIn: 'in',\n notNull: 'null',\n null: 'notNull',\n} satisfies Record<DefaultOperatorName, DefaultOperatorName>;\n\n/**\n * Relational/comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`).\n *\n * @group Defaults\n */\nexport const relationalOperators: Set<DefaultOperatorName> = new Set([\n '=',\n '!=',\n '<',\n '>',\n '<=',\n '>=',\n]);\n\n/**\n * Substring/text-matching operators (`contains`, `beginsWith`, `endsWith`, and negations).\n *\n * @group Defaults\n */\nexport const substringOperators: Set<DefaultOperatorName> = new Set([\n 'contains',\n 'beginsWith',\n 'endsWith',\n 'doesNotContain',\n 'doesNotBeginWith',\n 'doesNotEndWith',\n]);\n\n/**\n * Null-check operators (`null`, `notNull`).\n *\n * @group Defaults\n */\nexport const nullOperators: Set<DefaultOperatorName> = new Set(['null', 'notNull']);\n\n/**\n * List-membership operators (`in`, `notIn`).\n *\n * @group Defaults\n */\nexport const inOperators: Set<DefaultOperatorName> = new Set(['in', 'notIn']);\n\n/**\n * Range operators (`between`, `notBetween`).\n *\n * @group Defaults\n */\nexport const betweenOperators: Set<DefaultOperatorName> = new Set(['between', 'notBetween']);\n\nexport type DefaultCombinators = StringUnionToFullOptionArray<DefaultCombinatorName>;\n\n/**\n * Default combinator list.\n *\n * @group Defaults\n */\n// #region docs-combinators\nexport const defaultCombinators: DefaultCombinators = [\n { name: 'and', value: 'and', label: 'AND' } as const,\n { name: 'or', value: 'or', label: 'OR' } as const,\n];\n// #endregion\n\nexport type DefaultCombinatorsExtended =\n StringUnionToFullOptionArray<DefaultCombinatorNameExtended>;\n\n/**\n * Default combinator list, with `XOR` added.\n *\n * @group Defaults\n */\nexport const defaultCombinatorsExtended: DefaultCombinatorsExtended = [\n ...defaultCombinators,\n { name: 'xor', value: 'xor', label: 'XOR' } as const,\n];\n\nexport type DefaultMatchModes = StringUnionToFullOptionArray<MatchMode>;\n\n/**\n * Default match modes.\n *\n * @group Defaults\n */\n// #region docs-matchmodes\nexport const defaultMatchModes: DefaultMatchModes = [\n { name: 'all', value: 'all', label: 'all' },\n { name: 'some', value: 'some', label: 'some' },\n { name: 'none', value: 'none', label: 'none' },\n { name: 'atLeast', value: 'atLeast', label: 'at least' },\n { name: 'atMost', value: 'atMost', label: 'at most' },\n { name: 'exactly', value: 'exactly', label: 'exactly' },\n];\n// #endregion\n\n/**\n * Standard classnames applied to each component.\n *\n * @group Defaults\n */\n// #region docs-standardclassnames\nexport const standardClassnames = {\n queryBuilder: 'queryBuilder',\n ruleGroup: 'ruleGroup',\n header: 'ruleGroup-header',\n body: 'ruleGroup-body',\n combinators: 'ruleGroup-combinators',\n addRule: 'ruleGroup-addRule',\n addGroup: 'ruleGroup-addGroup',\n cloneRule: 'rule-cloneRule',\n cloneGroup: 'ruleGroup-cloneGroup',\n ungroup: 'ruleGroup-ungroup',\n removeGroup: 'ruleGroup-remove',\n notToggle: 'ruleGroup-notToggle',\n rule: 'rule',\n fields: 'rule-fields',\n matchMode: 'rule-matchMode',\n matchThreshold: 'rule-matchThreshold',\n operators: 'rule-operators',\n value: 'rule-value',\n removeRule: 'rule-remove',\n betweenRules: 'betweenRules',\n valid: 'queryBuilder-valid',\n invalid: 'queryBuilder-invalid',\n shiftActions: 'shiftActions',\n undoRedoActions: 'undoRedoActions',\n undoAction: 'undoRedoActions-undo',\n redoAction: 'undoRedoActions-redo',\n dndDragging: 'dndDragging',\n dndOver: 'dndOver',\n dndCopy: 'dndCopy',\n dndGroup: 'dndGroup',\n dndDropNotAllowed: 'dndDropNotAllowed',\n dndPreviewPosition: 'dndPreviewPosition',\n dndHidden: 'dndHidden',\n dragHandle: 'queryBuilder-dragHandle',\n disabled: 'queryBuilder-disabled',\n muted: 'queryBuilder-muted',\n lockRule: 'rule-lock',\n lockGroup: 'ruleGroup-lock',\n muteRule: 'rule-mute',\n muteGroup: 'ruleGroup-mute',\n valueSource: 'rule-valueSource',\n valueListItem: 'rule-value-list-item',\n branches: 'queryBuilder-branches',\n justified: 'queryBuilder-justified',\n responsive: 'queryBuilder-responsive',\n hasSubQuery: 'rule-hasSubQuery',\n loading: 'queryBuilder-loading',\n valueDateTimeRelative: 'rule-value-dateTimeRelative',\n} as const;\n// #endregion\n\n/**\n * Default classnames for each component.\n *\n * @group Defaults\n */\nexport const defaultControlClassnames: Classnames = {\n queryBuilder: '',\n ruleGroup: '',\n header: '',\n body: '',\n combinators: '',\n addRule: '',\n addGroup: '',\n cloneRule: '',\n cloneGroup: '',\n ungroup: '',\n removeGroup: '',\n notToggle: '',\n rule: '',\n fields: '',\n matchMode: '',\n matchThreshold: '',\n operators: '',\n value: '',\n removeRule: '',\n shiftActions: '',\n undoRedoActions: '',\n undoAction: '',\n redoAction: '',\n dragHandle: '',\n lockRule: '',\n lockGroup: '',\n muteRule: '',\n muteGroup: '',\n muted: '',\n valueSource: '',\n actionElement: '',\n valueSelector: '',\n betweenRules: '',\n valid: '',\n invalid: '',\n dndDragging: '',\n dndOver: '',\n dndGroup: '',\n dndCopy: '',\n dndDropNotAllowed: '',\n dndPreviewPosition: '',\n dndHidden: '',\n disabled: '',\n valueListItem: '',\n branches: '',\n hasSubQuery: '',\n loading: '',\n valueDateTimeRelative: '',\n} satisfies Classnames;\n\n/**\n * Default reason codes for a group being invalid.\n *\n * @group Defaults\n */\nexport const groupInvalidReasons = {\n empty: 'empty',\n invalidCombinator: 'invalid combinator',\n invalidIndependentCombinators: 'invalid independent combinators',\n} as const;\n\n/**\n * Component identifiers for testing.\n *\n * @group Defaults\n */\nexport const TestID = {\n rule: 'rule',\n ruleGroup: 'rule-group',\n inlineCombinator: 'inline-combinator',\n addGroup: 'add-group',\n removeGroup: 'remove-group',\n cloneGroup: 'clone-group',\n ungroup: 'ungroup',\n cloneRule: 'clone-rule',\n addRule: 'add-rule',\n removeRule: 'remove-rule',\n combinators: 'combinators',\n fields: 'fields',\n operators: 'operators',\n valueEditor: 'value-editor',\n notToggle: 'not-toggle',\n shiftActions: 'shift-actions',\n undoRedoActions: 'undo-redo-actions',\n undoAction: 'undo-action',\n redoAction: 'redo-action',\n dragHandle: 'drag-handle',\n lockRule: 'lock-rule',\n lockGroup: 'lock-group',\n muteRule: 'mute-rule',\n muteGroup: 'mute-group',\n valueSourceSelector: 'value-source-selector',\n matchModeEditor: 'match-mode-editor',\n} as const;\n\nexport const LogType = {\n parentPathDisabled: 'action aborted: parent path disabled',\n pathDisabled: 'action aborted: path is disabled',\n queryUpdate: 'query updated',\n onAddRuleFalse: 'onAddRule callback returned false',\n onAddGroupFalse: 'onAddGroup callback returned false',\n onGroupRuleFalse: 'onGroupRule callback returned false',\n onGroupGroupFalse: 'onGroupGroup callback returned false',\n onMoveRuleFalse: 'onMoveRule callback returned false',\n onMoveGroupFalse: 'onMoveGroup callback returned false',\n onRemoveFalse: 'onRemove callback returned false',\n onUngroupFalse: 'onUngroup callback returned false',\n add: 'rule or group added',\n remove: 'rule or group removed',\n update: 'rule or group updated',\n move: 'rule or group moved',\n group: 'rule or group grouped with another',\n ungroup: 'group replaced by its own rules',\n} as const;\n\n/**\n * The {@link Path} of the root group.\n *\n * @group Defaults\n */\nexport const rootPath: Path = [] satisfies Path;\n\n/**\n * Default values for all `boolean`\n * {@link react-querybuilder!QueryBuilder QueryBuilder} options.\n *\n * @group Defaults\n */\nexport const queryBuilderFlagDefaults: Required<QueryBuilderFlags> = {\n addRuleToNewGroups: false,\n autoSelectField: true,\n autoSelectOperator: true,\n autoSelectValue: false,\n debugMode: false,\n enableDragAndDrop: false,\n enableMountQueryChange: true,\n listsAsArrays: false,\n preserveQueryStateOnUnmount: false,\n resetOnFieldChange: true,\n resetOnOperatorChange: false,\n showCloneButtons: false,\n showCombinatorsBetweenRules: false,\n showLockButtons: false,\n showMuteButtons: false,\n showNotToggle: false,\n showShiftActions: false,\n showUndoRedo: false,\n showUngroupButtons: false,\n suppressStandardClassnames: false,\n};\n\n/**\n * Default maximum number of undo steps retained by query history.\n *\n * @group Defaults\n */\nexport const defaultMaxHistory = 50;\n\n/**\n * Default time window (in milliseconds) within which consecutive changes to the same\n * property of the same rule are coalesced into a single undo step.\n *\n * @group Defaults\n */\nexport const defaultCoalesceMs = 500;\n","import { defaultJoinChar } from '../defaults';\n\n/**\n * Splits a string by a given character (see {@link defaultJoinChar}). Escaped characters\n * (characters preceded by a backslash) will not apply to the split, and the backslash will\n * be removed in the array element. Inverse of {@link joinWith}.\n *\n * @example\n * splitBy('this\\\\,\\\\,that,,the other,,,\\\\,')\n * // or\n * splitBy('this\\\\,\\\\,that,,the other,,,\\\\,', ',')\n * // would return\n * ['this,,that', '', 'the other', '', '', ',']\n */\nexport const splitBy = (str?: string, splitChar: string = defaultJoinChar): string[] =>\n typeof str === 'string'\n ? str\n .split(`\\\\${splitChar}`)\n .map(c => c.split(splitChar))\n .reduce((prev, curr, idx) => {\n if (idx === 0) {\n return curr;\n }\n return [...prev.slice(0, -1), `${prev.at(-1)}${splitChar}${curr[0]}`, ...curr.slice(1)];\n }, [])\n : [];\n\n/**\n * Joins an array of strings using the given character (see {@link defaultJoinChar}). When\n * the given character appears in an array element, a backslash will be added just before it\n * to distinguish it from the join character. Effectively the inverse of {@link splitBy}.\n *\n * TIP: The join character can actually be a string of any length. Only the first character\n * will be searched for in the array elements and preceded by a backslash.\n *\n * @example\n * joinWith(['this,,that', '', 'the other', '', '', ','], ', ')\n * // would return\n * 'this\\\\,\\\\,that, , the other, , , \\\\,'\n */\nexport const joinWith = (strArr: unknown[], joinChar: string = defaultJoinChar): string =>\n strArr.map(str => `${str ?? ''}`.replaceAll(joinChar[0], `\\\\${joinChar[0]}`)).join(joinChar);\n\ntype IsUnknown<T> = unknown extends T ? true : false;\ntype Trimmed<T> = IsUnknown<T> extends true ? string : T;\n\n/**\n * Trims the value if it is a string. Otherwise returns the value as is.\n */\nexport const trimIfString = <T>(val: T): Trimmed<T> =>\n (typeof val === 'string' ? val.trim() : val) as Trimmed<T>;\n\ntype ToArrayResult<T> =\n IsUnknown<T> extends true\n ? string[]\n : T extends readonly (infer U)[]\n ? Trimmed<U>[]\n : T extends string\n ? string[]\n : T extends number\n ? number[]\n : never[];\n\n/**\n * Splits a string by comma then trims each element. Arrays are returned as is except\n * any string elements are trimmed.\n */\nexport const toArray = <T>(\n a: T,\n { retainEmptyStrings }: { retainEmptyStrings?: boolean } = {}\n): ToArrayResult<T> =>\n (Array.isArray(a)\n ? a.map(trimIfString)\n : typeof a === 'string'\n ? splitBy(a, defaultJoinChar)\n .filter(retainEmptyStrings ? () => true : s => !/^\\s*$/.test(s))\n .map(s => s.trim())\n : typeof a === 'number'\n ? [a]\n : []) as ToArrayResult<T>;\n\n/**\n * Determines if an array is free of `null`/`undefined`.\n */\nexport const nullFreeArray = <T>(arr: T[]): arr is Exclude<T, null>[] =>\n arr.every(el => el === false || (el ?? false) !== false);\n","import type { RequireAtLeastOne } from 'type-fest';\nimport { defaultPlaceholderLabel, defaultPlaceholderName } from '../defaults';\nimport type {\n BaseOption,\n BaseOptionMap,\n FlexibleOption,\n FlexibleOptionGroup,\n FlexibleOptionList,\n FlexibleOptionListProp,\n FullOption,\n FullOptionList,\n FullOptionMap,\n FullOptionRecord,\n GetOptionIdentifierType,\n Option,\n OptionGroup,\n Placeholder,\n ToFullOption,\n ValueOption,\n WithUnknownIndex,\n} from '../types';\nimport { isPojo } from './misc';\nimport { objectKeys } from './objectUtils';\n\nconst isOptionWithName = (opt: BaseOption): opt is Option =>\n isPojo(opt) && 'name' in opt && typeof opt.name === 'string';\nconst isOptionWithValue = (opt: BaseOption): opt is ValueOption =>\n isPojo(opt) && 'value' in opt && typeof opt.value === 'string';\n\n/**\n * Converts an {@link Option} or {@link ValueOption} (i.e., {@link BaseOption})\n * into a {@link FullOption}. Full options are left unchanged.\n *\n * @group Option Lists\n */\nexport function toFullOption<Opt extends BaseOption>(\n opt: Opt | string,\n baseProperties?: Record<string, unknown>,\n labelMap?: Record<string, unknown>\n): ToFullOption<Opt> {\n if (typeof opt === 'string') {\n return {\n ...baseProperties,\n name: opt,\n value: opt,\n label: labelMap?.[opt] ?? opt,\n } as ToFullOption<Opt>;\n }\n\n const idObj: { name?: string; value?: string } = {};\n let needsUpdating = !!baseProperties;\n\n if (isOptionWithName(opt) && !isOptionWithValue(opt)) {\n idObj.value = opt.name;\n needsUpdating = true;\n } else if (!isOptionWithName(opt) && isOptionWithValue(opt)) {\n idObj.name = opt.value;\n needsUpdating = true;\n }\n\n if (needsUpdating) {\n return Object.assign({}, baseProperties, opt, idObj) as ToFullOption<Opt>;\n }\n\n return opt as ToFullOption<Opt>;\n}\n\n/**\n * Converts an {@link OptionList} or {@link FlexibleOptionList} into a {@link FullOptionList}.\n * Lists of full options are left unchanged.\n *\n * @group Option Lists\n */\nexport function toFullOptionList<Opt extends BaseOption>(\n optList: unknown[],\n baseProperties?: Record<string, unknown>,\n labelMap?: Record<string, unknown>\n): FullOptionList<Opt> {\n if (!Array.isArray(optList)) {\n return [] as unknown as FullOptionList<Opt>;\n }\n\n const list = optList as FlexibleOptionList<Opt>;\n\n if (isFlexibleOptionGroupArray(list)) {\n return list.map(optGroup => ({\n ...optGroup,\n options: optGroup.options.map(opt => toFullOption(opt, baseProperties, labelMap)),\n })) as unknown as FullOptionList<Opt>;\n }\n\n return (list as Opt[]).map(opt =>\n toFullOption(opt, baseProperties, labelMap)\n ) as FullOptionList<Opt>;\n}\n\n/**\n * Converts a {@link FlexibleOptionList} into a {@link FullOptionList}.\n * Lists of full options are left unchanged.\n *\n * @group Option Lists\n */\nexport function toFullOptionMap<OptMap extends BaseOptionMap>(\n optMap: OptMap,\n baseProperties?: Record<string, unknown>\n): OptMap extends BaseOptionMap<infer V, infer K> ? Partial<Record<K, ToFullOption<V>>> : never {\n type FullOptMapType =\n OptMap extends BaseOptionMap<infer VT, infer KT>\n ? Partial<Record<KT, ToFullOption<VT>>>\n : never;\n\n return Object.fromEntries(\n (Object.entries(optMap) as [string, FlexibleOption][]).map(([k, v]) => [\n k,\n toFullOption(v, baseProperties),\n ])\n ) as FullOptMapType;\n}\n\n/**\n * @deprecated Renamed to {@link uniqByIdentifier}.\n *\n * @group Option Lists\n */\nexport const uniqByName = <\n T extends { name: string; value?: string } | { name?: string; value: string },\n>(\n originalArray: T[]\n): T[] => uniqByIdentifier(originalArray);\n\n/**\n * Generates a new array of objects with duplicates removed based\n * on the identifying property (`value` or `name`)\n *\n * @group Option Lists\n */\nexport const uniqByIdentifier = <\n T extends RequireAtLeastOne<{ name: string; value: string }, 'name' | 'value'>,\n>(\n originalArray: T[]\n): T[] => {\n const names = new Set<string>();\n const newArray: T[] = [];\n for (const el of originalArray) {\n if (!names.has((el.value ?? el.name)!)) {\n names.add((el.value ?? el.name)!);\n newArray.push(el);\n }\n }\n return originalArray.length === newArray.length ? originalArray : newArray;\n};\n\n/**\n * Determines if an {@link OptionList} is an {@link OptionGroup} array.\n *\n * @group Option Lists\n */\nexport const isOptionGroupArray = (arr: unknown): arr is OptionGroup<BaseOption>[] =>\n Array.isArray(arr) &&\n arr.length > 0 &&\n isPojo(arr[0]) &&\n 'options' in arr[0] &&\n Array.isArray(arr[0].options);\n\n/**\n * Determines if an array is a flat array of {@link FlexibleOption}.\n *\n * @group Option Lists\n */\nexport const isFlexibleOptionArray = (arr: unknown): arr is FlexibleOption[] => {\n let isFOA = false;\n if (Array.isArray(arr)) {\n for (const o of arr) {\n if (isOptionWithName(o) || isOptionWithValue(o)) {\n isFOA = true;\n } else {\n return false;\n }\n }\n }\n return isFOA;\n};\n\n/**\n * Determines if an array is a flat array of {@link FullOption}.\n *\n * @group Option Lists\n */\nexport const isFullOptionArray = (arr: unknown): arr is FullOption[] => {\n let isFOA = false;\n if (Array.isArray(arr)) {\n for (const o of arr) {\n if (isOptionWithName(o) && isOptionWithValue(o)) {\n isFOA = true;\n } else {\n return false;\n }\n }\n }\n return isFOA;\n};\n\n/**\n * Determines if a {@link FlexibleOptionList} is a {@link FlexibleOptionGroup} array.\n *\n * @group Option Lists\n */\nexport const isFlexibleOptionGroupArray = (\n arr: unknown,\n { allowEmpty = false }: { allowEmpty?: boolean } = {}\n): arr is FlexibleOptionGroup[] => {\n let isFOGA = false;\n if (Array.isArray(arr)) {\n for (const og of arr) {\n if (\n isPojo(og) &&\n 'options' in og &&\n (isFlexibleOptionArray(og.options) ||\n (allowEmpty && Array.isArray(og.options) && og.options.length === 0))\n ) {\n isFOGA = true;\n } else {\n return false;\n }\n }\n }\n return isFOGA;\n};\n\n/**\n * Determines if a {@link FlexibleOptionList} is a {@link OptionGroup} array of {@link FullOption}.\n *\n * @group Option Lists\n */\nexport const isFullOptionGroupArray = (\n arr: unknown,\n { allowEmpty = false }: { allowEmpty?: boolean } = {}\n): arr is OptionGroup<FullOption>[] => {\n let isFOGA = false;\n if (Array.isArray(arr)) {\n for (const og of arr) {\n if (\n isPojo(og) &&\n 'options' in og &&\n (isFullOptionArray(og.options) ||\n (allowEmpty && Array.isArray(og.options) && og.options.length === 0))\n ) {\n isFOGA = true;\n } else {\n return false;\n }\n }\n }\n return isFOGA;\n};\n\n/**\n * Gets the option from an {@link OptionList} with the given `name`. Handles\n * {@link Option} arrays as well as {@link OptionGroup} arrays.\n *\n * @group Option Lists\n */\nexport function getOption<OptType extends FullOption>(\n arr: FullOptionList<OptType>,\n name: string\n): OptType | undefined;\nexport function getOption<OptType extends ValueOption>(\n arr: FlexibleOptionList<OptType>,\n name: string\n): OptType | undefined;\nexport function getOption<OptType extends Option>(\n arr: FlexibleOptionList<OptType>,\n name: string\n): OptType | undefined;\nexport function getOption<OptType extends BaseOption>(\n arr: FlexibleOptionList<OptType>,\n name: string\n): OptType | undefined {\n const options = isFlexibleOptionGroupArray(arr, { allowEmpty: true })\n ? arr.flatMap(og => og.options)\n : arr;\n return options.find(op => op.value === name || op.name === name) as OptType | undefined;\n}\n\n/**\n * Gets the first option from an {@link OptionList}.\n *\n * @group Option Lists\n */\nexport function getFirstOption<Opt extends FullOption>(\n arr?: OptionGroup<Opt>[] | Opt[]\n): GetOptionIdentifierType<Opt> | null;\nexport function getFirstOption<Opt extends ValueOption>(\n arr?: OptionGroup<Opt>[] | Opt[]\n): GetOptionIdentifierType<Opt> | null;\nexport function getFirstOption<Opt extends Option>(\n arr?: OptionGroup<Opt>[] | Opt[]\n): GetOptionIdentifierType<Opt> | null;\nexport function getFirstOption<Opt extends BaseOption>(\n arr?: FlexibleOptionGroup<Opt>[] | Opt[]\n): GetOptionIdentifierType<Opt> | null {\n if (!Array.isArray(arr) || arr.length === 0) {\n return null;\n } else if (isFlexibleOptionGroupArray(arr, { allowEmpty: true })) {\n for (const og of arr) {\n if (og.options.length > 0) {\n return (og.options[0].value ?? og.options[0].name) as GetOptionIdentifierType<Opt>;\n }\n }\n // v8 ignore next\n return null;\n }\n\n return (arr[0].value ?? arr[0].name) as GetOptionIdentifierType<Opt>;\n}\n\n/**\n * Flattens {@link FlexibleOptionGroup} arrays into {@link BaseOption} arrays.\n * If the array is already flat, it is returned as is.\n *\n * @group Option Lists\n */\nexport const toFlatOptionArray = <T extends FullOption>(arr: FullOptionList<T>) =>\n uniqByIdentifier(isOptionGroupArray(arr) ? arr.flatMap(og => og.options) : arr) as T[];\n\n/**\n * Generates a new {@link OptionGroup} array with duplicates\n * removed based on the identifying property (`value` or `name`).\n *\n * @group Option Lists\n */\nexport const uniqOptGroups = <T extends BaseOption>(\n originalArray: FlexibleOptionGroup<T>[]\n): OptionGroup<ToFullOption<T>>[] => {\n type K = T extends BaseOption<infer KT> ? KT : never;\n const labels = new Set<string>();\n const names = new Set<K>();\n const newArray: OptionGroup<ToFullOption<T>>[] = [];\n for (const el of originalArray) {\n if (!labels.has(el.label)) {\n labels.add(el.label);\n const optionsForThisGroup: WithUnknownIndex<ToFullOption<T>>[] = [];\n for (const opt of el.options) {\n if (!names.has((opt.value ?? opt.name) as K)) {\n names.add((opt.value ?? opt.name) as K);\n optionsForThisGroup.push(toFullOption(opt) as WithUnknownIndex<ToFullOption<T>>);\n }\n }\n newArray.push({ ...el, options: optionsForThisGroup });\n }\n }\n return newArray;\n};\n\n/**\n * Generates a new {@link Option} or {@link OptionGroup} array with duplicates\n * removed based on the identifier property (`value` or `name`).\n *\n * @group Option Lists\n */\nexport const uniqOptList = <T extends BaseOption>(\n originalArray: FlexibleOptionList<T>\n): WithUnknownIndex<BaseOption & FullOption>[] | OptionGroup<ToFullOption<T>>[] => {\n if (isFlexibleOptionGroupArray(originalArray)) {\n return uniqOptGroups(originalArray) as OptionGroup<ToFullOption<T>>[];\n }\n return uniqByIdentifier((originalArray as BaseOption[]).map(o => toFullOption(o)));\n};\n\n/** Result of {@link prepareOptionList}. */\nexport interface PreparedOptionList<O extends FullOption> {\n defaultOption: FullOption;\n optionList: FullOptionList<O>;\n optionsMap: Partial<FullOptionRecord<O>>;\n}\n\n/** Parameters for {@link prepareOptionList}. */\nexport interface PrepareOptionListParams<O extends FullOption> {\n placeholder?: Placeholder;\n optionList?: FlexibleOptionListProp<O> | BaseOptionMap<O>;\n baseOption?: Record<string, unknown>;\n labelMap?: Record<string, string>;\n autoSelectOption?: boolean;\n}\n\n/**\n * Normalizes any accepted option list shape—array, option groups, or a record—into a\n * `FullOptionList`, applying `baseOption` properties and (when `autoSelectOption` is `false`)\n * a leading placeholder option. Also returns the flattened lookup map and the option that\n * should be selected by default.\n *\n * Note: `labelMap` overrides only apply to array/option group input (where string options are\n * expanded); record input derives labels from the record values themselves.\n *\n * This is the same normalization `<QueryBuilder />` applies to `fields`, `operators`,\n * `combinators`, and value lists, so a non-React implementation resolves options identically.\n *\n * @group Option Lists\n */\nexport const prepareOptionList = <O extends FullOption>(\n props: PrepareOptionListParams<O>\n): PreparedOptionList<O> => {\n type OptionIdentifier = GetOptionIdentifierType<O>;\n\n // v8 ignore next\n const {\n optionList: optionListPropOriginal,\n baseOption = {},\n labelMap = {},\n placeholder: {\n placeholderName = defaultPlaceholderName,\n placeholderLabel = defaultPlaceholderLabel,\n placeholderGroupLabel = defaultPlaceholderLabel,\n } = {},\n autoSelectOption = true,\n } = props;\n\n const defaultOption = {\n id: placeholderName,\n name: placeholderName,\n value: placeholderName,\n label: placeholderLabel,\n } as FullOption;\n\n const optionsProp = optionListPropOriginal ?? ([defaultOption] as FlexibleOptionList<O>);\n\n let optionList: FullOptionList<O>;\n const opts = (\n Array.isArray(optionsProp)\n ? toFullOptionList(optionsProp, baseOption, labelMap)\n : (objectKeys(toFullOptionMap(optionsProp, baseOption)) as unknown as OptionIdentifier[])\n // oxlint-disable-next-line no-map-spread\n .map<FullOption<OptionIdentifier>>(opt => ({\n ...optionsProp[opt]!,\n name: opt,\n value: opt,\n }))\n // oxlint-disable-next-line no-array-sort\n .sort((a, b) => a.label.localeCompare(b.label))\n ) as FullOptionList<O>;\n if (isFlexibleOptionGroupArray(opts)) {\n optionList = autoSelectOption\n ? (uniqOptGroups(opts) as FullOptionList<O>)\n : (uniqOptGroups([\n {\n label: placeholderGroupLabel,\n options: [defaultOption],\n },\n ...opts,\n ]) as FullOptionList<O>);\n } else {\n optionList = autoSelectOption\n ? (uniqByIdentifier(opts as O[]) as FullOptionList<O>)\n : (uniqByIdentifier([defaultOption, ...(opts as O[])]) as FullOptionList<O>);\n }\n\n let optionsMap: Partial<FullOptionRecord<O>> = {};\n if (!Array.isArray(optionsProp)) {\n const op = toFullOptionMap(optionsProp, baseOption) as FullOptionMap<O, OptionIdentifier>;\n optionsMap = autoSelectOption ? op : { ...op, [placeholderName]: defaultOption };\n } else {\n if (isFlexibleOptionGroupArray(optionList)) {\n for (const og of optionList as OptionGroup<ToFullOption<O>>[]) {\n for (const opt of og.options) {\n optionsMap[\n (opt.value ??\n /* v8 ignore start -- @preserve */ opt.name) /* v8 ignore stop -- @preserve */ as OptionIdentifier\n ] = toFullOption(opt, baseOption);\n }\n }\n } else {\n for (const opt of optionList as ToFullOption<O>[]) {\n optionsMap[\n (opt.value ??\n /* v8 ignore start -- @preserve */ opt.name) /* v8 ignore stop -- @preserve */ as OptionIdentifier\n ] = toFullOption(opt, baseOption);\n }\n }\n }\n\n return { defaultOption, optionList, optionsMap };\n};\n","import { numericQuantity } from 'numeric-quantity';\nimport type { ParseNumberMethod } from '../types';\n\n/**\n * Options object for {@link parseNumber}.\n */\nexport interface ParseNumberOptions {\n parseNumbers?: ParseNumberMethod;\n /**\n * Generates a `bigint` value if the string represents a valid integer\n * outside the safe boundaries of the `number` type.\n */\n bigIntOnOverflow?: boolean;\n}\n\n/**\n * Converts a string to a number. Uses native `parseFloat` if `parseNumbers` is \"native\",\n * otherwise uses [`numeric-quantity`](https://jakeboone02.github.io/numeric-quantity/).\n * If that returns `NaN`, the string is returned unchanged. Numeric values are returned\n * as-is regardless of the `parseNumbers` option.\n */\nexport const parseNumber = (\n val: unknown,\n { parseNumbers, bigIntOnOverflow }: ParseNumberOptions = {}\n // oxlint-disable-next-line typescript/no-explicit-any\n): any => {\n if (!parseNumbers || typeof val === 'bigint' || typeof val === 'number') {\n return val;\n }\n\n if (parseNumbers === 'native') {\n return Number.parseFloat(val as string);\n }\n\n const valAsNum: number | bigint =\n // TODO?: Make these options configurable\n numericQuantity(val, {\n allowTrailingInvalid: parseNumbers === 'enhanced',\n bigIntOnOverflow,\n romanNumerals: false,\n round: false,\n });\n\n return typeof valAsNum === 'bigint' || !Number.isNaN(valAsNum) ? valAsNum : val;\n};\n","import type { InputType, ParseNumberMethod, ParseNumbersPropConfig } from '../types';\n\nexport const getParseNumberMethod = ({\n parseNumbers,\n inputType,\n}: {\n parseNumbers?: ParseNumbersPropConfig;\n inputType?: InputType | null;\n}): ParseNumberMethod => {\n if (typeof parseNumbers === 'string') {\n const [method, level] = parseNumbers.split('-') as\n | [ParseNumberMethod, 'limited']\n | [ParseNumberMethod];\n if (level === 'limited') {\n return inputType === 'number' ? method : false;\n }\n\n return method;\n }\n\n return parseNumbers ? 'strict' : false;\n};\n","import type { SetRequired } from 'type-fest';\nimport type {\n ConstituentWordOrder,\n DefaultCombinatorName,\n FormatQueryOptions,\n FullField,\n GroupVariantCondition,\n MatchMode,\n NLTranslationKey,\n NLTranslations,\n OptionList,\n RuleGroupTypeAny,\n RuleType,\n ValueProcessorByRule,\n ValueProcessorLegacy,\n ValueProcessorOptions,\n} from '../../types';\nimport { joinWith, splitBy, toArray } from '../arrayUtils';\nimport { getParseNumberMethod } from '../getParseNumberMethod';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isPojo, lc, numericRegex } from '../misc';\nimport { getOption } from '../optGroupUtils';\nimport { parseNumber } from '../parseNumber';\n\n/**\n * Maps a {@link DefaultOperatorName} to a SQL operator.\n *\n * @group Export\n */\nexport const mapSQLOperator = (rqbOperator: string): string => {\n switch (lc(rqbOperator)) {\n case 'null':\n return 'is null';\n case 'notnull':\n return 'is not null';\n case 'notin':\n return 'not in';\n case 'notbetween':\n return 'not between';\n case 'contains':\n case 'beginswith':\n case 'endswith':\n return 'like';\n case 'doesnotcontain':\n case 'doesnotbeginwith':\n case 'doesnotendwith':\n return 'not like';\n default:\n return rqbOperator;\n }\n};\n\n/**\n * Returns a preset-aware SQL string-concatenation function. Emits `CONCAT(a, b, ...)` when\n * `concatOperator` is `\"CONCAT\"` (case-insensitive), otherwise joins with the infix operator\n * (e.g. `a || b`, `a + b`).\n *\n * @group Export\n */\nexport const getSQLConcat =\n (concatOperator = '||') =>\n (...values: string[]): string =>\n concatOperator.toUpperCase() === 'CONCAT'\n ? `CONCAT(${values.join(', ')})`\n : values.join(` ${concatOperator} `);\n\n/**\n * Returns the `[prefix, suffix]` `LIKE` wildcards for a string-match operator (e.g. `contains`\n * → `['%', '%']`, `beginsWith` → `['', '%']`, `endsWith` → `['%', '']`). Unknown operators\n * yield `['', '']`.\n *\n * @group Export\n */\nexport const getLikeWildcards = (operatorLC: string): [string, string] => {\n switch (operatorLC) {\n case 'contains':\n case 'doesnotcontain':\n return ['%', '%'];\n case 'beginswith':\n case 'doesnotbeginwith':\n return ['', '%'];\n case 'endswith':\n case 'doesnotendwith':\n return ['%', ''];\n default:\n return ['', ''];\n }\n};\n\n/**\n * Wraps an already-serialized SQL fragment (a quoted field name or an expression) with the\n * `LIKE` wildcards for the given (lowercase) string-match operator, concatenating the literal\n * `%` markers via the preset-aware {@link getSQLConcat}. Returns the fragment untouched for\n * operators without wildcards.\n *\n * @group Export\n */\nexport const wrapLikeFragment = (\n fragment: string,\n operatorLC: string,\n {\n concatOperator = '||',\n quoteValuesWith,\n wrapValueWith = ['', ''],\n }: {\n concatOperator?: string;\n quoteValuesWith?: string;\n wrapValueWith?: [string, string];\n } = {}\n): string => {\n const [pre, post] = getLikeWildcards(operatorLC);\n const quoteChar = quoteValuesWith || `'`;\n const quote = (p: string) => `${wrapValueWith[0]}${quoteChar}${p}${quoteChar}${wrapValueWith[1]}`;\n const parts = [pre && quote(pre), fragment, post && quote(post)].filter(Boolean);\n return parts.length > 1 ? getSQLConcat(concatOperator)(...parts) : fragment;\n};\n\n/**\n * Maps a (lowercase) {@link DefaultOperatorName} to a MongoDB operator.\n *\n * @group Export\n */\nexport const mongoOperators = {\n '=': '$eq',\n '!=': '$ne',\n '<': '$lt',\n '<=': '$lte',\n '>': '$gt',\n '>=': '$gte',\n in: '$in',\n notin: '$nin',\n notIn: '$nin', // only here for backwards compatibility\n};\n\n/**\n * Maps a (lowercase) {@link DefaultOperatorName} to a Prisma ORM operator.\n *\n * @group Export\n */\nexport const prismaOperators = {\n '=': 'equals',\n '!=': 'not',\n '<': 'lt',\n '<=': 'lte',\n '>': 'gt',\n '>=': 'gte',\n in: 'in',\n notin: 'notIn',\n};\n\n/**\n * Maps a {@link DefaultCombinatorName} to a CEL combinator.\n *\n * @group Export\n */\nexport const celCombinatorMap: {\n and: '&&';\n or: '||';\n} = {\n and: '&&',\n or: '||',\n} satisfies Record<DefaultCombinatorName, '&&' | '||'>;\n\n/**\n * Register these operators with `jsonLogic` before applying the result\n * of `formatQuery(query, 'jsonlogic')`.\n *\n * @example\n * ```\n * for (const [op, func] of Object.entries(jsonLogicAdditionalOperators)) {\n * jsonLogic.add_operation(op, func);\n * }\n * jsonLogic.apply({ \"startsWith\": [{ \"var\": \"firstName\" }, \"Stev\"] }, data);\n * ```\n *\n * @group Export\n */\nexport const jsonLogicAdditionalOperators: Record<\n 'startsWith' | 'endsWith',\n (a: string, b: string) => boolean\n> = {\n startsWith: (a: string, b: string) => typeof a === 'string' && a.startsWith(b),\n endsWith: (a: string, b: string) => typeof a === 'string' && a.endsWith(b),\n};\n\n/**\n * Returns a new query object with all `string`-type `value` properties converted\n * to `number` where appropriate.\n *\n * Used by {@link formatQuery} for the `json*` formats when `parseNumbers` is `true`.\n *\n * @group Export\n */\nexport const numerifyValues = (\n rg: RuleGroupTypeAny,\n options: SetRequired<FormatQueryOptions, 'fields'>\n): RuleGroupTypeAny => ({\n ...rg,\n // @ts-expect-error TS doesn't keep track of odd/even indexes here\n rules: rg.rules.map(r => {\n if (typeof r === 'string') {\n return r;\n }\n\n if (isRuleGroup(r)) {\n return numerifyValues(r, options);\n }\n\n const fieldData = getOption(options.fields as OptionList<FullField>, r.field);\n const parseNumbers = getParseNumberMethod({\n parseNumbers: options.parseNumbers,\n inputType: fieldData?.inputType,\n });\n\n if (Array.isArray(r.value)) {\n return { ...r, value: r.value.map(v => parseNumber(v, { parseNumbers })) };\n }\n\n const valAsArray = toArray(r.value, { retainEmptyStrings: true }).map(v =>\n parseNumber(v, { parseNumbers })\n );\n if (valAsArray.every(v => typeof v === 'number')) {\n // v8 ignore else\n if (valAsArray.length > 1) {\n return { ...r, value: valAsArray };\n } else if (valAsArray.length === 1) {\n return { ...r, value: valAsArray[0] };\n }\n }\n\n return r;\n }),\n});\n\n/**\n * Determines whether a value is _anything_ except an empty `string` or `NaN`.\n *\n * @group Export\n */\nexport const isValidValue = (value: unknown): boolean =>\n (typeof value === 'string' && value.length > 0) ||\n (typeof value === 'number' && !Number.isNaN(value)) ||\n (typeof value !== 'string' && typeof value !== 'number');\n\n/**\n * Determines whether {@link formatQuery} should render the given value as a number.\n * As long as `parseNumbers` is `true`, `number` and `bigint` values will return `true` and\n * `string` values will return `true` if they test positive against {@link numericRegex}.\n *\n * @group Export\n */\nexport const shouldRenderAsNumber = (value: unknown, parseNumbers?: boolean): boolean =>\n !!parseNumbers &&\n (typeof value === 'number' ||\n typeof value === 'bigint' ||\n (typeof value === 'string' && numericRegex.test(value)));\n\n/**\n * Used by {@link formatQuery} to determine whether the given value processor is a\n * \"legacy\" value processor by counting the number of arguments. Legacy value\n * processors take 3 arguments (not counting any arguments with default values), while\n * rule-based value processors take no more than 2 arguments.\n *\n * @group Export\n */\nexport const isValueProcessorLegacy = (\n valueProcessor: ValueProcessorLegacy | ValueProcessorByRule\n): valueProcessor is ValueProcessorLegacy => valueProcessor.length >= 3;\n\n/**\n * Converts the `quoteFieldNamesWith` option into an array of two strings.\n * If the option is a string, the array elements are both that string.\n *\n * @default\n * ['', '']\n *\n * @group Export\n */\nexport const getQuoteFieldNamesWithArray = (\n // v8 ignore next\n quoteFieldNamesWith: null | string | [string, string] = ['', '']\n): [string, string] =>\n Array.isArray(quoteFieldNamesWith)\n ? quoteFieldNamesWith\n : typeof quoteFieldNamesWith === 'string'\n ? [quoteFieldNamesWith, quoteFieldNamesWith]\n : (quoteFieldNamesWith ?? ['', '']);\n\n/**\n * Given a field name and relevant {@link ValueProcessorOptions}, returns the field name\n * wrapped in the configured quote character(s).\n *\n * @group Export\n */\nexport const getQuotedFieldName = (\n fieldName: string,\n { quoteFieldNamesWith, fieldIdentifierSeparator }: ValueProcessorOptions\n): string => {\n const [qPre, qPost] = getQuoteFieldNamesWithArray(quoteFieldNamesWith);\n return typeof fieldIdentifierSeparator === 'string' && fieldIdentifierSeparator.length > 0\n ? joinWith(\n splitBy(fieldName, fieldIdentifierSeparator).map(part => `${qPre}${part}${qPost}`),\n fieldIdentifierSeparator\n )\n : `${qPre}${fieldName}${qPost}`;\n};\n\nconst defaultWordOrder = ['S', 'V', 'O'];\n\n/**\n * Given a [Constituent word order](https://en.wikipedia.org/wiki/Word_order#Constituent_word_orders)\n * like \"svo\" or \"sov\", returns a permutation of `[\"S\", \"V\", \"O\"]` based on the first occurrence of\n * each letter in the input string (case insensitive). This widens the valid input from abbreviations\n * like \"svo\" to more expressive strings like \"subject-verb-object\" or \"sub ver obj\". Any missing\n * letters are appended in the default order \"SVO\" (e.g., \"object\" would yield `[\"O\", \"S\", \"V\"]`).\n *\n * @group Export\n */\nexport const normalizeConstituentWordOrder = (input: string): ConstituentWordOrder => {\n const result: string[] = [];\n const letterSet = new Set(defaultWordOrder);\n\n for (const char of input.toUpperCase()) {\n if (letterSet.has(char)) {\n result.push(char);\n letterSet.delete(char);\n if (letterSet.size === 0) break;\n }\n }\n\n // Add any missing letters in default order\n for (const letter of defaultWordOrder) {\n if (letterSet.has(letter)) {\n result.push(letter);\n }\n }\n\n return result as ConstituentWordOrder;\n};\n\n/**\n * Prefixes a named-parameter value with the given `paramPrefix` unless the value already\n * begins with it. Used by {@link formatQuery} to render rules whose `valueSource` is\n * `\"parameter\"` (e.g. `\"p1\"` with prefix `\":\"` → `\":p1\"`; `\":p1\"` → `\":p1\"`).\n *\n * @group Export\n */\nexport const withParamPrefix = (value: unknown, paramPrefix = ':'): string => {\n const v = `${value ?? ''}`;\n return paramPrefix && v.startsWith(paramPrefix) ? v : `${paramPrefix}${v}`;\n};\n\n/**\n * Strips a leading `paramPrefix` from a named-parameter value if present. Inverse of\n * {@link withParamPrefix}; used to normalize parameter names for validation/lookup.\n *\n * @group Export\n */\nexport const stripParamPrefix = (value: unknown, paramPrefix = ':'): string => {\n const v = `${value ?? ''}`;\n return paramPrefix && v.startsWith(paramPrefix) ? v.slice(paramPrefix.length) : v;\n};\n\n/**\n * Default translations used by {@link formatQuery} for \"natural_language\" format.\n *\n * @group Export\n */\n// The ones commented below are unnecessary for the default implementation,\n// but they can be overridden for customized implementations.\nexport const defaultNLTranslations: NLTranslations = {\n // and: 'and',\n // or: 'or',\n // true: 'true',\n // false: 'false',\n groupPrefix: '',\n // groupPrefix_not: '',\n groupPrefix_not_xor: 'either zero or more than one of',\n groupPrefix_xor: 'exactly one of',\n groupSuffix: 'is true',\n groupSuffix_not: 'is not true',\n // groupSuffix_not_xor: 'is true',\n // groupSuffix_xor: 'is true',\n};\n\n/**\n * Note: This function assumes `conditions.length > 0`\n */\nconst translationMatchFilter = (\n key: NLTranslationKey,\n keyToTest: string,\n conditions: GroupVariantCondition[]\n) =>\n // The translation matches the base key\n keyToTest.startsWith(key) &&\n // The translation specifies all conditions\n conditions.every(\n c =>\n // This translation specifies _this_ condition\n keyToTest.includes(`_${c}`) &&\n // This translation specifies the same _total number_ of conditions\n keyToTest.match(/_/g)?.length === conditions.length\n );\n\n/**\n * Used by {@link formatQuery} to get a translation based on certain conditions\n * for the \"natural_language\" format.\n *\n * @group Export\n */\nexport const getNLTranslataion = (\n key: NLTranslationKey,\n translations: NLTranslations,\n conditions: GroupVariantCondition[] = []\n): string =>\n conditions.length === 0\n ? (translations[key] ??\n defaultNLTranslations[key] ??\n /* v8 ignore start -- @preserve */ '') /* v8 ignore stop -- @preserve */\n : (Object.entries(translations).find(([keyToTest]) =>\n translationMatchFilter(key, keyToTest, conditions)\n )?.[1] ??\n Object.entries(defaultNLTranslations).find(([keyToTest]) =>\n translationMatchFilter(key, keyToTest, conditions)\n )?.[1] ??\n defaultNLTranslations[key] ??\n /* v8 ignore next -- @preserve */ '');\n\ntype ProcessedMatchMode =\n | { mode: 'all'; threshold?: number | null | undefined }\n | { mode: 'none'; threshold?: number | null | undefined }\n | { mode: 'some'; threshold?: number | null | undefined }\n | { mode: 'atleast'; threshold: number }\n | { mode: 'atmost'; threshold: number }\n | { mode: 'exactly'; threshold: number };\n\n/**\n * Transforms\n * - `match: { mode: \"atLeast\", threshold: 1 }` to `match: { mode: \"some\" }`\n * - `match: { mode: \"atMost\", threshold: 0 }` to `match: { mode: \"none\" }`.\n *\n * Returns:\n * - Processed `{ mode, threshold }` object for valid subqueries\n * - `null` if match mode is not applicable for the rule\n * - `false` if match mode is valid, but either\n * 1. `threshold` is required and invalid, or\n * 2. `value` is not a valid rule group.\n */\nexport const processMatchMode = (rule: RuleType): null | false | ProcessedMatchMode => {\n const { mode, threshold } = rule.match ?? {};\n\n if (!mode) return null;\n\n if (!isRuleGroup(rule.value)) return false;\n\n const matchModeLC = lc(mode) as Lowercase<MatchMode>;\n\n const matchModeCoerced =\n matchModeLC === 'atleast' && threshold === 1\n ? 'some'\n : matchModeLC === 'atmost' && threshold === 0\n ? 'none'\n : matchModeLC;\n\n if (\n (matchModeCoerced === 'atleast' ||\n matchModeCoerced === 'atmost' ||\n matchModeCoerced === 'exactly') &&\n (typeof threshold !== 'number' || threshold < 0)\n ) {\n return false;\n }\n\n return { mode: matchModeCoerced, threshold: threshold! };\n};\n\n/**\n * Base alias assigned to the element binding of a subquery generated for a rule's\n * {@link MatchMode `match` mode} (e.g. `unnest(field) as elem_alias`).\n */\nexport const subqueryElementAliasBase = 'elem_alias';\n\n/**\n * Returns the element alias for a subquery at the given nesting depth. Depth 0 (the common,\n * non-nested case) uses {@link subqueryElementAliasBase} unchanged; deeper levels are suffixed\n * with the depth, so a subquery nested within a subquery cannot shadow its parent's binding.\n *\n * Deterministic by depth rather than randomized, so output remains stable and snapshot-friendly.\n *\n * @group Export\n */\nexport const getSubqueryElementAlias = (subqueryDepth = 0): string =>\n subqueryDepth > 0 ? `${subqueryElementAliasBase}_${subqueryDepth}` : subqueryElementAliasBase;\n\n/**\n * \"Replacer\" method for JSON.stringify's second argument. Converts `bigint` values to\n * objects with a `$bigint` property having a value of a string representation of\n * the actual `bigint`-type value.\n *\n * Inverse of {@link bigIntJsonParseReviver}.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#use_within_json\n */\nexport const bigIntJsonStringifyReplacer = (_key: string, value: unknown): unknown =>\n typeof value === 'bigint' ? { $bigint: value.toString() } : value;\n\n/**\n * \"Reviver\" method for JSON.parse's second argument. Converts objects having a single\n * `$bigint: string` property to an actual `bigint` value.\n *\n * Inverse of {@link bigIntJsonStringifyReplacer}.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#use_within_json\n */\nexport const bigIntJsonParseReviver = (_key: string, value: unknown): unknown =>\n isPojo(value) && Object.keys(value).length === 1 && typeof value.$bigint === 'string'\n ? BigInt(value.$bigint)\n : value;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-querybuilder/core",
3
- "version": "8.23.0",
3
+ "version": "8.24.0",
4
4
  "description": "React Query Builder component for constructing queries and filters, with utilities for executing them in various database and evaluation contexts",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -185,38 +185,39 @@
185
185
  "license": "MIT",
186
186
  "homepage": "https://react-querybuilder.js.org/",
187
187
  "devDependencies": {
188
- "@electric-sql/pglite": "0.5.4",
189
- "@grafeo-db/js": "^0.5.42",
190
- "@prisma/client": "^7.9.1",
191
- "@tanstack/db": "^0.7.2",
192
- "@traqula/parser-sparql-1-2": "^1.2.0",
193
- "@types/node": "^26.2.0",
188
+ "@electric-sql/pglite": "0.5.8",
189
+ "@electric-sql/pglite-socket": "0.2.11",
190
+ "@prisma/client": "^7.10.0",
191
+ "@react-querybuilder/grafeo": "^0.5.44",
192
+ "@tanstack/db": "^0.9.2",
193
+ "@traqula/parser-sparql-1-2": "^1.3.1",
194
+ "@types/node": "^26.6.0",
194
195
  "chevrotain": "^13.2.0",
195
196
  "clsx": "^2.1.1",
196
197
  "drizzle-orm": "^0.45.2",
197
- "fast-check": "^4.5.0",
198
+ "fast-check": "^4.10.0",
198
199
  "json-logic-js": "^2.0.5",
199
200
  "jsonata": "^2.2.2",
200
201
  "mongodb-memory-server-core": "^11.2.0",
201
- "mongoose": "^9.9.2",
202
+ "mongoose": "^9.10.1",
202
203
  "pglite-prisma-adapter": "^0.7.2",
203
- "prisma": "^7.9.1",
204
- "query-string": "^9.5.0",
204
+ "prisma": "^7.10.0",
205
+ "query-string": "^9.5.1",
205
206
  "rollup-plugin-visualizer": "^7.1.1",
206
- "sass": "^1.102.0",
207
+ "sass": "^1.104.1",
207
208
  "sequelize": "^6.37.8",
208
209
  "spel2js": "^0.2.9",
209
210
  "sqlite3": "^6.0.1",
210
- "type-fest": "^5.8.0",
211
+ "type-fest": "^5.9.0",
211
212
  "typescript": "^7.0.2",
212
- "vite": "^8.2.1"
213
+ "vite": "^8.3.0"
213
214
  },
214
215
  "dependencies": {
215
- "@ts-jison/lexer": "0.4.1-alpha.1",
216
- "@ts-jison/parser": "0.4.1-alpha.1",
216
+ "@ts-jison/lexer": "0.4.1-alpha.4",
217
+ "@ts-jison/parser": "0.4.1-alpha.4",
217
218
  "@types/json-logic-js": ">=2",
218
- "immer": "^11.1.16",
219
- "numeric-quantity": "^3.2.2"
219
+ "immer": "^11.1.18",
220
+ "numeric-quantity": "^3.3.2"
220
221
  },
221
222
  "peerDependencies": {
222
223
  "@tanstack/db": ">=0.6.9",
@@ -262,5 +263,5 @@
262
263
  "typecheck": "../../node_modules/typescript/bin/tsc --noEmit",
263
264
  "typecheck:watch": "../../node_modules/typescript/bin/tsc --noEmit --watch"
264
265
  },
265
- "gitHead": "4e35168724267e1c683f20f9528da1f00cc13f33"
266
+ "gitHead": "4cf771a8b88c701084378897c5fae6d52c5be40e"
266
267
  }