@riebeckite/honox 0.0.12 → 0.0.14

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/dist/index.js CHANGED
@@ -255,7 +255,7 @@ function isJavaScriptModule(filePath) {
255
255
  }
256
256
 
257
257
  // src/scaffold/index.ts
258
- import fs6 from "node:fs/promises";
258
+ import fs7 from "node:fs/promises";
259
259
  import path7 from "node:path";
260
260
 
261
261
  // src/scaffold/deployment.ts
@@ -275,9 +275,9 @@ function deploymentTemplateFiles(options) {
275
275
  if (options.siteRepository !== void 0) {
276
276
  assertGitHubRepository(options.siteRepository, "siteRepository");
277
277
  }
278
- if (options.notifyOnContentPush && options.siteRepository === void 0) {
278
+ if (contentRepository !== void 0 && options.siteRepository === void 0) {
279
279
  throw new Error(
280
- "siteRepository is required when notifyOnContentPush is true."
280
+ "siteRepository is required when contentRepository is provided."
281
281
  );
282
282
  }
283
283
  return [
@@ -286,7 +286,7 @@ function deploymentTemplateFiles(options) {
286
286
  path: ".github/workflows/deploy.yml",
287
287
  content: deployWorkflow(contentRepository)
288
288
  },
289
- ...options.notifyOnContentPush && options.siteRepository !== void 0 ? [
289
+ ...contentRepository !== void 0 && options.siteRepository !== void 0 ? [
290
290
  {
291
291
  path: "github/notify-site.yml",
292
292
  content: notifySiteWorkflow(options.siteRepository)
@@ -326,7 +326,7 @@ on:
326
326
  types: [content-updated]
327
327
 
328
328
  concurrency:
329
- group: deploy-\${{ github.ref }}
329
+ group: riebeckite-deploy
330
330
  cancel-in-progress: true
331
331
 
332
332
  jobs:
@@ -418,13 +418,10 @@ function defaultLanguageForLocale(locale) {
418
418
  return "en";
419
419
  }
420
420
  var SCAFFOLD_PRESET_NAMES = [
421
- "empty",
422
- "minimal",
423
421
  "starter",
424
- "rich",
425
- "full",
426
- "max",
427
- "ultra"
422
+ "minimal",
423
+ "showcase",
424
+ "empty"
428
425
  ];
429
426
  function isScaffoldPresetName(value) {
430
427
  return SCAFFOLD_PRESET_NAMES.includes(value);
@@ -809,38 +806,9 @@ var minimal = {
809
806
  };
810
807
  var starter = {
811
808
  name: "starter",
812
- description: "The default starter: Obsidian Markdown, color mode, seven languages, and a site header.",
809
+ description: "Recommended for most sites: a practical Markdown garden with search, discovery, and reading essentials.",
813
810
  languages: [...SCAFFOLD_LANGUAGES],
814
811
  theme: defaultTheme,
815
- plugins: [obsidianMarkdown, colorMode, l10n],
816
- contentPages: ["index"],
817
- appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
818
- readme: "standard"
819
- };
820
- var rich = {
821
- name: "rich",
822
- description: "A showcasing starter: publishing and reading plugins plus guided ecosystem tour pages in seven languages.",
823
- languages: [...SCAFFOLD_LANGUAGES],
824
- theme: showCaseTheme,
825
- plugins: [
826
- obsidianMarkdown,
827
- colorMode,
828
- l10n,
829
- seo,
830
- toc,
831
- properties,
832
- alias,
833
- codeEnhance
834
- ],
835
- contentPages: ["index", "framework/plugins", "framework/themes"],
836
- appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
837
- readme: "rich"
838
- };
839
- var full = {
840
- name: "full",
841
- description: "A ready blog: discovery, media, and reading plugins plus a build guide.",
842
- languages: [...SCAFFOLD_LANGUAGES],
843
- theme: showCaseTheme,
844
812
  plugins: [
845
813
  obsidianMarkdown,
846
814
  colorMode,
@@ -853,102 +821,19 @@ var full = {
853
821
  search,
854
822
  backlinks,
855
823
  relatedPosts,
856
- share,
857
- changelog,
858
- webmention,
859
824
  recentPosts,
860
- attachment,
861
- pdf,
862
- media,
863
825
  responsiveImage,
864
826
  lightbox,
865
- highlight,
866
- codeTabs,
867
- codeAnnotations,
868
- shortcodes,
869
827
  series,
870
- taxonomy,
871
- autoCardLink,
872
- richEmbed,
873
- gallery
828
+ taxonomy
874
829
  ],
875
- contentPages: ["index", "framework/plugins", "framework/themes", "guide"],
830
+ contentPages: ["index", "guide", "examples"],
876
831
  appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
877
- readme: "rich"
878
- };
879
- var max = {
880
- name: "max",
881
- description: "Diagram and knowledge plugins on top of full, with showcase example pages.",
882
- languages: [...SCAFFOLD_LANGUAGES],
883
- theme: showCaseTheme,
884
- plugins: [
885
- obsidianMarkdown,
886
- colorMode,
887
- l10n,
888
- seo,
889
- toc,
890
- properties,
891
- alias,
892
- codeEnhance,
893
- search,
894
- backlinks,
895
- relatedPosts,
896
- share,
897
- changelog,
898
- webmention,
899
- recentPosts,
900
- attachment,
901
- pdf,
902
- media,
903
- responsiveImage,
904
- lightbox,
905
- highlight,
906
- codeTabs,
907
- codeAnnotations,
908
- shortcodes,
909
- series,
910
- taxonomy,
911
- autoCardLink,
912
- richEmbed,
913
- gallery,
914
- mermaid,
915
- graphviz,
916
- d2,
917
- plantuml,
918
- chartjs,
919
- vegaLite,
920
- wavedrom,
921
- markmap,
922
- map,
923
- marp,
924
- qrCode,
925
- discordEmbed,
926
- excalidraw,
927
- excaliBrain,
928
- canvas,
929
- bases,
930
- dataview,
931
- flashcards,
932
- kanban,
933
- query,
934
- localGraph,
935
- hoverPreview,
936
- gardenExplorer,
937
- ux
938
- ],
939
- contentPages: [
940
- "index",
941
- "framework/plugins",
942
- "framework/themes",
943
- "guide",
944
- "examples"
945
- ],
946
- appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
947
- readme: "rich"
832
+ readme: "standard"
948
833
  };
949
- var ultra = {
950
- name: "ultra",
951
- description: "The full plugin catalog and theme reference pages — everything the ecosystem offers.",
834
+ var showcase = {
835
+ name: "showcase",
836
+ description: "Explore the complete Riebeckite ecosystem with rendered examples, reference pages, and local fixtures.",
952
837
  languages: [...SCAFFOLD_LANGUAGES],
953
838
  theme: showCaseTheme,
954
839
  plugins: [
@@ -1024,7 +909,7 @@ var ultra = {
1024
909
  appFiles: [...BASE_APP_FILES, "index", "slug", "header", "article"],
1025
910
  readme: "rich"
1026
911
  };
1027
- var scaffoldPresets = { empty, minimal, starter, rich, full, max, ultra };
912
+ var scaffoldPresets = { starter, minimal, showcase, empty };
1028
913
  var SCAFFOLD_DEFAULT_PRESET = "starter";
1029
914
  function resolveScaffoldPreset(value) {
1030
915
  if (value === void 0) return scaffoldPresets[SCAFFOLD_DEFAULT_PRESET];
@@ -1038,6 +923,9 @@ function resolveScaffoldPreset(value) {
1038
923
  return preset;
1039
924
  }
1040
925
 
926
+ // src/scaffold/templates.ts
927
+ import fs6 from "node:fs";
928
+
1041
929
  // src/vite_plugin.ts
1042
930
  import path6 from "node:path";
1043
931
 
@@ -1121,12 +1009,28 @@ function createClientModule(config) {
1121
1009
  `import ${importTarget} from ${JSON.stringify(entry.moduleSpecifier)};`
1122
1010
  );
1123
1011
  const publicConfig = entry.publicConfig;
1012
+ const initializer = publicConfig === void 0 ? `${localName}()` : `${localName}(${serializePublicClientConfig(publicConfig)})`;
1124
1013
  initializers.push(
1125
- publicConfig === void 0 ? `${localName}()` : `${localName}(${serializePublicClientConfig(publicConfig)})`
1014
+ `runPluginClientInitializer(${JSON.stringify(entry.moduleSpecifier)}, () => ${initializer})`
1126
1015
  );
1127
1016
  }
1128
1017
  return `${imports.join("\n")}
1129
1018
 
1019
+ function runPluginClientInitializer(name, initialize) {
1020
+ try {
1021
+ const result = initialize();
1022
+ if (result && typeof result.then === "function") {
1023
+ result.catch((error) => reportPluginClientError(name, error));
1024
+ }
1025
+ } catch (error) {
1026
+ reportPluginClientError(name, error);
1027
+ }
1028
+ }
1029
+
1030
+ function reportPluginClientError(name, error) {
1031
+ console.error("[riebeckite] Plugin client initializer failed: " + name, error);
1032
+ }
1033
+
1130
1034
  export function initRiebeckiteClient() {
1131
1035
  ${initializers.map((initializer) => ` ${initializer};`).join("\n")}
1132
1036
  }
@@ -1604,10 +1508,19 @@ function style(preset) {
1604
1508
  "}",
1605
1509
  "",
1606
1510
  ".site-header__home {",
1511
+ " display: inline-flex;",
1512
+ " align-items: center;",
1513
+ " gap: 0.5rem;",
1607
1514
  " color: #111827;",
1608
1515
  " font-weight: 700;",
1609
1516
  " text-decoration: none;",
1610
1517
  "}",
1518
+ "",
1519
+ ".site-header__logo {",
1520
+ " width: 1.75rem;",
1521
+ " height: 1.75rem;",
1522
+ " object-fit: contain;",
1523
+ "}",
1611
1524
  ""
1612
1525
  );
1613
1526
  }
@@ -1642,6 +1555,13 @@ export function SiteHeader() {
1642
1555
  return (
1643
1556
  <header class="site-header">
1644
1557
  <a href="/" class="site-header__home">
1558
+ <img
1559
+ src="/riebeckite-logo.png"
1560
+ alt=""
1561
+ class="site-header__logo"
1562
+ width="28"
1563
+ height="28"
1564
+ />
1645
1565
  {config.site.title}
1646
1566
  </a>
1647
1567
  <ColorModeToggle />
@@ -1704,6 +1624,10 @@ function themeAttributes() {
1704
1624
  };
1705
1625
  }
1706
1626
 
1627
+ // Riebeckite plugin client entries need the HonoX client bundle even without
1628
+ // an island component.
1629
+ export const __importing_islands = true;
1630
+
1707
1631
  export default jsxRenderer(({ children }, c) => {
1708
1632
  const headTags: readonly PluginHeadTag[] = c.get("headTags") ?? [];
1709
1633
 
@@ -1716,6 +1640,7 @@ export default jsxRenderer(({ children }, c) => {
1716
1640
  <meta charset="utf-8" />
1717
1641
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
1718
1642
  <title>{config.site.title}</title>
1643
+ <link rel="icon" href="/favicon.ico" />
1719
1644
  ${hasColorMode ? ` <ColorModeScript />
1720
1645
  ` : ""} <Link href="/app/style.css" rel="stylesheet" />
1721
1646
  {headTags.map(renderHeadTag)}
@@ -1750,12 +1675,17 @@ function bareRenderer() {
1750
1675
  import { Link, Script } from "honox/server";
1751
1676
  import { config } from "../config";
1752
1677
 
1678
+ // Riebeckite plugin client entries need the HonoX client bundle even without
1679
+ // an island component.
1680
+ export const __importing_islands = true;
1681
+
1753
1682
  export default jsxRenderer(({ children }, c) => (
1754
1683
  <html lang={c.get("htmlLanguage") ?? config.site.locale}>
1755
1684
  <head>
1756
1685
  <meta charset="utf-8" />
1757
1686
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
1758
1687
  <title>{config.site.title}</title>
1688
+ <link rel="icon" href="/favicon.ico" />
1759
1689
  <Link href="/app/style.css" rel="stylesheet" />
1760
1690
  <Script src="/app/client.ts" async />
1761
1691
  </head>
@@ -1816,7 +1746,8 @@ function slugRoute() {
1816
1746
  return `import { isPublished } from "@riebeckite/core";
1817
1747
  import {
1818
1748
  contentRouteSsgParams,
1819
- resolveContentRoute,
1749
+ pluginPageSsgParams,
1750
+ resolveRiebeckiteRoute,
1820
1751
  } from "@riebeckite/honox/server";
1821
1752
  import { createRoute } from "honox/factory";
1822
1753
  import { SiteArticle } from "../components/article";
@@ -1826,21 +1757,27 @@ import { content } from "../content";
1826
1757
  export default createRoute(
1827
1758
  contentRouteSsgParams("/:slug{.+}", async () => {
1828
1759
  const manifest = await content.getManifest();
1829
- return manifest.entries
1760
+ const contentPaths = manifest.entries
1830
1761
  .filter((entry) => isPublished(config, entry.frontmatter))
1831
1762
  .filter((entry) => entry.permalink !== "/")
1832
1763
  .map((entry) => ({ slug: entry.permalink.replace(/^\\/+/, "") }));
1764
+ return [...contentPaths, ...(await pluginPageSsgParams(content))];
1833
1765
  }),
1834
1766
  async (c) => {
1835
1767
  const requestedSlug = c.req.param("slug");
1836
1768
  if (!requestedSlug) return c.notFound();
1837
1769
  if (/\\.[a-zA-Z0-9]+$/.test(requestedSlug)) return c.notFound();
1838
1770
 
1839
- const manifest = await content.getManifest();
1840
- const route = resolveContentRoute(manifest, c.req.path);
1771
+ const route = await resolveRiebeckiteRoute(content, c.req.path);
1841
1772
  if (!route) return c.notFound();
1842
1773
  if (route.kind === "redirect")
1843
1774
  return c.redirect(route.location, route.status);
1775
+ if (route.kind === "page") {
1776
+ c.set("headTags", route.page.headTags ?? []);
1777
+ return c.render(
1778
+ <div dangerouslySetInnerHTML={{ __html: route.page.body }} />,
1779
+ );
1780
+ }
1844
1781
 
1845
1782
  const post = await content.getProcessedContent(route.entry.slug);
1846
1783
  if (!isPublished(config, post.frontmatter)) {
@@ -2129,7 +2066,7 @@ var PLUGIN_MARKDOWN_GUIDES = {
2129
2066
  "---",
2130
2067
  "",
2131
2068
  "```daily-snippet",
2132
- "Fixed the ultra preset examples.",
2069
+ "Updated the showcase examples.",
2133
2070
  "```"
2134
2071
  ].join("\n")
2135
2072
  },
@@ -2208,7 +2145,10 @@ function localizedContentFiles(variables, preset) {
2208
2145
  };
2209
2146
  for (const page of preset.contentPages) {
2210
2147
  if (page === "index") {
2211
- pushLocalized("index", (language) => indexContent(variables, language));
2148
+ pushLocalized(
2149
+ "index",
2150
+ (language) => indexContent(variables, preset, language)
2151
+ );
2212
2152
  } else if (page === "framework/plugins") {
2213
2153
  pushLocalized(
2214
2154
  "framework/plugins",
@@ -2235,6 +2175,12 @@ function localizedContentFiles(variables, preset) {
2235
2175
  pushEnglishOnly("reference/themes", () => referenceThemesContent(preset));
2236
2176
  }
2237
2177
  }
2178
+ if (preset.name === "starter" || preset.name === "showcase") {
2179
+ files.push(...knowledgeFixtureFiles(preset));
2180
+ }
2181
+ if (preset.name === "showcase") {
2182
+ files.push(...showcaseAssetFiles());
2183
+ }
2238
2184
  return files;
2239
2185
  }
2240
2186
  function read(text, language) {
@@ -2252,6 +2198,72 @@ ${code}
2252
2198
  \`\`\`
2253
2199
  `;
2254
2200
  }
2201
+ function knowledgeFixtureFiles(preset) {
2202
+ const prefix = preset.name === "showcase" ? "demo" : "notes";
2203
+ return [
2204
+ {
2205
+ path: `content/${prefix}/planning.md`,
2206
+ content: [
2207
+ "---",
2208
+ "title: Planning a Markdown site",
2209
+ "description: A related note used by the generated discovery examples.",
2210
+ "date: 2026-09-30",
2211
+ "tags: [riebeckite, project]",
2212
+ "status: active",
2213
+ "aliases: [/start-here/]",
2214
+ "series: publish-a-site",
2215
+ "series_title: Publish a site",
2216
+ "series_order: 1",
2217
+ "publish: true",
2218
+ "---",
2219
+ "",
2220
+ "# Planning a Markdown site",
2221
+ "",
2222
+ "Start with [[writing]] to see backlinks, related posts, tags, and the series navigation working together."
2223
+ ].join("\n")
2224
+ },
2225
+ {
2226
+ path: `content/${prefix}/writing.md`,
2227
+ content: [
2228
+ "---",
2229
+ "title: Writing the first note",
2230
+ "description: A second connected note for search and related-content examples.",
2231
+ "date: 2026-10-01",
2232
+ "tags: [riebeckite, project]",
2233
+ "status: active",
2234
+ "series: publish-a-site",
2235
+ "series_title: Publish a site",
2236
+ "series_order: 2",
2237
+ "publish: true",
2238
+ "---",
2239
+ "",
2240
+ "# Writing the first note",
2241
+ "",
2242
+ "This note links back to [[planning]]. Search for **Markdown site** or browse the generated tags."
2243
+ ].join("\n")
2244
+ }
2245
+ ];
2246
+ }
2247
+ function showcaseAssetFiles() {
2248
+ return [
2249
+ {
2250
+ path: "content/images/demo.svg",
2251
+ content: '<svg xmlns="http://www.w3.org/2000/svg" width="640" height="360" viewBox="0 0 640 360"><rect width="640" height="360" fill="#315b8c"/><text x="320" y="180" fill="white" font-size="32" text-anchor="middle">Riebeckite showcase</text></svg>\n'
2252
+ },
2253
+ {
2254
+ path: "content/attachments/project-brief.pdf",
2255
+ content: "%PDF-1.1\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj\n2 0 obj<</Type/Pages/Count 0/Kids[]>>endobj\ntrailer<</Root 1 0 R>>\n%%EOF\n"
2256
+ },
2257
+ {
2258
+ path: "content/drawings/Architecture.excalidraw",
2259
+ content: '{"type":"excalidraw","version":2,"elements":[],"appState":{"viewBackgroundColor":"#ffffff"},"files":{}}\n'
2260
+ },
2261
+ {
2262
+ path: "content/drawings/site.canvas",
2263
+ content: '{"nodes":[{"id":"note","type":"text","text":"Note","x":0,"y":0,"width":200,"height":60}],"edges":[]}\n'
2264
+ }
2265
+ ];
2266
+ }
2255
2267
  var INDEX = {
2256
2268
  lead: {
2257
2269
  en: "Welcome to your Riebeckite site.",
@@ -2344,7 +2356,7 @@ var INDEX = {
2344
2356
  ko: "번역 페이지는 기본 파일 옆에 `<base>.<lang>.md` 규칙으로 둡니다(예: `about.ja.md`). l10n 플러그인이 `/lang/` 경로로 서빙하며 자동으로 링크합니다."
2345
2357
  }
2346
2358
  };
2347
- function indexContent(variables, language) {
2359
+ function indexContent(variables, preset, language) {
2348
2360
  const title = variables.title;
2349
2361
  return [
2350
2362
  frontmatter(),
@@ -2353,9 +2365,17 @@ function indexContent(variables, language) {
2353
2365
  read(INDEX.translatedNote, language),
2354
2366
  heading(2, read(INDEX.whatHeading, language)),
2355
2367
  read(INDEX.whatBody, language),
2356
- heading(2, read(INDEX.exploreHeading, language)),
2357
- `- [${read(INDEX.explorePlugins, language)}](/framework/plugins)`,
2358
- `- [${read(INDEX.exploreThemes, language)}](/framework/themes)`,
2368
+ ...preset.name === "showcase" ? [
2369
+ heading(2, read(INDEX.exploreHeading, language)),
2370
+ `- [${read(INDEX.explorePlugins, language)}](/framework/plugins)`,
2371
+ `- [${read(INDEX.exploreThemes, language)}](/framework/themes)`,
2372
+ "- [Working examples](/examples/)",
2373
+ "- [Plugin reference](/reference/plugins/)"
2374
+ ] : preset.name === "starter" ? [
2375
+ heading(2, read(INDEX.exploreHeading, language)),
2376
+ "- [Getting started](/guide/)",
2377
+ "- [Example notes](/examples/)"
2378
+ ] : [],
2359
2379
  heading(2, read(INDEX.editHeading, language)),
2360
2380
  read(INDEX.editLead, language),
2361
2381
  read(INDEX.editL10n, language),
@@ -3223,10 +3243,16 @@ var EXAMPLES_COPY = {
3223
3243
  ja: "サンプル集"
3224
3244
  },
3225
3245
  intro: {
3226
- en: "A working demo of every diagram, chart, and code feature this preset ships. Fenced code blocks are turned into rendered output at build time by the diagram plugins; code blocks gain toolbars from the code plugins. Each section below is also copy-pasteable into any Markdown document.",
3227
- ja: "このプリセットが含む、すべての図表・チャート・コード機能の実例です。フェンス付きコードブロックはビルド時に図表プラグインが描画し、コードブロックにはコードプラグインがツールバーを追加します。以下の各セクションは、任意の Markdown 文書にそのままコピーして使えます。"
3246
+ en: "Rendered examples for the diagram, chart, and code features in this preset. Fenced code blocks are turned into output at build time by the relevant plugins, while code blocks gain toolbars from the code plugins. Each section below is copy-pasteable into a Markdown document.",
3247
+ ja: "このプリセットに含まれる図表・チャート・コード機能の描画例です。フェンス付きコードブロックは対応するプラグインによりビルド時に出力へ変換され、コードブロックにはツールバーが付きます。以下の各セクションは、Markdown 文書にそのままコピーして使えます。"
3228
3248
  }
3229
3249
  };
3250
+ var SHOWCASE_GUIDE_DEMOS = [
3251
+ "@riebeckite/plugin-plantuml",
3252
+ "@riebeckite/plugin-excalidraw",
3253
+ "@riebeckite/plugin-canvas",
3254
+ "@riebeckite/plugin-flashcards"
3255
+ ];
3230
3256
  function examplesContent(preset, language) {
3231
3257
  const lines = [
3232
3258
  frontmatter(),
@@ -3243,6 +3269,19 @@ function examplesContent(preset, language) {
3243
3269
  lines.push(readSummary(demo.intro, language), "");
3244
3270
  lines.push(demo.markdown, "");
3245
3271
  }
3272
+ if (preset.name === "showcase") {
3273
+ for (const packageName of SHOWCASE_GUIDE_DEMOS) {
3274
+ if (!hasPlugin(preset, packageName)) continue;
3275
+ const guide = PLUGIN_MARKDOWN_GUIDES[packageName];
3276
+ if (!guide) continue;
3277
+ lines.push(
3278
+ heading(2, packageName.replace("@riebeckite/plugin-", "")),
3279
+ ""
3280
+ );
3281
+ lines.push(guide.summary, "");
3282
+ lines.push(guide.markdown, "");
3283
+ }
3284
+ }
3246
3285
  return lines.join("\n");
3247
3286
  }
3248
3287
  function referencePluginsContent(preset, variables) {
@@ -3334,7 +3373,7 @@ function referenceThemesContent(preset) {
3334
3373
  }
3335
3374
 
3336
3375
  // src/scaffold/version.ts
3337
- var RIEBECKITE_VERSION = "^0.0.12";
3376
+ var RIEBECKITE_VERSION = "^0.0.14";
3338
3377
 
3339
3378
  // src/scaffold/templates.ts
3340
3379
  function siteTemplateFiles(preset, variables) {
@@ -3348,10 +3387,26 @@ function siteTemplateFiles(preset, variables) {
3348
3387
  { path: "tsconfig.json", content: tsconfig() },
3349
3388
  { path: ".gitignore", content: gitignore() },
3350
3389
  { path: "README.md", content: readme(preset, variables) },
3390
+ { path: "public/favicon.ico", content: readPackageAsset("favicon.ico") },
3391
+ {
3392
+ path: "public/riebeckite-logo.png",
3393
+ content: readPackageAsset("riebeckite-logo.png")
3394
+ },
3351
3395
  ...localizedContentFiles(variables, preset),
3352
3396
  ...appFiles(preset)
3353
3397
  ];
3354
3398
  }
3399
+ function readPackageAsset(fileName) {
3400
+ const candidates = [
3401
+ new URL(`../../assets/${fileName}`, import.meta.url),
3402
+ new URL(`../../../assets/${fileName}`, import.meta.url),
3403
+ new URL(`../assets/${fileName}`, import.meta.url)
3404
+ ];
3405
+ for (const candidate of candidates) {
3406
+ if (fs6.existsSync(candidate)) return fs6.readFileSync(candidate);
3407
+ }
3408
+ throw new Error(`Missing Riebeckite scaffold asset: ${fileName}`);
3409
+ }
3355
3410
  var APP_FILE_LABELS = [
3356
3411
  "server",
3357
3412
  "client",
@@ -3484,11 +3539,8 @@ function riebeckiteConfig(preset, variables) {
3484
3539
  var OPTION_DEPTH = {
3485
3540
  empty: 0,
3486
3541
  minimal: 0,
3487
- starter: 0,
3488
- rich: 1,
3489
- full: 2,
3490
- max: 2,
3491
- ultra: 3
3542
+ starter: 2,
3543
+ showcase: 3
3492
3544
  };
3493
3545
  function optionContext(preset, variables) {
3494
3546
  return {
@@ -3605,24 +3657,12 @@ var README_INTRO = {
3605
3657
  ja: "最小限で実用的な Riebeckite サイトです。Obsidian マークダウン・minimal テーマ・1 ページ構成。"
3606
3658
  },
3607
3659
  starter: {
3608
- en: "The default Riebeckite starter: Obsidian Markdown, a color-mode toggle, and seven languages.",
3609
- ja: "Riebeckite の既定スターターです。Obsidian マークダウン・カラーモード切替・7 言語対応。"
3660
+ en: "Recommended for most sites: a practical Markdown garden with search, discovery, and reading essentials.",
3661
+ ja: "大半のサイトにおすすめの構成です。検索・発見・閲覧に必要な機能を備えた実用的な Markdown サイトを作れます。"
3610
3662
  },
3611
- rich: {
3612
- en: "A showcasing starter: publishing and reading plugins plus guided ecosystem tour pages in seven languages.",
3613
- ja: "紹介を目的としたスターターです。公開・読書体験のプラグインと、7 言語のエコシステム紹介ページ付き。"
3614
- },
3615
- full: {
3616
- en: "A ready-to-use blog preset: discovery, media, and reading plugins plus a getting-started guide.",
3617
- ja: "そのまま使えるブログ向けプリセットです。検索・メディア・読書体験のプラグインと入門ガイド付き。"
3618
- },
3619
- max: {
3620
- en: "Diagram, chart, and knowledge plugins on top of full, with showcase example pages.",
3621
- ja: "full に図解・チャート・ナレッジ系プラグインを加えた構成で、お試し用サンプルページ付き。"
3622
- },
3623
- ultra: {
3624
- en: "The complete plugin catalog with plugin and theme reference pages.",
3625
- ja: "全プラグインを有効化した最上位構成。プラグイン/テーマのリファレンスページ付き。"
3663
+ showcase: {
3664
+ en: "Explore the complete Riebeckite ecosystem with rendered examples, reference pages, and local fixtures.",
3665
+ ja: "描画例・リファレンスページ・ローカルのフィクスチャで、Riebeckite のエコシステム全体を確認できる構成です。"
3626
3666
  }
3627
3667
  };
3628
3668
  var README_WORDS = {
@@ -4237,16 +4277,15 @@ async function scaffoldRiebeckiteSite(options) {
4237
4277
  );
4238
4278
  for (const file of files) {
4239
4279
  const filePath = path7.join(targetDirectory, file.path);
4240
- await fs6.mkdir(path7.dirname(filePath), { recursive: true });
4241
- await fs6.writeFile(filePath, file.content, "utf8");
4280
+ await fs7.mkdir(path7.dirname(filePath), { recursive: true });
4281
+ await fs7.writeFile(filePath, file.content);
4242
4282
  }
4243
4283
  return { targetDirectory, files: files.map((file) => file.path) };
4244
4284
  }
4245
4285
  function deploymentOptions(options) {
4246
4286
  return {
4247
4287
  contentRepository: options.contentRepository,
4248
- siteRepository: options.siteRepository,
4249
- notifyOnContentPush: options.notifyOnContentPush
4288
+ siteRepository: options.siteRepository
4250
4289
  };
4251
4290
  }
4252
4291
  function validateDeploymentOptions(options) {
@@ -4264,20 +4303,14 @@ function validateDeploymentOptions(options) {
4264
4303
  }
4265
4304
  if (options.contentRepository !== void 0 && !options.githubActions) {
4266
4305
  throw new ScaffoldSiteError(
4267
- "contentRepository requires githubActions to generate its checkout workflow."
4306
+ "--content-repository requires --github-actions."
4268
4307
  );
4269
4308
  }
4270
- if (options.notifyOnContentPush && !options.githubActions) {
4271
- throw new ScaffoldSiteError("notifyOnContentPush requires githubActions.");
4272
- }
4273
- if (options.notifyOnContentPush && options.contentRepository === void 0) {
4309
+ if (options.contentRepository !== void 0 && options.siteRepository === void 0) {
4274
4310
  throw new ScaffoldSiteError(
4275
- "notifyOnContentPush requires contentRepository."
4311
+ "--site-repository is required when --content-repository is used with --github-actions."
4276
4312
  );
4277
4313
  }
4278
- if (options.notifyOnContentPush && options.siteRepository === void 0) {
4279
- throw new ScaffoldSiteError("notifyOnContentPush requires siteRepository.");
4280
- }
4281
4314
  }
4282
4315
  function templateVariables(options, targetDirectory) {
4283
4316
  const name = normalizePackageName(
@@ -4294,7 +4327,7 @@ function templateVariables(options, targetDirectory) {
4294
4327
  async function assertTargetWritable(targetDirectory, files, overwrite) {
4295
4328
  let entries;
4296
4329
  try {
4297
- entries = await fs6.readdir(targetDirectory);
4330
+ entries = await fs7.readdir(targetDirectory);
4298
4331
  } catch (error) {
4299
4332
  if (isNotFoundError2(error)) return;
4300
4333
  throw error;
@@ -4338,9 +4371,11 @@ export {
4338
4371
  createRiebeckiteSsg,
4339
4372
  defaultSsgEntry,
4340
4373
  defaultSsrExternals,
4374
+ empty,
4341
4375
  formatScaffoldNextSteps,
4342
4376
  isScaffoldPresetName,
4343
4377
  loadRiebeckiteConfig,
4378
+ minimal,
4344
4379
  replaceHonoxIslandDependencyPlugin,
4345
4380
  resolveHonoxApplication,
4346
4381
  resolveHonoxApplicationRoot,
@@ -4352,5 +4387,7 @@ export {
4352
4387
  riebeckiteVite,
4353
4388
  scaffoldPresets,
4354
4389
  scaffoldRiebeckiteSite,
4355
- startHonoxDevServer
4390
+ showcase,
4391
+ startHonoxDevServer,
4392
+ starter
4356
4393
  };
package/dist/server.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export type { ResolvedContentRoute } from "./src/content_route.js";
2
- export { contentRouteSsgParams, resolveContentRoute, ssgEnumerableHandler, } from "./src/content_route.js";
1
+ export type { ResolvedContentRoute, ResolvedRiebeckiteRoute, } from "./src/content_route.js";
2
+ export { contentRouteSsgParams, pluginPageSsgParams, resolveContentRoute, resolveRiebeckiteRoute, ssgEnumerableHandler, } from "./src/content_route.js";
3
3
  export { mountRiebeckiteEndpoints } from "./src/endpoints.js";