Compare commits

...

36 commits

Author SHA1 Message Date
celeste
afbb3519f1 hehe 2025-03-19 22:53:10 -07:00
celeste
53ef92e076 bugfixes 2025-03-19 22:41:22 -07:00
celeste
518a90f587 Add Llama 3.1 405b (and remove cd2) autofill 2024-09-04 00:25:18 -07:00
celeste
93599ed192 Fix OpenRouter error reporting 2024-09-03 23:47:17 -07:00
celeste
788d91b2b1 Use cl100k for LLaMa 3.1 2024-09-03 21:23:25 -07:00
celeste
c624fd9282 Add HTTP-Referer/X-Title to OpenRouter 2024-09-03 20:10:38 -07:00
celeste
0aee3e1cff Add OpenRouter + other minor improvements 2024-09-03 20:07:46 -07:00
celeste
6dc19e3196 fix 405b 2024-08-28 20:18:45 -07:00
celeste
ba0fe89876 temporarily disable broken shift+click switch 2024-07-25 18:50:08 -07:00
celeste
aadf65783f this is a wild guess 2024-07-25 18:45:26 -07:00
celeste
a6341f64b5 bump version 2024-07-25 18:38:01 -07:00
celeste
1b7a7aba56
Merge pull request #18 from ampdot-io/compatibility
Improve compatibility with OpenAI-compatible APIs such as Together.ai
2024-07-25 18:35:17 -07:00
celeste
843c212b17
Merge branch 'master' into compatibility 2024-07-25 18:35:02 -07:00
ampdot-io
753e98a0dc
Bump manifest version 2024-07-25 18:27:03 -07:00
ampdot-io
5d089d6aa9
Bump manifest ver 2024-07-25 18:26:47 -07:00
celeste
3c01470388
Merge pull request #20 from socketteer/master
added system prompt and user message as loom settings and option to log requests to console
2024-05-25 18:38:15 -07:00
socketteer
a74d395d38 Merge remote-tracking branch 'upstream/master' 2024-05-05 18:34:15 -04:00
socketteer
926724a881 add system prompt and user message options, logging option for anthropic 2024-05-05 18:26:03 -04:00
ampdot
aa1dba4992 Improve compatibility with Together.ai 2024-04-17 01:46:03 -04:00
celeste
d1bae1dcda
Merge pull request #17 from socketteer/master
parallel completions for anthropic api
2024-04-06 15:34:55 -04:00
socketteer
437ef9257f update version 2024-04-06 10:26:56 -07:00
socketteer
4885d53e00 multiple completions for Claude 2024-04-06 10:25:24 -07:00
Parafactual's Name on Git
52c92e67ff fix? 2024-04-06 00:48:55 -04:00
Parafactual's Name on Git
de8e539146 bump v 2024-04-06 00:38:28 -04:00
celeste
ef8c340e15
Merge pull request #15 from socketteer/master
Add Anthropic API and a few small fixes to generating behavior
2024-04-05 18:24:55 -04:00
socketteer
96040dbd64 add new node to parent based on prompt for those completions, not current generating node 2024-04-05 05:16:45 -07:00
socketteer
7c4e22fe76 remove generating loader if generation fails 2024-04-04 17:54:32 -07:00
socketteer
382ca9ac78 add claude 2024-04-04 17:50:49 -07:00
celeste
5d537e57c1 clean up selected and disabled attrs 2023-11-25 01:13:58 -06:00
celeste
861e455b07 fix preset selection in sidebar 2023-11-25 01:10:42 -06:00
celeste
d9c7cd65f9 fix best of ux 2023-11-22 04:12:04 -06:00
celeste
e685ede86e visibility checkboxes 2023-11-20 21:15:55 -06:00
celeste
7b04c99072 update version 2023-11-20 19:55:40 -06:00
celeste
e76ca602f3 fill in model details 2023-11-20 19:55:19 -06:00
celeste
c9ba9efc36 minor styling change 2023-11-20 19:43:12 -06:00
celeste
44d390a680 more preset fixes/improvements 2023-11-20 19:33:00 -06:00
7 changed files with 2393 additions and 1250 deletions

View file

