@mnaoumov/create-obsidian-plugin 1.0.2 → 1.1.0

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.
Files changed (489) hide show
  1. package/README.md +38 -7
  2. package/dist/main.js +1068 -333
  3. package/package.json +13 -5
  4. package/src/main.ts +118 -11
  5. package/templates/default/.github/ISSUE_TEMPLATE/config.yml.ejs +4 -0
  6. package/templates/default/.github/workflows/attest-release-assets.yml.ejs +1 -11
  7. package/templates/default/.github/workflows/ci.yml_framework.ejs +19 -0
  8. package/templates/default/.github/workflows/ci.yml_framework@job-permissions_measured-coverage-badge.ejs +3 -0
  9. package/templates/default/.github/workflows/ci.yml_framework@with_measured-coverage-badge.ejs +1 -0
  10. package/templates/default/.github/workflows/{ci.yml.ejs → ci.yml_standalone.ejs} +1 -1
  11. package/templates/default/.github/workflows/release.yml_framework.ejs +19 -0
  12. package/templates/default/.github/workflows/{release.yml.ejs → release.yml_standalone.ejs} +1 -1
  13. package/templates/default/.gitignore_common.ejs +1 -0
  14. package/templates/default/.gitignore_wdio-obsidian.ejs +2 -0
  15. package/templates/default/.nvmrc.ejs +1 -0
  16. package/templates/default/.prettierignore.ejs +1 -0
  17. package/templates/default/.prettierignore@ignores_docs-showcase.ejs +3 -0
  18. package/templates/default/{CONTRIBUTING.md@demo-vault_dev-utils.ejs → CONTRIBUTING.md@demo-vault_framework.ejs} +1 -1
  19. package/templates/default/{README.md@demo-vault_dev-utils.ejs → README.md@demo-vault_framework.ejs} +1 -1
  20. package/templates/default/README.md@preset_docs-showcase.ejs +4 -0
  21. package/templates/default/{README.md@preset_dev-utils.ejs → README.md@preset_framework.ejs} +1 -1
  22. package/templates/default/biome.jsonc_framework.ejs +16 -0
  23. package/templates/default/biome.jsonc_framework@excludes_docs-showcase.ejs +1 -0
  24. package/templates/default/{biome.jsonc.ejs → biome.jsonc_standalone.ejs} +1 -1
  25. package/templates/default/cspell.json.ejs +10 -2
  26. package/templates/default/cspell.json@ignore-paths_docs-showcase.ejs +1 -0
  27. package/templates/default/demo-vault/.gitignore.ejs +4 -4
  28. package/templates/default/demo-vault/00 Start.md.ejs +1 -1
  29. package/templates/default/demo-vault/01 Sample commands.md.ejs +4 -4
  30. package/templates/default/demo-vault/02 Settings.md.ejs +2 -2
  31. package/templates/default/demo-vault/03 WebAssembly.md.ejs +2 -2
  32. package/templates/default/demo-vault/README.md.ejs +1 -1
  33. package/templates/default/demo-vault/_assets/CodeScriptToolkit/demoSetup.ts.ejs +1 -1
  34. package/templates/default/demo-vault/_assets/CodeScriptToolkit/startup.ts.ejs +4 -4
  35. package/templates/default/dprint.json_framework.ejs +10 -0
  36. package/templates/default/dprint.json_framework@excludes_docs-showcase.ejs +2 -0
  37. package/templates/default/dprint.json_standalone.ejs +1 -0
  38. package/templates/default/eslint.config.mts_standalone.ejs +9 -0
  39. package/templates/default/jest.config.ts_framework.ejs +31 -0
  40. package/templates/default/{scripts/rollup.config.ts@lint-out-dir_dev-utils.ejs → jest.config.ts_framework@lint-root-dir_framework.ejs} +1 -1
  41. package/templates/default/jest.config.ts_framework@ts-jest-tsconfig_solid.ejs +8 -0
  42. package/templates/default/{jest.config.ts.ejs → jest.config.ts_standalone.ejs} +0 -1
  43. package/templates/default/package.json@targets_parcel-targets.ejs +31 -0
  44. package/templates/default/package.json@targets_parcel.ejs +2 -33
  45. package/templates/default/parcel-transformer-inline-imports.cjs.ejs +1 -1
  46. package/templates/default/prettier.config.mjs_framework.ejs +3 -0
  47. package/templates/default/scripts/build-clean.ts.ejs +2 -2
  48. package/templates/default/scripts/build-compile-typescript.ts.ejs +14 -0
  49. package/templates/default/scripts/build-compile.ts.ejs +2 -2
  50. package/templates/default/scripts/build-options.ts.ejs +9 -0
  51. package/templates/default/scripts/build-styles.ts.ejs +4 -7
  52. package/templates/default/scripts/build.ts.ejs +2 -2
  53. package/templates/default/scripts/build.ts@bundler_adapter-cli.ejs +11 -0
  54. package/templates/default/scripts/build.ts@bundler_adapter-cli@run_rollup.ejs +1 -0
  55. package/templates/default/scripts/build.ts@bundler_adapter-cli@run_vite.ejs +1 -0
  56. package/templates/default/scripts/build.ts@bundler_adapter-cli@run_webpack.ejs +1 -0
  57. package/templates/default/scripts/build.ts@bundler_cli-bundler.ejs +1 -1
  58. package/templates/default/scripts/build.ts@bundler_cli-bundler@import_tailwind.ejs +0 -1
  59. package/templates/default/scripts/build.ts@bundler_esbuild.ejs +2 -2
  60. package/templates/default/scripts/build.ts@bundler_esbuild@preset_framework.ejs +5 -0
  61. package/templates/default/scripts/build.ts@bundler_parcel-adapter.ejs +5 -0
  62. package/templates/default/scripts/commit.ts_framework.ejs +3 -0
  63. package/templates/default/scripts/commitlint-config.ts_framework.ejs +1 -0
  64. package/templates/default/scripts/demo-vault-global-setup.ts.ejs +7 -4
  65. package/templates/default/scripts/dev.ts.ejs +1 -1
  66. package/templates/default/scripts/dev.ts@bundler_adapter-cli.ejs +6 -0
  67. package/templates/default/scripts/dev.ts@bundler_adapter-cli@run_rollup.ejs +3 -0
  68. package/templates/default/scripts/dev.ts@bundler_adapter-cli@run_vite.ejs +3 -0
  69. package/templates/default/scripts/dev.ts@bundler_adapter-cli@run_webpack.ejs +3 -0
  70. package/templates/default/scripts/dev.ts@bundler_esbuild.ejs +2 -2
  71. package/templates/default/scripts/dev.ts@bundler_esbuild@preset_framework.ejs +5 -0
  72. package/templates/default/scripts/dev.ts@bundler_parcel-adapter.ejs +5 -0
  73. package/templates/default/scripts/eslint-config.ts.ejs +3 -14
  74. package/templates/default/scripts/eslint-config.ts@ignores_docs-showcase.ejs +4 -0
  75. package/templates/default/scripts/find-overexposed-fix.ts.ejs +4 -4
  76. package/templates/default/scripts/find-overexposed.ts.ejs +3 -3
  77. package/templates/default/scripts/format-check.ts@tool_biome-formatter.ejs +3 -8
  78. package/templates/default/scripts/format-check.ts@tool_biome-formatter@preset_framework.ejs +7 -0
  79. package/templates/default/scripts/format-check.ts@tool_biome-formatter@preset_standalone.ejs +8 -0
  80. package/templates/default/scripts/format-check.ts@tool_dprint.ejs +2 -2
  81. package/templates/default/scripts/format-check.ts@tool_dprint@preset_framework.ejs +7 -0
  82. package/templates/default/scripts/format-check.ts@tool_prettier.ejs +3 -8
  83. package/templates/default/scripts/format-check.ts@tool_prettier@preset_framework.ejs +7 -0
  84. package/templates/default/scripts/format-check.ts@tool_prettier@preset_standalone.ejs +8 -0
  85. package/templates/default/scripts/format.ts@tool_biome-formatter.ejs +3 -8
  86. package/templates/default/scripts/format.ts@tool_biome-formatter@preset_framework.ejs +7 -0
  87. package/templates/default/scripts/format.ts@tool_biome-formatter@preset_standalone.ejs +8 -0
  88. package/templates/default/scripts/format.ts@tool_dprint.ejs +2 -2
  89. package/templates/default/scripts/format.ts@tool_dprint@preset_framework.ejs +7 -0
  90. package/templates/default/scripts/format.ts@tool_prettier.ejs +3 -8
  91. package/templates/default/scripts/format.ts@tool_prettier@preset_framework.ejs +7 -0
  92. package/templates/default/scripts/format.ts@tool_prettier@preset_standalone.ejs +8 -0
  93. package/templates/default/scripts/gate.ts.ejs +3 -3
  94. package/templates/default/scripts/lint-fix.ts.ejs +2 -2
  95. package/templates/default/scripts/lint-fix.ts@tool_biome-linter.ejs +3 -8
  96. package/templates/default/scripts/lint-fix.ts@tool_biome-linter@preset_framework.ejs +7 -0
  97. package/templates/default/scripts/lint-fix.ts@tool_biome-linter@preset_standalone.ejs +8 -0
  98. package/templates/default/scripts/lint-fix.ts@tool_eslint.ejs +2 -2
  99. package/templates/default/scripts/lint-fix.ts@tool_eslint@preset_framework.ejs +7 -0
  100. package/templates/default/scripts/lint-md-fix.ts_framework.ejs +7 -0
  101. package/templates/default/scripts/lint-md.ts_framework.ejs +7 -0
  102. package/templates/default/scripts/lint.ts.ejs +2 -2
  103. package/templates/default/scripts/lint.ts@tool_biome-linter.ejs +3 -8
  104. package/templates/default/scripts/lint.ts@tool_biome-linter@preset_framework.ejs +7 -0
  105. package/templates/default/scripts/lint.ts@tool_biome-linter@preset_standalone.ejs +8 -0
  106. package/templates/default/scripts/lint.ts@tool_eslint.ejs +2 -2
  107. package/templates/default/scripts/lint.ts@tool_eslint@preset_framework.ejs +7 -0
  108. package/templates/default/scripts/{markdownlint-cli2-config.ts_dev-utils.ejs → markdownlint-cli2-config.ts_framework.ejs} +4 -4
  109. package/templates/default/scripts/markdownlint-cli2-config.ts_standalone.ejs +0 -3
  110. package/templates/default/scripts/nano-staged-config.ts_toolkit-nano-staged.ejs +3 -0
  111. package/templates/default/scripts/prepare.ts_framework.ejs +3 -0
  112. package/templates/default/scripts/rollup.config.ts_framework.ejs +49 -0
  113. package/templates/default/scripts/rollup.config.ts_framework@plugin_rollup-json.ejs +2 -0
  114. package/templates/default/scripts/rollup.config.ts_framework@plugin_scss.ejs +3 -0
  115. package/templates/default/scripts/{rollup.config.ts.ejs → rollup.config.ts_standalone.ejs} +4 -4
  116. package/templates/default/scripts/rollup.config.ts_standalone@import_rollup-json.ejs +1 -0
  117. package/templates/default/scripts/rollup.config.ts_standalone@import_scss.ejs +1 -0
  118. package/templates/default/scripts/rollup.config.ts_standalone@unwrap_rollup-json.ejs +1 -0
  119. package/templates/default/scripts/rollup.config.ts_standalone@unwrap_scss.ejs +1 -0
  120. package/templates/default/scripts/spellcheck.ts_framework.ejs +7 -0
  121. package/templates/default/scripts/stylesheet-stub.ts.ejs +1 -1
  122. package/templates/default/scripts/test-coverage.ts.ejs +2 -8
  123. package/templates/default/scripts/test-coverage.ts@tool_jest.ejs +5 -0
  124. package/templates/default/scripts/test-coverage.ts@tool_vitest.ejs +8 -0
  125. package/templates/default/scripts/test-e2e.ts@tool_obsidian-test.ejs +2 -8
  126. package/templates/default/scripts/test-e2e.ts@tool_obsidian-test@preset_framework.ejs +4 -0
  127. package/templates/default/scripts/test-e2e.ts@tool_obsidian-test@preset_standalone.ejs +8 -0
  128. package/templates/default/scripts/test-e2e.ts@tool_wdio-obsidian.ejs +2 -8
  129. package/templates/default/scripts/test-e2e.ts@tool_wdio-obsidian@preset_framework.ejs +5 -0
  130. package/templates/default/scripts/test-e2e.ts@tool_wdio-obsidian@preset_standalone.ejs +8 -0
  131. package/templates/default/scripts/test-integration-android.ts.ejs +2 -2
  132. package/templates/default/scripts/test-integration-demo-vault.ts.ejs +2 -2
  133. package/templates/default/scripts/test-integration-desktop-performance.ts.ejs +2 -2
  134. package/templates/default/scripts/test-integration-desktop.ts.ejs +2 -2
  135. package/templates/default/scripts/test-integration-no-app.ts.ejs +2 -2
  136. package/templates/default/scripts/test-integration.ts.ejs +2 -2
  137. package/templates/default/scripts/test-watch.ts_framework@tool_jest.ejs +5 -0
  138. package/templates/default/scripts/test-watch.ts_framework@tool_vitest.ejs +8 -0
  139. package/templates/default/scripts/test.ts_framework@tool_jest.ejs +5 -0
  140. package/templates/default/scripts/test.ts_framework@tool_vitest.ejs +8 -0
  141. package/templates/default/scripts/{version.ts_dev-utils.ejs → version.ts_framework.ejs} +3 -3
  142. package/templates/default/scripts/vite.config.ts_framework.ejs +10 -0
  143. package/templates/default/scripts/{vite.config.ts.ejs → vite.config.ts_standalone.ejs} +5 -8
  144. package/templates/default/scripts/vitest-config.ts.ejs +3 -2
  145. package/templates/default/scripts/vitest-config.ts@edit-context_docs-showcase.ejs +3 -0
  146. package/templates/default/scripts/webpack.config.ts_framework.ejs +19 -0
  147. package/templates/default/scripts/webpack.config.ts_framework@import_scss.ejs +1 -0
  148. package/templates/default/scripts/webpack.config.ts_framework@plugin_scss.ejs +1 -0
  149. package/templates/default/scripts/webpack.config.ts_framework@rule_scss.ejs +4 -0
  150. package/templates/default/scripts/{webpack.config.ts.ejs → webpack.config.ts_standalone.ejs} +4 -4
  151. package/templates/default/src/demo-vault-buttons.demo-vault.integration.test.ts.ejs +2 -2
  152. package/templates/default/src/demo-vault.no-app.integration.test.ts.ejs +3 -3
  153. package/templates/default/src/docs-showcase.desktop.integration.test.ts.ejs +77 -0
  154. package/templates/default/src/editor-extensions/{sample-state-field.ts_dev-utils.ejs → sample-state-field.ts_framework.ejs} +1 -1
  155. package/templates/default/src/main.ts@import_tailwind.ejs +1 -1
  156. package/templates/default/src/main.ts@import_tailwind@preset_framework.ejs +1 -0
  157. package/templates/default/src/main.ts@import_tailwind@preset_standalone.ejs +1 -0
  158. package/templates/default/src/{plugin-settings-component.test.ts_enhanced.ejs → plugin-settings-component.test.ts_all-in-one.ejs} +4 -4
  159. package/templates/default/src/plugin-settings-component.test.ts_demo.ejs +5 -5
  160. package/templates/default/src/{plugin-settings-component.ts_enhanced.ejs → plugin-settings-component.ts_all-in-one.ejs} +3 -3
  161. package/templates/default/src/plugin-settings-component.ts_demo.ejs +7 -7
  162. package/templates/default/src/{plugin-settings-tab.ts_enhanced.ejs → plugin-settings-tab.ts_all-in-one.ejs} +1 -1
  163. package/templates/default/src/plugin-settings-tab.ts_demo.ejs +3 -3
  164. package/templates/default/src/plugin-settings.ts_demo.ejs +2 -2
  165. package/templates/default/src/{plugin.ts_enhanced.ejs → plugin.ts_all-in-one.ejs} +5 -5
  166. package/templates/default/src/plugin.ts_all-in-one@import2_css-modules.ejs +1 -0
  167. package/templates/default/src/plugin.ts_all-in-one@import2_docs-showcase.ejs +1 -0
  168. package/templates/default/src/plugin.ts_all-in-one@onload_css-modules.ejs +1 -0
  169. package/templates/default/src/plugin.ts_all-in-one@onload_docs-showcase.ejs +3 -0
  170. package/templates/default/src/plugin.ts_demo.ejs +16 -16
  171. package/templates/default/src/plugin.ts_demo@import_css-modules.ejs +1 -0
  172. package/templates/default/src/plugin.ts_demo@onload_css-modules.ejs +1 -0
  173. package/templates/default/src/plugin.ts_standalone.ejs +5 -3
  174. package/templates/default/src/plugin.ts_standalone@import_css-modules.ejs +1 -0
  175. package/templates/default/src/plugin.ts_standalone@onload_css-modules.ejs +1 -0
  176. package/templates/default/src/react-components/{sample-react-component.tsx_dev-utils.ejs → sample-react-component.tsx_framework.ejs} +1 -1
  177. package/templates/default/src/styles/css-modules.d.ts.ejs +9 -3
  178. package/templates/default/src/styles/{main.css_dev-utils.ejs → main.css_framework.ejs} +2 -2
  179. package/templates/default/src/styles/main.module.css.ejs +4 -2
  180. package/templates/default/src/styles/{main.scss_dev-utils.ejs → main.scss_framework.ejs} +2 -2
  181. package/templates/default/src/styles/sample-css-module-command.ts.ejs +30 -0
  182. package/templates/default/src/views/{sample-react-view.tsx_dev-utils.ejs → sample-react-view.tsx_framework.ejs} +1 -1
  183. package/templates/default/src/wasm/answer.ts_wasm-adapter.ejs +18 -0
  184. package/templates/default/{tsconfig.json_dev-utils.ejs → tsconfig.json_framework.ejs} +2 -2
  185. package/templates/default/tsconfig.json_framework@exclude_docs-showcase.ejs +4 -0
  186. package/templates/default/tsconfig.json_framework@include_wdio-obsidian.ejs +1 -0
  187. package/templates/default/tsconfig.json_framework@types_toolkit-styles.ejs +2 -0
  188. package/templates/default/tsconfig.json_framework@types_wasm.ejs +2 -0
  189. package/templates/default/tsconfig.json_standalone.ejs +1 -1
  190. package/templates/default/vitest.config.ts_standalone.ejs +11 -2
  191. package/templates/default/wdio.conf.mts.ejs +5 -0
  192. package/templates/default/wdio.conf.ts.ejs +4 -4
  193. package/templates/docs-showcase/files/src/docs/README.md +511 -0
  194. package/templates/docs-showcase/files/src/docs/entry.d.ts +8 -0
  195. package/templates/docs-showcase/files/src/docs/entry.js +4 -0
  196. package/templates/docs-showcase/files/src/docs/host.ts +449 -0
  197. package/templates/docs-showcase/files/src/docs/index.ts +699 -0
  198. package/templates/docs-showcase/files/src/docs/plugins/editor/communicating-with-editor-extensions/01-intro.ts +21 -0
  199. package/templates/docs-showcase/files/src/docs/plugins/editor/communicating-with-editor-extensions/03-state-field.ts +32 -0
  200. package/templates/docs-showcase/files/src/docs/plugins/editor/decorations/01-widgets.ts +23 -0
  201. package/templates/docs-showcase/files/src/docs/plugins/editor/decorations/02-widgets.ts +20 -0
  202. package/templates/docs-showcase/files/src/docs/plugins/editor/decorations/04-state-fields.ts +57 -0
  203. package/templates/docs-showcase/files/src/docs/plugins/editor/decorations/05-view-plugins.ts +79 -0
  204. package/templates/docs-showcase/files/src/docs/plugins/editor/editor/01-intro.ts +26 -0
  205. package/templates/docs-showcase/files/src/docs/plugins/editor/editor/03-replace-current-selection.ts +26 -0
  206. package/templates/docs-showcase/files/src/docs/plugins/editor/markdown-post-processing/01-intro.ts +39 -0
  207. package/templates/docs-showcase/files/src/docs/plugins/editor/state-fields/01-defining-state-effects.ts +19 -0
  208. package/templates/docs-showcase/files/src/docs/plugins/editor/state-fields/02-defining-a-state-field.ts +35 -0
  209. package/templates/docs-showcase/files/src/docs/plugins/editor/state-fields/04-dispatching-state-effects.ts +34 -0
  210. package/templates/docs-showcase/files/src/docs/plugins/editor/state-management/01-state-changes.ts +21 -0
  211. package/templates/docs-showcase/files/src/docs/plugins/editor/state-management/02-state-changes.ts +23 -0
  212. package/templates/docs-showcase/files/src/docs/plugins/editor/view-plugins/01-creating-a-view-plugin.ts +36 -0
  213. package/templates/docs-showcase/files/src/docs/plugins/events/01-intro.ts +21 -0
  214. package/templates/docs-showcase/files/src/docs/plugins/getting-started/anatomy-of-a-plugin/01-intro.ts +22 -0
  215. package/templates/docs-showcase/files/src/docs/plugins/getting-started/anatomy-of-a-plugin/02-plugin-lifecycle.ts +22 -0
  216. package/templates/docs-showcase/files/src/docs/plugins/getting-started/build-a-plugin/06-step-5-update-the-source-code.ts +19 -0
  217. package/templates/docs-showcase/files/src/docs/plugins/getting-started/build-a-plugin/07-step-5-update-the-source-code.ts +21 -0
  218. package/templates/docs-showcase/files/src/docs/plugins/getting-started/mobile-development/03-platform-specific-features.ts +25 -0
  219. package/templates/docs-showcase/files/src/docs/plugins/getting-started/use-react-in-your-plugin/03-configure-your-plugin.ts +23 -0
  220. package/templates/docs-showcase/files/src/docs/plugins/guides/build-a-bases-view/01-step-1-sample-plugin-setup.ts +18 -0
  221. package/templates/docs-showcase/files/src/docs/plugins/guides/build-a-bases-view/02-step-2-create-and-register-the-bases-vie.ts +46 -0
  222. package/templates/docs-showcase/files/src/docs/plugins/guides/build-a-bases-view/03-step-3-add-configuration.ts +40 -0
  223. package/templates/docs-showcase/files/src/docs/plugins/guides/defer-views/04-accessing-your-customview-without-reveal.ts +26 -0
  224. package/templates/docs-showcase/files/src/docs/plugins/guides/manage-plugin-lifecycle/01-overview.ts +26 -0
  225. package/templates/docs-showcase/files/src/docs/plugins/guides/manage-plugin-lifecycle/02-overview.ts +30 -0
  226. package/templates/docs-showcase/files/src/docs/plugins/guides/manage-plugin-lifecycle/03-automatic-resource-management-with-compo.ts +26 -0
  227. package/templates/docs-showcase/files/src/docs/plugins/guides/manage-plugin-lifecycle/04-registerevent-eventref.ts +22 -0
  228. package/templates/docs-showcase/files/src/docs/plugins/guides/manage-plugin-lifecycle/05-registerinterval-id.ts +21 -0
  229. package/templates/docs-showcase/files/src/docs/plugins/guides/manage-plugin-lifecycle/06-registerdomevent-el-event-handler.ts +20 -0
  230. package/templates/docs-showcase/files/src/docs/plugins/guides/manage-plugin-lifecycle/08-understanding-the-lifecycle-of-objects.ts +29 -0
  231. package/templates/docs-showcase/files/src/docs/plugins/guides/manage-plugin-lifecycle/14-componentized-modal-example.ts +37 -0
  232. package/templates/docs-showcase/files/src/docs/plugins/guides/optimize-plugin-load-time/01-option-a-check-if-the-layout-is-ready.ts +29 -0
  233. package/templates/docs-showcase/files/src/docs/plugins/guides/optimize-plugin-load-time/02-option-b-register-the-handler-once-the-l.ts +27 -0
  234. package/templates/docs-showcase/files/src/docs/plugins/guides/store-secrets/03-step-3-retrieve-the-secret-value.ts +22 -0
  235. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/01-use-setheading-instead-of-a-h1-h2.ts +20 -0
  236. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/03-clean-up-resources-when-plugin-unloads.ts +23 -0
  237. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/04-avoid-accessing-workspace-activeleaf-dir.ts +24 -0
  238. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/05-avoid-accessing-workspace-activeleaf-dir.ts +22 -0
  239. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/10-avoid-iterating-all-files-to-find-a-file.ts +20 -0
  240. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/11-avoid-iterating-all-files-to-find-a-file.ts +20 -0
  241. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/13-use-normalizepath-to-clean-up-user-defin.ts +18 -0
  242. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/15-no-hardcoded-styling.ts +21 -0
  243. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/16-no-hardcoded-styling.ts +19 -0
  244. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/17-no-hardcoded-styling.ts +14 -0
  245. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/18-prefer-async-await-over-promise.ts +24 -0
  246. package/templates/docs-showcase/files/src/docs/plugins/releasing/plugin-guidelines/19-prefer-async-await-over-promise.ts +27 -0
  247. package/templates/docs-showcase/files/src/docs/plugins/user-interface/commands/01-intro.ts +25 -0
  248. package/templates/docs-showcase/files/src/docs/plugins/user-interface/commands/03-editor-commands.ts +27 -0
  249. package/templates/docs-showcase/files/src/docs/plugins/user-interface/commands/05-hot-keys.ts +25 -0
  250. package/templates/docs-showcase/files/src/docs/plugins/user-interface/context-menus/01-intro.ts +41 -0
  251. package/templates/docs-showcase/files/src/docs/plugins/user-interface/html-elements/02-create-html-elements-using-createel.ts +19 -0
  252. package/templates/docs-showcase/files/src/docs/plugins/user-interface/html-elements/03-create-html-elements-using-createel.ts +21 -0
  253. package/templates/docs-showcase/files/src/docs/plugins/user-interface/html-elements/04-style-your-elements.ts +14 -0
  254. package/templates/docs-showcase/files/src/docs/plugins/user-interface/html-elements/05-style-your-elements.ts +21 -0
  255. package/templates/docs-showcase/files/src/docs/plugins/user-interface/html-elements/06-conditional-styles.ts +19 -0
  256. package/templates/docs-showcase/files/src/docs/plugins/user-interface/icons/01-use-icons.ts +20 -0
  257. package/templates/docs-showcase/files/src/docs/plugins/user-interface/icons/02-use-icons.ts +14 -0
  258. package/templates/docs-showcase/files/src/docs/plugins/user-interface/icons/03-add-your-own-icon.ts +23 -0
  259. package/templates/docs-showcase/files/src/docs/plugins/user-interface/modals/01-intro.ts +20 -0
  260. package/templates/docs-showcase/files/src/docs/plugins/user-interface/modals/02-intro.ts +26 -0
  261. package/templates/docs-showcase/files/src/docs/plugins/user-interface/modals/03-accept-user-input.ts +38 -0
  262. package/templates/docs-showcase/files/src/docs/plugins/user-interface/modals/04-accept-user-input.ts +22 -0
  263. package/templates/docs-showcase/files/src/docs/plugins/user-interface/modals/05-select-from-list-of-suggestions.ts +56 -0
  264. package/templates/docs-showcase/files/src/docs/plugins/user-interface/modals/06-approximate-string-matching-results.ts +28 -0
  265. package/templates/docs-showcase/files/src/docs/plugins/user-interface/modals/07-custom-rendering-of-fuzzy-search-results.ts +41 -0
  266. package/templates/docs-showcase/files/src/docs/plugins/user-interface/ribbon-actions/01-intro.ts +21 -0
  267. package/templates/docs-showcase/files/src/docs/plugins/user-interface/right-to-left/01-use-fallback-values-when-necessary.ts +14 -0
  268. package/templates/docs-showcase/files/src/docs/plugins/user-interface/right-to-left/02-global-selectors.ts +14 -0
  269. package/templates/docs-showcase/files/src/docs/plugins/user-interface/right-to-left/03-icons-are-mirrored-automatically.ts +14 -0
  270. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/09-toggle.ts +20 -0
  271. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/10-text.ts +23 -0
  272. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/11-textarea.ts +23 -0
  273. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/12-number.ts +23 -0
  274. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/13-slider.ts +23 -0
  275. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/14-dropdown.ts +28 -0
  276. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/15-file.ts +27 -0
  277. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/16-folder.ts +23 -0
  278. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/17-color-picker.ts +20 -0
  279. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/18-validating-input.ts +28 -0
  280. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/23-groups.ts +27 -0
  281. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/32-cleanup.ts +30 -0
  282. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/33-no-top-level-heading.ts +27 -0
  283. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/34-headings-only-when-there-are-multiple-se.ts +26 -0
  284. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/36-headings.ts +20 -0
  285. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/38-moment-format.ts +42 -0
  286. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/39-buttons.ts +26 -0
  287. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/40-extra-button.ts +28 -0
  288. package/templates/docs-showcase/files/src/docs/plugins/user-interface/settings/41-progress-bar.ts +23 -0
  289. package/templates/docs-showcase/files/src/docs/plugins/user-interface/status-bar/01-intro.ts +20 -0
  290. package/templates/docs-showcase/files/src/docs/plugins/user-interface/status-bar/02-intro.ts +25 -0
  291. package/templates/docs-showcase/files/src/docs/plugins/user-interface/views/01-intro.ts +39 -0
  292. package/templates/docs-showcase/files/src/docs/plugins/user-interface/workspace/05-inspect-the-workspace.ts +23 -0
  293. package/templates/docs-showcase/files/src/docs/plugins/user-interface/workspace/06-leaf-groups.ts +19 -0
  294. package/templates/docs-showcase/files/src/docs/plugins/vault/02-read-files.ts +37 -0
  295. package/templates/docs-showcase/files/src/docs/plugins/vault/03-modify-files.ts +19 -0
  296. package/templates/docs-showcase/files/src/docs/plugins/vault/04-modify-files.ts +22 -0
  297. package/templates/docs-showcase/files/src/docs/plugins/vault/05-is-it-a-file-or-folder.ts +25 -0
  298. package/templates/docs-showcase/files/src/docs/reference/css-variables/about-styling/01-for-plugins.ts +14 -0
  299. package/templates/docs-showcase/files/src/docs/reference/css-variables/about-styling/02-for-themes-and-snippets.ts +14 -0
  300. package/templates/docs-showcase/files/src/docs/reference/css-variables/publish/site-fonts/01-intro.ts +14 -0
  301. package/templates/docs-showcase/files/src/docs/reference/typescript-api/command/callback/01-example.ts +24 -0
  302. package/templates/docs-showcase/files/src/docs/reference/typescript-api/debounce/01-example.ts +24 -0
  303. package/templates/docs-showcase/files/src/docs/reference/typescript-api/vault/process/01-example.ts +22 -0
  304. package/templates/docs-showcase/files/src/docs/themes/app-themes/build-a-theme/05-step-4-change-the-font.ts +14 -0
  305. package/templates/docs-showcase/files/src/docs/themes/app-themes/build-a-theme/06-step-5-change-the-background-color.ts +14 -0
  306. package/templates/docs-showcase/files/src/docs/themes/app-themes/build-a-theme/07-step-6-change-the-input-hover-border-col.ts +14 -0
  307. package/templates/docs-showcase/files/src/docs/themes/app-themes/build-a-theme/08-step-7-discover-css-variables-in-use.ts +14 -0
  308. package/templates/docs-showcase/files/src/docs/themes/app-themes/embed-fonts-and-images-in-your-theme/02-use-data-urls.ts +14 -0
  309. package/templates/docs-showcase/files/src/docs/themes/app-themes/theme-guidelines/01-use-css-variables.ts +14 -0
  310. package/templates/docs-showcase/files/src/docs/themes/obsidian-publish-themes/best-practices-for-publish-themes/01-small-screens-and-mobile-devices.ts +14 -0
  311. package/templates/docs-showcase/files/src/docs/themes/obsidian-publish-themes/build-a-publish-theme/01-intro.ts +14 -0
  312. package/templates/docs-showcase/files/src/docs/tsconfig.json +25 -0
  313. package/templates/docs-showcase/host/entry.d.ts +8 -0
  314. package/templates/docs-showcase/host/entry.js +4 -0
  315. package/templates/docs-showcase/host/host.ts +449 -0
  316. package/templates/docs-showcase/host/tsconfig.json +25 -0
  317. package/templates/docs-showcase/snippets.json +3566 -0
  318. package/templates/official-sample/README.md +9 -0
  319. package/templates/official-sample/files/.editorconfig.vendored +11 -0
  320. package/templates/official-sample/files/.github/workflows/lint.yml.vendored +27 -0
  321. package/templates/official-sample/files/.github/workflows/release.yml.vendored +50 -0
  322. package/templates/official-sample/files/.gitignore.vendored +22 -0
  323. package/templates/official-sample/files/.npmrc.vendored +1 -0
  324. package/templates/official-sample/files/AGENTS.md.vendored +269 -0
  325. package/templates/official-sample/files/LICENSE.vendored +5 -0
  326. package/templates/official-sample/files/README.md.vendored +92 -0
  327. package/templates/official-sample/files/esbuild.config.mjs.vendored +49 -0
  328. package/templates/official-sample/files/eslint.config.mts.vendored +32 -0
  329. package/templates/official-sample/files/manifest.json.vendored +11 -0
  330. package/templates/official-sample/files/package-lock.json.vendored +5053 -0
  331. package/templates/official-sample/files/package.json.vendored +27 -0
  332. package/templates/official-sample/files/src/main.ts.vendored +114 -0
  333. package/templates/official-sample/files/src/settings.ts.vendored +38 -0
  334. package/templates/official-sample/files/styles.css.vendored +8 -0
  335. package/templates/official-sample/files/tsconfig.json.vendored +19 -0
  336. package/templates/official-sample/files/version-bump.mjs.vendored +17 -0
  337. package/templates/official-sample/files/versions.json.vendored +3 -0
  338. package/upstreams.json +35 -0
  339. package/templates/default/dprint.json_dev-utils.ejs +0 -10
  340. package/templates/default/jest.config.ts@lint-root-dir_dev-utils.ejs +0 -1
  341. package/templates/default/scripts/build.ts@bundler_cli-bundler@lint-build-styles_dev-utils.ejs +0 -1
  342. package/templates/default/scripts/build.ts@bundler_esbuild@dev-utils-pre-build_tailwind.ejs +0 -2
  343. package/templates/default/scripts/build.ts@bundler_esbuild@lint-build-styles_dev-utils.ejs +0 -1
  344. package/templates/default/scripts/build.ts@bundler_esbuild@preset_dev-utils.ejs +0 -7
  345. package/templates/default/scripts/commit.ts_dev-utils.ejs +0 -3
  346. package/templates/default/scripts/dev.ts@bundler_esbuild@dev-utils-pre-build_tailwind.ejs +0 -2
  347. package/templates/default/scripts/dev.ts@bundler_esbuild@lint-build-styles_dev-utils.ejs +0 -1
  348. package/templates/default/scripts/dev.ts@bundler_esbuild@preset_dev-utils.ejs +0 -7
  349. package/templates/default/scripts/esbuild-plugins.ts.ejs +0 -20
  350. package/templates/default/scripts/esbuild-plugins.ts@dev-utils-import_vue.ejs +0 -2
  351. package/templates/default/scripts/esbuild-plugins.ts@dev-utils-plugin_vue.ejs +0 -1
  352. package/templates/default/scripts/esbuild-plugins.ts@dev-utils-plugin_wasm.ejs +0 -13
  353. package/templates/default/scripts/format-check.ts@tool_dprint@preset_dev-utils.ejs +0 -7
  354. package/templates/default/scripts/format.ts@tool_dprint@preset_dev-utils.ejs +0 -7
  355. package/templates/default/scripts/lint-fix.ts@tool_eslint@preset_dev-utils.ejs +0 -7
  356. package/templates/default/scripts/lint-md-fix.ts_dev-utils.ejs +0 -7
  357. package/templates/default/scripts/lint-md.ts_dev-utils.ejs +0 -7
  358. package/templates/default/scripts/lint.ts@tool_eslint@preset_dev-utils.ejs +0 -7
  359. package/templates/default/scripts/prepare.ts_dev-utils.ejs +0 -3
  360. package/templates/default/scripts/spellcheck.ts_dev-utils.ejs +0 -7
  361. package/templates/default/scripts/test-watch.ts_dev-utils@tool_jest.ejs +0 -13
  362. package/templates/default/scripts/test-watch.ts_dev-utils@tool_vitest.ejs +0 -8
  363. package/templates/default/scripts/test.ts_dev-utils@tool_jest.ejs +0 -13
  364. package/templates/default/scripts/test.ts_dev-utils@tool_vitest.ejs +0 -8
  365. package/templates/default/scripts/vite.config.ts@lint-empty-out-dir_dev-utils.ejs +0 -1
  366. package/templates/default/scripts/vite.config.ts@lint-out-dir_dev-utils.ejs +0 -1
  367. package/templates/default/scripts/webpack.config.ts@lint-webpack-default_dev-utils.ejs +0 -1
  368. package/templates/default/src/main.ts@import_css-modules.ejs +0 -1
  369. package/templates/default/src/views/sample-preact-view.tsx_dev-utils.ejs +0 -45
  370. package/templates/default/tsconfig.json_dev-utils@compiler-options_preact.ejs +0 -2
  371. package/templates/default/tsconfig.json_dev-utils@compiler-options_react.ejs +0 -1
  372. package/templates/default/tsconfig.json_dev-utils@compiler-options_solid.ejs +0 -2
  373. /package/templates/default/.github/workflows/{ci.yml@steps_biome-linter.ejs → ci.yml_standalone@steps_biome-linter.ejs} +0 -0
  374. /package/templates/default/.github/workflows/{ci.yml@steps_cspell.ejs → ci.yml_standalone@steps_cspell.ejs} +0 -0
  375. /package/templates/default/.github/workflows/{ci.yml@steps_dprint.ejs → ci.yml_standalone@steps_dprint.ejs} +0 -0
  376. /package/templates/default/.github/workflows/{ci.yml@steps_eslint.ejs → ci.yml_standalone@steps_eslint.ejs} +0 -0
  377. /package/templates/default/.github/workflows/{ci.yml@steps_jest.ejs → ci.yml_standalone@steps_jest.ejs} +0 -0
  378. /package/templates/default/.github/workflows/{ci.yml@steps_markdownlint.ejs → ci.yml_standalone@steps_markdownlint.ejs} +0 -0
  379. /package/templates/default/.github/workflows/{ci.yml@steps_prettier.ejs → ci.yml_standalone@steps_prettier.ejs} +0 -0
  380. /package/templates/default/.github/workflows/{ci.yml@steps_vitest.ejs → ci.yml_standalone@steps_vitest.ejs} +0 -0
  381. /package/templates/default/{.gitignore_tailwind.ejs → .gitignore_tailwind-cli.ejs} +0 -0
  382. /package/templates/default/{CONTRIBUTING.md@scripts_dev-utils.ejs → CONTRIBUTING.md@scripts_framework.ejs} +0 -0
  383. /package/templates/default/e2e/{sample.spec.ts_obsidian-test@lint-no-void-disable_dev-utils.ejs → sample.spec.ts_obsidian-test@lint-no-void-disable_framework.ejs} +0 -0
  384. /package/templates/default/e2e/{sample.spec.ts_obsidian-test@lint-no-void-enable_dev-utils.ejs → sample.spec.ts_obsidian-test@lint-no-void-enable_framework.ejs} +0 -0
  385. /package/templates/default/{eslint.config.mts_dev-utils.ejs → eslint.config.mts_framework.ejs} +0 -0
  386. /package/templates/default/{jest.config.ts@ts-jest-tsconfig_solid.ejs → jest.config.ts_standalone@ts-jest-tsconfig_solid.ejs} +0 -0
  387. /package/templates/default/{prettier.config.mjs.ejs → prettier.config.mjs_standalone.ejs} +0 -0
  388. /package/templates/default/scripts/{commitlint-config.ts.ejs → commitlint-config.ts_standalone.ejs} +0 -0
  389. /package/templates/default/scripts/{nano-staged-config.ts.ejs → nano-staged-config.ts_inline-nano-staged.ejs} +0 -0
  390. /package/templates/default/scripts/{rollup.config.ts@import_rollup-json.ejs → rollup.config.ts_framework@import_rollup-json.ejs} +0 -0
  391. /package/templates/default/scripts/{rollup.config.ts@import_scss.ejs → rollup.config.ts_framework@import_scss.ejs} +0 -0
  392. /package/templates/default/scripts/{rollup.config.ts@unwrap_rollup-json.ejs → rollup.config.ts_framework@unwrap_rollup-json.ejs} +0 -0
  393. /package/templates/default/scripts/{rollup.config.ts@unwrap_scss.ejs → rollup.config.ts_framework@unwrap_scss.ejs} +0 -0
  394. /package/templates/default/scripts/{rollup.config.ts@import_rollup-babel.ejs → rollup.config.ts_standalone@import_rollup-babel.ejs} +0 -0
  395. /package/templates/default/scripts/{rollup.config.ts@import_rollup-postcss.ejs → rollup.config.ts_standalone@import_rollup-postcss.ejs} +0 -0
  396. /package/templates/default/scripts/{rollup.config.ts@import_svelte.ejs → rollup.config.ts_standalone@import_svelte.ejs} +0 -0
  397. /package/templates/default/scripts/{rollup.config.ts@import_vue.ejs → rollup.config.ts_standalone@import_vue.ejs} +0 -0
  398. /package/templates/default/scripts/{rollup.config.ts@import_wasm.ejs → rollup.config.ts_standalone@import_wasm.ejs} +0 -0
  399. /package/templates/default/scripts/{rollup.config.ts@post-plugin_preact.ejs → rollup.config.ts_standalone@post-plugin_preact.ejs} +0 -0
  400. /package/templates/default/scripts/{rollup.config.ts@post-plugin_react.ejs → rollup.config.ts_standalone@post-plugin_react.ejs} +0 -0
  401. /package/templates/default/scripts/{rollup.config.ts@post-plugin_rollup-json.ejs → rollup.config.ts_standalone@post-plugin_rollup-json.ejs} +0 -0
  402. /package/templates/default/scripts/{rollup.config.ts@post-plugin_rollup-postcss.ejs → rollup.config.ts_standalone@post-plugin_rollup-postcss.ejs} +0 -0
  403. /package/templates/default/scripts/{rollup.config.ts@post-plugin_scss.ejs → rollup.config.ts_standalone@post-plugin_scss.ejs} +0 -0
  404. /package/templates/default/scripts/{rollup.config.ts@post-plugin_solid.ejs → rollup.config.ts_standalone@post-plugin_solid.ejs} +0 -0
  405. /package/templates/default/scripts/{rollup.config.ts@post-plugin_wasm.ejs → rollup.config.ts_standalone@post-plugin_wasm.ejs} +0 -0
  406. /package/templates/default/scripts/{rollup.config.ts@pre-plugin_svelte.ejs → rollup.config.ts_standalone@pre-plugin_svelte.ejs} +0 -0
  407. /package/templates/default/scripts/{rollup.config.ts@pre-plugin_vue.ejs → rollup.config.ts_standalone@pre-plugin_vue.ejs} +0 -0
  408. /package/templates/default/scripts/{rollup.config.ts@unwrap_rollup-babel.ejs → rollup.config.ts_standalone@unwrap_rollup-babel.ejs} +0 -0
  409. /package/templates/default/scripts/{rollup.config.ts@unwrap_rollup-postcss.ejs → rollup.config.ts_standalone@unwrap_rollup-postcss.ejs} +0 -0
  410. /package/templates/default/scripts/{rollup.config.ts@unwrap_svelte.ejs → rollup.config.ts_standalone@unwrap_svelte.ejs} +0 -0
  411. /package/templates/default/scripts/{rollup.config.ts@unwrap_vue.ejs → rollup.config.ts_standalone@unwrap_vue.ejs} +0 -0
  412. /package/templates/default/scripts/{rollup.config.ts@unwrap_wasm.ejs → rollup.config.ts_standalone@unwrap_wasm.ejs} +0 -0
  413. /package/templates/default/scripts/{test-watch.ts_dev-utils.ejs → test-watch.ts_framework.ejs} +0 -0
  414. /package/templates/default/scripts/{test.ts_dev-utils.ejs → test.ts_framework.ejs} +0 -0
  415. /package/templates/default/scripts/{vite.config.ts@import_preact.ejs → vite.config.ts_standalone@import_preact.ejs} +0 -0
  416. /package/templates/default/scripts/{vite.config.ts@import_react.ejs → vite.config.ts_standalone@import_react.ejs} +0 -0
  417. /package/templates/default/scripts/{vite.config.ts@import_solid.ejs → vite.config.ts_standalone@import_solid.ejs} +0 -0
  418. /package/templates/default/scripts/{vite.config.ts@import_svelte.ejs → vite.config.ts_standalone@import_svelte.ejs} +0 -0
  419. /package/templates/default/scripts/{vite.config.ts@import_vue.ejs → vite.config.ts_standalone@import_vue.ejs} +0 -0
  420. /package/templates/default/scripts/{vite.config.ts@plugin_preact.ejs → vite.config.ts_standalone@plugin_preact.ejs} +0 -0
  421. /package/templates/default/scripts/{vite.config.ts@plugin_react.ejs → vite.config.ts_standalone@plugin_react.ejs} +0 -0
  422. /package/templates/default/scripts/{vite.config.ts@plugin_solid.ejs → vite.config.ts_standalone@plugin_solid.ejs} +0 -0
  423. /package/templates/default/scripts/{vite.config.ts@plugin_svelte.ejs → vite.config.ts_standalone@plugin_svelte.ejs} +0 -0
  424. /package/templates/default/scripts/{vite.config.ts@plugin_vue.ejs → vite.config.ts_standalone@plugin_vue.ejs} +0 -0
  425. /package/templates/default/scripts/{webpack.config.ts@import_svelte.ejs → webpack.config.ts_standalone@import_svelte.ejs} +0 -0
  426. /package/templates/default/scripts/{webpack.config.ts@import_vue.ejs → webpack.config.ts_standalone@import_vue.ejs} +0 -0
  427. /package/templates/default/scripts/{webpack.config.ts@import_webpack-css-extract.ejs → webpack.config.ts_standalone@import_webpack-css-extract.ejs} +0 -0
  428. /package/templates/default/scripts/{webpack.config.ts@plugin_vue.ejs → webpack.config.ts_standalone@plugin_vue.ejs} +0 -0
  429. /package/templates/default/scripts/{webpack.config.ts@plugin_webpack-css-extract.ejs → webpack.config.ts_standalone@plugin_webpack-css-extract.ejs} +0 -0
  430. /package/templates/default/scripts/{webpack.config.ts@rule_css-modules.ejs → webpack.config.ts_standalone@rule_css-modules.ejs} +0 -0
  431. /package/templates/default/scripts/{webpack.config.ts@rule_css.ejs → webpack.config.ts_standalone@rule_css.ejs} +0 -0
  432. /package/templates/default/scripts/{webpack.config.ts@rule_postcss.ejs → webpack.config.ts_standalone@rule_postcss.ejs} +0 -0
  433. /package/templates/default/scripts/{webpack.config.ts@rule_scss.ejs → webpack.config.ts_standalone@rule_scss.ejs} +0 -0
  434. /package/templates/default/scripts/{webpack.config.ts@rule_solid.ejs → webpack.config.ts_standalone@rule_solid.ejs} +0 -0
  435. /package/templates/default/scripts/{webpack.config.ts@rule_svelte.ejs → webpack.config.ts_standalone@rule_svelte.ejs} +0 -0
  436. /package/templates/default/scripts/{webpack.config.ts@rule_tailwind.ejs → webpack.config.ts_standalone@rule_tailwind.ejs} +0 -0
  437. /package/templates/default/scripts/{webpack.config.ts@rule_vue.ejs → webpack.config.ts_standalone@rule_vue.ejs} +0 -0
  438. /package/templates/default/scripts/{webpack.config.ts@rule_wasm.ejs → webpack.config.ts_standalone@rule_wasm.ejs} +0 -0
  439. /package/templates/default/scripts/{webpack.config.ts@ts-loader-compiler-options_vue.ejs → webpack.config.ts_standalone@ts-loader-compiler-options_vue.ejs} +0 -0
  440. /package/templates/default/scripts/{webpack.config.ts@ts-loader-options_vue.ejs → webpack.config.ts_standalone@ts-loader-options_vue.ejs} +0 -0
  441. /package/templates/default/src/{plugin-settings-component.test.ts_enhanced@test-imports_vitest.ejs → plugin-settings-component.test.ts_all-in-one@test-imports_vitest.ejs} +0 -0
  442. /package/templates/default/src/{plugin-settings.ts_enhanced.ejs → plugin-settings.ts_all-in-one.ejs} +0 -0
  443. /package/templates/default/src/{plugin.ts_enhanced@import2_codemirror.ejs → plugin.ts_all-in-one@import2_codemirror.ejs} +0 -0
  444. /package/templates/default/src/{plugin.ts_enhanced@import2_i18next.ejs → plugin.ts_all-in-one@import2_i18next.ejs} +0 -0
  445. /package/templates/default/src/{plugin.ts_enhanced@import2_lit.ejs → plugin.ts_all-in-one@import2_lit.ejs} +0 -0
  446. /package/templates/default/src/{plugin.ts_enhanced@import2_preact.ejs → plugin.ts_all-in-one@import2_preact.ejs} +0 -0
  447. /package/templates/default/src/{plugin.ts_enhanced@import2_react.ejs → plugin.ts_all-in-one@import2_react.ejs} +0 -0
  448. /package/templates/default/src/{plugin.ts_enhanced@import2_solid.ejs → plugin.ts_all-in-one@import2_solid.ejs} +0 -0
  449. /package/templates/default/src/{plugin.ts_enhanced@import2_svelte.ejs → plugin.ts_all-in-one@import2_svelte.ejs} +0 -0
  450. /package/templates/default/src/{plugin.ts_enhanced@import2_typesafe-i18n.ejs → plugin.ts_all-in-one@import2_typesafe-i18n.ejs} +0 -0
  451. /package/templates/default/src/{plugin.ts_enhanced@import2_vue.ejs → plugin.ts_all-in-one@import2_vue.ejs} +0 -0
  452. /package/templates/default/src/{plugin.ts_enhanced@import2_wasm.ejs → plugin.ts_all-in-one@import2_wasm.ejs} +0 -0
  453. /package/templates/default/src/{plugin.ts_enhanced@method_ui-view.ejs → plugin.ts_all-in-one@method_ui-view.ejs} +0 -0
  454. /package/templates/default/src/{plugin.ts_enhanced@onload_codemirror.ejs → plugin.ts_all-in-one@onload_codemirror.ejs} +0 -0
  455. /package/templates/default/src/{plugin.ts_enhanced@onload_i18next.ejs → plugin.ts_all-in-one@onload_i18next.ejs} +0 -0
  456. /package/templates/default/src/{plugin.ts_enhanced@onload_lit.ejs → plugin.ts_all-in-one@onload_lit.ejs} +0 -0
  457. /package/templates/default/src/{plugin.ts_enhanced@onload_preact.ejs → plugin.ts_all-in-one@onload_preact.ejs} +0 -0
  458. /package/templates/default/src/{plugin.ts_enhanced@onload_react.ejs → plugin.ts_all-in-one@onload_react.ejs} +0 -0
  459. /package/templates/default/src/{plugin.ts_enhanced@onload_solid.ejs → plugin.ts_all-in-one@onload_solid.ejs} +0 -0
  460. /package/templates/default/src/{plugin.ts_enhanced@onload_svelte.ejs → plugin.ts_all-in-one@onload_svelte.ejs} +0 -0
  461. /package/templates/default/src/{plugin.ts_enhanced@onload_typesafe-i18n.ejs → plugin.ts_all-in-one@onload_typesafe-i18n.ejs} +0 -0
  462. /package/templates/default/src/{plugin.ts_enhanced@onload_vue.ejs → plugin.ts_all-in-one@onload_vue.ejs} +0 -0
  463. /package/templates/default/src/{plugin.ts_enhanced@onload_wasm.ejs → plugin.ts_all-in-one@onload_wasm.ejs} +0 -0
  464. /package/templates/default/src/preact-components/{sample-preact-component.tsx_dev-utils.ejs → sample-preact-component.tsx_framework.ejs} +0 -0
  465. /package/templates/default/src/solid-components/{sample-solid-component.tsx_dev-utils.ejs → sample-solid-component.tsx_framework.ejs} +0 -0
  466. /package/templates/default/src/styles/{main.css_dev-utils@content_tailwind.ejs → main.css_framework@content_tailwind.ejs} +0 -0
  467. /package/templates/default/src/views/{sample-lit-view.ts@lint-register-element_dev-utils.ejs → sample-lit-view.ts@lint-register-element_framework.ejs} +0 -0
  468. /package/templates/default/src/views/{sample-preact-view.tsx_standalone.ejs → sample-preact-view.tsx.ejs} +0 -0
  469. /package/templates/default/src/views/{sample-solid-view.tsx_dev-utils.ejs → sample-solid-view.tsx_framework.ejs} +0 -0
  470. /package/templates/default/src/wasm/{answer.ts_esbuild.ejs → answer.ts_wasm-esbuild.ejs} +0 -0
  471. /package/templates/default/src/wasm/{answer.ts_parcel.ejs → answer.ts_wasm-parcel.ejs} +0 -0
  472. /package/templates/default/src/wasm/{answer.ts_rollup.ejs → answer.ts_wasm-rollup.ejs} +0 -0
  473. /package/templates/default/src/wasm/{answer.ts_vite.ejs → answer.ts_wasm-vite.ejs} +0 -0
  474. /package/templates/default/src/wasm/{answer.ts_webpack.ejs → answer.ts_wasm-webpack.ejs} +0 -0
  475. /package/templates/default/src/{wasm.d.ts_esbuild.ejs → wasm.d.ts_wasm-esbuild.ejs} +0 -0
  476. /package/templates/default/src/{wasm.d.ts_parcel.ejs → wasm.d.ts_wasm-parcel.ejs} +0 -0
  477. /package/templates/default/src/{wasm.d.ts_rollup.ejs → wasm.d.ts_wasm-rollup.ejs} +0 -0
  478. /package/templates/default/src/{wasm.d.ts_vite.ejs → wasm.d.ts_wasm-vite.ejs} +0 -0
  479. /package/templates/default/src/{wasm.d.ts_webpack.ejs → wasm.d.ts_wasm-webpack.ejs} +0 -0
  480. /package/templates/default/{tsconfig.json_dev-utils@compiler-options_i18next.ejs → tsconfig.json_framework@compiler-options_i18next.ejs} +0 -0
  481. /package/templates/default/{tsconfig.json_dev-utils@compiler-options_lit.ejs → tsconfig.json_framework@compiler-options_lit.ejs} +0 -0
  482. /package/templates/default/{tsconfig.json_dev-utils@include_has-e2e.ejs → tsconfig.json_framework@include_has-e2e.ejs} +0 -0
  483. /package/templates/default/{tsconfig.json_dev-utils@include_svelte.ejs → tsconfig.json_framework@include_svelte.ejs} +0 -0
  484. /package/templates/default/{tsconfig.json_dev-utils@include_vue.ejs → tsconfig.json_framework@include_vue.ejs} +0 -0
  485. /package/templates/default/{tsconfig.json_dev-utils@types_jest.ejs → tsconfig.json_framework@types_jest.ejs} +0 -0
  486. /package/templates/default/{tsconfig.json_dev-utils@types_svelte.ejs → tsconfig.json_framework@types_svelte.ejs} +0 -0
  487. /package/templates/default/{tsconfig.json_dev-utils@types_wdio-obsidian.ejs → tsconfig.json_framework@types_wdio-obsidian.ejs} +0 -0
  488. /package/templates/default/{tsconfig.json_dev-utils@types_with-unofficial.ejs → tsconfig.json_framework@types_with-unofficial.ejs} +0 -0
  489. /package/templates/default/{vitest.config.ts_dev-utils.ejs → vitest.config.ts_framework.ejs} +0 -0
