{
  "schemaVersion": "1.0.0",
  "readme": "",
  "modules": [
    {
      "kind": "javascript-module",
      "path": "src/EventTreeNode.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Custom event type for the AST",
          "name": "NodeEvent",
          "members": [
            {
              "kind": "method",
              "name": "stopPropagation",
              "description": "do not propagate the events to parent nodes"
            },
            {
              "kind": "method",
              "name": "stopBroadcast",
              "description": "Do not broadcast to the children of this node anymore"
            },
            {
              "kind": "field",
              "name": "type",
              "description": "Event type / name",
              "type": {
                "text": "string"
              },
              "default": "type"
            },
            {
              "kind": "field",
              "name": "path",
              "type": {
                "text": "array"
              },
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "target",
              "type": {
                "text": "undefined"
              },
              "default": "undefined"
            },
            {
              "kind": "field",
              "name": "bubbles",
              "description": "should the Event bubble",
              "type": {
                "text": "boolean"
              },
              "default": "bubbles"
            },
            {
              "kind": "field",
              "name": "detail",
              "description": "Event details",
              "type": {
                "text": "*"
              },
              "default": "detail"
            },
            {
              "kind": "field",
              "name": "cancelBubble",
              "type": {
                "text": "boolean"
              },
              "description": "If you are in a parent element and set this to true it will not bubble",
              "default": "false"
            },
            {
              "kind": "field",
              "name": "cancelBroadcast",
              "type": {
                "text": "boolean"
              },
              "description": "if you are in a child element and set this to true, the event will not broadcast downwards",
              "default": "false"
            }
          ]
        },
        {
          "kind": "class",
          "description": "Simulates a tree which can handle events and broadcast events to all nodes",
          "name": "EventTreeNode",
          "members": [
            {
              "kind": "method",
              "name": "moveNode",
              "parameters": [
                {
                  "name": "oldIndex"
                },
                {
                  "name": "newIndex"
                }
              ],
              "description": "move the position of an item from an index to an index.\n\nKeep in mind that this is not swaping!\n\nhttps://stackoverflow.com/questions/5306680/move-an-array-element-from-one-array-position-to-another"
            },
            {
              "kind": "method",
              "name": "addChildProperty",
              "parameters": [
                {
                  "name": "name"
                },
                {
                  "name": "treeNode"
                }
              ],
              "description": "shorthand function to add a property as child node",
              "return": {
                "type": {
                  "text": "*"
                }
              }
            },
            {
              "kind": "method",
              "name": "addEventListener",
              "parameters": [
                {
                  "name": "type"
                },
                {
                  "name": "handler"
                },
                {
                  "name": "options",
                  "default": "{}",
                  "description": "for once,..."
                }
              ],
              "description": "Add a listener to a node"
            },
            {
              "kind": "method",
              "name": "removeEventListener",
              "parameters": [
                {
                  "name": "type"
                },
                {
                  "name": "handler"
                }
              ],
              "description": "Removes the listener from a node"
            },
            {
              "kind": "method",
              "name": "dispatchNodeEvent",
              "parameters": [
                {
                  "name": "event",
                  "type": {
                    "text": "NodeEvent"
                  }
                }
              ],
              "description": "Dispatch an event",
              "return": {
                "type": {
                  "text": "*"
                }
              }
            },
            {
              "kind": "method",
              "name": "broadcastEvent",
              "parameters": [
                {
                  "name": "event"
                }
              ],
              "description": "Broadcast the event to node and all childNodes and their childNodes\nBubbling is ignored, but propagation can be stopped",
              "return": {
                "type": {
                  "text": "*"
                }
              }
            },
            {
              "kind": "method",
              "name": "__triggerNodeEvents",
              "parameters": [
                {
                  "name": "event"
                }
              ]
            },
            {
              "kind": "field",
              "name": "__parentNode",
              "default": "parentNode"
            },
            {
              "kind": "field",
              "name": "__eventListener",
              "type": {
                "text": "object"
              },
              "default": "{}"
            },
            {
              "kind": "field",
              "name": "__childNodes",
              "type": {
                "text": "array"
              },
              "default": "[]"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "NodeEvent",
          "declaration": {
            "name": "NodeEvent",
            "module": "src/EventTreeNode.js"
          }
        },
        {
          "kind": "js",
          "name": "EventTreeNode",
          "declaration": {
            "name": "EventTreeNode",
            "module": "src/EventTreeNode.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/ValidatorRegistry.js",
      "declarations": [
        {
          "kind": "class",
          "description": "This is used by the FieldNode to validate against specified constraints.\nScalar values must not be registered.",
          "name": "ValidatorRegistry",
          "members": [
            {
              "kind": "method",
              "name": "register",
              "static": true,
              "parameters": [
                {
                  "name": "typename",
                  "type": {
                    "text": "String"
                  }
                },
                {
                  "name": "ValidatorClass",
                  "type": {
                    "text": "Class"
                  }
                }
              ],
              "description": "Register a validator for a specific type."
            },
            {
              "kind": "method",
              "name": "getValidator",
              "static": true,
              "parameters": [
                {
                  "name": "typename",
                  "type": {
                    "text": "String"
                  }
                }
              ],
              "description": "Receive a validator for a specific complex type",
              "return": {
                "type": {
                  "text": "*|boolean"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorRegistry",
          "declaration": {
            "name": "ValidatorRegistry",
            "module": "src/ValidatorRegistry.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/environment.js",
      "declarations": [
        {
          "kind": "class",
          "description": "This class stores your environment data,\n- like the api services and types, which is used by the data components\n- the current locale, which is used by the i18n package\n- the acceptLanguage, which is used by the data components",
          "name": "Env"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "Env",
          "declaration": {
            "name": "Env",
            "module": "src/environment.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/furo.js",
      "declarations": [],
      "exports": [
        {
          "kind": "js",
          "name": "Env",
          "declaration": {
            "name": "Env",
            "module": "./environment.js"
          }
        },
        {
          "kind": "js",
          "name": "i18n",
          "declaration": {
            "name": "i18n",
            "module": "./i18n.js"
          }
        },
        {
          "kind": "js",
          "name": "Init",
          "declaration": {
            "name": "Init",
            "module": "./system.js"
          }
        },
        {
          "kind": "js",
          "name": "Sys",
          "declaration": {
            "name": "Sys",
            "module": "./system.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/i18n.js",
      "declarations": [
        {
          "kind": "class",
          "description": "The built in i18n is a trivial translation mechanism which translates keys (words)\na method for pluralized keys (words with numbers) is available but not implemented.\n\nYou can override the builtin methods in your init file, as long you keep *i18n.t* and *i18n.n*\n\n\n## Usage\nAfter you have registered a translation file, you can use **i18n** in your components.\n\n\n```javascript\n// import i18n\nimport {i18n} from \"@furo/framework/src/i18n\"\n\n// use it in your source\n let label = i18n.t(\"key\");\n\n// use it in your template like this\n  render() {\n    // language=HTML\n    return html` <div>${i18n.t(\"key\")}</div>`;\n }\n\n```\n\n## Register a translation file and use custom translation methods\nRegister i18n in the init phase of your application.\n\n```javascript\nimport {Init, i18n, Env, Iconset} from \"@furo/framework/src/furo.js\";\n\n// import your translations\nimport {Translations} from \"./translations\";\n\n// register your translations\ni18n.registerResBundle(Translations);\n\n// Apply custom Intl methods\ni18n.t = (key) => {\n   let b = i18n.resbundle[Env.locale.toLowerCase().replace(\"-\", \"_\")] || i18n.resbundle['de_ch'];\n\n   if (b === undefined) {\n       console.warn('No resource bundle with locale ' + Env.locale + ' exists.');\n       return\n   }\n\n   const res = key.split('.').reduce((acc, part) => acc && acc[part], b);\n   return  (res ? res : key + '**');\n};\n// Apply custom Intl methods for pluralized keys\ni18n.n = (key, num) => {\n   let t = i18n.resbundle[Env.locale.toLowerCase().replace(\"-\", \"_\")] || i18n.resbundle['de_ch'];\n\n   if (t === undefined) {\n       console.warn('No resource bundle with locale ' + Env.locale + ' exists.');\n       return\n   }\n\n   let p = key.split(\".\");\n   for (let i = 0; i < p.length; i++) {\n       if (t[p[i]]) {\n           t = t[p[i]];\n       } else {\n           console.warn(\"key does not exist\", key);\n           return;\n       }\n   }\n\n   if (t) {\n       if (num === 1) {\n           if (t.one) {\n               return t.one(num);\n           } else {\n               console.warn(\"key does not exist\", key + \".one\");\n               return num;\n           }\n       }\n       if (num > 1) {\n           if (t.many) {\n               return t.many(num);\n           } else {\n               console.warn(\"key does not exist\", key + \".many\");\n               return num;\n           }\n       }\n       if (t.none) {\n           return t.none(num);\n       } else {\n           console.warn(\"key does not exist\", key + \".none\");\n           return num;\n       }\n\n   }\n};\n\n```",
          "name": "i18n",
          "members": [
            {
              "kind": "method",
              "name": "registerResBundle",
              "static": true,
              "parameters": [
                {
                  "name": "bundle"
                }
              ]
            },
            {
              "kind": "method",
              "name": "t",
              "static": true,
              "parameters": [
                {
                  "name": "key"
                }
              ]
            },
            {
              "kind": "method",
              "name": "n",
              "static": true,
              "parameters": [
                {
                  "name": "key"
                },
                {
                  "name": "num"
                }
              ]
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "i18n",
          "declaration": {
            "name": "i18n",
            "module": "src/i18n.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/system.js",
      "declarations": [
        {
          "kind": "class",
          "description": "The init class is used to init your *Env*, the API services and the API types.\n\nUse the init package in the init phase of your application\n\n## example init\n\n\n```javascript\n// -- initialize application env, theme, api\nimport  {Init,Iconset} from \"@furo/framework/src/furo.js\";\nimport {Services, Types} from \"@furo/specs/build/data_environment.js\"\nInit.registerApiServices(Services);\nInit.registerApiTypes(Types);\n//Attention: Styling is defined in main-stage\nimport {FuroBaseIcons} from \"@furo/icon/assets/iconsets/baseIcons\";\nimport {MapsIcons} from \"@furo/icon/assets/iconsets/mapsIcons\";\nimport {PlacesIcons} from \"@furo/icon/assets/iconsets/placesIcons\";\nimport {CommunicationIcons} from \"@furo/icon/assets/iconsets/communicationIcons\";\nimport {NotificationIcons} from \"@furo/icon/assets/iconsets/notificationIcons\";\nimport {FuroDocIcons} from \"./assets/iconset\";\nimport {AvIcons} from \"@furo/icon/assets/iconsets/avIcons\";\nimport {DeviceIcons} from \"@furo/icon/assets/iconsets/deviceIcons\";\nimport {EditorIcons} from \"@furo/icon/assets/iconsets/editorIcons\";\nimport {SocialIcons} from \"@furo/icon/assets/iconsets/socialIcons\";\nimport {HardwareIcons} from \"@furo/icon/assets/iconsets/hardwareIcons\";\nimport {ImageIcons} from \"@furo/icon/assets/iconsets/imageIcons\";\n\n\nIconset.registerIconset(\"furo\", FuroDocIcons);\nIconset.registerIconset(\"default\", FuroBaseIcons);\nIconset.registerIconset(\"av\", AvIcons);\nIconset.registerIconset(\"communication\", CommunicationIcons);\nIconset.registerIconset(\"device\", DeviceIcons);\nIconset.registerIconset(\"editor\", EditorIcons);\nIconset.registerIconset(\"social\", SocialIcons);\nIconset.registerIconset(\"places\", PlacesIcons);\nIconset.registerIconset(\"notification\", NotificationIcons);\nIconset.registerIconset(\"map\", MapsIcons);\nIconset.registerIconset(\"hardware\", HardwareIcons);\nIconset.registerIconset(\"image\", ImageIcons);\n\n```",
          "name": "Init",
          "members": [
            {
              "kind": "method",
              "name": "registerEnv",
              "static": true,
              "parameters": [
                {
                  "name": "section"
                },
                {
                  "name": "data"
                }
              ]
            },
            {
              "kind": "method",
              "name": "registerApiServices",
              "static": true,
              "parameters": [
                {
                  "name": "services"
                }
              ]
            },
            {
              "kind": "method",
              "name": "registerApiTypes",
              "static": true,
              "parameters": [
                {
                  "name": "types"
                }
              ]
            },
            {
              "kind": "method",
              "name": "registerCustomValidator",
              "static": true,
              "parameters": [
                {
                  "name": "typename",
                  "type": {
                    "text": "String"
                  }
                },
                {
                  "name": "ValidatorClass",
                  "type": {
                    "text": "Class"
                  }
                }
              ],
              "description": "Register a validator for a specific type."
            },
            {
              "kind": "method",
              "name": "addApiTypeSpec",
              "static": true,
              "parameters": [
                {
                  "name": "typename"
                },
                {
                  "name": "spec"
                }
              ],
              "description": "Add a single type spec to the registry\n\nAttention: If the name already exist, the old entry is overwritten."
            },
            {
              "kind": "method",
              "name": "addApiServiceSpec",
              "static": true,
              "parameters": [
                {
                  "name": "servicename"
                },
                {
                  "name": "spec"
                }
              ],
              "description": "Add a single service spec to the registry\n\nAttention: If the name already exist, the old entry is overwritten."
            },
            {
              "kind": "method",
              "name": "applyCustomApiPrefixToServicesAndTypes",
              "static": true,
              "description": "Apply the prefix to all service deeplinks and to all furo.Reference types with defaults",
              "parameters": [
                {
                  "name": "prefix"
                }
              ]
            },
            {
              "kind": "method",
              "name": "translateStaticTypeMessages",
              "static": true,
              "description": "Translates spec content like meta.label, hints"
            }
          ]
        },
        {
          "kind": "class",
          "description": "Sys allows you to set the locale",
          "name": "Sys",
          "members": [
            {
              "kind": "method",
              "name": "setLocale",
              "static": true,
              "parameters": [
                {
                  "name": "locale"
                }
              ]
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "Init",
          "declaration": {
            "name": "Init",
            "module": "src/system.js"
          }
        },
        {
          "kind": "js",
          "name": "Sys",
          "declaration": {
            "name": "Sys",
            "module": "src/system.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/BaseSpecValidators.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Validators for furo base types and google well known types",
          "name": "BaseSpecValidators",
          "members": [
            {
              "kind": "method",
              "name": "registerAll",
              "static": true,
              "description": "Register all validators. This should be done in your init phase of your app.\n```js\nimport {BaseSpecValidators} from '@furo/framework/src/BaseSpecValidators/RegisterAll.js';\n\nBaseSpecValidators.registerAll()\n```"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "BaseSpecValidators",
          "declaration": {
            "name": "BaseSpecValidators",
            "module": "src/BaseSpecValidators/BaseSpecValidators.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorFuroBigDecimal.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A class to validate constraints on type of <code>furo.BigDecimal</code>",
          "name": "ValidatorFuroBigDecimal",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorFuroBigDecimal",
          "declaration": {
            "name": "ValidatorFuroBigDecimal",
            "module": "src/BaseSpecValidators/ValidatorFuroBigDecimal.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorFuroFatNumeric.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A class to validate constraints on type of <code>google.protobuf.[Numeric type]Value, furo.fat.[Numeric type]</code>",
          "name": "ValidatorFuroFatNumeric",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorFuroFatNumeric",
          "declaration": {
            "name": "ValidatorFuroFatNumeric",
            "module": "src/BaseSpecValidators/ValidatorFuroFatNumeric.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorFuroFatString.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A class to validate constraints on type of <code>google.protobuf.StringValue, furo.fat.String</code>",
          "name": "ValidatorFuroFatString",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorFuroFatString",
          "declaration": {
            "name": "ValidatorFuroFatString",
            "module": "src/BaseSpecValidators/ValidatorFuroFatString.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorFuroReference.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A class to validate constraints on type <code>furo.Reference</code",
          "name": "ValidatorFuroReference",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "description": "checks field constraints",
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorFuroReference",
          "declaration": {
            "name": "ValidatorFuroReference",
            "module": "src/BaseSpecValidators/ValidatorFuroReference.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorGoogleProtobufBoolValue.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A class to validate constraints on type of <code>google.protobuf.BoolValue</code>",
          "name": "ValidatorGoogleProtobufBoolValue",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorGoogleProtobufBoolValue",
          "declaration": {
            "name": "ValidatorGoogleProtobufBoolValue",
            "module": "src/BaseSpecValidators/ValidatorGoogleProtobufBoolValue.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorGoogleProtobufFloatValue.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A class to validate constraints on type of <code>google.protobuf.FloatValue</code>",
          "name": "ValidatorGoogleProtobufFloatValue",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorGoogleProtobufFloatValue",
          "declaration": {
            "name": "ValidatorGoogleProtobufFloatValue",
            "module": "src/BaseSpecValidators/ValidatorGoogleProtobufFloatValue.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorGoogleProtobufInt64Value.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A class to validate constraints on type of <code>google.protobuf.Int64Value</code>",
          "name": "ValidatorGoogleProtobufInt64Value",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorGoogleProtobufInt64Value",
          "declaration": {
            "name": "ValidatorGoogleProtobufInt64Value",
            "module": "src/BaseSpecValidators/ValidatorGoogleProtobufInt64Value.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorGoogleProtobufTimestamp.js",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "ValidatorGoogleProtobufTimestamp",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "description": "checks field constraints",
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorGoogleProtobufTimestamp",
          "declaration": {
            "name": "ValidatorGoogleProtobufTimestamp",
            "module": "src/BaseSpecValidators/ValidatorGoogleProtobufTimestamp.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorGoogleTypeDate.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A class to validate constraints on type <code>google.type.Date</code",
          "name": "ValidatorGoogleTypeDate",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "description": "checks constraints",
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            },
            {
              "kind": "method",
              "name": "isEmpty",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "description": "checks if type date is empty",
              "return": {
                "type": {
                  "text": ""
                }
              }
            },
            {
              "kind": "method",
              "name": "createDateFromType",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "description": "creates a JS UTC Date from google.type.Date struct",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "Date"
                }
              }
            },
            {
              "kind": "method",
              "name": "createDateFromConstraint",
              "static": true,
              "parameters": [
                {
                  "name": "constraints"
                },
                {
                  "name": "field"
                }
              ],
              "description": "creates a JS midnight UTC Date from furo/specs constraints",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "Date"
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorGoogleTypeDate",
          "declaration": {
            "name": "ValidatorGoogleTypeDate",
            "module": "src/BaseSpecValidators/ValidatorGoogleTypeDate.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/BaseSpecValidators/ValidatorGoogleTypeMoney.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A class to validate constraints on type <code>google.type.Money</code",
          "name": "ValidatorGoogleTypeMoney",
          "members": [
            {
              "kind": "method",
              "name": "validateConstraints",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "description": "checks field constraints",
              "return": {
                "type": {
                  "text": "Promise<unknown>"
                }
              }
            },
            {
              "kind": "method",
              "name": "isEmpty",
              "static": true,
              "parameters": [
                {
                  "name": "field"
                }
              ],
              "description": "checks if type money is empty",
              "return": {
                "type": {
                  "text": ""
                }
              }
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ValidatorGoogleTypeMoney",
          "declaration": {
            "name": "ValidatorGoogleTypeMoney",
            "module": "src/BaseSpecValidators/ValidatorGoogleTypeMoney.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/FuroFeatureToggler/FuroFeatureToggle.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Use the FuroFeatureToggle to control features from a central registry.\nFuroFeatureToggle only needs a key and a boolean value.\nThese key can be set at any time.\nA requested key which was not set, is interpreted as false.\n\n## Available toggles\nFollowing toggles are given, use the one which is appropriate to your problem.\nSometimes you want to hide some parts if a key is true and sometimes you have to do the opposite.\n\n- `data-furo-toggle-append` Appends the element on true state of the key, removes the element on false state\n- `data-furo-toggle-remove` Removes the element on true state of the key, appends the element on false state\n\n- `data-furo-toggle-hide` Adds a hidden attribute to the element on true state of the key, removes the attribute on false state\n- `data-furo-toggle-show` Removes a hidden attribute from the element on true state of the key, adds the attribute on false state\n\n- `data-furo-toggle-disable` Adds a disabled attribute to the element on true state of the key, removes the attribute on false state\n- `data-furo-toggle-enable` Removes a disabled attribute from the element on true state of the key, adds the attribute on false state\n\n- `data-furo-toggle-custom-add` Adds the custom attribute to the element on true state of the key, removes the attribute on false state\n- `data-furo-toggle-custom-remove` Removes the custom attribute from the element on true state of the key, adds the attribute on false state\n\n## Example usage:\n### js\n```js\n// import FuroFeatureToggle\nimport { FuroFeatureToggle } from '@furo/framework/src/FuroFeatureToggler/FuroFeatureToggle.js';\n\n// enabling for a part of your component\nFuroFeatureToggle.parseDom(this.shadowRoot)\n\n// enabling for a part of your component\n FuroFeatureToggle.parseDom(this.shadowRoot.querySelector('#partial'))\n\n\n// setting a key\n FuroFeatureToggle.setKeyState('feature.key', true);\n\n```\n### html\n\n```html\n remove:\n <span data-furo-toggle-remove='feature.key'>\n   span is removed if key state is true, otherwise appended</span>\n\n append:\n <span data-furo-toggle-append='feature.key'>\n   span is appended when key state true, otherwise removed</span>\n\n enable:\n <button data-furo-toggle-disable='feature.key'>\n   button is enabled when state is true, otherwise disabled</button>\n\n disable:\n <button data-furo-toggle-enable='feature.key'>\n   button is disabled when state is true, otherwise enabled</button>\n\n hide:\n <div data-furo-toggle-hide='feature.key'>\n   Div will get a hidden attribute when the key state is true, otherwise hidden\n </div>\n\n show:\n <div data-furo-toggle-show='feature.key'>\n  The hidden attribute will be removed when the key state is true, otherwise the hidden attribute will be set.\n </div>\n\n custom add:\n <div data-furo-toggle-custom-add='feature.key, ATTRIBUTE, VALUE'>\n  Div will get a custom attribute when the key state is true, otherwise the custom attribute will be removed.\n </div>\n\n custom remove:\n <div data-furo-toggle-custom-remove='feature.key, ATTRIBUTE, VALUE'>\n  The custom attribute will be removed when the key state is true, otherwise the custom attribute will be set.\n </div>\n\n```",
          "name": "FuroFeatureToggle",
          "members": [
            {
              "kind": "method",
              "name": "parseDom",
              "static": true,
              "parameters": [
                {
                  "name": "root",
                  "description": "The dom root you want to be managed.",
                  "type": {
                    "text": "DOM"
                  }
                }
              ],
              "description": "Parses the DOM for feature toggles and applies them."
            },
            {
              "kind": "method",
              "name": "setKeyState",
              "static": true,
              "parameters": [
                {
                  "name": "key",
                  "description": "The key of a feature.",
                  "type": {
                    "text": "String"
                  }
                },
                {
                  "name": "state",
                  "description": "The state to set.",
                  "type": {
                    "text": "Boolean"
                  }
                }
              ],
              "description": "Use this method to register a key with an initial state or to update a state."
            },
            {
              "kind": "method",
              "name": "registerKeyMap",
              "static": true,
              "parameters": [
                {
                  "name": "keymap",
                  "description": "String,Boolean} Object with keys and their initial state",
                  "type": {
                    "text": "map"
                  }
                }
              ],
              "description": "Use this method to bulk register feature toggles."
            },
            {
              "kind": "method",
              "name": "getKeyState",
              "static": true,
              "parameters": [
                {
                  "name": "key",
                  "description": "The key of a feature.",
                  "type": {
                    "text": "String"
                  }
                }
              ],
              "description": "Reads the current state of a key",
              "return": {
                "type": {
                  "text": "Boolean"
                }
              }
            },
            {
              "kind": "method",
              "name": "registerCallback",
              "static": true,
              "parameters": [
                {
                  "name": "key",
                  "description": "The key of a feature.",
                  "type": {
                    "text": "String"
                  }
                },
                {
                  "name": "cb",
                  "description": "The callback method signature is a boolean for the current state and the KeyState object.",
                  "type": {
                    "text": "function(Boolean, KeyState)"
                  }
                }
              ],
              "description": "Register a custom callback on a key.\n\nThe callback will be immediately executed when you register it and every time the key state changes."
            },
            {
              "kind": "method",
              "name": "_mustKey",
              "static": true,
              "parameters": [
                {
                  "name": "key",
                  "description": "The key of a feature.",
                  "type": {
                    "text": "String"
                  }
                },
                {
                  "name": "data",
                  "default": "undefined"
                }
              ],
              "description": "Ensure that a key is created",
              "privacy": "private"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "FuroFeatureToggle",
          "declaration": {
            "name": "FuroFeatureToggle",
            "module": "src/FuroFeatureToggler/FuroFeatureToggle.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/FuroFeatureToggler/KeyState.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Handler of a single key, this class is used by FuroFeatureToggle",
          "name": "KeyState",
          "members": [
            {
              "kind": "method",
              "name": "registerAppender",
              "parameters": [
                {
                  "name": "original",
                  "description": "original dom node",
                  "type": {
                    "text": "domnode"
                  }
                }
              ],
              "description": "register appender",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "registerRemover",
              "parameters": [
                {
                  "name": "original",
                  "description": "original dom node",
                  "type": {
                    "text": "domnode"
                  }
                }
              ],
              "description": "register remover",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "registerShower",
              "parameters": [
                {
                  "name": "element",
                  "description": "original dom node",
                  "type": {
                    "text": "domnode"
                  }
                }
              ],
              "description": "shower",
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "registerHider",
              "parameters": [
                {
                  "name": "element",
                  "description": "original dom node",
                  "type": {
                    "text": "domnode"
                  }
                }
              ],
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "registerEnabler",
              "parameters": [
                {
                  "name": "element",
                  "description": "original dom node",
                  "type": {
                    "text": "domnode"
                  }
                }
              ],
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "registerDisabler",
              "parameters": [
                {
                  "name": "element",
                  "description": "original dom node",
                  "type": {
                    "text": "domnode"
                  }
                }
              ],
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "registerCustomAdder",
              "parameters": [
                {
                  "name": "element",
                  "description": "original dom node",
                  "type": {
                    "text": "domnode"
                  }
                }
              ],
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "registerCustomRemover",
              "parameters": [
                {
                  "name": "element",
                  "description": "original dom node",
                  "type": {
                    "text": "domnode"
                  }
                }
              ],
              "privacy": "private"
            },
            {
              "kind": "method",
              "name": "registerCallback",
              "parameters": [
                {
                  "name": "cb",
                  "type": {
                    "text": "function(boolean)"
                  }
                }
              ],
              "description": "register a callback on a key",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "state",
              "privacy": "private",
              "parameters": [
                {
                  "name": "newstate"
                }
              ],
              "return": {
                "type": {
                  "text": "*"
                }
              }
            },
            {
              "kind": "field",
              "name": "_state",
              "description": "create with false state",
              "privacy": "private",
              "default": "initialState"
            },
            {
              "kind": "field",
              "name": "_data",
              "type": {
                "text": "{}"
              },
              "description": "Additional data\nUsed for custom-add and custom-remove",
              "privacy": "private",
              "default": "''"
            },
            {
              "kind": "field",
              "name": "_appenders",
              "type": {
                "text": "array"
              },
              "privacy": "private",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "_removers",
              "type": {
                "text": "array"
              },
              "privacy": "private",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "_showers",
              "type": {
                "text": "array"
              },
              "privacy": "private",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "_hiders",
              "type": {
                "text": "array"
              },
              "privacy": "private",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "_disablers",
              "type": {
                "text": "array"
              },
              "privacy": "private",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "_enablers",
              "type": {
                "text": "array"
              },
              "privacy": "private",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "_customAdders",
              "type": {
                "text": "array"
              },
              "privacy": "private",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "_customRemovers",
              "type": {
                "text": "array"
              },
              "privacy": "private",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "_callbacks",
              "type": {
                "text": "array"
              },
              "privacy": "private",
              "default": "[]"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "KeyState",
          "declaration": {
            "name": "KeyState",
            "module": "src/FuroFeatureToggler/KeyState.js"
          }
        }
      ]
    }
  ]
}
