vault backup: 2024-04-23 22:38:34

This commit is contained in:
2024-04-23 22:38:34 +02:00
parent cfa978b4f5
commit 2fa1bc928b
60 changed files with 14798 additions and 25499 deletions
+588 -298
View File
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -1,10 +1,11 @@
{
"id": "dataview",
"name": "Dataview",
"version": "0.5.64",
"version": "0.5.66",
"minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",
"authorUrl": "https://github.com/blacksmithgu",
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
"isDesktopOnly": false
}
+2 -1
View File
@@ -23,13 +23,14 @@
"showUnscheduledNestedTasks": true,
"showNow": true,
"showNext": true,
"pluginVersion": "0.20.2",
"pluginVersion": "0.20.3",
"showCompletedTasks": true,
"showSubtasksInTaskBlocks": true,
"icals": [],
"colorOverrides": [],
"editMode": "simple",
"copyOnDrag": false,
"releaseNotes": true,
"showDataviewMigrationWarning": false,
"unscheduledTasksHeight": 100
}
+24 -12
View File
@@ -34564,16 +34564,15 @@ var clockKey = "clocked";
var clockFormat = "YYYY-MM-DDTHH:mm:ss";
var reQueryAfterMillis = 200;
var icalRefreshIntervalMillis = 5 * 60 * 1e3;
var supportBanner = `I work on the plugin in my spare time, and I appreciate any kind of support!
\u2728 [Check out latest updates](https://github.com/ivan-lednev/obsidian-day-planner/releases)<br>
\u{1FAB2} [Report bugs and suggest features. Vote with a \u{1F44D} on issues that are important for you](https://github.com/ivan-lednev/obsidian-day-planner/issues)<br>
var supportBanner = `\u{1FAB2} [Report bugs and suggest features](https://github.com/ivan-lednev/obsidian-day-planner/issues)<br>
\u2753 [Ask questions](https://github.com/ivan-lednev/obsidian-day-planner/discussions/new?category=q-a)<br>
\u{1F44D} [Give thumbs up to issues important to you](https://github.com/ivan-lednev/obsidian-day-planner/issues)<br>
\u{1FA9B} [Submit pull-requests](./CONTRIBUTING.md)<br>
\u{1F4E7} <a href="mailto:bishop1860@gmail.com">Say thank you</a><br>
\u2764\uFE0F Support the project directly:
<a href="https://www.buymeacoffee.com/machineelf" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
You can disable these release notes in the settings tab.
`;
var icons = [
"any-key",
@@ -34672,7 +34671,8 @@ var defaultSettings = {
icals: [],
colorOverrides: [],
editMode: "simple",
copyOnDrag: false
copyOnDrag: false,
releaseNotes: true
};
var defaultSettingsForTests = {
...defaultSettings,
@@ -36035,7 +36035,7 @@ var ReleaseNotesModal = class extends import_obsidian3.Modal {
this.contentEl.createDiv({ cls: "releases" }, async (el) => {
await import_obsidian3.MarkdownRenderer.render(
this.plugin.app,
"## 0.21.0\n\n- \u{1F41E} Fix different hourglass emoji breaking task movement\n\n## 0.20.0\n\n### New features\n\n- \u2728 Color coding: you can define background color for blocks containing certain text in first line\n- \u2728 Weekly view now displays unscheduled tasks on top\n- \u2728 Advanced drag-and-drop editing does not require modifier keys any more, you pick current edit mode in timeline controls \n\n### Fixed issues\n\n- \u{1F41E} Fixed scheduling tasks for other days than today (by @Lunkle)\n- \u{1F41E} Pointer to current time is now more visible \n- \u{1F41E} Task summary in internet calendars is now displayed next to calendar name, to make it visible in short blocks\n\n## 0.19.1 - 0.19.6\n\n- \u{1F41E} Fix iOS crash\n- \u{1F41E} Fix performance on startup\n- \u{1F41E} Fix colorful timeline both for local & remote calendars\n- \u{1F41E} Fix planner not reacting to daily note creation\n- \u{1F41E} Fix displaying hover preview\n\n## 0.19.0\n\n### \u2728 New Feature: Internet Calendar Sync (Google, Outlook, iCloud)\n\n- This lets you display events from calendars like Google Calendar, iCloud Calendar, Outlook Calendar\n- You only need to add a link in the plugin settings to start displaying events from that calendar\n\nSee [README](https://github.com/ivan-lednev/obsidian-day-planner?tab=readme-ov-file#showing-internet-calendars) for details.\n\n## 0.18.0\n\n### \u2728 New features\n\n- Now hovering over a task with `Control` pressed will trigger a preview pop-up. This works great with the awesome [Hover Editor plugin](https://github.com/nothingislost/obsidian-hover-editor)\n- Now when you click on a task, if there is an open tab for that file, the plugin is going to reuse it\n\n## 0.17.2\n\n### \u{1F41E} Fixed issues\n\n- Fix creating tasks with drag-and-drop\n\n## 0.17.0\n\n### \u{1F4A5} Breaking changes\n\n- Now by default, if your Dataview souce filter is empty, tasks are pulled only from visible daily notes\n - Most people never touch this field, so the plugin is going to be lightning-fast by default\n - If you want to add other folders or tags as task sources, you can still do so by adding them explicitly\n\n### \u2728 New features\n\n- When dragging tasks from daily notes across days in the weekly view, they now get moved across files\n- There is now an option to hide completed tasks from timeline\n- There is now an option to hide subtasks from task blocks in the timeline\n\n### \u{1F41E} Fixed issues\n\n- New drag-and-drop operations can now be started immediately after previous ones\n- The plugin is much faster in the default use case (daily notes only)\n- You can use plain list items in daily notes again\n- Notifications work again\n- Unscheduled tasks now fit their contents\n\n### Acknowledgements\n\n- Big thanks to @weph for helping me figure out a good performance solution\n",
"## 0.20.1 - 0.20.3\n\n- \u{1F41E} add toggle to disable release notes (#399)\n- \u{1F41E} do not reset timeline position when it's already open (#289)\n- \u{1F41E} do not replace tab content when opening weekly view (#313)\n- \u{1F41E} fix status bar error breaking plugin\n- \u{1F41E} Move task on copy, instead of changing its size\n- \u{1F41E} Fix different hourglass emoji breaking task movement\n\n## 0.20.0\n\n### New features\n\n- \u2728 Color coding: you can define background color for blocks containing certain text in first line\n- \u2728 Weekly view now displays unscheduled tasks on top\n- \u2728 Advanced drag-and-drop editing does not require modifier keys any more, you pick current edit mode in timeline controls \n\n### Fixed issues\n\n- \u{1F41E} Fixed scheduling tasks for other days than today (by @Lunkle)\n- \u{1F41E} Pointer to current time is now more visible \n- \u{1F41E} Task summary in internet calendars is now displayed next to calendar name, to make it visible in short blocks\n\n## 0.19.1 - 0.19.6\n\n- \u{1F41E} Fix iOS crash\n- \u{1F41E} Fix performance on startup\n- \u{1F41E} Fix colorful timeline both for local & remote calendars\n- \u{1F41E} Fix planner not reacting to daily note creation\n- \u{1F41E} Fix displaying hover preview\n\n## 0.19.0\n\n### \u2728 New Feature: Internet Calendar Sync (Google, Outlook, iCloud)\n\n- This lets you display events from calendars like Google Calendar, iCloud Calendar, Outlook Calendar\n- You only need to add a link in the plugin settings to start displaying events from that calendar\n\nSee [README](https://github.com/ivan-lednev/obsidian-day-planner?tab=readme-ov-file#showing-internet-calendars) for details.\n\n## 0.18.0\n\n### \u2728 New features\n\n- Now hovering over a task with `Control` pressed will trigger a preview pop-up. This works great with the awesome [Hover Editor plugin](https://github.com/nothingislost/obsidian-hover-editor)\n- Now when you click on a task, if there is an open tab for that file, the plugin is going to reuse it\n\n## 0.17.2\n\n### \u{1F41E} Fixed issues\n\n- Fix creating tasks with drag-and-drop\n\n## 0.17.0\n\n### \u{1F4A5} Breaking changes\n\n- Now by default, if your Dataview souce filter is empty, tasks are pulled only from visible daily notes\n - Most people never touch this field, so the plugin is going to be lightning-fast by default\n - If you want to add other folders or tags as task sources, you can still do so by adding them explicitly\n\n### \u2728 New features\n\n- When dragging tasks from daily notes across days in the weekly view, they now get moved across files\n- There is now an option to hide completed tasks from timeline\n- There is now an option to hide subtasks from task blocks in the timeline\n\n### \u{1F41E} Fixed issues\n\n- New drag-and-drop operations can now be started immediately after previous ones\n- The plugin is much faster in the default use case (daily notes only)\n- You can use plain list items in daily notes again\n- Notifications work again\n- Unscheduled tasks now fit their contents\n\n### Acknowledgements\n\n- Big thanks to @weph for helping me figure out a good performance solution\n",
el,
"/",
this.plugin
@@ -36055,6 +36055,11 @@ var DayPlannerSettingsTab = class extends import_obsidian4.PluginSettingTab {
display() {
const { containerEl } = this;
containerEl.empty();
new import_obsidian4.Setting(containerEl).setName("Show release notes after update").addToggle(
(toggle) => toggle.setValue(this.plugin.settings().releaseNotes).onChange((value) => {
this.update({ releaseNotes: value });
})
);
new import_obsidian4.Setting(containerEl).setName("Round time to minutes").setDesc("While editing, tasks are going to get rounded to this number").addSlider(
(slider) => slider.setLimits(5, 20, 5).setValue(this.plugin.settings().snapStepMinutes).setDynamicTooltip().onChange((value) => {
this.update({ snapStepMinutes: value });
@@ -49057,7 +49062,7 @@ function createHooks({
const tasksForToday = derived(
[visibleTasks, currentTime],
([$visibleTasks, $currentTime]) => {
return $visibleTasks[getDayKey($currentTime)];
return $visibleTasks[getDayKey($currentTime)] || getEmptyRecordsForDay();
}
);
const editContext = useEditContext({
@@ -49139,7 +49144,7 @@ var DayPlanner = class extends import_obsidian12.Plugin {
super(...arguments);
this.initWeeklyLeaf = async () => {
await this.detachLeavesOfType(viewTypeWeekly);
await this.app.workspace.getLeaf(false).setViewState({
await this.app.workspace.getLeaf("tab").setViewState({
type: viewTypeWeekly,
active: true
});
@@ -49151,6 +49156,11 @@ var DayPlanner = class extends import_obsidian12.Plugin {
});
};
this.initTimelineLeaf = async () => {
const [firstExistingTimeline] = this.app.workspace.getLeavesOfType(viewTypeTimeline);
if (firstExistingTimeline) {
this.app.workspace.revealLeaf(firstExistingTimeline);
return;
}
await this.detachLeavesOfType(viewTypeTimeline);
await this.app.workspace.getRightLeaf(false).setViewState({
type: viewTypeTimeline,
@@ -49189,14 +49199,16 @@ var DayPlanner = class extends import_obsidian12.Plugin {
]);
}
handleNewPluginVersion() {
if (this.settings().pluginVersion === "0.20.2") {
if (this.settings().pluginVersion === "0.20.3") {
return;
}
this.settingsStore.update((previous) => ({
...previous,
pluginVersion: "0.20.2"
pluginVersion: "0.20.3"
}));
this.showReleaseNotes();
if (this.settings().releaseNotes) {
this.showReleaseNotes();
}
}
registerCommands() {
this.addCommand({
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-day-planner",
"name": "Day Planner",
"version": "0.20.2",
"version": "0.20.3",
"minAppVersion": "0.16.0",
"description": "A day planner with clean UI and readable syntax",
"author": "James Lynch, continued by Ivan Lednev",
+13 -3
View File
@@ -1,6 +1,7 @@
{
"folder": "5.Excalidraw",
"cropFolder": "",
"annotateFolder": "",
"embedUseExcalidrawFolder": false,
"templateFilePath": "Excalidraw/Template.excalidraw",
"scriptFolderPath": "Excalidraw/Scripts",
@@ -15,6 +16,8 @@
"drawingFilenameDateTime": "YYYY-MM-DD HH.mm.ss",
"useExcalidrawExtension": true,
"cropPrefix": "cropped_",
"annotatePrefix": "annotated_",
"annotatePreserveSize": false,
"previewImageType": "SVGIMG",
"allowImageCache": true,
"displayExportedImageIfAvailable": false,
@@ -29,6 +32,9 @@
"matchThemeTrigger": false,
"defaultMode": "normal",
"defaultPenMode": "never",
"penModeCrosshairVisible": false,
"renderImageInMarkdownReadingMode": false,
"renderImageInMarkdownToPDF": false,
"allowPinchZoom": false,
"allowWheelZoom": false,
"zoomToFitOnOpen": true,
@@ -56,6 +62,7 @@
"exportWithTheme": true,
"exportWithBackground": true,
"exportPaddingSVG": 10,
"exportEmbedScene": false,
"keepInSync": false,
"autoexportSVG": false,
"autoexportPNG": false,
@@ -68,6 +75,7 @@
"experimentalFileType": false,
"experimentalFileTag": "✏️",
"experimentalLivePreview": true,
"fadeOutExcalidrawMarkup": false,
"experimentalEnableFourthFont": false,
"experimantalFourthFont": "Virgil",
"fieldSuggester": true,
@@ -77,7 +85,7 @@
"library2": {
"type": "excalidrawlib",
"version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.0.25",
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.0.23",
"libraryItems": [
{
"status": "published",
@@ -34660,7 +34668,7 @@
"mdCSS": "",
"scriptEngineSettings": {},
"defaultTrayMode": false,
"previousRelease": "2.0.25",
"previousRelease": "2.1.5",
"showReleaseNotes": true,
"showNewVersionNotification": true,
"latexBoilerplate": "\\color{blue}",
@@ -35300,5 +35308,7 @@
}
},
"slidingPanesSupport": false,
"areaZoomLimit": 1
"areaZoomLimit": 1,
"longPressDesktop": 500,
"longPressMobile": 500
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-excalidraw-plugin",
"name": "Excalidraw",
"version": "2.0.25",
"version": "2.1.5",
"minAppVersion": "1.1.6",
"description": "An Obsidian plugin to edit and view Excalidraw drawings",
"author": "Zsolt Viczian",
File diff suppressed because one or more lines are too long
+5 -5
View File
@@ -1,20 +1,20 @@
{
"commitMessage": "vault backup: {{date}}",
"commitMessage": "vault backup: {{date}} from {{hostname}}",
"commitDateFormat": "YYYY-MM-DD HH:mm:ss",
"autoSaveInterval": 0,
"autoSaveInterval": 10,
"autoPushInterval": 0,
"autoPullInterval": 0,
"autoPullInterval": 10,
"autoPullOnBoot": true,
"disablePush": false,
"pullBeforePush": true,
"disablePopups": false,
"disablePopupsForNoChanges": false,
"disablePopupsForNoChanges": true,
"listChangedFilesInMessageBody": false,
"showStatusBar": true,
"updateSubmodules": false,
"syncMethod": "merge",
"customMessageOnAutoBackup": false,
"autoBackupAfterFileChange": false,
"autoBackupAfterFileChange": true,
"treeStructure": false,
"refreshSourceControl": true,
"basePath": "",
+3 -1
View File
@@ -21,6 +21,8 @@
"iconInFrontmatterEnabled": true,
"iconsBackgroundCheckEnabled": true,
"iconsInNotesEnabled": true,
"iconIdentifier": ":"
"iconIdentifier": ":",
"iconsInLinksEnabled": true,
"debugMode": false
}
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-icon-folder",
"name": "Iconize",
"version": "2.10.1",
"version": "2.11.13",
"minAppVersion": "0.9.12",
"description": "Add icons to anything you desire in Obsidian, including files, folders, and text.",
"author": "Florian Woelki",
+115 -110
View File
@@ -1,110 +1,115 @@
.iconize-title-icon {
max-width: var(--max-width);
width: var(--line-width);
margin-inline: var(--content-margin) !important;
}
.iconize-icon {
border: 1px solid transparent;
margin: 0px 4px 0px 0px;
display: flex;
align-self: center;
margin: auto 0;
}
.nav-folder-title,
.nav-file-title {
align-items: center;
}
.iconize-setting input[type='color'] {
margin: 0 6px;
}
.iconize-modal.prompt-results {
margin: 0;
overflow-y: auto;
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
}
.prompt .iconize-subheadline {
margin-top: 12px;
font-size: 12px;
color: gray;
grid-column-start: 1;
grid-column-end: 6;
}
@media (max-width: 640px) {
.iconize-modal.prompt-results {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.prompt .iconize-subheadline {
grid-column-end: 4;
}
}
.iconize-modal.prompt-results .suggestion-item {
cursor: pointer;
white-space: pre-wrap;
display: flex;
justify-content: flex-end;
align-items: center;
flex-direction: column-reverse;
text-align: center;
font-size: 13px;
color: var(--text-muted);
padding: 16px 8px;
line-break: auto;
word-break: break-word;
line-height: 1.3;
}
.iconize-modal.prompt-results
.suggestion-item.suggestion-item__center {
justify-content: center;
}
.iconize-icon-preview {
font-size: 22px;
}
.iconize-icon-preview img {
width: 16px;
height: 16px;
}
.iconize-icon-preview svg {
width: 24px;
height: 24px;
color: currentColor;
margin-bottom: 4px;
}
.iconize-dragover {
position: relative;
}
.iconize-dragover-el {
position: absolute;
width: 100%;
height: 100%;
color: var(--text-normal);
background-color: var(--background-secondary-alt);
display: flex;
align-items: center;
justify-content: center;
}
/* Custom rule modal. */
.iconize-custom-modal .modal-content {
display: flex;
align-items: center;
justify-content: center;
}
.iconize-custom-modal .modal-content input {
width: 100%;
margin-right: 0.5rem;
}
.iconize-title-icon {
max-width: var(--max-width);
width: var(--line-width);
margin-inline: var(--content-margin) !important;
}
.iconize-icon-in-link {
margin-right: var(--size-2-2);
display: inline-flex;
transform: translateY(13%);
}
.iconize-icon {
border: 1px solid transparent;
margin: 0px 4px 0px 0px;
display: flex;
align-self: center;
margin: auto 0;
}
.nav-folder-title,
.nav-file-title {
align-items: center;
}
.iconize-setting input[type='color'] {
margin: 0 6px;
}
.iconize-modal.prompt-results {
margin: 0;
overflow-y: auto;
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
}
.prompt .iconize-subheadline {
margin-top: 12px;
font-size: 12px;
color: gray;
grid-column-start: 1;
grid-column-end: 6;
}
@media (max-width: 640px) {
.iconize-modal.prompt-results {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.prompt .iconize-subheadline {
grid-column-end: 4;
}
}
.iconize-modal.prompt-results .suggestion-item {
cursor: pointer;
white-space: pre-wrap;
display: flex;
justify-content: flex-end;
align-items: center;
flex-direction: column-reverse;
text-align: center;
font-size: 13px;
color: var(--text-muted);
padding: 16px 8px;
line-break: auto;
word-break: break-word;
line-height: 1.3;
}
.iconize-modal.prompt-results .suggestion-item.suggestion-item__center {
justify-content: center;
}
.iconize-icon-preview {
font-size: 22px;
}
.iconize-icon-preview img {
width: 16px;
height: 16px;
}
.iconize-icon-preview svg {
width: 24px;
height: 24px;
color: currentColor;
margin-bottom: 4px;
}
.iconize-dragover {
position: relative;
}
.iconize-dragover-el {
position: absolute;
width: 100%;
height: 100%;
color: var(--text-normal);
background-color: var(--background-secondary-alt);
display: flex;
align-items: center;
justify-content: center;
}
/* Custom rule modal. */
.iconize-custom-modal .modal-content {
display: flex;
align-items: center;
justify-content: center;
}
.iconize-custom-modal .modal-content input {
width: 100%;
margin-right: 0.5rem;
}
+2 -1
View File
@@ -4,5 +4,6 @@
"date-picker-week-start": 1,
"archive-with-date": true,
"link-date-to-daily-note": true,
"date-colors": []
"date-colors": [],
"show-relative-date": true
}
+2 -2
View File
@@ -2,7 +2,6 @@
"devMode": false,
"ignoreCodeBlockRestrictions": false,
"preferredDateFormat": "YYYY-MM-DD",
"useUsDateInputOrder": false,
"firstWeekday": {
"index": 1,
"name": "Monday",
@@ -19,5 +18,6 @@
"buttonTemplates": [],
"excludedFolders": [
"templates"
]
],
"useUsDateInputOrder": false
}
File diff suppressed because one or more lines are too long
+3 -2
View File
@@ -1,11 +1,12 @@
{
"id": "obsidian-meta-bind-plugin",
"name": "Meta Bind",
"version": "0.12.5",
"version": "1.1.0",
"minAppVersion": "1.4.0",
"description": "Make your notes interactive with inline input fields, metadata displays, and buttons.",
"author": "Moritz Jung",
"authorUrl": "https://mprojectscode.github.io/",
"authorUrl": "https://www.moritzjung.dev/",
"fundingUrl": "https://github.com/sponsors/mProjectsCode",
"helpUrl": "https://www.moritzjung.dev/obsidian-meta-bind-plugin-docs/",
"isDesktopOnly": false
}
+230 -69
View File
@@ -4,6 +4,14 @@ body {
--mb-slider-spacing: 5px;
--mb-select-element-border-width: 5px;
--mb-date-input-year-input-width: 80px;
--mb-background-modifier-active: hsla(var(--interactive-accent-hsl), 0.15);
--mb-background-modifier-active-hover: hsla(var(--interactive-accent-hsl), 0.3);
--mb-input-type-select-text: var(--text-muted);
--mb-input-type-select-text-hover: var(--text-normal);
--mb-input-type-select-text-active: var(--text-normal);
--mb-input-type-select-text-active-hover: var(--text-normal);
}
/* Input Wrappers */
@@ -125,74 +133,56 @@ div.mb-view-wrapper {
/* Select Input */
.mb-select-input-element {
cursor: pointer;
padding: 5px;
margin: 5px 0 5px 0;
display: flex;
gap: var(--size-4-2);
align-items: center;
padding: var(--size-4-1) var(--size-4-2);
margin: var(--size-4-1) 0;
border-radius: var(--mb-border-radius);
border-left: var(--mb-select-element-border-width) solid transparent;
white-space: pre-wrap;
font-size: 16px;
min-width: 200px;
}
color: var(--mb-input-type-select-text);
.mb-select-input-element.is-selected {
border-left: var(--mb-select-element-border-width) solid var(--interactive-accent);
background: var(--background-secondary);
}
&.is-selected {
color: var(--mb-input-type-select-text-active);
background: var(--mb-background-modifier-active);
.mb-select-input-element:hover {
background: var(--background-secondary);
}
&:hover {
color: var(--mb-input-type-select-text-active-hover);
background: var(--mb-background-modifier-active-hover);
}
}
/* Date Input */
.mb-date-input-year-input[type='number'] {
width: var(--mb-date-input-year-input-width);
height: unset;
align-self: stretch;
}
&:hover {
color: var(--mb-input-type-select-text-hover);
background: var(--background-modifier-hover);
}
/* Input Element Group */
.mb-input-element-group {
display: inline-flex;
flex-direction: row;
}
&:not(.mb-mod-multi) > input[type='checkbox'] {
border-radius: 50%;
}
.mb-input-element-group .mb-input-element-group-element:focus {
z-index: 10;
& > input[type='checkbox'] {
margin: 0;
}
}
.mb-input-element-group .mb-input-element-group-element:first-child {
border-radius: var(--mb-border-radius) 0 0 var(--mb-border-radius);
}
.mb-input-element-group .mb-input-element-group-element:not(:first-child):not(:last-child) {
border-radius: 0;
}
.mb-input-element-group .mb-input-element-group-element:last-child {
border-radius: 0 var(--mb-border-radius) var(--mb-border-radius) 0;
}
/* SailKite small input fields so that line height is consistent */
/* https://discord.com/channels/1171444840257572935/1171444840257572939/1171562547212726403 */
/*.mb-input-element-group {*/
/* & > .mb-date-input-year-input[type='number'] {*/
/* padding-block: 0;*/
/* }*/
/* & > .mb-input-element-group-element {*/
/* height: 100%;*/
/* }*/
/*}*/
/* List Input */
.mb-list-input {
display: flex;
gap: var(--size-4-2);
}
.mb-list-input > div:has(> input) {
.mb-list-input > input {
flex-grow: 1;
}
.mb-list-input > textarea {
flex-grow: 1;
resize: vertical;
}
.mb-list-empty {
color: var(--text-faint);
}
@@ -201,15 +191,22 @@ div.mb-view-wrapper {
margin-bottom: var(--size-4-4);
display: flex;
flex-direction: column;
gap: var(--size-4-2);
gap: var(--size-4-1);
}
.mb-list-item {
display: flex;
}
padding: var(--size-4-1) var(--size-4-2);
border-radius: var(--mb-border-radius);
user-select: text;
.mb-list-item > span {
flex-grow: 1;
& > span {
flex-grow: 1;
}
&:hover {
background: var(--background-modifier-hover);
}
}
/* Inline List */
@@ -226,21 +223,19 @@ div.mb-view-wrapper {
padding-inline: var(--size-4-2);
padding-block: var(--size-4-1);
font-size: var(--font-ui-small);
vertical-align: bottom;
user-select: text;
&:not(:last-child) {
margin-right: var(--size-4-2);
}
& > .mb-inline-list-item-button {
border: none;
background: none;
padding: initial;
height: unset;
box-shadow: none;
&:hover {
color: var(--text-error);
}
&:hover {
border-color: var(--background-modifier-border-hover);
background-color: var(--background-modifier-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
}
@@ -254,7 +249,17 @@ div.mb-view-wrapper {
font-size: var(--font-ui-small);
&:hover {
color: var(--text-accent);
border-color: var(--background-modifier-border-hover);
background-color: var(--background-modifier-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
&:focus,
&:focus-visible {
box-shadow: 0 0 0 2px var(--background-modifier-border-focus);
color: var(--text-normal);
}
}
}
@@ -264,13 +269,25 @@ div.mb-view-wrapper {
background: var(--background-modifier-form-field);
border-radius: var(--mb-border-radius);
border: var(--mb-border-width) solid var(--background-modifier-border);
padding: 5px 5px 5px 7px;
cursor: pointer;
padding: var(--size-4-1) var(--size-4-2);
position: relative;
color: var(--text-normal);
display: inline-flex;
align-items: center;
gap: 5px;
gap: var(--size-4-1);
user-select: text;
&:hover {
border-color: var(--background-modifier-border-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
}
.mb-suggest-input > button {
padding: 0;
height: 20px;
}
.mb-suggest-text {
@@ -280,7 +297,7 @@ div.mb-view-wrapper {
/* Progress Bar Input */
.mb-progress-bar-input {
height: 32px;
height: var(--input-height);
width: 100%;
border-radius: var(--mb-border-radius);
border: var(--mb-border-width) solid var(--background-modifier-border);
@@ -293,7 +310,7 @@ div.mb-view-wrapper {
}
.mb-progress-bar-progress {
height: 32px;
height: 100%;
background: var(--color-accent);
border-radius: var(--mb-border-radius);
}
@@ -319,6 +336,14 @@ div.mb-view-wrapper {
right: var(--size-4-2);
}
/* Text Area Input */
.mb-input-textarea {
width: 100%;
height: 100px;
resize: vertical;
}
/* Card */
.mb-card {
padding: var(--size-4-2);
@@ -370,6 +395,107 @@ div.mb-view-wrapper {
gap: var(--size-4-4);
}
.mb-image-suggester-modal {
width: 80%;
}
.mb-image-card-image {
width: 100%;
height: fit-content;
max-height: 500px;
object-fit: contain;
}
.mb-image-card-text {
display: block;
margin: var(--size-4-2);
margin-bottom: var(--size-4-4);
}
.mb-image-card-footer {
display: flex;
align-items: center;
& > span {
padding-left: var(--size-4-2);
font-size: var(--font-ui-small);
color: var(--text-muted);
min-width: 0;
text-overflow-ellipsis: true;
flex: 1;
}
}
.mb-image-suggest-input {
background: var(--background-secondary);
border-radius: var(--mb-border-radius);
border: var(--mb-border-width) solid var(--background-modifier-border);
padding: var(--size-4-2);
width: 100%;
}
/* Time Input */
.mb-input-type-time {
input[type='time'] {
-webkit-app-region: no-drag;
background: var(--background-modifier-form-field);
border: var(--input-border-width) solid var(--background-modifier-border);
color: var(--text-normal);
font-family: inherit;
padding: var(--size-4-1) var(--size-4-2);
font-size: var(--font-ui-small);
border-radius: var(--input-radius);
outline: none;
&:hover {
border-color: var(--background-modifier-border-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
&:focus,
&:focus-visible {
box-shadow: 0 0 0 2px var(--background-modifier-border-focus);
}
}
}
/* Date Picker Input */
.date-picker-input {
background: var(--background-modifier-form-field);
border: var(--mb-border-width) solid var(--background-modifier-border);
color: var(--text-normal);
font-family: inherit;
padding: var(--size-4-1) var(--size-4-2);
font-size: var(--font-ui-small);
border-radius: var(--input-radius);
outline: none;
position: relative;
display: inline-flex;
align-items: center;
gap: 5px;
&:hover {
border-color: var(--background-modifier-border-hover);
transition:
box-shadow 0.15s ease-in-out,
border 0.15s ease-in-out;
}
&:focus,
&:focus-visible {
box-shadow: 0 0 0 2px var(--background-modifier-border-focus);
}
}
.date-picker-text {
display: inline-block;
}
/* Error */
.mb-error {
color: var(--text-error) !important;
@@ -507,10 +633,36 @@ th.mb-html-table-button-cell {
gap: var(--size-4-2);
}
.mb-flex-row > :first-child {
.mb-flex-row.mb-flex-row-stretch > :first-child {
flex: 1;
}
.mb-flex-row-reverse {
display: flex;
flex-direction: row-reverse;
justify-content: space-between;
align-items: center;
gap: var(--size-4-2);
}
.mb-flex-row-reverse.mb-flex-row-stretch > :last-child {
flex: 1;
}
.mb-full-width-text-input {
width: 100%;
}
.mb-full-width-text-input > input {
width: 100%;
}
.mb-full-width-text-input > textarea {
width: 100%;
height: 200px;
resize: vertical;
}
/* --- HIGHLIGHTING CLASSES --- */
.mb-highlight-test {
color: #00bfbc;
@@ -554,3 +706,12 @@ th.mb-html-table-button-cell {
.meta-bind-small-width > * {
width: 80px;
}
/* --- PUBLISH STUFF --- */
.published-container {
.mb-input-type-toggle > div {
display: inline-block;
vertical-align: sub;
}
}
+1 -1
View File
@@ -8,7 +8,7 @@
"setCancelledDate": true,
"autoSuggestInEditor": true,
"autoSuggestMinMatch": 0,
"autoSuggestMaxItems": 6,
"autoSuggestMaxItems": 12,
"provideAccessKeys": true,
"useFilenameAsScheduledDate": true,
"filenameAsDateFolders": [],
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-tasks-plugin",
"name": "Tasks",
"version": "6.2.0",
"version": "7.0.0",
"minAppVersion": "1.1.1",
"description": "Task management for Obsidian",
"helpUrl": "https://publish.obsidian.md/tasks/",
File diff suppressed because one or more lines are too long
+9
View File
@@ -0,0 +1,9 @@
{
"pomodoro": 25,
"shortBreak": 5,
"longBreak": 15,
"group": 4,
"includeStats": true,
"includeShortBreak": true,
"includeLongBreak": true
}
+284
View File
@@ -0,0 +1,284 @@
/*
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: () => PomodoroPlanner
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var DEFAULT_SETTINGS = {
pomodoro: 25,
shortBreak: 5,
longBreak: 15,
group: 4,
includeStats: true,
includeShortBreak: false,
includeLongBreak: true
};
var PomodoroPlanner = class extends import_obsidian.Plugin {
async onload() {
await this.loadSettings();
this.addCommand({
id: "generate-pomodoro-plan",
name: "Generate",
editorCallback: async (editor) => {
await this.loadSettings();
new GeneratePomodoroPlan(this.app, this.settings, (result) => {
editor.replaceSelection(result);
}, () => {
this.saveSettings(this.settings);
}).open();
}
});
}
onunload() {
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings(settings) {
await this.saveData(settings);
}
};
var GeneratePomodoroPlan = class extends import_obsidian.Modal {
constructor(app, settings, onSubmit, saveSettings) {
super(app);
this.settings = settings;
const now = new Date();
this.start = `${now.getHours().toString().padStart(2, "0")}:${now.getMinutes().toString().padStart(2, "0")}`;
this.onSubmit = onSubmit;
this.saveSettings = saveSettings;
}
generatePomodoroPlan() {
this.resultMarkdown = "";
const startTime = parseTime(this.start);
const endTimeOrCount = parseTimeOrCount(this.end);
const pomodoro = this.settings.pomodoro;
const shortBreak = this.settings.shortBreak;
const longBreak = this.settings.longBreak;
const group = this.settings.group;
const includeStats = this.settings.includeStats;
const includeShortBreak = this.settings.includeShortBreak;
const includeLongBreak = this.settings.includeLongBreak;
let currentTime = startTime;
let groupCount = 0;
let totalRestTime = 0;
let pomodoroCount = 1;
while (willContinue(addMinutes(currentTime, pomodoro), pomodoroCount, endTimeOrCount)) {
this.resultMarkdown += `- [ ] ${formatTime(currentTime)} - ${formatTime(addMinutes(currentTime, this.settings.pomodoro))} Pomodoro #${pomodoroCount}
`;
currentTime = addMinutes(currentTime, pomodoro);
pomodoroCount++;
groupCount++;
if (groupCount === group) {
if (!willContinue(addMinutes(currentTime, longBreak + pomodoro), pomodoroCount, endTimeOrCount))
break;
if (includeLongBreak)
this.resultMarkdown += `- [ ] ${formatTime(currentTime)} - ${formatTime(addMinutes(currentTime, this.settings.longBreak))} Long Break
`;
currentTime = addMinutes(currentTime, longBreak);
totalRestTime += longBreak;
groupCount = 0;
} else {
if (!willContinue(addMinutes(currentTime, pomodoro + shortBreak), pomodoroCount, endTimeOrCount))
break;
if (includeShortBreak)
this.resultMarkdown += `- [ ] ${formatTime(currentTime)} - ${formatTime(addMinutes(currentTime, this.settings.shortBreak))} Short Break
`;
currentTime = addMinutes(currentTime, shortBreak);
totalRestTime += shortBreak;
}
}
if (pomodoroCount - 1 === 0) {
this.resultEl.setText("");
return;
}
if (includeStats) {
const totalWorkTimeHours = Math.floor(pomodoro * (pomodoroCount - 1) / 60);
const totalWorkTimeMinutes = pomodoro * (pomodoroCount - 1) % 60;
const totalRestTimeHours = Math.floor(totalRestTime / 60);
const totalRestTimeMinutes = totalRestTime % 60;
let info = "\n\n";
info += ` Total pomodoros: ${pomodoroCount - 1}
`;
info += ` Total work time: `;
if (totalWorkTimeHours > 0) {
info += `${totalWorkTimeHours} hours`;
if (totalWorkTimeMinutes > 0) {
info += `, ${totalWorkTimeMinutes} minutes`;
}
} else {
info += `${totalWorkTimeMinutes} minutes`;
}
info += `
`;
info += ` Total rest time: `;
if (totalRestTimeHours > 0) {
info += `${totalRestTimeHours} hours`;
if (totalRestTimeMinutes > 0) {
info += `, ${totalRestTimeMinutes} minutes`;
}
} else {
info += `${totalRestTimeMinutes} minutes`;
}
info += `
`;
this.resultMarkdown += info;
}
if (this.resultEl) {
this.resultEl.setText(this.resultMarkdown);
this.saveSettings(this.settings);
}
function willContinue(currentTime2, totalPomodoros, endTimeOrCount2) {
if (typeof endTimeOrCount2 == "number") {
return totalPomodoros <= endTimeOrCount2;
}
return currentTime2 <= endTimeOrCount2;
}
function parseTimeOrCount(timeOrCount) {
if (!timeOrCount) {
return 0;
}
const time = parseTime(timeOrCount);
if (!isNaN(time.getTime())) {
return time;
}
const count = parseInt(timeOrCount);
if (!isNaN(count)) {
return count;
}
new import_obsidian.Notice("Invalid time or count format");
return 0;
}
function parseTime(time) {
const [hours, minutes] = time.split(":").map(Number);
const now = new Date();
now.setHours(hours);
now.setMinutes(minutes);
return now;
}
function addMinutes(time, minutes) {
const newTime = new Date(time);
newTime.setMinutes(newTime.getMinutes() + minutes);
return newTime;
}
function formatTime(time) {
const hours = time.getHours().toString().padStart(2, "0");
const minutes = time.getMinutes().toString().padStart(2, "0");
return `${hours}:${minutes}`;
}
}
onOpen() {
const { contentEl } = this;
contentEl.createEl("h1", { text: "Generate Pomodoro Plan" });
new import_obsidian.Setting(contentEl).setName("End time or pomodoros count").setDesc("Set end time in HH:MM format or total pomodoros").addText(
(text) => text.setValue(this.end).onChange((value) => {
this.end = value;
this.generatePomodoroPlan();
})
);
new import_obsidian.Setting(contentEl).setName("Starting time").setDesc("The time to start the plan").addText(
(text) => text.setValue(this.start).onChange((value) => {
this.start = value;
this.generatePomodoroPlan();
})
);
new import_obsidian.Setting(contentEl).setName("Pomodoro length (minutes)").setDesc("The length of a pomodoro").addText(
(text) => text.setValue(this.settings.pomodoro.toString()).onChange((value) => {
if (!isNaN(parseInt(value))) {
this.settings.pomodoro = parseInt(value);
this.generatePomodoroPlan();
}
})
);
new import_obsidian.Setting(contentEl).setName("Short break (minutes)").setDesc("After each pomodoro finished, a short break will be taken.").addText(
(text) => text.setValue(this.settings.shortBreak.toString()).onChange((value) => {
if (!isNaN(parseInt(value))) {
this.settings.shortBreak = parseInt(value);
this.generatePomodoroPlan();
}
})
);
new import_obsidian.Setting(contentEl).setName("Long break (minutes)").setDesc("After each group finished, a long break will be taken.").addText(
(text) => text.setValue(this.settings.longBreak.toString()).onChange((value) => {
if (!isNaN(parseInt(value))) {
this.settings.longBreak = parseInt(value);
this.generatePomodoroPlan();
}
})
);
new import_obsidian.Setting(contentEl).setName("Group size (pomodoros)").setDesc("Long break will be taken after each group").addText(
(text) => text.setValue(this.settings.group.toString()).onChange((value) => {
if (!isNaN(parseInt(value))) {
this.settings.group = parseInt(value);
this.generatePomodoroPlan();
}
})
);
new import_obsidian.Setting(contentEl).setName("Include short break in plan").addToggle(
(toggle) => toggle.setValue(this.settings.includeShortBreak).onChange((value) => {
this.settings.includeShortBreak = value;
this.generatePomodoroPlan();
})
);
new import_obsidian.Setting(contentEl).setName("Include long break in plan").addToggle(
(toggle) => toggle.setValue(this.settings.includeLongBreak).onChange((value) => {
this.settings.includeLongBreak = value;
this.generatePomodoroPlan();
})
);
new import_obsidian.Setting(contentEl).setName("Include stats in plan").addToggle(
(toggle) => toggle.setValue(this.settings.includeStats).onChange((value) => {
this.settings.includeStats = value;
this.generatePomodoroPlan();
})
);
this.resultEl = contentEl.createEl("pre");
new import_obsidian.Setting(contentEl).addButton(
(btn) => btn.setButtonText("Insert into editor").setCta().onClick(() => {
if (this.resultMarkdown == "") {
new import_obsidian.Notice("Please generate the plan first");
return;
}
this.close();
this.onSubmit(this.resultMarkdown);
})
).addButton(
(btn) => btn.setButtonText("Copy to clipboard").onClick(() => {
if (this.resultMarkdown == "") {
new import_obsidian.Notice("Please generate the plan first");
return;
}
navigator.clipboard.writeText(this.resultMarkdown);
new import_obsidian.Notice("Copied to clipboard");
})
);
this.generatePomodoroPlan();
}
onClose() {
const { contentEl } = this;
contentEl.empty();
}
};
+10
View File
@@ -0,0 +1,10 @@
{
"id": "pomodoro-planner",
"name": "Pomodoro Planner",
"version": "1.0.7",
"minAppVersion": "0.15.0",
"description": "Generates a pomodoro schedule plan",
"author": "Onur Nesvat",
"authorUrl": "https://onurnesvat.com",
"isDesktopOnly": false
}
+18
View File
@@ -0,0 +1,18 @@
{
"workLen": 25,
"breakLen": 5,
"autostart": true,
"useStatusBarTimer": true,
"notificationSound": true,
"customSound": "",
"showTaskProgress": true,
"enableTaskTracking": true,
"logFile": "FILE",
"logFocused": true,
"logPath": "Pomodoro_Log",
"logLevel": "ALL",
"logTemplate": "<%*\nif (log.mode == \"WORK\") {\n if (!log.finished) {\n tR = `🟡 Focused ${log.task.name} ${log.duration} / ${log.session} minutes`;\n } else {\n tR = `🍅 Focused ${log.task.name} ${log.duration} minutes`;\n }\n} else {\n tR = `☕️ Took a break from ${log.begin.format(\"HH:mm\")} to ${log.end.format(\n \"HH:mm\"\n )}`;\n}\n%>",
"logFormat": "CUSTOM",
"useSystemNotification": false,
"taskFormat": "TASKS"
}
File diff suppressed because one or more lines are too long
+11
View File
@@ -0,0 +1,11 @@
{
"id": "pomodoro-timer",
"name": "Pomodoro Timer",
"version": "1.2.0",
"minAppVersion": "0.15.0",
"description": "A pomodoro timer that helps manage your daily focus",
"author": "eatgrass",
"fundingUrl": "https://www.buymeacoffee.com/eatgrass",
"authorUrl": "https://github.com/eatgrass",
"isDesktopOnly": false
}
+40
View File
@@ -0,0 +1,40 @@
/*
This CSS file will be included with your plugin, and
available in the app when your plugin is enabled.
If your plugin does not need CSS, delete this file.
*/
.theme-light,
.theme-dark {
--pomodoro-timer-elapsed-color: var(--color-green);
--pomodoro-timer-color: var(--text-faint);
--pomodoro-timer-text-color: var(--text-normal);
--pomodoro-timer-dot-color: var(--color-red);
}
.status-bar-item.plugin-pomodoro-timer {
padding-top: 0;
padding-bottom: 0;
}
.pomodoro-focus {
margin-left: 0.5rem;
cursor: pointer;
}
.pomodoro-tasks-item-desc * {
font-size: 0.8rem !important;
}
.pomodoro-tasks-item-desc p {
width: 100%;
line-height: 1.1;
height: 2.2em;
padding: 0;
margin: 0;
overflow: hidden;
line-break: anywhere;
}
+59 -1
View File
@@ -5,7 +5,7 @@
"name": "Participantes",
"type": "Template",
"command": false,
"templatePath": "6.Templates/Participantes.md",
"templatePath": "6.Templates/Participants.md",
"fileNameFormat": {
"enabled": false,
"format": ""
@@ -29,6 +29,64 @@
"openFileInMode": "default",
"fileExistsMode": "Increment the file name",
"setFileExistsBehavior": false
},
{
"id": "2bee6624-a692-441d-ac43-a46c6a4bdb10",
"name": "Request",
"type": "Template",
"command": false,
"templatePath": "6.Templates/RequestResponse_Doc.md",
"fileNameFormat": {
"enabled": false,
"format": ""
},
"folder": {
"enabled": true,
"folders": [
"3.Projects/0.Work/0.Chakray/1.Clientes/1.IOX/6.Request"
],
"chooseWhenCreatingNote": false,
"createInSameFolderAsActiveFile": false,
"chooseFromSubfolders": false
},
"appendLink": false,
"openFileInNewTab": {
"enabled": false,
"direction": "vertical",
"focus": true
},
"openFile": true,
"openFileInMode": "default",
"fileExistsMode": "Increment the file name",
"setFileExistsBehavior": false
},
{
"id": "cc66c390-49df-4289-99c1-3a2b26122d4f",
"name": "Análisis",
"type": "Template",
"command": false,
"templatePath": "6.Templates/Análisis.md",
"fileNameFormat": {
"enabled": true,
"format": "{{DATE}}_{{name}}"
},
"folder": {
"enabled": true,
"folders": [],
"chooseWhenCreatingNote": false,
"createInSameFolderAsActiveFile": false,
"chooseFromSubfolders": false
},
"appendLink": true,
"openFileInNewTab": {
"enabled": false,
"direction": "vertical",
"focus": true
},
"openFile": false,
"openFileInMode": "default",
"fileExistsMode": "Append to the bottom of the file",
"setFileExistsBehavior": true
}
],
"macros": [
+1 -5
View File
@@ -20,15 +20,11 @@
},
{
"folder": "7.Participantes",
"template": "6.Templates/Participantes.md"
"template": "6.Templates/Participants.md"
},
{
"folder": "2.Notas_Reunión",
"template": "6.Templates/Meetings.md"
},
{
"folder": "1.Daily_Notes/2024/{{date:MM-MMMM}}",
"template": "6.Templates/Notas.md"
}
],
"syntax_highlighting": true,
+4 -4
View File
@@ -2,12 +2,12 @@
"fadeToggle": true,
"autoRefreshToggle": true,
"autoRefreshInterval": 900,
"renderDescription": true,
"renderDate": true,
"renderDescription": false,
"renderDate": false,
"renderDateIcon": true,
"renderProject": true,
"renderProject": false,
"renderProjectIcon": true,
"renderLabels": true,
"renderLabels": false,
"renderLabelsIcon": true,
"shouldWrapLinksInParens": false,
"debugLogging": false
File diff suppressed because one or more lines are too long
+3 -2
View File
@@ -1,10 +1,11 @@
{
"id": "todoist-sync-plugin",
"name": "Todoist Sync",
"version": "1.12.0",
"version": "1.13.0",
"minAppVersion": "1.0.0",
"description": "Materialize Todoist tasks within Obsidian notes.",
"author": "Jamie Brynes",
"authorUrl": "https://github.com/jamiebrynes7/obsidian-todoist-plugin",
"isDesktopOnly": false
"isDesktopOnly": false,
"fundingUrl": "https://www.buymeacoffee.com/jamiebrynes"
}
File diff suppressed because one or more lines are too long