Playwright start
This commit is contained in:
Vendored
+1
@@ -0,0 +1 @@
|
||||
{}
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"theme": "obsidian"
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
[
|
||||
"kanban-bases-view",
|
||||
"code-styler",
|
||||
"calendar",
|
||||
"custom-font-loader",
|
||||
"obsidian-note-autocreator"
|
||||
]
|
||||
Vendored
+33
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"footnotes": false,
|
||||
"properties": true,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": true,
|
||||
"bases": true,
|
||||
"webviewer": false
|
||||
}
|
||||
BIN
Binary file not shown.
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"shouldConfirmBeforeCreate": true,
|
||||
"weekStart": "locale",
|
||||
"wordsPerDot": 250,
|
||||
"showWeeklyNote": false,
|
||||
"weeklyNoteFormat": "",
|
||||
"weeklyNoteTemplate": "",
|
||||
"weeklyNoteFolder": "",
|
||||
"localeOverride": "system-default"
|
||||
}
|
||||
+4459
File diff suppressed because it is too large
Load Diff
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "calendar",
|
||||
"name": "Calendar",
|
||||
"description": "Calendar view of your daily notes",
|
||||
"version": "1.5.10",
|
||||
"author": "Liam Cain",
|
||||
"authorUrl": "https://github.com/liamcain/",
|
||||
"isDesktopOnly": false,
|
||||
"minAppVersion": "0.9.11"
|
||||
}
|
||||
+20047
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "code-styler",
|
||||
"name": "Code Styler",
|
||||
"version": "1.1.7",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Style and customize codeblocks and inline code in both editing mode and reading mode.",
|
||||
"author": "Mayuran Visakan",
|
||||
"authorUrl": "https://github.com/mayurankv",
|
||||
"fundingUrl": "https://www.buymeacoffee.com/mayurankv2",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
+1348
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"font_folder": ".obsidian/fonts/",
|
||||
"font": "JetBrainsMono-Regular.ttf",
|
||||
"force_mode": false,
|
||||
"custom_css_mode": false,
|
||||
"custom_css": ""
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
+357
@@ -0,0 +1,357 @@
|
||||
/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||
if you want to view the source, please visit the github repository of this plugin
|
||||
*/
|
||||
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// main.ts
|
||||
var main_exports = {};
|
||||
__export(main_exports, {
|
||||
default: () => FontPlugin
|
||||
});
|
||||
module.exports = __toCommonJS(main_exports);
|
||||
var import_obsidian = require("obsidian");
|
||||
var DEFAULT_SETTINGS = {
|
||||
font_folder: "",
|
||||
font: "None",
|
||||
force_mode: false,
|
||||
custom_css_mode: false,
|
||||
custom_css: ""
|
||||
};
|
||||
function get_default_css(font_family_name, css_class = ":root *") {
|
||||
return `${css_class} {
|
||||
--font-default: '${font_family_name}';
|
||||
--default-font: '${font_family_name}';
|
||||
--font-family-editor: '${font_family_name}';
|
||||
--font-monospace-default: '${font_family_name}';
|
||||
--font-interface-override: '${font_family_name}';
|
||||
--font-text-override: '${font_family_name}';
|
||||
--font-monospace-override: '${font_family_name}';
|
||||
}
|
||||
`;
|
||||
}
|
||||
function get_custom_css(font_family_name, css_class = ":root *") {
|
||||
return `${css_class} * {
|
||||
font-family: '${font_family_name}' !important;
|
||||
}`;
|
||||
}
|
||||
function arrayBufferToBase64(buffer) {
|
||||
let binary = "";
|
||||
const bytes = new Uint8Array(buffer);
|
||||
for (let i = 0; i < bytes.byteLength; i++) {
|
||||
binary += String.fromCharCode(bytes[i]);
|
||||
}
|
||||
return btoa(binary);
|
||||
}
|
||||
function applyCss(css, css_id, appendMode = false) {
|
||||
const existingStyle = document.getElementById(css_id);
|
||||
if (existingStyle && appendMode) {
|
||||
existingStyle.innerHTML += css;
|
||||
} else {
|
||||
const style = document.createElement("style");
|
||||
style.innerHTML = css;
|
||||
document.head.appendChild(style);
|
||||
if (existingStyle) {
|
||||
existingStyle.remove();
|
||||
}
|
||||
style.id = css_id;
|
||||
}
|
||||
}
|
||||
var FontPlugin = class extends import_obsidian.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.config_dir = this.app.vault.configDir;
|
||||
this.plugin_folder_path = `${this.config_dir}/plugins/custom-font-loader`;
|
||||
}
|
||||
async load_plugin() {
|
||||
await this.loadSettings();
|
||||
try {
|
||||
const font_file_name = this.settings.font;
|
||||
if (font_file_name && font_file_name.toLowerCase() != "none") {
|
||||
if (font_file_name != "all") {
|
||||
await this.process_and_load_font(font_file_name, false);
|
||||
} else {
|
||||
applyCss("", "custom_font_base64");
|
||||
const files = await this.app.vault.adapter.list(
|
||||
this.settings.font_folder
|
||||
);
|
||||
for (const file of files.files) {
|
||||
const file_name = file.replace(
|
||||
this.settings.font_folder,
|
||||
""
|
||||
);
|
||||
await this.process_and_load_font(file_name, true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
applyCss("", "custom_font_base64");
|
||||
applyCss("", "custom_font_general");
|
||||
}
|
||||
} catch (error) {
|
||||
new import_obsidian.Notice(error);
|
||||
}
|
||||
}
|
||||
async process_and_load_font(font_file_name, load_all_fonts) {
|
||||
console.log("loading %s", font_file_name);
|
||||
const css_font_path = `${this.plugin_folder_path}/${font_file_name.toLowerCase().replace(".", "_")}.css`;
|
||||
if (!await this.app.vault.adapter.exists(css_font_path)) {
|
||||
await this.convert_font_to_css(font_file_name, css_font_path);
|
||||
} else {
|
||||
await this.load_font(css_font_path, load_all_fonts);
|
||||
await this.load_css(font_file_name);
|
||||
}
|
||||
}
|
||||
async load_font(css_font_path, appendMode) {
|
||||
const content = await this.app.vault.adapter.read(css_font_path);
|
||||
applyCss(content, "custom_font_base64", appendMode);
|
||||
}
|
||||
async load_css(font_file_name) {
|
||||
let css_string = "";
|
||||
const font_family_name = font_file_name.split(".")[0].toLowerCase();
|
||||
if (this.settings.custom_css_mode) {
|
||||
css_string = this.settings.custom_css;
|
||||
} else {
|
||||
css_string = get_default_css(font_family_name);
|
||||
}
|
||||
if (this.settings.force_mode)
|
||||
css_string += `
|
||||
* {
|
||||
font-family: '${font_family_name}' !important;
|
||||
}
|
||||
`;
|
||||
applyCss(css_string, "custom_font_general");
|
||||
}
|
||||
async convert_font_to_css(font_file_name, css_font_path) {
|
||||
new import_obsidian.Notice("Processing Font files");
|
||||
const file = `${this.settings.font_folder}/${font_file_name}`;
|
||||
const arrayBuffer = await this.app.vault.adapter.readBinary(file);
|
||||
const base64 = arrayBufferToBase64(arrayBuffer);
|
||||
const font_family_name = font_file_name.split(".")[0].toLowerCase();
|
||||
const font_extension_name = font_file_name.split(".")[1].toLowerCase();
|
||||
let css_type = "";
|
||||
switch (font_extension_name) {
|
||||
case "woff":
|
||||
css_type = "font/woff";
|
||||
break;
|
||||
case "ttf":
|
||||
css_type = "font/truetype";
|
||||
break;
|
||||
case "woff2":
|
||||
css_type = "font/woff2";
|
||||
break;
|
||||
case "otf":
|
||||
css_type = "font/opentype";
|
||||
break;
|
||||
default:
|
||||
css_type = "font";
|
||||
}
|
||||
const base64_css = `@font-face{
|
||||
font-family: '${font_family_name}';
|
||||
src: url(data:${css_type};base64,${base64});
|
||||
}`;
|
||||
this.app.vault.adapter.write(css_font_path, base64_css);
|
||||
console.log("saved font %s into %s", font_family_name, css_font_path);
|
||||
console.log("Font CSS Saved into %s", css_font_path);
|
||||
await this.load_plugin();
|
||||
}
|
||||
async onload() {
|
||||
this.load_plugin();
|
||||
this.addSettingTab(new FontSettingTab(this.app, this));
|
||||
}
|
||||
async onunload() {
|
||||
applyCss("", "custom_font_base64");
|
||||
applyCss("", "custom_font_general");
|
||||
}
|
||||
async loadSettings() {
|
||||
this.settings = Object.assign(
|
||||
{},
|
||||
DEFAULT_SETTINGS,
|
||||
await this.loadData()
|
||||
);
|
||||
}
|
||||
async saveSettings() {
|
||||
await this.saveData(this.settings);
|
||||
}
|
||||
};
|
||||
var FontSettingTab = class extends import_obsidian.PluginSettingTab {
|
||||
constructor(app, plugin) {
|
||||
super(app, plugin);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
async display() {
|
||||
const { containerEl } = this;
|
||||
containerEl.empty();
|
||||
const infoContainer = containerEl.createDiv();
|
||||
infoContainer.setText(
|
||||
"In Order to set the font, copy your font into fonts directory that you set"
|
||||
);
|
||||
new import_obsidian.Setting(containerEl).setName("Fonts Folder").setDesc("Folder to look for your custom fonts").addText((text) => {
|
||||
text.onChange(async (value) => {
|
||||
this.plugin.settings.font_folder = value;
|
||||
await this.plugin.saveSettings();
|
||||
await this.plugin.loadSettings();
|
||||
});
|
||||
if (this.plugin.settings.font_folder.trim() == "") {
|
||||
this.plugin.settings.font_folder = `${this.app.vault.configDir}/fonts`;
|
||||
}
|
||||
if (!this.plugin.settings.font_folder.endsWith("/"))
|
||||
this.plugin.settings.font_folder = this.plugin.settings.font_folder + "/";
|
||||
text.setValue(this.plugin.settings.font_folder);
|
||||
});
|
||||
const font_folder_path = this.plugin.settings.font_folder;
|
||||
const options = [{ name: "none", value: "None" }];
|
||||
try {
|
||||
if (!await this.app.vault.adapter.exists(font_folder_path)) {
|
||||
await this.app.vault.adapter.mkdir(font_folder_path);
|
||||
}
|
||||
if (await this.app.vault.adapter.exists(font_folder_path)) {
|
||||
const files = await this.app.vault.adapter.list(
|
||||
font_folder_path
|
||||
);
|
||||
for (const file of files.files) {
|
||||
const file_name = file.replace(font_folder_path, "");
|
||||
if (file_name.startsWith("."))
|
||||
continue;
|
||||
options.push({ name: file_name, value: file_name });
|
||||
}
|
||||
}
|
||||
options.push({ name: "all", value: "Multiple fonts" });
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
new import_obsidian.Setting(containerEl).setName("Reload fonts from folder").setDesc(
|
||||
"This button reloades from the folder you specified (it also creates the folder for you)"
|
||||
).addButton((button) => {
|
||||
button.setButtonText("Reload");
|
||||
button.onClick((callback) => {
|
||||
this.plugin.saveSettings();
|
||||
this.plugin.load_plugin();
|
||||
this.display();
|
||||
});
|
||||
});
|
||||
this.containerEl.createDiv();
|
||||
new import_obsidian.Setting(containerEl).setName("Font").setDesc(
|
||||
`Choose font (If you can't see your fonts, make sure your fonts are in the folder you specified and hit reload.
|
||||
Also if you choose multiple fonts option, we will load and process all fonts in the folder for you. In that Case, enable Custom CSS Mode)`
|
||||
).addDropdown((dropdown) => {
|
||||
for (const opt of options) {
|
||||
dropdown.addOption(opt.name, opt.value);
|
||||
}
|
||||
dropdown.setValue(this.plugin.settings.font).onChange(async (value) => {
|
||||
this.plugin.settings.font = value;
|
||||
await this.plugin.saveSettings();
|
||||
await this.plugin.load_plugin();
|
||||
this.display();
|
||||
});
|
||||
});
|
||||
if (this.plugin.settings.font.toLowerCase() != "none") {
|
||||
new import_obsidian.Setting(containerEl).setName("Force Style").setDesc(
|
||||
"This option should only be used if you have installed a community theme and normal mode doesn't work"
|
||||
).addToggle((toggle) => {
|
||||
toggle.setValue(this.plugin.settings.force_mode);
|
||||
toggle.onChange(async (value) => {
|
||||
this.plugin.settings.force_mode = value;
|
||||
await this.plugin.saveSettings();
|
||||
await this.plugin.load_plugin();
|
||||
});
|
||||
});
|
||||
new import_obsidian.Setting(containerEl).setName("Custom CSS Mode").setDesc(
|
||||
"If you want to apply a custom css style rather than default style, choose this."
|
||||
).addToggle((toggle) => {
|
||||
toggle.setValue(this.plugin.settings.custom_css_mode);
|
||||
toggle.onChange(async (value) => {
|
||||
if (this.plugin.settings.custom_css_mode == false) {
|
||||
this.plugin.settings.custom_css = "";
|
||||
}
|
||||
this.plugin.settings.custom_css_mode = value;
|
||||
this.plugin.saveSettings();
|
||||
this.plugin.load_plugin();
|
||||
this.display();
|
||||
});
|
||||
});
|
||||
if (this.plugin.settings.custom_css_mode) {
|
||||
new import_obsidian.Setting(containerEl).setName("Custom CSS Style").setDesc("Input your custom css style. Use the font filename without extension (in lowercase) as the font-family name. For example, if your font file is 'MyFont.ttf', use 'myfont' in your CSS.").addTextArea(async (text) => {
|
||||
text.onChange(async (new_value) => {
|
||||
this.plugin.settings.custom_css = new_value;
|
||||
await this.plugin.saveSettings();
|
||||
await this.plugin.load_plugin();
|
||||
});
|
||||
text.setDisabled(!this.plugin.settings.custom_css_mode);
|
||||
if (this.plugin.settings.custom_css == "") {
|
||||
let font_family_name = "";
|
||||
try {
|
||||
font_family_name = this.plugin.settings.font.split(".")[0].toLowerCase();
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
if (font_family_name == "all") {
|
||||
if (await this.app.vault.adapter.exists(
|
||||
font_folder_path
|
||||
)) {
|
||||
const files = await this.app.vault.adapter.list(
|
||||
font_folder_path
|
||||
);
|
||||
let final_str = "";
|
||||
for (const file of files.files) {
|
||||
const file_name = file.split("/")[2];
|
||||
const font_family = file_name.split(".")[0].toLowerCase();
|
||||
final_str += "\n" + get_custom_css(
|
||||
font_family,
|
||||
"." + font_family
|
||||
);
|
||||
}
|
||||
text.setValue(final_str);
|
||||
}
|
||||
} else {
|
||||
const template = `/* Example CSS for your font: ${font_family_name} */
|
||||
|
||||
/* Apply to all text */
|
||||
:root * {
|
||||
--font-default: '${font_family_name}';
|
||||
--default-font: '${font_family_name}';
|
||||
--font-family-editor: '${font_family_name}';
|
||||
--font-interface-override: '${font_family_name}';
|
||||
--font-text-override: '${font_family_name}';
|
||||
}
|
||||
|
||||
/* Example: Apply to custom CSS class */
|
||||
.custom-font * {
|
||||
font-family: '${font_family_name}' !important;
|
||||
}
|
||||
|
||||
/* Example: Apply to specific elements only */
|
||||
.custom-font h1, .custom-font h2, .custom-font h3 {
|
||||
font-family: '${font_family_name}' !important;
|
||||
}`;
|
||||
text.setValue(template);
|
||||
}
|
||||
} else {
|
||||
text.setValue(this.plugin.settings.custom_css);
|
||||
}
|
||||
text.onChanged();
|
||||
text.inputEl.style.width = "100%";
|
||||
text.inputEl.style.height = "100px";
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/* nosourcemap */
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "custom-font-loader",
|
||||
"name": "Custom Font Loader",
|
||||
"version": "1.8.0",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "Customize your Obsidian vault with any font you want (+ Support for Android and IOS)",
|
||||
"author": "Amir Pourmand",
|
||||
"authorUrl": "https://amirpourmand.ir",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+4140
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "kanban-bases-view",
|
||||
"name": "Kanban Bases View",
|
||||
"version": "0.10.1",
|
||||
"minAppVersion": "1.10.2",
|
||||
"description": "A kanban-style drag-and-drop custom view for Bases.",
|
||||
"author": "I. Welch Canavan",
|
||||
"authorUrl": "https://welchcanavan.com",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+617
@@ -0,0 +1,617 @@
|
||||
/* Kanban View Container */
|
||||
.obk-view-container {
|
||||
container-type: inline-size;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Property Selector */
|
||||
.obk-property-selector {
|
||||
margin-bottom: 15px;
|
||||
padding: 10px;
|
||||
background: var(--background-secondary);
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.obk-property-label {
|
||||
font-weight: 500;
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.obk-property-select {
|
||||
padding: 6px 12px;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: 4px;
|
||||
background: var(--background-primary);
|
||||
color: var(--text-normal);
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.obk-property-select:hover {
|
||||
border-color: var(--interactive-hover);
|
||||
}
|
||||
|
||||
.obk-property-select:focus {
|
||||
outline: 2px solid var(--interactive-accent);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
/* Empty State */
|
||||
.obk-empty-state {
|
||||
padding: 40px 20px;
|
||||
text-align: center;
|
||||
color: var(--text-muted);
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Kanban Board */
|
||||
.obk-board {
|
||||
display: flex;
|
||||
gap: 15px;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
flex: 1;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.obk-board::-webkit-scrollbar {
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
.obk-board::-webkit-scrollbar-track {
|
||||
background: var(--background-secondary);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.obk-board::-webkit-scrollbar-thumb {
|
||||
background: var(--background-modifier-border);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.obk-board::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--background-modifier-border-hover);
|
||||
}
|
||||
|
||||
/* Swimlane mode: stack lanes vertically. The lane body becomes the
|
||||
horizontal column flex (replacing what .obk-board does in flat mode). */
|
||||
.obk-board--with-swimlanes {
|
||||
flex-direction: column;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.obk-swimlane {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: var(--background-secondary-alt);
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.obk-swimlane-header {
|
||||
padding: 8px 14px;
|
||||
background: var(--background-primary-alt);
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
font-weight: 600;
|
||||
font-size: 13px;
|
||||
color: var(--text-normal);
|
||||
text-transform: capitalize;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.obk-swimlane-count {
|
||||
font-size: 12px;
|
||||
color: var(--text-muted);
|
||||
background: var(--background-modifier-border);
|
||||
padding: 2px 8px;
|
||||
border-radius: 12px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.obk-swimlane-body {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
gap: 12px;
|
||||
overflow-x: auto;
|
||||
overflow-y: visible;
|
||||
padding: 12px;
|
||||
min-height: 140px;
|
||||
}
|
||||
|
||||
/* In swimlane mode, each lane grows tall enough to fit the fullest column,
|
||||
and shorter column bodies stretch to that height so their Sortable drop
|
||||
target spans the whole lane row. */
|
||||
.obk-board--with-swimlanes .obk-column {
|
||||
min-height: 0;
|
||||
max-height: none;
|
||||
height: auto;
|
||||
overflow: visible;
|
||||
align-self: stretch;
|
||||
}
|
||||
|
||||
.obk-board--with-swimlanes .obk-column-body {
|
||||
flex: 1 1 auto;
|
||||
max-height: none;
|
||||
overflow-y: visible;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
/* The outer container caps height in flat mode; release it in swimlane mode
|
||||
so the board grows to fit all lanes and the parent scroll-area scrolls. */
|
||||
.obk-view-container--with-swimlanes {
|
||||
overflow: visible;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/* Collapsed lane: cap the column body at about 30% less than the original
|
||||
420px height and scroll within the
|
||||
column. The lane and column themselves stay flexible — only the card
|
||||
container is capped. */
|
||||
.obk-swimlane--collapsed .obk-column-body {
|
||||
max-height: 294px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.obk-swimlane-toggle {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
padding: 0;
|
||||
color: var(--text-muted);
|
||||
background: var(--background-modifier-border);
|
||||
border: 0;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
--icon-size: var(--icon-xs);
|
||||
transition:
|
||||
background 0.1s ease,
|
||||
color 0.1s ease;
|
||||
}
|
||||
|
||||
.obk-swimlane-toggle:hover {
|
||||
color: var(--text-normal);
|
||||
background: var(--background-modifier-border-hover);
|
||||
}
|
||||
|
||||
.obk-swimlane-toggle:focus-visible {
|
||||
outline: 2px solid var(--background-modifier-border-focus);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
.obk-swimlane-drag-handle {
|
||||
cursor: grab;
|
||||
padding: 2px 4px;
|
||||
opacity: 0.5;
|
||||
user-select: none;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
color: var(--text-muted);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.obk-swimlane-drag-handle:hover {
|
||||
opacity: 1;
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.obk-swimlane-drag-handle:active {
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
||||
.obk-swimlane-dragging {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.obk-swimlane-ghost {
|
||||
opacity: 0.3;
|
||||
background: var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.obk-swimlane-body::-webkit-scrollbar {
|
||||
height: 8px;
|
||||
}
|
||||
.obk-swimlane-body::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
.obk-swimlane-body::-webkit-scrollbar-thumb {
|
||||
background: var(--background-modifier-border);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.obk-swimlane-body::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--background-modifier-border-hover);
|
||||
}
|
||||
|
||||
/* Kanban Column */
|
||||
.obk-column {
|
||||
--obk-column-accent-color: transparent;
|
||||
flex: 0 0 clamp(200px, 60cqw, 280px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: var(--background-secondary);
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
min-height: 200px;
|
||||
max-height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.obk-column-header {
|
||||
padding: 12px 16px;
|
||||
background: color-mix(in srgb, var(--obk-column-accent-color, transparent) 15%, var(--background-primary-alt));
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
flex-shrink: 0;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
/* Column color picker button */
|
||||
.obk-column-color-btn {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border-radius: 50%;
|
||||
border: 2px solid var(--background-modifier-border);
|
||||
background: var(--obk-column-accent-color, transparent);
|
||||
cursor: pointer;
|
||||
flex-shrink: 0;
|
||||
transition:
|
||||
transform 0.1s ease,
|
||||
border-color 0.1s ease;
|
||||
}
|
||||
|
||||
.obk-column-color-btn:hover {
|
||||
border-color: var(--text-muted);
|
||||
transform: scale(1.15);
|
||||
}
|
||||
|
||||
/* Color picker popover */
|
||||
.obk-column-color-popover {
|
||||
position: fixed;
|
||||
background: var(--background-primary);
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: 8px;
|
||||
padding: 8px;
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
flex-wrap: wrap;
|
||||
width: 164px;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.obk-column-color-swatch {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 50%;
|
||||
cursor: pointer;
|
||||
border: 2px solid transparent;
|
||||
transition:
|
||||
transform 0.1s ease,
|
||||
border-color 0.1s ease;
|
||||
}
|
||||
|
||||
.obk-column-color-swatch:hover {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
|
||||
.obk-column-color-swatch--active {
|
||||
border-color: var(--text-normal);
|
||||
}
|
||||
|
||||
.obk-column-color-none {
|
||||
background: var(--background-modifier-border);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.obk-column-color-none::before,
|
||||
.obk-column-color-none::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 10px;
|
||||
height: 1.5px;
|
||||
background: var(--text-muted);
|
||||
border-radius: 1px;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
.obk-column-color-none::before {
|
||||
transform: translate(-50%, -50%) rotate(45deg);
|
||||
}
|
||||
|
||||
.obk-column-color-none::after {
|
||||
transform: translate(-50%, -50%) rotate(-45deg);
|
||||
}
|
||||
|
||||
.obk-column-drag-handle {
|
||||
cursor: grab;
|
||||
padding: 4px;
|
||||
opacity: 0.5;
|
||||
user-select: none;
|
||||
font-size: 16px;
|
||||
line-height: 1;
|
||||
color: var(--text-muted);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.obk-column-drag-handle:hover {
|
||||
opacity: 1;
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.obk-column-drag-handle:active {
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
||||
.obk-column-title {
|
||||
flex: 1;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
color: var(--text-normal);
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.obk-column-count {
|
||||
font-size: 12px;
|
||||
color: var(--text-muted);
|
||||
background: color-mix(in srgb, var(--obk-column-accent-color, transparent) 15%, var(--background-modifier-border));
|
||||
padding: 2px 8px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.obk-column-add-btn,
|
||||
.obk-column-remove-btn {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
flex-shrink: 0;
|
||||
transition:
|
||||
background 0.1s ease,
|
||||
color 0.1s ease,
|
||||
opacity 0.1s ease;
|
||||
}
|
||||
|
||||
.obk-column-add-btn {
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
.obk-column:hover .obk-column-add-btn,
|
||||
.obk-column-add-btn:focus-visible {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.obk-column-add-btn:hover,
|
||||
.obk-column-remove-btn:hover {
|
||||
color: var(--text-normal);
|
||||
background: var(--background-modifier-hover);
|
||||
}
|
||||
|
||||
.obk-column-add-btn .svg-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.obk-column-remove-btn {
|
||||
font-size: 18px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.obk-column-body {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.obk-column-body::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
|
||||
.obk-column-body::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.obk-column-body::-webkit-scrollbar-thumb {
|
||||
background: var(--background-modifier-border);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.obk-column-body::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--background-modifier-border-hover);
|
||||
}
|
||||
|
||||
/* Kanban Card */
|
||||
.obk-card {
|
||||
background: var(--background-primary);
|
||||
border: 1px solid
|
||||
color-mix(in srgb, var(--obk-column-accent-color, transparent) 15%, var(--background-modifier-border));
|
||||
border-radius: 6px;
|
||||
padding: 12px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* targets touch-first devices (tablets, phones) to make the kanban genuinely usable on
|
||||
touch screens — any-pointer: coarse alone would also match hybrid devices (e.g.
|
||||
touchscreen laptops) where the primary pointer is still a mouse */
|
||||
@media (any-pointer: coarse) and (hover: none) {
|
||||
.obk-card {
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
}
|
||||
|
||||
.obk-card--hover {
|
||||
border-color: var(--interactive-accent);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.obk-card--active {
|
||||
border-color: var(--interactive-accent);
|
||||
box-shadow: 0 0 0 2px color-mix(in srgb, var(--interactive-accent) 25%, transparent);
|
||||
}
|
||||
|
||||
.obk-card-cover {
|
||||
display: block;
|
||||
/* Bleed the cover to the card's inner border edge. Card has padding: 12px,
|
||||
so we expand the width by 24px and pull the box out with negative margins.
|
||||
width: 100% alone only fills the content box and leaves a 12px gap on each side. */
|
||||
width: calc(100% + 24px);
|
||||
margin: -12px -12px 8px -12px;
|
||||
/* aspect-ratio is set inline from the imageAspectRatio config */
|
||||
overflow: hidden;
|
||||
border-top-left-radius: inherit;
|
||||
border-top-right-radius: inherit;
|
||||
}
|
||||
|
||||
.obk-card-cover img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.obk-card-cover--fit-cover img {
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.obk-card-cover--fit-contain img {
|
||||
object-fit: contain;
|
||||
background: var(--background-secondary);
|
||||
}
|
||||
|
||||
.obk-card-title {
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
color: var(--text-normal);
|
||||
line-height: 1.4;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.obk-card-preview {
|
||||
font-size: 12px;
|
||||
color: var(--text-muted);
|
||||
line-height: 1.4;
|
||||
margin-top: 6px;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 3;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.obk-card-property {
|
||||
font-size: var(--font-ui-smaller);
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.obk-card-property-wrap {
|
||||
white-space: normal;
|
||||
text-overflow: initial;
|
||||
}
|
||||
|
||||
.obk-card-property-wrap .obk-card-property-value {
|
||||
white-space: normal;
|
||||
text-overflow: initial;
|
||||
}
|
||||
|
||||
.obk-card-property-label {
|
||||
color: var(--text-muted);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.obk-card-property-value {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.obk-card-property-value p {
|
||||
display: inline;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.obk-quick-add-form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 14px;
|
||||
}
|
||||
|
||||
.obk-quick-add-input {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.obk-quick-add-actions {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
/* Drag and Drop States */
|
||||
.obk-card-dragging {
|
||||
opacity: 0.5;
|
||||
transform: rotate(2deg);
|
||||
}
|
||||
|
||||
.obk-card-ghost {
|
||||
opacity: 0.3;
|
||||
background: var(--interactive-accent);
|
||||
border-color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
.obk-card-chosen {
|
||||
cursor: grabbing;
|
||||
transform: rotate(2deg);
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
/* Column Drag and Drop States */
|
||||
.obk-column-dragging {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.obk-column-ghost {
|
||||
opacity: 0.3;
|
||||
background: var(--background-modifier-border);
|
||||
}
|
||||
|
||||
/* Sortable placeholder */
|
||||
.obk-sortable-ghost {
|
||||
opacity: 0.4;
|
||||
background: var(--interactive-accent);
|
||||
border: 2px dashed var(--interactive-accent);
|
||||
border-radius: 6px;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "obsidian-note-autocreator",
|
||||
"name": "Note Auto Creator",
|
||||
"version": "1.6.0",
|
||||
"minAppVersion": "0.14.2",
|
||||
"description": "Automatically create notes when links are created to them.",
|
||||
"author": "Simon T. Clement",
|
||||
"authorUrl": "https://github.com/SimonTC",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
.setting-item-control.setting-warning input {
|
||||
border-color: yellow;
|
||||
}
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"types": {
|
||||
"aliases": "aliases",
|
||||
"cssclasses": "multitext",
|
||||
"tags": "tags",
|
||||
"test": "checkbox"
|
||||
}
|
||||
}
|
||||
Vendored
+285
@@ -0,0 +1,285 @@
|
||||
{
|
||||
"main": {
|
||||
"id": "74c83563dd55f321",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "0e5588b193ba3ee1",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "57c7753ac9b7e484",
|
||||
"type": "leaf",
|
||||
"pinned": true,
|
||||
"state": {
|
||||
"type": "bases",
|
||||
"state": {
|
||||
"file": "_Tasks Kanban.base",
|
||||
"viewName": "View"
|
||||
},
|
||||
"pinned": true,
|
||||
"icon": "columns",
|
||||
"title": "_Tasks Kanban"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "35f91346f6b29f75",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "WebAssembly back to Azure.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "WebAssembly back to Azure"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "bc1064252754f309",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Fully Test the Build Calculator.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Fully Test the Build Calculator"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "91e064bf6d50d3fb",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Nice looking map refrence.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Nice looking map refrence"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "19394d1656ec83b7",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "AI Gen Docs/test-blazor-hydration-timing.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "test-blazor-hydration-timing"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 4
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "de5329d9cda83306",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "812749044d0e88b4",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "e1f279c107051222",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical",
|
||||
"autoReveal": false
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "Files"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "861082434268040e",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "Search"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "70d3dbf9b35be2f6",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "Bookmarks"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 200
|
||||
},
|
||||
"right": {
|
||||
"id": "dd7c1dc4bd54d927",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "95fd9fcedb0a127d",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "4822f1c518db08a5",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "_Tasks Kanban.base",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
"showSearch": false,
|
||||
"searchQuery": "",
|
||||
"backlinkCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-coming-in",
|
||||
"title": "Backlinks for _Tasks Kanban"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0647707c5f4e6cc0",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "_Tasks Kanban.base",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-going-out",
|
||||
"title": "Outgoing links from _Tasks Kanban"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "244210bbd68c3d20",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-tags",
|
||||
"title": "Tags"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "e34266da7cd941b7",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "all-properties",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-archive",
|
||||
"title": "All properties"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "8bb961a0412cb3dd",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "_Tasks Kanban.base",
|
||||
"followCursor": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of _Tasks Kanban"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "522176d80c764e53",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "calendar",
|
||||
"state": {},
|
||||
"icon": "calendar-with-checkmark",
|
||||
"title": "Calendar"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300,
|
||||
"collapsed": true
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false,
|
||||
"bases:Create new base": false
|
||||
}
|
||||
},
|
||||
"active": "19394d1656ec83b7",
|
||||
"lastOpenFiles": [
|
||||
"_Tasks Kanban.base",
|
||||
"AI Gen Docs/test-blazor-hydration-timing.md",
|
||||
"AI Gen Docs/test-toast-timing-interactions.md",
|
||||
"AI Gen Docs/test-accessibility-keyboard-nav.md",
|
||||
"AI Gen Docs/test-multi-context-entity-comparison.md",
|
||||
"AI Gen Docs/test-mobile-responsive.md",
|
||||
"AI Gen Docs/test-network-resilience.md",
|
||||
"Get AI to Add easy Test Tasks.md",
|
||||
"AI Gen Docs/test-visual-regression.md",
|
||||
"AI Gen Docs/test-storage-persistence.md",
|
||||
"AI Gen Tasks",
|
||||
"Nice looking map refrence.md",
|
||||
"Add some cooldown reference.md",
|
||||
"Language Support.md",
|
||||
"Improve your SEO.md",
|
||||
"Add Co-op objective reference.md",
|
||||
"Auto Build consideration in Calculator.md",
|
||||
"Fully Test the Build Calculator.md",
|
||||
"WebAssembly back to Azure.md",
|
||||
"Change Ctrl + K Hotkey to something that doesn't conflict with Edge or other browsers.md",
|
||||
"Make Tests for the Build Calculator.md",
|
||||
"Make Examples be based on Database Information.md",
|
||||
"Fix Entity Recursion Error - Parent.md",
|
||||
"Create Automated Tests.md",
|
||||
"Basic Build Order Sheet.md",
|
||||
"Add an Ability to Favourite Data.md",
|
||||
"AI Gen Docs/architecture.md",
|
||||
"AI Gen Docs"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user