Compare commits

...

11 commits
0.7.6 ... main

Author SHA1 Message Date
Erin Schnabel
5f0adac25b
Merge pull request #40 from ebullient/dependabot/npm_and_yarn/biomejs/biome-2.4.14
Bump @biomejs/biome from 2.4.11 to 2.4.14
2026-06-03 10:20:19 -04:00
Erin Schnabel
c782933af5
Merge pull request #38 from ebullient/dependabot/github_actions/actions/setup-node-6.4.0
Bump actions/setup-node from 6.3.0 to 6.4.0
2026-06-03 10:19:59 -04:00
dependabot[bot]
8c3379b349
Bump actions/setup-node from 6.3.0 to 6.4.0
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](53b83947a5...48b55a011b)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-03 14:18:30 +00:00
dependabot[bot]
83f0a61f28
Bump @biomejs/biome from 2.4.11 to 2.4.14
Bumps [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) from 2.4.11 to 2.4.14.
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.4.14/packages/@biomejs/biome)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.4.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-03 14:18:16 +00:00
Erin Schnabel
5ab47a954b
Merge pull request #37 from ebullient/dependabot/npm_and_yarn/typescript-6.0.3
Bump typescript from 6.0.2 to 6.0.3
2026-06-03 10:17:48 -04:00
dependabot[bot]
10aaaf2ed9
Bump typescript from 6.0.2 to 6.0.3
Bumps [typescript](https://github.com/microsoft/TypeScript) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/compare/v6.0.2...v6.0.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 6.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-03 14:17:06 +00:00
GitHub Action
9c1c2c36a7 🔖 0.8.0 2026-06-03 14:16:19 +00:00
Erin Schnabel
f279ae3297
🎨 Use 1.13.0 Settings API 2026-06-03 10:14:16 -04:00
Erin Schnabel
990113e1e6
🔧 globalIgnores first 2026-05-19 17:38:07 -04:00
Erin Schnabel
ce408c1a80
⬆️ obsidian 1.12.3 / obsidian eslint 0.3.0 2026-05-12 13:58:57 -04:00
Erin Schnabel
5db632cfb0
👷 node 24 2026-05-12 13:25:30 -04:00
10 changed files with 255 additions and 211 deletions

View file

@ -27,9 +27,9 @@ jobs:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js - name: Use Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with: with:
node-version: '20' node-version: '24'
cache: 'npm' cache: 'npm'
- name: Build and Test - name: Build and Test

View file

@ -40,9 +40,9 @@ jobs:
fetch-depth: 0 # otherwise, you will failed to push refs to dest repo fetch-depth: 0 # otherwise, you will failed to push refs to dest repo
- name: Use Node.js - name: Use Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with: with:
node-version: '20' node-version: '24'
cache: 'npm' cache: 'npm'
# Build the plugin # Build the plugin

View file

@ -4,8 +4,17 @@ All notable changes to this project will be documented in this file. Dates are d
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
#### [0.8.0](https://github.com/ebullient/obsidian-deck-notes/compare/0.7.6...0.8.0)
- 🎨 Use 1.13.0 Settings API [`f279ae3`](https://github.com/ebullient/obsidian-deck-notes/commit/f279ae32970cad72040ba6ce1b59b073443c46f9)
- ⬆️ obsidian 1.12.3 / obsidian eslint 0.3.0 [`ce408c1`](https://github.com/ebullient/obsidian-deck-notes/commit/ce408c1a80743030a487a95a8a685dbf70719d22)
- 👷 node 24 [`5db632c`](https://github.com/ebullient/obsidian-deck-notes/commit/5db632cfb09c2683ae88f131c7a594f5dde4487b)
- 🔧 globalIgnores first [`990113e`](https://github.com/ebullient/obsidian-deck-notes/commit/990113e1e650adf88daeac3a917fc5c81fe69edc)
#### [0.7.6](https://github.com/ebullient/obsidian-deck-notes/compare/0.7.5...0.7.6) #### [0.7.6](https://github.com/ebullient/obsidian-deck-notes/compare/0.7.5...0.7.6)
> 11 May 2026
- Bump esbuild from 0.27.7 to 0.28.0 [`#33`](https://github.com/ebullient/obsidian-deck-notes/pull/33) - Bump esbuild from 0.27.7 to 0.28.0 [`#33`](https://github.com/ebullient/obsidian-deck-notes/pull/33)
- Bump @biomejs/biome from 2.4.9 to 2.4.11 [`#34`](https://github.com/ebullient/obsidian-deck-notes/pull/34) - Bump @biomejs/biome from 2.4.9 to 2.4.11 [`#34`](https://github.com/ebullient/obsidian-deck-notes/pull/34)
- ⬆️ update dependencies [`7e419d4`](https://github.com/ebullient/obsidian-deck-notes/commit/7e419d40287d9d1244987cada01e6389af05900c) - ⬆️ update dependencies [`7e419d4`](https://github.com/ebullient/obsidian-deck-notes/commit/7e419d40287d9d1244987cada01e6389af05900c)

View file

@ -5,12 +5,12 @@ import { defineConfig, globalIgnores } from "eslint/config";
import obsidianmd from "eslint-plugin-obsidianmd"; import obsidianmd from "eslint-plugin-obsidianmd";
export default defineConfig([ export default defineConfig([
...obsidianmd.configs.recommended,
globalIgnores([ globalIgnores([
"tests/", "tests/",
"*.mjs", "*.mjs",
"package.json" "package.json"
]), ]),
...obsidianmd.configs.recommended,
{ {
files: ["src/**/*.ts"], files: ["src/**/*.ts"],
languageOptions: { languageOptions: {

View file

@ -1,8 +1,8 @@
{ {
"id": "deck-notes", "id": "deck-notes",
"name": "Deck Notes", "name": "Deck Notes",
"version": "0.7.6", "version": "0.8.0",
"minAppVersion": "1.12.0", "minAppVersion": "1.13.0",
"description": "Define card decks for activities, strategies, or any content you want to rotate through. Embed cards in your notes or browse them in a modal. Filter by tag hierarchies to narrow your selection.", "description": "Define card decks for activities, strategies, or any content you want to rotate through. Embed cards in your notes or browse them in a modal. Filter by tag hierarchies to narrow your selection.",
"author": "ebullient", "author": "ebullient",
"authorUrl": "https://github.com/ebullient", "authorUrl": "https://github.com/ebullient",

View file

@ -1,8 +1,8 @@
{ {
"id": "deck-notes", "id": "deck-notes",
"name": "Deck Notes", "name": "Deck Notes",
"version": "0.7.6", "version": "0.8.0",
"minAppVersion": "1.12.0", "minAppVersion": "1.13.0",
"description": "Define card decks for activities, strategies, or any content you want to rotate through. Embed cards in your notes or browse them in a modal. Filter by tag hierarchies to narrow your selection.", "description": "Define card decks for activities, strategies, or any content you want to rotate through. Embed cards in your notes or browse them in a modal. Filter by tag hierarchies to narrow your selection.",
"author": "ebullient", "author": "ebullient",
"authorUrl": "https://github.com/ebullient", "authorUrl": "https://github.com/ebullient",

115
package-lock.json generated
View file

@ -1,29 +1,29 @@
{ {
"name": "deck-notes", "name": "deck-notes",
"version": "0.7.6", "version": "0.8.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "deck-notes", "name": "deck-notes",
"version": "0.7.6", "version": "0.8.0",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@biomejs/biome": "2.4.11", "@biomejs/biome": "2.4.14",
"@types/node": "^25.5.0", "@types/node": "^25.5.0",
"@typescript-eslint/parser": "^8.46.4", "@typescript-eslint/parser": "^8.46.4",
"auto-changelog": "^2.5.0", "auto-changelog": "^2.5.0",
"esbuild": "^0.28.0", "esbuild": "^0.28.0",
"eslint-plugin-obsidianmd": "^0.2.9", "eslint-plugin-obsidianmd": "^0.3.0",
"obsidian": "^1.11.0", "obsidian": "^1.13.0",
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "6.0.2" "typescript": "6.0.3"
} }
}, },
"node_modules/@biomejs/biome": { "node_modules/@biomejs/biome": {
"version": "2.4.11", "version": "2.4.14",
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.11.tgz", "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.14.tgz",
"integrity": "sha512-nWxHX8tf3Opb/qRgZpBbsTOqOodkbrkJ7S+JxJAruxOReaDPPmPuLBAGQ8vigyUgo0QBB+oQltNEAvalLcjggA==", "integrity": "sha512-TmAvxOEgrpLypzVGJ8FulIZnlyA9TxrO1hyqYrCz9r+bwma9xXxuLA5IuYnj55XQneFx460KjRbx6SWGLkg3bQ==",
"dev": true, "dev": true,
"license": "MIT OR Apache-2.0", "license": "MIT OR Apache-2.0",
"bin": { "bin": {
@ -37,20 +37,20 @@
"url": "https://opencollective.com/biome" "url": "https://opencollective.com/biome"
}, },
"optionalDependencies": { "optionalDependencies": {
"@biomejs/cli-darwin-arm64": "2.4.11", "@biomejs/cli-darwin-arm64": "2.4.14",
"@biomejs/cli-darwin-x64": "2.4.11", "@biomejs/cli-darwin-x64": "2.4.14",
"@biomejs/cli-linux-arm64": "2.4.11", "@biomejs/cli-linux-arm64": "2.4.14",
"@biomejs/cli-linux-arm64-musl": "2.4.11", "@biomejs/cli-linux-arm64-musl": "2.4.14",
"@biomejs/cli-linux-x64": "2.4.11", "@biomejs/cli-linux-x64": "2.4.14",
"@biomejs/cli-linux-x64-musl": "2.4.11", "@biomejs/cli-linux-x64-musl": "2.4.14",
"@biomejs/cli-win32-arm64": "2.4.11", "@biomejs/cli-win32-arm64": "2.4.14",
"@biomejs/cli-win32-x64": "2.4.11" "@biomejs/cli-win32-x64": "2.4.14"
} }
}, },
"node_modules/@biomejs/cli-darwin-arm64": { "node_modules/@biomejs/cli-darwin-arm64": {
"version": "2.4.11", "version": "2.4.14",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.11.tgz", "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.14.tgz",
"integrity": "sha512-wOt+ed+L2dgZanWyL6i29qlXMc088N11optzpo10peayObBaAshbTcxKUchzEMp9QSY8rh5h6VfAFE3WTS1rqg==", "integrity": "sha512-XvgoE9XOawUOQPdmvs4J7wPhi/DLwSCGks3AlPJDmh34O0awRTqCED1HRcRDdpf1Zrp4us4MGOOdIxNpbqNF5Q==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -65,9 +65,9 @@
} }
}, },
"node_modules/@biomejs/cli-darwin-x64": { "node_modules/@biomejs/cli-darwin-x64": {
"version": "2.4.11", "version": "2.4.14",
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.11.tgz", "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.14.tgz",
"integrity": "sha512-gZ6zR8XmZlExfi/Pz/PffmdpWOQ8Qhy7oBztgkR8/ylSRyLwfRPSadmiVCV8WQ8PoJ2MWUy2fgID9zmtgUUJmw==", "integrity": "sha512-jE7hKBCFhOx3uUh+ZkWBfOHxAcILPfhFplNkuID/eZeSTLHzfZzoZxW8fbqY9xXRnPi7jGNAf1iPVR+0yWsM/Q==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -82,9 +82,9 @@
} }
}, },
"node_modules/@biomejs/cli-linux-arm64": { "node_modules/@biomejs/cli-linux-arm64": {
"version": "2.4.11", "version": "2.4.14",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.11.tgz", "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.14.tgz",
"integrity": "sha512-avdJaEElXrKceK0va9FkJ4P5ci3N01TGkc6ni3P8l3BElqbOz42Wg2IyX3gbh0ZLEd4HVKEIrmuVu/AMuSeFFA==", "integrity": "sha512-2TELhZnW5RSLL063l9rc5xLpA0ZIw0Ccwy/0q384rvNAgFw3yI76bd59547yxowdQr5MNPET/xDLrLuvgSeeWQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -99,9 +99,9 @@
} }
}, },
"node_modules/@biomejs/cli-linux-arm64-musl": { "node_modules/@biomejs/cli-linux-arm64-musl": {
"version": "2.4.11", "version": "2.4.14",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.11.tgz", "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.14.tgz",
"integrity": "sha512-+Sbo1OAmlegtdwqFE8iOxFIWLh1B3OEgsuZfBpyyN/kWuqZ8dx9ZEes6zVnDMo+zRHF2wLynRVhoQmV7ohxl2Q==", "integrity": "sha512-/z+6gqAqqUQTHazwStxSXKHg9b8UvqBmDFRp+c4wYbq2KXhELQDon9EoC9RpmQ8JWkqQx/lIUy/cs+MhzDZp6A==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -116,9 +116,9 @@
} }
}, },
"node_modules/@biomejs/cli-linux-x64": { "node_modules/@biomejs/cli-linux-x64": {
"version": "2.4.11", "version": "2.4.14",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.11.tgz", "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.14.tgz",
"integrity": "sha512-TagWV0iomp5LnEnxWFg4nQO+e52Fow349vaX0Q/PIcX6Zhk4GGBgp3qqZ8PVkpC+cuehRctMf3+6+FgQ8jCEFQ==", "integrity": "sha512-zHrlQZDBDUz4OLAraYpWKcnLS6HOewBFWYOzY91d1ZjdqZwibOyb6BEu6WuWLugyo0P3riCmsbV9UqV1cSXwQg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -133,9 +133,9 @@
} }
}, },
"node_modules/@biomejs/cli-linux-x64-musl": { "node_modules/@biomejs/cli-linux-x64-musl": {
"version": "2.4.11", "version": "2.4.14",
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.11.tgz", "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.14.tgz",
"integrity": "sha512-bexd2IklK7ZgPhrz6jXzpIL6dEAH9MlJU1xGTrypx+FICxrXUp4CqtwfiuoDKse+UlgAlWtzML3jrMqeEAHEhA==", "integrity": "sha512-R6BWgJdQOwW9ulJatuTVrQkjnODjqHZkKNOqb1sz++3Noe5LYd0i3PchnOBUCYAPHoPWHhjJqbdZlHEu0hpjdA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -150,9 +150,9 @@
} }
}, },
"node_modules/@biomejs/cli-win32-arm64": { "node_modules/@biomejs/cli-win32-arm64": {
"version": "2.4.11", "version": "2.4.14",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.11.tgz", "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.14.tgz",
"integrity": "sha512-RJhaTnY8byzxDt4bDVb7AFPHkPcjOPK3xBip4ZRTrN3TEfyhjLRm3r3mqknqydgVTB74XG8l4jMLwEACEeihVg==", "integrity": "sha512-M3EH5hqOI/F/FUA2u4xcLoUgmxd218mvuj/6JL7Hv2toQvr2/AdOvKSpGkoRuWFCtQPVa+ZqkEV3Q5xBA9+XSA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -167,9 +167,9 @@
} }
}, },
"node_modules/@biomejs/cli-win32-x64": { "node_modules/@biomejs/cli-win32-x64": {
"version": "2.4.11", "version": "2.4.14",
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.11.tgz", "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.14.tgz",
"integrity": "sha512-A8D3JM/00C2KQgUV3oj8Ba15EHEYwebAGCy5Sf9GAjr5Y3+kJIYOiESoqRDeuRZueuMdCsbLZIUqmPhpYXJE9A==", "integrity": "sha512-WL0EG5qE+EAKomGXbf2g6VnSKJhTL3tXC0QRzWRwA5VpjxNYa6H4P7ZWfymbGE4IhZZQi1KXQ2R0YjwInmz2fA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -2382,9 +2382,9 @@
} }
}, },
"node_modules/eslint-plugin-obsidianmd": { "node_modules/eslint-plugin-obsidianmd": {
"version": "0.2.9", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-obsidianmd/-/eslint-plugin-obsidianmd-0.2.9.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-obsidianmd/-/eslint-plugin-obsidianmd-0.3.0.tgz",
"integrity": "sha512-+dF5Zz5T6/j0QYGu+wHbY3UZb45Kh+QFkFdfvkVk05o4YIIVqHMlrTFrlRVhuBd6Htu8QxcFOwzeMTN4aysVTA==", "integrity": "sha512-QvGDI6B2nxJBrsZKGTg31da2A/fEJNlnwN+fRZkaoPIu1QL3fYXUdpP7ThyMdr/0iTYQxifb9lt2X9cpydQx1w==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -2432,6 +2432,21 @@
"undici-types": "~5.26.4" "undici-types": "~5.26.4"
} }
}, },
"node_modules/eslint-plugin-obsidianmd/node_modules/obsidian": {
"version": "1.12.3",
"resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.12.3.tgz",
"integrity": "sha512-HxWqe763dOqzXjnNiHmAJTRERN8KILBSqxDSEqbeSr7W8R8Jxezzbca+nz1LiiqXnMpM8lV2jzAezw3CZ4xNUw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/codemirror": "5.60.8",
"moment": "2.29.4"
},
"peerDependencies": {
"@codemirror/state": "6.5.0",
"@codemirror/view": "6.38.6"
}
},
"node_modules/eslint-plugin-obsidianmd/node_modules/typescript": { "node_modules/eslint-plugin-obsidianmd/node_modules/typescript": {
"version": "5.4.5", "version": "5.4.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
@ -3992,9 +4007,9 @@
} }
}, },
"node_modules/obsidian": { "node_modules/obsidian": {
"version": "1.12.3", "version": "1.13.0",
"resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.12.3.tgz", "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.13.0.tgz",
"integrity": "sha512-HxWqe763dOqzXjnNiHmAJTRERN8KILBSqxDSEqbeSr7W8R8Jxezzbca+nz1LiiqXnMpM8lV2jzAezw3CZ4xNUw==", "integrity": "sha512-PHw5+SAPlJ0S3leFvJ0wgFg63Z3DavxL6+d1ll+8toXR2ZlYKc1rMWqdUv9LgUbTwPQUyY6yfhOMMivampRRiQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -4948,9 +4963,9 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "6.0.2", "version": "6.0.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
"integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"bin": { "bin": {

View file

@ -1,6 +1,6 @@
{ {
"name": "deck-notes", "name": "deck-notes",
"version": "0.7.6", "version": "0.8.0",
"private": true, "private": true,
"description": "Define card decks for activities, strategies, or any content you want to rotate through. Embed cards in your notes or browse them in a modal. Filter by tag hierarchies to narrow your selection.", "description": "Define card decks for activities, strategies, or any content you want to rotate through. Embed cards in your notes or browse them in a modal. Filter by tag hierarchies to narrow your selection.",
"main": "main.js", "main": "main.js",
@ -28,15 +28,15 @@
"repository": "github.com:ebullient/obsidian-deck-notes", "repository": "github.com:ebullient/obsidian-deck-notes",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@biomejs/biome": "2.4.11", "@biomejs/biome": "2.4.14",
"@types/node": "^25.5.0", "@types/node": "^25.5.0",
"@typescript-eslint/parser": "^8.46.4", "@typescript-eslint/parser": "^8.46.4",
"auto-changelog": "^2.5.0", "auto-changelog": "^2.5.0",
"esbuild": "^0.28.0", "esbuild": "^0.28.0",
"eslint-plugin-obsidianmd": "^0.2.9", "eslint-plugin-obsidianmd": "^0.3.0",
"obsidian": "^1.11.0", "obsidian": "^1.13.0",
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "6.0.2" "typescript": "6.0.3"
}, },
"overrides": { "overrides": {
"glob": "13.0.6", "glob": "13.0.6",

View file

@ -1,10 +1,15 @@
import { type App, PluginSettingTab, Setting } from "obsidian"; import {
import type { DeckNotesSettings } from "./@types/settings"; type App,
Modal,
PluginSettingTab,
Setting,
type SettingDefinitionItem,
type Setting as SettingType,
} from "obsidian";
import type DeckNotesPlugin from "./dn-Plugin"; import type DeckNotesPlugin from "./dn-Plugin";
export class DeckNotesSettingsTab extends PluginSettingTab { export class DeckNotesSettingsTab extends PluginSettingTab {
plugin: DeckNotesPlugin; plugin: DeckNotesPlugin;
newSettings!: DeckNotesSettings;
constructor(app: App, plugin: DeckNotesPlugin) { constructor(app: App, plugin: DeckNotesPlugin) {
super(app, plugin); super(app, plugin);
@ -12,155 +17,171 @@ export class DeckNotesSettingsTab extends PluginSettingTab {
this.icon = "gallery-thumbnails"; this.icon = "gallery-thumbnails";
} }
async save() { async setControlValue(key: string, value: unknown): Promise<void> {
this.plugin.settings = this.newSettings; (this.plugin.settings as unknown as Record<string, unknown>)[key] =
value;
await this.plugin.saveSettings(); await this.plugin.saveSettings();
} }
private cloneSettings(): DeckNotesSettings { getSettingDefinitions(): SettingDefinitionItem[] {
return JSON.parse( return [
JSON.stringify(this.plugin.settings), {
) as DeckNotesSettings; name: "Usage",
} render: (setting: SettingType) => {
setting.descEl.appendChild(
createFragment((f) => {
const p = f.createEl("p");
p.appendText(
"Cards are created from markdown files with ",
);
p.createEl("code", { text: "##" });
p.appendText(" headings.");
reset() { const ul = f.createEl("ul");
this.newSettings = this.cloneSettings();
this.display();
}
display(): void { const li1 = ul.createEl("li");
if (!this.newSettings) { li1.appendText("Use ");
this.newSettings = this.cloneSettings(); li1.createEl("code", { text: "---" });
} li1.appendText(
" (horizontal rule) to mark the end of card content.",
);
const { containerEl } = this; const li2 = ul.createEl("li");
containerEl.empty(); li2.appendText("Use ");
li2.createEl("code", {
new Setting(this.containerEl) text: "#flashcards",
.setName("Save settings") });
.setClass("decknotes-save-reset") li2.appendText(
.addButton((button) => " tags to identify decks. For example, ",
button );
.setIcon("reset") li2.createEl("code", {
.setTooltip("Reset to previously saved values.") text: "#flashcards/activities",
.onClick(() => { });
this.reset(); li2.appendText(" or ");
}), li2.createEl("code", {
) text: "#flashcards/meditation",
.addButton((button) => { });
button li2.appendText(
.setIcon("save") ". Tags can be added to the whole file (in frontmatter properties), or defined inline before each ",
.setCta() );
.setTooltip("Save all changes") li2.createEl("code", { text: "##" });
.onClick(async () => { li2.appendText(". See the ");
await this.save(); li2.createEl("a", {
}); text: "README",
}); href: "https://github.com/ebullient/obsidian-deck-notes#card-format",
attr: { target: "_blank" },
new Setting(containerEl) });
.setName("Card paths") li2.appendText(" for examples.");
.setDesc( }),
"Paths to folders containing card decks; " + );
"one path relative to vault root per line.", },
)
.addTextArea((text) =>
text
.setPlaceholder("journal/coping\nactivities/morning")
.setValue(this.newSettings.cardPaths.join("\n"))
.onChange((value) => {
this.newSettings.cardPaths = value
.split("\n")
.map((p) => p.trim())
.filter((p) => p.length > 0);
}),
)
.then((setting) => {
setting.controlEl
.querySelector("textarea")
?.setAttribute("rows", "4");
});
new Setting(containerEl)
.setName("Default deck tag")
.setDesc(
"Optional tag to narrow the selection of cards " +
"available for 'Show Card' command; for example, " +
"'activities' or 'activities/morning'.",
)
.addText((text) =>
text
.setPlaceholder("Activities")
.setValue(this.newSettings.defaultDeckTag)
.onChange((value) => {
this.newSettings.defaultDeckTag = value.trim();
}),
);
new Setting(containerEl)
.setName("Selection mode")
.setDesc(
"Cards can be selected at random or based on " +
"when they were last viewed.",
)
.addDropdown((dropdown) =>
dropdown
.addOption("random", "Random")
.addOption("least-recent", "Least recently viewed")
.setValue(this.newSettings.selectionMode)
.onChange((value) => {
this.newSettings.selectionMode = value as
| "random"
| "least-recent";
}),
);
new Setting(containerEl)
.setName("Callout type")
.setDesc(
"Callout type for embedded cards; " +
"for example, note, tip, or warning.",
)
.addText((text) =>
text
.setPlaceholder("example")
.setValue(this.newSettings.calloutType)
.onChange((value) => {
this.newSettings.calloutType = value.trim();
}),
);
new Setting(containerEl).setHeading().setName("Usage");
containerEl.createEl("p", {
text:
"Cards are created from markdown files with " +
"H2 headings (##). Each heading becomes one card.",
});
containerEl.createEl("p", {
text:
"Use --- (horizontal rule) to mark the end of " +
"card content. Anything after --- will be ignored.",
});
containerEl.createEl("p", {
text:
"Tag cards with #flashcards/deck-name; for example, " +
"#flashcards/activities/morning. Tags can be in " +
"frontmatter or inline before each H2. Lines starting " +
"with #flashcards are stripped from display.",
});
const div = this.containerEl.createDiv("deck-cards-coffee");
div.createEl("a", {
href: "https://www.buymeacoffee.com/ebullient",
}).createEl("img", {
attr: {
src: "https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=☕&slug=ebullient&button_colour=8e6787&font_colour=ebebeb&font_family=Inter&outline_colour=392a37&coffee_colour=ecc986",
}, },
}); {
} name: "Default deck tag",
desc:
/** Save on exit */ "Optional tag to narrow the selection of cards available " +
hide(): void { "for 'Show Card' command; for example, 'activities' or " +
void this.save(); "'activities/morning'.",
control: {
type: "text",
key: "defaultDeckTag",
placeholder: "activities",
},
},
{
name: "Selection mode",
desc: "Cards can be selected at random or based on when they were last viewed.",
control: {
type: "dropdown",
key: "selectionMode",
options: {
random: "Random",
"least-recent": "Least recently viewed",
},
},
},
{
name: "Callout type",
desc: "Callout type for embedded cards; for example, note, tip, or warning.",
control: {
type: "text",
key: "calloutType",
placeholder: "example",
},
},
{
type: "list",
heading: "Card paths",
desc: "Paths to folders containing card decks, relative to vault root.",
emptyState: "No card paths configured.",
addItem: {
name: "Add path",
action: () =>
new AddCardPathModal(this.app, (path) => {
this.plugin.settings.cardPaths.push(path);
void this.plugin.saveSettings();
this.update();
}).open(),
},
onDelete: async (idx: number) => {
this.plugin.settings.cardPaths.splice(idx, 1);
await this.plugin.saveSettings();
this.update();
},
items: this.plugin.settings.cardPaths.map((path) => ({
name: path,
})),
},
{
name: "",
render: (setting: SettingType) => {
setting.descEl.addClass("deck-cards-coffee");
setting.descEl
.createEl("a", {
href: "https://www.buymeacoffee.com/ebullient",
})
.createEl("img", {
attr: {
src: "https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=☕&slug=ebullient&button_colour=8e6787&font_colour=ebebeb&font_family=Inter&outline_colour=392a37&coffee_colour=ecc986",
},
});
},
},
];
}
}
class AddCardPathModal extends Modal {
private onSubmit: (path: string) => void;
constructor(app: App, onSubmit: (path: string) => void) {
super(app);
this.onSubmit = onSubmit;
}
onOpen(): void {
const { contentEl } = this;
contentEl.createEl("h2", { text: "Add card path" });
let input = "";
new Setting(contentEl).setName("Path").addText((t) =>
t.setPlaceholder("journal/coping").onChange((v) => {
input = v.trim();
}),
);
new Setting(contentEl).addButton((b) =>
b
.setButtonText("Add")
.setCta()
.onClick(() => {
if (input) {
this.onSubmit(input);
this.close();
}
}),
);
}
onClose(): void {
this.contentEl.empty();
} }
} }

View file

@ -1,7 +1,6 @@
.deck-cards-coffee { .deck-cards-coffee {
text-align: center; text-align: center;
img { img {
margin: auto;
height: 30px; height: 30px;
} }
} }