Last Sync: 2026-06-05 03:26 (Mobile)

This commit is contained in:
choibk committed 2026-06-05 03:26:55 +09:00
1 parent 7583b9e7d6
commit 97b79b8de6
27 files changed
+7728 -6659

No files matched your search

+93 -46
View File
@@ -27,7 +27,7 @@ __export(main_exports, {
default: () => AdvancedCanvasPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian19 = require("obsidian");
var import_obsidian20 = require("obsidian");
// src/utils/icons-helper.ts
var import_obsidian = require("obsidian");
@@ -1661,6 +1661,7 @@ var DEFAULT_SETTINGS_VALUES = {
disableFontSizeRelativeToZoom: false,
canvasMetadataCompatibilityEnabled: true,
enableSingleNodeLinks: true,
enableSingleNodePopupReferenceCopy: false,
combineCustomStylesInDropdown: false,
nodeStylingFeatureEnabled: true,
customNodeStyleAttributes: [],
@@ -1814,7 +1815,12 @@ var SETTINGS = {
children: {
enableSingleNodeLinks: {
label: "Enable support for linking to a node using a [[wikilink]]",
description: "When enabled, you can link and embed a node using [[canvas-file#node-id]].",
description: 'When enabled, you can link and embed a node using [[canvas-file#node-id]] (Use the "Copy wikilink to node" command to get an id).',
type: "boolean"
},
enableSingleNodePopupReferenceCopy: {
label: "Show button to copy node [[wikilink]]",
description: "When enabled, the node popup will show a button to copy the [[wikilink]] of the node for easy reference in other notes.",
type: "boolean"
}
}
@@ -2205,6 +2211,7 @@ var AdvancedCanvasPluginSettingTab = class extends import_obsidian4.PluginSettin
display() {
const { containerEl } = this;
containerEl.empty();
containerEl.classList.add("ac-settings");
this.createKofiBanner(containerEl);
for (const [headingId, heading] of Object.entries(SETTINGS)) {
this.createFeatureHeading(
@@ -2249,7 +2256,7 @@ var AdvancedCanvasPluginSettingTab = class extends import_obsidian4.PluginSettin
const setting = new import_obsidian4.Setting(containerEl).setHeading().setClass("ac-settings-heading").setName(label).setDesc(description);
if (infoSection !== void 0) {
setting.addExtraButton(
(button) => button.setTooltip("Open github documentation").setIcon("info").onClick(async () => {
(button) => button.setTooltip("Open GitHub documentation").setIcon("info").onClick(async () => {
const anchor = activeDocument.createElement("a");
anchor.href = `${README_URL}#${infoSection}`;
anchor.target = "_blank";
@@ -3059,9 +3066,15 @@ var AdvancedCanvasEmbed = class extends import_obsidian7.Component {
if (canvasNode.type === "text") nodeContent = canvasNode.text;
else if (canvasNode.type === "group") nodeContent = `**Group Node:** ${canvasNode.label}`;
else if (canvasNode.type === "file") nodeContent = `**File Node:** ${canvasNode.file}`;
this.context.containerEl.classList.add("markdown-embed");
this.context.containerEl.empty();
await import_obsidian7.MarkdownRenderer.render(this.context.app, nodeContent, this.context.containerEl, this.file.path, this);
this.context.containerEl.classList.add("ac-card-embed");
if (canvasNode.color !== void 0) {
this.context.containerEl.classList.add("is-themed");
this.context.containerEl.classList.add(`mod-canvas-color-${canvasNode.color}`);
}
const markdownContainer = this.context.containerEl.createSpan();
markdownContainer.classList.add("markdown-content");
await import_obsidian7.MarkdownRenderer.render(this.context.app, nodeContent, markdownContainer, this.file.path, this);
}
};
@@ -4483,7 +4496,45 @@ var EncapsulateCanvasExtension = class extends CanvasExtension {
};
// src/canvas-extensions/commands-canvas-extension.ts
var import_obsidian15 = require("obsidian");
// src/canvas-extensions/copy-node-reference-canvas-extension.ts
var import_obsidian14 = require("obsidian");
var CopyNodeReferenceCanvasExtension = class _CopyNodeReferenceCanvasExtension extends CanvasExtension {
isEnabled() {
return "enableSingleNodePopupReferenceCopy";
}
init() {
this.plugin.registerEvent(this.plugin.app.workspace.on(
"advanced-canvas:popup-menu-created",
(canvas) => this.onPopupMenuCreated(canvas)
));
}
onPopupMenuCreated(canvas) {
var _a;
const popupMenuEl = (_a = canvas == null ? void 0 : canvas.menu) == null ? void 0 : _a.menuEl;
if (!popupMenuEl) return;
const selectionData = canvas.getSelectionData();
if (selectionData.nodes.length !== 1 && selectionData.edges.length === 0) return;
const menuOption = {
id: "node-popup-menu-option-copy-reference",
label: "Copy wikilink to node",
icon: "link",
callback: () => _CopyNodeReferenceCanvasExtension.copyWikilinkToNode(canvas.view.file, selectionData.nodes[0])
};
const popupMenuOption = CanvasHelper.createPopupMenuOption(menuOption);
CanvasHelper.addPopupMenuOption(canvas, popupMenuOption);
}
static copyWikilinkToNode(file, nodeData) {
const nodeTypeString = TextHelper.toTitleCase(nodeData.type);
const wikilink = `[[${file.path}#${nodeData.id}|${file.name} (${nodeTypeString} node)]]`;
navigator.clipboard.writeText(wikilink).then(
() => new import_obsidian14.Notice("Copied wikilink to node to clipboard.", 2e3)
).catch(() => new import_obsidian14.Notice("Failed to copy wikilink to node to clipboard.", 2e3));
}
};
// src/canvas-extensions/commands-canvas-extension.ts
var DIRECTIONS = ["up", "down", "left", "right"];
var CommandsCanvasExtension = class extends CanvasExtension {
isEnabled() {
@@ -4655,10 +4706,7 @@ var CommandsCanvasExtension = class extends CanvasExtension {
if (!file) return;
const nodeData = canvas.getSelectionData().nodes[0];
if (!nodeData) return;
const wikilink = `[[${file.path}#${nodeData.id}|${file.name} (${TextHelper.toTitleCase(nodeData.type)} node)]]`;
navigator.clipboard.writeText(wikilink).then(
() => new import_obsidian14.Notice("Copied wikilink to node to clipboard.", 2e3)
).catch(() => new import_obsidian14.Notice("Failed to copy wikilink to node to clipboard.", 2e3));
CopyNodeReferenceCanvasExtension.copyWikilinkToNode(file, nodeData);
}
)
});
@@ -4690,7 +4738,7 @@ var CommandsCanvasExtension = class extends CanvasExtension {
if (!nodeOutgoingLinks) continue;
for (const nodeOutgoingLink of nodeOutgoingLinks) {
const resolvedLink = this.plugin.app.metadataCache.getFirstLinkpathDest(nodeOutgoingLink.link, relativeFile.path);
if (!(resolvedLink instanceof import_obsidian14.TFile)) continue;
if (!(resolvedLink instanceof import_obsidian15.TFile)) continue;
outgoingLinks.add(resolvedLink);
}
}
@@ -4726,7 +4774,7 @@ var CommandsCanvasExtension = class extends CanvasExtension {
if (!nodeBacklinks) continue;
for (const nodeBacklink of nodeBacklinks.data.keys()) {
const resolvedLink = this.plugin.app.metadataCache.getFirstLinkpathDest(nodeBacklink, file.path);
if (!(resolvedLink instanceof import_obsidian14.TFile)) continue;
if (!(resolvedLink instanceof import_obsidian15.TFile)) continue;
backlinks.add(resolvedLink);
}
}
@@ -4735,7 +4783,7 @@ var CommandsCanvasExtension = class extends CanvasExtension {
if (!canvasBacklinks) return;
for (const canvasBacklink of canvasBacklinks.data.keys()) {
const resolvedLink = this.plugin.app.metadataCache.getFirstLinkpathDest(canvasBacklink, canvasFile.path);
if (!(resolvedLink instanceof import_obsidian14.TFile)) continue;
if (!(resolvedLink instanceof import_obsidian15.TFile)) continue;
backlinks.add(resolvedLink);
}
}
@@ -5011,7 +5059,7 @@ var AutoResizeNodeCanvasExtension = class extends CanvasExtension {
};
// src/canvas-extensions/portals-canvas-extension.ts
var import_obsidian15 = require("obsidian");
var import_obsidian16 = require("obsidian");
var PORTAL_ID_DELIMITER = "||";
var PORTAL_ID_PREFIX = `acportal${PORTAL_ID_DELIMITER}`;
var PORTAL_PADDING = 50;
@@ -5073,7 +5121,7 @@ var PortalsCanvasExtension = class _PortalsCanvasExtension extends CanvasExtensi
setData(newData);
}).catch((error) => {
console.error("Error loading portal data:", error);
new import_obsidian15.Notice("An error occurred while loading portal data. Please check console for details.");
new import_obsidian16.Notice("An error occurred while loading portal data. Please check console for details.");
});
}
));
@@ -5153,13 +5201,13 @@ var PortalsCanvasExtension = class _PortalsCanvasExtension extends CanvasExtensi
onEdgeConnectionTryDraggingBefore(_canvas, edge, _event, cancelRef) {
if (!_PortalsCanvasExtension.isPortalElement(edge.id)) return;
cancelRef.value = true;
new import_obsidian15.Notice("Updating edges from portals is not supported yet.");
new import_obsidian16.Notice("Updating edges from portals is not supported yet.");
}
onEdgeConnectionDraggingAfter(canvas, edge, _event, _newEdge, _side, _previousEnds) {
if (_PortalsCanvasExtension.isPortalElement(edge.id)) return;
if (!_PortalsCanvasExtension.isPortalElement(edge.from.node.id) || !_PortalsCanvasExtension.isPortalElement(edge.to.node.id)) return;
canvas.removeEdge(edge);
new import_obsidian15.Notice("Creating edges with both ends in portals are not supported yet.");
new import_obsidian16.Notice("Creating edges with both ends in portals are not supported yet.");
}
onPopupMenu(canvas) {
if (canvas.readonly) return;
@@ -5246,7 +5294,7 @@ var PortalsCanvasExtension = class _PortalsCanvasExtension extends CanvasExtensi
if (nestedPortalFiles.has(portalNodeData.file)) return addedData;
nestedPortalFiles.add(portalNodeData.file);
const portalFile = this.plugin.app.vault.getAbstractFileByPath(portalNodeData.file);
if (!(portalFile instanceof import_obsidian15.TFile) || portalFile.extension !== "canvas") return addedData;
if (!(portalFile instanceof import_obsidian16.TFile) || portalFile.extension !== "canvas") return addedData;
const portalFileDataString = await this.plugin.app.vault.cachedRead(portalFile);
if (portalFileDataString === "") return addedData;
const portalFileData = JSON.parse(portalFileDataString);
@@ -5337,7 +5385,7 @@ var PortalsCanvasExtension = class _PortalsCanvasExtension extends CanvasExtensi
};
// src/canvas-extensions/frontmatter-control-button-canvas-extension.ts
var import_obsidian16 = require("obsidian");
var import_obsidian17 = require("obsidian");
var FrontmatterControlButtonCanvasExtension = class extends CanvasExtension {
isEnabled() {
return "canvasMetadataCompatibilityEnabled";
@@ -5363,7 +5411,7 @@ var FrontmatterControlButtonCanvasExtension = class extends CanvasExtension {
var _a2;
const propertiesPlugin = this.plugin.app.internalPlugins.plugins["properties"];
if (!(propertiesPlugin == null ? void 0 : propertiesPlugin._loaded)) {
new import_obsidian16.Notice(`Core plugin "Properties view" was not found or isn't enabled. Enable it and restart Obsidian.`);
new import_obsidian17.Notice(`Core plugin "Properties view" was not found or isn't enabled. Enable it and restart Obsidian.`);
return;
}
let propertiesLeaf = (_a2 = this.plugin.app.workspace.getLeavesOfType("file-properties").first()) != null ? _a2 : null;
@@ -5610,7 +5658,7 @@ var ColorPaletteCanvasExtension = class extends CanvasExtension {
};
// src/canvas-extensions/collapsible-groups-canvas-extension.ts
var import_obsidian17 = require("obsidian");
var import_obsidian18 = require("obsidian");
var CollapsibleGroupsCanvasExtension = class extends CanvasExtension {
isEnabled() {
return "collapsibleGroupsFeatureEnabled";
@@ -5658,7 +5706,7 @@ var CollapsibleGroupsCanvasExtension = class extends CanvasExtension {
(_a = groupNode.collapseEl) == null ? void 0 : _a.remove();
const collapseEl = activeDocument.createElement("div");
collapseEl.className = "collapse-button";
(0, import_obsidian17.setIcon)(collapseEl, groupNodeData.collapsed ? "plus-circle" : "minus-circle");
(0, import_obsidian18.setIcon)(collapseEl, groupNodeData.collapsed ? "plus-circle" : "minus-circle");
collapseEl.onclick = () => this.toggleCollapseGroup(canvas, groupNode);
groupNode.collapseEl = collapseEl;
(_b = groupNode.labelEl) == null ? void 0 : _b.insertAdjacentElement("afterend", collapseEl);
@@ -6746,7 +6794,7 @@ async function toPng(node, options = {}) {
}
// src/canvas-extensions/export-canvas-extension.ts
var import_obsidian18 = require("obsidian");
var import_obsidian19 = require("obsidian");
var MAX_ALLOWED_LOADING_TIME = 1e4;
var ExportCanvasExtension = class extends CanvasExtension {
isEnabled() {
@@ -6782,7 +6830,7 @@ var ExportCanvasExtension = class extends CanvasExtension {
});
}
async showExportImageSettingsModal(canvas, nodesToExport) {
const modal = new import_obsidian18.Modal(this.plugin.app);
const modal = new import_obsidian19.Modal(this.plugin.app);
modal.setTitle("Export image settings");
let pixelRatioSetting = null;
let noFontExportSetting = null;
@@ -6800,7 +6848,7 @@ var ExportCanvasExtension = class extends CanvasExtension {
}
};
let svg = false;
new import_obsidian18.Setting(modal.contentEl).setName("Export file format").setDesc("Choose the file format to export the canvas as.").addDropdown(
new import_obsidian19.Setting(modal.contentEl).setName("Export file format").setDesc("Choose the file format to export the canvas as.").addDropdown(
(dropdown) => dropdown.addOptions({
png: "PNG",
svg: "SVG"
@@ -6810,33 +6858,33 @@ var ExportCanvasExtension = class extends CanvasExtension {
})
);
let pixelRatioFactor = 1;
pixelRatioSetting = new import_obsidian18.Setting(modal.contentEl).setName("Pixel ratio").setDesc("Higher pixel ratios result in higher resolution images but also larger file sizes.").addSlider(
pixelRatioSetting = new import_obsidian19.Setting(modal.contentEl).setName("Pixel ratio").setDesc("Higher pixel ratios result in higher resolution images but also larger file sizes.").addSlider(
(slider) => slider.setDynamicTooltip().setLimits(0.2, 5, 0.1).setValue(pixelRatioFactor).onChange((value) => pixelRatioFactor = value)
);
let noFontExport = true;
noFontExportSetting = new import_obsidian18.Setting(modal.contentEl).setName("Skip font export").setDesc("This will not include the fonts in the exported SVG. This will make the SVG file smaller.").addToggle(
noFontExportSetting = new import_obsidian19.Setting(modal.contentEl).setName("Skip font export").setDesc("This will not include the fonts in the exported SVG. This will make the SVG file smaller.").addToggle(
(toggle) => toggle.setValue(noFontExport).onChange((value) => noFontExport = value)
);
let theme = activeDocument.body.classList.contains("theme-dark") ? "dark" : "light";
new import_obsidian18.Setting(modal.contentEl).setName("Theme").setDesc("The theme used for the export.").addDropdown(
new import_obsidian19.Setting(modal.contentEl).setName("Theme").setDesc("The theme used for the export.").addDropdown(
(dropdown) => dropdown.addOptions({
light: "Light",
dark: "Dark"
}).setValue(theme).onChange((value) => theme = value)
);
let watermark = false;
new import_obsidian18.Setting(modal.contentEl).setName("Show logo").setDesc("This will add an Obsidian + Advanced Canvas logo to the bottom left.").addToggle(
new import_obsidian19.Setting(modal.contentEl).setName("Show logo").setDesc("This will add an Obsidian + Advanced Canvas logo to the bottom left.").addToggle(
(toggle) => toggle.setValue(watermark).onChange((value) => watermark = value)
);
let garbledText = false;
new import_obsidian18.Setting(modal.contentEl).setName("Privacy mode").setDesc("This will obscure any text on your canvas.").addToggle(
new import_obsidian19.Setting(modal.contentEl).setName("Privacy mode").setDesc("This will obscure any text on your canvas.").addToggle(
(toggle) => toggle.setValue(garbledText).onChange((value) => garbledText = value)
);
let transparentBackground = false;
transparentBackgroundSetting = new import_obsidian18.Setting(modal.contentEl).setName("Transparent background").setDesc("This will make the background of the image transparent.").addToggle(
transparentBackgroundSetting = new import_obsidian19.Setting(modal.contentEl).setName("Transparent background").setDesc("This will make the background of the image transparent.").addToggle(
(toggle) => toggle.setValue(transparentBackground).onChange((value) => transparentBackground = value)
);
new import_obsidian18.Setting(modal.contentEl).addButton(
new import_obsidian19.Setting(modal.contentEl).addButton(
(button) => button.setButtonText("Save").setCta().onClick(async () => {
modal.close();
await this.exportImage(
@@ -6870,7 +6918,7 @@ var ExportCanvasExtension = class extends CanvasExtension {
return nodesToExportIds.includes(edgeData.fromNode) && nodesToExportIds.includes(edgeData.toNode);
});
const backgroundColor = transparentBackground ? void 0 : window.getComputedStyle(canvas.canvasEl).getPropertyValue("--canvas-background");
new import_obsidian18.Notice("Exporting the canvas. Please wait...");
new import_obsidian19.Notice("Exporting the canvas. Please wait...");
const interactionBlocker = this.getInteractionBlocker();
activeDocument.body.appendChild(interactionBlocker);
canvas.screenshotting = true;
@@ -6971,7 +7019,7 @@ var ExportCanvasExtension = class extends CanvasExtension {
downloadEl.click();
} else {
const ERROR_MESSAGE = "Export cancelled: Nodes did not finish loading in time";
new import_obsidian18.Notice(ERROR_MESSAGE);
new import_obsidian19.Notice(ERROR_MESSAGE);
console.error(ERROR_MESSAGE);
}
} finally {
@@ -7296,16 +7344,14 @@ var EdgeExposerExtension = class extends CanvasExtension {
for (const exposedDataKey of getExposedEdgeData(this.plugin.settings)) {
const datasetPairs = edgeData[exposedDataKey] && typeof edgeData[exposedDataKey] === "object" ? Object.entries(edgeData[exposedDataKey]) : [[exposedDataKey, edgeData[exposedDataKey]]];
for (const [key, value] of datasetPairs) {
const stringifiedKey = JSON.stringify(key);
if (!stringifiedKey) continue;
if (!value) {
delete edge.path.display.dataset[stringifiedKey];
if ((_a = edge.fromLineEnd) == null ? void 0 : _a.el) delete edge.fromLineEnd.el.dataset[stringifiedKey];
if ((_b = edge.toLineEnd) == null ? void 0 : _b.el) delete edge.toLineEnd.el.dataset[stringifiedKey];
delete edge.path.display.dataset[key];
if ((_a = edge.fromLineEnd) == null ? void 0 : _a.el) delete edge.fromLineEnd.el.dataset[key];
if ((_b = edge.toLineEnd) == null ? void 0 : _b.el) delete edge.toLineEnd.el.dataset[key];
} else {
edge.path.display.dataset[stringifiedKey] = JSON.stringify(value);
if ((_c = edge.fromLineEnd) == null ? void 0 : _c.el) edge.fromLineEnd.el.dataset[stringifiedKey] = JSON.stringify(value);
if ((_d = edge.toLineEnd) == null ? void 0 : _d.el) edge.toLineEnd.el.dataset[stringifiedKey] = JSON.stringify(value);
edge.path.display.dataset[key] = value;
if ((_c = edge.fromLineEnd) == null ? void 0 : _c.el) edge.fromLineEnd.el.dataset[key] = value;
if ((_d = edge.toLineEnd) == null ? void 0 : _d.el) edge.toLineEnd.el.dataset[key] = value;
}
}
}
@@ -7423,10 +7469,10 @@ var PATCHERS = [
FileManagerPatcher,
// Direct metadata dependant patchers
PropertiesPatcher,
!(0, import_obsidian19.requireApiVersion)("1.12.0") && BacklinksPatcher,
!(0, import_obsidian20.requireApiVersion)("1.12.0") && BacklinksPatcher,
OutgoingLinksPatcher,
// Metadata dependant patchers
(0, import_obsidian19.requireApiVersion)("1.9.0") && BasesTableViewPatcher,
(0, import_obsidian20.requireApiVersion)("1.9.0") && BasesTableViewPatcher,
LinkSuggestionsPatcher,
EmbedPatcher,
SearchPatcher
@@ -7462,9 +7508,10 @@ var CANVAS_EXTENSIONS = [
ExportCanvasExtension,
FocusModeCanvasExtension,
EncapsulateCanvasExtension,
EdgeSelectionCanvasExtension
EdgeSelectionCanvasExtension,
CopyNodeReferenceCanvasExtension
];
var AdvancedCanvasPlugin = class extends import_obsidian19.Plugin {
var AdvancedCanvasPlugin = class extends import_obsidian20.Plugin {
async onload() {
IconsHelper.addIcons();
this.settings = new SettingsManager(this);
@@ -7496,7 +7543,7 @@ var AdvancedCanvasPlugin = class extends import_obsidian19.Plugin {
}).filter((canvas) => canvas);
}
getCurrentCanvasView() {
const canvasView = this.app.workspace.getActiveViewOfType(import_obsidian19.ItemView);
const canvasView = this.app.workspace.getActiveViewOfType(import_obsidian20.ItemView);
if ((canvasView == null ? void 0 : canvasView.getViewType()) !== "canvas") return null;
return canvasView;
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "advanced-canvas",
"name": "Advanced Canvas",
"version": "6.1.6",
"version": "6.2.0",
"minAppVersion": "1.7.2",
"description": "Supercharge your canvas experience! Create presentations, flowcharts and more!",
"author": "Developer-Mike",
+49 -17
View File
@@ -1,55 +1,55 @@
/* src/styles.scss */
.properties-field > .setting-item-info {
.ac-settings .properties-field > .setting-item-info {
flex: 0;
margin: 0;
padding: var(--size-4-1) var(--size-4-2);
border: var(--input-border-width) solid var(--background-modifier-border);
border-radius: var(--input-radius) 0 0 var(--input-radius);
}
.properties-field > .setting-item-control > input {
.ac-settings .properties-field > .setting-item-control > input {
width: 100%;
border-radius: 0 var(--input-radius) var(--input-radius) 0;
}
.ac-settings-heading:not(:first-child) {
.ac-settings .ac-settings-heading:not(:first-child) {
margin-top: var(--size-4-10) !important;
}
.ac-settings-heading:has(.checkbox-container:not(.is-enabled)) {
.ac-settings .ac-settings-heading:has(.checkbox-container:not(.is-enabled)) {
border-bottom-color: var(--background-modifier-border-hover);
}
.ac-settings-heading .setting-item-description {
.ac-settings .ac-settings-heading .setting-item-description {
margin-inline-end: 20px;
}
.settings-header-children {
.ac-settings .settings-header-children {
transform-origin: top center;
transform: scaleY(1);
transition: transform 0.2s ease-in-out;
}
.ac-settings-heading:has(.checkbox-container:not(.is-enabled)) + .settings-header-children {
.ac-settings .ac-settings-heading:has(.checkbox-container:not(.is-enabled)) + .settings-header-children {
opacity: 0.5;
pointer-events: none;
height: 0;
transform: scaleY(0);
}
.setting-item > .setting-item-control input[type=text] {
.ac-settings .setting-item > .setting-item-control input[type=text] {
width: 75px;
}
details.setting-item {
.ac-settings details.setting-item {
flex-direction: column;
align-items: initial;
}
details.setting-item:not([open]) {
.ac-settings details.setting-item:not([open]) {
row-gap: 0;
}
details.setting-item[open] {
.ac-settings details.setting-item[open] {
padding-bottom: var(--size-4-2);
}
details.setting-item[open] > summary {
.ac-settings details.setting-item[open] > summary {
margin-bottom: var(--size-4-2);
}
details.setting-item > *:not(summary) {
.ac-settings details.setting-item > *:not(summary) {
border: 1px solid var(--background-primary);
}
.kofi-banner {
.ac-settings .kofi-banner {
display: flex;
flex-direction: row;
align-items: center;
@@ -58,17 +58,17 @@ details.setting-item > *:not(summary) {
background-color: var(--background-primary-alt);
border-radius: var(--radius-m);
}
.kofi-banner .ac-kofi-banner-title {
.ac-settings .kofi-banner .ac-kofi-banner-title {
margin: 0;
font-size: var(--font-ui-small);
font-weight: 600;
}
.kofi-banner .ac-kofi-button {
.ac-settings .kofi-banner .ac-kofi-button {
width: min-content;
height: min-content;
line-height: 0;
}
.kofi-banner .ac-kofi-button img {
.ac-settings .kofi-banner .ac-kofi-button img {
min-width: 75px;
width: 25%;
max-width: 100px;
@@ -491,3 +491,35 @@ details.setting-item > *:not(summary) {
.canvas-node-interaction-layer[data-is-from-portal=true] .canvas-node-resizer .canvas-node-connection-point {
pointer-events: all;
}
.ac-card-embed {
display: flex;
flex-direction: column;
contain: strict;
overflow: hidden;
background-color: var(--background-primary);
border: 1px solid rgb(var(--canvas-color));
border-radius: var(--radius-m);
box-shadow: var(--shadow-stationary);
}
.ac-card-embed.is-themed {
background-color: rgba(var(--canvas-color), 0.07);
border-color: rgba(var(--canvas-color), 0.7);
box-shadow: inset 0 0 0 1px rgba(var(--canvas-color), 0.7), var(--shadow-stationary);
}
.ac-card-embed > .markdown-content {
position: relative;
overflow-y: auto;
overflow-wrap: break-word;
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
padding: 0 var(--size-4-4);
font-size: var(--font-text-size);
font-family: var(--font-text);
line-height: var(--line-height-normal);
color: var(--text-normal);
user-select: text;
-webkit-user-select: text;
scrollbar-gutter: stable;
}
+33 -44
View File
@@ -4,31 +4,21 @@
"type": "split",
"children": [
{
"id": "4de6e4e8f2d3eae9",
"id": "8c864a1a13e218c8",
"type": "tabs",
"children": [
{
"id": "7793305178417da9",
"id": "5777e4c663df3488",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "대검 현황.md",
"file": "30연대 26년도 예산.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "대검 현황"
}
},
{
"id": "6c10e3bc95a711fa",
"type": "leaf",
"state": {
"type": "empty",
"state": {},
"icon": "lucide-file",
"title": "새 탭"
"title": "30연대 26년도 예산"
}
}
]
@@ -59,7 +49,7 @@
"state": {
"type": "search",
"state": {
"query": "File:대검",
"query": "Section:임헌",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
@@ -110,7 +100,7 @@
}
},
{
"id": "a266ae39a6642653",
"id": "a6dccc22ecaeacfc",
"type": "leaf",
"state": {
"type": "file-explorer",
@@ -123,7 +113,7 @@
}
},
{
"id": "56597f278861a3d6",
"id": "beab859baf93e69a",
"type": "leaf",
"state": {
"type": "mk-path-view",
@@ -191,7 +181,7 @@
"state": {
"type": "file-properties",
"state": {
"file": "대검 현황.md"
"file": "30연대 26년도 예산.md"
},
"icon": "lucide-info",
"title": "파일 속성"
@@ -215,35 +205,34 @@
"notion-bases:Notion bases": false
}
},
"active": "7793305178417da9",
"active": "5777e4c663df3488",
"lastOpenFiles": [
"물자현황/대검.md",
"대검 현황.md",
"2026년 월력형 메모형 일정(2월).canvas",
"병영생활관 에어컨 교체소요.md",
"하계재난대비계획.md",
"방독면살균소독장비.md",
"은닉초과재산탄약회수활동.md",
"inbox/개인장구류 불출 문제발생.md",
"inbox/소방.md",
"매연측정.md",
"지휘관 교체 재물조사.md",
"성인지교육.md",
"inbox/사이버 보안 진단의 날 시행-1.md",
"inbox/보급품 수령 , 분배, 반납.md",
"월하약품불출.md",
"대형정수기 필터교체 업체방문.md",
"월하준비.md",
"시설물 정기 자체관리 대상시설 안전점검.md",
"대한민국 안전대전환 집중 안전점검.md",
"물자유지비 추가배정건의.md",
"30연대 26년도 예산.md",
"안전활동유공.md",
"장비.md",
"2026년 월력형 메모형 일정(2월).canvas",
"inbox/보급품 수령 , 분배, 반납.md",
"inbox/위임보수.md",
"총기관리.md",
"27~33장비불용결정계획.md",
"27저장화생방장비물자신뢰성평가대상품목보유현황.md",
"소방시설.md",
"혹서기일과.md",
"inbox/당직근무간 특이사항.md",
"26년 30연대 전술훈련평가 수검자료 정리.md",
"전술훈련평가.md",
"위생점검.md",
"일일결산.md",
"k2총기 편제 초과 조정 의견보고.md",
"하게 재난대비계획 기간.md",
"재해재난대비계획.md",
"재난안전통신망.md",
"재난관계관.md",
"하계재난대비계획.md",
"당직근무.md",
"대한민국 안전대전환 집중 안전점검.md",
"장비탄약 관리실태 현장확인 및 지도.md",
"inbox/25년 전투장비지휘검열-1.md",
"inbox/25년 전투장비지휘검열.md",
"장비정비.md",
"방독면살균소독장비.md",
"차량 2부제.md",
"월단위업무.md",
"files/24_result.pdf",
"2025년 월력형 메모형 일정.canvas",
"1778129959563.jpg",