From 63f54f27b0a5917170ee1afa36ad90432f4a4c83 Mon Sep 17 00:00:00 2001 From: Obsidian-MBPM4 Date: Thu, 12 Jun 2025 18:46:55 +0300 Subject: [PATCH] vault backup: 2025-06-12 18:46:55 Affected files: .obsidian/plugins/mermaid-tools/main.js .obsidian/plugins/mermaid-tools/manifest.json .obsidian/plugins/mermaid-tools/styles.css .obsidian/plugins/obsidian-excalidraw-plugin/data.json .obsidian/workspace.json 99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md 99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/kalman_filter.excalidraw.md OneNote/PhD/Kalman Filter.md --- .obsidian/plugins/mermaid-tools/main.js | 2056 +++++++++++++++++ .obsidian/plugins/mermaid-tools/manifest.json | 11 + .obsidian/plugins/mermaid-tools/styles.css | 55 + .../obsidian-excalidraw-plugin/data.json | 21 +- .obsidian/workspace.json | 26 +- .../Robotics/Kalman Filter.md | 18 + .../Robotics/kalman_filter.excalidraw.md | 44 + OneNote/PhD/Kalman Filter.md | 20 - 8 files changed, 2223 insertions(+), 28 deletions(-) create mode 100644 .obsidian/plugins/mermaid-tools/main.js create mode 100644 .obsidian/plugins/mermaid-tools/manifest.json create mode 100644 .obsidian/plugins/mermaid-tools/styles.css create mode 100644 99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md create mode 100644 99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/kalman_filter.excalidraw.md delete mode 100644 OneNote/PhD/Kalman Filter.md diff --git a/.obsidian/plugins/mermaid-tools/main.js b/.obsidian/plugins/mermaid-tools/main.js new file mode 100644 index 0000000..7e9975c --- /dev/null +++ b/.obsidian/plugins/mermaid-tools/main.js @@ -0,0 +1,2056 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// main.ts +var main_exports = {}; +__export(main_exports, { + TRIDENT_ICON_NAME: () => TRIDENT_ICON_NAME, + default: () => MermaidPlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian6 = require("obsidian"); + +// src/core/ElementCategory.ts +var ElementCategory = /* @__PURE__ */ ((ElementCategory2) => { + ElementCategory2["Flowchart"] = "Flowchart"; + ElementCategory2["SequenceDiagram"] = "SequenceDiagram"; + ElementCategory2["ClassDiagram"] = "ClassDiagram"; + ElementCategory2["StateDiagram"] = "StateDiagram"; + ElementCategory2["EntityRelationshipDiagram"] = "EntityRelationshipDiagram"; + ElementCategory2["UserJourneyDiagram"] = "UserJourneyDiagram"; + ElementCategory2["GanttChart"] = "GanttChart"; + ElementCategory2["PieChart"] = "PieChart"; + ElementCategory2["RequirementDiagram"] = "RequirementDiagram"; + ElementCategory2["GitGraph"] = "GitGraph"; + ElementCategory2["Mindmap"] = "Mindmap"; + ElementCategory2["Timeline"] = "Timeline"; + ElementCategory2["C4Diagram"] = "C4Diagram"; + ElementCategory2["QuadrantChart"] = "QuadrantChart"; + ElementCategory2["SankeyDiagram"] = "SankeyDiagram"; + ElementCategory2["XyChart"] = "XyChart"; + ElementCategory2["Kanban"] = "Kanban"; + ElementCategory2["Architecture"] = "Architecture"; + ElementCategory2["Block"] = "Block"; + ElementCategory2["Packet"] = "Packet"; + return ElementCategory2; +})(ElementCategory || {}); + +// src/elements/sampleDiagrams.ts +var sampleDiagrams = { + EntityRelationshipDiagram: `erDiagram + CUSTOMER ||--o{ ORDER : places + ORDER ||--|{ LINE-ITEM : contains + CUSTOMER }|..|{ DELIVERY-ADDRESS : uses`, + ClassDiagram: `class BankAccount + BankAccount : +String owner + BankAccount : +Bigdecimal balance + BankAccount : +deposit(amount) + BankAccount : +withdrawal(amount)`, + Flowchart: "flowchart LR\nStart --> Stop", + GanttChart: `gantt + title A Gantt Diagram + dateFormat YYYY-MM-DD + section Section + A task :a1, 2014-01-01, 30d + Another task :after a1 , 20d + section Another + Task in sec :2014-01-12 , 12d + another task : 24d`, + GitGraph: `gitGraph + commit + commit + branch develop + checkout develop + commit + commit + checkout main + merge develop + commit + commit`, + PieChart: `pie title /r/obsidianmd posts by type + "Look at my awesome graph" : 85 + "Look at my cool dashboard" : 14 + "Moved from Notion, liking it" : 1`, + RequirementDiagram: ` requirementDiagram + + requirement test_req { + id: 1 + text: the test text. + risk: high + verifymethod: test + } + + element test_entity { + type: simulation + } + + test_entity - satisfies -> test_req`, + SequenceDiagram: `sequenceDiagram +Alice->>John: Hello John, how are you? +John-->>Alice: Great! +Alice-)John: See you later!`, + StateDiagram: `stateDiagram-v2 + [*] --> Still + Still --> [*] + + Still --> Moving + Moving --> Still + Moving --> Crash + Crash --> [*]`, + UserJourneyDiagram: `journey + title My working day + section Go to work + Make tea: 5: Me + Go upstairs: 3: Me + Do work: 1: Me, Cat + section Go home + Go downstairs: 5: Me + Sit down: 5: Me`, + Mindmap: `mindmap + Root + A + B + C`, + Timeline: `timeline + title History of Social Media Platform + 2002 : LinkedIn + 2004 : Facebook + : Google + 2005 : Youtube + 2006 : Twitter`, + QuadrantChart: `quadrantChart + title Reach and engagement of campaigns + x-axis Low Reach --> High Reach + y-axis Low Engagement --> High Engagement + quadrant-1 We should expand + quadrant-2 Need to promote + quadrant-3 Re-evaluate + quadrant-4 May be improved + Campaign A: [0.3, 0.6] + Campaign B: [0.45, 0.23] + Campaign C: [0.57, 0.69] + Campaign D: [0.78, 0.34] + Campaign E: [0.40, 0.34] + Campaign F: [0.35, 0.78]`, + C4Diagram: `C4Context + title System Context diagram for Internet Banking System + Enterprise_Boundary(b0, "BankBoundary0") { + Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") + Person(customerB, "Banking Customer B") + Person_Ext(customerC, "Banking Customer C", "desc") + + Person(customerD, "Banking Customer D", "A customer of the bank,
with personal bank accounts.") + + System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") + + Enterprise_Boundary(b1, "BankBoundary") { + + SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") + + System_Boundary(b2, "BankBoundary2") { + System(SystemA, "Banking System A") + System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") + } + + System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") + SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") + + Boundary(b3, "BankBoundary3", "boundary") { + SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") + SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") + } + } + } + + BiRel(customerA, SystemAA, "Uses") + BiRel(SystemAA, SystemE, "Uses") + Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") + Rel(SystemC, customerA, "Sends e-mails to") + + UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") + UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") + UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") + UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") + UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") + + UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")`, + SankeyDiagram: `sankey-beta + + %% source,target,value + Electricity grid,Over generation / exports,104.453 + Electricity grid,Heating and cooling - homes,113.726 + Electricity grid,H2 conversion,27.14`, + XyChart: `xychart-beta + title "Sales Revenue" + x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec] + y-axis "Revenue (in $)" 4000 --> 11000 + bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] + line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]`, + Packet: `packet-beta +title UDP Packet +0-15: "Source Port" +16-31: "Destination Port" +32-47: "Length" +48-63: "Checksum" +64-95: "Data (variable length)" +`, + Kanban: `kanban + Todo + [Create Documentation] + docs[Create Blog about the new diagram] + [In progress] + id6[Create renderer so that it works in all cases. We also add som extra text here for testing purposes. And some more just for the extra flare.] + id9[Ready for deploy] + id8[Design grammar]@{ assigned: 'knsv' } + id10[Ready for test] + id4[Create parsing tests]@{ ticket: MC-2038, assigned: 'K.Sveidqvist', priority: 'High' } + id66[last item]@{ priority: 'Very Low', assigned: 'knsv' } + id11[Done] + id5[define getData] + id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char]@{ ticket: MC-2036, priority: 'Very High'} + id3[Update DB function]@{ ticket: MC-2037, assigned: knsv, priority: 'High' } + + id12[Can't reproduce] + id3[Weird flickering in Firefox]`, + Block: `block-beta +columns 1 + db(("DB")) + blockArrowId6<["   "]>(down) + block:ID + A + B["A wide one in the middle"] + C + end + space + D + ID --> D + C --> D + style B fill:#969,stroke:#333,stroke-width:4px +`, + Architecture: `architecture-beta + group api(cloud)[API] + + service db(database)[Database] in api + service disk1(disk)[Storage] in api + service disk2(disk)[Storage] in api + service server(server)[Server] in api + + db:L -- R:server + disk1:T -- B:server + disk2:T -- B:db +` +}; + +// src/elements/architecture.ts +var architectureElements = [ + { + id: crypto.randomUUID(), + category: "Architecture" /* Architecture */, + description: "a sample architecture diagram", + content: `architecture-beta + group api(cloud)[API] + + service db(database)[Database] in api + service disk1(disk)[Storage] in api + service disk2(disk)[Storage] in api + service server(server)[Server] in api + + db:L -- R:server + disk1:T -- B:server + disk2:T -- B:db +`, + sortingOrder: 0, + isPinned: false + } +]; + +// src/elements/blockDiagram.ts +var blockDiagramElements = [ + { + id: crypto.randomUUID(), + category: "Block" /* Block */, + description: "a sample block diagram", + content: `block-beta +columns 1 + db(("DB")) + blockArrowId6<["   "]>(down) + block:ID + A + B["A wide one in the middle"] + C + end + space + D + ID --> D + C --> D + style B fill:#969,stroke:#333,stroke-width:4px +`, + sortingOrder: 0, + isPinned: false + } +]; + +// src/elements/c4Diagram.ts +var c4DiagramElements = [ + { + id: crypto.randomUUID(), + category: "C4Diagram" /* C4Diagram */, + description: "sample C4 diagram (compatible with PlantUML)", + content: `C4Context + title System Context diagram for Internet Banking System + Enterprise_Boundary(b0, "BankBoundary0") { + Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") + Person(customerB, "Banking Customer B") + Person_Ext(customerC, "Banking Customer C", "desc") + + Person(customerD, "Banking Customer D", "A customer of the bank,
with personal bank accounts.") + + System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") + + Enterprise_Boundary(b1, "BankBoundary") { + + SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") + + System_Boundary(b2, "BankBoundary2") { + System(SystemA, "Banking System A") + System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") + } + + System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") + SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") + + Boundary(b3, "BankBoundary3", "boundary") { + SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") + SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") + } + } + } + + BiRel(customerA, SystemAA, "Uses") + BiRel(SystemAA, SystemE, "Uses") + Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") + Rel(SystemC, customerA, "Sends e-mails to") + + UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") + UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") + UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") + UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") + UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") + + UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")`, + sortingOrder: 1, + isPinned: false + } +]; + +// src/elements/classDiagram.ts +var classDiagramElements = [ + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "sample class", + content: `class Duck{ + +String beakColor + +swim() + +quack() + }`, + sortingOrder: 0, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "sample class", + content: `class BankAccount + BankAccount : +String owner + BankAccount : +Bigdecimal balance + BankAccount : +deposit(amount) + BankAccount : +withdrawal(amount)`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "generic class", + content: `class Square~Shape~{ + int id + List~int~ position + setPoints(List~int~ points) + getPoints() List~int~ + } + + Square : -List~string~ messages + Square : +setMessages(List~string~ messages) + Square : +getMessages() List~string~`, + sortingOrder: 2, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "inheritance", + content: "classA <|-- classB", + sortingOrder: 3, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "composition", + content: "classC *-- classD", + sortingOrder: 4, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "aggregation", + content: "classE o-- classF", + sortingOrder: 5, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "association", + content: "classG <-- classH", + sortingOrder: 6, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "solid link", + content: "classI -- classJ", + sortingOrder: 7, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "dependency", + content: "classK <.. classL", + sortingOrder: 8, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "realization", + content: "classM <|.. classN", + sortingOrder: 9, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "dashed link", + content: "classO .. classP", + sortingOrder: 10, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "two-way relation", + content: "Animal <|--|> Zebra", + sortingOrder: 11, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "ClassDiagram" /* ClassDiagram */, + description: "sample class diagram", + content: `classDiagram + Animal <|-- Duck + Animal <|-- Fish + Animal <|-- Zebra + Animal : +int age + Animal : +String gender + Animal: +isMammal() + Animal: +mate() + class Duck{ + +String beakColor + +swim() + +quack() + } + class Fish{ + -int sizeInFeet + -canEat() + } + class Zebra{ + +bool is_wild + +run() + }`, + sortingOrder: 12, + isPinned: false + } +]; + +// src/elements/entityRelationshipDiagram.ts +var entityRelationshipDiagramElements = [ + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "a sample entity relationship diagram", + content: `erDiagram + CUSTOMER ||--o{ ORDER : places + ORDER ||--|{ LINE-ITEM : contains + CUSTOMER }|..|{ DELIVERY-ADDRESS : uses`, + sortingOrder: 0, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "an entity", + content: ` CUSTOMER { + string name + string custNumber + string sector + }`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "one-to-many relationship", + content: `A ||--|{ B : label`, + sortingOrder: 2, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "many-to-many relationship", + content: `A }|--|{ B : label`, + sortingOrder: 3, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "one-to-one relationship", + content: `A ||--|| B : label`, + sortingOrder: 4, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "many-to-one relationship", + content: `A }|--|| B : label`, + sortingOrder: 5, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "zero/one-to-one relationship", + content: `A |o--|| B : label`, + sortingOrder: 6, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "one-to-one/zero relationship", + content: `A ||--o| B : label`, + sortingOrder: 7, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "zero-or-more-to-one relationship", + content: `A }o--|| B : label`, + sortingOrder: 8, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "one-to-zero-or-more relationship", + content: `A ||--o{ B : label`, + sortingOrder: 9, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "zero-or-more-to-many relationship", + content: `A }o--|{ B : label`, + sortingOrder: 10, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "EntityRelationshipDiagram" /* EntityRelationshipDiagram */, + description: "many-to-zero-or-more relationship", + content: `A }|--o{ B : label`, + sortingOrder: 11, + isPinned: false + } +]; + +// src/elements/flowchart.ts +var flowchartElements = [ + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "a simple flowchart with top to down direction", + content: `flowchart TD +Start --> Stop`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "a simple flowchart with left to right direction", + content: "flowchart LR\nStart --> Stop", + sortingOrder: 2, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "A node with round edges", + content: "id1(Some text)", + sortingOrder: 3, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "A stadium-shaped node", + content: "id1([Some text])", + sortingOrder: 4, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "A node in a cylindrical shape", + content: "id1[(Database)]", + sortingOrder: 5, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Circle", + content: "id1((Some text))", + sortingOrder: 6, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Rhombus", + content: "id1{Some text}", + sortingOrder: 7, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Hexagon", + content: "id1{{Some text}}", + sortingOrder: 8, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Parallelogram skewed right", + content: "id1[/Some text/]", + sortingOrder: 9, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Parallelogram skewed left", + content: "id1[\\Some text\\]", + sortingOrder: 10, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Trapezoid", + content: "A[/Some text\\]", + sortingOrder: 11, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Trapezoid upside down", + content: "A[\\Some text/]", + sortingOrder: 12, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Double circle node", + content: "id1(((Some text)))", + sortingOrder: 13, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "A link with arrow head", + content: "A-->B", + sortingOrder: 14, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "An open link", + content: "A --- B", + sortingOrder: 15, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Text on links", + content: "A-- This is the text! ---B", + sortingOrder: 16, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "A link with arrow head and text", + content: "A-->|text|B", + sortingOrder: 17, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Dotted link", + content: "A-.->B", + sortingOrder: 18, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Thick link", + content: "A ==> B", + sortingOrder: 19, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Invisible link", + content: "A ~~~ B", + sortingOrder: 20, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Link with circle edge", + content: "A --o B", + sortingOrder: 21, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Link with cross edge", + content: "A --x B", + sortingOrder: 22, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Flowchart" /* Flowchart */, + description: "Subgraph", + content: "subgraph one\na1-->a2\nend", + sortingOrder: 14, + isPinned: false + } +]; + +// src/elements/ganntChart.ts +var ganttChartElements = [ + { + id: crypto.randomUUID(), + category: "GanttChart" /* GanttChart */, + description: "simple gantt chart", + content: `gantt + title A Gantt Diagram + dateFormat YYYY-MM-DD + section Section + A task :a1, 2014-01-01, 30d + Another task :after a1 , 20d + section Another + Task in sec :2014-01-12 , 12d + another task : 24d`, + sortingOrder: 0, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "GanttChart" /* GanttChart */, + description: "rich gantt chart", + content: `gantt + dateFormat YYYY-MM-DD + title Adding GANTT diagram functionality to mermaid + excludes weekends + + section A section + Completed task :done, des1, 2014-01-06,2014-01-08 + Active task :active, des2, 2014-01-09, 3d + Future task : des3, after des2, 5d + Future task2 : des4, after des3, 5d + + section Critical tasks + Completed task in the critical line :crit, done, 2014-01-06,24h + Implement parser and jison :crit, done, after des1, 2d + Create tests for parser :crit, active, 3d + Future task in critical line :crit, 5d + Create tests for renderer :2d + Add to mermaid :1d + Functionality added :milestone, 2014-01-25, 0d + + section Documentation + Describe gantt syntax :active, a1, after des1, 3d + Add gantt diagram to demo page :after a1 , 20h + Add another diagram to demo page :doc1, after a1 , 48h + + section Last section + Describe gantt syntax :after doc1, 3d + Add gantt diagram to demo page :20h + Add another diagram to demo page :48h`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "GanttChart" /* GanttChart */, + description: "milestones example", + content: `gantt + dateFormat HH:mm + axisFormat %H:%M + Initial milestone : milestone, m1, 17:49,2min + taska2 : 10min + taska3 : 5min + Final milestone : milestone, m2, 18:14, 2min`, + sortingOrder: 2, + isPinned: false + } +]; + +// src/elements/gitGraph.ts +var gitGraphElements = [ + { + id: crypto.randomUUID(), + category: "GitGraph" /* GitGraph */, + description: "simple git graph", + content: `gitGraph + commit + commit + branch develop + checkout develop + commit + commit + checkout main + merge develop + commit + commit`, + sortingOrder: 0, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "GitGraph" /* GitGraph */, + description: "tagged commit", + content: `commit id: "Normal" tag: "v1.0.0"`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "GitGraph" /* GitGraph */, + description: "reverse commit", + content: `commit id: "Reverse" type: REVERSE`, + sortingOrder: 2, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "GitGraph" /* GitGraph */, + description: "highlighted commit", + content: `commit id: "Highlight" type: HIGHLIGHT`, + sortingOrder: 3, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "GitGraph" /* GitGraph */, + description: "reverse commit", + content: `commit id: "Reverse" type: REVERSE`, + sortingOrder: 4, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "GitGraph" /* GitGraph */, + description: "git graph with cherry-pick", + content: `gitGraph + commit id: "ZERO" + branch develop + commit id:"A" + checkout main + commit id:"ONE" + checkout develop + commit id:"B" + checkout main + commit id:"TWO" + cherry-pick id:"A" + commit id:"THREE" + checkout develop + commit id:"C"`, + sortingOrder: 5, + isPinned: false + } +]; + +// src/elements/kanban.ts +var kanbanElements = [ + { + id: crypto.randomUUID(), + category: "Kanban" /* Kanban */, + description: "a sample kanban diagram", + content: `kanban + Todo + [Create Documentation] + docs[Create Blog about the new diagram] + [In progress] + id6[Create renderer so that it works in all cases. We also add som extra text here for testing purposes. And some more just for the extra flare.] + id9[Ready for deploy] + id8[Design grammar]@{ assigned: 'knsv' } + id10[Ready for test] + id4[Create parsing tests]@{ ticket: MC-2038, assigned: 'K.Sveidqvist', priority: 'High' } + id66[last item]@{ priority: 'Very Low', assigned: 'knsv' } + id11[Done] + id5[define getData] + id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char]@{ ticket: MC-2036, priority: 'Very High'} + id3[Update DB function]@{ ticket: MC-2037, assigned: knsv, priority: 'High' } + + id12[Can't reproduce] + id3[Weird flickering in Firefox]`, + sortingOrder: 0, + isPinned: false + } +]; + +// src/elements/mindMap.ts +var mindMapElements = [ + { + id: crypto.randomUUID(), + category: "Mindmap" /* Mindmap */, + description: "a simple mindmap", + content: `mindmap + Root + A + B + C`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Mindmap" /* Mindmap */, + description: "square", + content: `id[I am a square]`, + sortingOrder: 2, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Mindmap" /* Mindmap */, + description: "rounded square", + content: `id(I am a rounded square)`, + sortingOrder: 3, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Mindmap" /* Mindmap */, + description: "circle", + content: `id((I am a circle))`, + sortingOrder: 4, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Mindmap" /* Mindmap */, + description: "bang", + content: `id))I am a bang((`, + sortingOrder: 5, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Mindmap" /* Mindmap */, + description: "cloud", + content: `id)I am a cloud(`, + sortingOrder: 6, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Mindmap" /* Mindmap */, + description: "hexagon", + content: `id{{I am a hexagon}}`, + sortingOrder: 7, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Mindmap" /* Mindmap */, + description: "default", + content: `I am the default shape`, + sortingOrder: 8, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Mindmap" /* Mindmap */, + description: "sample mindmap", + content: `mindmap + root((mindmap)) + Origins + Long history + Popularisation + British popular psychology author Tony Buzan + Research + On effectiveness
and features + On Automatic creation + Uses + Creative techniques + Strategic planning + Argument mapping + Tools + Pen and paper + Mermaid`, + sortingOrder: 9, + isPinned: false + } +]; + +// src/elements/packet.ts +var packetElements = [ + { + id: crypto.randomUUID(), + category: "Packet" /* Packet */, + description: "a sample packet diagram", + content: `packet-beta +title UDP Packet +0-15: "Source Port" +16-31: "Destination Port" +32-47: "Length" +48-63: "Checksum" +64-95: "Data (variable length)" +`, + sortingOrder: 0, + isPinned: false + } +]; + +// src/elements/pieChart.ts +var pieChartElements = [ + { + id: crypto.randomUUID(), + category: "PieChart" /* PieChart */, + description: "sample pie chart", + content: `pie title /r/obsidianmd posts by type + "Graphs" : 85 + "Dashboards" : 14 + "Tips" : 1`, + sortingOrder: 0, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "PieChart" /* PieChart */, + description: "sample pie chart with values shown in legend", + content: `pie showData title /r/obsidianmd posts by type + "Graphs" : 85 + "Dashboards" : 14 + "Tips" : 1`, + sortingOrder: 1, + isPinned: false + } +]; + +// src/elements/quadrant.ts +var quadrantElements = [ + { + id: crypto.randomUUID(), + category: "QuadrantChart" /* QuadrantChart */, + description: "sample quadrant chart", + content: `quadrantChart + title Reach and engagement of campaigns + x-axis Low Reach --> High Reach + y-axis Low Engagement --> High Engagement + quadrant-1 We should expand + quadrant-2 Need to promote + quadrant-3 Re-evaluate + quadrant-4 May be improved + Campaign A: [0.3, 0.6] + Campaign B: [0.45, 0.23] + Campaign C: [0.57, 0.69] + Campaign D: [0.78, 0.34] + Campaign E: [0.40, 0.34] + Campaign F: [0.35, 0.78]`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "QuadrantChart" /* QuadrantChart */, + description: "themed quadrant chart", + content: `%%{init: {"quadrantChart": {"chartWidth": 400, "chartHeight": 400}, "themeVariables": {"quadrant1TextFill": "#ff0000"} }}%% + quadrantChart + x-axis Urgent --> Not Urgent + y-axis Not Important --> "Important \u2764" + quadrant-1 Plan + quadrant-2 Do + quadrant-3 Delegate + quadrant-4 Delete`, + sortingOrder: 1, + isPinned: false + } +]; + +// src/elements/requirementDiagram.ts +var requirementDiagramElements = [ + { + id: crypto.randomUUID(), + category: "RequirementDiagram" /* RequirementDiagram */, + description: "sample requirements diagram", + content: ` requirementDiagram + + requirement test_req { + id: 1 + text: the test text. + risk: high + verifymethod: test + } + + element test_entity { + type: simulation + } + + test_entity - satisfies -> test_req`, + sortingOrder: 0, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "RequirementDiagram" /* RequirementDiagram */, + description: "sample requirements diagram", + content: `element customElement { + type: customType + docref: customDocRef + }`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "RequirementDiagram" /* RequirementDiagram */, + description: "a requirement with high risk", + content: `functionalRequirement myReq { + id: reqId + text: someText + risk: High + verifymethod: analysis + }`, + sortingOrder: 2, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "RequirementDiagram" /* RequirementDiagram */, + description: "sample requirements diagram", + content: `interfaceRequirement myReq2 { + id: reqId + text: someText + risk: Medium + verifymethod: demonstration + }`, + sortingOrder: 3, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "RequirementDiagram" /* RequirementDiagram */, + description: "sample requirements diagram", + content: `designConstraint myReq3 { + id: reqId + text: someText + risk: Low + verifymethod: test + }`, + sortingOrder: 4, + isPinned: false + } +]; + +// src/elements/sankeyDiagram.ts +var sankeyDiagramElements = [ + { + id: crypto.randomUUID(), + category: "SankeyDiagram" /* SankeyDiagram */, + description: "", + content: `sankey-beta + %% source,target,value + Electricity grid,Over generation / exports,104.453 + Electricity grid,Heating and cooling - homes,113.726 + Electricity grid,H2 conversion,27.14`, + sortingOrder: 0, + isPinned: false + } +]; + +// src/elements/sequenceDiagram.ts +var sequenceDiagramElements = [ + { + id: crypto.randomUUID(), + category: "SequenceDiagram" /* SequenceDiagram */, + description: "a simple sequence diagram", + content: `sequenceDiagram +Alice->>John: Hello John, how are you? +John-->>Alice: Great! +Alice-)John: See you later!`, + sortingOrder: 0, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "SequenceDiagram" /* SequenceDiagram */, + description: "a simple sequence diagram with actors", + content: `sequenceDiagram +actor Alice +actor John +Alice->>John: Hello John, how are you? +John-->>Alice: Great! +Alice-)John: See you later!`, + sortingOrder: 1, + isPinned: false + } +]; + +// src/elements/stateDiagram.ts +var stateDiagramElements = [ + { + id: crypto.randomUUID(), + category: "StateDiagram" /* StateDiagram */, + description: "a sample state diagram", + content: `stateDiagram-v2 + [*] --> Still + Still --> [*] + + Still --> Moving + Moving --> Still + Moving --> Crash + Crash --> [*]`, + sortingOrder: 0, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "StateDiagram" /* StateDiagram */, + description: "a sample state diagram with left-to-right direction", + content: `stateDiagram-v2 + direction LR + [*] --> Still + Still --> [*] + + Still --> Moving + Moving --> Still + Moving --> Crash + Crash --> [*]`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "StateDiagram" /* StateDiagram */, + description: "node with description", + content: `s2 : This is a state description`, + sortingOrder: 2, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "StateDiagram" /* StateDiagram */, + description: "a transition", + content: `s1 --> s2`, + sortingOrder: 3, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "StateDiagram" /* StateDiagram */, + description: "a transition with label", + content: `s1 --> s2: A transition`, + sortingOrder: 4, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "StateDiagram" /* StateDiagram */, + description: "composite state", + content: ` + [*] --> First + state First { + [*] --> second + second --> [*] + }`, + sortingOrder: 5, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "StateDiagram" /* StateDiagram */, + description: "diagram with choice", + content: `stateDiagram-v2 + state if_state <> + [*] --> IsPositive + IsPositive --> if_state + if_state --> False: if n < 0 + if_state --> True : if n >= 0`, + sortingOrder: 6, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "StateDiagram" /* StateDiagram */, + description: "diagram with fork", + content: `stateDiagram-v2 + state fork_state <> + [*] --> fork_state + fork_state --> State2 + fork_state --> State3 + + state join_state <> + State2 --> join_state + State3 --> join_state + join_state --> State4 + State4 --> [*]`, + sortingOrder: 7, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "StateDiagram" /* StateDiagram */, + description: "a diagram with concurrency", + content: `stateDiagram-v2 + [*] --> Active + + state Active { + [*] --> NumLockOff + NumLockOff --> NumLockOn : EvNumLockPressed + NumLockOn --> NumLockOff : EvNumLockPressed + -- + [*] --> CapsLockOff + CapsLockOff --> CapsLockOn : EvCapsLockPressed + CapsLockOn --> CapsLockOff : EvCapsLockPressed + -- + [*] --> ScrollLockOff + ScrollLockOff --> ScrollLockOn : EvScrollLockPressed + ScrollLockOn --> ScrollLockOff : EvScrollLockPressed + }`, + sortingOrder: 8, + isPinned: false + } +]; + +// src/elements/timeline.ts +var timelineElements = [ + { + id: crypto.randomUUID(), + category: "Timeline" /* Timeline */, + description: "sample timeline", + content: `timeline + title History of Social Media Platform + 2002 : LinkedIn + 2004 : Facebook + : Google + 2005 : Youtube + 2006 : Twitter`, + sortingOrder: 1, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Timeline" /* Timeline */, + description: "timeline with grouping", + content: `timeline + title Timeline of Industrial Revolution + section 17th-20th century + Industry 1.0 : Machinery, Water power, Steam
power + Industry 2.0 : Electricity, Internal combustion engine, Mass production + Industry 3.0 : Electronics, Computers, Automation + section 21st century + Industry 4.0 : Internet, Robotics, Internet of Things + Industry 5.0 : Artificial intelligence, Big data,3D printing`, + sortingOrder: 2, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "Timeline" /* Timeline */, + description: "timeline with Forest theme. see the docs for additional themes", + content: `%%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% + timeline + title History of Social Media Platform + 2002 : LinkedIn + 2004 : Facebook : Google + 2005 : Youtube + 2006 : Twitter + 2007 : Tumblr + 2008 : Instagram + 2010 : Pinterest`, + sortingOrder: 3, + isPinned: false + } +]; + +// src/elements/userJourneyDiagram.ts +var userJourneyDiagramElements = [ + { + id: crypto.randomUUID(), + category: "UserJourneyDiagram" /* UserJourneyDiagram */, + description: "a sample user journey diagram", + content: `journey + title My working day + section Go to work + Make tea: 5: Me + Go upstairs: 3: Me + Do work: 1: Me, Cat + section Go home + Go downstairs: 5: Me + Sit down: 5: Me`, + sortingOrder: 0, + isPinned: false + }, + { + id: crypto.randomUUID(), + category: "UserJourneyDiagram" /* UserJourneyDiagram */, + description: "a step in user journey", + content: ` Step Title: 5: ActorName`, + sortingOrder: 1, + isPinned: false + } +]; + +// src/elements/xyChart.ts +var xyChartElements = [ + { + id: crypto.randomUUID(), + category: "XyChart" /* XyChart */, + description: "a sample XYChart diagram", + content: `xychart-beta + title "Sales Revenue" + x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec] + y-axis "Revenue (in $)" 4000 --> 11000 + bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] + line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]`, + sortingOrder: 0, + isPinned: false + } +]; + +// src/elements/defaultElements.ts +var defaultElements = [ + ...flowchartElements, + ...sequenceDiagramElements, + ...classDiagramElements, + ...stateDiagramElements, + ...entityRelationshipDiagramElements, + ...userJourneyDiagramElements, + ...ganttChartElements, + ...pieChartElements, + ...requirementDiagramElements, + ...gitGraphElements, + ...mindMapElements, + ...timelineElements, + ...quadrantElements, + ...c4DiagramElements, + ...sankeyDiagramElements, + ...xyChartElements, + ...packetElements, + ...kanbanElements, + ...blockDiagramElements, + ...architectureElements +]; + +// src/core/elementService.ts +var wrappingsForElementCategories = { + Flowchart: { defaultWrapping: "flowchart LR", wrappings: ["flowchart LR", "flowchart TD"] }, + SequenceDiagram: { defaultWrapping: "sequenceDiagram", wrappings: null }, + ClassDiagram: { defaultWrapping: "classDiagram", wrappings: null }, + StateDiagram: { defaultWrapping: "stateDiagram-v2", wrappings: null }, + EntityRelationshipDiagram: { defaultWrapping: "erDiagram", wrappings: null }, + UserJourneyDiagram: { defaultWrapping: "journey", wrappings: null }, + GanttChart: { defaultWrapping: "gantt", wrappings: null }, + PieChart: { defaultWrapping: "pie", wrappings: null }, + RequirementDiagram: { defaultWrapping: "requirementDiagram", wrappings: null }, + GitGraph: { defaultWrapping: "gitGraph", wrappings: null }, + Mindmap: { defaultWrapping: "mindmap", wrappings: ["mindmap"] }, + Timeline: { defaultWrapping: "timeline", wrappings: null }, + QuadrantChart: { defaultWrapping: "quadrantChart", wrappings: null }, + C4Diagram: { defaultWrapping: "C4Context", wrappings: null }, + SankeyDiagram: { defaultWrapping: "sankey-beta", wrappings: null }, + XyChart: { defaultWrapping: "xychart-beta", wrappings: null }, + Packet: { defaultWrapping: "packet-beta", wrappings: null }, + Kanban: { defaultWrapping: "kanban", wrappings: null }, + Block: { defaultWrapping: "block-beta", wrappings: null }, + Architecture: { defaultWrapping: "architecture-beta", wrappings: null } +}; +var MermaidElementService = class { + static DefaultElements() { + return defaultElements; + } + saveElement(element, plugin) { + const elementExists = plugin.settings.elements.some((el) => el.id === element.id); + if (elementExists) { + plugin.settings.elements.forEach((el) => { + if (el.id === element.id) { + el = element; + } + }); + } else { + this.fixSortOrder(element, plugin); + plugin.settings.elements.push(element); + } + plugin.saveSettings(); + } + fixSortOrder(element, plugin) { + const elementsFromSameCategory = plugin.settings.elements.filter((element2) => element2.category === element2.category); + if (elementsFromSameCategory.some((element2) => element2.sortingOrder === element2.sortingOrder)) { + element.sortingOrder = elementsFromSameCategory.length; + } + } + getSampleDiagram(category) { + return this.wrapForPastingIntoEditor(this.wrapWithMermaidBlock(sampleDiagrams[category])); + } + wrapForPastingIntoEditor(text) { + return `${text} +`; + } + wrapWithMermaidBlock(text) { + return `\`\`\`mermaid +${text} +\`\`\``; + } + wrapAsCompleteDiagram(element) { + const wrapping = wrappingsForElementCategories[element.category]; + return (wrapping.wrappings ? wrapping.wrappings.some((w) => element.content.contains(w)) : element.content.contains(wrapping.defaultWrapping)) ? element.content : wrapping.defaultWrapping + "\n" + element.content; + } +}; + +// src/core/textEditorService.ts +var NoActiveCursorError = class extends Error { + constructor() { + super(); + this.message = "Mermaid Tools: Error getting cursor position. Make sure you are in editing mode and have an active cursor in file content."; + } +}; +var TextEditorService = class { + constructor() { + this._elementService = new MermaidElementService(); + } + insertTextAtCursor(editor, content) { + if (!editor) + throw new NoActiveCursorError(); + content = this._elementService.wrapForPastingIntoEditor(content); + const cursor = editor.getCursor(); + editor.replaceRange(content, cursor); + editor.setCursor(content.length); + editor.focus(); + } +}; + +// src/settings/settings.ts +var MermaidPluginSettings = class { + constructor() { + this.categories = ElementCategory; + } + static DefaultSettings() { + let settings = new MermaidPluginSettings(); + settings.elements = defaultElements; + settings.selectedCategory = "Flowchart" /* Flowchart */; + return settings; + } +}; + +// src/trident-icon.ts +var import_obsidian = require("obsidian"); +function addTridentIcon() { + (0, import_obsidian.addIcon)(TRIDENT_ICON_NAME, getSanitizedSvg()); +} +function getSanitizedSvg() { + var sanitized = (0, import_obsidian.sanitizeHTMLToDom)(tridentIcon); + var tempContainer = createDiv(); + tempContainer.appendChild(sanitized); + return tempContainer.innerHTML; +} +var tridentIcon = ` + +`; + +// src/ui/settingsTab.ts +var import_obsidian3 = require("obsidian"); + +// src/ui/editMermaidElementModal.ts +var import_obsidian2 = require("obsidian"); +var EditMermaidElementModal = class extends import_obsidian2.Modal { + constructor(app, _plugin, _mermaid, _element) { + super(app); + this._plugin = _plugin; + this._mermaid = _mermaid; + this._element = _element; + } + async onOpen() { + let { contentEl } = this; + contentEl.addClass("mermaid-tools-edit-element-modal"); + contentEl.createEl("h2", { text: "Edit element" }); + let renderContainerEl = contentEl.createDiv(); + let renderEl = renderContainerEl.createEl("pre", { text: "rendered diagram" }); + if (!this._mermaid) + this._mermaid = await (0, import_obsidian2.loadMermaid)(); + renderEl.id = "mermaid-edit-element-modal"; + let elementCategoryContainerEl = contentEl.createDiv(); + elementCategoryContainerEl.createEl("label", { text: "Category" }); + let elementCategoryEl = elementCategoryContainerEl.createEl("select"); + for (let category in ElementCategory) { + let option = elementCategoryEl.createEl("option", { text: category }); + option.value = category; + } + elementCategoryEl.value = this._element.category; + elementCategoryEl.onchange = (e) => { + this._element.category = elementCategoryEl.value; + }; + let elementDescriptionContainerEl = contentEl.createDiv(); + elementDescriptionContainerEl.createEl("label", { text: "Description" }); + let elementDescriptionEl = elementDescriptionContainerEl.createEl("input", { value: this._element.description, type: "text" }); + elementDescriptionEl.style.minWidth = "50%"; + elementDescriptionEl.onchange = (e) => { + this._element.description = elementDescriptionEl.value; + }; + let elementContentContainerEl = contentEl.createDiv(); + elementContentContainerEl.createEl("label", { text: "Content" }); + let elementContentEl = elementContentContainerEl.createEl("textarea", { text: this._element.content }); + elementContentEl.style.height = "200px"; + elementContentEl.style.width = "100%"; + elementContentEl.onchange = async (e) => { + this._element.content = elementContentEl.value; + let { svg: svg2 } = await this._mermaid.render(renderEl.id, this._plugin._mermaidElementService.wrapAsCompleteDiagram(this._element)); + renderEl.innerHTML = svg2; + renderContainerEl.appendChild(renderEl); + }; + let saveButtonEl = contentEl.createEl("button", { text: "Save" }); + saveButtonEl.onclick = (e) => { + this.save(); + }; + let { svg } = await this._mermaid.render(renderEl.id, this._plugin._mermaidElementService.wrapAsCompleteDiagram(this._element)); + renderEl.innerHTML = svg; + renderContainerEl.appendChild(renderEl); + } + save() { + this._plugin._mermaidElementService.saveElement(this._element, this._plugin); + this.close(); + } +}; + +// src/ui/settingsTab.ts +var MermaidToolsSettingsTab = class extends import_obsidian3.PluginSettingTab { + constructor(_app, _plugin) { + super(_app, _plugin); + this._app = _app; + this._plugin = _plugin; + } + async display() { + await renderElements(this.containerEl, this._plugin); + } +}; +async function renderElements(containerEl, plugin) { + let mermaid = await (0, import_obsidian3.loadMermaid)(); + containerEl.empty(); + containerEl.createEl("h1", { text: "Mermaid Tools Settings" }); + containerEl.createEl("h2", { text: "Manage elements" }); + createAddButton(containerEl, plugin); + for (let category in ElementCategory) { + renderElementCategory(category, plugin, containerEl, mermaid); + } + ; +} +function renderElementCategory(category, plugin, parentEl, mermaid) { + let copy = [...plugin.settings.elements]; + let elements = copy.filter((e) => e.category === category); + let containerEl = document.getElementById(category + "-container"); + let isFirstRender = !containerEl; + containerEl != null ? containerEl : containerEl = parentEl.createDiv(); + containerEl.id = category + "-container"; + containerEl.innerHTML = ""; + let header = containerEl.createEl("h3", { text: category }); + header.addClass("mermaid-tools-element-category-header"); + let elementsContainerEl = containerEl.createDiv(); + elementsContainerEl.addClass("mermaid-tools-element-category-container"); + header.removeClass("collapsed"); + elementsContainerEl.hidden = false; + if (isFirstRender) { + header.addClass("collapsed"); + elementsContainerEl.hidden = true; + } + header.onClickEvent(() => { + header.classList.toggle("collapsed"); + elementsContainerEl.hidden = !elementsContainerEl.hidden; + }); + elements.sort((a, b) => a.sortingOrder - b.sortingOrder).forEach(async (element, index) => { + let settingContainer = elementsContainerEl.createDiv("mermaid-tools-element-container"); + const setting = new import_obsidian3.Setting(settingContainer); + setting.setName(element.description); + setting.addExtraButton((cb) => { + cb.setIcon("edit").setTooltip("edit element").onClick(() => { + let modal = new EditMermaidElementModal(plugin.app, plugin, mermaid, element); + modal.open(); + modal.onClose = () => { + renderElementCategory(category, plugin, parentEl, mermaid); + }; + }); + }); + setting.addExtraButton((cb) => { + cb.setIcon("copy").setTooltip("create a duplicate of this element").onClick(() => { + let duplicate = { + id: crypto.randomUUID(), + category: element.category, + description: element.description + " (copy)", + content: element.content, + sortingOrder: plugin.settings.elements.filter((el) => el.category === element.category).length, + isPinned: element.isPinned + }; + plugin._mermaidElementService.saveElement(duplicate, plugin); + plugin.saveSettings(); + renderElementCategory(category, plugin, parentEl, mermaid); + }); + }); + setting.addExtraButton((cb) => { + cb.setIcon("arrow-up").setTooltip("move element up in the sidebar").onClick(() => { + if (index > 0) { + const temp = elements[index - 1].sortingOrder; + elements[index - 1].sortingOrder = element.sortingOrder; + element.sortingOrder = temp; + plugin.settings.elements = plugin.settings.elements.filter((el) => el.category !== category).concat(elements); + plugin.saveSettings(); + renderElementCategory(category, plugin, parentEl, mermaid); + } + }); + }); + setting.addExtraButton((cb) => { + cb.setIcon("arrow-down").setTooltip("move element down in the sidebar").onClick(() => { + if (index < elements.length - 1) { + const temp = elements[index + 1].sortingOrder; + elements[index + 1].sortingOrder = element.sortingOrder; + element.sortingOrder = temp; + plugin.settings.elements = plugin.settings.elements.filter((el) => el.category !== category).concat(elements); + plugin.saveSettings(); + renderElementCategory(category, plugin, parentEl, mermaid); + } + }); + }); + setting.addExtraButton((cb) => { + cb.setIcon("trash-2").setTooltip("delete element").onClick(() => { + plugin.settings.elements = plugin.settings.elements.filter((e) => e.id !== element.id); + plugin.saveSettings(); + renderElementCategory(category, plugin, parentEl, mermaid); + }); + }); + }); +} +function createAddButton(parentEl, plugin) { + const addButton = parentEl.createEl("button", { text: "Add" }); + addButton.innerHTML = "Add an element"; + addButton.onclick = () => { + let newElement = { + id: crypto.randomUUID(), + description: "New element", + content: `flowchart TD +Start --> Stop`, + category: "Flowchart" /* Flowchart */, + sortingOrder: 0, + isPinned: false + }; + let modal = new EditMermaidElementModal(plugin.app, plugin, null, newElement); + modal.open(); + modal.onClose = () => { + renderElementCategory(modal._element.category, plugin, parentEl, null); + }; + }; +} + +// src/ui/toolbarView/mermaidToolbarView.ts +var import_obsidian5 = require("obsidian"); + +// src/ui/toolbarView/viewHelpers.ts +var import_obsidian4 = require("obsidian"); +var TOOLBAR_ELEMENT_CLASS_NAME = "mermaid-toolbar-element"; +var TOOLBAR_ELEMENTS_CONTAINER_CLASS_NAME = "mermaid-toolbar-elements-container"; +var TOOLBAR_ELEMENTS_CONTAINER_ID = "mermaid-toolbar-elements-container-id"; +async function createMermaidToolbar(topRowButtons, items, selectedCategory, onCategoryChanged, onElementClick) { + const container = document.createElement("div"); + const topRow = container.createDiv(); + topRow.addClass("mermaid-toolbar-top-row"); + const elementsContainer = container.createDiv(); + elementsContainer.addClass(TOOLBAR_ELEMENTS_CONTAINER_CLASS_NAME); + elementsContainer.setAttr("id", TOOLBAR_ELEMENTS_CONTAINER_ID); + createDropdown(topRow, elementsContainer, items, selectedCategory, onCategoryChanged, onElementClick); + createTopRowBtns(topRow, topRowButtons); + await recreateElementsSection(elementsContainer, selectedCategory, items, onElementClick); + return container; +} +function createTopRowBtns(parentEl, buttons) { + buttons.forEach((btn) => { + const b = new import_obsidian4.ButtonComponent(parentEl).setClass("clickable-icon").setIcon(btn.iconName).setTooltip(btn.tooltip).onClick(btn.callback); + }); +} +function createDropdown(parentEl, elementsContainer, items, selectedCategory, onSelectionChanged, onElClick) { + const categories = Object.keys(ElementCategory); + const dropdown = new import_obsidian4.DropdownComponent(parentEl); + categories.forEach((c) => { + dropdown.addOption(c, c); + }); + dropdown.setValue(selectedCategory); + dropdown.onChange((val) => { + onSelectionChanged(val); + recreateElementsSection(elementsContainer, val, items, onElClick); + }); +} +async function recreateElementsSection(sectionContainer, category, items, onElClick) { + sectionContainer.innerHTML = ""; + const elemService = new MermaidElementService(); + const mermaid = await (0, import_obsidian4.loadMermaid)(); + const filteredSortedItems = items.filter((i) => i.category == category).sort((a, b) => a.sortingOrder - b.sortingOrder); + filteredSortedItems.forEach(async (elem, index) => { + const el = createToolbarElement(sectionContainer); + el.id = `mermaid-toolbar-element-${elem.category}-${index}`; + const diagram = elemService.wrapAsCompleteDiagram(elem); + console.log(mermaid.detectType(diagram)); + const { svg } = await mermaid.render(el.id, diagram); + el.title = elem.description; + el.innerHTML = svg; + el.onclick = (e) => onElClick(elem.content); + sectionContainer.appendChild(el); + }); +} +function createToolbarElement(parentEl) { + const itemEl = parentEl.createEl("pre"); + itemEl.addClass(TOOLBAR_ELEMENT_CLASS_NAME); + return itemEl; +} + +// src/ui/toolbarView/mermaidToolbarButtons.ts +var MermaidToolbarButton = class { + constructor(tooltip, iconName, callback) { + this.tooltip = tooltip; + this.iconName = iconName; + this.callback = callback; + } +}; + +// src/ui/toolbarView/mermaidToolbarView.ts +var _MermaidToolbarView = class extends import_obsidian5.ItemView { + constructor(leaf, plugin) { + super(leaf); + this.topRowButtons = [ + new MermaidToolbarButton("insert Mermaid code block with sample diagram", "code-2", () => this.insertTextAtCursor(this._plugin._mermaidElementService.getSampleDiagram(this._plugin.settings.selectedCategory))), + new MermaidToolbarButton("open Mermaid.js documentation web page", "external-link", () => window.open("https://mermaid.js.org/intro/")), + new MermaidToolbarButton("open settings", "settings", () => { + this.app.setting.open(); + this.app.setting.openTabById("mermaid-tools"); + }) + ]; + this._plugin = plugin; + this.items = plugin.settings.elements; + this.containerEl.children[1].addClass("mermaid-toolbar-container"); + } + async onOpen() { + await this.recreateToolbar(this._plugin.settings.selectedCategory); + } + async onClose() { + } + async recreateToolbar(selectedCategory) { + const container = this.containerEl.children[1]; + container.empty(); + let toolbarElement = await createMermaidToolbar(this.topRowButtons, this.items, selectedCategory, async (newCat) => { + this._plugin.settings.selectedCategory = newCat; + this._plugin.saveSettings(); + await this.recreateToolbar(this._plugin.settings.selectedCategory); + }, (text) => this.insertTextAtCursor(text)); + container.appendChild(toolbarElement); + } + insertTextAtCursor(text) { + this._plugin.insertTextAtCursor(text); + } + getViewType() { + return _MermaidToolbarView.VIEW_TYPE; + } + getDisplayText() { + return _MermaidToolbarView.VIEW_DESCRIPTION; + } + getIcon() { + return TRIDENT_ICON_NAME; + } +}; +var MermaidToolbarView = _MermaidToolbarView; +MermaidToolbarView.VIEW_TYPE = "mermaid-toolbar-view"; +MermaidToolbarView.VIEW_DESCRIPTION = "Mermaid Toolbar"; + +// main.ts +var TRIDENT_ICON_NAME = "trident-custom"; +var MermaidPlugin = class extends import_obsidian6.Plugin { + constructor() { + super(...arguments); + this._mermaidElementService = new MermaidElementService(); + this._textEditorService = new TextEditorService(); + } + async onload() { + await this.loadSettings(); + addTridentIcon(); + this.registerView(MermaidToolbarView.VIEW_TYPE, (leaf) => new MermaidToolbarView(leaf, this)); + this.app.workspace.on("active-leaf-change", (leaf) => { + var _a, _b; + this.activeEditor = (_b = (_a = this.app.workspace.activeEditor) == null ? void 0 : _a.editor) != null ? _b : this.activeEditor; + }); + this.addRibbonIcon(TRIDENT_ICON_NAME, "Open Mermaid Toolbar", () => { + this.activateView(); + }); + this.addCommand({ + id: "open-toolbar", + name: "Open Toolbar View", + callback: () => { + this.activateView(); + } + }); + this.addSettingTab(new MermaidToolsSettingsTab(this.app, this)); + } + async onunload() { + this.app.workspace.detachLeavesOfType(MermaidToolbarView.VIEW_TYPE); + } + async loadSettings() { + this.settings = Object.assign({}, MermaidPluginSettings.DefaultSettings(), await this.loadData()); + this.addNewCategories(); + } + addNewCategories() { + if (!this.settings.elements.some((x) => x.category === "Mindmap" /* Mindmap */)) { + this.settings.elements.push(...mindMapElements); + console.log("[Mermaid Tools] added Mindmap elements"); + } + if (!this.settings.elements.some((x) => x.category === "Timeline" /* Timeline */)) { + this.settings.elements.push(...timelineElements); + console.log("[Mermaid Tools] added Timeline elements"); + } + if (!this.settings.elements.some((x) => x.category === "QuadrantChart" /* QuadrantChart */)) { + this.settings.elements.push(...quadrantElements); + console.log("[Mermaid Tools] added QuadrantChart elements"); + } + if (!this.settings.elements.some((x) => x.category === "C4Diagram" /* C4Diagram */)) { + this.settings.elements.push(...c4DiagramElements); + console.log("[Mermaid Tools] added C4 diagram elements"); + } + if (!this.settings.elements.some((x) => x.category === "Packet" /* Packet */)) { + this.settings.elements.push(...packetElements); + console.log("[Mermaid Tools] added Packet elements"); + } + if (!this.settings.elements.some((x) => x.category === "Kanban" /* Kanban */)) { + this.settings.elements.push(...kanbanElements); + console.log("[Mermaid Tools] added Kanban elements"); + } + if (!this.settings.elements.some((x) => x.category === "Block" /* Block */)) { + this.settings.elements.push(...blockDiagramElements); + console.log("[Mermaid Tools] added Block elements"); + } + if (!this.settings.elements.some((x) => x.category === "Architecture" /* Architecture */)) { + this.settings.elements.push(...architectureElements); + console.log("[Mermaid Tools] added Architecture diagram elements"); + } + } + async saveSettings() { + await this.saveData(this.settings); + await this.activateView(); + } + async activateView() { + var _a; + this.app.workspace.detachLeavesOfType(MermaidToolbarView.VIEW_TYPE); + if (this.app.workspace === null) + return; + await ((_a = this.app.workspace.getRightLeaf(false)) == null ? void 0 : _a.setViewState({ + type: MermaidToolbarView.VIEW_TYPE, + active: true + })); + this.app.workspace.revealLeaf(this.app.workspace.getLeavesOfType(MermaidToolbarView.VIEW_TYPE)[0]); + } + insertTextAtCursor(text) { + this._textEditorService.insertTextAtCursor(this.activeEditor, text); + } +}; + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/mermaid-tools/manifest.json b/.obsidian/plugins/mermaid-tools/manifest.json new file mode 100644 index 0000000..07494df --- /dev/null +++ b/.obsidian/plugins/mermaid-tools/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "mermaid-tools", + "name": "Mermaid Tools", + "version": "1.2.1", + "minAppVersion": "1.4.0", + "description": "Improved Mermaid.js experience for Obsidian: visual toolbar with common elements & more", + "author": "dartungar", + "authorUrl": "https://dartungar.com", + "fundingUrl": "https://www.paypal.com/paypalme/dartungar", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/mermaid-tools/styles.css b/.obsidian/plugins/mermaid-tools/styles.css new file mode 100644 index 0000000..ad4e2e7 --- /dev/null +++ b/.obsidian/plugins/mermaid-tools/styles.css @@ -0,0 +1,55 @@ +.mermaid-toolbar-container, .mermaid-toolbar-container * { + max-width: 100%; + max-height: 100%; +} + +.mermaid-toolbar-top-row { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 8px; +} + +.mermaid-toolbar-elements-container { + padding-top: 1rem; + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.mermaid-toolbar-element { + font-size: var(--font-ui-small); + cursor: pointer; + padding: 2px 2px 2px 5px; + border-radius: 3px; + flex: 1 0 auto; +} + +.mermaid-toolbar-element:hover { + background-color: var(--interactive-hover); +} + +.mermaid-tools-element-category-header::before { + content: "▼ "; + font-size: 70%; + padding-bottom: 2px; +} + +.mermaid-tools-element-category-header.collapsed::before { + content: "▶ "; + font-size: 70%; + padding-bottom: 2px; +} + +.mermaid-tools-element-container { + padding-top: 6px; + border-bottom: var(--border-width) solid var(--color-base-35); +} + +.mermaid-tools-edit-element-modal > div { + margin-bottom: 0.5rem; +} + +.mermaid-tools-edit-element-modal label { + margin-right: 1rem; +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/data.json b/.obsidian/plugins/obsidian-excalidraw-plugin/data.json index c9a28bf..29345c0 100644 --- a/.obsidian/plugins/obsidian-excalidraw-plugin/data.json +++ b/.obsidian/plugins/obsidian-excalidraw-plugin/data.json @@ -103,7 +103,26 @@ "mdFontColor": "Black", "mdBorderColor": "Black", "mdCSS": "", - "scriptEngineSettings": {}, + "scriptEngineSettings": { + "Downloaded/Mindmap format": { + "MindMap Format": { + "value": "Excalidraw/MindMap Format", + "description": "This is prepared for the namespace of MindMap Format and does not need to be modified" + }, + "default gap": { + "value": 10, + "description": "Interval size of element" + }, + "curve length": { + "value": 40, + "description": "The length of the curve part in the mind map line" + }, + "length between element and line": { + "value": 50, + "description": "The distance between the tail of the connection and the connecting elements of the mind map" + } + } + }, "defaultTrayMode": false, "previousRelease": "2.5.0", "showReleaseNotes": true, diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 805cdc6..5d78cc5 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -43,12 +43,24 @@ "state": { "type": "markdown", "state": { - "file": "0 Journal/Meetings/17.06.2025 - Pilot Kickoff Planning.md", + "file": "99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "17.06.2025 - Pilot Kickoff Planning" + "title": "Kalman Filter" + } + }, + { + "id": "da60fe5e3074c644", + "type": "leaf", + "state": { + "type": "excalidraw", + "state": { + "file": "99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/kalman_filter.excalidraw.md" + }, + "icon": "excalidraw-icon", + "title": "kalman_filter.excalidraw" } } ], @@ -109,7 +121,7 @@ } ], "direction": "horizontal", - "width": 279.5 + "width": 400.50390243530273 }, "right": { "id": "1017d1cf4a473028", @@ -301,8 +313,11 @@ }, "active": "84f0fd68d3885e08", "lastOpenFiles": [ - "2 Personal/1 Skills/IT/React Learnings.md", + "99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/kalman_filter.excalidraw.md", + "99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md", + "OneNote/PhD/Things to know very well when applying for a robotics PhD.md", "0 Journal/Meetings/17.06.2025 - Pilot Kickoff Planning.md", + "2 Personal/1 Skills/IT/React Learnings.md", "Dashboard.md", "99 Work/0 OneSec/OneSecThoughts/Cofounder Meeting 1 - 04.06.25.md", "2 Personal/Hobbies/Gelbes Velo von Mänu.md", @@ -340,9 +355,6 @@ "2 Personal/Hobbies/Berge/Gletscherkurs/Gletscherkurs - Selbstudie.md", "2 Personal/Home Lab/Repairshop/Repair Climbing Light.md", "99 Work/0 OneSec/OneSecNotes/10 Projects/Requirements/Requirements Gathering.md", - "0 Journal/0 Daily/2025-04-16.md", - "7 People/_People Overview.md", - "0 Journal/0 Daily/2025-04-14.md", "Attachments/Pasted image 20250402091926.png", "Attachments/Pasted image 20250331151348.png", "Attachments/IMG_5894.jpeg", diff --git a/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md b/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md new file mode 100644 index 0000000..f1ed258 --- /dev/null +++ b/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md @@ -0,0 +1,18 @@ +--- +title: Kalman Filter +created_date: 2025-04-25 +updated_date: 2025-04-25 +aliases: +tags: +--- +# Kalman Filter + +The kalman filter is like the alpha filter (e.g. low pass filter) but with a dynamically adjusted alpha. Meaning it adapts the corner frequency dynamically when filtering things. + +```mermaid +graph TD +a --> b +``` + +## Sources +- [Kalman Filter for Beginners, Part 1 - Recursive Filters & MATLAB Examples - YouTube](https://www.youtube.com/watch?v=HCd-leV8OkU) \ No newline at end of file diff --git a/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/kalman_filter.excalidraw.md b/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/kalman_filter.excalidraw.md new file mode 100644 index 0000000..8f7964d --- /dev/null +++ b/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/kalman_filter.excalidraw.md @@ -0,0 +1,44 @@ +--- + +excalidraw-plugin: parsed +tags: [excalidraw] + +--- +==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving' + + +# Excalidraw Data +## Text Elements +0. Set initial Values + ^iV7ZqvaH + +%% +## Drawing +```compressed-json +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 + +lUiz6ntPM1ZXAILV+uzubvlfEAA= +``` +%% \ No newline at end of file diff --git a/OneNote/PhD/Kalman Filter.md b/OneNote/PhD/Kalman Filter.md deleted file mode 100644 index 0c8752c..0000000 --- a/OneNote/PhD/Kalman Filter.md +++ /dev/null @@ -1,20 +0,0 @@ -> [!caution] This page contained a drawing which was not converted. - -You are a slave to the model! - - - -Here probably your model is wrong! - -But Kalman still uses it… - - - - -Belieffrom Model - -Measurement - - - -Corrected value \ No newline at end of file