jekyll-obsidian-site 0.3.2 → 0.3.4

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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -3
  3. data/website/_includes/website/archive-actions.html +6 -0
  4. data/website/_includes/website/archive-pagination.html +1 -1
  5. data/website/_includes/website/content-toolbar.html +5 -0
  6. data/website/_includes/website/dialogs.html +5 -3
  7. data/website/_includes/website/head.html +4 -4
  8. data/website/_includes/website/header.html +40 -47
  9. data/website/_includes/website/local-graph.html +4 -2
  10. data/website/_includes/website/search-button.html +5 -0
  11. data/website/_includes/website/sidebar-docs.html +7 -0
  12. data/website/_includes/website/site-actions.html +13 -0
  13. data/website/_includes/website/site-mark.html +4 -0
  14. data/website/_includes/website/site-navigation.html +11 -0
  15. data/website/_layouts/website-docs.html +7 -4
  16. data/website/_layouts/website-minimal.html +7 -4
  17. data/website/assets/archive-filters-NW2PJML6.js +12 -0
  18. data/website/assets/{archive-worker-G2I544NV.js → archive-worker-ARJLSLUT.js} +1 -1
  19. data/website/assets/chunks/{abnfDiagram-WEYOIA3C-H6XY6TGQ.js → abnfDiagram-WEYOIA3C-NBCZFNDS.js} +1 -1
  20. data/website/assets/chunks/architecture-WOLXFQ4H-UAT5D5BF.js +1 -0
  21. data/website/assets/chunks/{architectureDiagram-ZHVYKT53-4FFTTUL4.js → architectureDiagram-ZHVYKT53-VS2LUAZF.js} +1 -1
  22. data/website/assets/chunks/{blockDiagram-RJAE7QA3-AXWKL2AZ.js → blockDiagram-RJAE7QA3-G2NG3LXC.js} +1 -1
  23. data/website/assets/chunks/{c4Diagram-XDPPPE54-2GAHNEQW.js → c4Diagram-XDPPPE54-S2NX55I6.js} +1 -1
  24. data/website/assets/chunks/{chunk-I5CHBHZT.js → chunk-32QNBEAO.js} +1 -1
  25. data/website/assets/chunks/{chunk-EGQTNACA.js → chunk-3MCXVCGH.js} +1 -1
  26. data/website/assets/chunks/{chunk-V3AAEOUZ.js → chunk-3VWF4UPE.js} +1 -1
  27. data/website/assets/chunks/{chunk-EB5GI6TX.js → chunk-3Y5DUBMY.js} +1 -1
  28. data/website/assets/chunks/{chunk-76QEHT4T.js → chunk-432I4U3B.js} +1 -1
  29. data/website/assets/chunks/chunk-55UBIJYA.js +1 -0
  30. data/website/assets/chunks/{chunk-7AU45BWK.js → chunk-5XEDYYZJ.js} +1 -1
  31. data/website/assets/chunks/{chunk-RV7WQMNL.js → chunk-6QRHYJ5Q.js} +1 -1
  32. data/website/assets/chunks/{chunk-KNYDPLLK.js → chunk-6RCFKBVR.js} +1 -1
  33. data/website/assets/chunks/{chunk-MKLMFEY4.js → chunk-6V4JBGVT.js} +1 -1
  34. data/website/assets/chunks/{chunk-NSER5MRF.js → chunk-6VAZIC2Q.js} +1 -1
  35. data/website/assets/chunks/{chunk-L7BMR7WL.js → chunk-74CEOFHD.js} +1 -1
  36. data/website/assets/chunks/{chunk-UNVUNKH6.js → chunk-7ISMYIZE.js} +1 -1
  37. data/website/assets/chunks/{chunk-HP75Y56I.js → chunk-AKHBD6LT.js} +1 -1
  38. data/website/assets/chunks/{chunk-JRAHLUQM.js → chunk-CSLVQJBR.js} +1 -1
  39. data/website/assets/chunks/{chunk-4W4OQ3QY.js → chunk-CZIM56BV.js} +1 -1
  40. data/website/assets/chunks/{chunk-GTVNUHF4.js → chunk-DBRSI4MG.js} +2 -2
  41. data/website/assets/chunks/{chunk-TPW5CADB.js → chunk-DN4Y7LXJ.js} +1 -1
  42. data/website/assets/chunks/{chunk-FBC3PYSO.js → chunk-E2UQN267.js} +1 -1
  43. data/website/assets/chunks/{chunk-6ZQ7VHWN.js → chunk-EKMJKNPW.js} +1 -1
  44. data/website/assets/chunks/{chunk-WGMEMLED.js → chunk-GBARLDDT.js} +1 -1
  45. data/website/assets/chunks/{chunk-USR7LCIV.js → chunk-GKOE62LI.js} +1 -1
  46. data/website/assets/chunks/{chunk-KIPOWFBM.js → chunk-GKPTDKZ6.js} +1 -1
  47. data/website/assets/chunks/{chunk-TMMWB6NQ.js → chunk-H4YEV7VR.js} +1 -1
  48. data/website/assets/chunks/{chunk-6UFWKTSA.js → chunk-HUVVDQHZ.js} +1 -1
  49. data/website/assets/chunks/{chunk-25KVF5ZE.js → chunk-IG4MN3R4.js} +1 -1
  50. data/website/assets/chunks/{chunk-NBH7YOBD.js → chunk-JAJWGTEM.js} +1 -1
  51. data/website/assets/chunks/{chunk-TWGPYWIY.js → chunk-JZV675LF.js} +1 -1
  52. data/website/assets/chunks/{chunk-BNFQ6YYK.js → chunk-MADH2JDR.js} +1 -1
  53. data/website/assets/chunks/{chunk-ODZW2LAZ.js → chunk-NHKO3ASL.js} +1 -1
  54. data/website/assets/chunks/{chunk-NCOVM3YF.js → chunk-O75OSL27.js} +1 -1
  55. data/website/assets/chunks/{chunk-A7665WVC.js → chunk-ONCOEVBS.js} +1 -1
  56. data/website/assets/chunks/{chunk-7KPU4VDE.js → chunk-P22ZROBD.js} +1 -1
  57. data/website/assets/chunks/{chunk-ATQQWCXO.js → chunk-PJDMAGPE.js} +1 -1
  58. data/website/assets/chunks/chunk-RSUYRLUR.js +1 -0
  59. data/website/assets/chunks/{chunk-YM6ZMZQI.js → chunk-SOZAPZJR.js} +1 -1
  60. data/website/assets/chunks/chunk-SYOLNM7D.js +1 -0
  61. data/website/assets/chunks/{chunk-TSOLLCID.js → chunk-U5STX66M.js} +1 -1
  62. data/website/assets/chunks/{chunk-KFCEUT4I.js → chunk-UOEMTD27.js} +1 -1
  63. data/website/assets/chunks/chunk-VKXRXXR2.js +1 -0
  64. data/website/assets/chunks/{chunk-T3FZWEYV.js → chunk-WKCPBR3C.js} +1 -1
  65. data/website/assets/chunks/{chunk-A5S7PJ2Q.js → chunk-WQUC7Q53.js} +1 -1
  66. data/website/assets/chunks/{chunk-LUJIS6FY.js → chunk-X7ZOZN34.js} +1 -1
  67. data/website/assets/chunks/chunk-XPAP2F32.js +1 -0
  68. data/website/assets/chunks/{chunk-2NQ22GFO.js → chunk-XUQ5IXKF.js} +1 -1
  69. data/website/assets/chunks/{chunk-4KPJTMZ4.js → chunk-YXN4ZHWP.js} +1 -1
  70. data/website/assets/chunks/{chunk-FYWMKRRX.js → chunk-ZBUGID7D.js} +1 -1
  71. data/website/assets/chunks/{chunk-HIGPS4L2.js → chunk-ZM233K6H.js} +1 -1
  72. data/website/assets/chunks/{classDiagram-v2-4MYWR3UA-ZY57RKXZ.js → classDiagram-v2-4MYWR3UA-BKHGJVJY.js} +1 -1
  73. data/website/assets/chunks/{cose-bilkent-JH36ORCC-WIVS7FPC.js → cose-bilkent-JH36ORCC-H2GMP7IQ.js} +1 -1
  74. data/website/assets/chunks/cynefin-EF2NZ3EQ-6WY2NCLE.js +1 -0
  75. data/website/assets/chunks/{cynefinDiagram-WF24UDRP-MLC22WFH.js → cynefinDiagram-WF24UDRP-TJDJYBES.js} +1 -1
  76. data/website/assets/chunks/{dagre-NK4GIZVX-4LFK4F5D.js → dagre-NK4GIZVX-DL3VXKF5.js} +1 -1
  77. data/website/assets/chunks/{diagram-CBK3MWTC-2SSL2APM.js → diagram-CBK3MWTC-WRVISH7R.js} +1 -1
  78. data/website/assets/chunks/{diagram-I5XIIV2D-64DRXMM6.js → diagram-I5XIIV2D-4DSWV2P7.js} +1 -1
  79. data/website/assets/chunks/{diagram-ODIL2UCW-XK4IEKYC.js → diagram-ODIL2UCW-C6TY6GWL.js} +1 -1
  80. data/website/assets/chunks/{diagram-PFBEJUXE-KKVC77DE.js → diagram-PFBEJUXE-SZUOY72J.js} +1 -1
  81. data/website/assets/chunks/{diagram-RJA3I4VV-LNQEDK46.js → diagram-RJA3I4VV-CU4Q4ZMI.js} +1 -1
  82. data/website/assets/chunks/{diagram-TYUNFSNR-QVOLMEC4.js → diagram-TYUNFSNR-6DWRKHLR.js} +1 -1
  83. data/website/assets/chunks/{ebnfDiagram-V4P3TTPT-CXZTWZZY.js → ebnfDiagram-V4P3TTPT-DOGA4FDP.js} +1 -1
  84. data/website/assets/chunks/{elk-QONTBCTQ-ASERRRNS.js → elk-QONTBCTQ-7LM4B3R7.js} +1 -1
  85. data/website/assets/chunks/{erDiagram-KYQIGQAA-NEFXHTDF.js → erDiagram-KYQIGQAA-MYZWWFAJ.js} +1 -1
  86. data/website/assets/chunks/eventmodeling-K75KTNOO-CHCQYZBI.js +1 -0
  87. data/website/assets/chunks/flowDiagram-IUGLLWBU-R62P5MK5.js +1 -0
  88. data/website/assets/chunks/{ganttDiagram-R7GPNTJY-Y2KSJYS4.js → ganttDiagram-R7GPNTJY-57KZF7W3.js} +1 -1
  89. data/website/assets/chunks/gitGraph-VSP46ZUC-VFZPJQ6A.js +1 -0
  90. data/website/assets/chunks/{gitGraphDiagram-PDYL7XHY-EX3ERW5D.js → gitGraphDiagram-PDYL7XHY-2XBW2H4N.js} +1 -1
  91. data/website/assets/chunks/info-OHQRW6UA-P4744SJ6.js +1 -0
  92. data/website/assets/chunks/infoDiagram-MVDRKAX5-PJV6VUEH.js +2 -0
  93. data/website/assets/chunks/{ishikawaDiagram-HPEHV2GE-CCJUQRNA.js → ishikawaDiagram-HPEHV2GE-A4EOHBEZ.js} +1 -1
  94. data/website/assets/chunks/{journeyDiagram-BOSHW7O7-ZS3BH6WM.js → journeyDiagram-BOSHW7O7-XWHN7SHY.js} +1 -1
  95. data/website/assets/chunks/{kanban-definition-FNSA4HC5-VFJSTQMF.js → kanban-definition-FNSA4HC5-K72SCAIF.js} +1 -1
  96. data/website/assets/chunks/{mindmap-definition-6OY57UG3-KHVZR6MO.js → mindmap-definition-6OY57UG3-WMOJUG4V.js} +1 -1
  97. data/website/assets/chunks/packet-JDAUHWVQ-NYXIQQVA.js +1 -0
  98. data/website/assets/chunks/{pegDiagram-ECIUJNBX-4DCYWOTB.js → pegDiagram-ECIUJNBX-E3RNEQ75.js} +1 -1
  99. data/website/assets/chunks/pie-XZMESJXO-32CUE6KZ.js +1 -0
  100. data/website/assets/chunks/{pieDiagram-GNMPY74T-MSSPA6BG.js → pieDiagram-GNMPY74T-42GYCAG5.js} +1 -1
  101. data/website/assets/chunks/{quadrantDiagram-D57K4MC3-AOYUYY4I.js → quadrantDiagram-D57K4MC3-DNRISNVM.js} +1 -1
  102. data/website/assets/chunks/radar-ABXABTNO-272FILRO.js +1 -0
  103. data/website/assets/chunks/railroad-I3PHUGI6-6EGAH4XA.js +1 -0
  104. data/website/assets/chunks/railroad-abnf-LNEFI6M7-G6E7ATER.js +1 -0
  105. data/website/assets/chunks/railroad-ebnf-DWYD2UWJ-MR4P6BDR.js +1 -0
  106. data/website/assets/chunks/railroad-peg-JR7BVNR7-WXLQUGUO.js +1 -0
  107. data/website/assets/chunks/{railroadDiagram-Y72NRBL7-2F7VDY63.js → railroadDiagram-Y72NRBL7-ZYVNRDBK.js} +1 -1
  108. data/website/assets/chunks/{requirementDiagram-EQYSW5RA-VWA3RAXW.js → requirementDiagram-EQYSW5RA-5MLHUPT7.js} +1 -1
  109. data/website/assets/chunks/{sankeyDiagram-SY24JHO5-2555YRTO.js → sankeyDiagram-SY24JHO5-KU6PJOHE.js} +1 -1
  110. data/website/assets/chunks/{sequenceDiagram-BLEHNHQU-42EPBSFI.js → sequenceDiagram-BLEHNHQU-2CD67QJO.js} +1 -1
  111. data/website/assets/chunks/{sizeCapture-INFHLROL-2GUJIKNX.js → sizeCapture-INFHLROL-K6BF2NHG.js} +1 -1
  112. data/website/assets/chunks/{stateDiagram-v2-A6IESKWZ-BUWAZBMT.js → stateDiagram-v2-A6IESKWZ-3K7AWHHN.js} +1 -1
  113. data/website/assets/chunks/{swimlanes-B3ENRKFQ-YVQZM2ZV.js → swimlanes-B3ENRKFQ-JY5PVCKD.js} +1 -1
  114. data/website/assets/chunks/swimlanesDiagram-AYQRV4AK-V2HOT7OZ.js +8 -0
  115. data/website/assets/chunks/{timeline-definition-JXYKGLGB-L4XK4IA2.js → timeline-definition-JXYKGLGB-7NB64HLS.js} +1 -1
  116. data/website/assets/chunks/treeView-D4JQ5SDB-6YMDAAPA.js +1 -0
  117. data/website/assets/chunks/treemap-SAJKECNS-2X573PPS.js +1 -0
  118. data/website/assets/chunks/{usecaseDiagram-WPOLBNNX-JIQPEJGT.js → usecaseDiagram-WPOLBNNX-YSA4W6JE.js} +1 -1
  119. data/website/assets/chunks/{vennDiagram-Q3Y3IDCW-ZL36EB3C.js → vennDiagram-Q3Y3IDCW-LB4VOB54.js} +1 -1
  120. data/website/assets/chunks/wardley-7MLQ67FV-DGTGHYYC.js +1 -0
  121. data/website/assets/chunks/{wardleyDiagram-IVAIDKWA-6NNJBKAT.js → wardleyDiagram-IVAIDKWA-VSLMHS5S.js} +1 -1
  122. data/website/assets/chunks/{xychartDiagram-4URNHDU4-ZBQDSFFT.js → xychartDiagram-4URNHDU4-5CH42NHQ.js} +1 -1
  123. data/website/assets/docs-SSDQGVUM.css +1 -0
  124. data/website/assets/docs-T5U64777.js +1 -0
  125. data/website/assets/favorite-controls-OZ66C3CG.js +1 -0
  126. data/website/assets/graph-DN4BVOBG.js +1 -0
  127. data/website/assets/manifest.json +273 -270
  128. data/website/assets/{mermaid-47XTJG37.js → mermaid-2CU3HVN4.js} +2 -2
  129. data/website/assets/minimal-2PBV6UHQ.js +1 -0
  130. data/website/assets/minimal-HIGATQUE.css +1 -0
  131. data/website/assets/page-navigation-KCQIJB4Z.js +1 -0
  132. data/website/assets/previews-6WNF2QQQ.js +1 -0
  133. data/website/assets/search-4UJ3GWH6.js +1 -0
  134. data/website/assets/search-worker-T2IMW6SO.js +1 -0
  135. data/website/lib/jekyll_obsidian/adapter.rb +7 -28
  136. data/website/lib/jekyll_obsidian/built_in_themes.rb +21 -6
  137. data/website/lib/jekyll_obsidian/git_history.rb +73 -0
  138. data/website/lib/jekyll_obsidian/graph_budget.rb +13 -0
  139. data/website/lib/jekyll_obsidian/localized_compiler.rb +5 -0
  140. data/website/lib/jekyll_obsidian/preview.rb +11 -3
  141. data/website/lib/jekyll_obsidian/site_navigation.rb +2 -0
  142. data/website/lib/jekyll_obsidian/vault_compiler.rb +80 -62
  143. data/website/lib/jekyll_obsidian/version.rb +1 -1
  144. metadata +136 -126
  145. data/website/assets/archive-filters-R5WW6IKE.js +0 -12
  146. data/website/assets/chunks/architecture-WOLXFQ4H-BZVX64AA.js +0 -1
  147. data/website/assets/chunks/chunk-DGEGT77F.js +0 -1
  148. data/website/assets/chunks/chunk-DR3UYLVK.js +0 -1
  149. data/website/assets/chunks/chunk-GPIO2QPP.js +0 -1
  150. data/website/assets/chunks/chunk-KJTG2HC3.js +0 -1
  151. data/website/assets/chunks/cynefin-EF2NZ3EQ-ZO5PPXJG.js +0 -1
  152. data/website/assets/chunks/eventmodeling-K75KTNOO-3JNV4VSP.js +0 -1
  153. data/website/assets/chunks/flowDiagram-IUGLLWBU-GKBFQNDP.js +0 -1
  154. data/website/assets/chunks/gitGraph-VSP46ZUC-HSAXKLAG.js +0 -1
  155. data/website/assets/chunks/info-OHQRW6UA-C4R2B34T.js +0 -1
  156. data/website/assets/chunks/infoDiagram-MVDRKAX5-AUCEX7FP.js +0 -2
  157. data/website/assets/chunks/packet-JDAUHWVQ-SFUSDIUN.js +0 -1
  158. data/website/assets/chunks/pie-XZMESJXO-M76QC4CD.js +0 -1
  159. data/website/assets/chunks/radar-ABXABTNO-HSBJ6SSD.js +0 -1
  160. data/website/assets/chunks/railroad-I3PHUGI6-4QJMJ7LG.js +0 -1
  161. data/website/assets/chunks/railroad-abnf-LNEFI6M7-ZLNZ5ZRH.js +0 -1
  162. data/website/assets/chunks/railroad-ebnf-DWYD2UWJ-EBV6ZOUW.js +0 -1
  163. data/website/assets/chunks/railroad-peg-JR7BVNR7-X3E47TO7.js +0 -1
  164. data/website/assets/chunks/swimlanesDiagram-AYQRV4AK-PIM5CPGV.js +0 -8
  165. data/website/assets/chunks/treeView-D4JQ5SDB-3BQHZUCI.js +0 -1
  166. data/website/assets/chunks/treemap-SAJKECNS-6NJPJ5NM.js +0 -1
  167. data/website/assets/chunks/wardley-7MLQ67FV-ITOM4KQ2.js +0 -1
  168. data/website/assets/docs-7YBVH7A3.css +0 -1
  169. data/website/assets/docs-PCBXSG6K.js +0 -1
  170. data/website/assets/docs-navigation-SQPXOH42.js +0 -1
  171. data/website/assets/favorite-controls-7CQOGEEJ.js +0 -1
  172. data/website/assets/graph-QFPKHVGP.js +0 -1
  173. data/website/assets/minimal-JBOFMENV.css +0 -1
  174. data/website/assets/minimal-YEVXPLLM.js +0 -1
  175. data/website/assets/previews-MS2IAQAO.js +0 -1
  176. data/website/assets/search-4HE3SQVR.js +0 -1
  177. data/website/assets/search-worker-NAOYHDP3.js +0 -1
  178. /data/website/assets/chunks/{chunk-YORIST7Z.js → chunk-4PJNGS3V.js} +0 -0
  179. /data/website/assets/chunks/{chunk-YIN5CSIF.js → chunk-DTQOBKTA.js} +0 -0
  180. /data/website/assets/chunks/{chunk-STBOPOHX.js → chunk-MZUSKS4X.js} +0 -0
  181. /data/website/assets/chunks/{chunk-OCX5OCIU.js → chunk-NIQRNWAA.js} +0 -0
  182. /data/website/assets/chunks/{chunk-L465623K.js → chunk-Z4ZDIMO2.js} +0 -0
  183. /data/website/assets/chunks/{chunk-5CCFYMCF.js → chunk-ZEBLPTBM.js} +0 -0
  184. /data/website/assets/chunks/{chunk-EIBFAW37.js → chunk-ZHA4UQ4O.js} +0 -0
  185. /data/website/assets/chunks/{katex-VDQVCUUS.js → katex-IN4S3RHS.js} +0 -0
  186. /data/website/assets/{math-OBBMUDQO.js → math-Q32TSC4F.js} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f9d91405141a83604332d9d3ae64c3e3538e3a1d8d94d0cb4e0301effa7445c