@ -1,12 +1,24 @@
export const PROVIDERS = ["cohere", "textsynth", "ocp", "openai", "openai-chat", "azure", "azure-chat"]; export const PROVIDERS = [
"cohere",
"textsynth",
"openai-compat",
"openai",
"openai-chat",
"azure",
"azure-chat",
"anthropic",
"openrouter",
];
export type Provider = (typeof PROVIDERS)[number]; export type Provider = (typeof PROVIDERS)[number];
type ProviderProps = { type ProviderProps = {
"openai": { organization: string }; openai: { organization: string };
"openai-chat": { organization: string }; "openai-chat": { organization: string };
"ocp": { url: string }; "openai-compat": { url: string };
"azure": { url: string }; azure: { url: string };
"azure-chat": { url: string }; "azure-chat": { url: string };
anthropic: { url: string };
openrouter: { quantization: string };
}; };
type SharedPresetSettings = { type SharedPresetSettings = {
@ -17,16 +29,20 @@ type SharedPresetSettings = {
apiKey: string; apiKey: string;
}; };
export type ModelPreset<P extends Provider> = SharedPresetSettings & (P extends keyof ProviderProps ? ProviderProps[P] : {}) & { provider: P }; export type ModelPreset<P extends Provider> = SharedPresetSettings &
(P extends keyof ProviderProps ? ProviderProps[P] : {}) & { provider: P };
export interface LoomSettings { export interface LoomSettings {
passageFolder: string; passageFolder: string;
defaultPassageSeparator: string; defaultPassageSeparator: string;
defaultPassageFrontmatter: string; defaultPassageFrontmatter: string;
logApiCalls: boolean;
modelPresets: ModelPreset<Provider>[]; modelPresets: ModelPreset<Provider>[];
modelPreset: number; modelPreset: number;
visibility: Record<string, boolean>;
maxTokens: number; maxTokens: number;
temperature: number; temperature: number;
topP: number; topP: number;
@ -35,6 +51,8 @@ export interface LoomSettings {
prepend: string; prepend: string;
bestOf: number; bestOf: number;
n: number; n: number;
systemPrompt: string;
userMessage: string;
showSettings: boolean; showSettings: boolean;
showSearchBar: boolean; showSearchBar: boolean;
@ -42,7 +60,8 @@ export interface LoomSettings {
showExport: boolean; showExport: boolean;
} }
export const getPreset = (settings: LoomSettings) => settings.modelPresets[settings.modelPreset]; export const getPreset = (settings: LoomSettings) =>
settings.modelPresets[settings.modelPreset];
export type SearchResultState = "result" | "ancestor" | "none" | null; export type SearchResultState = "result" | "ancestor" | "none" | null;

2278
main.ts

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
{ {
"id": "loom", "id": "loom",
"name": "Loom", "name": "Loom",
"version": "1.19.2", "version": "1.22.6",
"minAppVersion": "0.15.0", "minAppVersion": "0.15.0",
"description": "Loom in Obsidian", "description": "Loom in Obsidian",
"author": "celeste", "author": "celeste",

175
package-lock.json generated
View file

@ -1,14 +1,15 @@
{ {
"name": "obsidian-loom", "name": "obsidian-loom",
"version": "1.17.0", "version": "1.21.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "obsidian-loom", "name": "obsidian-loom",
"version": "1.17.0", "version": "1.21.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@anthropic-ai/sdk": "^0.20.0",
"@codemirror/state": "^6.2.0", "@codemirror/state": "^6.2.0",
"@codemirror/view": "^6.9.3", "@codemirror/view": "^6.9.3",
"@types/lodash": "^4.14.191", "@types/lodash": "^4.14.191",
@ -34,6 +35,29 @@
"typescript": "4.7.4" "typescript": "4.7.4"
} }
}, },
"node_modules/@anthropic-ai/sdk": {
"version": "0.20.0",
"resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.20.0.tgz",
"integrity": "sha512-VpkVetFHQ31cendkcAGnZo08yWDJeo4jPRRtsNEgVKoF+NkzZDVktGvK4ZB7mhPrUQlCcjd4DzjijiWnZ4qIog==",
"dependencies": {
"@types/node": "^18.11.18",
"@types/node-fetch": "^2.6.4",
"abort-controller": "^3.0.0",
"agentkeepalive": "^4.2.1",
"form-data-encoder": "1.7.2",
"formdata-node": "^4.3.2",
"node-fetch": "^2.6.7",
"web-streams-polyfill": "^3.2.1"
}
},
"node_modules/@anthropic-ai/sdk/node_modules/@types/node": {
"version": "18.19.29",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.29.tgz",
"integrity": "sha512-5pAX7ggTmWZdhUrhRWLPf+5oM7F80bcKVCBbr0zwEkTNzTJL2CWQjznpFgHYy6GrzkYi2Yjy7DHKoynFxqPV8g==",
"dependencies": {
"undici-types": "~5.26.4"
}
},
"node_modules/@codemirror/state": { "node_modules/@codemirror/state": {
"version": "6.2.0", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.0.tgz", "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.0.tgz",
@ -194,8 +218,16 @@
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "16.18.12", "version": "16.18.12",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz",
"integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw=="
"dev": true },
"node_modules/@types/node-fetch": {
"version": "2.6.11",
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz",
"integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==",
"dependencies": {
"@types/node": "*",
"form-data": "^4.0.0"
}
}, },
"node_modules/@types/roman-numerals": { "node_modules/@types/roman-numerals": {
"version": "0.3.0", "version": "0.3.0",
@ -411,6 +443,17 @@
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
} }
}, },
"node_modules/abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
"dependencies": {
"event-target-shim": "^5.0.0"
},
"engines": {
"node": ">=6.5"
}
},
"node_modules/acorn": { "node_modules/acorn": {
"version": "8.8.2", "version": "8.8.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
@ -432,6 +475,17 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
} }
}, },
"node_modules/agentkeepalive": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
"integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
"dependencies": {
"humanize-ms": "^1.2.1"
},
"engines": {
"node": ">= 8.0.0"
}
},
"node_modules/ajv": { "node_modules/ajv": {
"version": "6.12.6", "version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@ -937,6 +991,14 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/event-target-shim": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
"engines": {
"node": ">=6"
}
},
"node_modules/fast-deep-equal": { "node_modules/fast-deep-equal": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@ -1083,6 +1145,31 @@
"node": ">= 6" "node": ">= 6"
} }
}, },
"node_modules/form-data-encoder": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
"integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="
},
"node_modules/formdata-node": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
"integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
"dependencies": {
"node-domexception": "1.0.0",
"web-streams-polyfill": "4.0.0-beta.3"
},
"engines": {
"node": ">= 12.20"
}
},
"node_modules/formdata-node/node_modules/web-streams-polyfill": {
"version": "4.0.0-beta.3",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
"integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==",
"engines": {
"node": ">= 14"
}
},
"node_modules/fs.realpath": { "node_modules/fs.realpath": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -1179,6 +1266,14 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/humanize-ms": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
"integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
"dependencies": {
"ms": "^2.0.0"
}
},
"node_modules/ignore": { "node_modules/ignore": {
"version": "5.2.4", "version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@ -1419,8 +1514,7 @@
"node_modules/ms": { "node_modules/ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
"dev": true
}, },
"node_modules/natural-compare": { "node_modules/natural-compare": {
"version": "1.4.0", "version": "1.4.0",
@ -1434,6 +1528,43 @@
"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
"dev": true "dev": true
}, },
"node_modules/node-domexception": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
"integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/jimmywarting"
},
{
"type": "github",
"url": "https://paypal.me/jimmywarting"
}
],
"engines": {
"node": ">=10.5.0"
}
},
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/obsidian": { "node_modules/obsidian": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.1.1.tgz", "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.1.1.tgz",
@ -1794,6 +1925,11 @@
"node": ">=8.0" "node": ">=8.0"
} }
}, },
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
},
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.4.0", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
@ -1858,6 +1994,11 @@
"node": ">=4.2.0" "node": ">=4.2.0"
} }
}, },
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
},
"node_modules/untildify": { "node_modules/untildify": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
@ -1888,6 +2029,28 @@
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz",
"integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==" "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg=="
}, },
"node_modules/web-streams-polyfill": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
"integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
"engines": {
"node": ">= 8"
}
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",