@@ -0,0 +1,449 @@
1
+ // The host every docs snippet runs in. Each snippet module next to this file holds one code block from
2
+ // https://docs.obsidian.md (obsidianmd/obsidian-developer-docs) verbatim, plus a `run(context)` function that
3
+ // create-obsidian-plugin generated around it. `run` is what the snippet's command calls, and `context` is this
4
+ // file's `DocsContext`: everything a snippet needs that the docs leave to the reader, such as a plugin to
5
+ // register things on, a note to work with, an editor, or an element to draw into.
6
+
7
+ import type { Extension } from '@codemirror/state';
8
+ import type { EditorView } from '@codemirror/view';
9
+ import type {
10
+ App,
11
+ Editor,
12
+ PluginManifest,
13
+ SettingDefinitionItem,
14
+ View,
15
+ WorkspaceLeaf
16
+ } from 'obsidian';
17
+
18
+ import {
19
+ Component,
20
+ FuzzySuggestModal,
21
+ MarkdownView,
22
+ Modal,
23
+ Notice,
24
+ Plugin,
25
+ PluginSettingTab,
26
+ TFile
27
+ } from 'obsidian';
28
+
29
+ /** One docs snippet, as `index.ts` registers it. */
30
+ export interface DocsEntry {
31
+ /** Unique within the showcase, and the suffix of the command id. */
32
+ id: string;
33
+ /** Loads the snippet's module. The module is evaluated only when its command first runs. */
34
+ load(): Promise<{ run(context: DocsContext): Promise<void> }>;
35
+ /** The command name: the docs page, the heading the snippet sits under, and its position. */
36
+ name: string;
37
+ /** The docs page the snippet comes from. */
38
+ source: string;
39
+ }
40
+
41
+ /** The plugin the docs' snippets assume: `ExamplePlugin`, with a `settings` object and `saveSettings()`. */
42
+ export interface DocsPlugin extends Plugin {
43
+ // The docs never declare one settings shape, and each snippet reads its own keys.
44
+ settings: Record<string, any>;
45
+ saveSettings(): Promise<void>;
46
+ }
47
+
48
+ /**
49
+ * What `this` is when a snippet's statements use it. Most snippets are written as the body of a plugin method
50
+ * (`this.app`, `this.addCommand`), and the settings ones as the body of a settings tab method (`this.plugin`,
51
+ * `this.update()`), so the value is a plugin that answers both.
52
+ */
53
+ export interface DocsThis extends DocsPlugin {
54
+ plugin: DocsPlugin;
55
+ update(): void;
56
+ }
57
+
58
+ /** What a snippet's host supplies. See the comment at the top of this file. */
59
+ export interface DocsContext {
60
+ readonly app: App;
61
+ /** The showcase plugin itself. */
62
+ readonly plugin: Plugin;
63
+ addChildComponent(component: Component): void;
64
+ getContainerEl(): HTMLElement;
65
+ getEditor(): Promise<Editor>;
66
+ getEditorView(): Promise<EditorView>;
67
+ getFile(): Promise<TFile>;
68
+ getLeaf(): WorkspaceLeaf;
69
+ getMarkdownView(): Promise<MarkdownView>;
70
+ openModal(modal: Modal): void;
71
+ openView(createView: (leaf: WorkspaceLeaf) => View): Promise<void>;
72
+ report(message: string): void;
73
+ showResult(value: unknown, label?: string): Promise<void>;
74
+ showSettingDefinitions(items: SettingDefinitionItem[]): Promise<void>;
75
+ showSettingTab(createTab: (app: App, plugin: DocsPlugin) => PluginSettingTab): Promise<void>;
76
+ thisValue(): DocsThis;
77
+ toggleChildPlugin(pluginClass: new (...args: any[]) => Plugin): Promise<void>;
78
+ toggleCss(css: string): Promise<void>;
79
+ toggleEditorExtension(extension: Extension): void;
80
+ }
81
+
82
+ const SCRATCH_FOLDER = 'Docs showcase';
83
+ const SCRATCH_NOTE = `${SCRATCH_FOLDER}/Scratch note.md`;
84
+ // Content the snippets have something to act on: a `:)` for the emoji ones, list items for the decorations.
85
+ const SCRATCH_NOTE_CONTENT = '# Scratch note\n\nThe docs showcase runs snippets against this note. Hello :) world.\n\n- one\n- two\n- three\n';
86
+ const RESULT_PREVIEW_LENGTH = 300;
87
+
88
+ /**
89
+ * Registers one command per docs snippet on the showcase plugin.
90
+ *
91
+ * @param plugin - The showcase plugin.
92
+ * @param entries - The snippets, as `index.ts` lists them.
93
+ */
94
+ export function registerDocsEntries(plugin: Plugin, entries: readonly DocsEntry[]): void {
95
+ const editorExtensions: Extension[] = [];
96
+ plugin.registerEditorExtension(editorExtensions);
97
+ const children = new Map<string, Component>();
98
+
99
+ for (const entry of entries) {
100
+ plugin.addCommand({
101
+ callback: async () => {
102
+ const context = new HostContext(plugin, entry, editorExtensions, children);
103
+ try {
104
+ const module = await entry.load();
105
+ await module.run(context);
106
+ } catch (error) {
107
+ console.error(`Docs snippet "${entry.name}" (${entry.source}) threw`, error);
108
+ showDocsNotice(entry, `${entry.name} threw: ${error instanceof Error ? error.message : String(error)}. The developer console has the details.`);
109
+ // Rethrown so that whatever runs the command can tell it failed: the integration suite awaits it.
110
+ throw error;
111
+ }
112
+ },
113
+ id: `docs-${entry.id}`,
114
+ name: `Docs: ${entry.name}`
115
+ });
116
+ }
117
+
118
+ // The one way to reach a snippet's page without running it, which for many of them changes the vault.
119
+ plugin.addCommand({
120
+ callback: () => {
121
+ new DocsPageSuggestModal(plugin.app, entries).open();
122
+ },
123
+ id: 'open-docs-page',
124
+ name: 'Docs showcase: Open the docs page of a snippet'
125
+ });
126
+ }
127
+
128
+ /**
129
+ * A link to the docs page a snippet comes from, at the heading it sits under. Obsidian opens it in the browser.
130
+ *
131
+ * @param entry - The snippet.
132
+ * @returns The link.
133
+ */
134
+ function createDocsLink(entry: DocsEntry): HTMLAnchorElement {
135
+ return createEl('a', {
136
+ attr: { target: '_blank' },
137
+ cls: 'external-link',
138
+ href: entry.source,
139
+ text: 'Open docs page'
140
+ });
141
+ }
142
+
143
+ /**
144
+ * Shows a Notice about a snippet, with the link to its docs page under the message. Every Notice the showcase shows
145
+ * goes through here, so that whatever a command shows leads back to the page its code came from.
146
+ *
147
+ * @param entry - The snippet.
148
+ * @param message - The message.
149
+ */
150
+ function showDocsNotice(entry: DocsEntry, message: string): void {
151
+ new Notice(createFragment((fragment) => {
152
+ fragment.appendText(message);
153
+ fragment.createEl('br');
154
+ fragment.append(createDocsLink(entry));
155
+ }));
156
+ }
157
+
158
+ /**
159
+ * A plugin with no files of its own, which the snippets load and register things on: each snippet's commands,
160
+ * ribbon icons, events and settings tab land on one of these, and running the snippet's command again unloads it
161
+ * and everything it registered.
162
+ */
163
+ class DocsHostPlugin extends Plugin implements DocsThis {
164
+ public plugin: DocsPlugin = this;
165
+ public settings: Record<string, any> = {};
166
+ private data: unknown = null;
167
+
168
+ public constructor(app: App, manifest: PluginManifest, private readonly entry: DocsEntry) {
169
+ super(app, manifest);
170
+ }
171
+
172
+ public override async loadData(): Promise<any> {
173
+ return this.data;
174
+ }
175
+
176
+ public override async saveData(data: unknown): Promise<void> {
177
+ this.data = data;
178
+ }
179
+
180
+ public async saveSettings(): Promise<void> {
181
+ await this.saveData(this.settings);
182
+ }
183
+
184
+ public update(): void {
185
+ showDocsNotice(this.entry, `${this.entry.name}: the snippet asked its settings tab to update.`);
186
+ }
187
+ }
188
+
189
+ class HostContext implements DocsContext {
190
+ public readonly app: App;
191
+ private containerEl: HTMLElement | null = null;
192
+
193
+ public constructor(
194
+ public readonly plugin: Plugin,
195
+ private readonly entry: DocsEntry,
196
+ private readonly editorExtensions: Extension[],
197
+ private readonly children: Map<string, Component>
198
+ ) {
199
+ this.app = plugin.app;
200
+ }
201
+
202
+ public addChildComponent(component: Component): void {
203
+ this.replaceChild(new DocsHostPlugin(this.app, this.childManifest(), this.entry)).addChild(component);
204
+ showDocsNotice(this.entry, `${this.entry.name}: loaded its component. Run the command again to unload it.`);
205
+ }
206
+
207
+ public getContainerEl(): HTMLElement {
208
+ if (!this.containerEl) {
209
+ const modal = new Modal(this.app);
210
+ modal.setTitle(this.entry.name);
211
+ modal.titleEl.createDiv({ cls: 'setting-item-description' }).append(createDocsLink(this.entry));
212
+ modal.open();
213
+ this.containerEl = modal.contentEl;
214
+ }
215
+ return this.containerEl;
216
+ }
217
+
218
+ public async getEditor(): Promise<Editor> {
219
+ return (await this.getMarkdownView()).editor;
220
+ }
221
+
222
+ public async getEditorView(): Promise<EditorView> {
223
+ // The docs' own way to reach CodeMirror: https://docs.obsidian.md/Plugins/Editor/Communicating+with+editor+extensions
224
+ return ((await this.getMarkdownView()).editor as unknown as { cm: EditorView }).cm;
225
+ }
226
+
227
+ public async getFile(): Promise<TFile> {
228
+ const existing = this.app.vault.getFileByPath(SCRATCH_NOTE);
229
+ if (existing) {
230
+ return existing;
231
+ }
232
+ if (!this.app.vault.getFolderByPath(SCRATCH_FOLDER)) {
233
+ await this.app.vault.createFolder(SCRATCH_FOLDER);
234
+ }
235
+ return await this.app.vault.create(SCRATCH_NOTE, SCRATCH_NOTE_CONTENT);
236
+ }
237
+
238
+ public getLeaf(): WorkspaceLeaf {
239
+ return this.app.workspace.getMostRecentLeaf() ?? this.app.workspace.getLeaf(false);
240
+ }
241
+
242
+ public async getMarkdownView(): Promise<MarkdownView> {
243
+ const file = await this.getFile();
244
+ let leaf = this.app.workspace.getLeavesOfType('markdown').find((candidate) => candidate.view instanceof MarkdownView && candidate.view.file === file);
245
+ if (!leaf) {
246
+ leaf = this.app.workspace.getLeaf('tab');
247
+ await leaf.openFile(file, { state: { mode: 'source' } });
248
+ }
249
+ await this.app.workspace.revealLeaf(leaf);
250
+ if (!(leaf.view instanceof MarkdownView)) {
251
+ throw new Error(`${SCRATCH_NOTE} did not open in a Markdown view.`);
252
+ }
253
+ return leaf.view;
254
+ }
255
+
256
+ public openModal(modal: Modal): void {
257
+ modal.open();
258
+ // The modal is the snippet's own, so the link goes in a Notice rather than into it.
259
+ showDocsNotice(this.entry, `${this.entry.name}: opened the snippet's modal.`);
260
+ }
261
+
262
+ public async openView(createView: (leaf: WorkspaceLeaf) => View): Promise<void> {
263
+ const leaf = this.app.workspace.getLeaf('tab');
264
+ await leaf.open(createView(leaf));
265
+ // The view is the snippet's own, so the link goes in a Notice rather than into it.
266
+ showDocsNotice(this.entry, `${this.entry.name}: opened the snippet's view.`);
267
+ }
268
+
269
+ public report(message: string): void {
270
+ console.log(`${this.entry.name}: ${message}`);
271
+ showDocsNotice(this.entry, `${this.entry.name}: ${message}`);
272
+ }
273
+
274
+ public async showResult(value: unknown, label?: string): Promise<void> {
275
+ const resolved = await value;
276
+ const prefix = label ? `${this.entry.name}: ${label}` : this.entry.name;
277
+ if (resolved === undefined) {
278
+ showDocsNotice(this.entry, `${prefix} ran. Anything it logged is in the developer console.`);
279
+ return;
280
+ }
281
+ console.log(prefix, resolved);
282
+ showDocsNotice(this.entry, `${prefix} returned ${preview(resolved)}`);
283
+ }
284
+
285
+ public async showSettingDefinitions(items: SettingDefinitionItem[]): Promise<void> {
286
+ await this.showSettingTab((app, plugin) => new DefinitionsSettingTab(app, plugin, items));
287
+ }
288
+
289
+ public async showSettingTab(createTab: (app: App, plugin: DocsPlugin) => PluginSettingTab): Promise<void> {
290
+ const child = this.replaceChild(new DocsHostPlugin(this.app, this.childManifest(), this.entry));
291
+ child.addSettingTab(withDocsLink(createTab(this.app, child), this.entry));
292
+ showDocsNotice(this.entry, `${this.entry.name}: added a settings tab named "${child.manifest.name}". Open Settings to see it.`);
293
+ }
294
+
295
+ public thisValue(): DocsThis {
296
+ return this.replaceChild(new DocsHostPlugin(this.app, this.childManifest(), this.entry));
297
+ }
298
+
299
+ public async toggleChildPlugin(pluginClass: new (...args: any[]) => Plugin): Promise<void> {
300
+ if (this.children.has(this.entry.id)) {
301
+ this.removeChild();
302
+ showDocsNotice(this.entry, `${this.entry.name}: unloaded the example plugin and everything it registered.`);
303
+ return;
304
+ }
305
+
306
+ // In-memory data, so an example that saves its settings does not overwrite the showcase's own.
307
+ const HostedPlugin = class extends pluginClass {
308
+ private hostedData: unknown = null;
309
+
310
+ public override async loadData(): Promise<any> {
311
+ return this.hostedData;
312
+ }
313
+
314
+ public override async saveData(data: unknown): Promise<void> {
315
+ this.hostedData = data;
316
+ }
317
+ };
318
+ this.replaceChild(new HostedPlugin(this.app, this.childManifest()));
319
+ showDocsNotice(this.entry, `${this.entry.name}: loaded the example plugin. What it registers is live until you run this command again.`);
320
+ }
321
+
322
+ public async toggleCss(css: string): Promise<void> {
323
+ const id = `docs-showcase-${this.entry.id}`;
324
+ const existing = activeDocument.getElementById(id);
325
+ if (existing) {
326
+ existing.remove();
327
+ showDocsNotice(this.entry, `${this.entry.name}: removed the stylesheet.`);
328
+ return;
329
+ }
330
+ const style = activeDocument.head.createEl('style', { attr: { id }, text: css });
331
+ this.plugin.register(() => style.remove());
332
+ showDocsNotice(this.entry, `${this.entry.name}: applied the stylesheet. Run the command again to remove it.`);
333
+ }
334
+
335
+ public toggleEditorExtension(extension: Extension): void {
336
+ const index = this.editorExtensions.indexOf(extension);
337
+ if (index === -1) {
338
+ this.editorExtensions.push(extension);
339
+ showDocsNotice(this.entry, `${this.entry.name}: enabled the editor extension. Run the command again to disable it.`);
340
+ } else {
341
+ this.editorExtensions.splice(index, 1);
342
+ showDocsNotice(this.entry, `${this.entry.name}: disabled the editor extension.`);
343
+ }
344
+ this.app.workspace.updateOptions();
345
+ }
346
+
347
+ private childManifest(): PluginManifest {
348
+ return {
349
+ ...this.plugin.manifest,
350
+ id: `${this.plugin.manifest.id}-docs-${this.entry.id}`,
351
+ name: `Docs: ${this.entry.name}`
352
+ };
353
+ }
354
+
355
+ private removeChild(): void {
356
+ const previous = this.children.get(this.entry.id);
357
+ if (previous) {
358
+ this.plugin.removeChild(previous);
359
+ this.children.delete(this.entry.id);
360
+ }
361
+ }
362
+
363
+ private replaceChild<T extends Component>(child: T): T {
364
+ this.removeChild();
365
+ this.children.set(this.entry.id, child);
366
+ return this.plugin.addChild(child);
367
+ }
368
+ }
369
+
370
+ class DefinitionsSettingTab extends PluginSettingTab {
371
+ public constructor(app: App, plugin: Plugin, private readonly items: SettingDefinitionItem[]) {
372
+ super(app, plugin);
373
+ }
374
+
375
+ public override getSettingDefinitions(): SettingDefinitionItem[] {
376
+ return this.items;
377
+ }
378
+ }
379
+
380
+ /** Lists every snippet and opens the docs page of the chosen one. */
381
+ class DocsPageSuggestModal extends FuzzySuggestModal<DocsEntry> {
382
+ public constructor(app: App, private readonly entries: readonly DocsEntry[]) {
383
+ super(app);
384
+ this.setPlaceholder('Pick a snippet to open its docs page');
385
+ }
386
+
387
+ public override getItems(): DocsEntry[] {
388
+ return [...this.entries];
389
+ }
390
+
391
+ public override getItemText(entry: DocsEntry): string {
392
+ return entry.name;
393
+ }
394
+
395
+ public override onChooseItem(entry: DocsEntry): void {
396
+ window.open(entry.source);
397
+ }
398
+ }
399
+
400
+ /**
401
+ * Puts a first row linking the snippet's docs page at the top of its settings tab. The tab is the snippet's own, so
402
+ * this wraps its two ways of rendering rather than subclassing it: Obsidian renders the definitions when
403
+ * `getSettingDefinitions()` returns any, and calls `display()` only when it returns none.
404
+ *
405
+ * @param tab - The tab the snippet created.
406
+ * @param entry - The snippet.
407
+ * @returns The same tab.
408
+ */
409
+ function withDocsLink(tab: PluginSettingTab, entry: DocsEntry): PluginSettingTab {
410
+ const getSettingDefinitions = tab.getSettingDefinitions.bind(tab);
411
+ tab.getSettingDefinitions = (): SettingDefinitionItem[] => {
412
+ const items = getSettingDefinitions();
413
+ if (items.length === 0) {
414
+ return items;
415
+ }
416
+ return [
417
+ {
418
+ name: 'Docs page',
419
+ render: (setting): void => {
420
+ setting.setDesc(createFragment((fragment) => fragment.append(createDocsLink(entry))));
421
+ },
422
+ searchable: false
423
+ },
424
+ ...items
425
+ ];
426
+ };
427
+ const display = tab.display.bind(tab);
428
+ tab.display = (): void => {
429
+ display();
430
+ tab.containerEl.prepend(createDiv({ cls: 'setting-item-description' }, (div) => div.append(createDocsLink(entry))));
431
+ };
432
+ return tab;
433
+ }
434
+
435
+ function preview(value: unknown): string {
436
+ let text: string;
437
+ if (typeof value === 'string') {
438
+ text = JSON.stringify(value);
439
+ } else if (value instanceof TFile) {
440
+ text = value.path;
441
+ } else {
442
+ try {
443
+ text = JSON.stringify(value) ?? String(value);
444
+ } catch {
445
+ text = String(value);
446
+ }
447
+ }
448
+ return text.length > RESULT_PREVIEW_LENGTH ? `${text.slice(0, RESULT_PREVIEW_LENGTH)}...` : text;
449
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "allowImportingTsExtensions": true,
4
+ "allowSyntheticDefaultImports": true,
5
+ "forceConsistentCasingInFileNames": true,
6
+ "isolatedModules": true,
7
+ "lib": [
8
+ "DOM",
9
+ "ES2021"
10
+ ],
11
+ "module": "ESNext",
12
+ "moduleResolution": "bundler",
13
+ "noEmit": true,
14
+ "noFallthroughCasesInSwitch": true,
15
+ "noImplicitReturns": true,
16
+ "noUncheckedIndexedAccess": true,
17
+ "skipLibCheck": true,
18
+ "strict": true,
19
+ "target": "ES2021",
20
+ "types": []
21
+ },
22
+ "include": [
23
+ "./**/*.ts"
24
+ ]
25
+ }