├── .obsidian ├── plugins │ ├── obsidian-auto-link-title │ │ ├── styles.css │ │ └── manifest.json │ ├── smart-connections │ │ ├── data.json │ │ ├── manifest.json │ │ └── styles.css │ ├── embed-code-file │ │ ├── data.json │ │ ├── manifest.json │ │ ├── styles.css │ │ └── main.js │ ├── obsidian-tagfolder │ │ ├── manifest.json │ │ ├── data.json │ │ └── styles.css │ ├── obsidian-outliner │ │ ├── data.json │ │ ├── manifest.json │ │ └── styles.css │ ├── float-search │ │ ├── data.json │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-image-toolkit │ │ └── manifest.json │ ├── global-search-and-replace │ │ ├── manifest.json │ │ └── styles.css │ ├── slash-commander │ │ ├── manifest.json │ │ ├── data.json │ │ └── styles.css │ ├── various-complements │ │ ├── manifest.json │ │ └── data.json │ ├── obsidian-git │ │ ├── manifest.json │ │ ├── data.json │ │ └── styles.css │ ├── obsidian-style-settings │ │ ├── manifest.json │ │ ├── data.json │ │ └── styles.css │ ├── templater-obsidian │ │ ├── manifest.json │ │ ├── data.json │ │ └── styles.css │ ├── dataview │ │ ├── manifest.json │ │ ├── data.json │ │ └── styles.css │ ├── obsidian-minimal-settings │ │ ├── manifest.json │ │ └── data.json │ ├── mononote │ │ ├── manifest.json │ │ └── main.js │ └── colored-tags │ │ ├── manifest.json │ │ └── data.json ├── canvas.json ├── daily-notes.json ├── app.json ├── themes │ └── Minimal │ │ └── manifest.json ├── appearance.json ├── community-plugins.json ├── graph.json ├── core-plugins-migration.json ├── core-plugins.json ├── hotkeys.json └── workspaces.json ├── .vscode └── extensions.json ├── 00_templates ├── 11_embed_code.md ├── 01_note.md └── 02_literature.md ├── 01_data └── 2025 │ └── 06 │ └── 21 │ ├── SampleNote.md │ ├── sample.drawio │ └── sample.svg ├── .gitignore ├── LICENSE ├── .smart-env └── smart_env.json ├── 02_view ├── 10_dashboard.md └── 20_tasks.md └── README.md /.obsidian/plugins/obsidian-auto-link-title/styles.css: -------------------------------------------------------------------------------- 1 | /* no styles */ -------------------------------------------------------------------------------- /.obsidian/plugins/smart-connections/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "last_version": "3.0.78", 3 | "installed_at": 1750045789795 4 | } -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "mhutchie.git-graph", 4 | "hediet.vscode-drawio" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.obsidian/canvas.json: -------------------------------------------------------------------------------- 1 | { 2 | "snapToObjects": true, 3 | "snapToGrid": true, 4 | "newFileLocation": "current", 5 | "newFileFolderPath": "04_canvas" 6 | } -------------------------------------------------------------------------------- /.obsidian/daily-notes.json: -------------------------------------------------------------------------------- 1 | { 2 | "format": "YYYY/YYYY-MM-DD", 3 | "folder": "01_diary", 4 | "template": "00_templates/01_diary", 5 | "autorun": true 6 | } -------------------------------------------------------------------------------- /00_templates/11_embed_code.md: -------------------------------------------------------------------------------- 1 | ```embed- 2 | PATH: "vault://01_data/YYYY/MM/DD/" 3 | LINES: "," 4 | TITLE: "" 5 | ``` 6 | -------------------------------------------------------------------------------- /.obsidian/plugins/embed-code-file/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "includedLanguages": "c,cpp,java,python,go,ruby,javascript,js,typescript,ts,shell,sh,bash,powershell", 3 | "titleBackgroundColor": "#00000020", 4 | "titleFontColor": "" 5 | } -------------------------------------------------------------------------------- /.obsidian/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "alwaysUpdateLinks": true, 3 | "newFileLocation": "folder", 4 | "newFileFolderPath": "01_data", 5 | "attachmentFolderPath": "./", 6 | "showUnsupportedFiles": true, 7 | "defaultViewMode": "preview" 8 | } -------------------------------------------------------------------------------- /.obsidian/themes/Minimal/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Minimal", 3 | "version": "8.0.4", 4 | "minAppVersion": "1.9.0", 5 | "author": "@kepano", 6 | "authorUrl": "https://twitter.com/kepano", 7 | "fundingUrl": "https://www.buymeacoffee.com/kepano" 8 | } 9 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-tagfolder/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-tagfolder", 3 | "name": "TagFolder", 4 | "version": "0.18.11", 5 | "minAppVersion": "0.12.0", 6 | "description": "Show tags as folder", 7 | "author": "vorotamoroz", 8 | "authorUrl": "https://github.com/vrtmrz", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/appearance.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme": "moonstone", 3 | "interfaceFontFamily": "M PLUS 1", 4 | "textFontFamily": "M PLUS 1", 5 | "monospaceFontFamily": "M PLUS 1 Code", 6 | "showViewHeader": false, 7 | "cssTheme": "Minimal", 8 | "accentColor": "#0050d1", 9 | "baseFontSizeAction": true, 10 | "baseFontSize": 17 11 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-outliner/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "styleLists": false, 3 | "debug": false, 4 | "stickCursor": "bullet-and-checkbox", 5 | "betterEnter": false, 6 | "betterTab": false, 7 | "selectAll": true, 8 | "listLines": false, 9 | "listLineAction": "toggle-folding", 10 | "dnd": true, 11 | "previousRelease": null 12 | } -------------------------------------------------------------------------------- /.obsidian/plugins/float-search/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "searchViewState": { 3 | "collapseAll": false, 4 | "explainSearch": false, 5 | "extraContext": false, 6 | "matchingCase": false, 7 | "query": "", 8 | "sortOrder": "alphabetical" 9 | }, 10 | "showFilePath": false, 11 | "showInstructions": true, 12 | "defaultViewType": "modal" 13 | } -------------------------------------------------------------------------------- /.obsidian/plugins/embed-code-file/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "embed-code-file", 3 | "name": "Embed Code File", 4 | "version": "1.2.0", 5 | "minAppVersion": "0.15.0", 6 | "description": "This is a plugin for Obsidian that allows for embedding code files.", 7 | "author": "Obsidian", 8 | "authorUrl": "https://obsidian.md", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-image-toolkit/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-image-toolkit", 3 | "name": "Image Toolkit", 4 | "version": "1.4.2", 5 | "minAppVersion": "1.0.0", 6 | "description": "This plugin provides some image viewing toolkit.", 7 | "author": "Xiangru", 8 | "authorUrl": "https://github.com/sissilab", 9 | "isDesktopOnly": true 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-outliner/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-outliner", 3 | "name": "Outliner", 4 | "version": "4.9.0", 5 | "minAppVersion": "1.8.7", 6 | "description": "Work with your lists like in Workflowy or RoamResearch.", 7 | "author": "Viacheslav Slinko", 8 | "authorUrl": "https://github.com/vslinko", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/smart-connections/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "smart-connections", 3 | "name": "Smart Connections", 4 | "author": "Brian Petro", 5 | "description": "Chat with your notes & see links to related content with Local or Remote models.", 6 | "minAppVersion": "1.1.0", 7 | "authorUrl": "https://wfhbrian.com", 8 | "isDesktopOnly": false, 9 | "version": "3.0.78" 10 | } -------------------------------------------------------------------------------- /.obsidian/plugins/global-search-and-replace/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "global-search-and-replace", 3 | "name": "Global Search and Replace", 4 | "version": "0.5.0", 5 | "minAppVersion": "1.1.1", 6 | "description": "Search and replace in all vault files", 7 | "author": "Mahmoud Fawzy Khalil", 8 | "authorUrl": "https://github.com/MahmoudFawzyKhalil/", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/slash-commander/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "slash-commander", 3 | "name": "Slash Commander", 4 | "version": "0.3.7", 5 | "minAppVersion": "1.8.0", 6 | "description": "Customize the slash command list, assign each command an icon.", 7 | "author": "alephpiece", 8 | "authorUrl": "https://github.com/alephpiece", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/various-complements/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "various-complements", 3 | "name": "Various Complements", 4 | "version": "10.7.2", 5 | "minAppVersion": "0.16.0", 6 | "description": "This plugin enables you to complete words like the auto-completion of IDE", 7 | "author": "tadashi-aikawa", 8 | "authorUrl": "https://github.com/tadashi-aikawa", 9 | "isDesktopOnly": false 10 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-auto-link-title/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-auto-link-title", 3 | "name": "Auto Link Title", 4 | "version": "1.5.5", 5 | "minAppVersion": "0.12.17", 6 | "description": "This plugin automatically fetches the titles of links from the web", 7 | "author": "Matt Furden", 8 | "authorUrl": "https://github.com/zolrath", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-git/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Vinzent", 3 | "authorUrl": "https://github.com/Vinzent03", 4 | "id": "obsidian-git", 5 | "name": "Git", 6 | "description": "Integrate Git version control with automatic backup and other advanced features.", 7 | "isDesktopOnly": false, 8 | "fundingUrl": "https://ko-fi.com/vinzent", 9 | "version": "2.35.0" 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-style-settings/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-style-settings", 3 | "name": "Style Settings", 4 | "version": "1.0.9", 5 | "minAppVersion": "0.11.5", 6 | "description": "Offers controls for adjusting theme, plugin, and snippet CSS variables.", 7 | "author": "mgmeyers", 8 | "authorUrl": "https://github.com/mgmeyers/obsidian-style-settings", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/embed-code-file/styles.css: -------------------------------------------------------------------------------- 1 | .markdown-rendered pre .obsidian-embed-code-file { 2 | position: relative; 3 | top: 3px; 4 | left: 0px; 5 | font-size: 85%!important; 6 | padding: 3px 8px!important; 7 | border-radius: 0px!important; 8 | margin-top: -9px!important; 9 | margin-left:-9px!important; 10 | margin-right:-9px!important; 11 | margin-bottom:9px!important; 12 | } 13 | -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "templater-obsidian", 3 | "name": "Templater", 4 | "version": "2.14.1", 5 | "description": "Create and use templates", 6 | "minAppVersion": "1.5.0", 7 | "author": "SilentVoid", 8 | "authorUrl": "https://github.com/SilentVoid13", 9 | "helpUrl": "https://silentvoid13.github.io/Templater/", 10 | "isDesktopOnly": false 11 | } 12 | -------------------------------------------------------------------------------- /01_data/2025/06/21/SampleNote.md: -------------------------------------------------------------------------------- 1 | --- 2 | created: 2025-06-21 15:15:15 3 | tags: 4 | - sample 5 | --- 6 | > [!NOTE] 7 | > 以下のファイルは 01_data フォルダをコミットするためのサンプルファイルです。削除してください。 8 | > SampleNote.md 9 | > sample.drawio 10 | > sample.svg 11 | 12 | ## Heading 2 13 | 14 | - [x] Task A 15 | - [ ] Task B 16 | 17 | ### Heading 3 18 | 19 | drawioで作成した画像 20 | [[sample.drawio]] 21 | 22 | svgファイル 23 | 24 | ![[sample.svg]] 25 | 26 | -------------------------------------------------------------------------------- /.obsidian/plugins/dataview/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "dataview", 3 | "name": "Dataview", 4 | "version": "0.5.68", 5 | "minAppVersion": "0.13.11", 6 | "description": "Complex data views for the data-obsessed.", 7 | "author": "Michael Brenan <blacksmithgu@gmail.com>", 8 | "authorUrl": "https://github.com/blacksmithgu", 9 | "helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/", 10 | "isDesktopOnly": false 11 | } 12 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-minimal-settings/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-minimal-settings", 3 | "name": "Minimal Theme Settings", 4 | "version": "8.1.1", 5 | "minAppVersion": "1.1.9", 6 | "description": "Change the colors, fonts and features of Minimal Theme.", 7 | "author": "@kepano", 8 | "authorUrl": "https://www.twitter.com/kepano", 9 | "fundingUrl": "https://www.buymeacoffee.com/kepano", 10 | "isDesktopOnly": false 11 | } -------------------------------------------------------------------------------- /.obsidian/plugins/mononote/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "mononote", 3 | "name": "Mononote", 4 | "version": "1.2.2", 5 | "minAppVersion": "1.5.0", 6 | "description": "Ensures each note occupies only one tab. If a note is already open, its existing tab will be focussed instead of opening the same file in the current tab.", 7 | "author": "Carlo Zottmann", 8 | "authorUrl": "https://github.com/czottmann", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/colored-tags/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "colored-tags", 3 | "name": "Colored Tags", 4 | "version": "5.0.1", 5 | "minAppVersion": "0.15.0", 6 | "description": "Colorizes tags in different colors. Colors of nested tags are mixed with the root tag to improve readability. Text color contrast is automatically matched to comply with AA level of WCAG 2.1.", 7 | "author": "Pavel Frankov", 8 | "authorUrl": "https://github.com/pfrankov", 9 | "isDesktopOnly": false 10 | } -------------------------------------------------------------------------------- /.obsidian/community-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "templater-obsidian", 3 | "obsidian-auto-link-title", 4 | "obsidian-git", 5 | "dataview", 6 | "obsidian-outliner", 7 | "obsidian-minimal-settings", 8 | "obsidian-style-settings", 9 | "colored-tags", 10 | "embed-code-file", 11 | "float-search", 12 | "global-search-and-replace", 13 | "obsidian-image-toolkit", 14 | "mononote", 15 | "slash-commander", 16 | "obsidian-tagfolder", 17 | "various-complements", 18 | "smart-connections" 19 | ] -------------------------------------------------------------------------------- /.obsidian/plugins/colored-tags/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "palette": { 3 | "seed": 0, 4 | "selected": "custom", 5 | "custom": "fce8e8-e8fcfc-eefce8-f3e8fc-fcf7e8-e8eefc-e8fcf3-fce8f7-fcf0e8-e8f7fc-edfce8-f7e8fc-fcfce8-e8edfc-e8fcf7-fce8ed" 6 | }, 7 | "mixColors": true, 8 | "transition": true, 9 | "accessibility": { 10 | "highTextContrast": false 11 | }, 12 | "knownTags": { 13 | "文献": 1, 14 | "sample": 2, 15 | "dashboard": 3, 16 | "task": 4 17 | }, 18 | "_version": 3 19 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OR only to exclude workspace cache 2 | .obsidian/workspace.json 3 | .obsidian/workspace-mobile.json 4 | 5 | # Exclude Untitled Notes 6 | Untitled* 7 | 無題のファイル* 8 | # Exclude "bad" names 9 | null* 10 | 11 | # Add below lines to exclude OS settings and caches 12 | .trash/ 13 | .DS_Store 14 | 15 | # Exclude Obsidian plugin settings and caches 16 | # Various Complements 17 | .obsidian/plugins/various-complements/histories.json 18 | # Smart Connections 19 | .smart-env/* 20 | !.smart-env/smart_env.json 21 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-style-settings/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "minimal-style@@h1-size": "2em", 3 | "minimal-style@@h2-size": "1.6em", 4 | "minimal-style@@h2-l": true, 5 | "minimal-style@@h3-size": "1.4em", 6 | "minimal-style@@h3-l": true, 7 | "minimal-style@@h4-size": "1.2em", 8 | "minimal-style@@h4-l": true, 9 | "minimal-style@@metadata-heading-off": true, 10 | "minimal-style@@metadata-add-property-off": true, 11 | "minimal-style@@inline-title-size": "2em", 12 | "minimal-style@@hide-help": true 13 | } -------------------------------------------------------------------------------- /.obsidian/graph.json: -------------------------------------------------------------------------------- 1 | { 2 | "collapse-filter": true, 3 | "search": "", 4 | "showTags": true, 5 | "showAttachments": true, 6 | "hideUnresolved": false, 7 | "showOrphans": true, 8 | "collapse-color-groups": true, 9 | "colorGroups": [], 10 | "collapse-display": true, 11 | "showArrow": false, 12 | "textFadeMultiplier": 0, 13 | "nodeSizeMultiplier": 1, 14 | "lineSizeMultiplier": 1, 15 | "collapse-forces": true, 16 | "centerStrength": 0.518713248970312, 17 | "repelStrength": 10, 18 | "linkStrength": 1, 19 | "linkDistance": 250, 20 | "scale": 1, 21 | "close": true 22 | } -------------------------------------------------------------------------------- /.obsidian/plugins/float-search/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "float-search", 3 | "name": "Floating Search", 4 | "version": "4.1.1", 5 | "minAppVersion": "0.15.0", 6 | "description": "You can use search view in modal/leaf/popout window now.", 7 | "author": "Boninall", 8 | "authorUrl": "https://github.com/Quorafind", 9 | "fundingUrl": { 10 | "Buy Me a Coffee": "https://www.buymeacoffee.com/boninall", 11 | "爱发电": "https://afdian.net/a/boninall", 12 | "支付宝": "https://cdn.jsdelivr.net/gh/Quorafind/.github@main/IMAGE/%E6%94%AF%E4%BB%98%E5%AE%9D%E4%BB%98%E6%AC%BE%E7%A0%81.jpg" 13 | }, 14 | "isDesktopOnly": false 15 | } -------------------------------------------------------------------------------- /.obsidian/core-plugins-migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "file-explorer": true, 3 | "global-search": true, 4 | "switcher": true, 5 | "graph": true, 6 | "backlink": false, 7 | "canvas": true, 8 | "outgoing-link": true, 9 | "tag-pane": false, 10 | "properties": false, 11 | "page-preview": true, 12 | "daily-notes": true, 13 | "templates": false, 14 | "note-composer": false, 15 | "command-palette": true, 16 | "slash-command": false, 17 | "editor-status": true, 18 | "bookmarks": false, 19 | "markdown-importer": false, 20 | "zk-prefixer": false, 21 | "random-note": false, 22 | "outline": true, 23 | "word-count": false, 24 | "slides": false, 25 | "audio-recorder": false, 26 | "workspaces": true, 27 | "file-recovery": false, 28 | "publish": false, 29 | "sync": false 30 | } -------------------------------------------------------------------------------- /.obsidian/core-plugins.json: -------------------------------------------------------------------------------- 1 | { 2 | "file-explorer": true, 3 | "global-search": true, 4 | "switcher": true, 5 | "graph": true, 6 | "backlink": true, 7 | "canvas": true, 8 | "outgoing-link": true, 9 | "tag-pane": false, 10 | "properties": false, 11 | "page-preview": true, 12 | "daily-notes": false, 13 | "templates": false, 14 | "note-composer": false, 15 | "command-palette": true, 16 | "slash-command": false, 17 | "editor-status": true, 18 | "bookmarks": false, 19 | "markdown-importer": false, 20 | "zk-prefixer": false, 21 | "random-note": false, 22 | "outline": true, 23 | "word-count": false, 24 | "slides": false, 25 | "audio-recorder": false, 26 | "workspaces": true, 27 | "file-recovery": false, 28 | "publish": false, 29 | "sync": false, 30 | "webviewer": false, 31 | "footnotes": true, 32 | "bases": true 33 | } -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "command_timeout": 5, 3 | "templates_folder": "00_templates", 4 | "templates_pairs": [ 5 | [ 6 | "", 7 | "" 8 | ] 9 | ], 10 | "trigger_on_file_creation": true, 11 | "auto_jump_to_cursor": false, 12 | "enable_system_commands": false, 13 | "shell_path": "", 14 | "user_scripts_folder": "", 15 | "enable_folder_templates": true, 16 | "folder_templates": [ 17 | { 18 | "folder": "/", 19 | "template": "00_templates/01_note.md" 20 | } 21 | ], 22 | "enable_file_templates": false, 23 | "file_templates": [ 24 | { 25 | "regex": ".*", 26 | "template": "" 27 | } 28 | ], 29 | "syntax_highlighting": true, 30 | "syntax_highlighting_mobile": true, 31 | "enabled_templates_hotkeys": [ 32 | "00_templates/11_embed_code.md", 33 | "00_templates/02_literature.md" 34 | ], 35 | "startup_templates": [], 36 | "intellisense_render": 1 37 | } -------------------------------------------------------------------------------- /.obsidian/plugins/dataview/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "renderNullAs": "\\-", 3 | "taskCompletionTracking": false, 4 | "taskCompletionUseEmojiShorthand": false, 5 | "taskCompletionText": "completion", 6 | "taskCompletionDateFormat": "yyyy-MM-dd", 7 | "recursiveSubTaskCompletion": false, 8 | "warnOnEmptyResult": true, 9 | "refreshEnabled": true, 10 | "refreshInterval": 30000, 11 | "defaultDateFormat": "yyyy-MM-dd", 12 | "defaultDateTimeFormat": "yyyy-MM-dd, HH:mm:ss", 13 | "maxRecursiveRenderDepth": 4, 14 | "tableIdColumnName": "File", 15 | "tableGroupColumnName": "Group", 16 | "showResultCount": true, 17 | "allowHtml": true, 18 | "inlineQueryPrefix": "=", 19 | "inlineJsQueryPrefix": "$=", 20 | "inlineQueriesInCodeblocks": true, 21 | "enableInlineDataview": true, 22 | "enableDataviewJs": true, 23 | "enableInlineDataviewJs": false, 24 | "prettyRenderInlineFields": true, 25 | "prettyRenderInlineFieldsInLivePreview": true, 26 | "dataviewJsKeyword": "dataviewjs" 27 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-minimal-settings/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "lightStyle": "minimal-light", 3 | "darkStyle": "minimal-dark", 4 | "lightScheme": "minimal-default-light", 5 | "darkScheme": "minimal-default-dark", 6 | "editorFont": "", 7 | "lineHeight": 2, 8 | "lineWidth": 40, 9 | "lineWidthWide": 50, 10 | "maxWidth": 88, 11 | "textNormal": 17, 12 | "textSmall": 14, 13 | "imgGrid": false, 14 | "imgWidth": "img-default-width", 15 | "tableWidth": "table-default-width", 16 | "iframeWidth": "iframe-default-width", 17 | "mapWidth": "map-default-width", 18 | "chartWidth": "chart-default-width", 19 | "colorfulHeadings": false, 20 | "colorfulFrame": false, 21 | "colorfulActiveStates": false, 22 | "trimNames": true, 23 | "labeledNav": false, 24 | "fullWidthMedia": false, 25 | "bordersToggle": true, 26 | "minimalStatus": true, 27 | "focusMode": false, 28 | "underlineInternal": false, 29 | "underlineExternal": true, 30 | "folding": true, 31 | "lineNumbers": false, 32 | "readableLineLength": true, 33 | "devBlockWidth": false 34 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 amatzk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-tagfolder/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "displayMethod": "NAME", 3 | "alwaysOpen": false, 4 | "ignoreDocTags": "", 5 | "ignoreTags": "", 6 | "hideOnRootTags": "", 7 | "sortType": "DISPNAME_ASC", 8 | "sortExactFirst": false, 9 | "sortTypeTag": "NAME_ASC", 10 | "expandLimit": 0, 11 | "disableNestedTags": false, 12 | "hideItems": "NONE", 13 | "ignoreFolders": "00_templates,", 14 | "targetFolders": "", 15 | "scanDelay": 250, 16 | "useTitle": true, 17 | "reduceNestedParent": true, 18 | "frontmatterKey": "title", 19 | "useTagInfo": false, 20 | "tagInfo": "pininfo.md", 21 | "mergeRedundantCombination": false, 22 | "useVirtualTag": false, 23 | "useFrontmatterTagsForNewNotes": false, 24 | "doNotSimplifyTags": false, 25 | "overrideTagClicking": false, 26 | "useMultiPaneList": false, 27 | "archiveTags": "", 28 | "disableNarrowingDown": true, 29 | "expandUntaggedToRoot": false, 30 | "disableDragging": false, 31 | "linkConfig": { 32 | "incoming": { 33 | "enabled": true, 34 | "key": "" 35 | }, 36 | "outgoing": { 37 | "enabled": true, 38 | "key": "" 39 | } 40 | }, 41 | "linkShowOnlyFDR": true, 42 | "linkCombineOtherTree": true, 43 | "showListIn": "", 44 | "displayFolderAsTag": false 45 | } -------------------------------------------------------------------------------- /.obsidian/hotkeys.json: -------------------------------------------------------------------------------- 1 | { 2 | "obsidian-outliner:move-list-item-down": [ 3 | { 4 | "modifiers": [ 5 | "Alt" 6 | ], 7 | "key": "ArrowDown" 8 | } 9 | ], 10 | "obsidian-outliner:move-list-item-up": [ 11 | { 12 | "modifiers": [ 13 | "Alt" 14 | ], 15 | "key": "ArrowUp" 16 | } 17 | ], 18 | "obsidian-git:backup-and-close": [ 19 | { 20 | "modifiers": [ 21 | "Mod" 22 | ], 23 | "key": "Q" 24 | } 25 | ], 26 | "templater-obsidian:00_templates/11_embed_code.md": [ 27 | { 28 | "modifiers": [ 29 | "Alt" 30 | ], 31 | "key": "C" 32 | } 33 | ], 34 | "editor:toggle-source": [ 35 | { 36 | "modifiers": [ 37 | "Mod" 38 | ], 39 | "key": "R" 40 | } 41 | ], 42 | "float-search:search-obsidian-globally-state": [ 43 | { 44 | "modifiers": [ 45 | "Alt" 46 | ], 47 | "key": "F" 48 | } 49 | ], 50 | "global-search-and-replace:search-and-replace": [ 51 | { 52 | "modifiers": [ 53 | "Alt" 54 | ], 55 | "key": "H" 56 | } 57 | ], 58 | "templater-obsidian:create-00_templates/02_literature.md": [ 59 | { 60 | "modifiers": [ 61 | "Mod" 62 | ], 63 | "key": "J" 64 | } 65 | ], 66 | "obsidian-minimal-settings:cycle-minimal-table-width": [ 67 | { 68 | "modifiers": [ 69 | "Alt" 70 | ], 71 | "key": "T" 72 | } 73 | ] 74 | } -------------------------------------------------------------------------------- /.smart-env/smart_env.json: -------------------------------------------------------------------------------- 1 | { 2 | "is_obsidian_vault": true, 3 | "smart_blocks": { 4 | "embed_blocks": true, 5 | "min_chars": 200 6 | }, 7 | "smart_sources": { 8 | "single_file_data_path": ".smart-env/smart_sources.json", 9 | "min_chars": 200, 10 | "embed_model": { 11 | "adapter": "transformers", 12 | "transformers": { 13 | "legacy_transformers": false, 14 | "model_key": "TaylorAI/bge-micro-v2" 15 | }, 16 | "TaylorAI/bge-micro-v2": {} 17 | } 18 | }, 19 | "ribbon_icons": { 20 | "connections": false, 21 | "random_note": false 22 | }, 23 | "file_exclusions": "Untitled", 24 | "folder_exclusions": "00_templates,02_view", 25 | "smart_view_filter": { 26 | "render_markdown": true, 27 | "show_full_path": false, 28 | "exclude_blocks_from_source_connections": true, 29 | "exclude_frontmatter_blocks": true, 30 | "expanded_view": false, 31 | "results_limit": "20", 32 | "exclude_outlinks": true 33 | }, 34 | "excluded_headings": "", 35 | "language": "en", 36 | "new_user": true, 37 | "re_import_wait_time": 13, 38 | "smart_chat_threads": { 39 | "chat_model": { 40 | "adapter": "ollama", 41 | "ollama": { 42 | "model_key": "undefined" 43 | } 44 | }, 45 | "active_thread_key": "", 46 | "system_prompt": "", 47 | "detect_self_referential": true, 48 | "review_context": true, 49 | "stream": true, 50 | "language": "ja", 51 | "modifier_key_to_send": "shift", 52 | "use_tool_calls": true 53 | }, 54 | "smart_notices": { 55 | "muted": {} 56 | }, 57 | "version": "" 58 | } -------------------------------------------------------------------------------- /00_templates/01_note.md: -------------------------------------------------------------------------------- 1 | --- 2 | created: <% tp.date.now("YYYY-MM-DD HH:mm:ss") %> 3 | tags: 4 | --- 5 | <%* 6 | const CONFIG = { 7 | BASE_FOLDER: "01_data", 8 | DATE_FORMAT: "YYYY/MM/DD", 9 | TITLE: "" // ここに任意のタイトルを設定。空欄("")の場合はデフォルトのファイル名を使用 10 | } 11 | 12 | const createFolderIfNotExists = async (path) => { 13 | try { 14 | await app.vault.createFolder(path) 15 | } catch { 16 | // フォルダが既に存在 17 | } 18 | } 19 | 20 | const getUniqueName = async (folder, base) => { 21 | let name = base 22 | let i = 1 23 | while (app.vault.getAbstractFileByPath(`${folder}/${name}.md`)) { 24 | name = `${base} ${i++}` 25 | } 26 | return name 27 | } 28 | 29 | const moveFileToFolder = async (fileTitle, folder) => { 30 | await createFolderIfNotExists(folder) 31 | const uniqueName = await getUniqueName(folder, fileTitle) 32 | await tp.file.move(`${folder}/${uniqueName}`) 33 | return uniqueName 34 | } 35 | 36 | const notifyIfRenamed = (original, newName) => { 37 | if (original !== newName) { 38 | new Notice(`ファイル名が重複していたため "${newName}" に変更されました`) 39 | } 40 | } 41 | 42 | const generateFileName = (title) => { 43 | if (title && title.trim() !== "") { 44 | const dateStr = tp.date.now("YYYY-MM-DD") 45 | return `${title.trim()}_${dateStr}` 46 | } else { 47 | return tp.file.title 48 | } 49 | } 50 | 51 | try { 52 | const folderPath = `${CONFIG.BASE_FOLDER}/${tp.date.now(CONFIG.DATE_FORMAT)}` 53 | const originalName = tp.file.title 54 | const newFileName = generateFileName(CONFIG.TITLE) 55 | const finalName = await moveFileToFolder(newFileName, folderPath) 56 | notifyIfRenamed(newFileName, finalName) 57 | } catch (error) { 58 | new Notice(`エラー: ${error.message}`) 59 | } 60 | %> -------------------------------------------------------------------------------- /.obsidian/plugins/global-search-and-replace/styles.css: -------------------------------------------------------------------------------- 1 | .snr-line-number { 2 | font-size: var(--font-ui-small); 3 | } 4 | 5 | .snr-suggestion-content { 6 | /* Nothing */ 7 | } 8 | 9 | .snr-suggestion-flair { 10 | word-break: break-word; 11 | } 12 | 13 | .snr-suggestion-aux { 14 | max-width: 40%; 15 | } 16 | 17 | .snr-highlight { 18 | color: var(--text-normal); 19 | background-color: var(--text-highlight-bg); 20 | } 21 | 22 | .snr-input-button-wrapper { 23 | /*margin-top: var(--size-4-2);*/ 24 | /*margin-bottom: var(--size-4-2);*/ 25 | display: flex; 26 | justify-content: space-between; 27 | align-items: center; 28 | gap: var(--size-4-4); 29 | border-bottom: 1px solid var(--background-secondary); 30 | } 31 | 32 | .snr-input-button-wrapper > button { 33 | margin-right: var(--size-4-4); 34 | } 35 | 36 | 37 | .is-phone .snr-input-button-wrapper > button { 38 | margin-right: var(--size-4-4); 39 | width: unset; 40 | } 41 | 42 | .is-tablet .snr-input-button-wrapper > button { 43 | margin-right: var(--size-4-4); 44 | } 45 | 46 | .snr-input-icon-wrapper { 47 | display: flex; 48 | justify-content: space-between; 49 | align-items: center; 50 | border-bottom: 1px solid var(--background-secondary); 51 | } 52 | 53 | .snr-regex-button { 54 | margin-right: var(--size-4-4); 55 | } 56 | 57 | .snr-workspace-tab-header-inner { 58 | padding: var(--size-4-2); 59 | } 60 | 61 | .snr-workspace-tab-header-inner-icon-active { 62 | background-color: var(--background-modifier-form-field); 63 | } 64 | 65 | .snr-result-summary { 66 | border-top: 1px solid var(--background-secondary); 67 | user-select: none; 68 | font-size: var(--font-ui-smaller); 69 | color: var(--text-muted); 70 | padding: var(--size-4-2); 71 | display: flex; 72 | text-align: center; 73 | justify-content: center; 74 | } 75 | -------------------------------------------------------------------------------- /00_templates/02_literature.md: -------------------------------------------------------------------------------- 1 | --- 2 | created: <% tp.date.now("YYYY-MM-DD HH:mm:ss") %> 3 | tags: 4 | - 文献 5 | title: 6 | source: 7 | author: 8 | published: 9 | description: 10 | --- 11 | <%* 12 | const CONFIG = { 13 | BASE_FOLDER: "01_data", 14 | DATE_FORMAT: "YYYY/MM/DD", 15 | TITLE: "" // ここに任意のタイトルを設定。空欄("")の場合はデフォルトのファイル名を使用 16 | } 17 | 18 | const createFolderIfNotExists = async (path) => { 19 | try { 20 | await app.vault.createFolder(path) 21 | } catch { 22 | // フォルダが既に存在 23 | } 24 | } 25 | 26 | const getUniqueName = async (folder, base) => { 27 | let name = base 28 | let i = 1 29 | while (app.vault.getAbstractFileByPath(`${folder}/${name}.md`)) { 30 | name = `${base} ${i++}` 31 | } 32 | return name 33 | } 34 | 35 | const moveFileToFolder = async (fileTitle, folder) => { 36 | await createFolderIfNotExists(folder) 37 | const uniqueName = await getUniqueName(folder, fileTitle) 38 | await tp.file.move(`${folder}/${uniqueName}`) 39 | return uniqueName 40 | } 41 | 42 | const notifyIfRenamed = (original, newName) => { 43 | if (original !== newName) { 44 | new Notice(`ファイル名が重複していたため "${newName}" に変更されました`) 45 | } 46 | } 47 | 48 | const generateFileName = (title) => { 49 | if (title && title.trim() !== "") { 50 | const dateStr = tp.date.now("YYYY-MM-DD") 51 | return `${title.trim()}_${dateStr}` 52 | } else { 53 | return tp.file.title 54 | } 55 | } 56 | 57 | try { 58 | const folderPath = `${CONFIG.BASE_FOLDER}/${tp.date.now(CONFIG.DATE_FORMAT)}` 59 | const originalName = tp.file.title 60 | const newFileName = generateFileName(CONFIG.TITLE) 61 | const finalName = await moveFileToFolder(newFileName, folderPath) 62 | notifyIfRenamed(newFileName, finalName) 63 | } catch (error) { 64 | new Notice(`エラー: ${error.message}`) 65 | } 66 | %> -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-git/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "commitMessage": "vault backup: {{date}}", 3 | "autoCommitMessage": "vault backup: {{date}}", 4 | "commitDateFormat": "YYYY-MM-DD HH:mm:ss", 5 | "autoSaveInterval": 0, 6 | "autoPushInterval": 20, 7 | "autoPullInterval": 60, 8 | "autoPullOnBoot": true, 9 | "disablePush": false, 10 | "pullBeforePush": true, 11 | "disablePopups": false, 12 | "showErrorNotices": true, 13 | "disablePopupsForNoChanges": false, 14 | "listChangedFilesInMessageBody": true, 15 | "showStatusBar": true, 16 | "updateSubmodules": false, 17 | "syncMethod": "merge", 18 | "customMessageOnAutoBackup": false, 19 | "autoBackupAfterFileChange": false, 20 | "treeStructure": true, 21 | "refreshSourceControl": true, 22 | "basePath": "", 23 | "differentIntervalCommitAndPush": true, 24 | "changedFilesInStatusBar": false, 25 | "showedMobileNotice": true, 26 | "refreshSourceControlTimer": 7000, 27 | "showBranchStatusBar": true, 28 | "setLastSaveToLastCommit": false, 29 | "submoduleRecurseCheckout": false, 30 | "gitDir": "", 31 | "showFileMenu": true, 32 | "authorInHistoryView": "hide", 33 | "dateInHistoryView": false, 34 | "diffStyle": "split", 35 | "lineAuthor": { 36 | "show": false, 37 | "followMovement": "inactive", 38 | "authorDisplay": "initials", 39 | "showCommitHash": false, 40 | "dateTimeFormatOptions": "date", 41 | "dateTimeFormatCustomString": "YYYY-MM-DD HH:mm", 42 | "dateTimeTimezone": "viewer-local", 43 | "coloringMaxAge": "1y", 44 | "colorNew": { 45 | "r": 255, 46 | "g": 150, 47 | "b": 150 48 | }, 49 | "colorOld": { 50 | "r": 120, 51 | "g": 160, 52 | "b": 255 53 | }, 54 | "textColorCss": "var(--text-muted)", 55 | "ignoreWhitespace": false, 56 | "gutterSpacingFallbackLength": 5, 57 | "lastShownAuthorDisplay": "initials", 58 | "lastShownDateTimeFormatOptions": "date" 59 | } 60 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-outliner/styles.css: -------------------------------------------------------------------------------- 1 | /* lists and bullets */ 2 | .outliner-plugin-better-lists .cm-s-obsidian .HyperMD-list-line { 3 | /* padding-top: 0.4em; */ 4 | } 5 | 6 | .outliner-plugin-better-lists .cm-formatting-list-ul { 7 | margin-right: 0.3em; 8 | } 9 | 10 | .outliner-plugin-better-lists .list-bullet::after { 11 | width: 0.4em; 12 | height: 0.4em; 13 | background-color: var(--text-muted); 14 | } 15 | 16 | /* lines */ 17 | .outliner-plugin-list-lines-scroller { 18 | position: absolute; 19 | top: 0; 20 | right: 0; 21 | bottom: 0; 22 | left: 0; 23 | padding: var(--file-margins); 24 | padding-left: 0; 25 | pointer-events: none; 26 | overflow: hidden; 27 | } 28 | 29 | .outliner-plugin-list-lines-content-container { 30 | position: relative; 31 | } 32 | 33 | .outliner-plugin-list-line { 34 | pointer-events: auto; 35 | position: absolute; 36 | width: 5px; 37 | margin-left: 0.5ch; 38 | margin-top: 1em; 39 | z-index: 1; 40 | cursor: pointer; 41 | background: transparent; 42 | background-image: linear-gradient( 43 | to right, 44 | var(--text-faint) 1px, 45 | transparent 1px 46 | ); 47 | background-position-x: 2px; 48 | background-repeat: no-repeat; 49 | } 50 | 51 | .outliner-plugin-better-bullets .outliner-plugin-list-line { 52 | margin-top: 1.4em; 53 | } 54 | 55 | .markdown-source-view.mod-cm6.is-readable-line-width 56 | .outliner-plugin-list-lines-content-container { 57 | max-width: 700px; 58 | margin: auto; 59 | } 60 | 61 | .outliner-plugin-list-line:hover { 62 | background: var(--text-faint); 63 | } 64 | 65 | .outliner-plugin-vertical-lines 66 | .markdown-source-view.mod-cm6 67 | .cm-hmd-list-indent 68 | .cm-indent::before { 69 | content: none; 70 | } 71 | 72 | /* drag-n-drop */ 73 | .outliner-plugin-dropping-line { 74 | background-color: hsla(var(--interactive-accent-hsl), 0.4); 75 | } 76 | 77 | .outliner-plugin-dragging-line { 78 | opacity: 0.5; 79 | background-color: hsla(var(--interactive-accent-hsl), 0.2); 80 | } 81 | 82 | .outliner-plugin-drop-zone { 83 | width: 300px; 84 | height: 4px; 85 | background: var(--color-accent); 86 | z-index: 999; 87 | position: absolute; 88 | pointer-events: none; 89 | } 90 | 91 | .outliner-plugin-drop-zone-padding { 92 | position: absolute; 93 | height: 4px; 94 | } 95 | 96 | body.outliner-plugin-dnd:not(.outliner-plugin-dragging) .cm-formatting-list, 97 | body.outliner-plugin-dnd:not(.outliner-plugin-dragging) 98 | .cm-fold-indicator 99 | .collapse-indicator { 100 | cursor: grab !important; 101 | } 102 | 103 | html body.outliner-plugin-dnd.outliner-plugin-dragging { 104 | cursor: grabbing !important; 105 | } 106 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-tagfolder/styles.css: -------------------------------------------------------------------------------- 1 | .workspace-leaf-content[data-type="tagfolder-view"]>.view-content, 2 | .workspace-leaf-content[data-type="tagfolder-view-list"]>.view-content { 3 | padding: 0; 4 | height: 100%; 5 | overflow: unset; 6 | } 7 | 8 | .override-input { 9 | flex-direction: column-reverse; 10 | } 11 | 12 | .tagfolder-tag::before { 13 | all: inherit; 14 | color: inherit; 15 | font: inherit; 16 | } 17 | 18 | .tagfolder-tag.tag-tag::before { 19 | margin-left: 0px; 20 | margin-right: 0px; 21 | } 22 | 23 | .tagfolder-tag.tag-tag span.tf-tag-each:empty { 24 | display: none; 25 | } 26 | 27 | .tagfolder-tag.tag-tag.tf-tag span.tf-tag-each:first-child:not(:empty):before { 28 | content: "#"; 29 | margin-left: 0.3em; 30 | } 31 | 32 | .tagfolder-tag.tag-tag.tf-link span.tf-tag-each:first-child:not(:empty):before { 33 | content: ""; 34 | margin-left: 0.3em; 35 | } 36 | 37 | .tagfolder-tag.tag-tag.tf-link.link-cross span.tf-tag-each:first-child:not(:empty):before { 38 | content: "⇔ "; 39 | margin-left: 0.3em; 40 | } 41 | 42 | .tagfolder-tag.tag-tag.tf-link.link-forward span.tf-tag-each:first-child:not(:empty):before { 43 | content: "⇒ "; 44 | margin-left: 0.3em; 45 | } 46 | 47 | .tagfolder-tag.tag-tag.tf-link.link-reverse span.tf-tag-each:first-child:not(:empty):before { 48 | content: "⇐ "; 49 | margin-left: 0.3em; 50 | } 51 | 52 | .tagfolder-tag.tag-tag span.tf-tag-each::before { 53 | content: "→ "; 54 | margin-left: 0; 55 | margin-right: 0; 56 | } 57 | 58 | 59 | .tf-taglist { 60 | white-space: nowrap; 61 | text-overflow: ellipsis; 62 | overflow: hidden; 63 | display: inline-block; 64 | flex-shrink: 100; 65 | margin-left: auto; 66 | text-align: right; 67 | } 68 | 69 | .tf-taglist:not(:empty) { 70 | min-width: 3em; 71 | } 72 | 73 | .tf-taglist .tf-tag { 74 | background-color: var(--background-secondary-alt); 75 | border-radius: 4px; 76 | padding: 2px 4px; 77 | margin-left: 4px; 78 | color: var(--nav-item-color); 79 | } 80 | 81 | .nav-folder-title:hover .tagfolder-quantity, 82 | .nav-file-title:hover .tf-taglist { 83 | color: var(--text-on-accent); 84 | } 85 | 86 | .nav-folder-title:hover .tagfolder-quantity span, 87 | .nav-file-title:hover .tf-taglist span.tf-tag { 88 | color: var(--text-on-accent); 89 | background-color: var(--interactive-accent-hover); 90 | } 91 | 92 | 93 | .lsl-f { 94 | flex-direction: row; 95 | display: flex; 96 | flex-grow: 1; 97 | overflow: hidden; 98 | flex-shrink: 1; 99 | } 100 | 101 | .lsl-f:not(:last-child) { 102 | min-width: 3em; 103 | } 104 | 105 | .lsl-f:empty::before { 106 | content: "..."; 107 | } 108 | 109 | .tagfolder-titletagname { 110 | flex-grow: 1; 111 | text-overflow: ellipsis; 112 | white-space: nowrap; 113 | overflow: hidden; 114 | } 115 | 116 | .tagfolder-quantity span { 117 | background-color: var(--background-secondary-alt); 118 | color: var(--nav-item-color); 119 | border-radius: 4px; 120 | padding: 2px 4px; 121 | } 122 | 123 | .tagfolder-quantity { 124 | width: 3em; 125 | text-align: right; 126 | cursor: pointer; 127 | margin-left: auto; 128 | } 129 | 130 | .tag-folder-title { 131 | max-width: 100%; 132 | } 133 | 134 | .tree-item.nav-folder.updating { 135 | background: linear-gradient(135deg, var(--interactive-accent-hover) 0%, var(--interactive-accent-hover) 50%, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0) 100%); 136 | background-repeat: no-repeat; 137 | background-position: 0 0; 138 | background-size: 10px 10px; 139 | } -------------------------------------------------------------------------------- /.obsidian/plugins/slash-commander/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "confirmDeletion": true, 4 | "showDescriptions": false, 5 | "showSourcesForDuplicates": true, 6 | "debug": false, 7 | "mainTrigger": "/", 8 | "extraTriggers": [], 9 | "useExtraTriggers": false, 10 | "triggerOnlyOnNewLine": false, 11 | "queryPattern": {}, 12 | "bindings": [ 13 | { 14 | "name": "Code", 15 | "id": "editor:insert-codeblock", 16 | "icon": "terminal", 17 | "mode": "any", 18 | "triggerMode": "anywhere", 19 | "chosen": false, 20 | "selected": false, 21 | "action": "editor:insert-codeblock", 22 | "children": [] 23 | }, 24 | { 25 | "id": "templater-obsidian:00_templates/11_embed_code.md", 26 | "icon": "code-2", 27 | "name": "Embed Code File", 28 | "mode": "any", 29 | "chosen": false, 30 | "selected": false, 31 | "action": "templater-obsidian:00_templates/11_embed_code.md", 32 | "children": [] 33 | }, 34 | { 35 | "id": "float-search:search-obsidian-globally-state", 36 | "icon": "search", 37 | "name": "Floating Search: Search Obsidian Globally (With Last State)", 38 | "mode": "any", 39 | "chosen": false, 40 | "action": "float-search:search-obsidian-globally-state", 41 | "children": [] 42 | }, 43 | { 44 | "id": "global-search-and-replace:search-and-replace", 45 | "icon": "replace", 46 | "name": "Global Search and Replace in all files", 47 | "mode": "any", 48 | "chosen": false, 49 | "action": "global-search-and-replace:search-and-replace", 50 | "children": [] 51 | }, 52 | { 53 | "id": "884beea8-46ec-42a6-b4c4-5a358e88712a", 54 | "icon": "brain-circuit", 55 | "name": "Smart Chat View", 56 | "action": "smart-connections:open-smart-chat-view", 57 | "mode": "any", 58 | "triggerMode": "anywhere", 59 | "isGroup": false, 60 | "children": [] 61 | }, 62 | { 63 | "name": "Math", 64 | "id": "editor:insert-mathblock", 65 | "icon": "percent", 66 | "mode": "any", 67 | "triggerMode": "anywhere", 68 | "chosen": false, 69 | "selected": false, 70 | "action": "editor:insert-mathblock", 71 | "children": [] 72 | }, 73 | { 74 | "name": "Embed", 75 | "id": "editor:insert-embed", 76 | "icon": "sticky-note", 77 | "mode": "any", 78 | "triggerMode": "anywhere", 79 | "chosen": false, 80 | "selected": false, 81 | "action": "editor:insert-embed", 82 | "children": [] 83 | }, 84 | { 85 | "name": "Table", 86 | "id": "editor:insert-table", 87 | "icon": "table-2", 88 | "mode": "any", 89 | "triggerMode": "anywhere", 90 | "chosen": false, 91 | "selected": false, 92 | "action": "editor:insert-table", 93 | "children": [] 94 | }, 95 | { 96 | "name": "Callout", 97 | "id": "editor:insert-callout", 98 | "icon": "indent", 99 | "mode": "any", 100 | "triggerMode": "anywhere", 101 | "chosen": false, 102 | "selected": false, 103 | "action": "editor:insert-callout", 104 | "children": [] 105 | }, 106 | { 107 | "name": "Attachment", 108 | "id": "editor:attach-file", 109 | "icon": "paperclip", 110 | "mode": "any", 111 | "triggerMode": "anywhere", 112 | "chosen": false, 113 | "selected": false, 114 | "action": "editor:attach-file", 115 | "children": [] 116 | } 117 | ] 118 | } -------------------------------------------------------------------------------- /.obsidian/plugins/various-complements/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "strategy": "japanese", 3 | "cedictPath": "./cedict_ts.u8", 4 | "matchStrategy": "partial", 5 | "fuzzyMatch": true, 6 | "minFuzzyMatchScore": 0.5, 7 | "matchingWithoutEmoji": true, 8 | "treatAccentDiacriticsAsAlphabeticCharacters": false, 9 | "treatUnderscoreAsPartOfWord": false, 10 | "maxNumberOfSuggestions": 10, 11 | "maxNumberOfWordsAsPhrase": 3, 12 | "minNumberOfCharactersTriggered": 0, 13 | "minNumberOfWordsTriggeredPhrase": 1, 14 | "complementAutomatically": true, 15 | "delayMilliSeconds": 0, 16 | "disableSuggestionsDuringImeOn": false, 17 | "disableSuggestionsInMathBlock": false, 18 | "insertSpaceAfterCompletion": false, 19 | "firstCharactersDisableSuggestions": ":/^", 20 | "patternsToSuppressTrigger": [ 21 | "^~~~.*", 22 | "^```.*" 23 | ], 24 | "phrasePatternsToSuppressTrigger": [], 25 | "noAutoFocusUntilCycle": false, 26 | "showMatchStrategy": false, 27 | "showComplementAutomatically": false, 28 | "showIndexingStatus": false, 29 | "descriptionOnSuggestion": "Short", 30 | "hotkeys": { 31 | "select": [ 32 | { 33 | "modifiers": [], 34 | "key": "Enter" 35 | } 36 | ], 37 | "select with custom alias": [], 38 | "up": [ 39 | { 40 | "modifiers": [], 41 | "key": "ArrowUp" 42 | } 43 | ], 44 | "down": [ 45 | { 46 | "modifiers": [], 47 | "key": "ArrowDown" 48 | } 49 | ], 50 | "select 1st": [], 51 | "select 2nd": [], 52 | "select 3rd": [], 53 | "select 4th": [], 54 | "select 5th": [], 55 | "select 6th": [], 56 | "select 7th": [], 57 | "select 8th": [], 58 | "select 9th": [], 59 | "open": [], 60 | "completion": [], 61 | "insert as text": [] 62 | }, 63 | "propagateEsc": false, 64 | "enableCurrentFileComplement": false, 65 | "currentFileMinNumberOfCharacters": 0, 66 | "onlyComplementEnglishOnCurrentFileComplement": false, 67 | "excludeCurrentFileWordPatterns": [], 68 | "enableCurrentVaultComplement": false, 69 | "currentVaultMinNumberOfCharacters": 0, 70 | "includeCurrentVaultPathPrefixPatterns": "", 71 | "excludeCurrentVaultPathPrefixPatterns": "", 72 | "includeCurrentVaultOnlyFilesUnderCurrentDirectory": false, 73 | "excludeCurrentVaultWordPatterns": [], 74 | "enableCustomDictionaryComplement": false, 75 | "customDictionaryPaths": "https://raw.githubusercontent.com/first20hours/google-10000-english/master/google-10000-english-no-swears.txt", 76 | "columnDelimiter": "Tab", 77 | "customDictionaryWordRegexPattern": "", 78 | "delimiterToHideSuggestion": "", 79 | "delimiterToDivideSuggestionsForDisplayFromInsertion": "", 80 | "caretLocationSymbolAfterComplement": "", 81 | "displayedTextSuffix": " => ...", 82 | "enableInternalLinkComplement": true, 83 | "suggestInternalLinkWithAlias": false, 84 | "excludeInternalLinkPathPrefixPatterns": "", 85 | "excludeSelfInternalLink": true, 86 | "updateInternalLinksOnSave": true, 87 | "insertAliasTransformedFromDisplayedInternalLink": { 88 | "enabled": false, 89 | "beforeRegExp": "", 90 | "after": "" 91 | }, 92 | "frontMatterKeyForExclusionInternalLink": "", 93 | "enableFrontMatterComplement": false, 94 | "frontMatterComplementMatchStrategy": "inherit", 95 | "insertCommaAfterFrontMatterCompletion": false, 96 | "intelligentSuggestionPrioritization": { 97 | "enabled": true, 98 | "historyFilePath": "", 99 | "maxDaysToKeepHistory": 30, 100 | "maxNumberOfHistoryToKeep": 0 101 | }, 102 | "disableOnMobile": false, 103 | "showLogAboutPerformanceInConsole": false 104 | } -------------------------------------------------------------------------------- /.obsidian/plugins/dataview/styles.css: -------------------------------------------------------------------------------- 1 | .block-language-dataview { 2 | overflow-y: auto; 3 | } 4 | 5 | /*****************/ 6 | /** Table Views **/ 7 | /*****************/ 8 | 9 | /* List View Default Styling; rendered internally as a table. */ 10 | .table-view-table { 11 | width: 100%; 12 | } 13 | 14 | .table-view-table > thead > tr, .table-view-table > tbody > tr { 15 | margin-top: 1em; 16 | margin-bottom: 1em; 17 | text-align: left; 18 | } 19 | 20 | .table-view-table > tbody > tr:hover { 21 | background-color: var(--table-row-background-hover); 22 | } 23 | 24 | .table-view-table > thead > tr > th { 25 | font-weight: 700; 26 | font-size: larger; 27 | border-top: none; 28 | border-left: none; 29 | border-right: none; 30 | border-bottom: solid; 31 | 32 | max-width: 100%; 33 | } 34 | 35 | .table-view-table > tbody > tr > td { 36 | text-align: left; 37 | border: none; 38 | font-weight: 400; 39 | max-width: 100%; 40 | } 41 | 42 | .table-view-table ul, .table-view-table ol { 43 | margin-block-start: 0.2em !important; 44 | margin-block-end: 0.2em !important; 45 | } 46 | 47 | /** Rendered value styling for any view. */ 48 | .dataview-result-list-root-ul { 49 | padding: 0em !important; 50 | margin: 0em !important; 51 | } 52 | 53 | .dataview-result-list-ul { 54 | margin-block-start: 0.2em !important; 55 | margin-block-end: 0.2em !important; 56 | } 57 | 58 | /** Generic grouping styling. */ 59 | .dataview.result-group { 60 | padding-left: 8px; 61 | } 62 | 63 | /*******************/ 64 | /** Inline Fields **/ 65 | /*******************/ 66 | 67 | .dataview.inline-field-key { 68 | padding-left: 8px; 69 | padding-right: 8px; 70 | font-family: var(--font-monospace); 71 | background-color: var(--background-primary-alt); 72 | color: var(--nav-item-color-selected); 73 | } 74 | 75 | .dataview.inline-field-value { 76 | padding-left: 8px; 77 | padding-right: 8px; 78 | font-family: var(--font-monospace); 79 | background-color: var(--background-secondary-alt); 80 | color: var(--nav-item-color-selected); 81 | } 82 | 83 | .dataview.inline-field-standalone-value { 84 | padding-left: 8px; 85 | padding-right: 8px; 86 | font-family: var(--font-monospace); 87 | background-color: var(--background-secondary-alt); 88 | color: var(--nav-item-color-selected); 89 | } 90 | 91 | /***************/ 92 | /** Task View **/ 93 | /***************/ 94 | 95 | .dataview.task-list-item, .dataview.task-list-basic-item { 96 | margin-top: 3px; 97 | margin-bottom: 3px; 98 | transition: 0.4s; 99 | } 100 | 101 | .dataview.task-list-item:hover, .dataview.task-list-basic-item:hover { 102 | background-color: var(--text-selection); 103 | box-shadow: -40px 0 0 var(--text-selection); 104 | cursor: pointer; 105 | } 106 | 107 | /*****************/ 108 | /** Error Views **/ 109 | /*****************/ 110 | 111 | div.dataview-error-box { 112 | width: 100%; 113 | min-height: 150px; 114 | display: flex; 115 | align-items: center; 116 | justify-content: center; 117 | border: 4px dashed var(--background-secondary); 118 | } 119 | 120 | .dataview-error-message { 121 | color: var(--text-muted); 122 | text-align: center; 123 | } 124 | 125 | /*************************/ 126 | /** Additional Metadata **/ 127 | /*************************/ 128 | 129 | .dataview.small-text { 130 | font-size: smaller; 131 | color: var(--text-muted); 132 | margin-left: 3px; 133 | } 134 | 135 | .dataview.small-text::before { 136 | content: "("; 137 | } 138 | 139 | .dataview.small-text::after { 140 | content: ")"; 141 | } 142 | -------------------------------------------------------------------------------- /.obsidian/plugins/float-search/styles.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This CSS file will be included with your plugin, and 4 | available in the app when your plugin is enabled. 5 | 6 | If your plugin does not need CSS, delete this file. 7 | 8 | */ 9 | .float-search-modal { 10 | width: 700px; 11 | padding-bottom: 0; 12 | } 13 | 14 | .float-search-modal.float-search-width { 15 | width: 1200px; 16 | } 17 | 18 | .float-search-modal-search-ctn, 19 | .float-search-modal-file-ctn { 20 | height: 100%; 21 | width: 100%; 22 | } 23 | 24 | .float-search-modal-file-ctn .view-header { 25 | display: none; 26 | } 27 | 28 | .float-search-modal-content { 29 | height: 800px; 30 | display: flex; 31 | align-items: center; 32 | flex-direction: row; 33 | } 34 | 35 | .float-search-modal-file-ctn .view-content { 36 | height: 100%; 37 | } 38 | 39 | .float-search-modal .modal-close-button { 40 | z-index: 40; 41 | } 42 | 43 | .fs-content .workspace-split.mod-vertical { 44 | height: 100%; 45 | } 46 | 47 | .fs-content { 48 | height: 100%; 49 | } 50 | 51 | .fs-content .cm-scroller { 52 | margin-top: 20px; 53 | } 54 | 55 | .fs-block { 56 | height: 100% !important; 57 | } 58 | 59 | .fs-block .workspace-leaf-resize-handle { 60 | display: none; 61 | } 62 | 63 | .modal-container.float-search-modal-container.mod-dim { 64 | z-index: 30; 65 | } 66 | 67 | .float-search-modal-instructions { 68 | border-top: 1px solid var(--background-secondary); 69 | user-select: none; 70 | font-size: var(--font-ui-smaller); 71 | color: var(--text-muted); 72 | padding: var(--size-4-2); 73 | text-align: center; 74 | display: flex; 75 | flex-wrap: wrap; 76 | justify-content: center; 77 | gap: var(--size-4-3); 78 | } 79 | 80 | .float-search-modal-instructions .float-search-modal-instructions-key { 81 | font-weight: var(--font-extrabold); 82 | margin-right: var(--size-2-2); 83 | } 84 | 85 | .float-search-modal-content:has(.float-search-modal-file-ctn) 86 | .float-search-modal-search-ctn { 87 | border-right: 1px solid var(--background-secondary); 88 | } 89 | 90 | .float-search-modal-file-ctn:has(.mod-active) { 91 | border-bottom: 3px solid var(--color-accent); 92 | } 93 | 94 | .float-search-modal-file-ctn:has(.mod-active) .cm-scroller { 95 | background-color: var(--background-primary); 96 | } 97 | 98 | .float-search-view-switch { 99 | display: flex; 100 | align-items: center; 101 | } 102 | 103 | .float-search-view-menu .menu-item-icon { 104 | color: var(--text-muted); 105 | } 106 | 107 | .float-search-view-menu svg { 108 | fill: none; 109 | stroke: currentcolor; 110 | stroke-width: 2; 111 | stroke-linecap: round; 112 | stroke-linejoin: round; 113 | } 114 | 115 | body:not(.show-file-path) .search-result-file-title .search-result-file-path { 116 | display: none; 117 | } 118 | 119 | .show-file-path .search-result-file-title .search-result-file-path { 120 | display: flex; 121 | justify-content: center; 122 | align-items: center; 123 | color: var(--text-muted); 124 | font-size: var(--font-ui-smaller); 125 | font-weight: var(--font-bolder); 126 | margin-right: var(--size-2-2); 127 | padding: 1px; 128 | padding-left: var(--size-4-2); 129 | background-color: var(--background-secondary-alt); 130 | padding-right: var(--size-4-2); 131 | border-radius: var(--radius-s); 132 | 133 | --icon-size: 12px; 134 | } 135 | 136 | .show-file-path .search-result-file-title .search-result-file-path-icon { 137 | display: flex; 138 | align-items: center; 139 | justify-content: center; 140 | margin-right: var(--size-2-2); 141 | } 142 | 143 | .show-file-path .search-result-file-title .search-result-file-path:hover { 144 | background-color: var(--background-secondary); 145 | } 146 | 147 | .fs-leaf-view .workspace-split { 148 | background-color: var(--background-primary); 149 | } 150 | -------------------------------------------------------------------------------- /02_view/10_dashboard.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | - dashboard 4 | --- 5 | ## View 6 | ```base 7 | views: 8 | - type: table 9 | name: all 10 | filters: 11 | and: 12 | - file.path.contains("02_view") 13 | order: 14 | - file.name 15 | - file.tags 16 | - file.ext 17 | - type: table 18 | name: bases 19 | filters: 20 | and: 21 | - file.folder.contains("02_view") 22 | - file.ext == "base" 23 | order: 24 | - file.name 25 | sort: 26 | - property: file.links 27 | direction: ASC 28 | - property: file.folder 29 | direction: DESC 30 | - type: table 31 | name: tasks 32 | filters: 33 | and: 34 | - file.folder.contains("02_view") 35 | - file.hasTag("task") 36 | order: 37 | - file.name 38 | sort: 39 | - property: file.links 40 | direction: ASC 41 | - property: file.folder 42 | direction: DESC 43 | 44 | ``` 45 | 46 | ## Today | Pin 47 | ```base 48 | formulas: 49 | backlinks: file.backlinks.map(if(value.asFile(), value.asFile().asLink(value.asFile().name.replace(/\.[^\.]+$/, "")), null)).unique().filter(value) 50 | last_edit: file.mtime.relative() 51 | properties: 52 | formula.backlinks: 53 | displayName: backlinks 54 | formula.last_edit: 55 | displayName: last edit 56 | views: 57 | - type: table 58 | name: today 59 | filters: 60 | and: 61 | - file.inFolder("01_data/" + today().format("YYYY/MM/DD")) 62 | order: 63 | - file.name 64 | - file.tags 65 | - file.ext 66 | - file.links 67 | - formula.backlinks 68 | - formula.last_edit 69 | sort: 70 | - property: file.mtime 71 | direction: DESC 72 | - type: table 73 | name: pin 74 | filters: 75 | and: 76 | - file.path.contains("01_data") 77 | - file.hasTag("Pin") 78 | order: 79 | - file.name 80 | - file.tags 81 | - file.ext 82 | - file.links 83 | - formula.backlinks 84 | - formula.last_edit 85 | sort: 86 | - property: file.mtime 87 | direction: DESC 88 | 89 | ``` 90 | 91 | ## Data 92 | ```base 93 | formulas: 94 | backlinks: file.backlinks.map(if(value.asFile(), value.asFile().asLink(value.asFile().name.replace(/\.[^\.]+$/, "")), null)).unique().filter(value) 95 | last_edit: file.mtime.relative() 96 | properties: 97 | formula.backlinks: 98 | displayName: backlinks 99 | formula.last_edit: 100 | displayName: last edit 101 | views: 102 | - type: table 103 | name: all 104 | filters: 105 | and: 106 | - file.folder.contains("01_data") 107 | order: 108 | - file.name 109 | - file.tags 110 | - file.ext 111 | - file.links 112 | - formula.backlinks 113 | - formula.last_edit 114 | sort: 115 | - property: file.mtime 116 | direction: DESC 117 | - type: table 118 | name: notes 119 | filters: 120 | and: 121 | - file.folder.contains("01_data") 122 | - file.ext == "md" 123 | order: 124 | - file.name 125 | - file.tags 126 | - file.links 127 | - formula.backlinks 128 | - formula.last_edit 129 | sort: 130 | - property: file.mtime 131 | direction: DESC 132 | - type: table 133 | name: assets 134 | filters: 135 | and: 136 | - file.folder.contains("01_data") 137 | - file.ext != "md" 138 | order: 139 | - file.name 140 | - file.ext 141 | - formula.backlinks 142 | - formula.last_edit 143 | sort: 144 | - property: file.mtime 145 | direction: DESC 146 | - type: table 147 | name: past 148 | filters: 149 | and: 150 | - file.folder.contains("01_data") 151 | - '!file.inFolder("01_data/" + today().format("YYYY/MM/DD"))' 152 | order: 153 | - file.name 154 | - file.tags 155 | - file.ext 156 | - file.links 157 | - formula.backlinks 158 | - formula.last_edit 159 | sort: 160 | - property: file.mtime 161 | direction: DESC 162 | 163 | ``` 164 | -------------------------------------------------------------------------------- /02_view/20_tasks.md: -------------------------------------------------------------------------------- 1 | --- 2 | tags: 3 | - task 4 | --- 5 | ## Tasks 6 | ```dataviewjs 7 | const ROOT_DIR = "01_data"; 8 | 9 | const FILTER_TAGS = ["sample"]; 10 | 11 | const EXCLUDE_TAGS = []; 12 | 13 | const stringPool = new Map(); 14 | 15 | const pooledString = (str) => { 16 | if (stringPool.has(str)) return stringPool.get(str); 17 | stringPool.set(str, str); 18 | return str; 19 | }; 20 | 21 | const createFileLink = (path, name) => pooledString(`[[${path}|${name}]]`); 22 | 23 | const formatDateTime = (date) => { 24 | const year = date.getFullYear(); 25 | const month = String(date.getMonth() + 1).padStart(2, '0'); 26 | const day = String(date.getDate()).padStart(2, '0'); 27 | const hours = String(date.getHours()).padStart(2, '0'); 28 | const minutes = String(date.getMinutes()).padStart(2, '0'); 29 | return `${year}-${month}-${day} ${hours}:${minutes}`; 30 | }; 31 | 32 | const buildQuery = () => { 33 | let query = `"${ROOT_DIR}"`; 34 | 35 | if (FILTER_TAGS && FILTER_TAGS.length > 0) { 36 | const tagQuery = FILTER_TAGS.map(tag => `#${tag}`).join(' or '); 37 | query += ` and (${tagQuery})`; 38 | } 39 | 40 | if (EXCLUDE_TAGS && EXCLUDE_TAGS.length > 0) { 41 | const excludeQuery = EXCLUDE_TAGS.map(tag => `-#${tag}`).join(' and '); 42 | query += ` and ${excludeQuery}`; 43 | } 44 | 45 | return query; 46 | }; 47 | 48 | const buildFilterText = () => { 49 | const filterParts = []; 50 | 51 | if (FILTER_TAGS && FILTER_TAGS.length > 0) { 52 | filterParts.push(`含む: #${FILTER_TAGS.join(' #')}`); 53 | } 54 | 55 | if (EXCLUDE_TAGS && EXCLUDE_TAGS.length > 0) { 56 | filterParts.push(`除外: #${EXCLUDE_TAGS.join(' #')}`); 57 | } 58 | 59 | return filterParts.length > 0 ? `${filterParts.join(' , ')}` : ""; 60 | }; 61 | 62 | const collectTasksFromPages = (pages) => { 63 | const pendingTasks = []; 64 | const completedTasks = []; 65 | 66 | pages.forEach(page => { 67 | const tasks = page.file.tasks?.array() || []; 68 | 69 | tasks.forEach(task => { 70 | const taskData = { 71 | file: { 72 | path: page.file.path, 73 | name: page.file.name 74 | }, 75 | text: task.text, 76 | mtime: page.file.mtime 77 | }; 78 | 79 | if (task.completed) { 80 | completedTasks.push(taskData); 81 | } else if (task.task) { 82 | pendingTasks.push(taskData); 83 | } 84 | }); 85 | }); 86 | 87 | const sortByMtime = (a, b) => new Date(b.mtime) - new Date(a.mtime); 88 | pendingTasks.sort(sortByMtime); 89 | completedTasks.sort(sortByMtime); 90 | 91 | return { pendingTasks, completedTasks }; 92 | }; 93 | 94 | const renderTaskSection = (title, tasks, emoji) => { 95 | dv.header(3, `${emoji} ${title}`); 96 | 97 | if (tasks.length === 0) { 98 | dv.paragraph(`${title}はありません`); 99 | return; 100 | } 101 | 102 | const tableData = tasks.map(task => [ 103 | createFileLink(task.file.path, task.file.name), 104 | task.text, 105 | formatDateTime(new Date(task.mtime)) 106 | ]); 107 | 108 | dv.table(["ファイル", "タスク内容", "最終更新日時"], tableData); 109 | }; 110 | 111 | const executeTaskExtraction = () => { 112 | try { 113 | const query = buildQuery(); 114 | const pages = dv.pages(query).array(); 115 | 116 | const { pendingTasks, completedTasks } = collectTasksFromPages(pages); 117 | 118 | const filterText = buildFilterText(); 119 | dv.paragraph(`${filterText}`); 120 | 121 | const totalTasks = pendingTasks.length + completedTasks.length; 122 | if (totalTasks === 0) { 123 | dv.paragraph("該当するタスクが見つかりませんでした"); 124 | dv.paragraph(`検索対象: ${pages.length}件のファイル`); 125 | return; 126 | } 127 | 128 | dv.paragraph(`合計 **${totalTasks}**件 (未完了: **${pendingTasks.length}**件、完了済み: **${completedTasks.length}**件)`); 129 | 130 | renderTaskSection("未完了", pendingTasks, "📋"); 131 | 132 | renderTaskSection("完了済み", completedTasks, "✅"); 133 | 134 | } catch (error) { 135 | dv.paragraph(`エラーが発生しました: ${error.message}`); 136 | console.error('DataviewJS エラー:', error); 137 | } finally { 138 | stringPool.clear(); 139 | } 140 | }; 141 | 142 | executeTaskExtraction(); 143 | ``` 144 | 145 | ## Notes 146 | ```base 147 | formulas: 148 | backlinks: file.backlinks.map(if(value.asFile(), value.asFile().asLink(value.asFile().name.replace(/\.[^\.]+$/, "")), null)).unique().filter(value) 149 | last_edit: file.mtime.relative() 150 | properties: 151 | formula.backlinks: 152 | displayName: backlinks 153 | formula.last_edit: 154 | displayName: last edit 155 | views: 156 | - type: table 157 | name: all 158 | filters: 159 | and: 160 | - file.folder.contains("01_data") 161 | - file.hasTag("sample") 162 | order: 163 | - file.name 164 | - file.tags 165 | - file.links 166 | - formula.backlinks 167 | - formula.last_edit 168 | sort: 169 | - property: file.mtime 170 | direction: DESC 171 | ``` 172 | -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/styles.css: -------------------------------------------------------------------------------- 1 | .templater_search { 2 | width: calc(100% - 20px); 3 | } 4 | 5 | .templater_div { 6 | border-top: 1px solid var(--background-modifier-border); 7 | } 8 | 9 | .templater_div > .setting-item { 10 | border-top: none !important; 11 | align-self: center; 12 | } 13 | 14 | .templater_div > .setting-item > .setting-item-control { 15 | justify-content: space-around; 16 | padding: 0; 17 | width: 100%; 18 | } 19 | 20 | .templater_div 21 | > .setting-item 22 | > .setting-item-control 23 | > .setting-editor-extra-setting-button { 24 | align-self: center; 25 | } 26 | 27 | .templater_donating { 28 | margin: 10px; 29 | } 30 | 31 | .templater_title { 32 | margin: 0; 33 | padding: 0; 34 | margin-top: 5px; 35 | text-align: center; 36 | } 37 | 38 | .templater_template { 39 | align-self: center; 40 | margin-left: 5px; 41 | margin-right: 5px; 42 | width: 70%; 43 | } 44 | 45 | .templater_cmd { 46 | margin-left: 5px; 47 | margin-right: 5px; 48 | font-size: 14px; 49 | width: 100%; 50 | } 51 | 52 | .templater_div2 > .setting-item { 53 | align-content: center; 54 | justify-content: center; 55 | } 56 | 57 | .templater-prompt-div { 58 | display: flex; 59 | } 60 | 61 | .templater-prompt-form { 62 | display: flex; 63 | flex-grow: 1; 64 | } 65 | 66 | .templater-prompt-input { 67 | flex-grow: 1; 68 | } 69 | 70 | .templater-button-div { 71 | display: flex; 72 | flex-direction: column; 73 | align-items: center; 74 | margin-top: 1rem; 75 | } 76 | 77 | textarea.templater-prompt-input { 78 | height: 10rem; 79 | } 80 | 81 | textarea.templater-prompt-input:focus { 82 | border-color: var(--interactive-accent); 83 | } 84 | 85 | .cm-s-obsidian .templater-command-bg { 86 | left: 0px; 87 | right: 0px; 88 | background-color: var(--background-primary-alt); 89 | } 90 | 91 | .cm-s-obsidian .cm-templater-command { 92 | font-size: 0.85em; 93 | font-family: var(--font-monospace); 94 | line-height: 1.3; 95 | } 96 | 97 | .cm-s-obsidian .templater-inline .cm-templater-command { 98 | background-color: var(--background-primary-alt); 99 | } 100 | 101 | .cm-s-obsidian .cm-templater-command.cm-templater-opening-tag { 102 | font-weight: bold; 103 | } 104 | 105 | .cm-s-obsidian .cm-templater-command.cm-templater-closing-tag { 106 | font-weight: bold; 107 | } 108 | 109 | .cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag { 110 | color: var(--code-property, #008bff); 111 | } 112 | 113 | .cm-s-obsidian .cm-templater-command.cm-templater-execution-tag { 114 | color: var(--code-function, #c0d700); 115 | } 116 | 117 | .cm-s-obsidian .cm-templater-command.cm-keyword { 118 | color: var(--code-keyword, #00a7aa); 119 | font-weight: normal; 120 | } 121 | 122 | .cm-s-obsidian .cm-templater-command.cm-atom { 123 | color: var(--code-normal, #f39b35); 124 | } 125 | 126 | .cm-s-obsidian .cm-templater-command.cm-value, 127 | .cm-s-obsidian .cm-templater-command.cm-number, 128 | .cm-s-obsidian .cm-templater-command.cm-type { 129 | color: var(--code-value, #a06fca); 130 | } 131 | 132 | .cm-s-obsidian .cm-templater-command.cm-def, 133 | .cm-s-obsidian .cm-templater-command.cm-type.cm-def { 134 | color: var(--code-normal, var(--text-normal)); 135 | } 136 | 137 | .cm-s-obsidian .cm-templater-command.cm-property, 138 | .cm-s-obsidian .cm-templater-command.cm-property.cm-def, 139 | .cm-s-obsidian .cm-templater-command.cm-attribute { 140 | color: var(--code-function, #98e342); 141 | } 142 | 143 | .cm-s-obsidian .cm-templater-command.cm-variable, 144 | .cm-s-obsidian .cm-templater-command.cm-variable-2, 145 | .cm-s-obsidian .cm-templater-command.cm-variable-3, 146 | .cm-s-obsidian .cm-templater-command.cm-meta { 147 | color: var(--code-property, #d4d4d4); 148 | } 149 | 150 | .cm-s-obsidian .cm-templater-command.cm-callee, 151 | .cm-s-obsidian .cm-templater-command.cm-operator, 152 | .cm-s-obsidian .cm-templater-command.cm-qualifier, 153 | .cm-s-obsidian .cm-templater-command.cm-builtin { 154 | color: var(--code-operator, #fc4384); 155 | } 156 | 157 | .cm-s-obsidian .cm-templater-command.cm-tag { 158 | color: var(--code-tag, #fc4384); 159 | } 160 | 161 | .cm-s-obsidian .cm-templater-command.cm-comment, 162 | .cm-s-obsidian .cm-templater-command.cm-comment.cm-tag, 163 | .cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute { 164 | color: var(--code-comment, #696d70); 165 | } 166 | 167 | .cm-s-obsidian .cm-templater-command.cm-string, 168 | .cm-s-obsidian .cm-templater-command.cm-string-2 { 169 | color: var(--code-string, #e6db74); 170 | } 171 | 172 | .cm-s-obsidian .cm-templater-command.cm-header, 173 | .cm-s-obsidian .cm-templater-command.cm-hr { 174 | color: var(--code-keyword, #da7dae); 175 | } 176 | 177 | .cm-s-obsidian .cm-templater-command.cm-link { 178 | color: var(--code-normal, #696d70); 179 | } 180 | 181 | .cm-s-obsidian .cm-templater-command.cm-error { 182 | border-bottom: 1px solid #c42412; 183 | } 184 | 185 | .CodeMirror-hints { 186 | position: absolute; 187 | z-index: 10; 188 | overflow: hidden; 189 | list-style: none; 190 | 191 | margin: 0; 192 | padding: 2px; 193 | 194 | -webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2); 195 | -moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2); 196 | box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2); 197 | border-radius: 3px; 198 | border: 1px solid silver; 199 | 200 | background: white; 201 | font-size: 90%; 202 | font-family: monospace; 203 | 204 | max-height: 20em; 205 | overflow-y: auto; 206 | } 207 | 208 | .CodeMirror-hint { 209 | margin: 0; 210 | padding: 0 4px; 211 | border-radius: 2px; 212 | white-space: pre; 213 | color: black; 214 | cursor: pointer; 215 | } 216 | 217 | li.CodeMirror-hint-active { 218 | background: #08f; 219 | color: white; 220 | } 221 | -------------------------------------------------------------------------------- /.obsidian/plugins/mononote/main.js: -------------------------------------------------------------------------------- 1 | /* 2 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 3 | if you want to view the source, please visit the github repository of this plugin 4 | */ 5 | 6 | var __defProp = Object.defineProperty; 7 | var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 8 | var __getOwnPropNames = Object.getOwnPropertyNames; 9 | var __hasOwnProp = Object.prototype.hasOwnProperty; 10 | var __export = (target, all) => { 11 | for (var name in all) 12 | __defProp(target, name, { get: all[name], enumerable: true }); 13 | }; 14 | var __copyProps = (to, from, except, desc) => { 15 | if (from && typeof from === "object" || typeof from === "function") { 16 | for (let key of __getOwnPropNames(from)) 17 | if (!__hasOwnProp.call(to, key) && key !== except) 18 | __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 19 | } 20 | return to; 21 | }; 22 | var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 23 | 24 | // src/main.ts 25 | var main_exports = {}; 26 | __export(main_exports, { 27 | default: () => Mononote 28 | }); 29 | module.exports = __toCommonJS(main_exports); 30 | var import_obsidian2 = require("obsidian"); 31 | 32 | // src/plugin-info.ts 33 | var PLUGIN_INFO = { 34 | "pluginVersion": "1.2.2", 35 | "pluginReleasedAt": "2024-06-24T14:29:11+0200" 36 | }; 37 | 38 | // src/settings.ts 39 | var import_obsidian = require("obsidian"); 40 | var MononoteSettingsTab = class extends import_obsidian.PluginSettingTab { 41 | constructor(app, plugin) { 42 | super(app, plugin); 43 | this.delayOptions = [ 44 | 100, 45 | 150, 46 | 200, 47 | 300, 48 | 500 49 | ]; 50 | this.plugin = plugin; 51 | } 52 | display() { 53 | const { containerEl, plugin } = this; 54 | containerEl.empty(); 55 | containerEl.createEl("h2", { text: "Mononote Settings" }); 56 | const delayOptionsRecord = this.delayOptions.reduce( 57 | (acc, current) => { 58 | acc[`${current}`] = `${current}ms`; 59 | return acc; 60 | }, 61 | {} 62 | ); 63 | new import_obsidian.Setting(containerEl).setName("Delay before applying tab switching rules").setDesc(` 64 | Depending on your machine and the size of your vault, Obsidian might need a bit of time before Mononote's tab switching rules can be applied. 65 | 66 | Example: If you load a note N1 in an tab T1, and N1 is already shown in in T2, Mononote should switch to T2. But if you experience Mononote switching to T2, and then immediately back to T1, that means Obsidian needs more time. In that case, try increasing the delay.`).addDropdown((dropdown) => { 67 | dropdown.addOptions(delayOptionsRecord).setValue(`${plugin.settings.delayInMs}`).onChange( 68 | async (value) => { 69 | plugin.settings.delayInMs = +value; 70 | await plugin.saveSettings(); 71 | this.display(); 72 | } 73 | ); 74 | }); 75 | const afoURL = "https://actions.work/actions-for-obsidian?ref=plugin-mononote"; 76 | containerEl.createEl("div", { 77 | attr: { 78 | style: ` 79 | border-radius: 0.5rem; 80 | border: 1px dashed var(--text-muted); 81 | color: var(--text-muted); 82 | display: grid; 83 | font-size: 85%; 84 | grid-gap: 1rem; 85 | grid-template-columns: auto 1fr; 86 | margin-top: 4rem; 87 | opacity: 0.75; 88 | padding: 1rem; 89 | ` 90 | } 91 | }).innerHTML = ` 92 | <a href="${afoURL}"> 93 | <img 94 | src="https://actions.work/img/afo-icon.png" 95 | style="margin: -0.4rem -0.5rem -0.5rem 0; width: 5rem;" 96 | alt="Actions for Obsidian icon, a cog wheel on a glossy black background"> 97 | </a> 98 | <span> 99 | Mononote is brought to you by 100 | <a href="${afoURL}"><strong>Actions for Obsidian</strong></a>, 101 | a macOS/iOS app made by the same developer as this plugin. AFO is the 102 | missing link between Obsidian and macOS / iOS: 50+ Shortcuts 103 | actions to bring your notes and your automations together. 104 | <a href="${afoURL}">Take a look!</a> 105 | </span> 106 | `; 107 | } 108 | }; 109 | 110 | // src/main.ts 111 | var DEFAULT_SETTINGS = { 112 | delayInMs: 100 113 | }; 114 | var Mononote = class extends import_obsidian2.Plugin { 115 | constructor() { 116 | super(...arguments); 117 | this.pluginName = `Plugin Mononote v${PLUGIN_INFO.pluginVersion}`; 118 | this.processors = /* @__PURE__ */ new Map(); 119 | } 120 | async onload() { 121 | await this.loadSettings(); 122 | const { workspace } = this.app; 123 | workspace.onLayoutReady(() => { 124 | this.registerEvent( 125 | workspace.on("active-leaf-change", this.onActiveLeafChange.bind(this)) 126 | ); 127 | console.log(`${this.pluginName} initialized`); 128 | }); 129 | this.addSettingTab(new MononoteSettingsTab(this.app, this)); 130 | } 131 | onunload() { 132 | console.log(`${this.pluginName} unloaded`); 133 | } 134 | async loadSettings() { 135 | this.settings = { ...DEFAULT_SETTINGS, ...await this.loadData() }; 136 | } 137 | async saveSettings() { 138 | await this.saveData(this.settings); 139 | } 140 | async onActiveLeafChange(activeLeaf) { 141 | const { id } = activeLeaf; 142 | if (this.processors.has(id)) { 143 | this.logMsg(id, "\u274C Already processing leaf"); 144 | return; 145 | } 146 | const processor = this.processActiveLeaf(activeLeaf); 147 | this.processors.set(id, processor); 148 | try { 149 | await processor; 150 | } finally { 151 | this.processors.delete(id); 152 | this.logMsg(id, "Finished processing"); 153 | } 154 | } 155 | async processActiveLeaf(activeLeaf) { 156 | const leafID = activeLeaf.id; 157 | const logMsg = (label, payload = "") => this.logMsg(leafID, label, payload); 158 | logMsg( 159 | "Processing leaf", 160 | { file: activeLeaf.view.getState().file, parent: activeLeaf.parent.id } 161 | ); 162 | const filePath = activeLeaf.view.getState().file; 163 | if (!filePath) { 164 | logMsg("Contains no file"); 165 | return Promise.resolve(); 166 | } 167 | return new Promise((resolve) => { 168 | const { workspace } = this.app; 169 | const viewType = activeLeaf == null ? void 0 : activeLeaf.view.getViewType(); 170 | const duplicateLeaves = workspace.getLeavesOfType(viewType).filter( 171 | (l) => { 172 | var _a; 173 | return l.parent.id === activeLeaf.parent.id && l.id !== leafID && ((_a = l.view) == null ? void 0 : _a.getState().file) === filePath; 174 | } 175 | ).sort((l1, l2) => { 176 | if (l1.activeTime === 0) 177 | return -1; 178 | if (l2.activeTime === 0) 179 | return 1; 180 | return l2.activeTime - l1.activeTime; 181 | }); 182 | if (duplicateLeaves.length === 0) { 183 | logMsg("No duplicates found"); 184 | return resolve(); 185 | } 186 | const targetToFocus = duplicateLeaves.find((l) => l.pinned) || duplicateLeaves.find((l) => !l.pinned); 187 | setTimeout(() => { 188 | const ephemeralState = { ...activeLeaf.getEphemeralState() }; 189 | const hasEphemeralState = Object.keys(ephemeralState).length > 0; 190 | if (activeLeaf.view.navigation && activeLeaf.history.backHistory.length > 0) { 191 | activeLeaf.history.back(); 192 | logMsg("history.back"); 193 | } else if (activeLeaf.pinned) { 194 | logMsg("pinned tab, not detaching"); 195 | return resolve(); 196 | } else { 197 | activeLeaf.detach(); 198 | logMsg("detach"); 199 | } 200 | setTimeout(() => { 201 | workspace.setActiveLeaf(targetToFocus, { focus: true }); 202 | if (hasEphemeralState) { 203 | targetToFocus.setEphemeralState(ephemeralState); 204 | } 205 | }, this.settings.delayInMs); 206 | resolve(); 207 | }, this.settings.delayInMs); 208 | }); 209 | } 210 | logMsg(leafID, label, payload = "") { 211 | } 212 | }; 213 | 214 | /* nosourcemap */ -------------------------------------------------------------------------------- /.obsidian/workspaces.json: -------------------------------------------------------------------------------- 1 | { 2 | "workspaces": { 3 | "default": { 4 | "main": { 5 | "id": "4f2dedffcb7babec", 6 | "type": "split", 7 | "children": [ 8 | { 9 | "id": "03bb6189dcf7bedc", 10 | "type": "tabs", 11 | "children": [ 12 | { 13 | "id": "3fc6bb0e8e5a084a", 14 | "type": "leaf", 15 | "pinned": true, 16 | "state": { 17 | "type": "graph", 18 | "state": {}, 19 | "pinned": true, 20 | "icon": "lucide-git-fork", 21 | "title": "グラフビュー" 22 | } 23 | }, 24 | { 25 | "id": "ddbbfb04f1eb3651", 26 | "type": "leaf", 27 | "pinned": true, 28 | "state": { 29 | "type": "markdown", 30 | "state": { 31 | "file": "02_view/10_dashboard.md", 32 | "mode": "preview", 33 | "source": false 34 | }, 35 | "pinned": true, 36 | "icon": "lucide-file", 37 | "title": "10_dashboard" 38 | } 39 | } 40 | ], 41 | "currentTab": 1 42 | } 43 | ], 44 | "direction": "vertical" 45 | }, 46 | "left": { 47 | "id": "9b8f7349c4be646b", 48 | "type": "split", 49 | "children": [ 50 | { 51 | "id": "fb81e9a5bb533dc6", 52 | "type": "tabs", 53 | "dimension": 32.91326908821349, 54 | "children": [ 55 | { 56 | "id": "f2a3e2439cb34eab", 57 | "type": "leaf", 58 | "state": { 59 | "type": "file-explorer", 60 | "state": { 61 | "sortOrder": "alphabetical", 62 | "autoReveal": false 63 | }, 64 | "icon": "lucide-folder-closed", 65 | "title": "ファイルエクスプローラ" 66 | } 67 | }, 68 | { 69 | "id": "d3a6af74e6ad9524", 70 | "type": "leaf", 71 | "state": { 72 | "type": "localgraph", 73 | "state": { 74 | "file": "02_view/10_dashboard.md", 75 | "options": { 76 | "collapse-filter": true, 77 | "search": "", 78 | "localJumps": 5, 79 | "localBacklinks": true, 80 | "localForelinks": true, 81 | "localInterlinks": false, 82 | "showTags": true, 83 | "showAttachments": true, 84 | "hideUnresolved": false, 85 | "collapse-color-groups": false, 86 | "colorGroups": [], 87 | "collapse-display": true, 88 | "showArrow": true, 89 | "textFadeMultiplier": 0, 90 | "nodeSizeMultiplier": 1, 91 | "lineSizeMultiplier": 1, 92 | "collapse-forces": true, 93 | "centerStrength": 0.518713248970312, 94 | "repelStrength": 10, 95 | "linkStrength": 1, 96 | "linkDistance": 250, 97 | "scale": 0.7132754626224421, 98 | "close": true 99 | } 100 | }, 101 | "icon": "lucide-git-fork", 102 | "title": "10_dashboardのグラフ" 103 | } 104 | } 105 | ], 106 | "currentTab": 1 107 | }, 108 | { 109 | "id": "997996fb5d4476c1", 110 | "type": "tabs", 111 | "dimension": 67.0867309117865, 112 | "children": [ 113 | { 114 | "id": "3c709899cee1aaf8", 115 | "type": "leaf", 116 | "state": { 117 | "type": "smart-connections-view", 118 | "state": {}, 119 | "icon": "smart-connections", 120 | "title": "Connections" 121 | } 122 | }, 123 | { 124 | "id": "714248805c12faf9", 125 | "type": "leaf", 126 | "state": { 127 | "type": "tagfolder-view", 128 | "state": {}, 129 | "icon": "stacked-levels", 130 | "title": "Tag Folder" 131 | } 132 | }, 133 | { 134 | "id": "b08492ae37277c78", 135 | "type": "leaf", 136 | "state": { 137 | "type": "tagfolder-link-view", 138 | "state": {}, 139 | "icon": "stacked-levels", 140 | "title": "Link Folder" 141 | } 142 | } 143 | ] 144 | } 145 | ], 146 | "direction": "horizontal", 147 | "width": 345.5 148 | }, 149 | "right": { 150 | "id": "3b8c3cad91b8fd5d", 151 | "type": "split", 152 | "children": [ 153 | { 154 | "id": "2f07cd6754ee3e10", 155 | "type": "tabs", 156 | "dimension": 28.735632183908045, 157 | "children": [ 158 | { 159 | "id": "020433e299f4cbda", 160 | "type": "leaf", 161 | "state": { 162 | "type": "search", 163 | "state": { 164 | "query": "", 165 | "matchingCase": false, 166 | "explainSearch": false, 167 | "collapseAll": false, 168 | "extraContext": false, 169 | "sortOrder": "alphabetical" 170 | }, 171 | "icon": "lucide-search", 172 | "title": "検索" 173 | } 174 | }, 175 | { 176 | "id": "d3ceec7114c16dee", 177 | "type": "leaf", 178 | "state": { 179 | "type": "outgoing-link", 180 | "state": { 181 | "linksCollapsed": false, 182 | "unlinkedCollapsed": false 183 | }, 184 | "icon": "links-going-out", 185 | "title": "アウトゴーイングリンク" 186 | } 187 | }, 188 | { 189 | "id": "1d9032e6d9b31efb", 190 | "type": "leaf", 191 | "state": { 192 | "type": "backlink", 193 | "state": { 194 | "collapseAll": false, 195 | "extraContext": false, 196 | "sortOrder": "alphabetical", 197 | "showSearch": false, 198 | "searchQuery": "", 199 | "backlinkCollapsed": false, 200 | "unlinkedCollapsed": false 201 | }, 202 | "icon": "links-coming-in", 203 | "title": "バックリンク" 204 | } 205 | }, 206 | { 207 | "id": "0241c411ee7ba555", 208 | "type": "leaf", 209 | "state": { 210 | "type": "outline", 211 | "state": { 212 | "file": "02_view/10_dashboard.md", 213 | "followCursor": false, 214 | "showSearch": false, 215 | "searchQuery": "" 216 | }, 217 | "icon": "lucide-list", 218 | "title": "10_dashboardのアウトライン" 219 | } 220 | } 221 | ] 222 | }, 223 | { 224 | "id": "22141a08ca8d8176", 225 | "type": "tabs", 226 | "dimension": 71.26436781609196, 227 | "children": [ 228 | { 229 | "id": "d3f2335f889bada4", 230 | "type": "leaf", 231 | "state": { 232 | "type": "git-view", 233 | "state": {}, 234 | "icon": "git-pull-request", 235 | "title": "Source Control" 236 | } 237 | } 238 | ] 239 | } 240 | ], 241 | "direction": "horizontal", 242 | "width": 390.5 243 | }, 244 | "left-ribbon": { 245 | "hiddenItems": { 246 | "bases:Create new base": true, 247 | "workspaces:ワークスペースレイアウトを管理": true, 248 | "switcher:クイックスイッチャーを開く": true, 249 | "graph:グラフビューを開く": true, 250 | "canvas:新規キャンバスを作成": true, 251 | "command-palette:コマンドパレットを開く": false, 252 | "templater-obsidian:Templater": true, 253 | "obsidian-git:Open Git source control": true, 254 | "float-search:Search obsidian in modal view": false, 255 | "smart-connections:Open: Smart Chat": false, 256 | "smart-connections:Smart Connections: Open connections view": true, 257 | "smart-connections:Smart Connections: Open random connection": true 258 | } 259 | }, 260 | "active": "ddbbfb04f1eb3651", 261 | "mtime": "2025-08-23T19:07:54+09:00" 262 | } 263 | }, 264 | "active": "default" 265 | } -------------------------------------------------------------------------------- /.obsidian/plugins/embed-code-file/main.js: -------------------------------------------------------------------------------- 1 | /* 2 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 3 | if you want to view the source, please visit the github repository of this plugin 4 | */ 5 | 6 | var __create = Object.create; 7 | var __defProp = Object.defineProperty; 8 | var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 9 | var __getOwnPropNames = Object.getOwnPropertyNames; 10 | var __getProtoOf = Object.getPrototypeOf; 11 | var __hasOwnProp = Object.prototype.hasOwnProperty; 12 | var __export = (target, all) => { 13 | for (var name in all) 14 | __defProp(target, name, { get: all[name], enumerable: true }); 15 | }; 16 | var __copyProps = (to, from, except, desc) => { 17 | if (from && typeof from === "object" || typeof from === "function") { 18 | for (let key of __getOwnPropNames(from)) 19 | if (!__hasOwnProp.call(to, key) && key !== except) 20 | __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 21 | } 22 | return to; 23 | }; 24 | var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); 25 | var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 26 | 27 | // main.ts 28 | var main_exports = {}; 29 | __export(main_exports, { 30 | default: () => EmbedCodeFile 31 | }); 32 | module.exports = __toCommonJS(main_exports); 33 | var import_obsidian2 = require("obsidian"); 34 | 35 | // settings.ts 36 | var import_obsidian = require("obsidian"); 37 | var DEFAULT_SETTINGS = { 38 | includedLanguages: "c,cpp,java,python,go,ruby,javascript,js,typescript,ts,shell,sh,bash", 39 | titleBackgroundColor: "#00000020", 40 | titleFontColor: "" 41 | }; 42 | var EmbedCodeFileSettingTab = class extends import_obsidian.PluginSettingTab { 43 | constructor(app2, plugin) { 44 | super(app2, plugin); 45 | this.plugin = plugin; 46 | } 47 | display() { 48 | const { containerEl } = this; 49 | containerEl.empty(); 50 | containerEl.createEl("h2", { text: "Embed Code File Settings" }); 51 | new import_obsidian.Setting(containerEl).setName("Included Languages").setDesc("Comma separated list of included languages.").addText((text) => text.setPlaceholder("Comma separated list").setValue(this.plugin.settings.includedLanguages).onChange(async (value) => { 52 | this.plugin.settings.includedLanguages = value; 53 | await this.plugin.saveSettings(); 54 | })); 55 | new import_obsidian.Setting(containerEl).setName("Font color of title").addText((text) => text.setPlaceholder("Enter a color").setValue(this.plugin.settings.titleFontColor).onChange(async (value) => { 56 | this.plugin.settings.titleFontColor = value; 57 | await this.plugin.saveSettings(); 58 | })); 59 | new import_obsidian.Setting(containerEl).setName("Background color of title").addText((text) => text.setPlaceholder("#00000020").setValue(this.plugin.settings.titleBackgroundColor).onChange(async (value) => { 60 | this.plugin.settings.titleBackgroundColor = value; 61 | await this.plugin.saveSettings(); 62 | })); 63 | } 64 | }; 65 | 66 | // utils.ts 67 | var import_path = __toESM(require("path")); 68 | function analyseSrcLines(str) { 69 | str = str.replace(/\s*/g, ""); 70 | const result = []; 71 | let strs = str.split(","); 72 | strs.forEach((it) => { 73 | if (/\w+-\w+/.test(it)) { 74 | let left = Number(it.split("-")[0]); 75 | let right = Number(it.split("-")[1]); 76 | for (let i = left; i <= right; i++) { 77 | result.push(i); 78 | } 79 | result.push(0); 80 | } else { 81 | result.push(Number(it)); 82 | result.push(0); 83 | } 84 | }); 85 | return result; 86 | } 87 | function extractSrcLines(fullSrc, srcLinesNum) { 88 | let src = ""; 89 | const fullSrcLines = fullSrc.split("\n"); 90 | const fullSrcLinesLen = fullSrcLines.length; 91 | srcLinesNum.forEach((lineNum, index, arr) => { 92 | if (lineNum > fullSrcLinesLen) { 93 | arr.splice(index, 1); 94 | } 95 | }); 96 | srcLinesNum.forEach((lineNum, index, arr) => { 97 | if (lineNum == 0 && arr[index - 1] == 0) { 98 | arr.splice(index, 1); 99 | } 100 | }); 101 | srcLinesNum.forEach((lineNum, index) => { 102 | if (lineNum > fullSrcLinesLen) { 103 | return; 104 | } 105 | if (index == srcLinesNum.length - 1 && lineNum == 0 && srcLinesNum[index - 1] == fullSrcLinesLen) { 106 | return; 107 | } 108 | if (index == 0 && lineNum != 1) { 109 | src = "...\n" + fullSrcLines[lineNum - 1]; 110 | return; 111 | } 112 | if (lineNum == 0) { 113 | src = src + "\n..."; 114 | return; 115 | } 116 | if (index == 0) { 117 | src = fullSrcLines[lineNum - 1]; 118 | } else { 119 | src = src + "\n" + fullSrcLines[lineNum - 1]; 120 | } 121 | }); 122 | return src; 123 | } 124 | 125 | // main.ts 126 | var EmbedCodeFile = class extends import_obsidian2.Plugin { 127 | async onload() { 128 | await this.loadSettings(); 129 | this.addSettingTab(new EmbedCodeFileSettingTab(this.app, this)); 130 | this.registerMarkdownPostProcessor((element, context) => { 131 | this.addTitle(element, context); 132 | }); 133 | const supportedLanguages = this.settings.includedLanguages.split(","); 134 | supportedLanguages.forEach((l) => { 135 | console.log(`registering renderer for ${l}`); 136 | this.registerRenderer(l); 137 | }); 138 | } 139 | async loadSettings() { 140 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); 141 | } 142 | async saveSettings() { 143 | await this.saveData(this.settings); 144 | } 145 | async registerRenderer(lang) { 146 | this.registerMarkdownCodeBlockProcessor(`embed-${lang}`, async (meta, el, ctx) => { 147 | let fullSrc = ""; 148 | let src = ""; 149 | let metaYaml; 150 | try { 151 | metaYaml = (0, import_obsidian2.parseYaml)(meta); 152 | } catch (e) { 153 | await import_obsidian2.MarkdownRenderer.renderMarkdown("`ERROR: invalid embedding (invalid YAML)`", el, "", this); 154 | return; 155 | } 156 | let srcPath = metaYaml.PATH; 157 | if (!srcPath) { 158 | await import_obsidian2.MarkdownRenderer.renderMarkdown("`ERROR: invalid source path`", el, "", this); 159 | return; 160 | } 161 | if (srcPath.startsWith("https://") || srcPath.startsWith("http://")) { 162 | try { 163 | let httpResp = await (0, import_obsidian2.requestUrl)({ url: srcPath, method: "GET" }); 164 | fullSrc = httpResp.text; 165 | } catch (e) { 166 | const errMsg = `\`ERROR: could't fetch '${srcPath}'\``; 167 | await import_obsidian2.MarkdownRenderer.renderMarkdown(errMsg, el, "", this); 168 | return; 169 | } 170 | } else if (srcPath.startsWith("vault://")) { 171 | srcPath = srcPath.replace(/^(vault:\/\/)/, ""); 172 | const tFile = app.vault.getAbstractFileByPath(srcPath); 173 | if (tFile instanceof import_obsidian2.TFile) { 174 | fullSrc = await app.vault.read(tFile); 175 | } else { 176 | const errMsg = `\`ERROR: could't read file '${srcPath}'\``; 177 | await import_obsidian2.MarkdownRenderer.renderMarkdown(errMsg, el, "", this); 178 | return; 179 | } 180 | } else { 181 | const errMsg = "`ERROR: invalid source path, use 'vault://...' or 'http[s]://...'`"; 182 | await import_obsidian2.MarkdownRenderer.renderMarkdown(errMsg, el, "", this); 183 | return; 184 | } 185 | let srcLinesNum = []; 186 | const srcLinesNumString = metaYaml.LINES; 187 | if (srcLinesNumString) { 188 | srcLinesNum = analyseSrcLines(srcLinesNumString); 189 | } 190 | if (srcLinesNum.length == 0) { 191 | src = fullSrc; 192 | } else { 193 | src = extractSrcLines(fullSrc, srcLinesNum); 194 | } 195 | let title = metaYaml.TITLE; 196 | if (!title) { 197 | title = srcPath; 198 | } 199 | await import_obsidian2.MarkdownRenderer.renderMarkdown("```" + lang + "\n" + src + "\n```", el, "", this); 200 | this.addTitleLivePreview(el, title); 201 | }); 202 | } 203 | addTitleLivePreview(el, title) { 204 | const codeElm = el.querySelector("pre > code"); 205 | if (!codeElm) { 206 | return; 207 | } 208 | const pre = codeElm.parentElement; 209 | this.insertTitlePreElement(pre, title); 210 | } 211 | addTitle(el, context) { 212 | let codeElm = el.querySelector("pre > code"); 213 | if (!codeElm) { 214 | return; 215 | } 216 | const pre = codeElm.parentElement; 217 | const codeSection = context.getSectionInfo(pre); 218 | if (!codeSection) { 219 | return; 220 | } 221 | const view = app.workspace.getActiveViewOfType(import_obsidian2.MarkdownView); 222 | if (!view) { 223 | return; 224 | } 225 | const num = codeSection.lineStart; 226 | const codeBlockFirstLine = view.editor.getLine(num); 227 | let matchTitle = codeBlockFirstLine.match(/TITLE:\s*"([^"]*)"/i); 228 | if (matchTitle == null) { 229 | return; 230 | } 231 | const title = matchTitle[1]; 232 | if (title == "") { 233 | return; 234 | } 235 | this.insertTitlePreElement(pre, title); 236 | } 237 | insertTitlePreElement(pre, title) { 238 | pre.querySelectorAll(".obsidian-embed-code-file").forEach((x) => x.remove()); 239 | let titleElement = document.createElement("pre"); 240 | titleElement.appendText(title); 241 | titleElement.className = "obsidian-embed-code-file"; 242 | titleElement.style.color = this.settings.titleFontColor; 243 | titleElement.style.backgroundColor = this.settings.titleBackgroundColor; 244 | pre.prepend(titleElement); 245 | } 246 | }; 247 | 248 | /* nosourcemap */ -------------------------------------------------------------------------------- /01_data/2025/06/21/sample.drawio: -------------------------------------------------------------------------------- 1 | <mxfile host="65bd71144e"> 2 | <diagram id="2HlhxyFN50_vKFgvICUU" name="ページ1"> 3 | <mxGraphModel dx="913" dy="519" grid="1" gridSize="6" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="#ffffff" math="0" shadow="0"> 4 | <root> 5 | <mxCell id="0"/> 6 | <mxCell id="1" parent="0"/> 7 | <mxCell id="55" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#CCCCCC;" parent="1" vertex="1"> 8 | <mxGeometry x="72" y="552" width="624" height="72" as="geometry"/> 9 | </mxCell> 10 | <mxCell id="53" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#CCCCCC;" parent="1" vertex="1"> 11 | <mxGeometry x="72" y="168" width="624" height="336" as="geometry"/> 12 | </mxCell> 13 | <mxCell id="3" value="A" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"> 14 | <mxGeometry x="144" y="288" width="48" height="48" as="geometry"/> 15 | </mxCell> 16 | <mxCell id="5" value="C" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"> 17 | <mxGeometry x="360" y="288" width="48" height="48" as="geometry"/> 18 | </mxCell> 19 | <mxCell id="7" value="D" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"> 20 | <mxGeometry x="576" y="288" width="48" height="48" as="geometry"/> 21 | </mxCell> 22 | <mxCell id="12" value="" style="endArrow=classic;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="5" target="3" edge="1"> 23 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 24 | <mxPoint x="330" y="354" as="sourcePoint"/> 25 | <mxPoint x="342" y="378" as="targetPoint"/> 26 | </mxGeometry> 27 | </mxCell> 28 | <mxCell id="16" value="B" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"> 29 | <mxGeometry x="144" y="408" width="48" height="48" as="geometry"/> 30 | </mxCell> 31 | <mxCell id="17" value="" style="endArrow=classic;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="7" target="5" edge="1"> 32 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 33 | <mxPoint x="444" y="419.65999999999997" as="sourcePoint"/> 34 | <mxPoint x="396" y="419.65999999999997" as="targetPoint"/> 35 | </mxGeometry> 36 | </mxCell> 37 | <mxCell id="18" value="" style="endArrow=classic;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=1;exitDx=0;exitDy=0;" parent="1" source="7" target="16" edge="1"> 38 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 39 | <mxPoint x="447" y="365" as="sourcePoint"/> 40 | <mxPoint x="396" y="413" as="targetPoint"/> 41 | </mxGeometry> 42 | </mxCell> 43 | <mxCell id="19" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=1;strokeColor=default;" parent="1" edge="1"> 44 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 45 | <mxPoint x="480" y="504" as="sourcePoint"/> 46 | <mxPoint x="480" y="192" as="targetPoint"/> 47 | </mxGeometry> 48 | </mxCell> 49 | <mxCell id="20" value="時系列" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;" parent="1" vertex="1"> 50 | <mxGeometry x="336" y="186" width="96" height="30" as="geometry"/> 51 | </mxCell> 52 | <mxCell id="21" value="" style="endArrow=classic;html=1;" parent="1" edge="1"> 53 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 54 | <mxPoint x="96" y="216" as="sourcePoint"/> 55 | <mxPoint x="672" y="216" as="targetPoint"/> 56 | </mxGeometry> 57 | </mxCell> 58 | <mxCell id="22" value="編集禁止" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;" parent="1" vertex="1"> 59 | <mxGeometry x="216" y="216" width="72" height="24" as="geometry"/> 60 | </mxCell> 61 | <mxCell id="23" value="編集許可" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;" parent="1" vertex="1"> 62 | <mxGeometry x="528" y="216" width="96" height="24" as="geometry"/> 63 | </mxCell> 64 | <mxCell id="41" value="E" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"> 65 | <mxGeometry x="576" y="408" width="48" height="48" as="geometry"/> 66 | </mxCell> 67 | <mxCell id="42" value="" style="endArrow=classic;html=1;entryX=1;entryY=1;entryDx=0;entryDy=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" source="41" target="5" edge="1"> 68 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 69 | <mxPoint x="450" y="354" as="sourcePoint"/> 70 | <mxPoint x="402" y="354" as="targetPoint"/> 71 | </mxGeometry> 72 | </mxCell> 73 | <mxCell id="44" value="# タグ1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1"> 74 | <mxGeometry x="240" y="576" width="48" height="24" as="geometry"/> 75 | </mxCell> 76 | <mxCell id="45" value="# タグ2" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;" parent="1" vertex="1"> 77 | <mxGeometry x="528" y="576" width="54" height="24" as="geometry"/> 78 | </mxCell> 79 | <mxCell id="46" value="" style="endArrow=block;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;shadow=0;endFill=0;jumpSize=6;strokeColor=#999999;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="3" target="44" edge="1"> 80 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 81 | <mxPoint x="378" y="486" as="sourcePoint"/> 82 | <mxPoint x="240" y="534" as="targetPoint"/> 83 | </mxGeometry> 84 | </mxCell> 85 | <mxCell id="47" value="" style="endArrow=block;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;shadow=0;endFill=0;jumpSize=6;strokeColor=#999999;exitX=0;exitY=1;exitDx=0;exitDy=0;" parent="1" source="5" target="44" edge="1"> 86 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 87 | <mxPoint x="324" y="528" as="sourcePoint"/> 88 | <mxPoint x="312" y="468" as="targetPoint"/> 89 | </mxGeometry> 90 | </mxCell> 91 | <mxCell id="48" value="" style="endArrow=block;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;shadow=0;endFill=0;jumpSize=6;strokeColor=#999999;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" source="7" target="44" edge="1"> 92 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 93 | <mxPoint x="360" y="562" as="sourcePoint"/> 94 | <mxPoint x="456" y="522" as="targetPoint"/> 95 | </mxGeometry> 96 | </mxCell> 97 | <mxCell id="49" value="" style="endArrow=block;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;shadow=0;endFill=0;jumpSize=6;strokeColor=#999999;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" source="41" target="45" edge="1"> 98 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 99 | <mxPoint x="318" y="627" as="sourcePoint"/> 100 | <mxPoint x="600" y="528" as="targetPoint"/> 101 | </mxGeometry> 102 | </mxCell> 103 | <mxCell id="50" value="" style="endArrow=block;html=1;exitX=1;exitY=1;exitDx=0;exitDy=0;shadow=0;endFill=0;jumpSize=6;strokeColor=#999999;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="16" target="45" edge="1"> 104 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 105 | <mxPoint x="455" y="546" as="sourcePoint"/> 106 | <mxPoint x="378" y="528" as="targetPoint"/> 107 | </mxGeometry> 108 | </mxCell> 109 | <mxCell id="54" value="ノートとリンク" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;" parent="1" vertex="1"> 110 | <mxGeometry x="72" y="144" width="144" height="24" as="geometry"/> 111 | </mxCell> 112 | <mxCell id="56" value="タグ" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;" parent="1" vertex="1"> 113 | <mxGeometry x="72" y="528" width="72" height="24" as="geometry"/> 114 | </mxCell> 115 | <mxCell id="57" value="(長くとも睡眠前まで)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1"> 116 | <mxGeometry x="504" y="240" width="144" height="18" as="geometry"/> 117 | </mxCell> 118 | <mxCell id="58" value="(永遠に)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1"> 119 | <mxGeometry x="168" y="240" width="168" height="18" as="geometry"/> 120 | </mxCell> 121 | </root> 122 | </mxGraphModel> 123 | </diagram> 124 | </mxfile> 125 | -------------------------------------------------------------------------------- /.obsidian/plugins/slash-commander/styles.css: -------------------------------------------------------------------------------- 1 | .suggestion-flair{--icon-size: var(--icon-s)}.mobile-option-setting-item-option-icon{--icon-size: var(--icon-l)}.cmdr{transition:transform .4s 0s}.cmdr.status-bar-item{margin:0}.cmdr-removing{transform:translate(100%);z-index:0}.cmdr-ribbon-removing{transform:scale(0%)}.cmdr-setting-title{display:flex;align-items:baseline;justify-content:space-between}.cmdr-setting-title h1{font-weight:900;margin-top:6px;margin-bottom:12px}.cmdr-base-component{padding:0 20px;margin-bottom:-18px}.cmdr-menu-more-options{color:var(--text-muted);position:absolute;right:6px;padding-top:2px;transform:scale(.9);transition:all .15s ease}.cmdr-menu-more-options:hover{color:var(--text-primary)}.cmdr-mobile .cmdr-credits{place-content:center}.cmdr-fill{border:2px solid transparent;width:100%}.cmdr-icon{height:28px;align-self:center;color:var(--icon-color);opacity:var(--icon-opacity)}.cmdr-setting-modal>.modal{height:60vh;width:80vw}.cmdr-editable{display:inline-block}.cmdr-editable input{padding:0;border:none;height:unset;background-color:transparent!important;border-bottom:1px solid var(--interactive-accent);border-radius:0}.cmdr-editable:hover{background-color:var(--background-modifier-hover)}.cmdr-setting-content{height:calc(100% - 10rem)}.cmdr-setting-content .setting-item:first{border-top:none}.cmdr-commands-empty{display:flex;place-items:center;flex-flow:column;margin:2.5rem 0 1.25rem;place-content:center}.cmdr-commands-empty svg{width:100%}.cmdr-commands-empty h3{margin:8px 0;font-weight:900}.cmdr-sep-con:not(:empty){background-color:var(--background-primary);border:1px solid var(--background-modifier-border);padding:12px;border-radius:12px}.cmdr-sep-con:not(:empty) .setting-item:first-of-type{padding-top:0}.cmdr-sep-con:not(:empty) .setting-item:last-of-type{padding-bottom:0}.cmdr-sep-con:not(:empty) .cmdr-callout-warning{padding:var(--callout-title-padding);display:flex;gap:var(--size-4-1);font-size:var(--callout-title-size);color:rgb(var(--callout-color));line-height:var(--line-height-tight);font-weight:700}.cmdr-sep-con:not(:empty) p.cmdr-warning-description{margin:8px 0}.cmdr-setting-collapser .cmdr-setting-collapser-content{transition:all .3s ease-in-out;overflow:hidden}.cmdr-setting-collapser .cmdr-setting-collapser-content .setting-item{padding-top:12px}.cmdr-setting-collapser .cmdr-setting-collapser-header-container{display:flex;justify-content:space-between;align-items:center;width:100%;margin-bottom:8px}.cmdr-setting-collapser .cmdr-setting-collapser-header{display:flex;cursor:pointer;margin:0;flex:1}.cmdr-setting-collapser .cmdr-setting-collapser-header span{font-weight:600;margin-top:0;align-self:end}.cmdr-setting-collapser .cmdr-setting-collapser-tools{display:flex;align-items:center;margin-left:12px}.cmdr-setting-collapser[aria-expanded=false] .cmdr-setting-collapser-content{max-height:0!important;transition:max-height .3s cubic-bezier(0,1,0,1)}.cmdr-viewer-tools-bottom{width:100%;margin-top:12px;margin-bottom:2rem;display:flex;justify-content:center;align-items:center}.cmdr-viewer-tools-bottom button{margin:0 24px}.cmdr-viewer-tools-bar{display:flex;align-items:center}.cmdr-adder{opacity:0;transition:opacity .12s ease}.cmdr-adder:hover{opacity:1}.cmdr-adder.view-action{order:-1001}.cmdr-page-header{order:-1000}.cmdr-macro-builder .modal{height:80vh;width:95vw;padding:0}.cmdr-macro-builder .modal-close-button{z-index:99}.cmdr-macro-builder .modal-content{margin-top:0}.cmdr-macro-builder .cmdr-macro-icon{display:flex;justify-content:center}.cmdr-macro-builder .cmdr-macro-control{position:absolute;z-index:5;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;width:3em;top:0}.cmdr-macro-builder .cmdr-macro-control .cmdr-macro-button{background-color:var(--background-secondary-alt);aspect-ratio:1;display:flex;justify-content:center;align-items:center;border-radius:2px;outline:1px solid var(--background-modifier-border);padding:2px}.cmdr-setting-header{margin-bottom:24px;overflow-y:hidden;overflow-x:auto}.cmdr-setting-header .cmdr-setting-tab-group{display:flex;align-items:flex-end;border-bottom:2px solid var(--background-modifier-border)}.cmdr-setting-header.cmdr-mobile .cmdr-setting-tab-group{display:flex;flex-direction:column;align-items:flex-start;border:none}.cmdr-setting-header.cmdr-mobile .cmdr-setting-tab-group .cmdr-tab{border-left:none!important;border-right:none!important;border-top:none!important;transform:none;transition:color .2s ease;width:100%;display:flex;font-weight:500;justify-content:space-between}.cmdr-setting-header.cmdr-mobile .cmdr-setting-tab-group .cmdr-tab:first-child{margin-left:0}.cmdr-setting-header.cmdr-mobile .cmdr-setting-tab-group .cmdr-tab.cmdr-tab-active{transform:none}.cmdr-setting-header .cmdr-tab{padding:6px 8px;font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap;border-left:2px solid transparent;border-right:2px solid transparent}.cmdr-setting-header .cmdr-tab:first-child{margin-left:6px}.cmdr-setting-header .cmdr-tab.cmdr-tab-active{border-bottom:2px solid var(--background-primary);transform:translateY(2px);border-radius:2px;border-left:2px solid var(--background-modifier-border);border-top:2px solid var(--background-modifier-border);border-right:2px solid var(--background-modifier-border)}.is-tablet .cmdr-tab{border:none!important;margin-bottom:2px;padding:10px;font-size:1.08em;display:flex;align-items:center}.is-tablet .cmdr-tab .cmdr-block{display:flex;align-items:center}.cmdr-mobile-modify-grid{padding:22px}.cmdr-mobile-modify-grid .cmdr-mobile-modify-option{display:flex;width:100%;justify-content:space-between;align-items:center;margin-bottom:16px}.cmdr-mobile-modify-grid .cmdr-mobile-modify-option>input{max-width:70%}.cmdr-mobile-modify-grid .cmdr-mobile-modify-option .dropdown{margin:auto}.cmdr-credits{display:flex}.cmdr-credits>span{color:var(--text-muted);font-size:14px}.cmdr-about{display:flex;flex-direction:column;align-items:center;padding-bottom:64px}.cmdr-about hr{width:100%;margin-top:0}.cmdr-about button{display:flex;align-items:center;height:2.6em;font-weight:700;gap:16px;border-radius:6px;margin-bottom:8px}.cmdr-about button:last-of-type{margin-bottom:32px}.cmdr-about .setting-item button{margin:0}.cmdr-about .cmdr-icon-wrapper{display:flex}.cmdr-about .cmdr-icon-wrapper>svg{width:90px;height:90px}.cmdr-about .cmdr-version{text-decoration:none;font-size:12px;color:var(--text-muted)}.cmdr-name-input-wrapper{display:flex;gap:8px;align-items:center}.cmdr-name-input-wrapper button{margin:8px}.cmdr-icon.mod-warning{cursor:default;padding:4px 6px}.cmdr-hider-title{display:flex;flex-direction:column;align-items:center}.cmdr-hider-title h3{margin-top:0;margin-bottom:8px;font-weight:900}.cmdr-hider-title p{margin-top:0;margin-bottom:26px;width:50%;text-align:center}.setting-item-control .cmdr-editable{width:2em;text-align:center}.setting-item-control .cmdr-editable input,.setting-item-control .cmdr-editable span{width:2em;color:var(--text-normal)}.view-action:not(:last-child){margin-right:var(--cmdr-spacing)}.titlebar-button:not(:last-child),.status-bar-item:not(:last-child){margin-right:calc(var(--cmdr-spacing) - 8px)}.side-dock-ribbon-action:not(:last-child){margin-bottom:calc(var(--cmdr-spacing) - 8px)}.cmdr-cta{position:relative}.cmdr-cta:after{content:"";position:absolute;top:-10%;width:104%;left:-2%;height:120%;outline:2px solid var(--color-accent);border-radius:1em;pointer-events:none}.cmdr-suggest-item{display:flex;align-items:center;justify-content:center;gap:.8em;max-width:25em;margin:0 auto}.cmdr-suggest-item .cmdr-suggest-item-icon{align-self:center;color:var(--icon-color);opacity:var(--icon-opacity)}.cmdr-suggest-item .cmdr-suggest-content{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.cmdr-suggest-item .cmdr-suggest-content .cmdr-suggest-item-description{font-size:smaller;color:#696969}.cmdr-suggest-item .cmdr-suggest-content .cmdr-suggest-item-source{font-style:italic;color:#696969}.cmdr-suggest-item .cmdr-suggest-group-name{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;color:var(--text-muted);font-weight:700;font-size:small}.cmdr-suggest-item-icon{display:flex;align-self:center;justify-content:center}.cmdr-standalone-menu{overflow:scroll}.cmdr-standalone-menu-item{margin-left:6px}.cmdr-standalone-menu-item:hover{background-color:var(--background-modifier-hover)}.cmdr-triggers{display:flex;font-size:var(--font-ui-small);padding:.5em var(--size-2-3);align-items:center}.cmdr-triggers .cmdr-trigger-pill{display:flex;margin-left:.75em}.cmdr-triggers .cmdr-trigger-pill .cmdr-icon{align-self:center;padding:0}.cmdr-triggers .cmdr-trigger-pill input{border:1px solid var(--background-modifier-border-hover);border-radius:var(--radius-s);max-width:6em;padding-left:6px;padding-right:6px}.cmdr-triggers .cmdr-trigger-add{margin-left:1em;vertical-align:bottom}.cmdr-command-viewer{display:flex;flex-direction:column;gap:12px;font-family:var(--font-interface);font-size:var(--font-ui-small);color:var(--text-normal)}.cmdr-command-wrapper{width:100%}.cmdr-command-wrapper.is-group{font-weight:var(--font-bold)}.cmdr-command-wrapper .cmdr-setting-item{display:flex;align-items:center;padding:6px 2px;width:100%}.cmdr-command-wrapper .cmdr-setting-item>*:first-child{margin-inline-end:var(--size-2-3)}.cmdr-command-wrapper .cmdr-icon{display:flex;align-items:center;justify-content:center}.cmdr-command-wrapper .cmdr-item-info{overflow:hidden;margin:0 8px;max-width:350px;text-align:left}.cmdr-command-wrapper .cmdr-item-info .cmdr-item-name{font-weight:var(--font-normal);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cmdr-command-wrapper .cmdr-item-info .cmdr-item-description{color:var(--text-muted);font-size:var(--font-smaller);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cmdr-command-wrapper .cmdr-item-control{flex:1 1 auto;text-align:end;display:flex;justify-content:flex-end;align-items:center;gap:var(--size-2-2)}.cmdr-command-wrapper .cmdr-group-collapser-button{margin-right:4px;color:var(--text-muted)}.cmdr-command-wrapper .cmdr-group-collapser-button:hover{color:var(--text-normal)}.cmdr-group-collapser{width:100%}.cmdr-group-collapser-content{margin-left:18px;margin-top:6px;margin-bottom:6px;padding-left:24px;display:flex;flex-direction:column;gap:6px;position:relative}.cmdr-group-collapser-content:before{content:"";position:absolute;top:0;bottom:0;left:0;width:2px;background-color:var(--background-modifier-border);border-radius:1px}.cmdr-group-collapser-content:hover:before{background-color:var(--interactive-accent);opacity:.5}.cmdr-group-collapser-content .cmdr-command-item{position:relative}.cmdr-group-collapser-content .cmdr-command-item:hover:before{background-color:var(--interactive-accent);opacity:.5}.sortable-fallback{opacity:.8;background-color:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);box-shadow:var(--shadow-s);pointer-events:none;z-index:1000}.cmdr-sortable-drag{opacity:.8;z-index:999}.cmdr-sortable-ghost{opacity:.3;background-color:var(--background-modifier-hover);border:1px dashed var(--interactive-accent);border-radius:var(--radius-s)}.mobile-option-setting-item{display:flex;align-items:center;padding:8px 0}.mobile-option-setting-item .mobile-option-setting-item-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cmdr-binding-editor-modal{max-width:100%;padding:0 20px}.cmdr-binding-editor-modal .cmdr-setting-item{display:flex;flex-direction:column;padding:12px 0;border-top:1px solid var(--background-modifier-border)}.cmdr-binding-editor-modal .cmdr-setting-item:first-child{border-top:none}.cmdr-binding-editor-modal .cmdr-setting-item-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.cmdr-binding-editor-modal .cmdr-setting-item-name{font-weight:600}.cmdr-binding-editor-modal .cmdr-icon-preview{align-self:center;justify-content:center;color:var(--icon-color);opacity:var(--icon-opacity);margin-left:8px}.cmdr-binding-editor-modal .cmdr-input{width:100%;padding:2px 8px;border-radius:4px;border:1px solid var(--background-modifier-border);background-color:var(--background-primary)}.cmdr-binding-editor-modal .cmdr-suggest-wrapper{position:relative;width:100%}.cmdr-binding-editor-modal .cmdr-suggest-container{position:absolute;width:100%;max-height:200px;overflow-y:auto;border:1px solid var(--background-modifier-border);border-radius:4px;background-color:var(--background-primary);z-index:100;margin-top:4px}.cmdr-binding-editor-modal .cmdr-suggest-item{cursor:pointer;display:flex;align-items:center;padding:8px}.cmdr-binding-editor-modal .cmdr-suggest-item:hover{background-color:var(--background-modifier-hover)}.cmdr-binding-editor-modal .cmdr-suggest-item-title{flex:1;font-weight:500}.cmdr-binding-editor-modal .cmdr-suggest-item-icon{margin-right:8px;display:flex;align-items:center;justify-content:center}.cmdr-binding-editor-modal .cmdr-empty-state{padding:8px;text-align:center;color:var(--text-muted)}.cmdr-binding-editor-modal .dropdown{width:100%;padding:2px 8px;border-radius:4px;border:1px solid var(--background-modifier-border);background-color:var(--background-primary)}.cmdr-binding-editor-modal .cmdr-modal-button-container{display:flex;justify-content:flex-end;margin-top:16px;gap:8px}.cmdr-binding-editor-modal .cmdr-setting-error{color:var(--text-error);font-size:12px;margin-top:4px;min-height:16px}.cmdr-binding-editor-modal .cmdr-setting-error:not(.active){display:none}.cmdr-setting-title-with-tip{display:flex;align-items:center;gap:8px}.cmdr-setting-item-tip{font-size:.8em;color:var(--text-muted);font-style:italic}.cmdr-sortable-item{display:flex;align-items:center;padding-left:calc(var(--depth, 0) * var(--indentation-width, 20px));position:relative}.cmdr-sortable-item.cmdr-clone{cursor:grabbing;background-color:var(--background-secondary);z-index:999}.cmdr-sortable-item.cmdr-clone *{cursor:grabbing}.cmdr-sortable-item .cmdr-drag-handle-icon{cursor:grab;padding:var(--size-2-2) var(--size-2-3);height:auto;display:flex}.cmdr-sortable-item .cmdr-children-count{position:absolute;right:8px;top:50%;transform:translateY(-50%);background-color:var(--interactive-accent);color:var(--text-on-accent);border-radius:4px;padding:2px 6px;font-size:12px}.cmdr-group-collapser[aria-expanded=false] .cmdr-group-collapser-content{display:none}.cmdr-group-collapser-content{margin-left:20px;border-left:1px dashed var(--background-modifier-border);padding-left:10px} 2 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-style-settings/styles.css: -------------------------------------------------------------------------------- 1 | .style-settings-heading { 2 | cursor: pointer; 3 | margin-bottom: 18px; 4 | padding-bottom: 6px; 5 | border-bottom: 1px solid var(--background-modifier-border); 6 | } 7 | 8 | .style-settings-heading[data-level="0"] { 9 | margin-bottom: 26px; 10 | } 11 | 12 | .style-settings-container { 13 | padding-bottom: 16px; 14 | } 15 | 16 | .style-settings-heading[data-level="0"] + .style-settings-container { 17 | padding-left: 34px; 18 | } 19 | 20 | .style-settings-heading.is-collapsed { 21 | margin-bottom: 0; 22 | } 23 | 24 | .style-settings-heading.is-collapsed + .style-settings-container { 25 | display: none; 26 | } 27 | 28 | .style-settings-collapse-indicator { 29 | color: var(--text-faint); 30 | display: inline-block; 31 | margin-right: 8px; 32 | position: relative; 33 | top: -1px; 34 | } 35 | 36 | .style-settings-heading[data-level="0"] 37 | + .style-settings-container 38 | .style-settings-collapse-indicator { 39 | margin-left: -17px; 40 | } 41 | 42 | .style-settings-collapse-indicator > svg { 43 | height: 9px; 44 | width: 9px; 45 | } 46 | 47 | .style-settings-heading.is-collapsed .style-settings-collapse-indicator > svg { 48 | transform: rotate(-90deg); 49 | } 50 | 51 | .style-settings-filter-result-count { 52 | color: var(--text-faint); 53 | line-height: var(--line-height-tight); 54 | margin-inline: var(--size-4-2); 55 | } 56 | 57 | .style-settings-error { 58 | font-size: 14px; 59 | border-radius: 6px; 60 | background: rgba(var(--background-modifier-error-rgb), 0.2); 61 | color: var(--text-error); 62 | padding: 10px; 63 | margin-bottom: 1rem; 64 | } 65 | 66 | .style-settings-error-name { 67 | font-weight: bold; 68 | margin-bottom: 5px; 69 | } 70 | 71 | .style-settings-error-desc { 72 | white-space: pre; 73 | } 74 | 75 | .style-settings-empty { 76 | font-size: 14px; 77 | background: var(--background-secondary); 78 | padding: 10px; 79 | } 80 | 81 | .style-settings-empty-name { 82 | font-weight: bold; 83 | margin-bottom: 5px; 84 | } 85 | 86 | .style-settings-import-input { 87 | width: 0.1px; 88 | height: 0.1px; 89 | opacity: 0; 90 | overflow: hidden; 91 | position: absolute; 92 | z-index: -1; 93 | } 94 | 95 | .style-settings-import-label { 96 | cursor: pointer; 97 | color: var(--text-accent); 98 | text-decoration: underline; 99 | } 100 | 101 | .style-settings-import-label:hover { 102 | color: var(--text-accent-hover); 103 | } 104 | 105 | .style-settings-export, 106 | .style-settings-import { 107 | display: inline-block; 108 | margin-right: 10px; 109 | } 110 | 111 | .style-settings-copy, 112 | .style-settings-download { 113 | position: relative; 114 | display: inline-block; 115 | margin-left: 10px; 116 | } 117 | 118 | .style-settings-copy:before { 119 | color: var(--interactive-success); 120 | content: "✓"; 121 | position: absolute; 122 | left: -18px; 123 | font-weight: bold; 124 | opacity: 0; 125 | transition: 150ms opacity ease-in-out; 126 | } 127 | 128 | .style-settings-copy.success:before { 129 | opacity: 1; 130 | } 131 | 132 | .modal-style-settings { 133 | height: 70vh; 134 | display: flex; 135 | flex-direction: column; 136 | } 137 | 138 | .modal-style-settings .modal-content { 139 | flex-grow: 1; 140 | margin: 0; 141 | display: flex; 142 | flex-direction: column; 143 | } 144 | 145 | .modal-style-settings textarea { 146 | display: block; 147 | width: 100%; 148 | height: 100%; 149 | font-family: var(--font-monospace) !important; 150 | font-size: 12px; 151 | white-space: pre; 152 | overflow-wrap: normal; 153 | overflow-x: scroll; 154 | margin-bottom: 5px; 155 | } 156 | 157 | .modal-style-settings .setting-item { 158 | align-items: flex-start; 159 | } 160 | 161 | .modal-style-settings button { 162 | margin: 10px 0 0; 163 | } 164 | 165 | .style-settings-import-error { 166 | display: none; 167 | color: var(--text-error); 168 | } 169 | 170 | .style-settings-import-error.active { 171 | display: block; 172 | } 173 | 174 | .view-content .style-settings-container .setting-item:not(.setting-item-heading) { 175 | flex-direction: column; 176 | align-items: flex-start; 177 | } 178 | 179 | .view-content .style-settings-container .setting-item:not(.setting-item-heading) .setting-item-control { 180 | padding-top: 0.5em; 181 | } 182 | 183 | .view-content .style-settings-container .setting-item:not(.setting-item-heading) .themed-color-wrapper { 184 | display: flex; 185 | } 186 | 187 | .style-settings-ref { 188 | position: absolute; 189 | width: 0 !important; 190 | height: 0 !important; 191 | pointer-events: none; 192 | } 193 | 194 | .style-settings-info-text .style-settings-markdown :first-child { 195 | margin-top: 0; 196 | } 197 | 198 | .style-settings-info-text .style-settings-markdown :last-child { 199 | margin-bottom: 0; 200 | }.style-settings-container .pcr-app { 201 | display: none; 202 | } 203 | 204 | .style-settings-container .pcr-app.visible { 205 | display: flex; 206 | } 207 | 208 | .pcr-app .pcr-swatches > button { 209 | padding: 0; 210 | } 211 | 212 | .pickr .pcr-button { 213 | margin-right: 0; 214 | } 215 | 216 | .themed-color-wrapper > div { 217 | background: var(--background-primary); 218 | padding: 10px; 219 | display: flex; 220 | align-items: center; 221 | border-radius: 4px; 222 | } 223 | 224 | .themed-color-wrapper > div + div { 225 | margin-top: 6px; 226 | } 227 | 228 | .themed-color-wrapper button { 229 | display: block; 230 | } 231 | 232 | .themed-color-wrapper .pickr-reset > button { 233 | margin: 0 0 0 10px; 234 | padding: 9px; 235 | line-height: 1; 236 | } 237 | 238 | .themed-color-wrapper .pickr-reset > button > svg { 239 | display: block; 240 | } 241 | /*! Pickr 1.8.4 MIT | https://github.com/Simonwep/pickr */ 242 | .pickr{position:relative;overflow:visible;transform:translateY(0)}.pickr *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr .pcr-button{position:relative;height:2em;width:2em;padding:0.5em;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;border-radius:.15em;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" stroke="%2342445A" stroke-width="5px" stroke-linecap="round"><path d="M45,45L5,5"></path><path d="M45,5L5,45"></path></svg>') no-repeat center;background-size:0;transition:all 0.3s}.pickr .pcr-button::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:.5em;border-radius:.15em;z-index:-1}.pickr .pcr-button::before{z-index:initial}.pickr .pcr-button::after{position:absolute;content:'';top:0;left:0;height:100%;width:100%;transition:background 0.3s;background:var(--pcr-color);border-radius:.15em}.pickr .pcr-button.clear{background-size:70%}.pickr .pcr-button.clear::before{opacity:0}.pickr .pcr-button.clear:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-button.disabled{cursor:not-allowed}.pickr *,.pcr-app *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr input:focus,.pickr input.pcr-active,.pickr button:focus,.pickr button.pcr-active,.pcr-app input:focus,.pcr-app input.pcr-active,.pcr-app button:focus,.pcr-app button.pcr-active{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-palette,.pickr .pcr-slider,.pcr-app .pcr-palette,.pcr-app .pcr-slider{transition:box-shadow 0.3s}.pickr .pcr-palette:focus,.pickr .pcr-slider:focus,.pcr-app .pcr-palette:focus,.pcr-app .pcr-slider:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(0,0,0,0.25)}.pcr-app{position:fixed;display:flex;flex-direction:column;z-index:10000;border-radius:0.1em;background:#fff;opacity:0;visibility:hidden;transition:opacity 0.3s, visibility 0s 0.3s;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;box-shadow:0 0.15em 1.5em 0 rgba(0,0,0,0.1),0 0 1em 0 rgba(0,0,0,0.03);left:0;top:0}.pcr-app.visible{transition:opacity 0.3s;visibility:visible;opacity:1}.pcr-app .pcr-swatches{display:flex;flex-wrap:wrap;margin-top:0.75em}.pcr-app .pcr-swatches.pcr-last{margin:0}@supports (display: grid){.pcr-app .pcr-swatches{display:grid;align-items:center;grid-template-columns:repeat(auto-fit, 1.75em)}}.pcr-app .pcr-swatches>button{font-size:1em;position:relative;width:calc(1.75em - 5px);height:calc(1.75em - 5px);border-radius:0.15em;cursor:pointer;margin:2.5px;flex-shrink:0;justify-self:center;transition:all 0.15s;overflow:hidden;background:transparent;z-index:1}.pcr-app .pcr-swatches>button::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:6px;border-radius:.15em;z-index:-1}.pcr-app .pcr-swatches>button::after{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background:var(--pcr-color);border:1px solid rgba(0,0,0,0.05);border-radius:0.15em;box-sizing:border-box}.pcr-app .pcr-swatches>button:hover{filter:brightness(1.05)}.pcr-app .pcr-swatches>button:not(.pcr-active){box-shadow:none}.pcr-app .pcr-interaction{display:flex;flex-wrap:wrap;align-items:center;margin:0 -0.2em 0 -0.2em}.pcr-app .pcr-interaction>*{margin:0 0.2em}.pcr-app .pcr-interaction input{letter-spacing:0.07em;font-size:0.75em;text-align:center;cursor:pointer;color:#75797e;background:#f1f3f4;border-radius:.15em;transition:all 0.15s;padding:0.45em 0.5em;margin-top:0.75em}.pcr-app .pcr-interaction input:hover{filter:brightness(0.975)}.pcr-app .pcr-interaction input:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(66,133,244,0.75)}.pcr-app .pcr-interaction .pcr-result{color:#75797e;text-align:left;flex:1 1 8em;min-width:8em;transition:all 0.2s;border-radius:.15em;background:#f1f3f4;cursor:text}.pcr-app .pcr-interaction .pcr-result::-moz-selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-result::selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-type.active{color:#fff;background:#4285f4}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff;width:auto}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff}.pcr-app .pcr-interaction .pcr-save:hover,.pcr-app .pcr-interaction .pcr-cancel:hover,.pcr-app .pcr-interaction .pcr-clear:hover{filter:brightness(0.925)}.pcr-app .pcr-interaction .pcr-save{background:#4285f4}.pcr-app .pcr-interaction .pcr-clear,.pcr-app .pcr-interaction .pcr-cancel{background:#f44250}.pcr-app .pcr-interaction .pcr-clear:focus,.pcr-app .pcr-interaction .pcr-cancel:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(244,66,80,0.75)}.pcr-app .pcr-selection .pcr-picker{position:absolute;height:18px;width:18px;border:2px solid #fff;border-radius:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pcr-app .pcr-selection .pcr-color-palette,.pcr-app .pcr-selection .pcr-color-chooser,.pcr-app .pcr-selection .pcr-color-opacity{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column;cursor:grab;cursor:-webkit-grab}.pcr-app .pcr-selection .pcr-color-palette:active,.pcr-app .pcr-selection .pcr-color-chooser:active,.pcr-app .pcr-selection .pcr-color-opacity:active{cursor:grabbing;cursor:-webkit-grabbing}.pcr-app[data-theme='nano']{width:14.25em;max-width:95vw}.pcr-app[data-theme='nano'] .pcr-swatches{margin-top:.6em;padding:0 .6em}.pcr-app[data-theme='nano'] .pcr-interaction{padding:0 .6em .6em .6em}.pcr-app[data-theme='nano'] .pcr-selection{display:grid;grid-gap:.6em;grid-template-columns:1fr 4fr;grid-template-rows:5fr auto auto;align-items:center;height:10.5em;width:100%;align-self:flex-start}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview{grid-area:2 / 1 / 4 / 1;height:100%;width:100%;display:flex;flex-direction:row;justify-content:center;margin-left:.6em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-last-color{display:none}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color{position:relative;background:var(--pcr-color);width:2em;height:2em;border-radius:50em;overflow:hidden}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette{grid-area:1 / 1 / 2 / 3;width:100%;height:100%;z-index:1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette{border-radius:.15em;width:100%;height:100%}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser{grid-area:2 / 2 / 2 / 2}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity{grid-area:3 / 2 / 3 / 2}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity{height:0.5em;margin:0 .6em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-picker,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-picker{top:50%;transform:translateY(-50%)}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider{flex-grow:1;border-radius:50em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider{background:linear-gradient(to right, red, #ff0, lime, cyan, blue, #f0f, red)}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider{background:linear-gradient(to right, transparent, black),url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2"><path fill="white" d="M1,0H2V1H1V0ZM0,1H1V2H0V1Z"/><path fill="gray" d="M0,0H1V1H0V0ZM1,1H2V2H1V1Z"/></svg>');background-size:100%, 0.25em} 243 | 244 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # obsidian-dagnetz-system 2 | 3 | > [!IMPORTANT] 4 | > このREADMEは、自分のリポジトリを作成したときに削除してください。 5 | 6 | ## 構想 7 | 8 | 思考の変遷を時系列で記録し、過去の自分を振り返ることで創造的思考を生み出すシステム 9 | 10 | ![dagnez-image](01_data/2025/06/21/sample.svg) 11 | 12 | **1. 編集制限ルール** 13 | - 編集制限の基準 14 | - 編集可能:最長ノート作成日の睡眠前まで 15 | - 編集禁止:一度睡眠を取った後は未来永劫凍結 16 | - 制限の理由 17 | - 睡眠により脳の記憶整理(刈り込み)が発生し忘却・記憶の捏造をしてしまう 18 | - 睡眠前の純粋な思考状態をノートに保存し、思考の変遷を完全記録 19 | 20 | **2. 分類禁止ルール** 21 | - 階層構造の排除 22 | - 分類による階層構造(木構造)の構築を一切禁止 23 | - 階層タグの使用禁止(フラットタグのみ許可) 24 | - ファイルの固定配置 25 | - 全ファイルを作成日ディレクトリ(YYYY/MM/DD)配下に配置 26 | - 内容による分類を行わず、時系列のみで物理的整理 27 | - 禁止の理由 28 | - 意味的な整合性が破綻した際、再構成作業を完全回避 29 | - 「分類の迷い」という認知負荷の排除 30 | 31 | **3. 時系列単調性DAG** 32 | - 自動形成の仕組み 33 | - 編集制限ルール:新しいノートから古いノートへの一方向リンクのみが可能 34 | - 分類禁止ルール:時系列での固定配置が知識の時間軸を保証 35 | - 形成される構造 36 | - 有向非循環グラフ(Directed Acyclic Graph)の自然な形成 37 | - 循環参照のない、過去から未来への一方向ネットワーク 38 | - 思考の変遷を時系列で追跡可能 39 | 40 | **4. 思い出す仕組み** 41 | - グラフビューによる思考ネットワークの俯瞰 42 | - キーワード・タグなどでインターネットのように検索 43 | - 期間・属性などによるデータベースのような一覧表示 44 | - AIによる意味的類似性を使った関連性の自動発見 45 | 46 | **5. 脳の複製** 47 | - **思考の追跡**:なぜその結論に至ったかの思考過程を記録 48 | - **忘却しない第二の脳**:人間の記憶の限界を補完する外部記憶システム 49 | - **思いがけない発見**:過去の知識と現在の問題の偶発的組み合わせによる新たな洞察 50 | 51 | ## シンプルな運用 52 | 53 | **1. 編集制限の運用** 54 | - 全ファイル共通 55 | - ユニークなファイル名維持のためリネームは許可 56 | - ノート(マークダウン .md ファイル) 57 | - デフォルトをリーディングビューにして誤編集を防止 58 | - 後日、続きを書く場合は新規ノートを作成し、過去ノートにリンク 59 | - プロパティのタグ、タスクのチェック の2つのみ後日編集可能 60 | - 添付ファイル(.md ファイルを除く全てのファイル) 61 | - 画像、コード、キャンバスなど、ノートを除く全てが対象 62 | - 過去のファイルの編集は、作成日年月日ディレクトリ `01_data/YYYY/MM/DD/` 配下にコピーし編集 63 | 64 | **2. 分類禁止の運用** 65 | - タグ 66 | - ノートへのアクセス効率向上のための道標が目的 67 | - 階層タグを使用禁止 フラットタグのみ 68 | - ノート・添付ファイルの配置 69 | - 全てファイルは、作成日年月日ディレクトリ `01_data/YYYY/MM/DD/` 配下に配置 70 | - フォルダ階層による分類を一切行わない 71 | 72 | **3. DAG構造の運用** 73 | - 新規ノート作成時、関連する過去ノートへのリンクを積極的に作成 74 | - 一つ以上のタグを必ず設定(ノートの孤立を防ぐため) 75 | - ローカルグラフでノートや添付ファイルの関連性を確認 76 | 77 | **4. 検索・一覧機能** 78 | - **ローカルグラフ**:DAG構造の可視化 79 | - **DataView**:期間・属性別自動ファイル・タスク一覧生成 80 | - **Tag Folder**:タグベース一覧表示(実質的なMOC) 81 | - **Floating Search**:キーワード・タグなど組み合わせ検索 82 | - **Smart Connections**:AIの意味的類似性を使った関連性の自動発見 83 | - **Bases**:Vault内のファイルをデータベース化し、カスタム一覧表示 84 | 85 | **5. 例外ルールと注意事項** 86 | - 誤字・脱字の修正は過去ノートでも許可(Git履歴で追跡、修正しすぎ注意) 87 | - 生成AIによるノート代筆は非推奨(自分の思考ではないため「第二の脳」の価値を損なう) 88 | 89 | ## ディレクトリの用途 90 | 91 | - 00_template 92 | - テンプレート 93 | - [[01_note]]:新規ノート用 94 | - [[11_embed_code]]:Embed Code File プラグイン用 95 | - 01_data/YYYY/MM/DD 96 | - マークダウン、添付ファイル、キャンバスなど全てのファイル置き場 97 | - 保管庫にファイルを追加する場合、追加した日付(YYYY/MM/DD)のディレクトリに全て入れる 98 | - 過去ファイルは編集禁止 99 | - ファイル名のリネームは許可 100 | - Obsidianの使い勝手から、ユニークなファイル名である必要があるため 101 | - 02_view 102 | - DataView および Bases プラグインによる 一覧表示 103 | 104 | ## テンプレートの使い方 105 | 106 | > [!WARNING] 107 | > このテンプレートを使用する際は、必ずプライベートリポジトリとして設定してください。個人情報や機密データの保護は利用者の責任となります。公開リポジトリでの使用は推奨されません。 108 | 109 | 「Use this template」から新規リポジトリを作成した場合は、不要なファイルが含まれているので削除しコミットしてください。 110 | 111 | 削除対象の不要なファイルおよびディレクトリ: 112 | - README.md 113 | - LICENSE 114 | - 01_data/2025/06/21/SampleNote.md 115 | - 01_data/2025/06/21/sample.drawio 116 | - 01_data/2025/06/21/sample.svg 117 | 118 | ## 実践的QA 119 | 120 | ### Q1: 新しいトピックについて書く場合は? 121 | 122 | 新しいトピックについてノートを作成する場合のワークフローは以下の通り。 123 | 124 | 1. **ノート作成**: 125 | - 新規ノートを作成(Ctrl + N) 126 | - 自動的に「01_data/YYYY/MM/DD/」ディレクトリに保存される(Templaterプラグイン) 127 | - 作成日時が自動挿入される(Templaterプラグイン) 128 | 2. **タイトル設定**: 129 | - トピックを簡潔に表す具体的なタイトルを付ける(F2) 130 | - 検索しやすい名前にする 131 | - 例: 「DAGネットワークの特徴」「量子コンピュータの基本原理」 132 | 3. **タグ設定**: 133 | - 一つ以上のタグを設定(ノートを孤立させないため) 134 | - 階層タグは使用禁止(複雑性回避) 135 | - 探しやすいタグをつける 136 | - タグが実質的なMOC(Map of Contents)として働く 137 | - Tag Folder で一覧表示 138 | - DataViewで一覧表示 139 | 4. **内容記述**: 140 | - トピックの概要・詳細を記述 141 | - 関連する既存ノートがあればリンクする 142 | - 引用や参考元があれば記録する 143 | 5. **書き終わったら編集禁止**: 144 | - 作成日内(寝るまで)に内容を完成させるのを推奨 145 | - 未完成でも、続きは別日に新規ノートとして作成する 146 | 147 | **具体例**: 148 | ``` 149 | --- 150 | created: 2025-06-21 15:15:15 151 | tags: 152 | - physics 153 | - quantum 154 | --- 155 | ## 量子ビットの概念 156 | 157 | 従来のコンピュータでは0か1の二値しか取れないビットを使用するが、量子コンピュータでは量子ビット(qubit)を使用する。量子ビットは0と1の重ね合わせ状態をとることができる。... 158 | ``` 159 | 160 | ### Q2: 同じトピックについて日を跨いで書く場合は? 161 | 162 | 基本的にQ1と同じです。違いは以下。 163 | 164 | **タイトル(ファイル名)が被らないようにを工夫する** 165 | - 例えば「元のトピック名_YYYY-MM-DD」の形式を使用など 166 | - 例:「量子コンピュータの基本原理_2025-05-04」 167 | 168 | **リンク構造** 169 | - 冒頭で前回ノートへの明示的なリンクや埋め込みを作成 170 | - 例:`「前回の\[\[量子コンピュータの基本原理]]の続きとして...」` 171 | 172 | ### Q3: 添付ファイル(画像、図表、コードなど)を編集する場合は? 173 | 174 | 添付ファイルも知識の一部として扱い、ノートと同様の編集制限を適用します。 175 | 176 | 1. **編集禁止** 177 | - 添付ファイル(画像、コード等)も過去のものは編集禁止 178 | - 過去ノートとの整合性を維持するために重要 179 | 180 | 2. **編集が必要な場合の対応** 181 | - 過去の添付ファイルをコピーして、今日の日付のディレクトリ(01_data/YYYY/MM/DD/)に貼り付け 182 | - コピーした添付ファイルを編集 183 | - 新しいノートから新しい添付ファイルへリンク 184 | 185 | 3. **ファイル名の付け方を工夫する** 186 | - 例えば、オリジナルファイル名に日付を追加する 187 | - 例:「量子アルゴリズム図_2025-05-01.png」→「量子アルゴリズム図_2025-05-03.png」 188 | 189 | ### Q4: 検索と一覧について具体的な方法は? 190 | 191 | 以下の方法で過去の知識を効率的に検索・活用できます。 192 | 193 | 1. **Floating Searchの活用**: 194 | - 検索画面からキーワードやタグなどを組み合わせて検索 195 | - 例: `tag:#quantum path:"2025/04"` で4月の量子関連ノートを検索 196 | 2. **Tag Folderによる閲覧**: 197 | - Tag Folderパネルでタグの一覧表示 198 | - 関連タグをクリックして関連ノートを素早く発見 199 | 3. **グラフビューの活用**: 200 | - ローカルグラフで関連ノートのDAG構造を視覚的に把握 201 | - ノート間の接続を確認し、知識の関連性を発見 202 | 4. **Basesによる一覧表示**: 203 | - vault内のデータをデータベースのように扱い、一覧表示やフィルタリングが可能 204 | - [[10_dashboard]] 205 | - 複数のBasesを埋め込んだダッシュボードノート 206 | - View:02_view配下の一覧表示用 `.md`や`.base`ファイルを一覧表示 207 | - Today | Pin:今日作成したファイルや、`Pin`タグを付与したファイルの一覧 208 | - Data:01_data配下の全てのファイル一覧 209 | 5. **Smart Connectionsによる関連ノート一覧表示** 210 | - AIによる意味的類似性のあるノートの一覧表示 211 | - Smart ChatによるAIとの対話 212 | 6. **タスク管理** 213 | - [[20_tasks]] 214 | - タスク一覧のDataViewと、タスクが記載されたノートでフィルタしたBasesを埋め込みしてあるノート 215 | 216 | ### Q5: 過去のノートに誤字・脱字を見つけた場合は? 217 | 218 | 原則、過去ノートは編集禁止ですが、個人的に誤字・脱字に関しては編集をしてもよいと思います。Gitが編集履歴を保存しているので問題ないと思っています。柔軟に対応しましょう。編集しすぎないように注意! 219 | 220 | ### Q6: 生成AIにノートを書かせても良い? 221 | 222 | やめたほうがいいです。**AIが書いた文章は「自分の思考」ではありません。** 223 | このノート術は「忘却しない第二の脳」を構築するシステムです。AIに文章を書かせることは、この目標と根本的に矛盾します。 224 | 「思考の変遷を時系列で保存」と「過去の自分の振り返り」を実現するために、最終的な文章は必ず自分で執筆することを推奨します。 225 | 226 | **適切な使い方**: 227 | - **Smart Connections**:意味的類似性による関連ノートの自動発見 228 | - **アイデアの発想支援**:思考の出発点として活用(最終的には自分の言葉で再構築) 229 | - **検索・整理の補助**:既存ノートの整理や関連性の発見 230 | 231 | **避けるべき使い方**: 232 | - ノートの内容をAIに代筆させる 233 | - AI生成情報をそのまま記録する 234 | 235 | ## [Obsidian Web Clipper](https://obsidian.md/clipper) 用設定 236 | 237 | ```json 238 | { 239 | "schemaVersion": "0.1.0", 240 | "name": "DAGnetz", 241 | "behavior": "create", 242 | "noteContentFormat": "", 243 | "properties": [ 244 | { 245 | "name": "title", 246 | "value": "{{title}}", 247 | "type": "text" 248 | }, 249 | { 250 | "name": "source", 251 | "value": "{{url}}", 252 | "type": "text" 253 | }, 254 | { 255 | "name": "author", 256 | "value": "{{author|split:\\\", \\\"|wikilink|join}}", 257 | "type": "multitext" 258 | }, 259 | { 260 | "name": "published", 261 | "value": "{{published}}", 262 | "type": "date" 263 | }, 264 | { 265 | "name": "created", 266 | "value": "{{date|date:\\\"YYYY-MM-DD HH:mm:ss\\\"}}", 267 | "type": "date" 268 | }, 269 | { 270 | "name": "description", 271 | "value": "{{description}}", 272 | "type": "text" 273 | }, 274 | { 275 | "name": "tags", 276 | "value": "文献", 277 | "type": "multitext" 278 | } 279 | ], 280 | "triggers": [], 281 | "noteNameFormat": "{{title}}", 282 | "path": "01_data/{{date|date:YYYY/MM/DD}}" 283 | } 284 | ``` 285 | 286 | ## Obsidian 設定 287 | 288 | [ここからはじめる - Obsidian 日本語ヘルプ - Obsidian Publish](https://publish.obsidian.md/help-ja/%E3%81%93%E3%81%93%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B) 289 | デフォルト設定から変更している部分を記載します。 290 | 291 | ### エディタ 292 | 293 | - 新規タブのデフォルトビュー 294 | - リーディングビュー 295 | 296 | ### ファイルとリンク 297 | 298 | - 内部リンクを毎回更新する 299 | - ON 300 | - 新規ノートの作成場所 301 | - 以下で指定されたフォルダ 302 | - 新規ノートを作成するフォルダ 303 | - 01_data 304 | - 新規添付ファイルの作成場所 305 | - 現在のファイルと同じフォルダ 306 | - すべてのファイル拡張子を認識 307 | - ON 308 | 309 | ### 外観 310 | 311 | テーマ 312 | - [Minimal](https://github.com/kepano/obsidian-minimal) 313 | #### フォント 314 | 315 | デフォルトは、中国語フォントになっています。 316 | 自分好みの日本語フォントを設定するとよいでしょう。 317 | ここでは [M+ FONTS](https://mplusfonts.github.io) を設定しています。 318 | 319 | - インターフェースフォント 320 | - M PLUS 1 321 | - テキストフォント 322 | - M PLUS 1 323 | - モノスペースフォント 324 | - M PLUS 1 Code 325 | 326 | #### インターフェース 327 | 328 | タブタイトルバーでファイル名が編集できるけれど、ファイル内でも編集できるので不要だと判断しました。 329 | ヘッダーのメニューは使いません。機能はコマンドパレットから使います。 330 | 331 | - タブタイトルバーを表示 332 | - OFF 333 | 334 | ### ホットキー 335 | 336 | ユーザによる割り当て: 337 | 338 | - Alt + F 339 | - Floating Search: Search Obsidian Globally (With Last State) 340 | - Ctrl + Q 341 | - Git: Commit-and-sync and then close Obsidian 342 | - Alt + H 343 | - Global Search and Replace: Seach and Replace in all files 344 | - Alt + ↓ 345 | - Outliner:Move list and sublists down 346 | - Alt + ↑ 347 | - Outliner:Move list and sublists up 348 | - Alt + C 349 | - Templater: Insert 00_templates/11_embed_code.md 350 | - Ctrl + R 351 | - ライブプレビュー/ソースモードを切り替える 352 | - Ctrl + J 353 | - Templater: Create 00_templates/02_literature.md 354 | - Alt + T 355 | - Minimal Theme Settings: Cycle between table width option 356 | 357 | ## [コアプラグイン](https://publish.obsidian.md/help-ja/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3/%E3%82%B3%E3%82%A2%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3) 設定 358 | 359 | 使用するコアプラグインを選択します。 360 | 361 | ONのコアプラグイン: 362 | 363 | - Bases 364 | - Footnotes view 365 | - アウトゴーイングリンク 366 | - アウトライン 367 | - キャンバス 368 | - クイックスイッチャー 369 | - グラフビュー 370 | - コマンドパレット 371 | - バックリンク 372 | - ファイルエクスプローラ 373 | - ページビュー 374 | - ワークスペース 375 | - 検索 376 | 377 | ## コミュニティプラグイン 設定 378 | 379 | ### [Auto Link Title](https://github.com/zolrath/obsidian-auto-link-title) 380 | 381 | URLを貼ったら、自動的にウェブページを取得してリンクタイトルを抽出し、正しいタイトルが設定されたマークダウンリンクを作成するプラグイン 382 | 383 | 設定の変更なし 384 | 385 | ### [Colored Tags](https://github.com/pfrankov/obsidian-colored-tags) 386 | 387 | タグに色付けをするプラグイン 388 | 389 | デフォルト設定のままでいいけれど、個人的には以下の設定にしています。 390 | 391 | - Palette 392 | - Custom 393 | - Custom palette 394 | 395 | ライト: 396 | 397 | ``` 398 | fce8e8-e8fcfc-eefce8-f3e8fc-fcf7e8-e8eefc-e8fcf3-fce8f7-fcf0e8-e8f7fc-edfce8-f7e8fc-fcfce8-e8edfc-e8fcf7-fce8ed 399 | ``` 400 | 401 | ダーク: 402 | 403 | ``` 404 | 7a1010-107a7a-407a10-40107a-7a5510-10407a-107a40-7a1055-7a3810-105d7a-1d7a10-5d107a-747a10-1f107a-107a5d-7a102a 405 | ``` 406 | 407 | ### [Dataview](https://github.com/blacksmithgu/obsidian-dataview) 408 | 409 | Obsidian Vaultをクエリ可能なデータベースとして扱うプラグイン 410 | 411 | ノートを俯瞰して一覧表示するために使用します。 412 | 02_view 配下に個人的に使う一覧表示を用意しています。 413 | 自分自身の用途に合わせてカスタムしてください。 414 | 415 | Obsidian v1.9.10 リリースのBases機能により、タスク一覧を除く全てのDataViewを置き換えました。 416 | 417 | - [[20_tasks]] 418 | - タグで絞り込みしたノートに記述されたタスクを全て一覧表示 419 | 420 | - Enable JavaScript queries 421 | - ON 422 | 423 | ### [Embed Code File](https://github.com/almariah/embed-code-file) 424 | 425 | ソースコードを埋め込むことができるプラグイン 426 | 427 | 別ファイルとしてコードを管理できるようになるので便利です。 428 | 自身の使用する言語を設定に追加してください。 429 | 430 | ### [Floating Search](https://github.com/Quorafind/Obsidian-Float-Search) 431 | 432 | モーダルなど、大きい画面で検索画面が表示するプラグイン 433 | 434 | Hotkey 設定: 435 | - Floating Search: Search Obsidian Globally (With Last State) → Alt + F 436 | - Floating Search を最後の状態で開く 437 | 438 | ### [Git](https://github.com/Vinzent03/obsidian-git) 439 | 440 | Gitで保管庫を管理するプラグイン 441 | 442 | 方針: 443 | - mainブランチ1本 444 | - コミットは手動で行う 445 | - Backup で一括操作 446 | - Backup = Staging → Commit → Pull → Push 447 | - プッシュとプルは定期的に自動で行う 448 | - リポジトリの競合を可能な限り防ぐ 449 | - Obsidianの起動時は自動的にプル 450 | - Obsidianの終了方法はショートカット(Ctrl + Q)を使用 451 | - `Git: Create backup and close` 452 | - Backup 453 | - Obsidianを閉じる 454 | 455 | デフォルトから変更した設定: 456 | 457 | Automatic: 458 | - Split automatic commit and push → ON 459 | - 自動コミットとプッシュを分割 460 | - Vault commit interval (minites) → 0 (OFF) 461 | - 自動で`git commit`を行う周期 462 | - Vault push interval (minutes) → 20 463 | - 自動で`git push`を行う周期 464 | - Auto pull interval (minites) → 60 465 | - 自動で`git pull`を行う周期 466 | 467 | Backup: 468 | - Pull updates on startup → ON 469 | - Obsidian起動時に最新の変更を取得 470 | - Push on backup → ON 471 | - バックアップをプッシュする 472 | - Pull changes before push → ON 473 | - プッシュ前にプルを行う 474 | 475 | Hotkey 設定: 476 | - Git: Create backup and close → Ctrl + Q 477 | - バックアップの作成とObsidianの終了 478 | 479 | ### [Global Search and Replace](https://github.com/MahmoudFawzyKhalil/obsidian-global-search-and-replace) 480 | 481 | Obsidian 保管庫内全てのファイルでグローバル検索と置換を実行するプラグイン 482 | 483 | VSCodeの検索のように、横断検索して置換をするための機能になります。 484 | 485 | Hotkey 設定: 486 | - Global Search and Replace: Seach and Replace in all files → Alt + H 487 | - 全ファイルの検索と置換 488 | 489 | ### [Image Toolkit](https://github.com/sissilab/obsidian-image-toolkit) 490 | 491 | 画像をクリックするとポップアップ表示され、プレビュー、ズーム、移動、回転、反転、反転、コピーなどの操作ができるプラグイン 492 | 493 | 設定の変更なし 494 | 495 | ### [Minimal Theme Settings](https://github.com/kepano/obsidian-minimal-settings) 496 | 497 | Minimal Theme 付属のプラグイン 498 | Obsidianの設定パネルからテーマをカスタマイズすることができます。 499 | 500 | デフォルトから変更した設定: 501 | - フォントサイズの設定はご自由に 502 | 503 | Features: 504 | - Underline internal links → OFF 505 | - 内部リンクに下線を引く 506 | - Maximize media → OFF 507 | - 画像と動画を行幅分埋める 508 | 509 | Typography: 510 | 511 | - Text font size → 16 512 | - テキストのフォントサイズ 513 | - Small font size → 13 514 | - 小さいフォントサイズ 515 | - Line height → 2 516 | - 行の高さ 517 | - Normal line witdh → 40 518 | - 通常の行の幅 519 | 520 | ### [Mononote](https://github.com/czottmann/obsidian-mononote) 521 | 522 | 各ノートがウィンドウペインごとに1つのタブのみを占有するようにするプラグイン 523 | 524 | ノートが既に開いている場合は、現在のタブで同じファイルを開くのではなく、既存のタブにフォーカスが当てられます。リンク、メニュー、ホットキーからノートを開く場合に有効です。 525 | 526 | Mononoteを正しく動作させるには、「設定」→「エディター」→「常に新しいタブにフォーカス」を必ず有効にする必要があります。(制作者談) 527 | 528 | ### [Outliner](https://github.com/vslinko/obsidian-outliner) 529 | 530 | WorkflowyやRoamResearchのようなリストの操作感にするためのプラグイン 531 | 532 | 個人的に、VSCodeと同じような操作感にするために入れています。 533 | - Alt + ↑ でリストを上に移動 534 | - Alt + ↓ でリストを下に移動 535 | 536 | Outliner 設定: 537 | - Stick the cursor to the content → Stick cursor out of bullets and checkboxes 538 | - カーソルをコンテンツに固定 → カーソルを箇条書きやチェックボックスの外に固定 539 | - Enhance the Tab key → OFF 540 | - Tabキーの機能拡張 541 | - Enhance the Enter key → OFF 542 | - Enterキーの機能拡張 543 | - Enhance the Ctrl+A or Cmd+A behavior → ON 544 | - Ctrl+AまたはCmd+Aの動作拡張 545 | - Improve the style of your lists → OFF 546 | - リストのスタイル改善 547 | - Draw vertical indentation lines → OFF 548 | - 垂直インデントラインの描画 549 | - Vertical indentation line click action → Toggle Folding 550 | - 垂直インデントラインクリック時の動作 → 折りたたみの切り替え 551 | - Drag-and-Drop → ON 552 | - ドラッグアンドドロップ 553 | - Debug mode → ON 554 | - デバッグモード 555 | 556 | Hotkey 設定: 557 | - Outliner:Move list and sublists down → Alt + ↓ 558 | - アウトライナー:リストとサブリストを下に移動 559 | - Outliner:Move list and sublists up → Alt + ↑ 560 | - アウトライナー:リストとサブリストを上に移動 561 | 562 | ### [Slash Commander](https://github.com/alephpiece/obsidian-slash-commander) 563 | 564 | Obsidian 用のカスタマイズ可能なスラッシュコマンドを追加するプラグイン 565 | 566 | スラッシュコマンドを使えるようにする便利系プラグインです。 567 | Embed Code File用のテンプレートをTemplaterに登録しているので、それをスラッシュコマンドで呼び出せるようにしています。 568 | その他、コマンドパレットから呼び出せるコマンドは全て登録可能なので、お好きに設定してください。 569 | 570 | ### [Smart Connections](https://github.com/brianpetro/obsidian-smart-connections) 571 | 572 | Smart ConnectionsはAIの意味的類似性を使ってObsidianのノート間の関連性を自動で発見し、手動でのリンク作成や整理の手間を省くプラグイン 573 | 574 | Smart Connections 575 | - Connections view 576 | - Exclude outlinks → ON 577 | - Hide blocks in results → ON 578 | - Smart Environment 579 | - Excluded folders 580 | - 00_templates 581 | - 02_view 582 | 583 | Smart Chat 584 | - Chat 585 | - Language → 日本語 586 | 587 | ### [Style Settings](https://github.com/mgmeyers/obsidian-style-settings) 588 | 589 | スニペット、テーマ、プラグインのCSSファイルで設定オプションのセットを定義することができるプラグイン 590 | 591 | デフォルトから変更した設定: 592 | - フォントサイズの設定はご自由に 593 | 594 | Minimal → Headings → Level 1 Headings: 595 | - H1 font size → 2em 596 | - H1のフォントサイズ 597 | 598 | Minimal → Headings → Level 2 Headings: 599 | - H2 font size → 1.6em 600 | - H2のフォントサイズ 601 | - H2 divider line → ON 602 | - H2の区切り線 603 | 604 | Minimal → Headings → Level 3 Headings: 605 | - H3 font size → 1.4em 606 | - H3のフォントサイズ 607 | - H3 divider line → ON 608 | - H3の区切り線 609 | 610 | Minimal → Headings → Level 4 Headings: 611 | - H4 font size → 1.2em 612 | - H4のフォントサイズ 613 | - H4 divider line → ON 614 | - H4の区切り線 615 | 616 | Minimal → Properties: 617 | - Hide properties heading → ON 618 | - プロパティの見出しを隠す 619 | - Hide "Add property" button → ON 620 | - "プロパティの追加"ボタンを隠す 621 | 622 | Minimal → Sidebars: 623 | - Hide help button → ON 624 | - ヘルプボタンを隠す 625 | 626 | ### [TagFolder](https://github.com/vrtmrz/obsidian-tagfolder) 627 | 628 | タグをフォルダーのように表示するプラグイン 629 | 630 | デフォルトから変更した設定: 631 | - Behavior 632 | - Disable narrowing down → ON 633 | - 絞り込みの無効化。この機能を有効にすると、サブ構造を作る代わりに、関連するタグがタイトルとともに表示される。 634 | - 個人的に階層はフラットな方が好きなので……ここはお好きに切り替えてください。 635 | - Filters 636 | - Target Folders 637 | - 01_data 638 | - 00_templatesと02_viewを除くため 639 | 640 | ### [Templater](https://github.com/SilentVoid13/Templater) 641 | 642 | Templaterプラグインは、テンプレート言語を定義しています。 643 | それによって、変数や関数の結果をノートに挿入することができます。 644 | また、それらの変数や関数を操作するJavaScriptコードを実行することもできます。 645 | 646 | デフォルトから変更した設定: 647 | 648 | - Template folder location → 00_templates 649 | - テンプレートフォルダの場所 650 | - Trigger Templater on new file creation → ON 651 | - 新規ファイル作成でTemplaterをトリガーするか 652 | 653 | Template hotkeys 654 | - 00_templates/[[11_embed_code]].md 655 | - [[11_embed_code]]は、Embed Code File プラグインのコード埋め込みテンプレート 656 | - Hotkey設定: 657 | - Templater: Insert 00_templates/[[11_embed_code]].md → Alt + C 658 | - 00_templates/[[02_literature]].md 659 | - 文献ノート用テンプレート 660 | - Hotkey設定: 661 | - Templater: Create 00_templates/[[02_literature]].md → Ctrl + J 662 | 663 | Folder templates 664 | - / ... 00_templates/[[01_note]].md 665 | - 保管庫配下に、新規ノートを作成したときに適応するテンプレートの設定 666 | 667 | ### [Various Complements](https://github.com/tadashi-aikawa/obsidian-various-complements-plugin) 668 | 669 | IDEの自動補完のように単語を補完するプラグイン 670 | 671 | 「\[\[」と入力すること無く内部リンクを貼ることができるのですごく便利です。 672 | フロントマターやカスタム辞書、保管庫内を参照し文字列補間、現在のファイル内で文字列補間など多機能なので好みで調整してください。→ [ドキュメント](https://tadashi-aikawa.github.io/docs-obsidian-various-complements-plugin/) 673 | 674 | デフォルトから変更した設定: 675 | 676 | - Main 677 | - Strategy 678 | - Japanese 679 | - Match Strategy 680 | - partial 681 | - Current file complements 682 | - Enable Current file complements → OFF 683 | - Internal link complement 684 | - Exclude self internal link → ON 685 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-git/styles.css: -------------------------------------------------------------------------------- 1 | @keyframes loading { 2 | 0% { 3 | transform: rotate(0deg); 4 | } 5 | 6 | 100% { 7 | transform: rotate(360deg); 8 | } 9 | } 10 | 11 | .workspace-leaf-content[data-type="git-view"] .button-border { 12 | border: 2px solid var(--interactive-accent); 13 | border-radius: var(--radius-s); 14 | } 15 | 16 | .workspace-leaf-content[data-type="git-view"] .view-content { 17 | padding: 0; 18 | } 19 | 20 | .workspace-leaf-content[data-type="git-history-view"] .view-content { 21 | padding: 0; 22 | } 23 | 24 | .loading > svg { 25 | animation: 2s linear infinite loading; 26 | transform-origin: 50% 50%; 27 | display: inline-block; 28 | } 29 | 30 | .obsidian-git-center { 31 | margin: auto; 32 | text-align: center; 33 | width: 50%; 34 | } 35 | 36 | .obsidian-git-textarea { 37 | display: block; 38 | margin-left: auto; 39 | margin-right: auto; 40 | } 41 | 42 | .obsidian-git-disabled { 43 | opacity: 0.5; 44 | } 45 | 46 | .obsidian-git-center-button { 47 | display: block; 48 | margin: 20px auto; 49 | } 50 | 51 | .tooltip.mod-left { 52 | overflow-wrap: break-word; 53 | } 54 | 55 | .tooltip.mod-right { 56 | overflow-wrap: break-word; 57 | } 58 | 59 | /* Limits the scrollbar to the view body */ 60 | .git-view { 61 | display: flex; 62 | flex-direction: column; 63 | position: relative; 64 | height: 100%; 65 | } 66 | 67 | .git-tools { 68 | display: flex; 69 | margin-left: auto; 70 | } 71 | .git-tools .type { 72 | padding-left: var(--size-2-1); 73 | display: flex; 74 | align-items: center; 75 | justify-content: center; 76 | width: 11px; 77 | } 78 | 79 | .git-tools .type[data-type="M"] { 80 | color: orange; 81 | } 82 | .git-tools .type[data-type="D"] { 83 | color: red; 84 | } 85 | .git-tools .buttons { 86 | display: flex; 87 | } 88 | .git-tools .buttons > * { 89 | padding: 0 0; 90 | height: auto; 91 | } 92 | 93 | .workspace-leaf-content[data-type="git-view"] .tree-item-self, 94 | .workspace-leaf-content[data-type="git-history-view"] .tree-item-self { 95 | align-items: center; 96 | } 97 | 98 | .workspace-leaf-content[data-type="git-view"] 99 | .tree-item-self:hover 100 | .clickable-icon, 101 | .workspace-leaf-content[data-type="git-history-view"] 102 | .tree-item-self:hover 103 | .clickable-icon { 104 | color: var(--icon-color-hover); 105 | } 106 | 107 | /* Highlight an item as active if it's diff is currently opened */ 108 | .is-active .git-tools .buttons > * { 109 | color: var(--nav-item-color-active); 110 | } 111 | 112 | .git-author { 113 | color: var(--text-accent); 114 | } 115 | 116 | .git-date { 117 | color: var(--text-accent); 118 | } 119 | 120 | .git-ref { 121 | color: var(--text-accent); 122 | } 123 | 124 | .workspace-leaf-content[data-type="diff-view"] .d2h-d-none { 125 | display: none; 126 | } 127 | 128 | .workspace-leaf-content[data-type="diff-view"] .d2h-wrapper { 129 | text-align: left; 130 | } 131 | 132 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-header { 133 | background-color: var(--background-primary); 134 | border-bottom: 1px solid var(--interactive-accent); 135 | font-family: var(--font-monospace); 136 | height: 35px; 137 | padding: 5px 10px; 138 | } 139 | 140 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-header, 141 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-stats { 142 | display: -webkit-box; 143 | display: -ms-flexbox; 144 | display: flex; 145 | } 146 | 147 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-stats { 148 | font-size: 14px; 149 | margin-left: auto; 150 | } 151 | 152 | .workspace-leaf-content[data-type="diff-view"] .d2h-lines-added { 153 | border: 1px solid #b4e2b4; 154 | border-radius: 5px 0 0 5px; 155 | color: #399839; 156 | padding: 2px; 157 | text-align: right; 158 | vertical-align: middle; 159 | } 160 | 161 | .workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted { 162 | border: 1px solid #e9aeae; 163 | border-radius: 0 5px 5px 0; 164 | color: #c33; 165 | margin-left: 1px; 166 | padding: 2px; 167 | text-align: left; 168 | vertical-align: middle; 169 | } 170 | 171 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper { 172 | -webkit-box-align: center; 173 | -ms-flex-align: center; 174 | align-items: center; 175 | display: -webkit-box; 176 | display: -ms-flexbox; 177 | display: flex; 178 | font-size: 15px; 179 | width: 100%; 180 | } 181 | 182 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-name { 183 | overflow-x: hidden; 184 | text-overflow: ellipsis; 185 | white-space: nowrap; 186 | } 187 | 188 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper { 189 | border: 1px solid var(--background-modifier-border); 190 | border-radius: 3px; 191 | margin-bottom: 1em; 192 | } 193 | 194 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse { 195 | -webkit-box-pack: end; 196 | -ms-flex-pack: end; 197 | -webkit-box-align: center; 198 | -ms-flex-align: center; 199 | align-items: center; 200 | border: 1px solid var(--background-modifier-border); 201 | border-radius: 3px; 202 | cursor: pointer; 203 | display: none; 204 | font-size: 12px; 205 | justify-content: flex-end; 206 | padding: 4px 8px; 207 | } 208 | 209 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected { 210 | background-color: #c8e1ff; 211 | } 212 | 213 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input { 214 | margin: 0 4px 0 0; 215 | } 216 | 217 | .workspace-leaf-content[data-type="diff-view"] .d2h-diff-table { 218 | border-collapse: collapse; 219 | font-family: Menlo, Consolas, monospace; 220 | font-size: 13px; 221 | width: 100%; 222 | } 223 | 224 | .workspace-leaf-content[data-type="diff-view"] .d2h-files-diff { 225 | width: 100%; 226 | } 227 | 228 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff { 229 | overflow-y: hidden; 230 | } 231 | 232 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff { 233 | display: inline-block; 234 | margin-bottom: -8px; 235 | margin-right: -4px; 236 | overflow-x: scroll; 237 | overflow-y: hidden; 238 | width: 50%; 239 | } 240 | 241 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line { 242 | padding: 0 8em; 243 | } 244 | 245 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line, 246 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line { 247 | display: inline-block; 248 | -webkit-user-select: none; 249 | -moz-user-select: none; 250 | -ms-user-select: none; 251 | user-select: none; 252 | white-space: nowrap; 253 | width: 100%; 254 | } 255 | 256 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line { 257 | padding: 0 4.5em; 258 | } 259 | 260 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn { 261 | word-wrap: normal; 262 | background: none; 263 | display: inline-block; 264 | padding: 0; 265 | -webkit-user-select: text; 266 | -moz-user-select: text; 267 | -ms-user-select: text; 268 | user-select: text; 269 | vertical-align: middle; 270 | white-space: pre; 271 | width: 100%; 272 | } 273 | 274 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, 275 | .theme-light 276 | .workspace-leaf-content[data-type="diff-view"] 277 | .d2h-code-side-line 278 | del { 279 | background-color: #ffb6ba; 280 | } 281 | 282 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, 283 | .theme-dark 284 | .workspace-leaf-content[data-type="diff-view"] 285 | .d2h-code-side-line 286 | del { 287 | background-color: #8d232881; 288 | } 289 | 290 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del, 291 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, 292 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del, 293 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins { 294 | border-radius: 0.2em; 295 | display: inline-block; 296 | margin-top: -1px; 297 | text-decoration: none; 298 | vertical-align: middle; 299 | } 300 | 301 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, 302 | .theme-light 303 | .workspace-leaf-content[data-type="diff-view"] 304 | .d2h-code-side-line 305 | ins { 306 | background-color: #97f295; 307 | text-align: left; 308 | } 309 | 310 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins, 311 | .theme-dark 312 | .workspace-leaf-content[data-type="diff-view"] 313 | .d2h-code-side-line 314 | ins { 315 | background-color: #1d921996; 316 | text-align: left; 317 | } 318 | 319 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix { 320 | word-wrap: normal; 321 | background: none; 322 | display: inline; 323 | padding: 0; 324 | white-space: pre; 325 | } 326 | 327 | .workspace-leaf-content[data-type="diff-view"] .line-num1 { 328 | float: left; 329 | } 330 | 331 | .workspace-leaf-content[data-type="diff-view"] .line-num1, 332 | .workspace-leaf-content[data-type="diff-view"] .line-num2 { 333 | -webkit-box-sizing: border-box; 334 | box-sizing: border-box; 335 | overflow: hidden; 336 | padding: 0 0.5em; 337 | text-overflow: ellipsis; 338 | width: 3.5em; 339 | } 340 | 341 | .workspace-leaf-content[data-type="diff-view"] .line-num2 { 342 | float: right; 343 | } 344 | 345 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber { 346 | background-color: var(--background-primary); 347 | border: solid var(--background-modifier-border); 348 | border-width: 0 1px; 349 | -webkit-box-sizing: border-box; 350 | box-sizing: border-box; 351 | color: var(--text-muted); 352 | cursor: pointer; 353 | display: inline-block; 354 | position: absolute; 355 | text-align: right; 356 | width: 7.5em; 357 | } 358 | 359 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after { 360 | content: "\200b"; 361 | } 362 | 363 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber { 364 | background-color: var(--background-primary); 365 | border: solid var(--background-modifier-border); 366 | border-width: 0 1px; 367 | -webkit-box-sizing: border-box; 368 | box-sizing: border-box; 369 | color: var(--text-muted); 370 | cursor: pointer; 371 | display: inline-block; 372 | overflow: hidden; 373 | padding: 0 0.5em; 374 | position: absolute; 375 | text-align: right; 376 | text-overflow: ellipsis; 377 | width: 4em; 378 | } 379 | 380 | .workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr { 381 | position: relative; 382 | } 383 | 384 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after { 385 | content: "\200b"; 386 | } 387 | 388 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder, 389 | .workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder { 390 | background-color: var(--background-primary); 391 | border-color: var(--background-modifier-border); 392 | } 393 | 394 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix, 395 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber, 396 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber, 397 | .workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder { 398 | -webkit-user-select: none; 399 | -moz-user-select: none; 400 | -ms-user-select: none; 401 | user-select: none; 402 | } 403 | 404 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber, 405 | .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber { 406 | direction: rtl; 407 | } 408 | 409 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del { 410 | background-color: #fee8e9; 411 | border-color: #e9aeae; 412 | } 413 | 414 | .theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins { 415 | background-color: #dfd; 416 | border-color: #b4e2b4; 417 | } 418 | 419 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del { 420 | background-color: #521b1d83; 421 | border-color: #691d1d73; 422 | } 423 | 424 | .theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins { 425 | background-color: rgba(30, 71, 30, 0.5); 426 | border-color: #13501381; 427 | } 428 | 429 | .workspace-leaf-content[data-type="diff-view"] .d2h-info { 430 | background-color: var(--background-primary); 431 | border-color: var(--background-modifier-border); 432 | color: var(--text-normal); 433 | } 434 | 435 | .theme-light 436 | .workspace-leaf-content[data-type="diff-view"] 437 | .d2h-file-diff 438 | .d2h-del.d2h-change { 439 | background-color: #fdf2d0; 440 | } 441 | 442 | .theme-dark 443 | .workspace-leaf-content[data-type="diff-view"] 444 | .d2h-file-diff 445 | .d2h-del.d2h-change { 446 | background-color: #55492480; 447 | } 448 | 449 | .theme-light 450 | .workspace-leaf-content[data-type="diff-view"] 451 | .d2h-file-diff 452 | .d2h-ins.d2h-change { 453 | background-color: #ded; 454 | } 455 | 456 | .theme-dark 457 | .workspace-leaf-content[data-type="diff-view"] 458 | .d2h-file-diff 459 | .d2h-ins.d2h-change { 460 | background-color: rgba(37, 78, 37, 0.418); 461 | } 462 | 463 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper { 464 | margin-bottom: 10px; 465 | } 466 | 467 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a { 468 | color: #3572b0; 469 | text-decoration: none; 470 | } 471 | 472 | .workspace-leaf-content[data-type="diff-view"] 473 | .d2h-file-list-wrapper 474 | a:visited { 475 | color: #3572b0; 476 | } 477 | 478 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header { 479 | text-align: left; 480 | } 481 | 482 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title { 483 | font-weight: 700; 484 | } 485 | 486 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line { 487 | display: -webkit-box; 488 | display: -ms-flexbox; 489 | display: flex; 490 | text-align: left; 491 | } 492 | 493 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list { 494 | display: block; 495 | list-style: none; 496 | margin: 0; 497 | padding: 0; 498 | } 499 | 500 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li { 501 | border-bottom: 1px solid var(--background-modifier-border); 502 | margin: 0; 503 | padding: 5px 10px; 504 | } 505 | 506 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li:last-child { 507 | border-bottom: none; 508 | } 509 | 510 | .workspace-leaf-content[data-type="diff-view"] .d2h-file-switch { 511 | cursor: pointer; 512 | display: none; 513 | font-size: 10px; 514 | } 515 | 516 | .workspace-leaf-content[data-type="diff-view"] .d2h-icon { 517 | fill: currentColor; 518 | margin-right: 10px; 519 | vertical-align: middle; 520 | } 521 | 522 | .workspace-leaf-content[data-type="diff-view"] .d2h-deleted { 523 | color: #c33; 524 | } 525 | 526 | .workspace-leaf-content[data-type="diff-view"] .d2h-added { 527 | color: #399839; 528 | } 529 | 530 | .workspace-leaf-content[data-type="diff-view"] .d2h-changed { 531 | color: #d0b44c; 532 | } 533 | 534 | .workspace-leaf-content[data-type="diff-view"] .d2h-moved { 535 | color: #3572b0; 536 | } 537 | 538 | .workspace-leaf-content[data-type="diff-view"] .d2h-tag { 539 | background-color: var(--background-primary); 540 | display: -webkit-box; 541 | display: -ms-flexbox; 542 | display: flex; 543 | font-size: 10px; 544 | margin-left: 5px; 545 | padding: 0 2px; 546 | } 547 | 548 | .workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag { 549 | border: 2px solid #c33; 550 | } 551 | 552 | .workspace-leaf-content[data-type="diff-view"] .d2h-added-tag { 553 | border: 1px solid #399839; 554 | } 555 | 556 | .workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag { 557 | border: 1px solid #d0b44c; 558 | } 559 | 560 | .workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag { 561 | border: 1px solid #3572b0; 562 | } 563 | 564 | /* ====================== Line Authoring Information ====================== */ 565 | 566 | .cm-gutterElement.obs-git-blame-gutter { 567 | /* Add background color to spacing inbetween and around the gutter for better aesthetics */ 568 | border-width: 0px 2px 0.2px 2px; 569 | border-style: solid; 570 | border-color: var(--background-secondary); 571 | background-color: var(--background-secondary); 572 | } 573 | 574 | .cm-gutterElement.obs-git-blame-gutter > div, 575 | .line-author-settings-preview { 576 | /* delegate text color to settings */ 577 | color: var(--obs-git-gutter-text); 578 | font-family: monospace; 579 | height: 100%; /* ensure, that age-based background color occupies entire parent */ 580 | text-align: right; 581 | padding: 0px 6px 0px 6px; 582 | white-space: pre; /* Keep spaces and do not collapse them. */ 583 | } 584 | 585 | @media (max-width: 800px) { 586 | /* hide git blame gutter not to superpose text */ 587 | .cm-gutterElement.obs-git-blame-gutter { 588 | display: none; 589 | } 590 | } 591 | 592 | .git-unified-diff-view, 593 | .git-split-diff-view .cm-deletedLine .cm-changedText { 594 | background-color: #ee443330; 595 | } 596 | 597 | .git-unified-diff-view, 598 | .git-split-diff-view .cm-insertedLine .cm-changedText { 599 | background-color: #22bb2230; 600 | } 601 | 602 | .git-obscure-prompt[git-is-obscured="true"] #git-show-password:after { 603 | -webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>'); 604 | } 605 | 606 | .git-obscure-prompt[git-is-obscured="false"] #git-show-password:after { 607 | -webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye-off"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"></path><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"></path><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"></path><path d="m2 2 20 20"></path></svg>'); 608 | } 609 | 610 | /* Override styling of Codemirror merge view "collapsed lines" indicator */ 611 | .git-split-diff-view .ͼ2 .cm-collapsedLines { 612 | background: var(--interactive-normal); 613 | border-radius: var(--radius-m); 614 | color: var(--text-accent); 615 | font-size: var(--font-small); 616 | padding: var(--size-4-1) var(--size-4-1); 617 | } 618 | .git-split-diff-view .ͼ2 .cm-collapsedLines:hover { 619 | background: var(--interactive-hover); 620 | color: var(--text-accent-hover); 621 | } 622 | -------------------------------------------------------------------------------- /01_data/2025/06/21/sample.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" style="background: #ffffff; background-color: light-dark(#ffffff, #121212);" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="625px" height="481px" viewBox="-0.5 -0.5 625 481" content="<mxfile><diagram id="2HlhxyFN50_vKFgvICUU" name="ページ1">5VpNc6M4EP01uk4hBAKO4I+Zy1RNVQ47e2RAttlg48JybO+vXwkkQEiJv3BCsq5URWqQgNevn9QNAE3Wx+9lvF39LFKSA9tKjwBNgW1D7CD2j1tOtSWwgtqwLLNUnNQanrJ/SW3EwrjPUrJTzqNFkdNsqxqTYrMhCVVscVkWB/W0RZGrF93GS6IZnpI4161/ZSld1Vbf9lr7D5ItV/LKEIvH+xMnz8uy2G/E9YCNFtWvPryO5VxWbdit4rQ4dExoBtCkLApat9bHCck5tBK1etz8laPNfZdkQy8Z4Lr1iJc43xN5y9WN0ZMEo3ocwgdYAEWHVUbJ0zZO+NED8z6zreg6Zz3ImosszydFXpSsvyk27KRoR8vimUgjQ2RS/dgR/W7FA7yQkpJjxyTu/jsp1oSWJ3aKOOqJ+z3J5xH9Q+s2bDu1bdVxmRwXC6Ysm5lbtFhDAPYKeOhrgQexfxl4COH70dPBCzX02AgW8uQ8cvFuW+vAIjtytIdABzqOAo/t6/A4vo6OtN1FLQ2cybjAQdj6MHA8DZzpuMBxPfxh4ED7vCiRTRryVZL1kjze7bJExYQ9eXn63e38zQXsmyu706MQtLp3kr1jRn932p1RrNcO4h055lW4d8W+TIgSDjQul0RqUG0iqbKS6y7pQO5aOuTSVpI8ptmLuv6b/CCu8KvI2P224YDUcECuo05RP40Y1V2Q+xM5qiYjr8eJGgNtoooWzWNfxhSsMSUaVxz1Fdix3jGOdJX5/HHk6XHkjiqOnL7HYfANu0H7824MqwBfNe+AUeaPi0fwISySWjIaGnmqimJ3KN6ghxEluIooIj9I492qSi+gShlu/xVTSspNZbEt1GQTMqWFWn6RkkW8z+lbRBiLh311wXWtGxfc/kQwsB/lYZn0dz08wyAIgM8aHogQiCIwcwHbLkpB6jifLZq0t+bm2ZK7N2FOIsx/EV9asyTOQ3FgnaVp/triraami2JDRR2GBfMwOQJSgwf6WFu+ZXwp6aV1//Ld3O0dsjv2GOhpUyPC14YA7tUBtIkGDAFDdsKZ74HQB7MABBFgJGGWEAMf8ugIpyDUXffpYqHBtI9xhyrSDV2q2M7rrLg4Fgx1KgPoPu9GsBKgOQjnnx901/bPgm4SoCFAd3QBmukKNKYqxXtmV45BB4bZFTeda3Kr+/fE0t0jTq3cgUoUjmW/PdFwy4XMBhWaMDWzwAzxTVM0lw1L+sRUeocXlN476vOm06+QfKe3RfV09THF1yDqY3qvYwZOD7yPBq4v2ybgJOcGB04vir0lTH/yInnuyZIUmKZgcz7tbl4D1nqVzjN+g1Xvn/16K/DFpvdBdfmiK4dWVw6tM3J4kbghXdtkZI5E3JoyqVzL/Bv3wlrQoseJ23UVRhPVGpe3paBLnD4I3R5TWzJU+sdGNSkzkiF2bz90cW1JvqqRnMUPK/U71xUhx6hqcHBVM5Qxx0a13ktWF9u3Uc1x1a2+a/cmGpBq15Ux/x9UM2UHzrjSAwTVFRTbN75qwVaPtH19HI5rrqGgehvX4McwbfitmqxwjJhpjvzoTBLEuXGv1t/0PZJphkSUJ1DsbyYa0URa/KoBq+paZQlDeQ4SaddV1bWcLOjoamv9b8fk0tnhUGMbOklzDUmaltd+MYAbcr9Dwdg1ZCazOWe4XxeMXV48rknuz1W22+JlVjAFIawaExBaVVE5AP5UnBzN5ChPzhxc4bCh6832QIULS00NmmTyXFDAIT4ZNOzxW6dhHhFR5T2OuiXhj74Q/M33q2/Bjw0VtxvgZ932K+16QWm/hEez/wA=</diagram></mxfile>"><defs/><rect fill="#ffffff" width="100%" height="100%" x="0" y="0" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));"/><g><g><rect x="0" y="408" width="624" height="72" fill="none" stroke="#cccccc" pointer-events="all" style="stroke: light-dark(rgb(204, 204, 204), rgb(62, 62, 62));"/></g><g><rect x="0" y="24" width="624" height="336" fill="none" stroke="#cccccc" pointer-events="all" style="stroke: light-dark(rgb(204, 204, 204), rgb(62, 62, 62));"/></g><g><ellipse cx="96" cy="168" rx="24" ry="24" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 46px; height: 1px; padding-top: 168px; margin-left: 73px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">A</div></div></div></foreignObject><text x="96" y="172" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">A</text></switch></g></g><g><ellipse cx="312" cy="168" rx="24" ry="24" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 46px; height: 1px; padding-top: 168px; margin-left: 289px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">C</div></div></div></foreignObject><text x="312" y="172" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">C</text></switch></g></g><g><ellipse cx="528" cy="168" rx="24" ry="24" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 46px; height: 1px; padding-top: 168px; margin-left: 505px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">D</div></div></div></foreignObject><text x="528" y="172" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">D</text></switch></g></g><g><path d="M 288 168 L 126.37 168" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 121.12 168 L 128.12 164.5 L 126.37 168 L 128.12 171.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><ellipse cx="96" cy="288" rx="24" ry="24" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 46px; height: 1px; padding-top: 288px; margin-left: 73px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">B</div></div></div></foreignObject><text x="96" y="292" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">B</text></switch></g></g><g><path d="M 504 168 L 342.37 168" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 337.12 168 L 344.12 164.5 L 342.37 168 L 344.12 171.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><path d="M 511.03 184.97 L 126.16 286.38" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 121.08 287.72 L 126.96 282.55 L 126.16 286.38 L 128.74 289.32 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><path d="M 408 360 L 408 48" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="1 3" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="264" y="42" width="96" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 94px; height: 1px; padding-top: 57px; margin-left: 265px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">時系列</div></div></div></foreignObject><text x="312" y="62" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="16px" text-anchor="middle">時系列</text></switch></g></g><g><path d="M 24 72 L 593.63 72" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 598.88 72 L 591.88 75.5 L 593.63 72 L 591.88 68.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="144" y="72" width="72" height="24" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 70px; height: 1px; padding-top: 84px; margin-left: 145px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">編集禁止</div></div></div></foreignObject><text x="180" y="89" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="16px" text-anchor="middle">編集禁止</text></switch></g></g><g><rect x="456" y="72" width="96" height="24" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 94px; height: 1px; padding-top: 84px; margin-left: 457px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">編集許可</div></div></div></foreignObject><text x="504" y="89" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="16px" text-anchor="middle">編集許可</text></switch></g></g><g><ellipse cx="528" cy="288" rx="24" ry="24" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 46px; height: 1px; padding-top: 288px; margin-left: 505px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">E</div></div></div></foreignObject><text x="528" y="292" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">E</text></switch></g></g><g><path d="M 511.03 271.03 L 334.73 187.69" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 329.98 185.45 L 337.81 185.28 L 334.73 187.69 L 334.81 191.6 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><rect x="168" y="432" width="48" height="24" rx="3.6" ry="3.6" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 46px; height: 1px; padding-top: 444px; margin-left: 169px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 10px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "># タグ1</div></div></div></foreignObject><text x="192" y="447" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="10px" text-anchor="middle"># タグ1</text></switch></g></g><g><rect x="456" y="432" width="54" height="24" rx="3.6" ry="3.6" fill="#ffffff" stroke="#000000" pointer-events="all" style="fill: light-dark(#ffffff, var(--ge-dark-color, #121212)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 52px; height: 1px; padding-top: 444px; margin-left: 457px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 10px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "># タグ2</div></div></div></foreignObject><text x="483" y="447" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="10px" text-anchor="middle"># タグ2</text></switch></g></g><g><path d="M 96 192 L 165.67 424.22" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/><path d="M 167.68 430.93 L 162.31 425.23 L 169.02 423.22 Z" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="all" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/></g><g><path d="M 295.03 184.97 L 195.12 424.51" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/><path d="M 192.43 430.97 L 191.89 423.16 L 198.36 425.85 Z" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="all" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/></g><g><path d="M 528 192 L 222.43 427.05" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/><path d="M 216.89 431.32 L 220.3 424.28 L 224.57 429.82 Z" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="all" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/></g><g><path d="M 528 312 L 511.2 423.97" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/><path d="M 510.17 430.89 L 507.74 423.45 L 514.67 424.49 Z" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="all" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/></g><g><path d="M 112.97 304.97 L 448.39 429.18" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/><path d="M 454.95 431.61 L 447.17 432.46 L 449.6 425.9 Z" fill="none" stroke="#999999" stroke-miterlimit="10" pointer-events="all" style="stroke: light-dark(rgb(153, 153, 153), rgb(106, 106, 106));"/></g><g><rect x="0" y="0" width="144" height="24" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 1px; padding-top: 12px; margin-left: 2px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">ノートとリンク</div></div></div></foreignObject><text x="2" y="17" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="16px">ノートとリンク</text></switch></g></g><g><rect x="0" y="384" width="72" height="24" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 70px; height: 1px; padding-top: 396px; margin-left: 2px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">タグ</div></div></div></foreignObject><text x="2" y="401" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="16px">タグ</text></switch></g></g><g><rect x="432" y="96" width="144" height="18" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 105px; margin-left: 433px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">(長くとも睡眠前まで)</div></div></div></foreignObject><text x="504" y="109" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">(長くとも睡眠前まで)</text></switch></g></g><g><rect x="96" y="96" width="168" height="18" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 166px; height: 1px; padding-top: 105px; margin-left: 97px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">(永遠に)</div></div></div></foreignObject><text x="180" y="109" fill="light-dark(#000000, #ffffff)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">(永遠に)</text></switch></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> -------------------------------------------------------------------------------- /.obsidian/plugins/smart-connections/styles.css: -------------------------------------------------------------------------------- 1 | /* deprecated positioning, use bottom bar instead */ 2 | .view-content > .sc-brand { 3 | position: fixed; 4 | bottom: 0; 5 | right: 0; 6 | background-color: var(--titlebar-background); 7 | } 8 | 9 | .sc-brand { 10 | > svg, 11 | > p { 12 | display: inline; 13 | margin: 0 0.1rem 0 0.3rem; 14 | color: var(--text-muted); 15 | font-size: var(--font-smallest); 16 | line-height: 1; 17 | height: 0.88rem; 18 | width: auto; 19 | } 20 | 21 | > p > a { 22 | color: var(--text-muted); 23 | } 24 | } 25 | 26 | .sc-list { 27 | padding-bottom: 20px; 28 | 29 | .tree-item-self { 30 | cursor: pointer; 31 | 32 | small { 33 | color: var(--color-gray-40); 34 | } 35 | } 36 | 37 | > .sc-collapsed ul { 38 | display: none; 39 | } 40 | 41 | > .sc-collapsed span svg { 42 | transform: rotate(-90deg); 43 | } 44 | 45 | > :not(.sc-collapsed) span svg { 46 | transform: rotate(0deg); 47 | } 48 | 49 | > div { 50 | span svg { 51 | height: auto; 52 | margin: auto 0.5em auto 0; 53 | flex: none; 54 | } 55 | 56 | > span { 57 | display: inline-flex; 58 | width: 100%; 59 | padding-left: 0; 60 | } 61 | 62 | ul { 63 | margin: 0; 64 | padding-left: 1.3rem; 65 | } 66 | 67 | > a { 68 | display: block; 69 | } 70 | 71 | > ul > li { 72 | display: block; 73 | } 74 | } 75 | .sc-result { 76 | > ul { 77 | list-style: none; 78 | padding-left: 0; 79 | } 80 | } 81 | 82 | .sc-result.sc-result-plaintext { 83 | font-size: var(--font-ui-smaller); 84 | line-height: var(--line-height-tight); 85 | background-color: var(--search-result-background); 86 | border-radius: var(--radius-s); 87 | overflow: hidden; 88 | margin: var(--size-4-1) 0 var(--size-4-2); 89 | color: var(--text-muted); 90 | box-shadow: 0 0 0 1px var(--background-modifier-border); 91 | 92 | & > * li { 93 | cursor: var(--cursor); 94 | position: relative; 95 | padding: var(--size-4-2) var(--size-4-5) var(--size-4-2) var(--size-4-3); 96 | white-space: pre-wrap; 97 | width: 100%; 98 | border-bottom: 1px solid var(--background-modifier-border); 99 | } 100 | } 101 | 102 | .sc-result:not(.sc-result-plaintext) { 103 | cursor: pointer; 104 | padding: var(--nav-item-padding); 105 | padding-left: 10px; 106 | margin-bottom: 1px; 107 | align-items: baseline; 108 | border-radius: var(--radius-s); 109 | font-weight: var(--nav-item-weight); 110 | 111 | &:hover { 112 | color: var(--nav-item-color-active); 113 | background-color: var(--nav-item-background-active); 114 | font-weight: var(--nav-item-weight-active); 115 | } 116 | 117 | span { 118 | color: var(--h5-color); 119 | } 120 | 121 | small { 122 | color: var(--h5-color); 123 | font-size: 0.8rem; 124 | font-weight: 500; 125 | } 126 | 127 | p { 128 | margin-top: 0.3rem; 129 | margin-bottom: 0.3rem; 130 | } 131 | 132 | ul > li { 133 | h1 { 134 | font-size: 1.3rem; 135 | } 136 | 137 | h2 { 138 | font-size: 1.25rem; 139 | } 140 | 141 | h3 { 142 | font-size: 1.2rem; 143 | } 144 | 145 | h4 { 146 | font-size: 1.15rem; 147 | } 148 | 149 | h5 { 150 | font-size: 1.1rem; 151 | } 152 | 153 | h6 { 154 | font-size: 1.05rem; 155 | } 156 | 157 | h1, 158 | h2, 159 | h3, 160 | h4, 161 | h5, 162 | h6 { 163 | margin-block-start: calc(var(--p-spacing)/2); 164 | margin-block-end: calc(var(--p-spacing)/2); 165 | } 166 | } 167 | } 168 | } /* end .sc-list */ 169 | 170 | /* Only on right sidebar */ 171 | .mod-right-split .sc-list .sc-result { 172 | font-size: var(--font-text-size); 173 | font-size: 0.88rem; 174 | } 175 | 176 | .sc-top-bar { 177 | display: flex; 178 | width: 100%; 179 | justify-content: end; 180 | 181 | .sc-context { 182 | color: var(--nav-item-color); 183 | font-size: var(--nav-item-size); 184 | margin: 0.5em 0.5em 1em; 185 | width: 100%; 186 | } 187 | } 188 | 189 | /* Chat */ 190 | .sc-chat-container { 191 | display: flex; 192 | flex-direction: column; 193 | align-items: center; 194 | justify-content: flex-end; 195 | height: 100%; 196 | 197 | .sc-top-bar-container { 198 | align-self: flex-end; 199 | display: flex; 200 | width: 100%; 201 | 202 | .sc-chat-name-input { 203 | flex-grow: 1; 204 | min-width: 20px; 205 | } 206 | } 207 | 208 | .sc-thread { 209 | display: flex; 210 | flex-direction: column; 211 | align-items: flex-start; 212 | height: 100%; 213 | width: 100%; 214 | overflow: hidden; 215 | user-select: text; 216 | overflow-y: auto; 217 | 218 | .sc-message-container { 219 | border: 1px solid var(--divider-color); 220 | border-radius: 10px; 221 | margin: 0.5rem 0; 222 | display: flex; 223 | flex-direction: column; 224 | align-items: flex-start; 225 | width: 100%; 226 | height: 100%; 227 | overflow-y: auto; 228 | background-color: var(--background-primary-alt); 229 | 230 | .sc-message { 231 | max-width: 90ch; 232 | width: 90%; 233 | margin: 10px; 234 | padding: 10px; 235 | border-radius: 1.5rem; 236 | word-break: break-word; 237 | 238 | &.user { 239 | align-self: flex-end; 240 | color: var(--text-normal); 241 | background-color: var(--background-primary); 242 | } 243 | 244 | &.assistant, 245 | &.system { 246 | background-color: var(--background-primary-alt); 247 | color: var(--text-normal); 248 | } 249 | 250 | .sc-message-content { 251 | margin: 0; 252 | padding: 1rem; 253 | 254 | > * p { 255 | margin: 0; 256 | } 257 | } 258 | } 259 | } 260 | 261 | .sc-chat-form { 262 | display: flex; 263 | padding: 0 10px 1rem 0; 264 | width: 100%; 265 | max-height: 50%; 266 | 267 | .sc-chat-input { 268 | flex-grow: 1; 269 | padding: 0.88rem; 270 | border: none; 271 | border-radius: 1.5rem; 272 | resize: none; 273 | height: auto; 274 | min-height: 4.2lh; 275 | max-height: 100%; 276 | background-color: var(--background-primary); 277 | color: var(--text-normal); 278 | margin-right: -2.7rem; 279 | padding-right: 3rem; 280 | } 281 | 282 | .sc-btn-container { 283 | width: 2rem; 284 | height: 2rem; 285 | margin: auto; 286 | 287 | > button.send-button { 288 | border-radius: 99999px; 289 | cursor: pointer; 290 | outline: 2px solid transparent; 291 | padding: 0; 292 | outline-offset: 2px; 293 | background: none !important; 294 | 295 | &:focus-visible { 296 | outline-color: var(--text-faint); 297 | box-shadow: none; 298 | } 299 | 300 | > svg { 301 | > circle { 302 | fill: var(--text-faint); 303 | } 304 | > path { 305 | fill: var(--background-primary); 306 | } 307 | } 308 | } 309 | } 310 | } 311 | } 312 | 313 | #settings { 314 | display: flex; 315 | flex-direction: column; 316 | max-width: 100%; 317 | width: 100%; 318 | } 319 | } 320 | 321 | .sc-system { 322 | align-self: center; 323 | font-style: italic; 324 | color: var(--text-faint); 325 | } 326 | 327 | .sc-msg-button { 328 | cursor: pointer; 329 | float: right; 330 | margin-left: 5px; 331 | opacity: 0.8; 332 | 333 | &.cycle-branch { 334 | float: left; 335 | display: flex; 336 | } 337 | 338 | &:hover { 339 | opacity: 1; 340 | } 341 | } 342 | 343 | #sc-abort-button { 344 | cursor: pointer; 345 | padding: 10px; 346 | border-radius: 5px; 347 | 348 | &:hover { 349 | background-color: var(--background-primary); 350 | } 351 | } 352 | 353 | .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget):hover:has(.sc-change) { 354 | overflow: unset; 355 | box-shadow: unset; 356 | cursor: unset; 357 | } 358 | 359 | .notice .sc-notice-actions { 360 | display: flex; 361 | justify-content: space-between; 362 | flex-direction: row-reverse; 363 | } 364 | 365 | .sc-chat-container { 366 | #settings { 367 | display: flex; 368 | flex-direction: column; 369 | max-width: 100%; 370 | width: 100%; 371 | } 372 | 373 | .sc-config-error-notice { 374 | display: flex; 375 | align-items: center; 376 | justify-content: space-between; 377 | padding: 10px; 378 | background-color: #ffcccc; 379 | border: 1px solid #ff0000; 380 | border-radius: 5px; 381 | margin: 10px 0; 382 | font-size: 14px; 383 | font-weight: bold; 384 | color: #ff0000; 385 | width: 100%; 386 | 387 | span { 388 | flex-grow: 1; 389 | } 390 | 391 | button { 392 | margin-left: 10px; 393 | } 394 | } 395 | } 396 | 397 | .sc-bottom-bar { 398 | position: absolute; 399 | bottom: 0; 400 | right: 0; 401 | left: 0; 402 | width: 100%; 403 | display: flex; 404 | justify-content: space-between; 405 | align-items: center; 406 | background-color: var(--titlebar-background); 407 | padding: 0 0.5rem; 408 | 409 | .sc-brand { 410 | flex-shrink: 0; 411 | } 412 | 413 | .sc-context { 414 | flex-grow: 1; 415 | font-size: var(--font-smallest); 416 | overflow: hidden; 417 | text-overflow: ellipsis; 418 | white-space: nowrap; 419 | } 420 | } 421 | 422 | .setting-component[data-setting*="/"][data-setting*="api_key"] { 423 | display: none; 424 | } 425 | 426 | .setting-component[data-setting*="gpu"]:not([data-setting*="/"]) { 427 | display: none; 428 | } 429 | 430 | /* SINCE COMPONENT PATTERN SETTINGS */ 431 | 432 | .setting-component[data-setting="smart_change.active"] { 433 | display: none; 434 | } 435 | 436 | .group-header { 437 | display: flex; 438 | text-wrap: nowrap; 439 | flex-wrap: wrap; 440 | align-items: baseline; 441 | 442 | > h2 { 443 | width: 100%; 444 | margin-bottom: 0; 445 | } 446 | 447 | > * { 448 | flex-grow: 1; 449 | margin-bottom: 10px; 450 | } 451 | } 452 | 453 | /* SMART CHAT v2 */ 454 | .sc-context-list { 455 | list-style: none; 456 | margin: 0; 457 | padding: 0 1rem 1rem; 458 | display: none; 459 | flex-direction: column; 460 | gap: 0.5rem; 461 | } 462 | 463 | .sc-context-header[aria-expanded="true"] + .sc-context-list { 464 | display: flex; 465 | } 466 | 467 | .sc-context-header[aria-expanded="false"] + .sc-context-list { 468 | display: none; 469 | } 470 | 471 | .sc-context-toggle-icon { 472 | margin-left: 0.5rem; 473 | transition: transform 0.3s ease; 474 | } 475 | 476 | .sc-context-header[aria-expanded="true"] .sc-context-toggle-icon { 477 | transform: rotate(180deg); 478 | } 479 | 480 | .sc-context-container { 481 | border: 1px solid var(--divider-color); 482 | border-radius: 10px; 483 | margin: 0.5rem 0; 484 | background-color: var(--background-primary-alt); 485 | overflow: auto; 486 | max-width: 95%; 487 | margin: 10px; 488 | flex-shrink: 0; 489 | 490 | .sc-context-header { 491 | display: flex; 492 | justify-content: space-between; 493 | align-items: center; 494 | padding: 0.88rem 1rem; 495 | background-color: var(--background-primary); 496 | color: var(--text-muted); 497 | font-weight: var(--font-medium); 498 | cursor: pointer; 499 | user-select: none; 500 | 501 | &:hover { 502 | background-color: var(--background-primary-hover); 503 | } 504 | 505 | &:focus { 506 | outline: 2px solid var(--text-muted); 507 | outline-offset: 2px; 508 | } 509 | } 510 | } 511 | 512 | 513 | .sc-context-item { 514 | padding: 0.5rem; 515 | border-radius: var(--radius-s); 516 | background-color: var(--background-secondary); 517 | color: var(--text-normal); 518 | display: flex; 519 | justify-content: space-between; 520 | align-items: baseline; 521 | font-size: var(--font-smallest); 522 | flex-wrap: wrap; 523 | 524 | &:hover { 525 | background-color: var(--background-secondary-hover); 526 | } 527 | } 528 | 529 | .sc-context-item-path { 530 | font-weight: var(--font-medium); 531 | text-overflow: ellipsis; 532 | overflow: hidden; 533 | white-space: nowrap; 534 | max-width: 70%; 535 | } 536 | 537 | .sc-context-item-score { 538 | font-size: var(--font-small); 539 | color: var(--color-gray-40); 540 | } 541 | 542 | /* Tool Calls Component Styles */ 543 | .sc-tool-calls-container { 544 | border: 1px solid var(--divider-color); 545 | border-radius: 10px; 546 | margin: 0.5rem 0; 547 | background-color: var(--background-primary-alt); 548 | overflow: auto; 549 | max-width: 95%; 550 | margin: 10px; 551 | flex-shrink: 0; 552 | } 553 | 554 | .sc-tool-call { 555 | margin-bottom: 0.5rem; 556 | 557 | &:last-child { 558 | margin-bottom: 0; 559 | } 560 | } 561 | 562 | .sc-tool-call-header { 563 | display: flex; 564 | justify-content: space-between; 565 | align-items: center; 566 | padding: 0.88rem 1rem; 567 | background-color: var(--background-primary); 568 | color: var(--text-muted); 569 | font-weight: var(--font-medium); 570 | cursor: pointer; 571 | user-select: none; 572 | 573 | &:hover { 574 | background-color: var(--background-primary-hover); 575 | } 576 | 577 | &:focus { 578 | outline: 2px solid var(--text-muted); 579 | outline-offset: 2px; 580 | } 581 | 582 | &[aria-expanded="true"] .sc-tool-call-toggle-icon { 583 | transform: rotate(180deg); 584 | } 585 | } 586 | 587 | .sc-tool-call-content { 588 | padding: 0.5rem 1rem; 589 | background-color: var(--background-secondary); 590 | font-size: var(--font-smallest); 591 | 592 | pre { 593 | margin: 0; 594 | white-space: pre-wrap; 595 | word-break: break-word; 596 | } 597 | 598 | code { 599 | font-family: var(--font-monospace); 600 | } 601 | } 602 | 603 | /* Hide content when collapsed */ 604 | .sc-tool-call-header[aria-expanded="false"] + .sc-tool-call-content { 605 | display: none; 606 | } 607 | 608 | /* Show content when expanded */ 609 | .sc-tool-call-header[aria-expanded="true"] + .sc-tool-call-content { 610 | display: block; 611 | } 612 | 613 | /* System Message Styles */ 614 | .sc-system-message-container { 615 | margin: 1rem 0; 616 | border: 1px solid var(--background-modifier-border); 617 | border-radius: 6px; 618 | background: var(--background-secondary); 619 | flex-shrink: 0; 620 | } 621 | 622 | .sc-system-message-header { 623 | display: flex; 624 | justify-content: space-between; 625 | align-items: center; 626 | padding: 0.75rem 1rem; 627 | cursor: pointer; 628 | font-weight: 500; 629 | border-bottom: 1px solid transparent; 630 | transition: background-color 0.2s ease; 631 | 632 | &:hover { 633 | background: var(--background-modifier-hover); 634 | } 635 | 636 | span { 637 | display: flex; 638 | align-items: center; 639 | gap: 0.5rem; 640 | } 641 | 642 | .sc-system-message-toggle-icon { 643 | transition: transform 0.2s ease; 644 | } 645 | 646 | &[aria-expanded="true"] { 647 | border-bottom-color: var(--background-modifier-border); 648 | } 649 | } 650 | 651 | .sc-system-message-content { 652 | padding: 1rem; 653 | position: relative; 654 | background: var(--background-primary); 655 | border-bottom-left-radius: 6px; 656 | border-bottom-right-radius: 6px; 657 | 658 | .sc-system-message-text { 659 | font-family: var(--font-monospace); 660 | white-space: pre-wrap; 661 | word-break: break-word; 662 | margin-right: 2rem; 663 | } 664 | 665 | .sc-system-message-copy { 666 | position: absolute; 667 | top: 1rem; 668 | right: 1rem; 669 | padding: 0.4rem; 670 | background: transparent; 671 | border: none; 672 | cursor: pointer; 673 | opacity: 0.6; 674 | transition: opacity 0.2s ease; 675 | 676 | &:hover { 677 | opacity: 1; 678 | } 679 | 680 | &.sc-copied { 681 | color: var(--text-accent); 682 | } 683 | } 684 | } 685 | 686 | .sc-chat-container { 687 | .smart-chat-overlay { 688 | position: absolute; 689 | top: 0; 690 | left: 0; 691 | right: 0; 692 | bottom: 0; 693 | background-color: var(--background-primary-alt); 694 | z-index: 100; 695 | overflow: auto; 696 | 697 | .smart-chat-overlay-header { 698 | display: flex; 699 | justify-content: flex-end; 700 | } 701 | .setting-item { 702 | flex-direction: column; 703 | align-items: flex-start; 704 | } 705 | } 706 | } 707 | 708 | .sc-typing-indicator { 709 | display: flex; 710 | align-items: center; 711 | padding: 12px 16px; 712 | display: none; 713 | 714 | &.visible { 715 | display: flex; 716 | } 717 | 718 | .sc-typing-dots { 719 | display: flex; 720 | gap: 4px; 721 | 722 | .sc-typing-dot { 723 | width: 8px; 724 | height: 8px; 725 | background: var(--text-muted); 726 | border-radius: 50%; 727 | animation: typing-bounce 1.4s infinite ease-in-out; 728 | 729 | &:nth-child(1) { 730 | animation-delay: 0s; 731 | } 732 | 733 | &:nth-child(2) { 734 | animation-delay: 0.2s; 735 | } 736 | 737 | &:nth-child(3) { 738 | animation-delay: 0.4s; 739 | } 740 | } 741 | } 742 | 743 | } 744 | /* keyframes must be at root level */ 745 | @keyframes typing-bounce { 746 | 0%, 747 | 80%, 748 | 100% { 749 | transform: scale(0.6); 750 | } 751 | 40% { 752 | transform: scale(1); 753 | } 754 | } 755 | 756 | 757 | /* Lookup */ 758 | #sc-lookup-view { 759 | .sc-container { 760 | .sc-textarea-container { 761 | display: flex; 762 | padding: 0 10px 1rem 0; 763 | width: 100%; 764 | max-height: 50%; 765 | 766 | > textarea { 767 | flex-grow: 1; 768 | padding: 0.88rem; 769 | border: none; 770 | border-radius: 1.5rem; 771 | resize: none; 772 | height: auto; 773 | min-height: 4.2lh; 774 | max-height: 100%; 775 | background-color: var(--background-primary); 776 | color: var(--text-normal); 777 | margin-right: -2.7rem; 778 | padding-right: 3rem; 779 | } 780 | .sc-textarea-btn-container { 781 | width: 2rem; 782 | height: 2rem; 783 | margin: auto; 784 | 785 | > button.send-button { 786 | border-radius: 99999px; 787 | cursor: pointer; 788 | outline: 2px solid transparent; 789 | padding: 0; 790 | outline-offset: 2px; 791 | background: none !important; 792 | 793 | &:focus-visible { 794 | outline-color: var(--text-faint); 795 | box-shadow: none; 796 | } 797 | 798 | > svg { 799 | > circle { 800 | fill: var(--text-faint); 801 | } 802 | > path { 803 | fill: var(--background-primary); 804 | } 805 | } 806 | } 807 | } 808 | } 809 | } 810 | } 811 | 812 | /* Side Panes */ 813 | div.workspace-leaf-content[data-type^="smart-"] { 814 | > .view-content { 815 | display: flex; 816 | flex-direction: column; 817 | } 818 | } 819 | 820 | .sc-inline-confirm-row { 821 | margin-top: 10px; 822 | padding: 6px; 823 | border: 1px solid var(--interactive-normal); 824 | } 825 | .sc-inline-confirm-row-buttons { 826 | display: flex; 827 | justify-content: flex-end; 828 | gap: 10px; 829 | margin-top: 10px; 830 | 831 | & .sc-inline-confirm-yes { 832 | font-weight: bold; 833 | } 834 | & .sc-inline-confirm-cancel { 835 | font-weight: normal; 836 | } 837 | } 838 | 839 | .sc-story-modal { 840 | width: 80% !important; 841 | height: 80% !important; 842 | } 843 | .sc-story-container { 844 | display: flex; 845 | flex-direction: column; 846 | height: 100%; 847 | } 848 | 849 | .sc-other-plugins { 850 | display: flex; 851 | flex-direction: column; 852 | gap: 10px; 853 | margin-top: 20px; 854 | 855 | button { 856 | padding: 10px; 857 | border-radius: var(--radius-s); 858 | background-color: var(--background-primary); 859 | color: var(--text-normal); 860 | border: none; 861 | cursor: pointer; 862 | font-size: var(--font-small); 863 | 864 | &:hover { 865 | background-color: var(--background-primary-hover); 866 | } 867 | } 868 | } --------------------------------------------------------------------------------