View file

@ -1,6 +1,6 @@
{ {
"name": "obsidian-loom", "name": "obsidian-loom",
"version": "1.19.2", "version": "1.22.6",
"description": "Loom in Obsidian", "description": "Loom in Obsidian",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
@ -24,6 +24,7 @@
"typescript": "4.7.4" "typescript": "4.7.4"
}, },
"dependencies": { "dependencies": {
"@anthropic-ai/sdk": "^0.20.0",
"@codemirror/state": "^6.2.0", "@codemirror/state": "^6.2.0",
"@codemirror/view": "^6.9.3", "@codemirror/view": "^6.9.3",
"@types/lodash": "^4.14.191", "@types/lodash": "^4.14.191",

View file

@ -82,6 +82,26 @@ body {
margin-bottom: 0.3em; margin-bottom: 0.3em;
} }
.loom__visibility {
margin-bottom: 0.7em;
}
.loom__visibility-item {
display: inline-flex;
align-items: center;
margin-right: 0.7em;
}
.loom__visibility-item-label {
font-size: var(--font-ui-small);
}
.loom__no-metavisibility {
color: var(--text-faint);
font-size: var(--font-ui-small);
margin: 0 0 0.5em 0.5em;
}
.loom__setting { .loom__setting {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -377,8 +397,9 @@ body {
background-color: var(--nav-item-background-active); background-color: var(--nav-item-background-active);
} }
.loom__new-preset-button { .loom__new-preset-buttons {
margin-right: 0.5em; display: flex;
gap: var(--size-4-2);
} }
.loom__no-preset-selected { .loom__no-preset-selected {

1129
views.ts

File diff suppressed because it is too large Load diff