{
  "schemaVersion": "1.0.0",
  "readme": "",
  "modules": [
    {
      "kind": "javascript-module",
      "path": "src/index.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "js",
          "name": "formatDateString",
          "declaration": {
            "name": "formatDateString",
            "module": "./utils"
          }
        },
        {
          "kind": "js",
          "name": "formatDateTimeString",
          "declaration": {
            "name": "formatDateTimeString",
            "module": "./utils"
          }
        },
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./main"
          }
        },
        {
          "kind": "js",
          "name": "Types",
          "declaration": {
            "name": "Types",
            "module": "src/index.ts"
          }
        },
        {
          "kind": "js",
          "name": "Config",
          "declaration": {
            "name": "Config",
            "module": "src/index.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/config/combinators.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "BASE_LOGICAL_COMBINATORS",
          "type": {
            "text": "Combinator[]"
          },
          "default": "[\n  {\n    type: 'AND',\n    maxRules: 'many',\n  },\n  {\n    type: 'OR',\n    maxRules: 'many',\n  },\n]",
          "description": "Basic `AND` and `OR` logical combinators which can be used in the model config."
        },
        {
          "kind": "variable",
          "name": "LOGICAL_COMBINATORS",
          "type": {
            "text": "Combinator[]"
          },
          "default": "[\n  ...BASE_LOGICAL_COMBINATORS,\n  {\n    type: 'NOT',\n    maxRules: 2,\n  },\n  {\n    type: 'NAND',\n    maxRules: 'many',\n  },\n  {\n    type: 'NOR',\n    maxRules: 'many',\n  },\n  {\n    type: 'XOR',\n    maxRules: 2,\n  },\n]",
          "description": "A set of boolean logic combinators which configure the expression builder to produce boolean expressions."
        },
        {
          "kind": "variable",
          "name": "NULL_COMBINATOR",
          "type": {
            "text": "Combinator"
          },
          "default": "{\n  type: 'NULL',\n  maxRules: 1,\n  invisible: true,\n}",
          "description": "A combinator which has a null action.\n\nIf configured as the only combinator then it configures the expression builder to only create a single rule."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "BASE_LOGICAL_COMBINATORS",
          "declaration": {
            "name": "BASE_LOGICAL_COMBINATORS",
            "module": "src/config/combinators.ts"
          }
        },
        {
          "kind": "js",
          "name": "LOGICAL_COMBINATORS",
          "declaration": {
            "name": "LOGICAL_COMBINATORS",
            "module": "src/config/combinators.ts"
          }
        },
        {
          "kind": "js",
          "name": "NULL_COMBINATOR",
          "declaration": {
            "name": "NULL_COMBINATOR",
            "module": "src/config/combinators.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/config/index.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./combinators"
          }
        },
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./operators"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/config/operators.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "BASE_OPERATORS",
          "type": {
            "text": "Operator[]"
          },
          "default": "[\n  {\n    type: 'equal',\n    nbInputs: 1,\n    applyTo: allTypes,\n    optgroup: 'Equality',\n  },\n  {\n    type: 'not_equal',\n    nbInputs: 1,\n    applyTo: allTypes,\n    optgroup: 'Equality',\n  },\n  {\n    type: 'greater',\n    nbInputs: 1,\n    applyTo: [...numericTypes, ...dateTypes],\n    optgroup: 'Comparison',\n  },\n  {\n    type: 'less',\n    nbInputs: 1,\n    applyTo: [...numericTypes, ...dateTypes],\n    optgroup: 'Comparison',\n  },\n  {\n    type: 'contains',\n    nbInputs: 1,\n    applyTo: ['string'],\n    optgroup: 'String',\n  },\n  {\n    type: 'starts_with',\n    nbInputs: 1,\n    applyTo: ['string'],\n    optgroup: 'String',\n  },\n  {\n    type: 'ends_with',\n    nbInputs: 1,\n    applyTo: ['string'],\n    optgroup: 'String',\n  },\n  {\n    type: 'one_of',\n    nbInputs: 'many',\n    applyTo: [...allTypes].filter((t) => t !== 'boolean'),\n  },\n  {\n    type: 'not_any_of',\n    nbInputs: 'many',\n    applyTo: [...allTypes].filter((t) => t !== 'boolean'),\n  },\n  {\n    type: 'within_inclusive',\n    nbInputs: 2,\n    applyTo: [...numericTypes, ...dateTypes],\n    optgroup: 'Range',\n  },\n  {\n    type: 'within_exclusive',\n    nbInputs: 2,\n    applyTo: [...numericTypes, ...dateTypes],\n    optgroup: 'Range',\n  },\n  {\n    type: 'is_null',\n    nbInputs: 0,\n    applyTo: [...allTypes],\n    optgroup: 'Null',\n  },\n  {\n    type: 'not_null',\n    nbInputs: 0,\n    applyTo: [...allTypes],\n    optgroup: 'Null',\n  },\n]"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "BASE_OPERATORS",
          "declaration": {
            "name": "BASE_OPERATORS",
            "module": "src/config/operators.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/events.ts",
      "declarations": [],
      "exports": []
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-builder.helpers.ts",
      "declarations": [
        {
          "kind": "function",
          "name": "findOperateOnGroup",
          "return": {
            "type": {
              "text": ""
            }
          },
          "parameters": [
            {
              "name": "model",
              "type": {
                "text": "ModelGroup"
              },
              "description": "The root group to start searching from"
            },
            {
              "name": "groupId",
              "type": {
                "text": "string"
              },
              "description": "The Group ID to find"
            },
            {
              "name": "fn",
              "type": {
                "text": "ChildrenOperatorFn"
              },
              "description": "The function to apply to the children of the found group. A *new* object must be created and returned"
            }
          ],
          "description": "Finds a group within a model and applies a function to create a new children"
        },
        {
          "kind": "function",
          "name": "addGroupOrRule",
          "return": {
            "type": {
              "text": "ModelGroup"
            }
          },
          "parameters": [
            {
              "name": "model",
              "type": {
                "text": "ModelGroup"
              }
            },
            {
              "name": "parentGroupId",
              "type": {
                "text": "string"
              }
            },
            {
              "name": "newItem",
              "type": {
                "text": "ModelGroup | ModelRule"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "deleteGroup",
          "return": {
            "type": {
              "text": "ModelGroup"
            }
          },
          "parameters": [
            {
              "name": "model",
              "type": {
                "text": "ModelGroup"
              }
            },
            {
              "name": "groupIdToDelete",
              "type": {
                "text": "string"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "deleteRule",
          "return": {
            "type": {
              "text": "ModelGroup"
            }
          },
          "parameters": [
            {
              "name": "model",
              "type": {
                "text": "ModelGroup"
              }
            },
            {
              "name": "ruleIdToDelete",
              "type": {
                "text": "string"
              }
            }
          ]
        },
        {
          "kind": "variable",
          "name": "ROOT_GROUP",
          "type": {
            "text": "string"
          },
          "default": "'group-root'"
        },
        {
          "kind": "function",
          "name": "updateGroupData",
          "return": {
            "type": {
              "text": "ModelGroup"
            }
          },
          "parameters": [
            {
              "name": "model",
              "type": {
                "text": "ModelGroup"
              }
            },
            {
              "name": "groupIdToUpdate",
              "type": {
                "text": "string"
              }
            },
            {
              "name": "newData",
              "type": {
                "text": "EventsDetailMap[Events.UpdateGroup]['newData']"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "updateRuleData",
          "return": {
            "type": {
              "text": "ModelGroup"
            }
          },
          "parameters": [
            {
              "name": "model",
              "type": {
                "text": "ModelGroup"
              }
            },
            {
              "name": "ruleIdToUpdate",
              "type": {
                "text": "string"
              }
            },
            {
              "name": "newData",
              "type": {
                "text": "EventsDetailMap[Events.UpdateRule]['newData']"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "findOperateOnGroup",
          "declaration": {
            "name": "findOperateOnGroup",
            "module": "src/main/expression-builder.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "addGroupOrRule",
          "declaration": {
            "name": "addGroupOrRule",
            "module": "src/main/expression-builder.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "deleteGroup",
          "declaration": {
            "name": "deleteGroup",
            "module": "src/main/expression-builder.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "deleteRule",
          "declaration": {
            "name": "deleteRule",
            "module": "src/main/expression-builder.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "ROOT_GROUP",
          "declaration": {
            "name": "ROOT_GROUP",
            "module": "src/main/expression-builder.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "updateGroupData",
          "declaration": {
            "name": "updateGroupData",
            "module": "src/main/expression-builder.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "updateRuleData",
          "declaration": {
            "name": "updateRuleData",
            "module": "src/main/expression-builder.helpers.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-builder.styles.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "styles",
          "default": "css`\n  :host {\n    --item-vertical-spacing: 4px;\n    --item-border-radius: 5px;\n    --group-background-color: rgb(250 240 210 / 50%);\n    --group-border-color: #dcc896;\n    --group-border: 1px solid var(--group-border-color);\n    --group-padding: 10px;\n    --rule-background-color: rgb(255 255 255 / 90%);\n    --rule-border-color: #eee;\n    --rule-border: 1px solid var(--rule-border-color);\n    --rule-padding: 5px;\n    --rule-value-separator: 1px solid #ddd;\n    --error-icon-color: #f00;\n    --error-border-color: #f99;\n    --error-background-color: #fdd;\n    --ticks-width: 2px;\n    --ticks-color: #ccc;\n  }\n\n  p.test {\n    color: black;\n  }\n\n  .query-builder {\n    font-family: sans-serif;\n  }\n\n  .rules-group-container {\n    position: relative;\n    margin: var(--item-vertical-spacing) 0;\n    border-radius: var(--item-border-radius);\n    padding: var(--group-padding);\n    border: var(--group-border);\n    background: var(--group-background-color);\n  }\n\n  .rules-group-header {\n    margin-bottom: var(--group-padding);\n  }\n\n  .group-conditions {\n    display: inline-block;\n  }\n\n  .group-conditions .btn {\n    padding: 0.25rem 0.5rem;\n    font-size: 0.875rem;\n    line-height: 1.5;\n    border-radius: 0.2rem;\n    border: 1px solid #007bff;\n    color: #007bff;\n    background-color: transparent;\n    cursor: pointer;\n  }\n\n  .group-conditions .btn:hover {\n    background-color: #007bff;\n    color: #fff;\n  }\n\n  .group-conditions .btn.active {\n    background-color: #007bff;\n    color: #fff;\n  }\n\n  .group-actions {\n    display: inline-block;\n    float: right;\n  }\n\n  .rules-list {\n    list-style: none;\n    padding: 0 0 0 20px; /* Adjusted ticks position */\n    margin: 0;\n  }\n\n  .rule-container {\n    position: relative;\n    margin: var(--item-vertical-spacing) 0;\n    border-radius: var(--item-border-radius);\n    padding: var(--rule-padding);\n    border: var(--rule-border);\n    background: var(--rule-background-color);\n  }\n\n  .rule-header {\n    margin-bottom: 5px;\n  }\n\n  .rule-actions {\n    display: inline-block;\n    float: right;\n  }\n\n  .rule-field-container,\n  .rule-operator-container,\n  .rule-value-container {\n    display: inline-block;\n    margin: 0 5px 0 0;\n    vertical-align: middle;\n  }\n\n  .rule-value-container {\n    border-left: var(--rule-value-separator);\n    padding-left: 5px;\n  }\n\n  .rule-value-container label {\n    margin-bottom: 0;\n    font-weight: normal;\n  }\n\n  .rule-value-container label.block {\n    display: block;\n  }\n\n  .error-container {\n    display: none;\n    cursor: help;\n    color: var(--error-icon-color);\n    margin-left: 5px;\n  }\n\n  .rule-container.has-error,\n  .rules-group-container.has-error {\n    background-color: var(--error-background-color);\n    border-color: var(--error-border-color);\n  }\n\n  .rule-container.has-error .error-container,\n  .rules-group-container.has-error .error-container {\n    display: inline-block !important;\n  }\n\n  /* Ticks */\n  .rules-list > * {\n    position: relative;\n  }\n\n  .rules-list > *::before,\n  .rules-list > *::after {\n    content: '';\n    position: absolute;\n    left: -10px; /* Adjusted ticks position */\n    width: 10px; /* Adjusted ticks position */\n    border-color: var(--ticks-color);\n    border-style: solid;\n  }\n\n  .rules-list > *::before {\n    top: -2px; /* Adjusted ticks position */\n    height: calc(50% + var(--item-vertical-spacing));\n    border-width: 0 0 var(--ticks-width) var(--ticks-width);\n  }\n\n  .rules-list > *::after {\n    top: 50%;\n    border-width: 0 0 0 var(--ticks-width);\n    height: 50%;\n  }\n\n  .rules-list > *:first-child::before {\n    top: calc(-1 * var(--group-padding) - var(--ticks-width));\n    height: calc(50% + var(--group-padding) + var(--item-vertical-spacing));\n  }\n\n  .rules-list > *:last-child::before {\n    border-radius: 0 0 0 calc(2 * var(--ticks-width));\n  }\n\n  .rules-list > *:last-child::after {\n    display: none;\n  }\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "styles",
          "declaration": {
            "name": "styles",
            "module": "src/main/expression-builder.styles.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-builder.template.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "template",
          "default": "html<ExpressionBuilder>`\n  <div class=\"query-builder\">\n    ${when(\n      (x) => x.model !== null,\n      html<ExpressionBuilder>`\n        <expression-group\n          :model=${(x) => x.model}\n          :config=${(x) => x.config}\n          :styles=${(x) => x.styles}\n        ></expression-group>\n      `,\n    )}\n  </div>\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "template",
          "declaration": {
            "name": "template",
            "module": "src/main/expression-builder.template.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-builder.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "Top level component to allow the user to build expressions. It produces a generic payload which doesn't have any system by itself\nto evaluate or execute the built expression.\n\nThe basics required to work with this component:\n\nExpressionBuilder.config property to configure and input data and models into the component.\n\n_Event_ change - `Types.Group` emits the model configuration on change. If you create a child component of the expression builder\nwhere you want to use a different (e.g. domain specific) model then it will likely override then emit event and instead emit\nit's own model. To check the underlying `Types.Group` model check the ExpressionBuilder.model property.",
          "name": "ExpressionBuilder",
          "members": [
            {
              "kind": "field",
              "name": "config",
              "type": {
                "text": "Config"
              },
              "description": "config - `Types.Config` the configuration which is required to be set for the expression builder. All properties are\ndefined under this single object to enforce that they're kept in sync with one another.\n\nIf you want to set the expression of the expression builder you should do it via the `model` property on this object.\n\nIf you're using a child class of this component with a specific model implementation you likely *don't* want to set this\nproperty directly. See example 3."
            },
            {
              "kind": "field",
              "name": "styles",
              "type": {
                "text": "Styles | undefined"
              },
              "description": "styles - `Types.Styles` optional configuration which allows you to set custom element tag names to be used, as well as\ncustom css to be inserted into the shadow DOM."
            },
            {
              "kind": "field",
              "name": "model",
              "type": {
                "text": "ModelGroup | null"
              },
              "default": "null",
              "description": "model - `Types.Group` the current model which completely describes the state of the component.\n\n*IMPORTANT* you should not set this yourself via this property directly, you should always set it via the model property on the ExpressionBuilder.config block.\n\nYou may want to read from this variable to get the most up to date state, for example if you create a child component which\nhas a model which isn't valid for every single state (e.g. requires a complete rule) you can check this underlying model to\nverify what field or operator is selected."
            },
            {
              "kind": "field",
              "name": "ruleCount",
              "type": {
                "text": "number"
              },
              "privacy": "private",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "groupCount",
              "type": {
                "text": "number"
              },
              "privacy": "private",
              "default": "0"
            },
            {
              "kind": "method",
              "name": "dispatchChangeEvent",
              "privacy": "protected",
              "parameters": [
                {
                  "name": "group",
                  "type": {
                    "text": "Group"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "isValidConfig",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "parameters": [
                {
                  "name": "config",
                  "type": {
                    "text": "Config"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "initBaseModel",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "handleAddGroup",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handleAddGroup",
              "privacy": "private",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.AddGroup]>"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "handleAddRule",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handleAddRule",
              "privacy": "private",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.AddRule]>"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "handleDeleteGroup",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handleDeleteGroup",
              "privacy": "private",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.DelGroup]>"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "handleDeleteRule",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handleDeleteRule",
              "privacy": "private",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.DelRule]>"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "handleUpdateGroupData",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handleUpdateGroupData",
              "privacy": "private",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.UpdateGroup]>"
                  }
                }
              ]
            },
            {
              "kind": "field",
              "name": "handleUpdateRuleData",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "_handleUpdateRuleData",
              "privacy": "private",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.UpdateRule]>"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "name": "change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the expression model changes"
            },
            {
              "description": "Bubbled when a nested group add is requested",
              "name": "add-group"
            },
            {
              "description": "Bubbled when a group delete is requested",
              "name": "del-group"
            },
            {
              "description": "Bubbled when a rule add is requested",
              "name": "add-rule"
            },
            {
              "description": "Bubbled when a rule delete is requested",
              "name": "del-rule"
            },
            {
              "description": "Bubbled when group data changes",
              "name": "update-group"
            },
            {
              "description": "Bubbled when rule data changes",
              "name": "update-rule"
            }
          ],
          "superclass": {
            "name": "GenesisElement",
            "package": "@genesislcap/web-core"
          },
          "tagName": "expression-builder",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ExpressionBuilder",
          "declaration": {
            "name": "ExpressionBuilder",
            "module": "src/main/expression-builder.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "expression-builder",
          "declaration": {
            "name": "ExpressionBuilder",
            "module": "src/main/expression-builder.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/index.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./expression-builder"
          }
        },
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./expression-builder.styles"
          }
        },
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./expression-builder.template"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/utils/data-model.ts",
      "declarations": [
        {
          "kind": "function",
          "name": "groupToModelGroup",
          "return": {
            "type": {
              "text": "ModelGroup"
            }
          },
          "parameters": [
            {
              "name": "group",
              "type": {
                "text": "Group"
              }
            },
            {
              "name": "provider",
              "type": {
                "text": "MetadataProvider"
              }
            }
          ],
          "description": "Converts a Group to a ModelGroup (adds required metadata)"
        },
        {
          "kind": "function",
          "name": "modelGroupToGroup",
          "return": {
            "type": {
              "text": ""
            }
          },
          "parameters": [
            {
              "name": "modelGroup",
              "type": {
                "text": "ModelGroup"
              },
              "description": "The internal ModelGroup to convert."
            }
          ],
          "description": "Converts a ModelGroup (internal data structure) to a public Group structure.\nThis function recursively processes the rules within the group."
        },
        {
          "kind": "function",
          "name": "modelRuleToRule",
          "return": {
            "type": {
              "text": ""
            }
          },
          "parameters": [
            {
              "name": "modelRule",
              "type": {
                "text": "ModelRule"
              },
              "description": "The internal ModelRule to convert."
            }
          ],
          "description": "Converts a ModelRule (internal data structure) to a public Rule structure."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "groupToModelGroup",
          "declaration": {
            "name": "groupToModelGroup",
            "module": "src/utils/data-model.ts"
          }
        },
        {
          "kind": "js",
          "name": "modelGroupToGroup",
          "declaration": {
            "name": "modelGroupToGroup",
            "module": "src/utils/data-model.ts"
          }
        },
        {
          "kind": "js",
          "name": "modelRuleToRule",
          "declaration": {
            "name": "modelRuleToRule",
            "module": "src/utils/data-model.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/utils/formatting.ts",
      "declarations": [
        {
          "kind": "function",
          "name": "formatDateString",
          "parameters": [
            {
              "name": "date",
              "type": {
                "text": "Date"
              }
            }
          ],
          "description": "Gets the string representation from a `Date` which is the format a `date` input uses.\n`yyyy-mm-dd`.\nUses UTC methods to ensure consistent output regardless of timezone.\n\nUsed to convert a javascript date object into the required string format expected by the expression builder."
        },
        {
          "kind": "function",
          "name": "formatDateTimeString",
          "parameters": [
            {
              "name": "date",
              "type": {
                "text": "Date"
              }
            }
          ],
          "description": "Gets the string representation from a `Date` which is the format a `datetime-local` input uses.\n`yyyy-mm-ddThh:mm:ss`.\nUses UTC methods to ensure consistent output regardless of timezone.\n\nUsed to convert a javascript date object into the required string format expected by the expression builder."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "formatDateString",
          "declaration": {
            "name": "formatDateString",
            "module": "src/utils/formatting.ts"
          }
        },
        {
          "kind": "js",
          "name": "formatDateTimeString",
          "declaration": {
            "name": "formatDateTimeString",
            "module": "src/utils/formatting.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/utils/index.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./data-model"
          }
        },
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./formatting"
          }
        },
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./misc"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/utils/misc.ts",
      "declarations": [
        {
          "kind": "function",
          "name": "getFieldInput",
          "parameters": [
            {
              "name": "context",
              "type": {
                "text": "RuleValue | ModelRule"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "getFieldType",
          "parameters": [
            {
              "name": "context",
              "type": {
                "text": "RuleValue | ModelRule"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "processOptGroups",
          "return": {
            "type": {
              "text": "(T | { optgroup: string | null; xs: T[] })[]"
            }
          },
          "parameters": [
            {
              "name": "xs",
              "type": {
                "text": "T[]"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "applyCustomStyles",
          "return": {
            "type": {
              "text": "void"
            }
          },
          "parameters": [
            {
              "name": "component",
              "type": {
                "text": "HTMLElement"
              },
              "description": "The web component instance"
            },
            {
              "name": "styles",
              "type": {
                "text": "Styles | undefined | null"
              },
              "description": "The styles configuration object"
            },
            {
              "name": "styleKey",
              "type": {
                "text": "keyof NonNullable<Styles['customStyles']>"
              },
              "description": "The key in styles.customStyles to use for custom styles"
            }
          ],
          "description": "Utility function to add custom styles to a web component's shadow root"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "getFieldInput",
          "declaration": {
            "name": "getFieldInput",
            "module": "src/utils/misc.ts"
          }
        },
        {
          "kind": "js",
          "name": "getFieldType",
          "declaration": {
            "name": "getFieldType",
            "module": "src/utils/misc.ts"
          }
        },
        {
          "kind": "js",
          "name": "processOptGroups",
          "declaration": {
            "name": "processOptGroups",
            "module": "src/utils/misc.ts"
          }
        },
        {
          "kind": "js",
          "name": "applyCustomStyles",
          "declaration": {
            "name": "applyCustomStyles",
            "module": "src/utils/misc.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/types/index.ts",
      "declarations": [],
      "exports": [
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./public.types"
          }
        },
        {
          "kind": "js",
          "name": "*",
          "declaration": {
            "name": "*",
            "package": "./private.types"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/types/private.types.ts",
      "declarations": [],
      "exports": []
    },
    {
      "kind": "javascript-module",
      "path": "src/types/public.types.ts",
      "declarations": [],
      "exports": []
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-group/expression-group.styles.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "styles",
          "default": "css`\n  .rules-group-container {\n    border: 1px solid #ccc;\n    margin-bottom: 10px;\n    padding: 10px;\n  }\n\n  .rules-group-header {\n    margin-bottom: 5px;\n  }\n\n  .btn-group {\n    margin-right: 5px;\n  }\n\n  .btn {\n    padding: 0.25rem 0.5rem;\n    font-size: 0.875rem;\n    line-height: 1.5;\n    border-radius: 0.2rem;\n    cursor: pointer;\n  }\n\n  .btn-success {\n    color: #fff;\n    background-color: #28a745;\n    border-color: #28a745;\n  }\n\n  .btn-danger {\n    color: #fff;\n    background-color: #dc3545;\n    border-color: #dc3545;\n  }\n\n  .radio-group-container {\n    display: flex;\n  }\n\n  .rules-list {\n    list-style: none;\n    padding-left: 0;\n  }\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "styles",
          "declaration": {
            "name": "styles",
            "module": "src/main/expression-group/expression-group.styles.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-group/expression-group.template.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "template",
          "default": "html<ExpressionGroup>`\n  <div class=\"rules-group-container\">\n    <div class=\"rules-group-header\">${controlButtonsTemplate} ${combinatorsTemplate}</div>\n    <div class=\"rules-group-body\">\n      <div class=\"rules-list\">\n        ${repeat(\n          (x) => x.model?.children ?? [],\n          html<ModelRule | ModelGroup, ExpressionBuilder>`\n            ${whenElse(\n              (x) => 'children' in x,\n              html<ModelGroup>`\n                <expression-group\n                  :config=${(_, c) => c.parent.config}\n                  :styles=${(_, c) => c.parent.styles}\n                  :model=${(x) => x}\n                  :index=${(_, c) => c.index}\n                ></expression-group>\n              `,\n              html<ModelRule>`\n                <expression-rule\n                  :config=${(_, c) => c.parent.config}\n                  :styles=${(_, c) => c.parent.styles}\n                  :model=${(x) => x}\n                  :index=${(_, c) => c.index}\n                ></expression-rule>\n              `,\n            )}\n            ${when(\n              (_, loopCtx) => !loopCtx.isLast,\n              html<ModelRule | ModelGroup, ExpressionBuilder>`\n                <p class=\"group-combinator-link\">\n                  ${(_, innerCtx) => innerCtx.parent.model.combinator.type}\n                </p>\n              `,\n            )}\n          `,\n          { recycle: false, positioning: true },\n        )}\n      </div>\n    </div>\n  </div>\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "template",
          "declaration": {
            "name": "template",
            "module": "src/main/expression-group/expression-group.template.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-group/expression-group.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "Group node used inside expression-builder.",
          "name": "ExpressionGroup",
          "members": [
            {
              "kind": "field",
              "name": "config",
              "type": {
                "text": "Config"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "type": {
                "text": "Styles | undefined"
              }
            },
            {
              "kind": "field",
              "name": "model",
              "type": {
                "text": "ModelGroup"
              }
            },
            {
              "kind": "field",
              "name": "index",
              "type": {
                "text": "number"
              }
            },
            {
              "kind": "field",
              "name": "allowAddRule",
              "type": {
                "text": "boolean"
              },
              "readonly": true
            },
            {
              "kind": "field",
              "name": "allowAddGroup",
              "type": {
                "text": "boolean"
              },
              "readonly": true
            },
            {
              "kind": "method",
              "name": "dispatchAddRule",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "dispatchAddGroup",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "dispatchDeleteGroup",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "handleCombinatorChange",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "handleCustomCombinatorChange",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "updateCombinator",
              "privacy": "private",
              "parameters": [
                {
                  "name": "value",
                  "type": {
                    "text": "string"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "dispatchGroupDataUpdated",
              "parameters": [
                {
                  "name": "combinator",
                  "type": {
                    "text": "Combinator"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent"
              }
            },
            {
              "description": "Bubbled when adding a child rule",
              "name": "add-rule"
            },
            {
              "description": "Bubbled when adding a child group",
              "name": "add-group"
            },
            {
              "description": "Bubbled when deleting this group",
              "name": "del-group"
            },
            {
              "description": "Bubbled when combinator changes",
              "name": "update-group"
            }
          ],
          "superclass": {
            "name": "GenesisElement",
            "package": "@genesislcap/web-core"
          },
          "tagName": "expression-group",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ExpressionGroup",
          "declaration": {
            "name": "ExpressionGroup",
            "module": "src/main/expression-group/expression-group.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "expression-group",
          "declaration": {
            "name": "ExpressionGroup",
            "module": "src/main/expression-group/expression-group.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-rule/expression-rule.helpers.ts",
      "declarations": [
        {
          "kind": "function",
          "name": "defaultVal",
          "parameters": [
            {
              "name": "newOpt",
              "type": {
                "text": "Operator"
              }
            },
            {
              "name": "m",
              "type": {
                "text": "ModelRule"
              }
            }
          ],
          "description": "Gets the default value for a field accounting for\n- any default value hard coded on the config\n- any previous values when appropriate\n- account for different value types when switching operators"
        },
        {
          "kind": "function",
          "name": "getValue",
          "parameters": [
            {
              "name": "newOpt",
              "type": {
                "text": "Operator"
              }
            },
            {
              "name": "m",
              "type": {
                "text": "ModelRule"
              }
            }
          ],
          "description": "If the user has changed the operator on a rule then we try and remember their value when possible\nIf the operators differ with type (e.g. an operator has a `valueType`) then we always create a new field default via returning null)"
        },
        {
          "kind": "function",
          "name": "fieldDefault",
          "parameters": [
            {
              "name": "newOpt",
              "type": {
                "text": "Operator"
              }
            },
            {
              "name": "m",
              "type": {
                "text": "ModelRule"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "operatorChangedUpdatedModel",
          "return": {
            "type": {
              "text": "Rule"
            }
          },
          "parameters": [
            {
              "name": "newOperator",
              "type": {
                "text": "Operator"
              }
            },
            {
              "name": "model",
              "type": {
                "text": "ModelRule"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "valueChangedUpdateModel",
          "return": {
            "type": {
              "text": "Rule"
            }
          },
          "parameters": [
            {
              "name": "model",
              "type": {
                "text": "ModelRule"
              }
            },
            {
              "name": "value",
              "type": {
                "text": "any"
              }
            },
            {
              "name": "argIndex",
              "type": {
                "text": "number"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "isValueInvalid",
          "parameters": [
            {
              "name": "x",
              "type": {
                "text": "any"
              }
            }
          ],
          "description": "Test a value considered to be allowed for validation reasons\nA boolean cast to falsy is considered invalid, except special case\nthat we allow `0` because that's a valid numeric comparison.\nThis will consider blank strings invalid, to test against that explicitly the user\nshould define an operator such as `is_blank`\nThis shouldn't be used on a boolean value"
        },
        {
          "kind": "function",
          "name": "isPartialRuleError",
          "return": {
            "type": {
              "text": "boolean"
            }
          },
          "parameters": [
            {
              "name": "model",
              "type": {
                "text": "ModelRule"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "defaultVal",
          "declaration": {
            "name": "defaultVal",
            "module": "src/main/expression-rule/expression-rule.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "getValue",
          "declaration": {
            "name": "getValue",
            "module": "src/main/expression-rule/expression-rule.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "fieldDefault",
          "declaration": {
            "name": "fieldDefault",
            "module": "src/main/expression-rule/expression-rule.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "operatorChangedUpdatedModel",
          "declaration": {
            "name": "operatorChangedUpdatedModel",
            "module": "src/main/expression-rule/expression-rule.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "valueChangedUpdateModel",
          "declaration": {
            "name": "valueChangedUpdateModel",
            "module": "src/main/expression-rule/expression-rule.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "isValueInvalid",
          "declaration": {
            "name": "isValueInvalid",
            "module": "src/main/expression-rule/expression-rule.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "isPartialRuleError",
          "declaration": {
            "name": "isPartialRuleError",
            "module": "src/main/expression-rule/expression-rule.helpers.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-rule/expression-rule.styles.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "styles",
          "default": "css`\n  .rule-container {\n    border: 1px solid #eee;\n    margin-bottom: 5px;\n    padding: 5px;\n    display: grid;\n    grid-template-columns: auto 1fr;\n  }\n\n  .rule-container.error {\n    border-color: red;\n  }\n\n  .margin {\n    margin-left: calc(var(--design-unit) * 1px);\n    margin-right: calc(var(--design-unit) * 1px);\n  }\n\n  .rule-header {\n    margin-bottom: 5px;\n    display: flex;\n    justify-content: flex-end;\n  }\n\n  .rule-actions {\n    display: inline-block;\n  }\n\n  .rule-content {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n  }\n\n  .rule-field-container,\n  .rule-operator-container,\n  .rule-value-container {\n    display: inline-block;\n    margin: 0 5px 0 0;\n    vertical-align: middle;\n  }\n\n  .rule-value-container {\n    border-left: var(--rule-value-separator);\n    padding-left: 5px;\n  }\n\n  .rule-value-container label {\n    margin-bottom: 0;\n    font-weight: normal;\n  }\n\n  .rule-value-container label.block {\n    display: block;\n  }\n\n  expression-rule-value {\n    display: flex;\n  }\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "styles",
          "declaration": {
            "name": "styles",
            "module": "src/main/expression-rule/expression-rule.styles.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-rule/expression-rule.template.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "template",
          "default": "html<ExpressionRule>`\n  ${(context) => {\n    const buttonTag = context.styles?.customElements?.button || 'button';\n\n    return html<ExpressionRule>`\n      <div class=\"rule-container ${(x) => classNames(['error', x.error])}\">\n        <div class=\"rule-content\">\n          <expression-rule-field\nclass=\"margin\"\n          :fields=${(x) => x.config.fields}\n          :field=${(x) => x.model?.field}\n          :config=${(x) => x.config}\n          :styles=${(x) => x.styles}\n          @field-selected=${(x, c) =>\n            x.handleFieldSelected(c.event as CustomEvent<EventsDetailMap[Events.FieldSelected]>)}\n        ></expression-rule-field>\n        <expression-rule-operator\nclass=\"margin\"\n          :operators=${(x) => x.config.operators}\n          :field=${(x) => x.model.field}\n          :operator=${(x) => x.model?.operator}\n          :config=${(x) => x.config}\n          :styles=${(x) => x.styles}\n          @operator-selected=${(x, c) =>\n            x.handleOperatorSelected(\n              c.event as CustomEvent<EventsDetailMap[Events.OperatorSelected]>,\n            )}\n        ></expression-rule-operator>\n        ${repeat(\n          (x) => x.operandIterator,\n          html<true, ExpressionRule>`\n            <expression-rule-value\n              class=\"margin\"\n              :config=${(_, c) => c.parent.config}\n              :styles=${(_, c) => c.parent.styles}\n              :field=${(_, c) => c.parent.model.field}\n              :operator=${(_, c) => c.parent.model.operator}\n              :value=${(_, c) => c.parent.operandValue(c.index)}\n              value-index=${(_, c) => c.index}\n              ?variadic=${(_, c) => c.parent.model?.operator?.nbInputs === 'many'}\n              @value-updated=${(_, c) =>\n                c.parent.handleValueChanged(\n                  c.event as CustomEvent<EventsDetailMap[Events.ValueUpdated]>,\n                )}\n              @remove-variadic-operand=${(_, c) =>\n                c.parent.handleRemoveVarArg(\n                  c.event as CustomEvent<EventsDetailMap[Events.RemoveVarArg]>,\n                )}\n            ></expression-rule-value>\n          `,\n          { positioning: true, recycle: false },\n        )}\n        ${when(\n          (x) => x.model?.operator?.nbInputs === 'many',\n          html<ExpressionRule>`\n            <${buttonTag}\n              type=\"button\"\n              class=\"btn btn-sm btn-accept\"\n              @click=\"${(x) => x.dispatchAddVarArg()}\"\n            >\n              +\n            </${buttonTag}>\n          `,\n        )}\n        </div>\n\n        <div class=\"rule-header\">\n          <div class=\"btn-group rule-actions\">\n            <${buttonTag}\n              type=\"button\"\n              class=\"btn btn-sm btn-danger\"\n              data-delete=\"rule\"\n              @click=\"${(x, c) => x.dispatchDeleteRule(c.event)}\"\n            >\n              Delete Rule\n            </${buttonTag}>\n          </div>\n        </div>\n      </div>\n    `;\n  }}\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "template",
          "declaration": {
            "name": "template",
            "module": "src/main/expression-rule/expression-rule.template.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/expression-rule/expression-rule.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "Rule node used inside expression-builder.",
          "name": "ExpressionRule",
          "members": [
            {
              "kind": "field",
              "name": "config",
              "type": {
                "text": "Config"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "type": {
                "text": "Styles | undefined"
              }
            },
            {
              "kind": "field",
              "name": "model",
              "type": {
                "text": "ModelRule | null"
              }
            },
            {
              "kind": "field",
              "name": "index",
              "type": {
                "text": "number"
              }
            },
            {
              "kind": "field",
              "name": "error",
              "type": {
                "text": "boolean"
              },
              "default": "false"
            },
            {
              "kind": "method",
              "name": "variadicRule",
              "return": {
                "type": {
                  "text": "model is ModelRule & { operator: VariadicOperator; value: any[] }"
                }
              },
              "parameters": [
                {
                  "name": "model",
                  "type": {
                    "text": "ModelRule"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "operandValue",
              "parameters": [
                {
                  "name": "index",
                  "type": {
                    "text": "number"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "dispatchAddVarArg",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "handleRemoveVarArg",
              "return": {
                "type": {
                  "text": "void"
                }
              },
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.RemoveVarArg]>"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "dispatchDeleteRule",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "handleFieldSelected",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.FieldSelected]>"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "handleValueChanged",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.ValueUpdated]>"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "handleOperatorSelected",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "CustomEvent<EventsDetailMap[Events.OperatorSelected]>"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent"
              }
            },
            {
              "description": "Bubbled when deleting this rule",
              "name": "del-rule"
            },
            {
              "description": "Bubbled when field/operator/value changes",
              "name": "update-rule"
            }
          ],
          "attributes": [
            {
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "fieldName": "error"
            }
          ],
          "superclass": {
            "name": "GenesisElement",
            "package": "@genesislcap/web-core"
          },
          "tagName": "expression-rule",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ExpressionRule",
          "declaration": {
            "name": "ExpressionRule",
            "module": "src/main/expression-rule/expression-rule.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "expression-rule",
          "declaration": {
            "name": "ExpressionRule",
            "module": "src/main/expression-rule/expression-rule.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/rule-field/rule-field.template.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "template",
          "default": "html<RuleField>`\n  ${(context) => {\n    const selectTag = context.styles?.customElements?.select || 'select';\n    const optionTag = context.styles?.customElements?.option || 'option';\n    const optgroupTag = context.styles?.customElements?.optgroup || 'optgroup';\n\n    return html<RuleField>`\n      <${selectTag}\n        class=\"form-select\"\n        @change=${(x, c) => x.dispatchFieldsChanged(c.event)}\n        value=${(x) => x.field?.fieldId}\n      >\n        <${optionTag} value=\"\">Select a field</${optionTag}>\n        ${repeat(\n          (x) => x.groupedFieldss,\n          html<{ optgroup: string | null; xs: Field[] } | Field, RuleField>`\n            ${(groupOrFields) => {\n              if ('xs' in groupOrFields) {\n                return html<{\n                  optgroup: string | null;\n                  xs: Field[];\n                }>`\n                  <${optgroupTag} label=\"${(x) => x.optgroup}\">\n                    ${repeat(\n                      (x) => x.xs,\n                      html<Field>`\n                        <${optionTag}\n                          value=\"${(x) => x.fieldId}\"\n                          ?selected=${(x, c) => x.fieldId === c.parentContext.parent?.field?.fieldId}\n                        >\n                          ${(x) => x.label}\n                        </${optionTag}>\n                      `,\n                    )}\n                  </${optgroupTag}>\n                `;\n              } else {\n                return html<Field>`\n                  <${optionTag}\n                    value=\"${(x) => x.fieldId}\"\n                    ?selected=${(x, c) => x.fieldId === c.parent?.field?.fieldId}\n                  >\n                    ${(x) => x.label}\n                  </${optionTag}>\n                `;\n              }\n            }}\n          `,\n        )}\n      </${selectTag}>\n    `;\n  }}\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "template",
          "declaration": {
            "name": "template",
            "module": "src/main/rule-field/rule-field.template.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/rule-field/rule-field.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "Field selector for expression rules.",
          "name": "RuleField",
          "members": [
            {
              "kind": "field",
              "name": "fields",
              "type": {
                "text": "Field[]"
              },
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "field",
              "type": {
                "text": "Field"
              }
            },
            {
              "kind": "field",
              "name": "config",
              "type": {
                "text": "Config"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "type": {
                "text": "Styles | undefined"
              }
            },
            {
              "kind": "field",
              "name": "groupedFieldss",
              "type": {
                "text": "(Field | { optgroup: string | null; xs: Field[] })[]"
              },
              "readonly": true
            },
            {
              "kind": "method",
              "name": "dispatchFieldsChanged",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent"
              }
            },
            {
              "description": "Bubbled when the selected field changes",
              "name": "field-selected"
            }
          ],
          "superclass": {
            "name": "GenesisElement",
            "package": "@genesislcap/web-core"
          },
          "tagName": "expression-rule-field",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "RuleField",
          "declaration": {
            "name": "RuleField",
            "module": "src/main/rule-field/rule-field.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "expression-rule-field",
          "declaration": {
            "name": "RuleField",
            "module": "src/main/rule-field/rule-field.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/rule-operator/rule-operator.template.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "template",
          "default": "html<RuleOperator>`\n  ${(context) => {\n    const selectTag = context.styles?.customElements?.select || 'select';\n    const optionTag = context.styles?.customElements?.option || 'option';\n    const optgroupTag = context.styles?.customElements?.optgroup || 'optgroup';\n\n    return html<RuleOperator>`\n      <${selectTag}\n        class=\"form-select\"\n        @change=${(x, c) => x.handleOperatorChange(c.event)}\n        value=${(x) => x.operator?.type}\n      >\n        <${optionTag} value=\"\">Select an operator</${optionTag}>\n        ${repeat(\n          (x) => x.groupedOperators,\n          html<{ optgroup: string | null; xs: Operator[] } | Operator, RuleOperator>`\n            ${(groupOrOperator) => {\n              if ('xs' in groupOrOperator) {\n                return html<{ optgroup: string | null; xs: Operator[] }, RuleOperator>`\n                  <${optgroupTag} label=\"${groupOrOperator.optgroup}\">\n                    ${repeat(\n                      (x) => x.xs,\n                      html<Operator>`\n                        <${optionTag}\n                          value=\"${(x) => x.type}\"\n                          ?selected=${(x, c) => x.type === c.parentContext.parent.operator?.type}\n                          title=${(x) => x.tooltip}\n                        >\n                          ${(x) => x.label ?? x.type}\n                        </${optionTag}>\n                      `,\n                    )}\n                  </${optgroupTag}>\n                `;\n              } else {\n                return html<Operator, RuleOperator>`\n                  <${optionTag}\n                    value=\"${(x) => x.type}\"\n                    ?selected=${(x, c) => c.parent.operator?.type === x.type}\n                    title=${(x) => x.tooltip}\n                  >\n                    ${(x) => x.label ?? x.type}\n                  </${optionTag}>\n                `;\n              }\n            }}\n          `,\n        )}\n      </${selectTag}>\n    `;\n  }}\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "template",
          "declaration": {
            "name": "template",
            "module": "src/main/rule-operator/rule-operator.template.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/rule-operator/rule-operator.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "Operator selector for expression rules.",
          "name": "RuleOperator",
          "members": [
            {
              "kind": "field",
              "name": "operators",
              "type": {
                "text": "Operator[]"
              },
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "operator",
              "type": {
                "text": "Operator"
              }
            },
            {
              "kind": "field",
              "name": "field",
              "type": {
                "text": "Field | null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "config",
              "type": {
                "text": "Config"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "type": {
                "text": "Styles | undefined"
              }
            },
            {
              "kind": "field",
              "name": "allowedOperators",
              "type": {
                "text": "Operator[]"
              },
              "readonly": true
            },
            {
              "kind": "field",
              "name": "groupedOperators",
              "type": {
                "text": "(Operator | { optgroup: string | null; xs: Operator[] })[]"
              },
              "readonly": true
            },
            {
              "kind": "method",
              "name": "handleOperatorChange",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent"
              }
            },
            {
              "description": "Bubbled when the selected operator changes",
              "name": "operator-selected"
            }
          ],
          "superclass": {
            "name": "GenesisElement",
            "package": "@genesislcap/web-core"
          },
          "tagName": "expression-rule-operator",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "RuleOperator",
          "declaration": {
            "name": "RuleOperator",
            "module": "src/main/rule-operator/rule-operator.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "expression-rule-operator",
          "declaration": {
            "name": "RuleOperator",
            "module": "src/main/rule-operator/rule-operator.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/rule-value/rule-value.helpers.ts",
      "declarations": [
        {
          "kind": "function",
          "name": "isIntType",
          "parameters": [
            {
              "name": "type",
              "type": {
                "text": "Field['type']"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "isFloatType",
          "parameters": [
            {
              "name": "type",
              "type": {
                "text": "Field['type']"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "pattern",
          "parameters": [
            {
              "name": "type",
              "type": {
                "text": "Field['type']"
              }
            }
          ]
        },
        {
          "kind": "function",
          "name": "numberPatternValidator",
          "return": {
            "type": {
              "text": "string | null"
            }
          },
          "parameters": [
            {
              "name": "type",
              "type": {
                "text": "Field['type']"
              }
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "isIntType",
          "declaration": {
            "name": "isIntType",
            "module": "src/main/rule-value/rule-value.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "isFloatType",
          "declaration": {
            "name": "isFloatType",
            "module": "src/main/rule-value/rule-value.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "pattern",
          "declaration": {
            "name": "pattern",
            "module": "src/main/rule-value/rule-value.helpers.ts"
          }
        },
        {
          "kind": "js",
          "name": "numberPatternValidator",
          "declaration": {
            "name": "numberPatternValidator",
            "module": "src/main/rule-value/rule-value.helpers.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/rule-value/rule-value.styles.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "styles",
          "default": "css`\n  .text-input.error {\n    color: red;\n  }\n\n  div.value-and-validation {\n    display: inline-grid;\n    align-items: center;\n  }\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "styles",
          "declaration": {
            "name": "styles",
            "module": "src/main/rule-value/rule-value.styles.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/rule-value/rule-value.template.ts",
      "declarations": [
        {
          "kind": "variable",
          "name": "ruleValueTemplate",
          "default": "html<RuleValue>`\n  ${whenElse(\n    (x) => x.field,\n    templateSwitcher,\n    html<RuleValue>`\n      <div>Select a field to set value</div>\n    `,\n  )}\n`"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ruleValueTemplate",
          "declaration": {
            "name": "ruleValueTemplate",
            "module": "src/main/rule-value/rule-value.template.ts"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/main/rule-value/rule-value.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "Value editor for expression rules.",
          "name": "RuleValue",
          "members": [
            {
              "kind": "field",
              "name": "valueIndex",
              "type": {
                "text": "string"
              }
            },
            {
              "kind": "field",
              "name": "variadic",
              "type": {
                "text": "boolean"
              },
              "default": "false"
            },
            {
              "kind": "field",
              "name": "validationError",
              "type": {
                "text": "boolean"
              },
              "default": "false"
            },
            {
              "kind": "field",
              "name": "validationMsg",
              "type": {
                "text": "string"
              }
            },
            {
              "kind": "field",
              "name": "field",
              "type": {
                "text": "Field | null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "operator",
              "type": {
                "text": "Operator | null"
              },
              "default": "null"
            },
            {
              "kind": "field",
              "name": "value",
              "type": {
                "text": "any"
              }
            },
            {
              "kind": "field",
              "name": "config",
              "type": {
                "text": "Config"
              }
            },
            {
              "kind": "field",
              "name": "styles",
              "type": {
                "text": "Styles | undefined"
              }
            },
            {
              "kind": "method",
              "name": "validateInput",
              "return": {
                "type": {
                  "text": "string | null"
                }
              },
              "parameters": [
                {
                  "name": "value",
                  "type": {
                    "text": "string"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "handleInputChange",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "Event"
                  }
                }
              ]
            },
            {
              "kind": "method",
              "name": "handleRemoveVariadicOperand"
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent"
              }
            },
            {
              "description": "Bubbled when operand value changes",
              "name": "value-updated"
            },
            {
              "description": "Bubbled when a variadic operand is removed",
              "name": "remove-variadic-operand"
            }
          ],
          "attributes": [
            {
              "name": "value-index",
              "type": {
                "text": "string"
              },
              "fieldName": "valueIndex"
            },
            {
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "fieldName": "variadic"
            },
            {
              "name": "validation-error",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "fieldName": "validationError"
            },
            {
              "name": "validation-msg",
              "type": {
                "text": "string"
              },
              "fieldName": "validationMsg"
            }
          ],
          "superclass": {
            "name": "GenesisElement",
            "package": "@genesislcap/web-core"
          },
          "tagName": "expression-rule-value",
          "customElement": true
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "RuleValue",
          "declaration": {
            "name": "RuleValue",
            "module": "src/main/rule-value/rule-value.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "expression-rule-value",
          "declaration": {
            "name": "RuleValue",
            "module": "src/main/rule-value/rule-value.ts"
          }
        }
      ]
    }
  ]
}
