{ "version": 3, "sources": ["../../../src/diagrams/ishikawa/parser/ishikawa.jison", "../../../src/diagrams/ishikawa/ishikawaDb.ts", "../../../src/diagrams/ishikawa/ishikawaRenderer.ts", "../../../src/diagrams/ishikawa/ishikawaStyles.ts", "../../../src/diagrams/ishikawa/ishikawaDiagram.ts"], "sourcesContent": ["/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,14],$V2=[1,12],$V3=[1,13],$V4=[6,7,8],$V5=[1,20],$V6=[1,18],$V7=[1,19],$V8=[6,7,11],$V9=[1,6,13,14],$Va=[1,23],$Vb=[1,24],$Vc=[1,6,7,11,13,14];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"ishikawa\":4,\"spaceLines\":5,\"SPACELINE\":6,\"NL\":7,\"ISHIKAWA\":8,\"document\":9,\"stop\":10,\"EOF\":11,\"statement\":12,\"SPACELIST\":13,\"TEXT\":14,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",6:\"SPACELINE\",7:\"NL\",8:\"ISHIKAWA\",11:\"EOF\",13:\"SPACELIST\",14:\"TEXT\"},\nproductions_: [0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,1],[12,1],[12,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 6: case 7:\n return yy; \nbreak;\ncase 15:\n yy.addNode($$[$0-1].length, $$[$0].trim()); \nbreak;\ncase 16:\n yy.addNode(0, $$[$0].trim()); \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:[1,5],8:$V0},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:$V0},{6:$V1,7:[1,10],9:9,12:11,13:$V2,14:$V3},o($V4,[2,3]),{1:[2,2]},o($V4,[2,4]),o($V4,[2,5]),{1:[2,6],6:$V1,12:15,13:$V2,14:$V3},{6:$V1,9:16,12:11,13:$V2,14:$V3},{6:$V5,7:$V6,10:17,11:$V7},o($V8,[2,18],{14:[1,21]}),o($V8,[2,16]),o($V8,[2,17]),{6:$V5,7:$V6,10:22,11:$V7},{1:[2,7],6:$V1,12:15,13:$V2,14:$V3},o($V9,[2,14],{7:$Va,11:$Vb}),o($Vc,[2,8]),o($Vc,[2,9]),o($Vc,[2,10]),o($V8,[2,15]),o($V9,[2,13],{7:$Va,11:$Vb}),o($Vc,[2,11]),o($Vc,[2,12])],\ndefaultActions: {2:[2,1],6:[2,2]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: return 6; \nbreak;\ncase 1: return 8; \nbreak;\ncase 2: return 8; \nbreak;\ncase 3: return 6; \nbreak;\ncase 4: return 7; \nbreak;\ncase 5: return 13; \nbreak;\ncase 6: return 14; \nbreak;\ncase 7:return 11;\nbreak;\n}\n},\nrules: [/^(?:\\s*%%.*)/i,/^(?:ishikawa-beta\\b)/i,/^(?:ishikawa\\b)/i,/^(?:[\\s]+[\\n])/i,/^(?:[\\n]+)/i,/^(?:[\\s]+)/i,/^(?:[^\\n]+)/i,/^(?:$)/i],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport common from '../common/common.js';\nimport {\n clear as commonClear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n} from '../common/commonDb.js';\nimport type { IshikawaNode } from './ishikawaTypes.js';\n\ninterface StackEntry {\n level: number;\n node: IshikawaNode;\n}\n\nexport class IshikawaDB implements DiagramDB {\n private root?: IshikawaNode;\n private stack: StackEntry[] = [];\n private baseLevel?: number;\n\n constructor() {\n this.clear = this.clear.bind(this);\n this.addNode = this.addNode.bind(this);\n this.getRoot = this.getRoot.bind(this);\n }\n\n clear(): void {\n this.root = undefined;\n this.stack = [];\n this.baseLevel = undefined;\n commonClear();\n }\n\n getRoot(): IshikawaNode | undefined {\n return this.root;\n }\n\n addNode(rawLevel: number, text: string): void {\n const label = common.sanitizeText(text, getConfig());\n\n if (!this.root) {\n this.root = { text: label, children: [] };\n this.stack = [{ level: 0, node: this.root }];\n setDiagramTitle(label);\n return;\n }\n\n // Set baseLevel from the first cause (not the effect/root line),\n // so that relative indentation between causes is preserved\n // even when the effect line is indented more than the causes.\n this.baseLevel ??= rawLevel;\n\n let level = rawLevel - this.baseLevel + 1;\n if (level <= 0) {\n level = 1;\n }\n\n // Pop stack until the top has a strictly lower level (= parent)\n while (this.stack.length > 1 && this.stack[this.stack.length - 1].level >= level) {\n this.stack.pop();\n }\n\n const parent = this.stack[this.stack.length - 1].node;\n const node: IshikawaNode = { text: label, children: [] };\n parent.children.push(node);\n this.stack.push({ level, node });\n }\n\n getAccTitle(): string {\n return getAccTitle();\n }\n\n setAccTitle(title: string): void {\n setAccTitle(title);\n }\n\n getAccDescription(): string {\n return getAccDescription();\n }\n\n setAccDescription(description: string): void {\n setAccDescription(description);\n }\n\n getDiagramTitle(): string {\n return getDiagramTitle();\n }\n\n setDiagramTitle(title: string): void {\n setDiagramTitle(title);\n }\n}\n", "// cspell:ignore lerp\nimport type { Diagram } from '../../Diagram.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramRenderer, DrawDefinition, SVG, SVGGroup } from '../../diagram-api/types.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport { parseFontSize } from '../../utils.js';\nimport type { IshikawaDB } from './ishikawaDb.js';\nimport type { IshikawaNode } from './ishikawaTypes.js';\nimport rough from 'roughjs';\n\ninterface RoughContext {\n roughSvg: ReturnType;\n seed: number;\n lineColor: string;\n fillColor: string;\n}\n\nconst FONT_SIZE_DEFAULT = 14;\nconst SPINE_BASE_LENGTH = 250;\nconst BONE_STUB = 30;\nconst BONE_BASE = 60;\nconst BONE_PER_CHILD = 5;\nconst ANGLE = (82 * Math.PI) / 180;\nconst COS_A = Math.cos(ANGLE);\nconst SIN_A = Math.sin(ANGLE);\n\nconst applyPaddedViewBox = (svgEl: SVG, pad: number, maxW: boolean) => {\n const bbox = svgEl.node()!.getBBox();\n const w = bbox.width + pad * 2;\n const h = bbox.height + pad * 2;\n configureSvgSize(svgEl, h, w, maxW);\n svgEl.attr('viewBox', `${bbox.x - pad} ${bbox.y - pad} ${w} ${h}`);\n};\n\nconst draw: DrawDefinition = (_text, id, _version, diagram: Diagram) => {\n const db = diagram.db as IshikawaDB;\n const root = db.getRoot();\n if (!root) {\n return;\n }\n\n const drawConfig = getConfig();\n const { look, handDrawnSeed, themeVariables } = drawConfig;\n const fontSize = parseFontSize(drawConfig.fontSize)[0] ?? FONT_SIZE_DEFAULT;\n const isHandDrawn = look === 'handDrawn';\n\n const causes = root.children ?? [];\n const padding = drawConfig.ishikawa?.diagramPadding ?? 20;\n const useMaxWidth = drawConfig.ishikawa?.useMaxWidth ?? false;\n const svg = selectSvgElement(id);\n const g = svg.append('g').attr('class', 'ishikawa');\n\n const roughSvg = isHandDrawn ? rough.svg(svg.node()!) : undefined;\n const roughContext: RoughContext | undefined = roughSvg\n ? {\n roughSvg,\n seed: handDrawnSeed ?? 0,\n lineColor: themeVariables?.lineColor ?? '#333',\n fillColor: themeVariables?.mainBkg ?? '#fff',\n }\n : undefined;\n\n const markerId = `ishikawa-arrow-${id}`;\n if (!isHandDrawn) {\n g.append('defs')\n .append('marker')\n .attr('id', markerId)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 0)\n .attr('refY', 5)\n .attr('markerWidth', 6)\n .attr('markerHeight', 6)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 10 0 L 0 5 L 10 10 Z')\n .attr('class', 'ishikawa-arrow');\n }\n\n let spineX = 0;\n let spineY = SPINE_BASE_LENGTH;\n\n // For handDrawn, defer spine drawing until coordinates are final\n const spineLine = isHandDrawn\n ? undefined\n : drawLine(g, spineX, spineY, spineX, spineY, 'ishikawa-spine');\n drawHead(g, spineX, spineY, root.text, fontSize, roughContext);\n\n if (!causes.length) {\n if (isHandDrawn) {\n drawLine(g, spineX, spineY, spineX, spineY, 'ishikawa-spine', roughContext);\n }\n applyPaddedViewBox(svg, padding, useMaxWidth);\n return;\n }\n\n spineX -= 20;\n\n const upperCauses = causes.filter((_, i) => i % 2 === 0);\n const lowerCauses = causes.filter((_, i) => i % 2 === 1);\n\n const upperStats = sideStats(upperCauses);\n const lowerStats = sideStats(lowerCauses);\n const descendantTotal = upperStats.total + lowerStats.total;\n\n let upperLen = SPINE_BASE_LENGTH;\n let lowerLen = SPINE_BASE_LENGTH;\n if (descendantTotal > 0) {\n const pool = SPINE_BASE_LENGTH * 2;\n const minLen = SPINE_BASE_LENGTH * 0.3;\n upperLen = Math.max(minLen, pool * (upperStats.total / descendantTotal));\n lowerLen = Math.max(minLen, pool * (lowerStats.total / descendantTotal));\n }\n\n const minSpacing = fontSize * 2;\n upperLen = Math.max(upperLen, upperStats.max * minSpacing);\n lowerLen = Math.max(lowerLen, lowerStats.max * minSpacing);\n\n spineY = Math.max(upperLen, SPINE_BASE_LENGTH);\n if (spineLine) {\n spineLine.attr('y1', spineY).attr('y2', spineY);\n }\n g.select('.ishikawa-head-group').attr('transform', `translate(0,${spineY})`);\n\n const pairCount = Math.ceil(causes.length / 2);\n for (let p = 0; p < pairCount; p++) {\n const pg = g.append('g').attr('class', 'ishikawa-pair');\n for (const [cause, dir, len] of [\n [causes[p * 2], -1, upperLen] as const,\n [causes[p * 2 + 1], 1, lowerLen] as const,\n ]) {\n if (cause) {\n drawBranch(pg, cause, spineX, spineY, dir, len, fontSize, roughContext);\n }\n }\n spineX = pg\n .selectAll('text')\n .nodes()\n .reduce((left, n) => Math.min(left, (n as SVGGraphicsElement).getBBox().x), Infinity);\n }\n\n if (isHandDrawn) {\n drawLine(g, spineX, spineY, 0, spineY, 'ishikawa-spine', roughContext);\n } else {\n spineLine!.attr('x1', spineX);\n const markerUrl = `url(#${markerId})`;\n g.selectAll('line.ishikawa-branch, line.ishikawa-sub-branch').attr('marker-start', markerUrl);\n }\n applyPaddedViewBox(svg, padding, useMaxWidth);\n};\n\nconst sideStats = (nodes: IshikawaNode[]) => {\n const countDescendants = (node: IshikawaNode): number =>\n node.children.reduce((sum, child) => sum + 1 + countDescendants(child), 0);\n\n return nodes.reduce(\n (stats, node) => {\n const descendants = countDescendants(node);\n stats.total += descendants;\n stats.max = Math.max(stats.max, descendants);\n return stats;\n },\n { total: 0, max: 0 }\n );\n};\n\nconst drawHead = (\n svg: SVGGroup,\n x: number,\n y: number,\n label: string,\n fontSize: number,\n roughContext?: RoughContext\n): void => {\n const maxChars = Math.max(6, Math.floor(110 / (fontSize * 0.6)));\n const headGroup = svg\n .append('g')\n .attr('class', 'ishikawa-head-group')\n .attr('transform', `translate(${x},${y})`);\n\n const textEl = drawMultilineText(\n headGroup,\n wrapText(label, maxChars),\n 0,\n 0,\n 'ishikawa-head-label',\n 'start',\n fontSize\n );\n const tb = textEl.node()!.getBBox();\n const w = Math.max(60, tb.width + 6);\n const h = Math.max(40, tb.height * 2 + 40);\n\n const headPath = `M 0 ${-h / 2} L 0 ${h / 2} Q ${w * 2.4} 0 0 ${-h / 2} Z`;\n if (roughContext) {\n const roughNode = roughContext.roughSvg.path(headPath, {\n roughness: 1.5,\n seed: roughContext.seed,\n fill: roughContext.fillColor,\n fillStyle: 'hachure',\n fillWeight: 2.5,\n hachureGap: 5,\n stroke: roughContext.lineColor,\n strokeWidth: 2,\n });\n headGroup.insert(() => roughNode, ':first-child').attr('class', 'ishikawa-head');\n } else {\n headGroup.insert('path', ':first-child').attr('class', 'ishikawa-head').attr('d', headPath);\n }\n textEl.attr('transform', `translate(${(w - tb.width) / 2 - tb.x + 3},${-tb.y - tb.height / 2})`);\n};\n\ninterface LabelEntry {\n text: string;\n depth: number;\n parentIndex: number;\n childCount: number;\n}\n\ninterface BoneInfo {\n x0: number;\n y0: number;\n x1: number;\n y1: number;\n childCount: number;\n childrenDrawn: number;\n}\n\n// Flatten children so we can assign Y positions without recursion when drawing.\n// Even depths are placed in pre-order (close to the spine), odd depths in post-order\n// to keep diagonal bones within their parent wedge.\nconst flattenTree = (children: IshikawaNode[], direction: 1 | -1) => {\n const entries: LabelEntry[] = [];\n const yOrder: number[] = [];\n const walk = (nodes: IshikawaNode[], pid: number, depth: number) => {\n const ordered = direction === -1 ? [...nodes].reverse() : nodes;\n for (const child of ordered) {\n const idx = entries.length;\n const gc = child.children ?? [];\n entries.push({\n depth,\n text: wrapText(child.text, 15),\n parentIndex: pid,\n childCount: gc.length,\n });\n if (depth % 2 === 0) {\n // Even-depth: pre-order (closer to spine)\n yOrder.push(idx);\n if (gc.length) {\n walk(gc, idx, depth + 1);\n }\n } else {\n // odd-depth: post-order (within parent diagonal)\n if (gc.length) {\n walk(gc, idx, depth + 1);\n }\n yOrder.push(idx);\n }\n }\n };\n walk(children, -1, 2);\n return { entries, yOrder };\n};\n\nconst drawCauseLabel = (\n svg: SVGGroup,\n text: string,\n x: number,\n y: number,\n direction: 1 | -1,\n fontSize: number,\n roughContext?: RoughContext\n) => {\n const lg = svg.append('g').attr('class', 'ishikawa-label-group');\n const lt = drawMultilineText(\n lg,\n text,\n x,\n y + 11 * direction,\n 'ishikawa-label cause',\n 'middle',\n fontSize\n );\n const tb = lt.node()!.getBBox();\n if (roughContext) {\n const roughNode = roughContext.roughSvg.rectangle(\n tb.x - 20,\n tb.y - 2,\n tb.width + 40,\n tb.height + 4,\n {\n roughness: 1.5,\n seed: roughContext.seed,\n fill: roughContext.fillColor,\n fillStyle: 'hachure',\n fillWeight: 2.5,\n hachureGap: 5,\n stroke: roughContext.lineColor,\n strokeWidth: 2,\n }\n );\n lg.insert(() => roughNode, ':first-child').attr('class', 'ishikawa-label-box');\n } else {\n lg.insert('rect', ':first-child')\n .attr('class', 'ishikawa-label-box')\n .attr('x', tb.x - 20)\n .attr('y', tb.y - 2)\n .attr('width', tb.width + 40)\n .attr('height', tb.height + 4);\n }\n};\n\n// Emulate arrow marker since rough.js does not support marker on line\nconst drawArrowMarker = (\n g: SVGGroup,\n x: number,\n y: number,\n dx: number,\n dy: number,\n roughContext: RoughContext\n) => {\n const len = Math.sqrt(dx * dx + dy * dy);\n if (len === 0) {\n return;\n }\n const ux = dx / len;\n const uy = dy / len;\n const s = 6;\n const px = -uy * s;\n const py = ux * s;\n const tipX = x;\n const tipY = y;\n const d = `M ${tipX} ${tipY} L ${tipX - ux * s * 2 + px} ${tipY - uy * s * 2 + py} L ${tipX - ux * s * 2 - px} ${tipY - uy * s * 2 - py} Z`;\n const roughNode = roughContext.roughSvg.path(d, {\n roughness: 1,\n seed: roughContext.seed,\n fill: roughContext.lineColor,\n fillStyle: 'solid',\n stroke: roughContext.lineColor,\n strokeWidth: 1,\n });\n g.append(() => roughNode);\n};\n\nconst drawBranch = (\n svg: SVGGroup,\n node: IshikawaNode,\n startX: number,\n startY: number,\n direction: 1 | -1,\n length: number,\n fontSize: number,\n roughContext?: RoughContext\n): void => {\n const children = node.children ?? [];\n const lineLen = length * (children.length ? 1 : 0.2);\n const dx = -COS_A * lineLen;\n const dy = SIN_A * lineLen * direction;\n const endX = startX + dx;\n const endY = startY + dy;\n\n drawLine(svg, startX, startY, endX, endY, 'ishikawa-branch', roughContext);\n if (roughContext) {\n drawArrowMarker(svg, startX, startY, startX - endX, startY - endY, roughContext);\n }\n drawCauseLabel(svg, node.text, endX, endY, direction, fontSize, roughContext);\n\n if (!children.length) {\n return;\n }\n\n const { entries, yOrder } = flattenTree(children, direction);\n const entryCount = entries.length;\n const ys = new Array(entryCount);\n for (const [slot, entryIdx] of yOrder.entries()) {\n ys[entryIdx] = startY + dy * ((slot + 1) / (entryCount + 1));\n }\n\n const bones = new Map();\n bones.set(-1, {\n x0: startX,\n y0: startY,\n x1: endX,\n y1: endY,\n childCount: children.length,\n childrenDrawn: 0,\n });\n\n const diagonalX = -COS_A;\n const diagonalY = SIN_A * direction;\n const oddLabel = direction < 0 ? 'ishikawa-label up' : 'ishikawa-label down';\n\n for (const [i, e] of entries.entries()) {\n const y = ys[i];\n const par = bones.get(e.parentIndex)!;\n const grp = svg.append('g').attr('class', 'ishikawa-sub-group');\n\n let bx0 = 0;\n let by0 = 0;\n let bx1 = 0;\n\n if (e.depth % 2 === 0) {\n // Horizontal bone: attach to parent's diagonal at the target Y, extend left\n const dyP = par.y1 - par.y0;\n bx0 = lerp(par.x0, par.x1, dyP ? (y - par.y0) / dyP : 0.5);\n by0 = y;\n bx1 = bx0 - (e.childCount > 0 ? BONE_BASE + e.childCount * BONE_PER_CHILD : BONE_STUB);\n drawLine(grp, bx0, y, bx1, y, 'ishikawa-sub-branch', roughContext);\n if (roughContext) {\n drawArrowMarker(grp, bx0, y, 1, 0, roughContext);\n }\n drawMultilineText(grp, e.text, bx1, y, 'ishikawa-label align', 'end', fontSize);\n } else {\n // Diagonal bone: start from evenly-spaced point on parent's horizontal, angle toward target Y\n const k = par.childrenDrawn++;\n bx0 = lerp(par.x0, par.x1, (par.childCount - k) / (par.childCount + 1));\n by0 = par.y0;\n bx1 = bx0 + diagonalX * ((y - by0) / diagonalY);\n drawLine(grp, bx0, by0, bx1, y, 'ishikawa-sub-branch', roughContext);\n if (roughContext) {\n drawArrowMarker(grp, bx0, by0, bx0 - bx1, by0 - y, roughContext);\n }\n drawMultilineText(grp, e.text, bx1, y, oddLabel, 'end', fontSize);\n }\n\n if (e.childCount > 0) {\n bones.set(i, {\n x0: bx0,\n y0: by0,\n x1: bx1,\n y1: y,\n childCount: e.childCount,\n childrenDrawn: 0,\n });\n }\n }\n};\n\nconst splitLines = (text: string): string[] => text.split(/|\\n/);\n\nconst wrapText = (text: string, maxChars: number): string => {\n if (text.length <= maxChars) {\n return text;\n }\n const lines: string[] = [];\n for (const word of text.split(/\\s+/)) {\n const last = lines.length - 1;\n if (last >= 0 && lines[last].length + 1 + word.length <= maxChars) {\n lines[last] += ' ' + word;\n } else {\n lines.push(word);\n }\n }\n return lines.join('\\n');\n};\n\nconst drawMultilineText = (\n g: SVGGroup,\n text: string,\n x: number,\n y: number,\n cls: string,\n anchor: 'middle' | 'start' | 'end',\n fontSize: number\n) => {\n const lines = splitLines(text);\n const lh = fontSize * 1.05;\n const el = g\n .append('text')\n .attr('class', cls)\n .attr('text-anchor', anchor)\n .attr('x', x)\n .attr('y', y - ((lines.length - 1) * lh) / 2);\n for (const [i, line] of lines.entries()) {\n el.append('tspan')\n .attr('x', x)\n .attr('dy', i === 0 ? 0 : lh)\n .text(line);\n }\n return el;\n};\n\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\nconst drawLine = (\n g: SVGGroup,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n cls: string,\n roughContext?: RoughContext\n) => {\n if (roughContext) {\n const roughNode = roughContext.roughSvg.line(x1, y1, x2, y2, {\n roughness: 1.5,\n seed: roughContext.seed,\n stroke: roughContext.lineColor,\n strokeWidth: 2,\n });\n g.append(() => roughNode).attr('class', cls);\n return undefined;\n }\n return g\n .append('line')\n .attr('class', cls)\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2);\n};\n\nexport const renderer: DiagramRenderer = { draw };\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\n\nconst getStyles: DiagramStylesProvider = (options) => `\n.ishikawa .ishikawa-spine,\n.ishikawa .ishikawa-branch,\n.ishikawa .ishikawa-sub-branch {\n stroke: ${options.lineColor};\n stroke-width: 2;\n fill: none;\n}\n\n.ishikawa .ishikawa-sub-branch {\n stroke-width: 1;\n}\n\n.ishikawa .ishikawa-arrow {\n fill: ${options.lineColor};\n}\n\n.ishikawa .ishikawa-head {\n fill: ${options.mainBkg};\n stroke: ${options.lineColor};\n stroke-width: 2;\n}\n\n.ishikawa .ishikawa-label-box {\n fill: ${options.mainBkg};\n stroke: ${options.lineColor};\n stroke-width: 2;\n}\n\n.ishikawa text {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n fill: ${options.textColor};\n}\n\n.ishikawa .ishikawa-head-label {\n font-weight: 600;\n text-anchor: middle;\n dominant-baseline: middle;\n font-size: 14px;\n}\n\n.ishikawa .ishikawa-label {\n text-anchor: end;\n}\n\n.ishikawa .ishikawa-label.cause {\n text-anchor: middle;\n dominant-baseline: middle;\n}\n\n.ishikawa .ishikawa-label.align {\n text-anchor: end;\n dominant-baseline: middle;\n}\n\n.ishikawa .ishikawa-label.up {\n dominant-baseline: baseline;\n}\n\n.ishikawa .ishikawa-label.down {\n dominant-baseline: hanging;\n}\n`;\n\nexport default getStyles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/ishikawa.jison';\nimport { IshikawaDB } from './ishikawaDb.js';\nimport { renderer } from './ishikawaRenderer.js';\nimport styles from './ishikawaStyles.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new IshikawaDB();\n },\n renderer,\n styles,\n};\n"], "mappings": "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", "names": ["parser", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "ishikawa_default", "parser", "IshikawaDB", "__name", "clear", "rawLevel", "text", "label", "common_default", "getConfig", "setDiagramTitle", "level", "parent", "node", "getAccTitle", "title", "setAccTitle", "getAccDescription", "description", "setAccDescription", "getDiagramTitle", "FONT_SIZE_DEFAULT", "SPINE_BASE_LENGTH", "BONE_STUB", "BONE_BASE", "BONE_PER_CHILD", "ANGLE", "COS_A", "SIN_A", "applyPaddedViewBox", "__name", "svgEl", "pad", "maxW", "bbox", "w", "h", "configureSvgSize", "draw", "_text", "id", "_version", "diagram", "root", "drawConfig", "getConfig", "look", "handDrawnSeed", "themeVariables", "fontSize", "parseFontSize", "isHandDrawn", "causes", "padding", "useMaxWidth", "svg", "selectSvgElement", "g", "roughSvg", "at", "roughContext", "markerId", "spineX", "spineY", "spineLine", "drawLine", "drawHead", "upperCauses", "_", "i", "lowerCauses", "upperStats", "sideStats", "lowerStats", "descendantTotal", "upperLen", "lowerLen", "pool", "minLen", "minSpacing", "pairCount", "p", "pg", "cause", "dir", "len", "drawBranch", "left", "n", "markerUrl", "nodes", "countDescendants", "node", "sum", "child", "stats", "descendants", "x", "y", "label", "maxChars", "headGroup", "textEl", "drawMultilineText", "wrapText", "tb", "headPath", "roughNode", "flattenTree", "children", "direction", "entries", "yOrder", "walk", "pid", "depth", "ordered", "idx", "gc", "drawCauseLabel", "text", "lg", "drawArrowMarker", "dx", "dy", "ux", "uy", "s", "px", "py", "tipX", "tipY", "d", "startX", "startY", "length", "lineLen", "endX", "endY", "entryCount", "ys", "slot", "entryIdx", "bones", "diagonalX", "diagonalY", "oddLabel", "e", "par", "grp", "bx0", "by0", "bx1", "dyP", "lerp", "k", "splitLines", "lines", "word", "last", "cls", "anchor", "lh", "el", "line", "a", "b", "t", "x1", "y1", "x2", "y2", "renderer", "getStyles", "__name", "options", "ishikawaStyles_default", "diagram", "ishikawa_default", "IshikawaDB", "renderer", "ishikawaStyles_default"] }