{
  "schemaVersion": "1.0.0",
  "readme": "",
  "modules": [
    {
      "kind": "javascript-module",
      "path": "src/index.ts",
      "declarations": [
        {
          "kind": "class",
          "description": "Represents an Automaton Component.\r\nThis component is responsible for rendering and managing the automaton editor and simulator.",
          "name": "AutomatonComponent",
          "members": [
            {
              "kind": "field",
              "name": "graphCanvas",
              "type": {
                "text": "HTMLElement"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "toolMenu",
              "type": {
                "text": "ToolMenu"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "simulatorMenu",
              "type": {
                "text": "SimulatorMenu"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "infoMenu",
              "type": {
                "text": "InfoMenu"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "topMenu",
              "type": {
                "text": "TopMenu"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "localize",
              "privacy": "protected",
              "default": "LOCALIZE"
            },
            {
              "kind": "field",
              "name": "nodes",
              "type": {
                "text": "Node[]"
              },
              "privacy": "public",
              "default": "[]",
              "description": "Each automaton state is encoded as a string using the following format:<br>`[#][%]<id>[<label>](<x>|<y>)`<br><br>Regex:<br>`^(#)?(%)?(\\d+)(?:\\[([^\\]]*(?:\\\\.[^\\]]*)*)\\])?\\((-?\\d+)\\|(-?\\d+)\\)$`<br><br>Explanation:<br>`#`: Optional - marks the initial state.<br>`%`: Optional - marks the final (accepting) state.<br>`<id>`: Required non-negative integer - unique state ID.<br>`[<label>]`: Optional - URI-encoded label. Defaults to `q<id>` if omitted.<br>`(<x>|<y>)`: Required coordinates - signed integers representing the node's position.<br><br>Multiple nodes are separated by semicolons (`;`). Example:<br>`#0(-150|0);%1[accept](0|0);2[sink](150|0)`<br><br>Requirements:<br>Coordinates are mandatory, and there must be at least 150 units of distance between any two nodes.<br>In the case of DFAs, the automaton MUST be complete, i.e. every node MUST have EXACTLY one transition for every input symbol. Correspondingly, a sink should be non-final and have self-loops on all inputs. Implicit sinks are NOT allowed.",
              "attribute": "nodes",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "transitions",
              "type": {
                "text": "Transition[]"
              },
              "privacy": "public",
              "default": "[]",
              "description": "Each automaton transition is encoded as:<br>`<from>-<to>[<symbolsOrStackOps>][~<roundness>][@<angle>]`<br>Multiple transitions are separated by semicolons (`;`).<br><br>Regex:<br>`^(?:;\\d+-\\d+(?:\\[(?:[^,\\{\\]\\|]+(?:,[^,\\{\\]\\|]+)*|[^,\\{\\]\\|]*\\{(?:p|o|e|n)\\|[^,\\{\\]\\|]*\\|[^,\\{\\]\\|]*\\}(?:,[^,\\{\\]\\|]*\\{(?:p|o|e|n)\\|[^,\\{\\]\\|]*\\|[^,\\{\\]\\|]*\\})*)\\])?(?:~(-?)(\\d+(?:\\.\\d+)?))?(?:@(-?\\d+))?)*$`<br><br>Explanation:<br>`<from>-<to>`: Required - origin and destination state IDs (non-negative integers).<br>`[<symbolsOrStackOps>]`: Required - DFA or NFA -> Symbols only: one or more URI-encoded symbols, separated by commas. PDA -> Stack operations: <symbol>{<op>|<stackSymbol>|<condition>}, with <op> one of: p (push), o (pop), e (empty check), or n (no-op); <stackSymbol> being the optional symbol to push or pop, and <condition> being an optional symbol the stack must have on top.<br>`~<roundness>`: Optional - curvature of the arc, negative sign means counter-clockwise. 0.2 is recommended if there is a circle between two states.<br>`@<angle>`: Optional - integer degrees for self-loop placement. Defaults to 45°.<br><br>Multiple transitions must be separated by semicolons, no trailing `;`.<br><br>Examples:<br>`0-1[a]`<br>`1-2[a,b]~0.5`<br>`2-2[a{p|X|},b{o||}]@45;0-1[c]~1.2`",
              "attribute": "transitions",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "type",
              "type": {
                "text": "AutomatonType"
              },
              "privacy": "public",
              "default": "\"dfa\"",
              "description": "The type of the automaton. Can be `'dfa'`, `'nfa'`, or `'pda'`.",
              "attribute": "type",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "mode",
              "type": {
                "text": "\"edit\" | \"simulate\""
              },
              "privacy": "public",
              "default": "\"edit\"",
              "description": "The current mode. Can be `'edit'`, or `'simulate'`.",
              "attribute": "mode",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "testLanguage",
              "type": {
                "text": "string"
              },
              "privacy": "public",
              "default": "\"\"",
              "description": "A regular expression to check the language of the automaton against.",
              "attribute": "testLanguage",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "forcedAlphabet",
              "type": {
                "text": "string[]"
              },
              "privacy": "public",
              "default": "[]",
              "description": "The alphabet that the automaton is forced to use as characters separated by spaces.",
              "attribute": "forcedAlphabet",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "testWords",
              "type": {
                "text": "string[]"
              },
              "privacy": "public",
              "default": "[]",
              "description": "Words used for automatically testing the automaton as a string separated by spaces.",
              "attribute": "testWords",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_verbose",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "field",
              "name": "verbose",
              "privacy": "public",
              "description": "Enables logging of numerous events to the console.",
              "type": {
                "text": "boolean"
              },
              "attribute": "verbose",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "permissions",
              "type": {
                "text": "string"
              },
              "privacy": "public",
              "default": "\"777\"",
              "description": "The encoded permissions for the editor.",
              "attribute": "permissions",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showHelp",
              "type": {
                "text": "string"
              },
              "privacy": "public",
              "default": "\"true\"",
              "description": "If true, the widget displays automaton error messages.",
              "attribute": "showHelp",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showFormalDefinition",
              "type": {
                "text": "string"
              },
              "privacy": "public",
              "default": "\"true\"",
              "description": "If true, the widget allows viewing the automaton's formal definition.",
              "attribute": "showFormalDefinition",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showTransitionsTable",
              "type": {
                "text": "string"
              },
              "privacy": "public",
              "default": "\"true\"",
              "description": "If true, the widget allows viewing the automaton's transition table.",
              "attribute": "showTransitionsTable",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "allowedTypes",
              "type": {
                "text": "string[]"
              },
              "privacy": "public",
              "default": "[\"dfa\", \"nfa\", \"pda\"]",
              "description": "The types of automata that are allowed in the editor.",
              "attribute": "allowedTypes",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "allowedModes",
              "type": {
                "text": "string[]"
              },
              "privacy": "public",
              "default": "[\"edit\", \"simulate\"]",
              "description": "The modes that are allowed in the editor.",
              "attribute": "allowedModes",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "allowedTransformations",
              "type": {
                "text": "string[]"
              },
              "privacy": "public",
              "default": "[\"sink\"]",
              "description": "The transformations that are allowed in the editor.",
              "attribute": "allowedTransformations",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "_graph",
              "type": {
                "text": "Graph"
              },
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "graph",
              "privacy": "protected"
            },
            {
              "kind": "field",
              "name": "_automaton",
              "type": {
                "text": "Automaton"
              },
              "privacy": "private",
              "default": "new DFA([], [])"
            },
            {
              "kind": "field",
              "name": "_helpOverlay",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "field",
              "name": "_topMenuCollapsed",
              "type": {
                "text": "boolean"
              },
              "privacy": "private",
              "default": "false"
            },
            {
              "kind": "field",
              "name": "helpOverlay",
              "privacy": "private"
            },
            {
              "kind": "field",
              "name": "scopedElements",
              "privacy": "protected",
              "static": true,
              "readonly": true
            },
            {
              "kind": "method",
              "name": "renderEditor",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "TemplateResult"
                }
              }
            },
            {
              "kind": "method",
              "name": "renderSettings",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "TemplateResult"
                }
              },
              "description": "Renders the settings section of the component."
            },
            {
              "kind": "method",
              "name": "renderHelpOverlay",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "TemplateResult"
                }
              },
              "description": "Renders the help overlay."
            },
            {
              "kind": "method",
              "name": "renderModeSwitch",
              "privacy": "private",
              "return": {
                "type": {
                  "text": "TemplateResult"
                }
              },
              "description": "Renders the mode switch component."
            },
            {
              "kind": "method",
              "name": "toggleMode",
              "privacy": "private",
              "description": "Toggles the mode between 'edit' and 'simulate'."
            },
            {
              "kind": "method",
              "name": "setUpListeners",
              "privacy": "private",
              "parameters": [
                {
                  "name": "a",
                  "type": {
                    "text": "Automaton"
                  },
                  "description": "The automaton object."
                }
              ],
              "description": "Sets up the listeners for the automaton."
            }
          ],
          "attributes": [
            {
              "name": "nodes",
              "type": {
                "text": "Node[]"
              },
              "default": "[]",
              "description": "Each automaton state is encoded as a string using the following format:<br>`[#][%]<id>[<label>](<x>|<y>)`<br><br>Regex:<br>`^(#)?(%)?(\\d+)(?:\\[([^\\]]*(?:\\\\.[^\\]]*)*)\\])?\\((-?\\d+)\\|(-?\\d+)\\)$`<br><br>Explanation:<br>`#`: Optional - marks the initial state.<br>`%`: Optional - marks the final (accepting) state.<br>`<id>`: Required non-negative integer - unique state ID.<br>`[<label>]`: Optional - URI-encoded label. Defaults to `q<id>` if omitted.<br>`(<x>|<y>)`: Required coordinates - signed integers representing the node's position.<br><br>Multiple nodes are separated by semicolons (`;`). Example:<br>`#0(-150|0);%1[accept](0|0);2[sink](150|0)`<br><br>Requirements:<br>Coordinates are mandatory, and there must be at least 150 units of distance between any two nodes.<br>In the case of DFAs, the automaton MUST be complete, i.e. every node MUST have EXACTLY one transition for every input symbol. Correspondingly, a sink should be non-final and have self-loops on all inputs. Implicit sinks are NOT allowed.",
              "fieldName": "nodes"
            },
            {
              "name": "transitions",
              "type": {
                "text": "Transition[]"
              },
              "default": "[]",
              "description": "Each automaton transition is encoded as:<br>`<from>-<to>[<symbolsOrStackOps>][~<roundness>][@<angle>]`<br>Multiple transitions are separated by semicolons (`;`).<br><br>Regex:<br>`^(?:;\\d+-\\d+(?:\\[(?:[^,\\{\\]\\|]+(?:,[^,\\{\\]\\|]+)*|[^,\\{\\]\\|]*\\{(?:p|o|e|n)\\|[^,\\{\\]\\|]*\\|[^,\\{\\]\\|]*\\}(?:,[^,\\{\\]\\|]*\\{(?:p|o|e|n)\\|[^,\\{\\]\\|]*\\|[^,\\{\\]\\|]*\\})*)\\])?(?:~(-?)(\\d+(?:\\.\\d+)?))?(?:@(-?\\d+))?)*$`<br><br>Explanation:<br>`<from>-<to>`: Required - origin and destination state IDs (non-negative integers).<br>`[<symbolsOrStackOps>]`: Required - DFA or NFA -> Symbols only: one or more URI-encoded symbols, separated by commas. PDA -> Stack operations: <symbol>{<op>|<stackSymbol>|<condition>}, with <op> one of: p (push), o (pop), e (empty check), or n (no-op); <stackSymbol> being the optional symbol to push or pop, and <condition> being an optional symbol the stack must have on top.<br>`~<roundness>`: Optional - curvature of the arc, negative sign means counter-clockwise. 0.2 is recommended if there is a circle between two states.<br>`@<angle>`: Optional - integer degrees for self-loop placement. Defaults to 45°.<br><br>Multiple transitions must be separated by semicolons, no trailing `;`.<br><br>Examples:<br>`0-1[a]`<br>`1-2[a,b]~0.5`<br>`2-2[a{p|X|},b{o||}]@45;0-1[c]~1.2`",
              "fieldName": "transitions"
            },
            {
              "name": "type",
              "type": {
                "text": "AutomatonType"
              },
              "default": "\"dfa\"",
              "description": "The type of the automaton. Can be `'dfa'`, `'nfa'`, or `'pda'`.",
              "fieldName": "type"
            },
            {
              "name": "mode",
              "type": {
                "text": "\"edit\" | \"simulate\""
              },
              "default": "\"edit\"",
              "description": "The current mode. Can be `'edit'`, or `'simulate'`.",
              "fieldName": "mode"
            },
            {
              "name": "testLanguage",
              "type": {
                "text": "string"
              },
              "default": "\"\"",
              "description": "A regular expression to check the language of the automaton against.",
              "fieldName": "testLanguage"
            },
            {
              "name": "forcedAlphabet",
              "type": {
                "text": "string[]"
              },
              "default": "[]",
              "description": "The alphabet that the automaton is forced to use as characters separated by spaces.",
              "fieldName": "forcedAlphabet"
            },
            {
              "name": "testWords",
              "type": {
                "text": "string[]"
              },
              "default": "[]",
              "description": "Words used for automatically testing the automaton as a string separated by spaces.",
              "fieldName": "testWords"
            },
            {
              "name": "verbose",
              "description": "Enables logging of numerous events to the console.",
              "type": {
                "text": "boolean"
              },
              "fieldName": "verbose"
            },
            {
              "name": "permissions",
              "type": {
                "text": "string"
              },
              "default": "\"777\"",
              "description": "The encoded permissions for the editor.",
              "fieldName": "permissions"
            },
            {
              "name": "showHelp",
              "type": {
                "text": "string"
              },
              "default": "\"true\"",
              "description": "If true, the widget displays automaton error messages.",
              "fieldName": "showHelp"
            },
            {
              "name": "showFormalDefinition",
              "type": {
                "text": "string"
              },
              "default": "\"true\"",
              "description": "If true, the widget allows viewing the automaton's formal definition.",
              "fieldName": "showFormalDefinition"
            },
            {
              "name": "showTransitionsTable",
              "type": {
                "text": "string"
              },
              "default": "\"true\"",
              "description": "If true, the widget allows viewing the automaton's transition table.",
              "fieldName": "showTransitionsTable"
            },
            {
              "name": "allowedTypes",
              "type": {
                "text": "string[]"
              },
              "default": "[\"dfa\", \"nfa\", \"pda\"]",
              "description": "The types of automata that are allowed in the editor.",
              "fieldName": "allowedTypes"
            },
            {
              "name": "allowedModes",
              "type": {
                "text": "string[]"
              },
              "default": "[\"edit\", \"simulate\"]",
              "description": "The modes that are allowed in the editor.",
              "fieldName": "allowedModes"
            },
            {
              "name": "allowedTransformations",
              "type": {
                "text": "string[]"
              },
              "default": "[\"sink\"]",
              "description": "The transformations that are allowed in the editor.",
              "fieldName": "allowedTransformations"
            }
          ],
          "superclass": {
            "name": "LitElementWw",
            "package": "@webwriter/lit"
          },
          "tagName": "webwriter-automaton",
          "customElement": true,
          "modulePath": "src/index.ts",
          "definitionPath": "src/index.ts"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "AutomatonComponent",
          "declaration": {
            "name": "AutomatonComponent",
            "module": "src/index.ts"
          }
        },
        {
          "kind": "custom-element-definition",
          "name": "webwriter-automaton",
          "declaration": {
            "name": "AutomatonComponent",
            "module": "src/index.ts"
          }
        }
      ]
    }
  ]
}