4
- data.tar.gz: a14c690ad7ad6033d94ce1140c5908cf00b23b5071c3bf07cc1162cf21f42a6e
3
+ metadata.gz: 8b859a357e2f8b2a31cbfbf69069168ee4efd0b7b27b2c548fc0b18ff6363c2a
4
+ data.tar.gz: 51df7e4d7158b265efc82e7d13fa3b47bcec57a555c41f60a48c5cd9e9c2795c
5
5
  SHA512:
6
- metadata.gz: 77a426ca377292092e9d34af6a6b2afe22e42438a7e5f32371f71715cb67f7ffdd24d8a5a1b5c9980f5cd50d7a3cb4fe93415d9b325496894fbbd96a83889e3d
7
- data.tar.gz: ec7dd1f4417e7f061ace9795839a6ebc6f8bd669f58c7779db2806c63bdb104d4eaf8bfdf14dc9ebc1959678450f1b1b6f470fc85430b6be996dbe1f5c9b1daf
6
+ metadata.gz: badbbaa445373d7676c81be3582008bc6ecd4c218d31135917cf7de0739d1772a3b9692576a2c627972905cfd85bc8d145fec369b1612835b31b21860bfdf4cd
7
+ data.tar.gz: d6a39e602900dfa3612a4185b001bd464065b926ce26ed4999e7f31310de8a5a274d05386b2318320b2ecb317a0f21a918d6108dbd29fc49363e40489f600a3f
data/README.md CHANGED
@@ -56,7 +56,7 @@ Edit `.github/jekyll-obsidian.yml`. Site identity fields (`title`, `description`
56
56
 
57
57
  By default, only notes whose frontmatter has the YAML boolean `publish: true` enter the site. To publish folders recursively, list content-relative paths under `website.content.publish_by_default`; `.` selects the whole content tree. Use `publish: false` to exclude a note. Quoted strings such as `"true"` are not booleans. Obsidian's `.obsidian/` and `.trash/` directories are excluded.
58
58
 
59
- A home page is optional: without one, the site can open a section or another public note. At least one public note is required. See [Customization](website/jekyll-obsidian-docs/docs/Customization.md#content-and-navigation) for index selection and navigation.
59
+ A home page is optional: without one, the site can open a section or another public note. At least one public note is required. See [Publishing content](website/jekyll-obsidian-docs/docs/Publishing.md#content-and-navigation) for index selection and navigation.
60
60
 
61
61
  Switching themes preserves the URLs of notes that remain published. For multilingual sites, set `website.i18n.enabled: true` explicitly to keep translations enabled across theme changes. See [Localization](website/jekyll-obsidian-docs/docs/Localization.md).
62
62
 
@@ -84,14 +84,17 @@ For another host, run `jekyll-obsidian build --url https://example.com --baseurl
84
84
  - [Host Integration](website/jekyll-obsidian-docs/docs/Integration.md): installation, Bundler, and upgrades.
85
85
  - [Getting Started](website/jekyll-obsidian-docs/docs/Getting%20Started.md): publishing and authoring.
86
86
  - [Syntax](website/jekyll-obsidian-docs/docs/Syntax.md): Obsidian-flavored Markdown and media embeds.
87
- - [Customization](website/jekyll-obsidian-docs/docs/Customization.md): themes, navigation, archive tabs, recommendations, and trusted HTML slides.
87
+ - [Publishing content](website/jekyll-obsidian-docs/docs/Publishing.md): publication rules, note properties, recommendations, and trusted HTML slides.
88
+ - [Reading and navigation](website/jekyll-obsidian-docs/docs/Reading.md): header navigation, search, reading-time hints, graphs, and previews.
89
+ - [Customization](website/jekyll-obsidian-docs/docs/Customization.md): site identity, themes, navigation, footer links, and output limits.
90
+ - [Archives and favorites](website/jekyll-obsidian-docs/docs/Archives.md): archive tabs, filters, inline reading, Markdown exports, and saved articles.
88
91
  - [Portfolio](website/jekyll-obsidian-docs/docs/Portfolio.md): project collections and public GitHub Markdown bodies.
89
92
  - [Analytics](website/jekyll-obsidian-docs/docs/Analytics.md): optional Cloudflare or Google traffic measurement.
90
93
  - [Comments](website/jekyll-obsidian-docs/docs/Comments.md): GitHub Discussions setup and privacy.
91
94
  - [Localization](website/jekyll-obsidian-docs/docs/Localization.md): translations, fallback pages, and SEO.
92
95
  - [Deployment](website/jekyll-obsidian-docs/docs/Deployment.md): hosting, URL paths, and custom domains.
93
96
 
94
- For development setup and native Windows PowerShell commands, read the [Developer Guide](website/jekyll-obsidian-docs/docs/development/index.md). On macOS, Linux, or WSL, run `website/bin/test` from the repository root. It builds frontend assets and packages the gem before running the Ruby, TypeScript, frontend, and Node checks. If running Ruby tests separately from `website/`, first run `npm run build` and `bundle exec ruby scripts/package.rb --skip-assets`, then `bundle exec rake test`; the suite tests an actual installed gem.
97
+ For development setup and native Windows PowerShell commands, read the [Developer Guide](website/jekyll-obsidian-docs/docs/development/index.md). On macOS, Linux, or WSL, run `website/bin/test` from the repository root. It builds frontend assets and packages the gem before running the Ruby, TypeScript, frontend, and Node checks. If running Ruby tests separately from `website/`, first run `pnpm run build` and `bundle exec ruby scripts/package.rb --skip-assets`, then `bundle exec rake test`; the suite tests an actual installed gem.
95
98
 
96
99
  ## License
97
100
 
@@ -0,0 +1,6 @@
1
+ {% if page.website.theme_data.archive %}
2
+ <button class="site-action archive-reading-switch" type="button" role="switch" aria-checked="false" aria-controls="archive-ledger" aria-label="{{ ui.flat_reading | default: 'Read in full' | escape }}" title="{{ ui.flat_reading_disabled | escape }}" data-enabled="{{ ui.flat_reading_enabled | escape }}" data-disabled="{{ ui.flat_reading_disabled | escape }}" data-archive-reading-toggle hidden data-loading="{{ ui.reading_loading | default: 'Loading article…' | escape }}" data-unavailable="{{ ui.reading_unavailable | default: 'Article could not be loaded.' | escape }}" data-retry="{{ ui.retry | default: 'Retry' | escape }}">
3
+ {% include website/action-icon.html name='reading' %}
4
+ </button>
5
+ {% unless page.website.theme_data.favorites %}<button class="site-action" type="button" data-archive-export-open aria-label="{{ ui.export | default: 'Export' | escape }}" title="{{ ui.export | default: 'Export' | escape }}" aria-haspopup="dialog" aria-controls="archive-export-dialog" hidden>{% include website/action-icon.html name='export' %}</button>{% endunless %}
6
+ {% endif %}
@@ -11,7 +11,7 @@
11
11
  <button type="submit">{{ ui.page_go | default: 'Go' | escape }}</button>
12
12
  </form>
13
13
  </nav>
14
- <p role="status" aria-live="polite" data-archive-status data-module-unavailable="{{ ui.archive_module_unavailable | escape }}" data-loading="{{ ui.archive_loading | default: 'Loading selected entries…' | escape }}" data-unavailable="{{ ui.archive_unavailable | default: 'Selected entries could not be loaded. Retry or clear the filters.' | escape }}" data-refresh-error="{{ ui.archive_refresh_error | escape }}"></p>
14
+ <p role="status" aria-live="polite" data-archive-status data-selection-limit="{{ ui.archive_selection_limit | escape }}" data-module-unavailable="{{ ui.archive_module_unavailable | escape }}" data-loading="{{ ui.archive_loading | default: 'Loading selected entries…' | escape }}" data-unavailable="{{ ui.archive_unavailable | default: 'Selected entries could not be loaded. Retry or clear the filters.' | escape }}" data-refresh-error="{{ ui.archive_refresh_error | escape }}"></p>
15
15
  <button type="button" data-archive-retry hidden>{{ ui.retry | default: 'Retry' | escape }}</button>
16
16
  {% unless page.website.theme_data.favorites %}{% if archive_total > page.website.theme_data.archive.page_size %}
17
17
  <noscript><p>{{ ui.archive_requires_js | default: 'The first page is shown. Enable JavaScript to browse all entries.' | escape }}</p></noscript>
@@ -0,0 +1,5 @@
1
+ {% if page.website.navigation_layout == 'sidebar' and include.has_context %}
2
+ <div class="content-toolbar">
3
+ <button class="site-action content-toolbar__context" type="button" data-dialog-open="context">{% if page.website.kind == 'blog-index' %}{{ ui.chronology | default: 'Chronology' | escape }}{% elsif page.website.features.outline and page.website.features.relations == false and page.website.local_graph == nil %}{{ ui.on_this_page | default: 'On this page' | escape }}{% else %}{{ ui.context | default: 'Context' | escape }}{% endif %}</button>
4
+ </div>
5
+ {% endif %}
@@ -1,14 +1,14 @@
1
1
  {% assign ui = page.website.i18n.messages %}
2
2
  {% if page.website.theme_data.archive %}{% include website/archive-export.html %}{% endif %}
3
3
  {% if page.website.features.search %}
4
- <dialog class="website-dialog" data-dialog="search" aria-labelledby="search-dialog-title"{% if ui.search_loading %} data-search-loading="{{ ui.search_loading | escape }}"{% endif %}{% if ui.search_prompt %} data-search-prompt="{{ ui.search_prompt | escape }}"{% endif %}{% if ui.search_retry %} data-search-retry="{{ ui.search_retry | escape }}"{% endif %}{% if ui.search_unavailable %} data-search-unavailable="{{ ui.search_unavailable | escape }}"{% endif %}{% if ui.search_no_results %} data-search-no-results="{{ ui.search_no_results | escape }}"{% endif %}{% if ui.search_result_one %} data-search-result-one="{{ ui.search_result_one | escape }}"{% endif %}{% if ui.search_result_many %} data-search-result-many="{{ ui.search_result_many | escape }}"{% endif %}>
4
+ <dialog class="website-dialog" data-dialog="search" aria-labelledby="search-dialog-title"{% if ui.search_loading %} data-search-loading="{{ ui.search_loading | escape }}"{% endif %}{% if ui.search_prompt %} data-search-prompt="{{ ui.search_prompt | escape }}"{% endif %}{% if ui.search_retry %} data-search-retry="{{ ui.search_retry | escape }}"{% endif %}{% if ui.search_unavailable %} data-search-unavailable="{{ ui.search_unavailable | escape }}"{% endif %}{% if ui.search_no_results %} data-search-no-results="{{ ui.search_no_results | escape }}"{% endif %}{% if ui.search_top_results %} data-search-top-results="{{ ui.search_top_results | escape }}"{% endif %}{% if ui.search_limited %} data-search-limited="{{ ui.search_limited | escape }}"{% endif %}{% if ui.search_result_one %} data-search-result-one="{{ ui.search_result_one | escape }}"{% endif %}{% if ui.search_result_many %} data-search-result-many="{{ ui.search_result_many | escape }}"{% endif %}>
5
5
  <div class="website-dialog__sheet">
6
6
  <header class="website-dialog__header">
7
7
  <h2 class="website-dialog__title" id="search-dialog-title">{{ ui.search_title | default: 'Search this site' | escape }}</h2>
8
8
  <button class="website-dialog__close" type="button" data-dialog-close aria-label="{{ ui.close_search | default: 'Close search' | escape }}">&times;</button>
9
9
  </header>
10
10
  <div class="website-dialog__body">
11
- <label class="search-box"><span aria-hidden="true">⌕</span><span class="visually-hidden">{{ ui.search_pages | default: 'Search pages' | escape }}</span><input type="search" inputmode="search" autocomplete="off" placeholder="{{ ui.search_placeholder | default: 'Title, tag, or phrase' | escape }}" data-search-input autofocus><kbd>Ctrl/⌘ K</kbd></label>
11
+ <label class="search-box"><span aria-hidden="true">⌕</span><span class="visually-hidden">{{ ui.search_pages | default: 'Search pages' | escape }}</span><input type="search" inputmode="search" autocomplete="off" placeholder="{{ ui.search_placeholder | default: 'Title, tag, or phrase' | escape }}" data-search-input maxlength="256" autofocus><kbd>Ctrl/⌘ K</kbd></label>
12
12
  {% if page.website.navigation.size > 0 %}
13
13
  <nav class="search-navigation" aria-label="{{ ui.primary_navigation | default: 'Primary navigation' | escape }}" data-search-navigation>
14
14
  <ul class="search-navigation__list">
@@ -23,6 +23,7 @@
23
23
  </dialog>
24
24
  {% endif %}
25
25
 
26
+ {% unless page.website.navigation_layout == 'sidebar' %}
26
27
  <template data-dialog-template="browse">
27
28
  <nav aria-label="{{ ui.primary_navigation | default: 'Primary navigation' | escape }}">
28
29
  <ul class="relation-list">
@@ -37,9 +38,10 @@
37
38
  {% endif %}
38
39
  </template>
39
40
  <dialog class="website-dialog" data-dialog="browse" aria-labelledby="browse-dialog-title"><div class="website-dialog__sheet"><header class="website-dialog__header"><h2 class="website-dialog__title" id="browse-dialog-title">{{ ui.browse | default: 'Browse' | escape }}</h2><button class="website-dialog__close" type="button" data-dialog-close aria-label="{{ ui.close_browse | default: 'Close browse menu' | escape }}">&times;</button></header><div class="website-dialog__body" data-dialog-content></div></div></dialog>
41
+ {% endunless %}
40
42
 
41
43
  {% assign has_timeline_context = false %}{% if page.website.kind == 'blog-index' and page.website.theme_data.timeline.size > 0 %}{% assign has_timeline_context = true %}{% endif %}
42
- {% assign has_context_dialog = has_timeline_context %}{% if page.website.kind == 'home' %}{% if page.website.theme_data.topic_summaries.size > 0 or page.website.has_context %}{% assign has_context_dialog = true %}{% endif %}{% elsif page.website.kind == 'note' and page.website.has_context %}{% assign has_context_dialog = true %}{% endif %}
44
+ {% assign has_context_dialog = has_timeline_context %}{% if page.website.theme_data.favorites %}{% assign has_context_dialog = true %}{% endif %}{% if page.website.kind == 'home' %}{% if page.website.theme_data.topic_summaries.size > 0 or page.website.has_context %}{% assign has_context_dialog = true %}{% endif %}{% elsif page.website.kind == 'note' and page.website.has_context %}{% assign has_context_dialog = true %}{% endif %}
43
45
  {% if has_context_dialog %}
44
46
  <dialog class="website-dialog" data-dialog="context" aria-labelledby="context-dialog-title"><div class="website-dialog__sheet"><header class="website-dialog__header"><h2 class="website-dialog__title" id="context-dialog-title">{% if has_timeline_context %}{{ ui.chronology | default: 'Chronology' | escape }}{% elsif page.website.kind == 'home' and page.website.has_context %}{{ ui.context | default: 'Context' | escape }}{% elsif page.website.kind == 'home' %}{{ ui.topics | default: 'Topics' | escape }}{% elsif page.website.features.outline and page.website.features.relations == false and page.website.local_graph == nil %}{{ ui.on_this_page | default: 'On this page' | escape }}{% else %}{{ ui.context | default: 'Context' | escape }}{% endif %}</h2><button class="website-dialog__close" type="button" data-dialog-close aria-label="{{ ui.close_context | default: 'Close page context' | escape }}">&times;</button></header><div class="website-dialog__body" data-dialog-content></div></div></dialog>
45
47
  {% endif %}
@@ -28,16 +28,16 @@
28
28
  {% if page.website.features.feed and site.data.website_feed_available %}<link rel="alternate" type="application/atom+xml" title="{{ site.title | escape }} · {{ page.website.i18n.messages.feed | default: 'Feed' | escape }}" href="{% if page.website.resources.feed %}{{ page.website.resources.feed | escape }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}">{% endif %}
29
29
  {% if page.website.comments.load %}<meta name="giscus:backlink" content="{{ page.website.absolute_url | escape }}" data-page-head>{% endif %}
30
30
  {% assign website_entry = include.entry %}
31
- {% if website_entry.archive_worker and page.website.theme_data.archive %}{% assign archive_worker = '/assets/website/' | append: website_entry.archive_worker %}<meta name="website:archive-worker" content="{{ archive_worker | relative_url }}">{% endif %}
31
+ {% if website_entry.archive_worker and page.website.theme_data.archive %}{% assign archive_worker = '/assets/website/' | append: website_entry.archive_worker %}<meta name="website:archive-worker" content="{{ archive_worker | relative_url }}" data-page-head>{% endif %}
32
32
  {% if website_entry.color_scheme %}
33
33
  {% assign color_scheme_js = '/assets/website/' | append: website_entry.color_scheme %}
34
- <script src="{{ color_scheme_js | relative_url }}"></script>
34
+ <script src="{{ color_scheme_js | relative_url }}" data-website-asset></script>
35
35
  {% endif %}
36
36
  {% if website_entry.css %}
37
37
  {% assign website_css = '/assets/website/' | append: website_entry.css %}
38
- <link rel="stylesheet" href="{{ website_css | relative_url }}">
38
+ <link rel="stylesheet" href="{{ website_css | relative_url }}" data-website-asset>
39
39
  {% endif %}
40
40
  {% if website_entry.js %}
41
41
  {% assign website_js = '/assets/website/' | append: website_entry.js %}
42
- <script type="module" src="{{ website_js | relative_url }}"></script>
42
+ <script type="module" src="{{ website_js | relative_url }}" data-website-asset></script>
43
43
  {% endif %}
@@ -1,49 +1,42 @@
1
- <header class="site-header">
2
- {% assign ui = page.website.i18n.messages %}
3
- {% assign home_url = page.website.home_url | default: page.website.routes.home %}
4
- {% unless home_url %}{% assign home_url = '/' | relative_url %}{% endunless %}
5
- <div class="site-header__inner">
6
- <a class="site-mark" href="{{ home_url | escape }}" aria-label="{{ site.title | escape }} — {{ ui.home | default: 'Home' | escape }}">
7
- <span class="site-mark__glyph" aria-hidden="true">{% if include.theme == 'minimal' %}¶{% else %}⌁{% endif %}</span>
8
- <span class="site-mark__name">{{ site.title | escape }}</span>
9
- </a>
10
-
11
- <nav class="site-navigation" aria-label="{{ ui.primary_navigation | default: 'Primary navigation' | escape }}" data-priority-navigation>
12
- <ul class="site-navigation__list" data-priority-navigation-list>
13
- {% for item in page.website.navigation %}
14
- <li data-priority-navigation-item data-navigation-id="{{ item.id | escape }}"><a href="{{ item.url | escape }}"{% if item.id == page.website.active_navigation_id %} aria-current="page"{% endif %}>{{ item.label | escape }}</a></li>
15
- {% endfor %}
16
- </ul>
17
- <details class="site-navigation__more" data-priority-navigation-more hidden>
18
- <summary>{{ ui.more | default: 'More' | escape }}</summary>
19
- <ul class="site-navigation__overflow" data-priority-navigation-overflow></ul>
20
- </details>
21
- </nav>
22
-
1
+ {% assign ui = page.website.i18n.messages %}
2
+ {% assign home_url = page.website.home_url | default: page.website.routes.home %}
3
+ {% unless home_url %}{% assign home_url = '/' | relative_url %}{% endunless %}
4
+ {% if page.website.navigation_layout == 'sidebar' %}
5
+ <header class="site-topbar">
6
+ <button class="site-action" type="button" data-dialog-open="browse" aria-controls="site-browse-dialog" aria-expanded="false" aria-label="{{ ui.browse | default: 'Browse' | escape }}"><svg viewBox="0 0 24 24" width="22" height="22" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16" fill="none" stroke="currentColor" stroke-width="1.6"/></svg></button>
7
+ {% include website/site-mark.html theme=include.theme %}
23
8
  <div class="site-actions">
24
- {% if page.website.theme_data.archive %}
25
- <button class="site-action archive-reading-switch" type="button" role="switch" aria-checked="false" aria-controls="archive-ledger" aria-label="{{ ui.flat_reading | default: 'Read in full' | escape }}" title="{{ ui.flat_reading_disabled | escape }}" data-enabled="{{ ui.flat_reading_enabled | escape }}" data-disabled="{{ ui.flat_reading_disabled | escape }}" data-archive-reading-toggle hidden data-loading="{{ ui.reading_loading | default: 'Loading article…' | escape }}" data-unavailable="{{ ui.reading_unavailable | default: 'Article could not be loaded.' | escape }}" data-retry="{{ ui.retry | default: 'Retry' | escape }}">
26
- {% include website/action-icon.html name='reading' %}
27
- </button>
28
- {% unless page.website.theme_data.favorites %}<button class="site-action" type="button" data-archive-export-open aria-label="{{ ui.export | default: 'Export' | escape }}" title="{{ ui.export | default: 'Export' | escape }}" aria-haspopup="dialog" aria-controls="archive-export-dialog" hidden>{% include website/action-icon.html name='export' %}</button>{% endunless %}
29
- {% endif %}
30
- {% if page.website.features.search %}
31
- <button class="site-action" type="button" data-search-open aria-label="{{ ui.search | default: 'Search' | escape }}" title="{{ ui.search | default: 'Search' | escape }} (Ctrl/⌘ K)" aria-keyshortcuts="Control+k Meta+k">
32
- {% include website/action-icon.html name='search' %}
33
- </button>
34
- {% endif %}
35
- {% include website/language-switcher.html %}
36
- <button class="site-action" type="button" data-color-scheme-toggle data-scheme-use-light="{{ ui.use_light_scheme | default: 'Use light color scheme' | escape }}" data-scheme-use-dark="{{ ui.use_dark_scheme | default: 'Use dark color scheme' | escape }}" data-scheme-light="{{ ui.light_scheme | default: 'Light' | escape }}" data-scheme-dark="{{ ui.dark_scheme | default: 'Dark' | escape }}" aria-label="{{ ui.toggle_scheme | default: 'Toggle color scheme' | escape }}">
37
- {% include website/action-icon.html name='moon' class='site-action__moon' %}
38
- {% include website/action-icon.html name='sun' class='site-action__sun' %}
39
- <span class="visually-hidden" data-color-scheme-label>{{ ui.scheme | default: 'Scheme' | escape }}</span>
40
- </button>
41
- {% if page.website.repository_url %}
42
- {% assign repository_label = ui.open_project_on_github | default: 'Open {title} on GitHub' | replace: '{title}', site.title %}
43
- <a class="site-action site-action--github" href="{{ page.website.repository_url | escape }}" aria-label="{{ repository_label | escape }}" title="{{ repository_label | escape }}">
44
- {% include website/github-icon.html %}
45
- </a>
46
- {% endif %}
9
+ {% include website/search-button.html %}
10
+ {% if page.website.theme_data.has_archive %}<div class="site-page-actions" data-page-header-actions>{% include website/archive-actions.html %}</div>{% endif %}
47
11
  </div>
48
- </div>
49
- </header>
12
+ </header>
13
+ <aside class="site-sidebar" data-site-chrome>
14
+ <div class="site-sidebar__panel" data-dialog-movable="browse">
15
+ {% include website/site-mark.html theme=include.theme %}
16
+ <div class="site-sidebar__navigation" data-auto-hide-scrollbar>
17
+ {% include website/site-navigation.html %}
18
+ {% include website/sidebar-docs.html show=include.show_docs %}
19
+ </div>
20
+ <div class="site-actions">{% include website/site-actions.html %}</div>
21
+ </div>
22
+ </aside>
23
+ <dialog id="site-browse-dialog" class="website-dialog website-dialog--navigation" data-dialog="browse" aria-labelledby="browse-dialog-title">
24
+ <div class="website-dialog__sheet">
25
+ <header class="website-dialog__header"><h2 class="website-dialog__title" id="browse-dialog-title">{{ ui.browse | default: 'Browse' | escape }}</h2><button class="website-dialog__close" type="button" data-dialog-close aria-label="{{ ui.close_browse | default: 'Close browse menu' | escape }}">&times;</button></header>
26
+ <div class="website-dialog__body" data-dialog-content></div>
27
+ </div>
28
+ </dialog>
29
+ {% else %}
30
+ <header class="site-header" data-site-chrome>
31
+ <div class="site-header__inner">
32
+ {% include website/site-mark.html theme=include.theme %}
33
+ {% include website/site-navigation.html %}
34
+ <div class="site-actions">
35
+ {% if include.theme == 'minimal' and page.website.theme_data.has_archive %}<div class="site-page-actions" data-page-header-actions>{% endif %}
36
+ {% include website/archive-actions.html %}
37
+ {% if include.theme == 'minimal' and page.website.theme_data.has_archive %}</div>{% endif %}
38
+ {% include website/site-actions.html %}
39
+ </div>
40
+ </div>
41
+ </header>
42
+ {% endif %}
@@ -20,7 +20,9 @@
20
20
  {% for node in local_graph.nodes %}<i data-graph-node data-node-id="{{ node.id | escape }}" data-node-title="{{ node.title | escape }}" data-node-url="{{ node.url | escape }}" data-node-degree="{{ node.degree }}"></i>{% endfor %}
21
21
  {% for edge in local_graph.edges %}<i data-graph-edge data-edge-source="{{ edge.source | escape }}" data-edge-target="{{ edge.target | escape }}" data-edge-kind="{{ edge.kind | escape }}" data-edge-count="{{ edge.count }}"></i>{% endfor %}
22
22
  </template>
23
- <div class="local-graph__fallback" data-graph-fallback>
23
+ {% if local_graph.truncated %}<p class="local-graph__hint">{{ ui.graph_limited | default: 'Showing nearby notes. Use search to find other connections.' | escape }}</p>{% endif %}
24
+ <details class="local-graph__fallback" data-graph-fallback>
25
+ <summary>{{ ui.graph_linked_notes | default: 'Linked notes' | escape }}</summary>
24
26
  <ul class="relation-list">{% for node in local_graph.nodes %}{% unless node.id == local_graph.current_id %}<li><a href="{{ node.url | escape }}">{{ node.title | escape }}</a></li>{% endunless %}{% endfor %}</ul>
25
- </div>
27
+ </details>
26
28
  </section>
@@ -0,0 +1,5 @@
1
+ {% if page.website.features.search %}
2
+ <button class="site-action" type="button" data-search-open aria-label="{{ ui.search | default: 'Search' | escape }}" title="{{ ui.search | default: 'Search' | escape }} (Ctrl/⌘ K)" aria-keyshortcuts="Control+k Meta+k">
3
+ {% include website/action-icon.html name='search' %}
4
+ </button>
5
+ {% endif %}
@@ -0,0 +1,7 @@
1
+ <div data-sidebar-docs>
2
+ {% if include.show %}
3
+ {% if page.website.theme_data.docs_tree.size > 0 %}
4
+ <nav class="docs-tree" aria-label="{{ ui.documentation | default: 'Documentation' | escape }}" data-docs-navigation>{% include website/docs-tree.html nodes=page.website.theme_data.docs_tree %}</nav>
5
+ {% endif %}
6
+ {% endif %}
7
+ </div>
@@ -0,0 +1,13 @@
1
+ {% unless page.website.navigation_layout == 'sidebar' %}{% include website/search-button.html %}{% endunless %}
2
+ {% include website/language-switcher.html %}
3
+ <button class="site-action" type="button" data-color-scheme-toggle data-scheme-use-light="{{ ui.use_light_scheme | default: 'Use light color scheme' | escape }}" data-scheme-use-dark="{{ ui.use_dark_scheme | default: 'Use dark color scheme' | escape }}" data-scheme-light="{{ ui.light_scheme | default: 'Light' | escape }}" data-scheme-dark="{{ ui.dark_scheme | default: 'Dark' | escape }}" aria-label="{{ ui.toggle_scheme | default: 'Toggle color scheme' | escape }}">
4
+ {% include website/action-icon.html name='moon' class='site-action__moon' %}
5
+ {% include website/action-icon.html name='sun' class='site-action__sun' %}
6
+ <span class="visually-hidden" data-color-scheme-label>{{ ui.scheme | default: 'Scheme' | escape }}</span>
7
+ </button>
8
+ {% if page.website.repository_url %}
9
+ {% assign repository_label = ui.open_project_on_github | default: 'Open {title} on GitHub' | replace: '{title}', site.title %}
10
+ <a class="site-action site-action--github" href="{{ page.website.repository_url | escape }}" aria-label="{{ repository_label | escape }}" title="{{ repository_label | escape }}">
11
+ {% include website/github-icon.html %}
12
+ </a>
13
+ {% endif %}
@@ -0,0 +1,4 @@
1
+ <a class="site-mark" href="{{ home_url | escape }}" aria-label="{{ site.title | escape }} — {{ ui.home | default: 'Home' | escape }}">
2
+ <span class="site-mark__glyph" aria-hidden="true">{% if include.theme == 'minimal' %}¶{% else %}⌁{% endif %}</span>
3
+ <span class="site-mark__name">{{ site.title | escape }}</span>
4
+ </a>
@@ -0,0 +1,11 @@
1
+ <nav class="site-navigation" aria-label="{{ ui.primary_navigation | default: 'Primary navigation' | escape }}" data-site-navigation{% unless page.website.navigation_layout == 'sidebar' %} data-priority-navigation{% endunless %}>
2
+ <ul class="site-navigation__list" data-priority-navigation-list>
3
+ {% for item in page.website.navigation %}
4
+ <li data-priority-navigation-item data-navigation-id="{{ item.id | escape }}"><a href="{{ item.url | escape }}" data-navigation-label="{{ item.label | escape }}"{% if item.id == page.website.active_navigation_id %} aria-current="page"{% endif %}><span>{{ item.label | escape }}</span></a></li>
5
+ {% endfor %}
6
+ </ul>
7
+ {% unless page.website.navigation_layout == 'sidebar' %}<details class="site-navigation__more" data-priority-navigation-more hidden>
8
+ <summary data-navigation-label="{{ ui.more | default: 'More' | escape }}"><span>{{ ui.more | default: 'More' | escape }}</span></summary>
9
+ <ul class="site-navigation__overflow" data-priority-navigation-overflow></ul>
10
+ </details>{% endunless %}
11
+ </nav>
@@ -1,21 +1,24 @@
1
1
  <!doctype html>
2
2
  <html class="no-js" lang="{{ page.website.i18n.locale | default: site.lang | default: 'en' | escape }}" dir="{{ page.website.i18n.dir | default: 'ltr' | escape }}">
3
3
  <head>{% assign entry = site.data.website_assets.entries.docs %}{% include website/head.html entry=entry %}</head>
4
- <body class="theme-docs">
4
+ <body class="theme-docs" data-navigation-layout="{{ page.website.navigation_layout | default: 'top' }}">
5
5
  {% assign ui = page.website.i18n.messages %}
6
6
  <a class="skip-link" href="#main-content">{{ ui.skip_to_content | default: 'Skip to content' | escape }}</a>
7
7
  {% include website/back-to-top.html %}
8
- {% include website/header.html theme='docs' %}
8
+ {% include website/header.html theme='docs' show_docs=true %}
9
9
  <div class="docs-shell">
10
- <aside class="docs-sidebar"><nav class="docs-tree" aria-label="{{ ui.documentation | default: 'Documentation' | escape }}" data-docs-navigation>{% include website/docs-tree.html nodes=page.website.theme_data.docs_tree %}</nav></aside>
10
+ {% unless page.website.navigation_layout == 'sidebar' %}<aside class="docs-sidebar"><nav class="docs-tree" aria-label="{{ ui.documentation | default: 'Documentation' | escape }}" data-docs-navigation>{% include website/docs-tree.html nodes=page.website.theme_data.docs_tree %}</nav></aside>{% endunless %}
11
11
  <main class="docs-main" id="main-content" tabindex="-1" data-docs-main>
12
- <article class="docs-article{% if page.website.cssclasses %} {{ page.website.cssclasses | join: ' ' }}{% endif %}">{% if page.website.i18n.fallback %}<aside class="translation-fallback" role="status">{{ ui.translation_missing | default: 'This page is not translated yet. The default-language version is shown.' | escape }}</aside>{% endif %}{% unless page.website.has_h1 %}{% include website/page-actions.html %}{% endunless %}{% include website/note-header.html %}{% include website/note-source.html %}{% include website/note-properties.html %}{% if page.website.has_h1 %}{% include website/page-actions.html %}{% endif %}<div class="note-content" lang="{{ page.website.i18n.content_lang | default: page.website.i18n.locale | default: site.lang | default: 'en' | escape }}" dir="{{ page.website.i18n.content_dir | default: page.website.i18n.dir | default: 'ltr' | escape }}" data-copy-code-label="{{ ui.copy_code | default: 'Copy code' | escape }}" data-copy-diagram-label="{{ ui.copy_diagram_source | default: 'Copy diagram source' | escape }}" data-expand-diagram-label="{{ ui.expand_diagram | default: 'Expand diagram' | escape }}" data-close-diagram-label="{{ ui.close_diagram | default: 'Close diagram' | escape }}" data-image-label="{{ ui.image | default: 'Image' | escape }}" data-expand-image-label="{{ ui.expand_image | default: 'Expand image' | escape }}" data-close-image-label="{{ ui.close_image | default: 'Close image' | escape }}" data-copy-formula-label="{{ ui.copy_formula_source | default: 'Copy formula source' | escape }}" data-copy-code-success="{{ ui.copied | default: 'Copied' | escape }}" data-copy-code-error="{{ ui.copy_code_failed | default: 'Copy failed' | escape }}">{% if page.website.kind == 'note' %}{{ content }}{% else %}{% include website/system-page.html %}{% endif %}</div>{% if page.website.kind == 'note' and page.website.theme_data.tab_id %}{% include website/tab-collection.html %}{% endif %}{% include website/source-actions.html %}{% include website/related-articles.html %}{% include website/comments.html %}</article>
12
+ {% if page.website.i18n.fallback %}<aside class="translation-fallback" role="status">{{ ui.translation_missing | default: 'This page is not translated yet. The default-language version is shown.' | escape }}</aside>{% endif %}
13
+ <article class="docs-article{% if page.website.cssclasses %} {{ page.website.cssclasses | join: ' ' }}{% endif %}">{% unless page.website.has_h1 %}{% include website/page-actions.html %}{% endunless %}{% include website/content-toolbar.html has_context=page.website.has_context %}{% include website/note-header.html %}{% include website/note-source.html %}{% include website/note-properties.html %}{% if page.website.has_h1 %}{% include website/page-actions.html %}{% endif %}<div class="note-content" lang="{{ page.website.i18n.content_lang | default: page.website.i18n.locale | default: site.lang | default: 'en' | escape }}" dir="{{ page.website.i18n.content_dir | default: page.website.i18n.dir | default: 'ltr' | escape }}" data-copy-code-label="{{ ui.copy_code | default: 'Copy code' | escape }}" data-copy-diagram-label="{{ ui.copy_diagram_source | default: 'Copy diagram source' | escape }}" data-expand-diagram-label="{{ ui.expand_diagram | default: 'Expand diagram' | escape }}" data-close-diagram-label="{{ ui.close_diagram | default: 'Close diagram' | escape }}" data-image-label="{{ ui.image | default: 'Image' | escape }}" data-expand-image-label="{{ ui.expand_image | default: 'Expand image' | escape }}" data-close-image-label="{{ ui.close_image | default: 'Close image' | escape }}" data-copy-formula-label="{{ ui.copy_formula_source | default: 'Copy formula source' | escape }}" data-copy-code-success="{{ ui.copied | default: 'Copied' | escape }}" data-copy-code-error="{{ ui.copy_code_failed | default: 'Copy failed' | escape }}">{% if page.website.kind == 'note' %}{{ content }}{% else %}{% include website/system-page.html %}{% endif %}</div>{% if page.website.kind == 'note' and page.website.theme_data.tab_id %}{% include website/tab-collection.html %}{% endif %}{% include website/source-actions.html %}{% include website/related-articles.html %}{% include website/comments.html %}</article>
13
14
  {% include website/docs-navigation.html %}
14
15
  </main>
15
16
  {% if page.website.kind == 'note' and page.website.has_context %}<aside class="docs-context" data-page-context data-context-panel data-dialog-movable="context" aria-label="{{ ui.page_context | default: 'Page context' | escape }}">{% include website/context.html location='rail' %}</aside>{% endif %}
16
17
  </div>
17
18
  {% include website/footer.html %}
19
+ {% unless page.website.navigation_layout == 'sidebar' %}
18
20
  <nav class="mobile-toolbar" aria-label="{{ ui.mobile_actions | default: 'Mobile actions' | escape }}"><button type="button" data-dialog-open="browse">{{ ui.browse | default: 'Browse' | escape }}</button>{% if page.website.features.search %}<button type="button" data-search-open>{{ ui.search | default: 'Search' | escape }}</button>{% endif %}{% if page.website.kind == 'note' and page.website.has_context %}<button type="button" data-dialog-open="context">{% if page.website.features.outline and page.website.features.relations == false and page.website.local_graph == nil %}{{ ui.on_this_page | default: 'On this page' | escape }}{% else %}{{ ui.context | default: 'Context' | escape }}{% endif %}</button>{% endif %}</nav>
21
+ {% endunless %}
19
22
  <div data-page-dialogs>{% include website/dialogs.html theme='docs' %}</div>
20
23
  </body>
21
24
  </html>
@@ -1,7 +1,7 @@
1
1
  <!doctype html>
2
2
  <html class="no-js" lang="{{ page.website.i18n.locale | default: site.lang | default: 'en' | escape }}" dir="{{ page.website.i18n.dir | default: 'ltr' | escape }}" data-auto-hide-root-scrollbar>
3
3
  <head>{% assign entry = site.data.website_assets.entries.minimal %}{% include website/head.html entry=entry %}</head>
4
- <body class="theme-minimal">
4
+ <body class="theme-minimal" data-navigation-layout="{{ page.website.navigation_layout | default: 'top' }}">
5
5
  {% assign ui = page.website.i18n.messages %}
6
6
  {% assign is_docs_page = false %}
7
7
  {% if page.website.kind == 'note' and page.website.content_type == 'doc' and page.website.theme_data.docs_tree.size > 0 %}{% assign is_docs_page = true %}{% endif %}
@@ -22,11 +22,11 @@
22
22
 
23
23
  <a class="skip-link" href="#main-content">{{ ui.skip_to_content | default: 'Skip to content' | escape }}</a>
24
24
  {% include website/back-to-top.html %}
25
- {% include website/header.html theme='minimal' %}
25
+ {% include website/header.html theme='minimal' show_docs=is_docs_page %}
26
26
  {% include website/favorites-ui.html %}
27
27
 
28
28
  <main class="minimal-shell{% if page.website.archive_item %} minimal-shell--archive-item{% endif %}{% unless page.website.kind == 'note' %} minimal-shell--system{% endunless %}{% if is_authored_home %} minimal-shell--authored-home{% endif %}{% if is_docs_page %} minimal-shell--docs{% endif %}{% if page.website.kind == 'blog-index' %} minimal-shell--blog{% endif %}" id="main-content" tabindex="-1"{% if page.website.kind == 'blog-index' %} data-ledger-current-year="{{ page.website.theme_data.ledger_current_year }}"{% endif %}{% if page.website.kind == 'blog-index' %} data-ledger-group-by="{{ page.website.theme_data.ledger_group_by | default: 'year' | escape }}"{% endif %}{% if page.website.theme_data.favorites %} data-favorites-page data-sources-label="{{ ui.sources | escape }}" data-topics-label="{{ ui.topics | escape }}" data-all-label="{{ ui.all | escape }}"{% endif %}{% if page.website.kind == 'blog-index' %} data-filter-page data-module-unavailable="{{ ui.archive_module_unavailable | escape }}"{% if page.website.theme_data.archive %} data-paged-archive data-archive-url="{{ page.website.theme_data.archive.url | escape }}" data-archive-current-url="{{ page.website.theme_data.archive.current_url | escape }}" data-observed-label="{{ ui.first_observed | default: 'First observed' | escape }}"{% endif %}{% endif %}>
29
- {% if is_docs_page %}
29
+ {% if is_docs_page and page.website.navigation_layout != 'sidebar' %}
30
30
  <aside class="minimal-docs-sidebar">
31
31
  <nav class="docs-tree" aria-label="{{ ui.documentation | default: 'Documentation' | escape }}" data-docs-navigation>
32
32
  {% include website/docs-tree.html nodes=page.website.theme_data.docs_tree %}
@@ -36,9 +36,10 @@
36
36
 
37
37
  <div class="minimal-reading-column" data-docs-main>
38
38
  {% if page.website.kind == 'blog-index' %}{% include website/archive-day-ui.html %}{% endif %}
39
+ {% if page.website.i18n.fallback %}<aside class="translation-fallback" role="status">{{ ui.translation_missing | default: 'This page is not translated yet. The default-language version is shown.' | escape }}</aside>{% endif %}
39
40
  <article class="minimal-entry{% if page.website.compact_collection %} minimal-entry--compact-collection{% endif %}{% if page.website.cssclasses %} {{ page.website.cssclasses | join: ' ' }}{% endif %}">
40
- {% if page.website.i18n.fallback %}<aside class="translation-fallback" role="status">{{ ui.translation_missing | default: 'This page is not translated yet. The default-language version is shown.' | escape }}</aside>{% endif %}
41
41
  {% unless page.website.theme_data.archive %}{% unless page.website.has_h1 %}{% include website/page-actions.html %}{% endunless %}{% endunless %}
42
+ {% include website/content-toolbar.html has_context=has_mobile_context %}
42
43
  {% include website/note-header.html %}
43
44
  {% include website/note-source.html %}
44
45
  {% include website/note-properties.html %}
@@ -93,11 +94,13 @@
93
94
  </main>
94
95
 
95
96
  {% include website/footer.html %}
97
+ {% unless page.website.navigation_layout == 'sidebar' %}
96
98
  <nav class="mobile-toolbar" aria-label="{{ ui.mobile_actions | default: 'Mobile actions' | escape }}">
97
99
  <button type="button" data-dialog-open="browse">{{ ui.browse | default: 'Browse' | escape }}</button>
98
100
  {% if page.website.features.search %}<button type="button" data-search-open>{{ ui.search | default: 'Search' | escape }}</button>{% endif %}
99
101
  {% if has_mobile_context %}<button type="button" data-dialog-open="context">{% if page.website.kind == 'blog-index' %}{{ ui.chronology | default: 'Chronology' | escape }}{% elsif page.website.kind == 'home' and page.website.has_context %}{{ ui.context | default: 'Context' | escape }}{% elsif page.website.kind == 'home' %}{{ ui.topics | default: 'Topics' | escape }}{% elsif page.website.features.outline and page.website.features.relations == false and page.website.local_graph == nil %}{{ ui.on_this_page | default: 'On this page' | escape }}{% else %}{{ ui.context | default: 'Context' | escape }}{% endif %}</button>{% endif %}
100
102
  </nav>
103
+ {% endunless %}
101
104
  <div data-page-dialogs>{% include website/dialogs.html theme='minimal' %}</div>
102
105
  </body>
103
106
  </html>
@@ -0,0 +1,12 @@
1
+ import{a as pe,b as Ce,c as Z,d as ie,e as _e,f as he,g as oe,h as He,i as Fe,j as G,k as me,l as ke,m as Pe,n as W,o as se,p as qe,q as Oe}from"./chunks/chunk-6V4JBGVT.js";import{b as ne}from"./chunks/chunk-TZRTKK7O.js";import{a as Me}from"./chunks/chunk-XPAP2F32.js";import"./chunks/chunk-D6FURU6X.js";import{b as xe,c as ae,d as Te,f as B}from"./chunks/chunk-VKXRXXR2.js";import"./chunks/chunk-PHKIAKHS.js";function Re(e,n,t,r){return n.getAll(t).includes(r)||!e.default_view||n.get("include_tabs")==="1"?!0:!!e.default_view.facets[t]?.[r]}function ot(e,n){if(e.default_view&&n.get("include_tabs")!=="1")return e.default_view;let t=r=>Object.fromEntries(Object.entries(r).map(([u,[c,f]])=>[u,f-c]));return{total:e.total,facets:Object.fromEntries(Object.entries(e.facets).map(([r,u])=>[r,Object.fromEntries(u.map(c=>[c.id,c.count]))])),years:t(e.years),months:t(e.months),days:t(e.days)}}function ce(e,n,t,r){return!r||n.getAll(t).includes(r)?!0:!Re(e,n,t,r)||t==="source"&&e.tab_sources?.includes(r)&&n.get("include_tabs")!=="1"?!1:n.getAll("show_hidden").includes(t)||!e.hidden_tags?.includes(e.prefixes[t]+r)}function le(e,n,t,r){if(n==="show_hidden"){let c=new Set(e.getAll(n));c.has(r)?c.delete(r):c.add(r),e.delete(n),[...c].sort().forEach(f=>e.append(n,f));return}let u=B(t,e.toString()).parameters.get(n)==="1";if(u?e.delete(n):e.set(n,"1"),n==="include_tabs"&&(e.delete("page"),u)){let c=[...new Set(e.getAll("source").map(f=>ae(f,t.prefixes.source||"source/",t.aliases)))].filter(f=>!t.tab_sources?.includes(f));e.delete("source"),c.forEach(f=>e.append("source",f))}}function Q(){return document.querySelector("[data-archive-visibility-ui]")?.dataset||{}}function ve(e,n,t,r={},u){let c=e.facets[t]?.some(d=>e.hidden_tags?.includes(e.prefixes[t]+d.id)&&Re(e,n,t,d.id));return[...t==="source"&&e.facets[t]?.some(d=>e.tab_sources?.includes(d.id))?["include_tabs"]:[],...c?["show_hidden"]:[]].map(d=>{let l=d==="show_hidden"?n.getAll(d).includes(t):n.get(d)==="1",a=document.createElement("button");return a.type="button",a.className="archive-visibility",a.dataset.archiveVisibility=d,a.dataset.archiveVisibilityFacet=t,a.setAttribute("aria-expanded",String(l)),u&&a.setAttribute("aria-controls",u),a.textContent=d==="include_tabs"?l?r.hideTabs||"Hide tab sources":r.includeTabs||"Include tab sources":t==="topic"?l?r.hideTopics||"Hide hidden topics":r.showTopics||"Show hidden topics":l?r.hideTags||"Hide hidden tags":r.showTags||"Show hidden tags",a})}var De=new WeakMap;function ge(e,n){e&&e.textContent!==n&&(e.textContent=n)}function Ie(e,n){e.hidden!==n&&(e.hidden=n)}function Ue(e,n,t){let r=De.get(e),u=!!(n.hidden_tags?.length||n.tab_sources?.length);if(!u&&!r?.governed)return;let c=t.get("include_tabs")==="1",f=JSON.stringify([t.getAll("show_hidden"),Object.keys(n.facets).map(a=>t.getAll(a))]);if(r?.data===n&&r.scope===c&&r.selection===f)return;let d=r?.data!==n||r.scope!==c?ot(n,t):void 0,l=Q();for(let a of e.querySelectorAll(".archive-facet")){let o=a.querySelector(".archive-facet-heading"),i=a.querySelector("[data-archive-facet]")?.dataset.archiveFacet;if(!i)continue;let h=a.querySelector("ul");h.id||(h.id=`archive-options-${i}`);let m=new Map([...o.querySelectorAll("[data-archive-visibility]")].map(g=>[g.dataset.archiveVisibility,g]));for(let g of ve(n,t,i,l,h.id)){let w=m.get(g.dataset.archiveVisibility);if(w){ge(w,g.textContent);for(let x of["aria-expanded","aria-controls"])w.getAttribute(x)!==g.getAttribute(x)&&w.setAttribute(x,g.getAttribute(x));m.delete(g.dataset.archiveVisibility)}else o.append(g)}m.forEach(g=>g.remove());for(let g of a.querySelectorAll("[data-archive-facet]")){let w=g.dataset.archiveValue,x=g.querySelector("span");Ie(g.closest("li"),!ce(n,t,i,w)),d&&ge(x,String(w?d.facets[i]?.[w]||0:d.total))}}if(d)for(let a of["year","month","day"]){let o=d[`${a}s`];for(let i of document.querySelectorAll(`[data-timeline-nav] [data-${a}-filter-option]`)){let h=o[i.getAttribute(`data-filter-${a}`)]||0,m=i.querySelector(".archive-timeline__count");ge(m,String(h));let g=i.closest(a==="year"?"section":"li");g&&Ie(g,h===0)}}De.set(e,{data:n,selection:f,scope:c,governed:u})}var $e=864e5;function de(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return;let n=Date.parse(e+"T00:00:00Z");if(!(!Number.isFinite(n)||new Date(n).toISOString().slice(0,10)!==e))return n/$e}function be(e,n,t){if(!e||!n)return"required";let r=de(e),u=de(n);return r===void 0||u===void 0?"invalid":r>u?"order":u-r+1>t?"limit":null}function Ae(e,n,t){let r=new URLSearchParams(n).get("day");if(r&&de(r)!==void 0)return[r,r];let u=t[0],c=u===void 0?void 0:Object.keys(e.days).find(s=>u>=e.days[s][0]&&u<e.days[s][1]);return c?[new Date((de(c)-e.export_max_days+1)*$e).toISOString().slice(0,10),c]:["",""]}function Ne(e,n,t,r){if(be(t,r,e.export_max_days))throw new Error("Invalid export date range");let u=new URLSearchParams(n);for(let s of["day","month","year","page"])u.delete(s);let c=B(e,u.toString()),f=Object.entries(e.days).filter(([s])=>s>=t&&s<=r).map(([,s])=>s);return c.query.range=f.length?[Math.min(...f.map(s=>s[0])),Math.max(...f.map(s=>s[1]))]:[0,0],c}function ye(e){return e.replace(/[\t\r\n\u2028\u2029]+/g," ").replace(/[\\`*_[\]{}<>#!|~]/g,"\\$&")}function Be(e,n,t,r){let u=a=>a==="source"?r.source:a==="topic"?r.topic:a,c=(a,o)=>o.map(i=>ye(n.labels[n.prefixes[a]+i]||i)).join(", "),f=a=>`<${Z(a,!0).href.replace(/</g,"%3C").replace(/>/g,"%3E")}>`,s=a=>{let o=e.filters.getAll(a);return a==="source"&&!o.length&&n.tab_sources?.length&&e.filters.get("include_tabs")!=="1"?r.allWithoutTabs:c(a,o)||r.all},l=[["# "+ye(e.site),`${r.dates}: ${e.start} \u2014 ${e.end}`,...Object.keys(n.prefixes).map(a=>`${u(a)}: ${s(a)}`),`${r.entries}: ${e.cards.length}`].join(`
2
+
3
+ `)];for(let a of e.cards){let o=t.get(a.id);if(o===void 0)throw new Error("Incomplete export");let i=[`${r.date}: ${a.display_date||""}`,...Object.entries(a.facets).map(([h,m])=>`${u(h)}: ${c(h,m)}`),...a.source_url?[`${r.original}: ${a.source_title?`[${ye(a.source_title)}](${f(a.source_url)})`:f(a.source_url)}`]:[],`${r.article}: ${f(a.url)}`].join(`
4
+ `);l.push(`
5
+
6
+ ---
7
+
8
+ `,i,`
9
+
10
+ `,o.replace(/\r\n?/g,`
11
+ `).trimEnd())}return l.push(`
12
+ `),l}function je(e){let n=e.site.toLowerCase().replace(/[^\p{L}\p{N}_-]+/gu,"-").replace(/^-+|-+$/g,"")||"archive",t=e.locale.replace(/[^a-zA-Z0-9-]/g,"")||"en";return`${n}-${t}-${e.start}_${e.end}.md`}function Ve(e){let n=document.querySelector("[data-archive-export-open]"),t=document.querySelector('[data-dialog="export"]');if(!n||!t)return()=>{};let r=t.querySelector("[data-export-start]"),u=t.querySelector("[data-export-end]"),c=t.querySelector("[data-export-fields]"),f=t.querySelector("[data-export-facets]"),s=t.querySelector("[data-export-status]"),d=t.querySelector("[data-export-download]"),l=t.querySelector("[data-export-retry]"),a=t.querySelector("[data-export-cancel]"),o=t.querySelector("[data-export-progress]"),i=v=>t.dataset[v]||"",h,m=new URLSearchParams,g=[],w=new AbortController,x=new AbortController,L,R,b=!1,S=(v,p)=>i(v).replace("{count}",String(p));function T(v){R=v,l.hidden=!v}function M(){L?.controller.abort(),L=void 0,T(),c.disabled=!1,a.hidden=!0,o.hidden=!0}function F(){f.replaceChildren();let v=Q();for(let[p,A]of Object.entries(h.facets)){let y=document.createElement("fieldset"),E=document.createElement("legend");y.dataset.exportFacetGroup=p,E.textContent=p==="source"?i("sources"):p==="topic"?i("topics"):p,y.append(E);let C=document.createElement("div");C.className="archive-export__choices",C.id=`export-options-${p}`,y.append(...ve(h,m,p,v,C.id));let O=m.getAll(p),J=[...A,...O.filter(D=>!A.some(P=>P.id===D)).map(D=>({id:D,name:D}))],U=document.createElement("button");U.type="button",U.textContent=i("all"),U.className="tag-chip",U.dataset.exportAll=p,U.setAttribute("aria-label",`${E.textContent}: ${i("all")}`),U.setAttribute("aria-pressed",String(O.length===0)),C.append(U);for(let D of J){if(!ce(h,m,p,D.id))continue;let P=document.createElement("label");P.className="archive-export__choice";let I=document.createElement("input");I.type="checkbox",I.dataset.exportFacet=p,I.value=D.id,I.checked=O.includes(D.id);let X=document.createElement("span");X.textContent=D.name,P.append(I,X),C.append(P)}y.append(C),f.append(y)}}async function H(v){let p=await e.manifest(v);return v.throwIfAborted(),p.generation===h?.generation?!0:(await j(),!b&&t.open&&(s.textContent=`${i("updated")} ${s.textContent}`),!1)}async function k(v=!1){x.abort(),x=new AbortController;let p=AbortSignal.any([w.signal,x.signal]);if(g=[],d.disabled=!0,M(),!h)return;let A=be(r.value,u.value,h.export_max_days);if(A){s.textContent=i(A).replace("{days}",String(h.export_max_days));return}if(s.textContent=i("calculating"),v&&await new Promise(y=>{let E=()=>{clearTimeout(C),p.removeEventListener("abort",E),y()},C=setTimeout(E,180);p.addEventListener("abort",E,{once:!0})}),!p.aborted)try{if(!await H(p))return;let y=await e.select(Ne(h,m,r.value,u.value),"all",p,5e3);if(p.aborted||b)return;if(y.count>5e3){s.textContent=S("tooMany",y.count).replace("{limit}",String(5e3));return}g=y.ordinals,s.textContent=y.count?S("matches",y.count):i("empty"),d.disabled=y.count===0}catch{p.aborted||(s.textContent=i("unavailable"),T(()=>{k()}))}}async function j(){w.abort(),x.abort(),w=new AbortController;let v=w.signal,p=location.search;h=void 0,g=[],M(),f.replaceChildren(),r.value=u.value="",d.disabled=!0,c.disabled=!0,s.textContent=i("calculating"),Me("export");let A=document.activeElement;try{let y=await e.manifest(v);if(v.aborted)return;h=y;let E=B(h,p);if(m=new URLSearchParams(E.parameters),[r.value,u.value]=Ae(h,p,[]),!r.value){let C=await e.select(E,"first",v);if(v.aborted)return;[r.value,u.value]=Ae(h,p,C.ordinals)}for(let C of["day","month","year","page"])m.delete(C);F(),c.disabled=!1,document.activeElement===A&&r.focus(),t.querySelector("[data-export-limit]").textContent=i("limitHint").replace("{days}",String(h.export_max_days)),await k()}catch{v.aborted||(s.textContent=i("unavailable"),T(()=>{j()}))}}async function V(){if(!h||!g.length||L?.status==="running")return;x.abort();let v=new AbortController;L??={snapshot:{site:i("site"),locale:document.documentElement.lang,start:r.value,end:u.value,filters:new URLSearchParams(m),cards:[]},ordinals:[...g],bodies:new Map,budget:new Ce,controller:v,status:"running"};let p=L;p.controller=v,p.status="running";let A=AbortSignal.any([w.signal,p.controller.signal]),{snapshot:y,bodies:E}=p;d.disabled=!0,c.disabled=!0,T(),a.hidden=!1,o.hidden=!1,o.max=p.ordinals.length;let C=()=>{o.value=E.size,s.textContent=i("progress").replace("{done}",String(E.size)).replace("{count}",String(p.ordinals.length))};C();try{if(!await H(A))return;y.cards.length||(o.removeAttribute("value"),s.textContent=i("loadingCards"),y.cards=await e.cards(p.ordinals,A),A.throwIfAborted(),C());let O=0;if(await ie(y.cards.filter(P=>!E.has(P.id)),async P=>{try{let I=await e.markdown(P,A,p.budget);A.throwIfAborted(),E.set(P.id,I),C()}catch(I){if(A.aborted||I instanceof pe)throw I;O++}},A),A.throwIfAborted(),O){p.status="failed",s.textContent=S("failed",O),T(()=>{V()});return}let J=Be(y,h,E,{dates:i("dates"),source:i("sources"),topic:i("topics"),all:i("all"),allWithoutTabs:i("allWithoutTabs"),entries:i("entries"),date:i("date"),original:i("original"),article:i("article")}),U=URL.createObjectURL(new Blob(J,{type:"text/markdown;charset=utf-8"})),D=document.createElement("a");D.href=U,D.download=je(y),document.body.append(D),D.click(),D.remove(),setTimeout(()=>URL.revokeObjectURL(U),1e3),s.textContent=S("complete",y.cards.length),p.status="complete"}catch(O){O instanceof pe&&!A.aborted?(p.status="limited",p.controller.abort(),E.clear(),s.textContent=i("tooLarge")):A.aborted||(p.status="failed",s.textContent=i("unavailable"),T(()=>{V()}))}finally{L===p&&(c.disabled=!1,a.hidden=!0,o.hidden=!0,d.disabled=p.status!=="complete")}}function $(v){if(!(L?.status==="running"||!h)){for(let p of Object.keys(h.facets))m.delete(p);for(let p of f.querySelectorAll("input:checked"))m.append(p.dataset.exportFacet,p.value);m=B(h,m.toString()).parameters;for(let p of f.querySelectorAll("[data-export-all]"))p.setAttribute("aria-pressed",String(!m.has(p.dataset.exportAll)));for(let p of f.querySelectorAll("[data-export-facet]")){let A=p.closest("label");if(A.hidden=!ce(h,m,p.dataset.exportFacet,p.value),A.hidden&&document.activeElement===p){let y=p.dataset.exportFacet==="source"&&h.tab_sources?.includes(p.value)&&m.get("include_tabs")!=="1"?"include_tabs":"show_hidden",E=p.closest("fieldset");(E?.querySelector(`[data-archive-visibility="${y}"]`)||E?.querySelector("[data-export-all]"))?.focus()}}k(v?.target===r||v?.target===u)}}function ee(v){if(!(v.target instanceof Element))return;let p=v.target.closest("[data-archive-visibility]");if(p&&h&&L?.status!=="running"){let y=p.dataset.archiveVisibility,E=p.closest("[data-export-facet-group]").dataset.exportFacetGroup;le(m,y,h,E),F(),f.querySelector(`[data-export-facet-group="${E}"] [data-archive-visibility="${y}"]`)?.focus(),y==="include_tabs"&&k();return}let A=v.target.closest("[data-export-all]");if(!(!A||L?.status==="running")){for(let y of f.querySelectorAll("input"))y.dataset.exportFacet===A.dataset.exportAll&&(y.checked=!1);$()}}function Y(){M(),d.disabled=!g.length,s.textContent=i("cancelled")}function K(){w.abort(),x.abort(),M()}function z(){K(),b||n.focus()}function te(v){(v.target===t||v.target instanceof Element&&v.target.closest("[data-dialog-close]"))&&K()}function re(){R?.()}let N=()=>{j()},q=()=>{V()};return n.hidden=!1,n.addEventListener("click",N),t.addEventListener("close",z),t.addEventListener("cancel",K),t.addEventListener("click",te),c.addEventListener("input",$),f.addEventListener("click",ee),d.addEventListener("click",q),l.addEventListener("click",re),a.addEventListener("click",Y),()=>{b=!0,z(),t.open&&t.close(),n.removeEventListener("click",N),t.removeEventListener("close",z),c.removeEventListener("input",$),f.removeEventListener("click",ee),t.removeEventListener("cancel",K),t.removeEventListener("click",te),d.removeEventListener("click",q),l.removeEventListener("click",re),a.removeEventListener("click",Y)}}var st=new Set("A ABBR B BLOCKQUOTE BR CODE DD DEL DETAILS DIV DL DT EM FIGCAPTION FIGURE H1 H2 H3 H4 H5 H6 HR I IMG KBD LI MARK OL P PRE S SECTION SMALL SPAN STRONG SUB SUMMARY SUP TABLE TBODY TD TFOOT TH THEAD TR UL".split(" ")),ct=new Set("SCRIPT STYLE IFRAME OBJECT EMBED FORM INPUT BUTTON SELECT TEXTAREA TEMPLATE NOSCRIPT SVG MATH".split(" "));function lt(e,n,t){let r=new URL(n),u=r.origin+r.pathname+r.search,c=document.createElement("template");c.innerHTML=e;let f=c.content.querySelector(".note-content");if(!f)throw new Error("Article body is missing");let s=new Map(Array.from(f.querySelectorAll("[id]"),(a,o)=>[a.id,`${t}-${o}`]));function d(a){if(a.nodeType===Node.TEXT_NODE)return document.createTextNode(a.textContent||"");if(!(a instanceof Element)||ct.has(a.tagName))return null;let o=document.createDocumentFragment();for(let m of a.childNodes){let g=d(m);g&&o.append(g)}if(!st.has(a.tagName))return o;let i=document.createElement(a.tagName.toLowerCase());a.id&&(i.id=s.get(a.id));for(let m of["title","lang","dir","alt","colspan","rowspan","scope","start"]){let g=a.getAttribute(m);g!==null&&i.setAttribute(m,g)}a.tagName==="CODE"&&(i.className=[...a.classList].filter(m=>/^language-[\w+-]+$/.test(m)).join(" "));let h=a.tagName==="A"?"href":a.tagName==="IMG"?"src":null;if(h){let m=a.getAttribute(h);if(m)try{let g=new URL(m,r);if(/^https?:$/.test(g.protocol)||h==="href"&&g.protocol==="mailto:"){let w;try{w=s.get(decodeURIComponent(g.hash.slice(1)))}catch{}i.setAttribute(h,w&&g.origin+g.pathname+g.search===u?`#${w}`:g.href)}}catch{}}return a.tagName==="A"&&i.setAttribute("rel","noopener noreferrer"),a.tagName==="IMG"&&(i.setAttribute("loading","lazy"),!i.hasAttribute("src"))?null:(i.append(o),i)}let l=document.createDocumentFragment();for(let a of f.childNodes){let o=d(a);o&&l.append(o)}return l}function Ke(e,n){let t=document.querySelector("[data-archive-reading-toggle]");if(!t)return{refresh(){},dispose(){}};let r=!1,u=!1,c=new AbortController,f=0,s,d=new WeakMap,l=new Map,a=0;try{r=localStorage.getItem("website-archive-reading")==="true"}catch{}t.hidden=!1;function o(){t.setAttribute("aria-checked",String(r)),t.title=r?t.dataset.enabled||"Read in full: on":t.dataset.disabled||"Read in full: off"}function i(b){let S=b.cloneNode(!0),T=new Map,M=`archive-article-${++f}`;for(let[F,H]of[...S.querySelectorAll("[id]")].entries()){let k=`${M}-${F}`;T.set(H.id,k),H.id=k}for(let F of S.querySelectorAll('a[href^="#"]')){let H=T.get(F.getAttribute("href").slice(1));H&&F.setAttribute("href","#"+H)}return S}async function h(b,S){let T=b.querySelector("a.blog-ledger__main"),M=b.querySelector(".blog-ledger__content");if(!T||!M||!m(b)||b.dataset.readingLoaded||d.get(b)===S)return;d.set(b,S);let F=M.querySelector(".archive-reading__body");F||(F=document.createElement("div"),F.className="archive-reading__body note-content",M.append(F)),F.textContent=t.dataset.loading||"Loading article\u2026",F.setAttribute("aria-busy","true");try{let H=l.get(T.href);if(H)l.delete(T.href),l.set(T.href,H);else{let k=await n.article(T.href,S);for(S.throwIfAborted(),H={body:lt(k.html,k.url,"archive-template"),weight:k.html.length*2},l.set(T.href,H),a+=H.weight;l.size>100||a>4*1024*1024;){let j=l.keys().next().value;a-=l.get(j).weight,l.delete(j)}}S.throwIfAborted(),F.replaceChildren(i(H.body)),b.dataset.readingLoaded="true"}catch{if(S.aborted)return;let H=document.createElement("p");H.textContent=t.dataset.unavailable||"Article could not be loaded.";let k=document.createElement("button");k.type="button",k.dataset.readingRetry="",k.textContent=t.dataset.retry||"Retry",F.replaceChildren(H,k)}finally{d.get(b)===S&&d.delete(b),S.aborted||F.removeAttribute("aria-busy")}}function m(b){return!b.closest("[hidden], details[data-ledger-day]:not([open])")}function g(b=e){if(!r||u)return;let S=c.signal,T=Array.from(b.querySelectorAll("[data-filter-item]"));if(s)for(let M of T)m(M)?!M.dataset.readingLoaded&&d.get(M)!==S&&s.observe(M):s.unobserve(M);else ie(T.filter(m),M=>h(M,S),S).catch(()=>{})}function w(){if(s?.disconnect(),s=void 0,c.abort(),c=new AbortController,e.classList.toggle("archive-reading",r),o(),!r||u)return;let b=c.signal;typeof IntersectionObserver=="function"&&(s=new IntersectionObserver((S,T)=>{if(!b.aborted)for(let M of S)M.isIntersecting&&m(M.target)&&(T.unobserve(M.target),h(M.target,b))},{rootMargin:"400px 0px"})),g()}function x(){r=!r;try{localStorage.setItem("website-archive-reading",String(r))}catch{}w()}function L(b){if(!r||u||!(b.target instanceof Element)||!b.target.closest("[data-reading-retry]"))return;let S=b.target.closest("[data-filter-item]");S&&h(S,c.signal)}t.addEventListener("click",x),e.addEventListener("click",L);let R=b=>{b.target instanceof HTMLDetailsElement&&b.target.hasAttribute("data-ledger-day")&&g(b.target)};return e.addEventListener("toggle",R,!0),o(),{refresh:w,dispose(){u=!0,s?.disconnect(),c.abort(),l.clear(),a=0,t.removeEventListener("click",x),e.removeEventListener("click",L),e.removeEventListener("toggle",R,!0)}}}var Ge=new WeakMap;function We(e){let n=Ge.get(e);if(!n){let t=e.querySelector("[data-ledger-day-ui]").dataset;n={year:e.dataset.ledgerCurrentYear,date:t.date,dateYear:t.dateYear,months:t.months.split("|"),weekdays:t.weekdays.split("|"),entry:t.entry,entries:t.entries,undated:t.undated},Ge.set(e,n)}return n}function dt(e,n){return(n===1?e.entry:e.entries).replaceAll("{count}",String(n))}function Ye(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return;let n=new Date(`${e}T00:00:00Z`);if(!(!Number.isFinite(n.valueOf())||n.toISOString().slice(0,10)!==e))return{year:e.slice(0,4),month:n.getUTCMonth(),day:n.getUTCDate(),weekday:n.getUTCDay()}}function ut(e,n){let t=We(e),r=Ye(n),u=r?.year===t.year?t.date:t.dateYear,c=r&&{month:t.months[r.month],day:String(r.day),year:r.year};return{date:c?u.replace(/\{(month|day|year)\}/g,(f,s)=>c[s]):t.undated,weekday:r?t.weekdays[r.weekday]:"",dated:!!r}}function ze(e,n){let t=document.createElement("details");t.className="archive-day",t.dataset.ledgerDay=n;let r=document.createElement("summary"),u=document.createElement("h2"),c=ut(e,n),f=document.createElement(c.dated?"time":"span");f.textContent=c.date,f instanceof HTMLTimeElement&&(f.dateTime=n),u.append(f);let s=document.createElement("span");s.className="archive-day__arrow",s.setAttribute("aria-hidden","true");let d=document.createElement("span");if(d.className="archive-day__meta",c.weekday){let a=document.createElement("span");a.textContent=c.weekday,d.append(a," \xB7 ")}let l=document.createElement("span");return l.dataset.ledgerDayCount="",d.append(l),r.append(u,s,d),t.append(r),t}function ue(e){let n=new Map,t=new WeakMap,r=()=>Array.from(e.querySelectorAll("details[data-ledger-day]"));for(let s of r())t.set(s,s.hasAttribute("data-ledger-default-open")?s.dataset.ledgerDefaultOpen==="true":s.open);function u(s=r()){for(let d of s){let l=t.get(d);l!==void 0&&l!==d.open&&n.set(d.dataset.ledgerDay,d.open),t.set(d,d.open)}}function c(){let s=r();u(s);let d=s.filter(a=>!a.closest("[data-filter-group][hidden]")),l;for(let a of d){let o=a.dataset.ledgerDay;Ye(o)&&(!l||o>l)&&(l=o)}l||=d[0]?.dataset.ledgerDay;for(let a of d){let o=a.dataset.ledgerDay,i=n.get(o)??o===l;t.set(a,i),a.open!==i&&(a.open=i);let h=a.querySelector("[data-ledger-day-count]");h&&(h.textContent=dt(We(e),a.querySelectorAll("[data-filter-item]:not([hidden])").length))}}let f=s=>{s.target instanceof HTMLDetailsElement&&s.target.hasAttribute("data-ledger-day")&&u([s.target])};return c(),e.addEventListener("toggle",f,!0),{replace(s){u(),s(),c()},refresh:c,dispose(){e.removeEventListener("toggle",f,!0),n.clear()}}}function _(e,n,t){let r=document.createElement(e);return r.textContent=n,t&&(r.className=t),r}function Je(e,n,t,r){let u=t.ledger_group_by||e.dataset.ledgerGroupBy||"year";e.dataset.ledgerGroupBy=u;let c=document.createDocumentFragment(),f=u==="day",s=W(),d=!!document.querySelector("[data-favorites-ui]"),l,a;for(let o of n){let i=(f?o.display_date:o.year)||s.undated||"Undated";if(i!==l){l=i;let L=document.createElement("section");L.dataset.filterGroup="";let R=o.display_date||"Undated",b=f?ze(e,R):L;f||L.append(_("h2",l));let S=_("section","","blog-ledger");a=document.createElement("ol"),S.append(a),b.append(S),f&&L.append(b),c.append(L)}let h=document.createElement("li");if(h.dataset.filterItem="",!f){let L=_("div","","blog-ledger__meta"),R=_("time",o.display_date||"");R.dateTime=o.published_at||"",L.append(R),h.append(L)}let m=_("div","","blog-ledger__content"),g=o.unavailable?_("div","","blog-ledger__main"):_("a","","blog-ledger__main");if(g instanceof HTMLAnchorElement&&(g.href=Z(o.url).href),g.append(_("strong",o.title)),o.snapshot_locale&&(g.lang=o.snapshot_locale),o.summary&&g.append(_("span",o.summary,"blog-ledger__description")),d){let L=_("div","","blog-ledger__heading");L.append(g,qe({...o,favorite_labels:He(o,t)})),m.append(L)}else m.append(g);let w=_("footer","","archive-card-footer"),x=_("ul","","blog-ledger__topics");for(let[L,R]of Object.entries(o.facets))for(let b of R){let S=oe(o,L,b,t),T=_("a",S);T.dataset.archiveFacet=L,T.dataset.archiveValue=b;let M=new URL(window.location.href),F=new Set(M.searchParams.getAll(L));F.has(b)?F.delete(b):F.add(b),M.searchParams.delete("page"),M.searchParams.delete(L),[...F].sort().forEach(k=>M.searchParams.append(L,k)),T.href=M.pathname+M.search;let H=document.createElement("li");H.append(T),x.append(H)}if(w.append(x),o.source_url){let L=_("a",o.source_title||o.source_url,"archive-source-url");L.href=Z(o.source_url,!0).href,L.rel="noopener noreferrer",w.append(L)}o.date_basis==="observed"&&w.append(_("small",e.dataset.observedLabel||"First observed")),o.unavailable&&(h.dataset.favoriteUnavailable="",w.append(_("small",s.removed||"This article is no longer published. Your saved summary and original link are kept."))),m.append(w),h.append(m),a.append(h)}e.querySelector("[data-filter-list]").replaceChildren(c),Oe(r)}function ft(){try{let e=JSON.parse(Q().hiddenTags||"[]");return Array.isArray(e)&&e.every(n=>typeof n=="string"&&n.length>0)?e:[]}catch{return[]}}function pt(e,n){let t=Object.create(null),r=Object.assign(Object.create(null),n?.prefixes||{source:"source/",topic:"topics/"}),u={...n?.labels},c={},f={},s={},d=new Map;for(let l of Object.keys(n?.prefixes||{source:"source/",topic:"topics/"}))t[l]=[];e.forEach((l,a)=>{for(let[o,i]of Object.entries(l.facets)){Object.hasOwn(r,o)||(r[o]=he(r,o)),t[o]||=[];for(let h of i){let m=r[o]+h;u[m]||=oe(l,o,h,n);let g=d.get(o);g||(g=new Map,d.set(o,g));let w=g.get(h);w||(w={id:h,name:u[m],count:0},g.set(h,w),t[o].push(w)),w.count++}}for(let[o,i]of[[c,l.year],[f,l.month],[s,l.display_date]])i&&(o[i]||=[a,a],o[i][1]=a+1)});for(let l of Object.values(t))l.sort((a,o)=>o.count-a.count||a.id.localeCompare(o.id));return{total:e.length,page_size:50,hidden_tags:n?.hidden_tags||ft(),facets:t,prefixes:r,labels:u,aliases:n?.aliases||{},years:c,months:f,days:s,ledger_group_by:"day"}}function Le(e,n){return Object.hasOwn(e.snapshots,n)?n:Object.keys(e.snapshots)[0]}function Se(e,n){let t=Le(e,n);return{...e.snapshots[t],snapshot_locale:t}}function ht(e,n){return n&&Object.keys(n.aliases).length&&(e=e.map(t=>({...t,facets:Object.fromEntries(Object.entries(t.facets).map(([r,u])=>[r,[...new Set(u.map(c=>ae(c,he(n.prefixes,r),n.aliases)))]]))}))),e.sort((t,r)=>(t.display_date||"")>(r.display_date||"")?-1:(t.display_date||"")<(r.display_date||"")?1:t.id<r.id?-1:t.id>r.id?1:0)}function we(e,n){return new Map([...e].map(([t,r])=>[t,r.snapshots[Le(r,n)]]))}function Ze(e,n,t,r,u,c){let f=new Map(e.map(l=>[l.id,l])),s=we(n.entries,c),d=ht([...t.entries.values()].map(l=>{let a=f.get(l.id),o=l.snapshots[Le(l,c)];return a&&ke(o,s.get(l.id))?a:{...Se(l,c),unavailable:!!a?.unavailable}}),r);return{cards:d,manifest:pt(d,r),refreshFailed:u&&d.length>0,sourceManifest:r,snapshots:we(t.entries,c),revision:t.revision}}async function Qe(e,n,t){try{return e.length?await Pe(e,t,n.entries):G()}catch(r){se(r);try{return G()}catch{return n}}}async function mt(e,n,t){let r=document.documentElement.lang||"en";try{t||=G()}catch(d){throw se(d),d}let u=t,c=[...t.entries.values()].map(d=>Se(d,r)),f,s=!1;try{f=await e.manifest(n);let d=c.length?await e.lookup(c.map(l=>l.id),n):new Map;n.throwIfAborted(),c=c.map(l=>d.has(l.id)?{...me(d.get(l.id),f),snapshot_locale:r}:{...l,unavailable:!0}),u=await Qe(c.filter(l=>!l.unavailable),t,r)}catch{n.throwIfAborted(),s=!0}return Ze(c,t,u,f,s,r)}async function gt(e,n,t,r=G()){let u=document.documentElement.lang||"en",c=we(r.entries,u),f=new Map(e.cards.map(o=>[o.id,o])),s=[],d=r,l=[...r.entries.values()].map(o=>{let i=f.get(o.id);return i&&c.get(o.id)===e.snapshots.get(o.id)?i:(i||s.push(o.id),{...!Object.hasOwn(o.snapshots,u)&&i?.snapshot_locale===u?i:Se(o,u),unavailable:!!i?.unavailable})}),a=e.refreshFailed;if(s.length)try{let o=await n.lookup(s,t);t.throwIfAborted();let i=[...o.values()].map(m=>me(m,e.sourceManifest)),h=new Map(i.map(m=>[m.id,m]));l=l.map(m=>h.has(m.id)?{...h.get(m.id),snapshot_locale:u}:m),d=await Qe(i,r,u)}catch{t.throwIfAborted(),a=!0}return Ze(l,r,d,e.sourceManifest,a,u)}async function et(e,n,t){let r;try{r=G()}catch(u){throw se(u),u}return t?t.revision===r.revision?t:gt(t,e,n,r):mt(e,n,r)}var Xe=new WeakMap;function tt(e,n,t){let r=Xe.get(e);r||(r=new Map,Xe.set(e,r));let u=new Set(t.keys.filter(f=>!r.has(f)));for(let f of u)r.set(f,new Uint8Array(Math.ceil(e.length/8)));u.size&&e.forEach((f,s)=>{for(let[d,l]of Object.entries(f.facets))for(let a of l){let o=d+"/"+a;u.has(o)&&(r.get(o)[s>>3]|=1<<(s&7))}});let c=Object.fromEntries(t.keys.map(f=>[f,r.get(f)]));for(;r.size>20;)r.delete(r.keys().next().value);return Te(e.length,n.page_size,t.query,c)}function rt(e,n){let t=e.querySelector("[data-favorites-facets]"),r=new Map([["source",e.dataset.sourcesLabel||"Sources"],["topic",e.dataset.topicsLabel||"Topics"]]);t.replaceChildren();for(let[c,f]of Object.entries(n.facets)){let s=_("nav","","tag-filter archive-facet"),d=_("h2",r.get(c)||c,"archive-facet-label"),l=_("ul","","tag-filter__list");s.setAttribute("aria-label",d.textContent);for(let o of[{id:"",name:e.dataset.allLabel||"All",count:n.total},...f]){let i=_("button","","tag-chip");i.type="button",i.dataset.archiveFacet=c,i.dataset.archiveValue=o.id,i.append(document.createTextNode(o.name+" "),_("span",String(o.count)));let h=document.createElement("li");h.append(i),l.append(h)}let a=_("div","","archive-facet-heading");a.append(d),s.append(a,l),t.append(s)}for(let c of document.querySelectorAll("[data-timeline-nav]")){let f=c.querySelector("h2");c.replaceChildren(),f&&c.append(f);for(let s of Object.keys(n.years).filter(d=>d!=="Undated").sort().reverse()){let d=_("section","","archive-timeline__year archive-timeline__year--days"),l=_("h3",""),a=_("ul",""),o=(h,m,g,w)=>{let x=_("a","");return x.href=`${location.pathname}?${h}=${encodeURIComponent(m)}`,x.setAttribute(`data-${h}-filter-option`,""),x.setAttribute(`data-filter-${h}`,m),x.append(_("span",g),_("span",String(w),"archive-timeline__count")),x},i=n.years[s];l.append(o("year",s,s,i[1]-i[0]));for(let h of Object.keys(n.days).filter(m=>m.startsWith(s)).sort().reverse()){let m=n.days[h],g=document.createElement("li");g.append(o("day",h,h.slice(5),m[1]-m[0])),a.append(g)}d.append(l,a),c.append(d)}c.hidden=!Object.keys(n.days).length}for(let c of document.querySelectorAll('[data-dialog-open="context"]'))c.hidden=!Object.keys(n.days).length;let u=e.querySelector("[data-archive-empty]");n.total||u.replaceChildren(document.createTextNode(W().empty||"No favorites yet. Save an entry to find it here."))}function vt(e,n){let t=Math.min(5,n),r=Math.max(1,Math.min(e-2,n-t+1));return Array.from({length:t},(u,c)=>r+c)}function nt(e,n,t,r){let u=e.dataset.pageLabel||"Page {page} of {pages}",c=e.dataset.resultLabel||"{count} entries";e.querySelector("[data-archive-page-status]").textContent=`${c.replace("{count}",String(r))} \xB7 ${u.replace("{page}",String(n)).replace("{pages}",String(t))}`,e.querySelector("[data-archive-page=prev]").disabled=n<=1,e.querySelector("[data-archive-page=next]").disabled=n>=t;let f=e.querySelector("[data-archive-page-numbers]");f.replaceChildren(),f.hidden=t<=1;for(let l of vt(n,t)){let a=document.createElement("a"),o=new URL(location.href);l===1?o.searchParams.delete("page"):o.searchParams.set("page",String(l)),a.href=o.pathname+o.search,a.dataset.archivePage=String(l),a.textContent=String(l),a.setAttribute("aria-label",(e.dataset.numberLabel||"Page {page}").replace("{page}",String(l))),l===n&&a.setAttribute("aria-current","page"),f.append(a)}let s=e.querySelector("[data-archive-page-jump]"),d=s.querySelector("input");(document.activeElement!==d||e.dataset.currentPage!==String(n))&&(d.value=String(n)),e.dataset.currentPage=String(n),d.max=String(t),d.disabled=r===0,document.activeElement!==d&&d.setCustomValidity(""),s.hidden=t<=1}function at(e){let n=window.location.pathname;return ne(t=>{let r=_e(e.dataset.archiveUrl);t(()=>r.dispose());let u=e.hasAttribute("data-favorites-page"),c=e.querySelector("[data-archive-status]"),f=e.querySelector("[data-archive-retry]"),s=e.querySelector("[data-archive-empty]"),d=[...s.childNodes].map(q=>q.cloneNode(!0)),l=e.querySelector("[data-archive-pagination]"),a=l.querySelector("[data-archive-page=prev]"),o=l.querySelector("[data-archive-page=next]"),i=new AbortController;t(()=>i.abort());let h=ue(e);t(()=>h.dispose());let m=Ke(e,r);t(()=>m.dispose()),u||t(Ve(r));let g=0,w=!0;t(()=>{w=!1});let x,L,R,b=!0,S,T=async()=>{throw new Error("Current deployment could not be verified")},M={manifest:T,lookup:T},F,H={ordinals:[],count:0,page:1,pages:1};async function k(q=!1){if(window.location.pathname!==n)return;let v=window.location.search;if(x===v)return;x=v;let p=++g,A=()=>!w||p!==g||window.location.pathname!==n;c.textContent=c.dataset.loading||"Loading\u2026",f.hidden=!0,e.setAttribute("aria-busy","true"),a.disabled=!0,o.disabled=!0;try{if(q&&!S&&(L=void 0,b=!1,S=r.revalidateCurrent(e.dataset.archiveCurrentUrl,i.signal).then(()=>{b=!0}).catch(()=>{i.signal.throwIfAborted()}).finally(()=>{S=void 0})),await S,A())return;let y;u&&(y=await et(b?r:M,i.signal,L));let E=y?.manifest||await r.manifest(i.signal);if(A())return;y&&(L=y);let C=B(E,window.location.search),O=y?tt(y.cards,E,C):await r.select(C,"page",i.signal);if(A())return;let J=y?O.ordinals.map(P=>y.cards[P]):await r.cards(O.ordinals,i.signal);if(A())return;y&&R!==E&&(s.replaceChildren(...d.map(P=>P.cloneNode(!0))),rt(e,E),R=E),h.replace(()=>Je(e,J,E,y?new Set(y.snapshots.keys()):void 0)),m.refresh(),H=O,F=E,Ue(e,E,C.parameters),O.page>1?C.parameters.set("page",String(O.page)):C.parameters.delete("page");let U=C.parameters.toString();history.replaceState(null,"",window.location.pathname+(U?`?${U}`:""));for(let P of e.querySelectorAll("button[data-archive-facet]")){let I=P.dataset.archiveFacet,X=P.dataset.archiveValue;P.setAttribute("aria-pressed",String(X?C.parameters.getAll(I).includes(X):!C.parameters.getAll(I).length))}for(let P of["year","month","day"])for(let I of document.querySelectorAll(`[data-timeline-nav] [data-${P}-filter-option]`))C.parameters.get(P)===I.getAttribute(`data-filter-${P}`)?I.setAttribute("aria-current","page"):I.removeAttribute("aria-current");nt(l,O.page,O.pages,O.count);let D=y?y.refreshFailed:!b;s.hidden=O.count!==0,c.textContent=D?y?W().refreshError||"Could not refresh articles. Your saved summaries are shown. Retry to continue.":c.dataset.refreshError||"Could not check for updates. Previously loaded entries remain available. Retry to check again.":"",C.limited&&(c.textContent+=(c.textContent?" ":"")+(c.dataset.selectionLimit||"Some filters were removed: choose up to 16 values per facet and 32 in total.")),f.hidden=!D,e.removeAttribute("aria-busy")}catch{w&&p===g&&(c.textContent=c.dataset.unavailable||"Entries could not be loaded.",f.hidden=!1,e.removeAttribute("aria-busy"),m.refresh())}finally{p===g&&(x=void 0)}}function j(q){if(!(q.target instanceof Element)||q.button!==0||q.metaKey||q.ctrlKey||q.shiftKey||q.altKey)return;let v=q.target.closest("[data-archive-visibility], [data-archive-facet], [data-year-filter-option], [data-month-filter-option], [data-day-filter-option], [data-archive-page], [data-archive-clear], [data-archive-retry]");if(!v||!e.contains(v)&&!v.closest("[data-timeline-nav]"))return;if(q.preventDefault(),v.hasAttribute("data-archive-retry")){k(!0);return}if(e.hasAttribute("aria-busy")&&v.hasAttribute("data-archive-page"))return;let p=new URL(window.location.href);if(v.dataset.archiveVisibility){if(!F)return;le(p.searchParams,v.dataset.archiveVisibility,F,v.dataset.archiveVisibilityFacet)}else if(v.hasAttribute("data-archive-clear"))p.search="";else if(v.dataset.archivePage){let A=v.dataset.archivePage,y=A==="next"?H.page+1:A==="prev"?H.page-1:Number(A);if(!Number.isSafeInteger(y))return;p.searchParams.set("page",String(Math.max(1,Math.min(H.pages,y))))}else if(p.searchParams.delete("page"),v.dataset.archiveFacet){let A=v.dataset.archiveFacet,y=v.dataset.archiveValue||"",E=new Set(p.searchParams.getAll(A));y?E.has(y)?E.delete(y):E.add(y):E.clear(),p.searchParams.delete(A),[...E].sort().forEach(C=>p.searchParams.append(A,C))}else{let A=v.hasAttribute("data-year-filter-option")?"year":v.hasAttribute("data-month-filter-option")?"month":"day",y=v.getAttribute(`data-filter-${A}`);for(let E of["year","month","day"])E!==A&&p.searchParams.delete(E);p.searchParams.get(A)===y?p.searchParams.delete(A):p.searchParams.set(A,y)}p.search!==window.location.search&&history.pushState(null,"",p.pathname+p.search),k()}let V=l.querySelector("[data-archive-page-jump]"),$=V.querySelector("input"),ee=()=>{$.setCustomValidity("")},Y=()=>{$.setCustomValidity((l.dataset.jumpError||"Enter a whole number from 1 to {pages}.").replace("{pages}",String(H.pages)))};function K(q){if(q.preventDefault(),e.hasAttribute("aria-busy"))return;let v=xe($.value);if(v===void 0||v>H.pages){Y(),$.reportValidity();return}let p=new URL(location.href);v===1?p.searchParams.delete("page"):p.searchParams.set("page",String(v)),p.search!==location.search&&history.pushState(null,"",p.pathname+p.search),k()}let z=()=>{u&&(x=void 0,k())},te=()=>{k()},re=q=>{q.persisted&&(x=void 0,k(!0))},N={signal:i.signal};window.addEventListener(Fe,z,N),V.addEventListener("submit",K,N),$.addEventListener("input",ee,N),$.addEventListener("invalid",Y,N),document.addEventListener("click",j,N),window.addEventListener("popstate",te,N),window.addEventListener("pageshow",re,N),k()})}function fe(e,n,t,r){let u=e.get(n)??"";return t.some(c=>c.dataset[r]===u)?u:""}function it(e){let n=new URLSearchParams(window.location.search),t=Array.from(document.querySelectorAll("[data-topic-filter-nav] [data-topic-filter-option]")),r=Array.from(document.querySelectorAll("[data-year-filter-option]")),u=Array.from(document.querySelectorAll("[data-month-filter-option]")),c=Array.from(document.querySelectorAll("[data-day-filter-option]")),f=fe(n,"topic",t,"topicAnchor"),s=fe(n,"day",c,"filterDay"),d=s?"":fe(n,"month",u,"filterMonth"),l=s||d?"":fe(n,"year",r,"filterYear");for(let i of t)i.dataset.topicAnchor===f?i.setAttribute("aria-current","page"):i.removeAttribute("aria-current");for(let i of r)l&&i.dataset.filterYear===l?i.setAttribute("aria-current","page"):i.removeAttribute("aria-current");for(let i of u)d&&i.dataset.filterMonth===d?i.setAttribute("aria-current","page"):i.removeAttribute("aria-current");for(let i of c)s&&i.dataset.filterDay===s?i.setAttribute("aria-current","page"):i.removeAttribute("aria-current");let a=Array.from(e.querySelectorAll("[data-filter-item]"));for(let i of a){let h=(i.dataset.topicAnchors??"").split(/\s+/).filter(Boolean),m=i.dataset.filterMonth??"";i.hidden=!!(f&&!h.includes(f)||l&&!m.startsWith(`${l}-`)||d&&m!==d||s&&i.dataset.filterDay!==s)}for(let i of e.querySelectorAll("[data-filter-group]"))i.hidden=!i.querySelector("[data-filter-item]:not([hidden])");let o=e.querySelector("[data-filter-empty]");o&&(o.hidden=a.some(i=>!i.hidden))}function dr(){return ne(e=>{Array.from(document.querySelectorAll("[data-paged-archive]")).forEach(s=>e(at(s)));let t=Array.from(document.querySelectorAll("[data-filter-page]:not([data-paged-archive])"));if(t.length===0)return;let r=t.map(s=>{it(s);let d=ue(s);return e(()=>d.dispose()),d}),u=()=>t.forEach((s,d)=>{it(s),r[d].refresh()}),c=s=>{let d=s.target;if(!(d instanceof Element))return;let l=d.closest("a[data-topic-filter-option], a[data-year-filter-option], a[data-month-filter-option], a[data-day-filter-option]");if(!l)return;let a=new URL(l.href,window.location.href);if(a.origin!==window.location.origin||a.pathname!==window.location.pathname)return;s.preventDefault();let o=new URL(window.location.href);if(o.pathname=a.pathname,l.hasAttribute("data-topic-filter-option")){let i=l.dataset.topicAnchor??"";i?o.searchParams.set("topic",i):o.searchParams.delete("topic")}else{let i=l.hasAttribute("data-year-filter-option")?"year":l.hasAttribute("data-month-filter-option")?"month":"day",h=l.getAttribute(`data-filter-${i}`)??"";l.getAttribute("aria-current")==="page"?o.searchParams.delete(i):o.searchParams.set(i,h);for(let m of["year","month","day"])m!==i&&o.searchParams.delete(m)}window.history.pushState(null,"",`${o.pathname}${o.search}`),u()},f=new AbortController;e(()=>f.abort()),document.addEventListener("click",c,{signal:f.signal}),window.addEventListener("popstate",u,{signal:f.signal}),window.addEventListener("pageshow",u,{signal:f.signal})})}export{dr as initialiseArchiveFilters};
@@ -1 +1 @@
1
- import{d as o}from"./chunks/chunk-KJTG2HC3.js";import"./chunks/chunk-PHKIAKHS.js";var e=new Map,a;globalThis.addEventListener("message",c=>{let{id:d,generation:n,total:u,size:l,query:i,bitmaps:m,mode:g,limit:p}=c.data;a!==n&&(e.clear(),a=n);for(let[t,r]of Object.entries(m))e.set(t,r);let s=Object.create(null);for(let t of[...i.groups.flat(),...i.excluded||[]]){let r=e.get(t);r&&(s[t]=r,e.delete(t),e.set(t,r))}for(;e.size>20;)e.delete(e.keys().next().value);globalThis.postMessage({id:d,...o(u,l,i,s,g,p)})});
1
+ import{d as o}from"./chunks/chunk-VKXRXXR2.js";import"./chunks/chunk-PHKIAKHS.js";var e=new Map,a;globalThis.addEventListener("message",c=>{let{id:d,generation:n,total:u,size:l,query:i,bitmaps:m,mode:g,limit:p}=c.data;a!==n&&(e.clear(),a=n);for(let[t,r]of Object.entries(m))e.set(t,r);let s=Object.create(null);for(let t of[...i.groups.flat(),...i.excluded||[]]){let r=e.get(t);r&&(s[t]=r,e.delete(t),e.set(t,r))}for(;e.size>20;)e.delete(e.keys().next().value);globalThis.postMessage({id:d,...o(u,l,i,s,g,p)})});
@@ -1 +1 @@
1
- import{a,b as u,c as f}from"./chunk-7AU45BWK.js";import{a as m}from"./chunk-NCOVM3YF.js";import{b as p}from"./chunk-UNVUNKH6.js";import"./chunk-HP75Y56I.js";import"./chunk-TSOLLCID.js";import{b as l}from"./chunk-6UFWKTSA.js";import"./chunk-ATQQWCXO.js";import"./chunk-TPW5CADB.js";import"./chunk-TMMWB6NQ.js";import"./chunk-TWGPYWIY.js";import"./chunk-76QEHT4T.js";import"./chunk-A7665WVC.js";import"./chunk-T3FZWEYV.js";import"./chunk-FBC3PYSO.js";import"./chunk-4W4OQ3QY.js";import"./chunk-RV7WQMNL.js";import"./chunk-WGMEMLED.js";import"./chunk-KNYDPLLK.js";import"./chunk-L465623K.js";import"./chunk-7KPU4VDE.js";import"./chunk-GTVNUHF4.js";import{b as s}from"./chunk-YM6ZMZQI.js";import"./chunk-5CCFYMCF.js";import{a as t}from"./chunk-EIBFAW37.js";import"./chunk-PHKIAKHS.js";var v=l().RailroadAbnf.parser.LangiumParser,i=t(e=>{let r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=t(e=>{let r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=t(e=>{if(e.includes("*")){let[n,o]=e.split("*"),c=n?parseInt(n,10):0,d=o?parseInt(o,10):1/0;return{min:c,max:d}}let r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=t(e=>{let r=A(e.primary);if(!e.repeat)return r;let{min:n,max:o}=b(e.repeat);return n===0&&o===1?{type:"optional",element:r}:{type:"repetition",element:r,min:n,max:o}},"transformElement"),A=t(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=t(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=t(e=>{m(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:t(e=>{a.clear(),s.debug("[ABNF Parser] Starting Langium parse");let r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new p(r);let n=r.value;s.debug("[ABNF Parser] Parsed rules:",n.rules.length),h(n),s.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},I={parser:R,db:a,renderer:f,styles:u};export{I as diagram};
1
+ import{a,b as u,c as f}from"./chunk-5XEDYYZJ.js";import{a as m}from"./chunk-O75OSL27.js";import{b as p}from"./chunk-7ISMYIZE.js";import"./chunk-AKHBD6LT.js";import"./chunk-U5STX66M.js";import{b as l}from"./chunk-HUVVDQHZ.js";import"./chunk-PJDMAGPE.js";import"./chunk-DN4Y7LXJ.js";import"./chunk-H4YEV7VR.js";import"./chunk-JZV675LF.js";import"./chunk-432I4U3B.js";import"./chunk-ONCOEVBS.js";import"./chunk-WKCPBR3C.js";import"./chunk-E2UQN267.js";import"./chunk-CZIM56BV.js";import"./chunk-6QRHYJ5Q.js";import"./chunk-GBARLDDT.js";import"./chunk-6RCFKBVR.js";import"./chunk-Z4ZDIMO2.js";import"./chunk-P22ZROBD.js";import"./chunk-DBRSI4MG.js";import{b as s}from"./chunk-SOZAPZJR.js";import"./chunk-ZEBLPTBM.js";import{a as t}from"./chunk-ZHA4UQ4O.js";import"./chunk-PHKIAKHS.js";var v=l().RailroadAbnf.parser.LangiumParser,i=t(e=>{let r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=t(e=>{let r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=t(e=>{if(e.includes("*")){let[n,o]=e.split("*"),c=n?parseInt(n,10):0,d=o?parseInt(o,10):1/0;return{min:c,max:d}}let r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=t(e=>{let r=A(e.primary);if(!e.repeat)return r;let{min:n,max:o}=b(e.repeat);return n===0&&o===1?{type:"optional",element:r}:{type:"repetition",element:r,min:n,max:o}},"transformElement"),A=t(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=t(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=t(e=>{m(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:t(e=>{a.clear(),s.debug("[ABNF Parser] Starting Langium parse");let r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new p(r);let n=r.value;s.debug("[ABNF Parser] Parsed rules:",n.rules.length),h(n),s.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},I={parser:R,db:a,renderer:f,styles:u};export{I as diagram};
@@ -0,0 +1 @@
1
+ import{a as e,b as r}from"./chunk-CZIM56BV.js";import"./chunk-Z4ZDIMO2.js";import"./chunk-PHKIAKHS.js";export{e as ArchitectureModule,r as createArchitectureServices};