@mnaoumov/create-obsidian-plugin 0.0.0-stage → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -0
- package/README.md +341 -2
- package/dist/main.js +4184 -0
- package/package.json +83 -4
- package/src/main.ts +650 -0
- package/templates/default/.depcheckrc.json.ejs +19 -0
- package/templates/default/.editorconfig.ejs +11 -0
- package/templates/default/.env.ejs +1 -0
- package/templates/default/.env@vault_has-vault-false.ejs +2 -0
- package/templates/default/.env@vault_has-vault-true.ejs +1 -0
- package/templates/default/.gitattributes.ejs +7 -0
- package/templates/default/.github/FUNDING.yml.ejs +3 -0
- package/templates/default/.github/ISSUE_TEMPLATE/bug_report.yml.ejs +71 -0
- package/templates/default/.github/ISSUE_TEMPLATE/config.yml.ejs +1 -0
- package/templates/default/.github/ISSUE_TEMPLATE/feature_request.yml.ejs +61 -0
- package/templates/default/.github/workflows/attest-release-assets.yml.ejs +24 -0
- package/templates/default/.github/workflows/ci.yml.ejs +20 -0
- package/templates/default/.github/workflows/ci.yml@steps_biome-linter.ejs +1 -0
- package/templates/default/.github/workflows/ci.yml@steps_cspell.ejs +1 -0
- package/templates/default/.github/workflows/ci.yml@steps_dprint.ejs +1 -0
- package/templates/default/.github/workflows/ci.yml@steps_eslint.ejs +1 -0
- package/templates/default/.github/workflows/ci.yml@steps_jest.ejs +1 -0
- package/templates/default/.github/workflows/ci.yml@steps_markdownlint.ejs +1 -0
- package/templates/default/.github/workflows/ci.yml@steps_prettier.ejs +1 -0
- package/templates/default/.github/workflows/ci.yml@steps_vitest.ejs +1 -0
- package/templates/default/.github/workflows/release.yml.ejs +27 -0
- package/templates/default/.github/workflows/update-license-year.yml.ejs +38 -0
- package/templates/default/.gitignore_common.ejs +27 -0
- package/templates/default/.gitignore_scss.ejs +1 -0
- package/templates/default/.gitignore_tailwind.ejs +3 -0
- package/templates/default/.husky/commit-msg.ejs +1 -0
- package/templates/default/.husky/pre-commit.ejs +1 -0
- package/templates/default/.markdownlint-cli2.mjs.ejs +4 -0
- package/templates/default/.nano-staged.mjs.ejs +5 -0
- package/templates/default/.npmrc.ejs +1 -0
- package/templates/default/.parcelrc.ejs +9 -0
- package/templates/default/.parcelrc@transformers_svelte.ejs +1 -0
- package/templates/default/.prettierignore.ejs +10 -0
- package/templates/default/.typesafe-i18n.json.ejs +5 -0
- package/templates/default/CONTRIBUTING.md.ejs +49 -0
- package/templates/default/CONTRIBUTING.md@demo-vault_dev-utils.ejs +15 -0
- package/templates/default/CONTRIBUTING.md@scripts_biome-formatter.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_biome-linter.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_conventional-commits.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_cspell.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_dev-utils.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_dprint.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_eslint.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_jest.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_markdownlint.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_prettier.ejs +1 -0
- package/templates/default/CONTRIBUTING.md@scripts_vitest.ejs +1 -0
- package/templates/default/LICENSE.ejs +21 -0
- package/templates/default/README.md.ejs +28 -0
- package/templates/default/README.md@demo-vault_dev-utils.ejs +12 -0
- package/templates/default/README.md@preset_dev-utils.ejs +12 -0
- package/templates/default/README.md@support_has-funding.ejs +8 -0
- package/templates/default/babel.config.json.ejs +8 -0
- package/templates/default/babel.config.mjs.ejs +5 -0
- package/templates/default/biome.jsonc.ejs +47 -0
- package/templates/default/commitlint.config.ts.ejs +1 -0
- package/templates/default/cspell.json.ejs +67 -0
- package/templates/default/demo-vault/.gitignore.ejs +15 -0
- package/templates/default/demo-vault/.obsidian/app.json.ejs +4 -0
- package/templates/default/demo-vault/.obsidian/community-plugins.json.ejs +4 -0
- package/templates/default/demo-vault/00 Start.md.ejs +32 -0
- package/templates/default/demo-vault/00 Start.md@features_wasm.ejs +1 -0
- package/templates/default/demo-vault/01 Sample commands.md.ejs +38 -0
- package/templates/default/demo-vault/01 Sample commands.md@commands_wasm.ejs +4 -0
- package/templates/default/demo-vault/02 Settings.md.ejs +40 -0
- package/templates/default/demo-vault/03 WebAssembly.md.ejs +34 -0
- package/templates/default/demo-vault/Materials/01 Sample commands/Scratch note.md.ejs +5 -0
- package/templates/default/demo-vault/README.md.ejs +10 -0
- package/templates/default/demo-vault/_assets/CodeScriptToolkit/demoSetup.ts.ejs +88 -0
- package/templates/default/demo-vault/_assets/CodeScriptToolkit/demoSetup.ts@commands_wasm.ejs +10 -0
- package/templates/default/demo-vault/_assets/CodeScriptToolkit/startup.ts.ejs +17 -0
- package/templates/default/dprint.json_dev-utils.ejs +10 -0
- package/templates/default/dprint.json_standalone.ejs +26 -0
- package/templates/default/e2e/sample.spec.ts_obsidian-test.ejs +16 -0
- package/templates/default/e2e/sample.spec.ts_obsidian-test@lint-no-void-disable_dev-utils.ejs +3 -0
- package/templates/default/e2e/sample.spec.ts_obsidian-test@lint-no-void-enable_dev-utils.ejs +1 -0
- package/templates/default/e2e/sample.spec.ts_obsidian-test@unofficial_with-unofficial.ejs +13 -0
- package/templates/default/e2e/sample.spec.ts_wdio-obsidian.ejs +7 -0
- package/templates/default/e2e/sample.spec.ts_wdio-obsidian@unofficial_with-unofficial.ejs +15 -0
- package/templates/default/eslint.config.mts_dev-utils.ejs +1 -0
- package/templates/default/eslint.config.mts_standalone.ejs +119 -0
- package/templates/default/eslint.config.mts_standalone@extra-files_has-e2e.ejs +2 -0
- package/templates/default/jest.config.ts.ejs +57 -0
- package/templates/default/jest.config.ts@lint-root-dir_dev-utils.ejs +1 -0
- package/templates/default/jest.config.ts@ts-jest-tsconfig_solid.ejs +8 -0
- package/templates/default/linkinator.config.json.ejs +11 -0
- package/templates/default/manifest.json.ejs +11 -0
- package/templates/default/manifest.json@funding_has-funding.ejs +1 -0
- package/templates/default/manifest.json@platform_desktop-and-mobile.ejs +1 -0
- package/templates/default/manifest.json@platform_desktop-only.ejs +1 -0
- package/templates/default/package.json.ejs +32 -0
- package/templates/default/package.json@targets_parcel.ejs +36 -0
- package/templates/default/parcel-namer-obsidian.cjs.ejs +26 -0
- package/templates/default/parcel-resolver-obsidian.cjs.ejs +37 -0
- package/templates/default/parcel-transformer-inline-imports.cjs.ejs +39 -0
- package/templates/default/parcel-transformer-svelte.cjs.ejs +67 -0
- package/templates/default/pinned-versions.json.ejs +1 -0
- package/templates/default/pnpm-workspace.yaml.ejs +19 -0
- package/templates/default/postcss.config.cjs.ejs +12 -0
- package/templates/default/prettier.config.mjs.ejs +5 -0
- package/templates/default/rollup.config.mjs.ejs +7 -0
- package/templates/default/scripts/babel.config.ts_rollup.ejs +16 -0
- package/templates/default/scripts/babel.config.ts_rollup@babel-plugin_preact.ejs +1 -0
- package/templates/default/scripts/babel.config.ts_rollup@babel-preset_react.ejs +1 -0
- package/templates/default/scripts/babel.config.ts_rollup@babel-preset_solid.ejs +1 -0
- package/templates/default/scripts/build-clean.ts.ejs +4 -0
- package/templates/default/scripts/build-compile.ts.ejs +4 -0
- package/templates/default/scripts/build-styles.ts.ejs +12 -0
- package/templates/default/scripts/build.ts.ejs +6 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler.ejs +63 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@compile_svelte.ejs +4 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@fs-import_hot-reload-plugin.ejs +2 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@hot-reload_hot-reload-plugin.ejs +3 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@import_tailwind.ejs +2 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@lint-build-styles_dev-utils.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@reload_obsidian-cli.ejs +5 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@run_parcel.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@run_rollup.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@run_vite.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_cli-bundler@run_webpack.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild.ejs +3 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@compile_svelte.ejs +4 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@dev-utils-pre-build_tailwind.ejs +2 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@fs-import_hot-reload-plugin.ejs +2 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@hot-reload_hot-reload-plugin.ejs +4 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@import_postcss.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@import_scss.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@import_solid.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@import_svelte.ejs +10 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@import_tailwind.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@import_vue.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@lint-build-styles_dev-utils.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@options_preact.ejs +2 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@options_react.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@options_wasm.ejs +5 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@plugin_postcss.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@plugin_scss.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@plugin_solid.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@plugin_svelte.ejs +5 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@plugin_vue.ejs +1 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@preset_dev-utils.ejs +7 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@preset_standalone.ejs +138 -0
- package/templates/default/scripts/build.ts@bundler_esbuild@reload_obsidian-cli.ejs +6 -0
- package/templates/default/scripts/commit.ts_dev-utils.ejs +3 -0
- package/templates/default/scripts/commit.ts_standalone.ejs +3 -0
- package/templates/default/scripts/commitlint-config.ts.ejs +5 -0
- package/templates/default/scripts/demo-vault-global-setup.ts.ejs +43 -0
- package/templates/default/scripts/dev.ts.ejs +6 -0
- package/templates/default/scripts/dev.ts@bundler_cli-bundler.ejs +8 -0
- package/templates/default/scripts/dev.ts@bundler_esbuild.ejs +3 -0
- package/templates/default/scripts/dev.ts@bundler_esbuild@dev-utils-pre-build_tailwind.ejs +2 -0
- package/templates/default/scripts/dev.ts@bundler_esbuild@lint-build-styles_dev-utils.ejs +1 -0
- package/templates/default/scripts/dev.ts@bundler_esbuild@preset_dev-utils.ejs +7 -0
- package/templates/default/scripts/dev.ts@bundler_esbuild@preset_standalone.ejs +3 -0
- package/templates/default/scripts/esbuild-plugins.ts.ejs +20 -0
- package/templates/default/scripts/esbuild-plugins.ts@dev-utils-import_vue.ejs +2 -0
- package/templates/default/scripts/esbuild-plugins.ts@dev-utils-plugin_vue.ejs +1 -0
- package/templates/default/scripts/esbuild-plugins.ts@dev-utils-plugin_wasm.ejs +13 -0
- package/templates/default/scripts/eslint-config.ts.ejs +113 -0
- package/templates/default/scripts/eslint-config.ts@extra-files_has-e2e.ejs +7 -0
- package/templates/default/scripts/find-overexposed-fix.ts.ejs +26 -0
- package/templates/default/scripts/find-overexposed.ts.ejs +15 -0
- package/templates/default/scripts/format-check.ts.ejs +4 -0
- package/templates/default/scripts/format-check.ts@tool_biome-formatter.ejs +8 -0
- package/templates/default/scripts/format-check.ts@tool_dprint.ejs +3 -0
- package/templates/default/scripts/format-check.ts@tool_dprint@preset_dev-utils.ejs +7 -0
- package/templates/default/scripts/format-check.ts@tool_dprint@preset_standalone.ejs +8 -0
- package/templates/default/scripts/format-check.ts@tool_prettier.ejs +8 -0
- package/templates/default/scripts/format.ts.ejs +4 -0
- package/templates/default/scripts/format.ts@tool_biome-formatter.ejs +8 -0
- package/templates/default/scripts/format.ts@tool_dprint.ejs +3 -0
- package/templates/default/scripts/format.ts@tool_dprint@preset_dev-utils.ejs +7 -0
- package/templates/default/scripts/format.ts@tool_dprint@preset_standalone.ejs +8 -0
- package/templates/default/scripts/format.ts@tool_prettier.ejs +8 -0
- package/templates/default/scripts/framework-component-stub.ts.ejs +46 -0
- package/templates/default/scripts/gate.ts.ejs +10 -0
- package/templates/default/scripts/lint-fix.ts.ejs +6 -0
- package/templates/default/scripts/lint-fix.ts@tool_biome-linter.ejs +8 -0
- package/templates/default/scripts/lint-fix.ts@tool_eslint.ejs +3 -0
- package/templates/default/scripts/lint-fix.ts@tool_eslint@preset_dev-utils.ejs +7 -0
- package/templates/default/scripts/lint-fix.ts@tool_eslint@preset_standalone.ejs +8 -0
- package/templates/default/scripts/lint-md-fix.ts_dev-utils.ejs +7 -0
- package/templates/default/scripts/lint-md-fix.ts_standalone.ejs +37 -0
- package/templates/default/scripts/lint-md.ts_dev-utils.ejs +7 -0
- package/templates/default/scripts/lint-md.ts_standalone.ejs +37 -0
- package/templates/default/scripts/lint.ts.ejs +6 -0
- package/templates/default/scripts/lint.ts@tool_biome-linter.ejs +8 -0
- package/templates/default/scripts/lint.ts@tool_eslint.ejs +3 -0
- package/templates/default/scripts/lint.ts@tool_eslint@preset_dev-utils.ejs +7 -0
- package/templates/default/scripts/lint.ts@tool_eslint@preset_standalone.ejs +8 -0
- package/templates/default/scripts/markdownlint-cli2-config.ts_dev-utils.ejs +14 -0
- package/templates/default/scripts/markdownlint-cli2-config.ts_standalone.ejs +36 -0
- package/templates/default/scripts/nano-staged-config.ts.ejs +9 -0
- package/templates/default/scripts/postcss.config.ts.ejs +1 -0
- package/templates/default/scripts/postcss.config.ts@plugins_postcss.ejs +7 -0
- package/templates/default/scripts/prepare.ts_dev-utils.ejs +3 -0
- package/templates/default/scripts/prepare.ts_standalone.ejs +3 -0
- package/templates/default/scripts/prettier.config.ts.ejs +12 -0
- package/templates/default/scripts/rollup.config.ts.ejs +129 -0
- package/templates/default/scripts/rollup.config.ts@import_rollup-babel.ejs +5 -0
- package/templates/default/scripts/rollup.config.ts@import_rollup-json.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@import_rollup-postcss.ejs +4 -0
- package/templates/default/scripts/rollup.config.ts@import_scss.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@import_svelte.ejs +2 -0
- package/templates/default/scripts/rollup.config.ts@import_vue.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@import_wasm.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@lint-out-dir_dev-utils.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@post-plugin_preact.ejs +4 -0
- package/templates/default/scripts/rollup.config.ts@post-plugin_react.ejs +5 -0
- package/templates/default/scripts/rollup.config.ts@post-plugin_rollup-json.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@post-plugin_rollup-postcss.ejs +4 -0
- package/templates/default/scripts/rollup.config.ts@post-plugin_scss.ejs +4 -0
- package/templates/default/scripts/rollup.config.ts@post-plugin_solid.ejs +4 -0
- package/templates/default/scripts/rollup.config.ts@post-plugin_wasm.ejs +4 -0
- package/templates/default/scripts/rollup.config.ts@pre-plugin_svelte.ejs +4 -0
- package/templates/default/scripts/rollup.config.ts@pre-plugin_vue.ejs +13 -0
- package/templates/default/scripts/rollup.config.ts@unwrap_rollup-babel.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@unwrap_rollup-json.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@unwrap_rollup-postcss.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@unwrap_scss.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@unwrap_svelte.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@unwrap_vue.ejs +1 -0
- package/templates/default/scripts/rollup.config.ts@unwrap_wasm.ejs +1 -0
- package/templates/default/scripts/spellcheck.ts_dev-utils.ejs +7 -0
- package/templates/default/scripts/spellcheck.ts_standalone.ejs +8 -0
- package/templates/default/scripts/stylesheet-stub.ts.ejs +17 -0
- package/templates/default/scripts/test-coverage.ts.ejs +8 -0
- package/templates/default/scripts/test-e2e.ts.ejs +1 -0
- package/templates/default/scripts/test-e2e.ts@tool_obsidian-test.ejs +8 -0
- package/templates/default/scripts/test-e2e.ts@tool_wdio-obsidian.ejs +8 -0
- package/templates/default/scripts/test-integration-android.ts.ejs +8 -0
- package/templates/default/scripts/test-integration-demo-vault.ts.ejs +8 -0
- package/templates/default/scripts/test-integration-desktop-performance.ts.ejs +8 -0
- package/templates/default/scripts/test-integration-desktop.ts.ejs +8 -0
- package/templates/default/scripts/test-integration-no-app.ts.ejs +8 -0
- package/templates/default/scripts/test-integration.ts.ejs +22 -0
- package/templates/default/scripts/test-watch.ts_dev-utils.ejs +1 -0
- package/templates/default/scripts/test-watch.ts_dev-utils@tool_jest.ejs +13 -0
- package/templates/default/scripts/test-watch.ts_dev-utils@tool_vitest.ejs +8 -0
- package/templates/default/scripts/test-watch.ts_standalone.ejs +1 -0
- package/templates/default/scripts/test-watch.ts_standalone@tool_jest.ejs +13 -0
- package/templates/default/scripts/test-watch.ts_standalone@tool_vitest.ejs +8 -0
- package/templates/default/scripts/test.ts_dev-utils.ejs +1 -0
- package/templates/default/scripts/test.ts_dev-utils@tool_jest.ejs +13 -0
- package/templates/default/scripts/test.ts_dev-utils@tool_vitest.ejs +8 -0
- package/templates/default/scripts/test.ts_standalone.ejs +1 -0
- package/templates/default/scripts/test.ts_standalone@tool_jest.ejs +13 -0
- package/templates/default/scripts/test.ts_standalone@tool_vitest.ejs +8 -0
- package/templates/default/scripts/version.ts_dev-utils.ejs +10 -0
- package/templates/default/scripts/version.ts_standalone.ejs +317 -0
- package/templates/default/scripts/vite.config.ts.ejs +76 -0
- package/templates/default/scripts/vite.config.ts@import_preact.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@import_react.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@import_solid.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@import_svelte.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@import_vue.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@lint-empty-out-dir_dev-utils.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@lint-out-dir_dev-utils.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@plugin_preact.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@plugin_react.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@plugin_solid.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@plugin_svelte.ejs +1 -0
- package/templates/default/scripts/vite.config.ts@plugin_vue.ejs +1 -0
- package/templates/default/scripts/vitest-config.ts.ejs +75 -0
- package/templates/default/scripts/vitest-config.ts@post-config_solid.ejs +67 -0
- package/templates/default/scripts/wasm-module-stub.ts.ejs +21 -0
- package/templates/default/scripts/webpack.config.ts.ejs +124 -0
- package/templates/default/scripts/webpack.config.ts@import_svelte.ejs +1 -0
- package/templates/default/scripts/webpack.config.ts@import_vue.ejs +1 -0
- package/templates/default/scripts/webpack.config.ts@import_webpack-css-extract.ejs +4 -0
- package/templates/default/scripts/webpack.config.ts@lint-webpack-default_dev-utils.ejs +1 -0
- package/templates/default/scripts/webpack.config.ts@plugin_vue.ejs +1 -0
- package/templates/default/scripts/webpack.config.ts@plugin_webpack-css-extract.ejs +4 -0
- package/templates/default/scripts/webpack.config.ts@rule_css-modules.ejs +7 -0
- package/templates/default/scripts/webpack.config.ts@rule_css.ejs +4 -0
- package/templates/default/scripts/webpack.config.ts@rule_postcss.ejs +4 -0
- package/templates/default/scripts/webpack.config.ts@rule_scss.ejs +4 -0
- package/templates/default/scripts/webpack.config.ts@rule_solid.ejs +17 -0
- package/templates/default/scripts/webpack.config.ts@rule_svelte.ejs +7 -0
- package/templates/default/scripts/webpack.config.ts@rule_tailwind.ejs +4 -0
- package/templates/default/scripts/webpack.config.ts@rule_vue.ejs +4 -0
- package/templates/default/scripts/webpack.config.ts@rule_wasm.ejs +8 -0
- package/templates/default/scripts/webpack.config.ts@ts-loader-compiler-options_vue.ejs +5 -0
- package/templates/default/scripts/webpack.config.ts@ts-loader-options_vue.ejs +5 -0
- package/templates/default/src/demo-vault-buttons.demo-vault.integration.test.ts.ejs +12 -0
- package/templates/default/src/demo-vault.no-app.integration.test.ts.ejs +18 -0
- package/templates/default/src/editor-extensions/sample-state-field.ts_dev-utils.ejs +56 -0
- package/templates/default/src/editor-extensions/sample-state-field.ts_standalone.ejs +60 -0
- package/templates/default/src/editor-extensions/sample-view-plugin.ts.ejs +66 -0
- package/templates/default/src/editor-extensions/sample-widget.ts.ejs +22 -0
- package/templates/default/src/editor-suggests/sample-editor-suggest.ts.ejs +42 -0
- package/templates/default/src/i18n/en/index.ts.ejs +10 -0
- package/templates/default/src/i18n/index.ts_i18next.ejs +21 -0
- package/templates/default/src/i18n/index.ts_typesafe-i18n.ejs +14 -0
- package/templates/default/src/i18n/locales/en.json.ejs +3 -0
- package/templates/default/src/lit-elements/sample-lit-element.ts.ejs +54 -0
- package/templates/default/src/main.test.ts.ejs +11 -0
- package/templates/default/src/main.test.ts@test-imports_vitest.ejs +6 -0
- package/templates/default/src/main.ts.ejs +4 -0
- package/templates/default/src/main.ts@import_css-modules.ejs +1 -0
- package/templates/default/src/main.ts@import_css.ejs +1 -0
- package/templates/default/src/main.ts@import_postcss.ejs +1 -0
- package/templates/default/src/main.ts@import_scss.ejs +1 -0
- package/templates/default/src/main.ts@import_tailwind.ejs +1 -0
- package/templates/default/src/modals/sample-form-modal.ts.ejs +35 -0
- package/templates/default/src/modals/sample-suggest-modal.ts.ejs +37 -0
- package/templates/default/src/plugin-settings-component.test.ts_demo.ejs +49 -0
- package/templates/default/src/plugin-settings-component.test.ts_demo@test-imports_vitest.ejs +5 -0
- package/templates/default/src/plugin-settings-component.test.ts_enhanced.ejs +41 -0
- package/templates/default/src/plugin-settings-component.test.ts_enhanced@test-imports_vitest.ejs +5 -0
- package/templates/default/src/plugin-settings-component.ts_demo.ejs +87 -0
- package/templates/default/src/plugin-settings-component.ts_enhanced.ejs +27 -0
- package/templates/default/src/plugin-settings-tab.ts_demo.ejs +286 -0
- package/templates/default/src/plugin-settings-tab.ts_enhanced.ejs +26 -0
- package/templates/default/src/plugin-settings.test.ts_demo.ejs +14 -0
- package/templates/default/src/plugin-settings.test.ts_demo@test-imports_vitest.ejs +6 -0
- package/templates/default/src/plugin-settings.ts_demo.ejs +64 -0
- package/templates/default/src/plugin-settings.ts_enhanced.ejs +3 -0
- package/templates/default/src/plugin.test.ts_jest.ejs +9 -0
- package/templates/default/src/plugin.test.ts_vitest.ejs +14 -0
- package/templates/default/src/plugin.ts_demo.ejs +316 -0
- package/templates/default/src/plugin.ts_demo@import_i18next.ejs +1 -0
- package/templates/default/src/plugin.ts_demo@import_lit.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@import_preact.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@import_react.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@import_solid.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@import_svelte.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@import_typesafe-i18n.ejs +1 -0
- package/templates/default/src/plugin.ts_demo@import_vue.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@import_wasm.ejs +1 -0
- package/templates/default/src/plugin.ts_demo@method_ui-view.ejs +7 -0
- package/templates/default/src/plugin.ts_demo@onload_i18next.ejs +2 -0
- package/templates/default/src/plugin.ts_demo@onload_lit.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@onload_preact.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@onload_react.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@onload_solid.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@onload_svelte.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@onload_typesafe-i18n.ejs +8 -0
- package/templates/default/src/plugin.ts_demo@onload_vue.ejs +4 -0
- package/templates/default/src/plugin.ts_demo@onload_wasm.ejs +2 -0
- package/templates/default/src/plugin.ts_enhanced.ejs +72 -0
- package/templates/default/src/plugin.ts_enhanced@import2_codemirror.ejs +3 -0
- package/templates/default/src/plugin.ts_enhanced@import2_i18next.ejs +2 -0
- package/templates/default/src/plugin.ts_enhanced@import2_lit.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@import2_preact.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@import2_react.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@import2_solid.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@import2_svelte.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@import2_typesafe-i18n.ejs +2 -0
- package/templates/default/src/plugin.ts_enhanced@import2_vue.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@import2_wasm.ejs +1 -0
- package/templates/default/src/plugin.ts_enhanced@method_ui-view.ejs +7 -0
- package/templates/default/src/plugin.ts_enhanced@onload_codemirror.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@onload_i18next.ejs +2 -0
- package/templates/default/src/plugin.ts_enhanced@onload_lit.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@onload_preact.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@onload_react.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@onload_solid.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@onload_svelte.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@onload_typesafe-i18n.ejs +8 -0
- package/templates/default/src/plugin.ts_enhanced@onload_vue.ejs +4 -0
- package/templates/default/src/plugin.ts_enhanced@onload_wasm.ejs +2 -0
- package/templates/default/src/plugin.ts_standalone.ejs +56 -0
- package/templates/default/src/plugin.ts_standalone@import_codemirror.ejs +3 -0
- package/templates/default/src/plugin.ts_standalone@import_i18next.ejs +1 -0
- package/templates/default/src/plugin.ts_standalone@import_lit.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@import_preact.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@import_react.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@import_solid.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@import_svelte.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@import_typesafe-i18n.ejs +1 -0
- package/templates/default/src/plugin.ts_standalone@import_vue.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@import_wasm.ejs +1 -0
- package/templates/default/src/plugin.ts_standalone@method_ui-view.ejs +7 -0
- package/templates/default/src/plugin.ts_standalone@onload_codemirror.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@onload_i18next.ejs +2 -0
- package/templates/default/src/plugin.ts_standalone@onload_lit.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@onload_preact.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@onload_react.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@onload_solid.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@onload_svelte.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@onload_typesafe-i18n.ejs +8 -0
- package/templates/default/src/plugin.ts_standalone@onload_vue.ejs +4 -0
- package/templates/default/src/plugin.ts_standalone@onload_wasm.ejs +2 -0
- package/templates/default/src/preact-components/sample-preact-component.tsx_dev-utils.ejs +47 -0
- package/templates/default/src/preact-components/sample-preact-component.tsx_standalone.ejs +47 -0
- package/templates/default/src/react-components/sample-react-component.tsx_dev-utils.ejs +35 -0
- package/templates/default/src/react-components/sample-react-component.tsx_standalone.ejs +47 -0
- package/templates/default/src/settings.ts.ejs +32 -0
- package/templates/default/src/solid-components/sample-solid-component.tsx_dev-utils.ejs +47 -0
- package/templates/default/src/solid-components/sample-solid-component.tsx_standalone.ejs +47 -0
- package/templates/default/src/styles/css-modules.d.ts.ejs +4 -0
- package/templates/default/src/styles/main.css_dev-utils.ejs +17 -0
- package/templates/default/src/styles/main.css_dev-utils@content_tailwind.ejs +1 -0
- package/templates/default/src/styles/main.css_standalone.ejs +11 -0
- package/templates/default/src/styles/main.css_standalone@content_tailwind.ejs +1 -0
- package/templates/default/src/styles/main.module.css.ejs +3 -0
- package/templates/default/src/styles/main.scss_dev-utils.ejs +16 -0
- package/templates/default/src/styles/main.scss_standalone.ejs +10 -0
- package/templates/default/src/styles/styles.d.ts.ejs +4 -0
- package/templates/default/src/svelte-components/sample-svelte-component.d.ts.ejs +7 -0
- package/templates/default/src/svelte-components/sample-svelte-component.svelte.ejs +24 -0
- package/templates/default/src/views/sample-lit-view.ts.ejs +30 -0
- package/templates/default/src/views/sample-lit-view.ts@lint-register-element_dev-utils.ejs +1 -0
- package/templates/default/src/views/sample-preact-view.tsx_dev-utils.ejs +45 -0
- package/templates/default/src/views/sample-preact-view.tsx_standalone.ejs +42 -0
- package/templates/default/src/views/sample-react-view.tsx_dev-utils.ejs +47 -0
- package/templates/default/src/views/sample-react-view.tsx_standalone.ejs +49 -0
- package/templates/default/src/views/sample-solid-view.tsx_dev-utils.ejs +46 -0
- package/templates/default/src/views/sample-solid-view.tsx_standalone.ejs +46 -0
- package/templates/default/src/views/sample-svelte-view.ts.ejs +47 -0
- package/templates/default/src/views/sample-view.ts.ejs +37 -0
- package/templates/default/src/views/sample-vue-view.ts.ejs +34 -0
- package/templates/default/src/vue-components/sample-vue-component.d.ts.ejs +6 -0
- package/templates/default/src/vue-components/sample-vue-component.vue.ejs +25 -0
- package/templates/default/src/wasm/README.md.ejs +29 -0
- package/templates/default/src/wasm/answer.ts_esbuild.ejs +23 -0
- package/templates/default/src/wasm/answer.ts_parcel.ejs +29 -0
- package/templates/default/src/wasm/answer.ts_rollup.ejs +19 -0
- package/templates/default/src/wasm/answer.ts_vite.ejs +29 -0
- package/templates/default/src/wasm/answer.ts_webpack.ejs +29 -0
- package/templates/default/src/wasm/module.wasm +0 -0
- package/templates/default/src/wasm/module.wat.ejs +12 -0
- package/templates/default/src/wasm/sample-command.ts.ejs +33 -0
- package/templates/default/src/wasm.d.ts_esbuild.ejs +12 -0
- package/templates/default/src/wasm.d.ts_parcel.ejs +7 -0
- package/templates/default/src/wasm.d.ts_rollup.ejs +8 -0
- package/templates/default/src/wasm.d.ts_vite.ejs +8 -0
- package/templates/default/src/wasm.d.ts_webpack.ejs +7 -0
- package/templates/default/tsconfig.json_dev-utils.ejs +34 -0
- package/templates/default/tsconfig.json_dev-utils@compiler-options_i18next.ejs +1 -0
- package/templates/default/tsconfig.json_dev-utils@compiler-options_lit.ejs +2 -0
- package/templates/default/tsconfig.json_dev-utils@compiler-options_preact.ejs +2 -0
- package/templates/default/tsconfig.json_dev-utils@compiler-options_react.ejs +1 -0
- package/templates/default/tsconfig.json_dev-utils@compiler-options_solid.ejs +2 -0
- package/templates/default/tsconfig.json_dev-utils@include_has-e2e.ejs +1 -0
- package/templates/default/tsconfig.json_dev-utils@include_svelte.ejs +1 -0
- package/templates/default/tsconfig.json_dev-utils@include_vue.ejs +1 -0
- package/templates/default/tsconfig.json_dev-utils@types_jest.ejs +2 -0
- package/templates/default/tsconfig.json_dev-utils@types_svelte.ejs +2 -0
- package/templates/default/tsconfig.json_dev-utils@types_wdio-obsidian.ejs +5 -0
- package/templates/default/tsconfig.json_dev-utils@types_with-unofficial.ejs +2 -0
- package/templates/default/tsconfig.json_standalone.ejs +47 -0
- package/templates/default/tsconfig.json_standalone@compiler-options_i18next.ejs +1 -0
- package/templates/default/tsconfig.json_standalone@compiler-options_lit.ejs +2 -0
- package/templates/default/tsconfig.json_standalone@compiler-options_preact.ejs +2 -0
- package/templates/default/tsconfig.json_standalone@compiler-options_react.ejs +1 -0
- package/templates/default/tsconfig.json_standalone@compiler-options_solid.ejs +2 -0
- package/templates/default/tsconfig.json_standalone@include-extra_preact.ejs +2 -0
- package/templates/default/tsconfig.json_standalone@include-extra_react.ejs +2 -0
- package/templates/default/tsconfig.json_standalone@include-extra_solid.ejs +2 -0
- package/templates/default/tsconfig.json_standalone@include_has-e2e.ejs +1 -0
- package/templates/default/tsconfig.json_standalone@include_svelte.ejs +1 -0
- package/templates/default/tsconfig.json_standalone@include_vue.ejs +1 -0
- package/templates/default/tsconfig.json_standalone@types_jest.ejs +2 -0
- package/templates/default/tsconfig.json_standalone@types_svelte.ejs +2 -0
- package/templates/default/tsconfig.json_standalone@types_wdio-obsidian.ejs +5 -0
- package/templates/default/tsconfig.json_standalone@types_with-unofficial.ejs +2 -0
- package/templates/default/versions.json.ejs +3 -0
- package/templates/default/vite.config.ts.ejs +3 -0
- package/templates/default/vitest.config.ts_dev-utils.ejs +1 -0
- package/templates/default/vitest.config.ts_standalone.ejs +55 -0
- package/templates/default/vitest.config.ts_standalone@jsx_solid.ejs +11 -0
- package/templates/default/wdio.conf.ts.ejs +21 -0
- package/templates/default/webpack.config.ts.ejs +3 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Editor,
|
|
3
|
+
EditorPosition,
|
|
4
|
+
EditorSuggestContext,
|
|
5
|
+
EditorSuggestTriggerInfo,
|
|
6
|
+
TFile
|
|
7
|
+
} from 'obsidian';
|
|
8
|
+
|
|
9
|
+
import { EditorSuggest } from 'obsidian';
|
|
10
|
+
|
|
11
|
+
export class SampleEditorSuggest extends EditorSuggest<string> {
|
|
12
|
+
private cursor: EditorPosition | null = null;
|
|
13
|
+
private editor: Editor | null = null;
|
|
14
|
+
|
|
15
|
+
public override getSuggestions(context: EditorSuggestContext): Promise<string[]> | string[] {
|
|
16
|
+
return [`${context.query} 1`, `${context.query} 2`, `${context.query} 3`];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public override onTrigger(cursor: EditorPosition, editor: Editor, file: null | TFile): EditorSuggestTriggerInfo | null {
|
|
20
|
+
this.cursor = cursor;
|
|
21
|
+
this.editor = editor;
|
|
22
|
+
const line = editor.getLine(cursor.line);
|
|
23
|
+
return line === 'Sample'
|
|
24
|
+
? {
|
|
25
|
+
end: cursor,
|
|
26
|
+
query: `Query ${file?.name ?? ''}`,
|
|
27
|
+
start: cursor
|
|
28
|
+
}
|
|
29
|
+
: null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public override renderSuggestion(value: string, el: HTMLElement): void {
|
|
33
|
+
el.createEl('strong', { text: value });
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public override selectSuggestion(value: string, $event: KeyboardEvent | MouseEvent): void {
|
|
37
|
+
this.close();
|
|
38
|
+
if (this.editor && this.cursor) {
|
|
39
|
+
this.editor.replaceRange(`Transformed ${value} ${$event.type}`, this.cursor);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BaseTranslation } from 'typesafe-i18n';
|
|
2
|
+
|
|
3
|
+
<%# `satisfies` rather than an annotation: annotating widens the object to `BaseTranslation`, whose -%>
|
|
4
|
+
<%# index signature erases the keys, and `TranslationFunctions<BaseTranslation>` is then indexed by -%>
|
|
5
|
+
<%# `string` instead of by the messages this file actually declares. -%>
|
|
6
|
+
const en = {
|
|
7
|
+
greeting: 'Hello from <%= pluginName %>!'
|
|
8
|
+
} satisfies BaseTranslation;
|
|
9
|
+
|
|
10
|
+
export default en;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// The named exports are bound to the default instance, the stateful singleton the package documents.
|
|
2
|
+
import {
|
|
3
|
+
init,
|
|
4
|
+
t as translate
|
|
5
|
+
} from 'i18next';
|
|
6
|
+
|
|
7
|
+
import en from './locales/en.json';
|
|
8
|
+
|
|
9
|
+
export async function initI18n(): Promise<void> {
|
|
10
|
+
await init({
|
|
11
|
+
fallbackLng: 'en',
|
|
12
|
+
lng: 'en',
|
|
13
|
+
resources: {
|
|
14
|
+
en: { translation: en }
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function t(key: string): string {
|
|
20
|
+
return translate(key);
|
|
21
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { i18nObject } from 'typesafe-i18n';
|
|
2
|
+
|
|
3
|
+
import en from './en/index.ts';
|
|
4
|
+
|
|
5
|
+
<%# `i18nObject(locale, translations)`, not `i18n(...)`. `i18n` takes `(translations, formatters)` -- both -%>
|
|
6
|
+
<%# keyed BY LOCALE -- and returns a locale-keyed map, so the old `i18n<BaseTranslation>('en', { en })` -%>
|
|
7
|
+
<%# passed a locale where a translation map belongs, and then destructured `t` off the result as though -%>
|
|
8
|
+
<%# it were a locale name. That failed to compile (TS2339, TS2558) and, once a test finally loaded the -%>
|
|
9
|
+
<%# module, handed `new PluralRules('t')` a garbage tag: `RangeError: Invalid language tag: t`. -%>
|
|
10
|
+
const translate = i18nObject('en', en);
|
|
11
|
+
|
|
12
|
+
export function t(key: keyof typeof en): string {
|
|
13
|
+
return translate[key]();
|
|
14
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {
|
|
2
|
+
css,
|
|
3
|
+
html,
|
|
4
|
+
LitElement
|
|
5
|
+
} from 'lit';
|
|
6
|
+
import {
|
|
7
|
+
customElement,
|
|
8
|
+
property
|
|
9
|
+
} from 'lit/decorators.js';
|
|
10
|
+
|
|
11
|
+
@customElement('sample-lit-element')
|
|
12
|
+
export class SampleLitElement extends LitElement {
|
|
13
|
+
public static override styles = css`
|
|
14
|
+
:host {
|
|
15
|
+
display: block;
|
|
16
|
+
padding: 16px;
|
|
17
|
+
}
|
|
18
|
+
button {
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
|
|
23
|
+
@property({ type: Number })
|
|
24
|
+
public count = 0;
|
|
25
|
+
|
|
26
|
+
@property({ type: String })
|
|
27
|
+
public vaultName = '';
|
|
28
|
+
|
|
29
|
+
public override render(): unknown {
|
|
30
|
+
return html`
|
|
31
|
+
<h4>Sample Lit Element!</h4>
|
|
32
|
+
<div>
|
|
33
|
+
<span>My number is ${this.count}!</span>
|
|
34
|
+
</div>
|
|
35
|
+
<button type="button" @click=${this.increment}>Increment</button>
|
|
36
|
+
<div>Vault name: ${this.vaultName}</div>
|
|
37
|
+
`;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// An arrow property rather than a method: the template below hands `this.increment` to lit as a bare
|
|
41
|
+
// Reference, and a method detached from its object is what `@typescript-eslint/unbound-method`
|
|
42
|
+
// Forbids. Binding at the declaration is the fix lit's own docs reach for too.
|
|
43
|
+
private readonly increment = (): void => {
|
|
44
|
+
this.count++;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
declare global {
|
|
49
|
+
// Lit's own pattern for a custom element: it is what lets `createEl('sample-lit-element')` type-check,
|
|
50
|
+
// And return a `SampleLitElement` whose properties can be set directly.
|
|
51
|
+
interface HTMLElementTagNameMap {
|
|
52
|
+
'sample-lit-element': SampleLitElement;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%- render('test-imports') -%>
|
|
2
|
+
import Plugin from './main.ts';
|
|
3
|
+
import { Plugin as PluginClass } from './plugin.ts';
|
|
4
|
+
|
|
5
|
+
describe('main', () => {
|
|
6
|
+
// Obsidian loads a plugin by instantiating the default export of `main.js`, so this re-export is the
|
|
7
|
+
// One line of wiring the whole plugin hangs off.
|
|
8
|
+
it('exports the plugin class as the default export Obsidian loads', () => {
|
|
9
|
+
expect(Plugin).toBe(PluginClass);
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './styles/main.module.css'; // Do not delete this line if you want to have a styles.css file in your build output.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './styles/main.css'; // Do not delete this line if you want to have a styles.css file in your build output.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './styles/main.css'; // Do not delete this line if you want to have a styles.css file in your build output.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './styles/main.scss'; // Do not delete this line if you want to have a styles.css file in your build output.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './styles/tailwind.generated.css'; // Compiled from ./styles/main.css by `npm run build:styles`. Do not delete this line if you want to have a styles.css file in your build output.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Modal,
|
|
3
|
+
Notice,
|
|
4
|
+
Setting
|
|
5
|
+
} from 'obsidian';
|
|
6
|
+
|
|
7
|
+
export class SampleFormModal extends Modal {
|
|
8
|
+
private name = '';
|
|
9
|
+
|
|
10
|
+
public override onOpen(): void {
|
|
11
|
+
this.contentEl.createEl('h2', { text: 'Sample form' });
|
|
12
|
+
|
|
13
|
+
new Setting(this.contentEl)
|
|
14
|
+
.setName('Name')
|
|
15
|
+
.setDesc('Enter your name')
|
|
16
|
+
.addText((text) => {
|
|
17
|
+
text
|
|
18
|
+
.setPlaceholder('Your name')
|
|
19
|
+
.onChange((value) => {
|
|
20
|
+
this.name = value;
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
new Setting(this.contentEl)
|
|
25
|
+
.addButton((button) => {
|
|
26
|
+
button
|
|
27
|
+
.setButtonText('Submit')
|
|
28
|
+
.setCta()
|
|
29
|
+
.onClick(() => {
|
|
30
|
+
new Notice(`Hello, ${this.name || 'world'}!`);
|
|
31
|
+
this.close();
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { FuzzyMatch } from 'obsidian';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
FuzzySuggestModal,
|
|
5
|
+
Notice
|
|
6
|
+
} from 'obsidian';
|
|
7
|
+
|
|
8
|
+
interface SampleItem {
|
|
9
|
+
icon: string;
|
|
10
|
+
name: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const SAMPLE_ITEMS: readonly SampleItem[] = [
|
|
14
|
+
{ icon: '📝', name: 'Note' },
|
|
15
|
+
{ icon: '📁', name: 'Folder' },
|
|
16
|
+
{ icon: '🔖', name: 'Bookmark' },
|
|
17
|
+
{ icon: '📌', name: 'Pin' },
|
|
18
|
+
{ icon: '🏷️', name: 'Tag' }
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
export class SampleSuggestModal extends FuzzySuggestModal<SampleItem> {
|
|
22
|
+
public override getItems(): SampleItem[] {
|
|
23
|
+
return [...SAMPLE_ITEMS];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public override getItemText(item: SampleItem): string {
|
|
27
|
+
return item.name;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public override onChooseItem(item: SampleItem, $event: KeyboardEvent | MouseEvent): void {
|
|
31
|
+
new Notice(`Selected: ${item.icon} ${item.name} (${$event.type})`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public override renderSuggestion(match: FuzzyMatch<SampleItem>, el: HTMLElement): void {
|
|
35
|
+
el.createSpan({ text: `${match.item.icon} ${match.item.name}` });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { DataHandler } from 'obsidian-dev-utils/obsidian/data-handler';
|
|
2
|
+
import type { PluginEventMap } from 'obsidian-dev-utils/obsidian/plugin/plugin-event-source';
|
|
3
|
+
|
|
4
|
+
import { AsyncEvents } from 'obsidian-dev-utils/async-events';
|
|
5
|
+
import { noopAsync } from 'obsidian-dev-utils/function';
|
|
6
|
+
import { strictProxy } from 'obsidian-dev-utils/strict-proxy';
|
|
7
|
+
<%- render('test-imports') -%>
|
|
8
|
+
|
|
9
|
+
import { PluginSettingsComponent } from './plugin-settings-component.ts';
|
|
10
|
+
import {
|
|
11
|
+
PluginSettings,
|
|
12
|
+
TypedItem
|
|
13
|
+
} from './plugin-settings.ts';
|
|
14
|
+
|
|
15
|
+
describe('PluginSettingsComponent', () => {
|
|
16
|
+
it('takes its defaults from the PluginSettings class', () => {
|
|
17
|
+
// `strictProxy` throws on any member the component touches, so this also proves that constructing
|
|
18
|
+
// The component reads nothing from `data.json` or the plugin's events.
|
|
19
|
+
const component = new PluginSettingsComponent({
|
|
20
|
+
dataHandler: strictProxy<DataHandler>({}),
|
|
21
|
+
pluginEventSource: strictProxy<AsyncEvents<PluginEventMap>>({})
|
|
22
|
+
});
|
|
23
|
+
expect(component.defaultSettings).toBeInstanceOf(PluginSettings);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// `data.json` is JSON, so a `TypedItem` is stored as its name and has to come back as the same instance
|
|
27
|
+
// On load -- otherwise the dropdown shows nothing selected after a restart. This drives the component
|
|
28
|
+
// Through the lifecycle Obsidian does: `load()` reads `data.json`, and writes it back normalized.
|
|
29
|
+
it('loads a typed setting saved by name as the same item, and saves it back by name', async () => {
|
|
30
|
+
const savedRecords: unknown[] = [];
|
|
31
|
+
const component = new PluginSettingsComponent({
|
|
32
|
+
dataHandler: {
|
|
33
|
+
loadData(): Promise<unknown> {
|
|
34
|
+
return Promise.resolve({ typedDropdownSetting: TypedItem.Baz.name });
|
|
35
|
+
},
|
|
36
|
+
saveData(data: unknown): Promise<void> {
|
|
37
|
+
savedRecords.push(data);
|
|
38
|
+
return noopAsync();
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
pluginEventSource: new AsyncEvents<PluginEventMap>()
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
await component.loadWithPromises();
|
|
45
|
+
|
|
46
|
+
expect(component.settings.typedDropdownSetting).toBe(TypedItem.Baz);
|
|
47
|
+
expect(savedRecords.at(-1)).toMatchObject({ typedDropdownSetting: TypedItem.Baz.name });
|
|
48
|
+
});
|
|
49
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { DataHandler } from 'obsidian-dev-utils/obsidian/data-handler';
|
|
2
|
+
import type { PluginEventMap } from 'obsidian-dev-utils/obsidian/plugin/plugin-event-source';
|
|
3
|
+
|
|
4
|
+
import { AsyncEvents } from 'obsidian-dev-utils/async-events';
|
|
5
|
+
import { noopAsync } from 'obsidian-dev-utils/function';
|
|
6
|
+
<%- render('test-imports') -%>
|
|
7
|
+
|
|
8
|
+
import { PluginSettingsComponent } from './plugin-settings-component.ts';
|
|
9
|
+
import { PluginSettings } from './plugin-settings.ts';
|
|
10
|
+
|
|
11
|
+
describe('PluginSettingsComponent', () => {
|
|
12
|
+
it('takes its defaults from the PluginSettings class', async () => {
|
|
13
|
+
const component = createComponent(undefined);
|
|
14
|
+
await component.loadWithPromises();
|
|
15
|
+
expect(component.settings).toBeInstanceOf(PluginSettings);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// This drives the component through the lifecycle Obsidian does: `load()` reads `data.json`, and a
|
|
19
|
+
// Value the user saved there has to win over the class default.
|
|
20
|
+
it('loads a saved setting from data.json over its default', async () => {
|
|
21
|
+
const component = createComponent({ textSetting: 'Saved text' });
|
|
22
|
+
await component.loadWithPromises();
|
|
23
|
+
expect(component.settings.textSetting).toBe('Saved text');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
function createComponent(data: unknown): PluginSettingsComponent {
|
|
28
|
+
const dataHandler: DataHandler = {
|
|
29
|
+
loadData(): Promise<unknown> {
|
|
30
|
+
return Promise.resolve(data);
|
|
31
|
+
},
|
|
32
|
+
saveData(): Promise<void> {
|
|
33
|
+
return noopAsync();
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return new PluginSettingsComponent({
|
|
38
|
+
dataHandler,
|
|
39
|
+
pluginEventSource: new AsyncEvents<PluginEventMap>()
|
|
40
|
+
});
|
|
41
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
PluginSettingsComponentBaseOnSaveSettingsParams,
|
|
3
|
+
ReadonlyPluginSettingsState
|
|
4
|
+
} from 'obsidian-dev-utils/obsidian/components/plugin-settings-component';
|
|
5
|
+
import type { DataHandler } from 'obsidian-dev-utils/obsidian/data-handler';
|
|
6
|
+
import type { PluginEventSource } from 'obsidian-dev-utils/obsidian/plugin/plugin-event-source';
|
|
7
|
+
import type { MaybeReturn } from 'obsidian-dev-utils/type';
|
|
8
|
+
import type { GenericObject } from 'obsidian-dev-utils/type-guards';
|
|
9
|
+
|
|
10
|
+
import { Notice } from 'obsidian';
|
|
11
|
+
import { PluginSettingsComponentBase } from 'obsidian-dev-utils/obsidian/components/plugin-settings-component';
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
PluginSettings,
|
|
15
|
+
TypedItem
|
|
16
|
+
} from './plugin-settings.ts';
|
|
17
|
+
|
|
18
|
+
interface PluginSettingsComponentConstructorParams {
|
|
19
|
+
readonly dataHandler: DataHandler;
|
|
20
|
+
readonly pluginEventSource: PluginEventSource;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface SerializedSettings {
|
|
24
|
+
typedDropdownSetting: string;
|
|
25
|
+
typedMultipleDropdownSetting: string[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export class PluginSettingsComponent extends PluginSettingsComponentBase<PluginSettings> {
|
|
29
|
+
public constructor(params: PluginSettingsComponentConstructorParams) {
|
|
30
|
+
super({
|
|
31
|
+
...params,
|
|
32
|
+
pluginSettingsClass: PluginSettings
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
protected override async onLoadRecord(record: GenericObject): Promise<void> {
|
|
37
|
+
await super.onLoadRecord(record);
|
|
38
|
+
const serializedSettings = record as Partial<SerializedSettings>;
|
|
39
|
+
const pluginSettings = record as Partial<PluginSettings>;
|
|
40
|
+
|
|
41
|
+
if (serializedSettings.typedDropdownSetting) {
|
|
42
|
+
pluginSettings.typedDropdownSetting = TypedItem.deserialize(serializedSettings.typedDropdownSetting);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (serializedSettings.typedMultipleDropdownSetting) {
|
|
46
|
+
pluginSettings.typedMultipleDropdownSetting = serializedSettings.typedMultipleDropdownSetting.map((name) => TypedItem.deserialize(name));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
protected override async onLoadSettings(loadedState: ReadonlyPluginSettingsState<PluginSettings>, isInitialLoad: boolean): Promise<void> {
|
|
51
|
+
await super.onLoadSettings(loadedState, isInitialLoad);
|
|
52
|
+
if (loadedState.effectiveValues.textSetting === 'bar') {
|
|
53
|
+
new Notice('Sample text setting is bar');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// eslint-disable-next-line obsidian-dev-utils/params-options-name-match -- Override must keep the base param type.
|
|
58
|
+
protected override async onSaveSettings(params: PluginSettingsComponentBaseOnSaveSettingsParams<PluginSettings>): Promise<void> {
|
|
59
|
+
await super.onSaveSettings(params);
|
|
60
|
+
if (params.newState.effectiveValues.textSetting === 'baz' && params.oldState.effectiveValues.textSetting === 'bar') {
|
|
61
|
+
new Notice('Sample text setting is changed from bar to baz');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
protected override async onSavingRecord(record: GenericObject): Promise<void> {
|
|
66
|
+
await super.onSavingRecord(record);
|
|
67
|
+
const serializedSettings = record as Partial<SerializedSettings>;
|
|
68
|
+
const pluginSettings = record as Partial<PluginSettings>;
|
|
69
|
+
|
|
70
|
+
if (pluginSettings.typedDropdownSetting) {
|
|
71
|
+
serializedSettings.typedDropdownSetting = pluginSettings.typedDropdownSetting.name;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (pluginSettings.typedMultipleDropdownSetting) {
|
|
75
|
+
serializedSettings.typedMultipleDropdownSetting = pluginSettings.typedMultipleDropdownSetting.map((item) => item.name);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
protected override registerValidators(): void {
|
|
80
|
+
super.registerValidators();
|
|
81
|
+
this.registerValidator('textSetting', (value): MaybeReturn<string> => {
|
|
82
|
+
if (value === 'foo') {
|
|
83
|
+
return 'Foo is not allowed';
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DataHandler } from 'obsidian-dev-utils/obsidian/data-handler';
|
|
2
|
+
import type { PluginEventSource } from 'obsidian-dev-utils/obsidian/plugin/plugin-event-source';
|
|
3
|
+
|
|
4
|
+
import { PluginSettingsComponentBase } from 'obsidian-dev-utils/obsidian/components/plugin-settings-component';
|
|
5
|
+
|
|
6
|
+
import { PluginSettings } from './plugin-settings.ts';
|
|
7
|
+
|
|
8
|
+
interface PluginSettingsComponentConstructorParams {
|
|
9
|
+
readonly dataHandler: DataHandler;
|
|
10
|
+
readonly pluginEventSource: PluginEventSource;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Owns the plugin's settings: loading them from `data.json`, saving them back, and telling the rest of
|
|
15
|
+
* the plugin when they change.
|
|
16
|
+
*
|
|
17
|
+
* Override `onLoadRecord` here to migrate settings written by an older version of the plugin, and
|
|
18
|
+
* `onLoadSettings` / `onSaveSettings` to react to a value changing.
|
|
19
|
+
*/
|
|
20
|
+
export class PluginSettingsComponent extends PluginSettingsComponentBase<PluginSettings> {
|
|
21
|
+
public constructor(params: PluginSettingsComponentConstructorParams) {
|
|
22
|
+
super({
|
|
23
|
+
...params,
|
|
24
|
+
pluginSettingsClass: PluginSettings
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|