wiki-viewer 1.9.1 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +3 -0
  3. package/.next/standalone/.next/build-manifest.json +5 -5
  4. package/.next/standalone/.next/routes-manifest.json +22 -0
  5. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
  6. package/.next/standalone/.next/server/app/_global-error/page.js +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
  16. package/.next/standalone/.next/server/app/_not-found/page/next-font-manifest.json +7 -1
  17. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  18. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  22. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  23. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/.next/standalone/.next/server/app/api/agent/activity/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/agent/admin/agents/[agentId]/revoke/route.js +1 -1
  30. package/.next/standalone/.next/server/app/api/agent/admin/agents/[agentId]/revoke/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/agent/admin/agents/route.js +1 -1
  32. package/.next/standalone/.next/server/app/api/agent/admin/agents/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/agent/events/[...path]/route.js +3 -4
  34. package/.next/standalone/.next/server/app/api/agent/events/[...path]/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/agent/files/[...path]/route.js +10 -11
  36. package/.next/standalone/.next/server/app/api/agent/files/[...path]/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/agent/fs/file/[...path]/route.js +4 -5
  38. package/.next/standalone/.next/server/app/api/agent/fs/file/[...path]/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/agent/fs/ls/[[...path]]/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/agent/fs/move/route.js +3 -4
  41. package/.next/standalone/.next/server/app/api/agent/fs/move/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/agent/fs/search/route.js +1 -1
  43. package/.next/standalone/.next/server/app/api/agent/fs/search/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/agent/internal/span/route.js +3 -4
  45. package/.next/standalone/.next/server/app/api/agent/internal/span/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/agent/settings/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/agent/sidecar/[...path]/route.js +3 -4
  48. package/.next/standalone/.next/server/app/api/agent/sidecar/[...path]/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/app-proxy/[...path]/route.js +1 -1
  50. package/.next/standalone/.next/server/app/api/app-proxy/[...path]/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/assets/[...path]/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/auth/[...all]/route.js +1 -1
  53. package/.next/standalone/.next/server/app/api/auth/[...all]/route.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/api/share/[token]/route/app-paths-manifest.json +3 -0
  55. package/.next/standalone/.next/server/app/api/share/[token]/route/build-manifest.json +9 -0
  56. package/.next/standalone/.next/server/app/api/share/[token]/route/server-reference-manifest.json +4 -0
  57. package/.next/standalone/.next/server/app/api/share/[token]/route.js +14 -0
  58. package/.next/standalone/.next/server/app/api/share/[token]/route.js.map +5 -0
  59. package/.next/standalone/.next/server/app/api/share/[token]/route.js.nft.json +1 -0
  60. package/.next/standalone/.next/server/app/api/share/[token]/route_client-reference-manifest.js +3 -0
  61. package/.next/standalone/.next/server/app/api/share/route/app-paths-manifest.json +3 -0
  62. package/.next/standalone/.next/server/app/api/share/route/build-manifest.json +9 -0
  63. package/.next/standalone/.next/server/app/api/share/route/server-reference-manifest.json +4 -0
  64. package/.next/standalone/.next/server/app/api/share/route.js +14 -0
  65. package/.next/standalone/.next/server/app/api/share/route.js.map +5 -0
  66. package/.next/standalone/.next/server/app/api/share/route.js.nft.json +1 -0
  67. package/.next/standalone/.next/server/app/api/share/route_client-reference-manifest.js +3 -0
  68. package/.next/standalone/.next/server/app/api/system/browse/route.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/api/system/clear-root/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/system/reveal/route.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/api/system/root-status/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/system/set-root/route.js +2 -2
  73. package/.next/standalone/.next/server/app/api/system/set-root/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/open/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/system/workspaces/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/api/upload/[...path]/route.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/api/wiki/app/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/wiki/content/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/wiki/download/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/wiki/file/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/wiki/folder/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/wiki/move/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/wiki/new-file/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/wiki/page/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/wiki/presence/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/wiki/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/wiki/search/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/wiki/slugs/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/wiki/upload/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/wiki/watch/route.js +1 -1
  92. package/.next/standalone/.next/server/app/api/wiki/watch/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/index.html +1 -1
  94. package/.next/standalone/.next/server/app/index.rsc +9 -3
  95. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  96. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +9 -3
  97. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  98. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  99. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +8 -2
  100. package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
  101. package/.next/standalone/.next/server/app/page/next-font-manifest.json +7 -1
  102. package/.next/standalone/.next/server/app/page.js +2 -2
  103. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/s/[token]/page/app-paths-manifest.json +3 -0
  106. package/.next/standalone/.next/server/app/s/[token]/page/build-manifest.json +16 -0
  107. package/.next/standalone/.next/server/app/s/[token]/page/next-font-manifest.json +16 -0
  108. package/.next/standalone/.next/server/app/s/[token]/page/react-loadable-manifest.json +1 -0
  109. package/.next/standalone/.next/server/app/s/[token]/page/server-reference-manifest.json +4 -0
  110. package/.next/standalone/.next/server/app/s/[token]/page.js +14 -0
  111. package/.next/standalone/.next/server/app/s/[token]/page.js.map +5 -0
  112. package/.next/standalone/.next/server/app/s/[token]/page.js.nft.json +1 -0
  113. package/.next/standalone/.next/server/app/s/[token]/page_client-reference-manifest.js +3 -0
  114. package/.next/standalone/.next/server/app/signin/page/build-manifest.json +2 -2
  115. package/.next/standalone/.next/server/app/signin/page/next-font-manifest.json +7 -1
  116. package/.next/standalone/.next/server/app/signin/page.js +3 -3
  117. package/.next/standalone/.next/server/app/signin/page.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app-paths-manifest.json +3 -0
  120. package/.next/standalone/.next/server/chunks/0dti_kysely_dist_esm_0u.fq2l._.js +1 -1
  121. package/.next/standalone/.next/server/chunks/0p91_next_dist_esm_build_templates_app-route_0d2jbo5.js +1 -1
  122. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01hp8ax._.js +1 -1
  123. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02scxiu._.js +3 -0
  124. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07nnfjx._.js +16 -0
  125. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__12q8ch8._.js → [root-of-the-server]__08n~vj1._.js} +2 -2
  126. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09s9qkd._.js +1 -1
  127. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__12ee_s6._.js → [root-of-the-server]__0bfl4v7._.js} +2 -2
  128. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l-8clq._.js +1 -1
  129. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0n3i3vu._.js +16 -0
  130. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ncjv3e._.js +3 -0
  131. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0s8ovh5._.js +3 -0
  132. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0~.-3yk._.js → [root-of-the-server]__0x3m4up._.js} +2 -2
  133. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0yzle76._.js +20 -0
  134. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0z.pwwj._.js +20 -0
  135. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zgb.q2._.js +3 -0
  136. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__00qu86p._.js → [root-of-the-server]__0zq0rlw._.js} +2 -2
  137. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0-inabx._.js → [root-of-the-server]__12y5z5j._.js} +2 -2
  138. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_share_[token]_route_actions_0~m-o26.js +3 -0
  139. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_share_route_actions_0gz4h.j.js +3 -0
  140. package/.next/standalone/.next/server/chunks/node_modules__pnpm_0aj5g-w._.js +1 -1
  141. package/.next/standalone/.next/server/chunks/src_lib_auth_admin_ts_0g4i6v_._.js +3 -0
  142. package/.next/standalone/.next/server/chunks/ssr/08s9_dagre-d3-es_src_dagre_index_0iwjukf.js +1 -1
  143. package/.next/standalone/.next/server/chunks/ssr/0p91_next_dist_esm_build_templates_app-page_0p1dt3f.js +4 -0
  144. package/.next/standalone/.next/server/chunks/ssr/{0~w0_katex_dist_katex_mjs_0hyln.b._.js → 0~w0_katex_dist_katex_mjs_03n1kec._.js} +1 -1
  145. package/.next/standalone/.next/server/chunks/ssr/12y~_mermaid_dist_chunks_mermaid_core_chunk-5ZQYHXKU_mjs_0z1.978._.js +1 -1
  146. package/.next/standalone/.next/server/chunks/ssr/12y~_mermaid_dist_chunks_mermaid_core_chunk-KSCS5N6A_mjs_0v4oeem._.js +1 -1
  147. package/.next/standalone/.next/server/chunks/ssr/12y~_mermaid_dist_chunks_mermaid_core_diagram-OG6HWLK6_mjs_0t5sus6._.js +1 -1
  148. package/.next/standalone/.next/server/chunks/ssr/12y~_mermaid_dist_chunks_mermaid_core_erDiagram-TEJ5UH35_mjs_0v6rnqy._.js +1 -1
  149. package/.next/standalone/.next/server/chunks/ssr/12y~_mermaid_dist_chunks_mermaid_core_sankeyDiagram-5OEKKPKP_mjs_11ifrnu._.js +1 -1
  150. package/.next/standalone/.next/server/chunks/ssr/12y~_mermaid_dist_mermaid_core_mjs_0hj_n-~._.js +1 -1
  151. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__02twzph._.js → [root-of-the-server]__00_67m6._.js} +2 -2
  152. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__00lk0r~._.js → [root-of-the-server]__06mzg2t._.js} +2 -2
  153. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0du58sw._.js → [root-of-the-server]__0lh.8ub._.js} +2 -2
  154. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0oh...2._.js +3 -0
  155. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0osa2xb._.js +3 -0
  156. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0txwwn-._.js +3 -0
  157. package/.next/standalone/.next/server/chunks/ssr/_0wmhtx3._.js +3 -0
  158. package/.next/standalone/.next/server/chunks/ssr/_0yevh-d._.js +115 -0
  159. package/.next/standalone/.next/server/chunks/ssr/_0~a9dyk._.js +115 -0
  160. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_s_[token]_page_actions_0bubzp7.js +3 -0
  161. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0iikbcy._.js → node_modules__pnpm_0-ljbo6._.js} +1 -1
  162. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_03z3na-._.js → node_modules__pnpm_0.b51bz._.js} +1 -1
  163. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0qd2ovj._.js → node_modules__pnpm_02z1q6x._.js} +2 -2
  164. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0elpfsb._.js → node_modules__pnpm_06rujwe._.js} +2 -2
  165. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0b5fla7._.js → node_modules__pnpm_07~ezvd._.js} +2 -2
  166. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_03.1jli._.js → node_modules__pnpm_0annbkv._.js} +1 -1
  167. package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_0aq-myi._.js +1 -1
  168. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_00y7foi._.js → node_modules__pnpm_0db-578._.js} +2 -2
  169. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0s4yn43._.js → node_modules__pnpm_0e-h_5v._.js} +1 -1
  170. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0arbjru._.js → node_modules__pnpm_0efhg__._.js} +1 -1
  171. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_09eo8jh._.js → node_modules__pnpm_0fdgk8l._.js} +2 -2
  172. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0d~ida~._.js → node_modules__pnpm_0fy2khf._.js} +1 -1
  173. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0s8fvbn._.js → node_modules__pnpm_0ge9-p_._.js} +1 -1
  174. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0dbr7c2._.js → node_modules__pnpm_0h0n.h9._.js} +1 -1
  175. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0fh.6ir._.js → node_modules__pnpm_0k48w96._.js} +2 -2
  176. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0.~goq~._.js → node_modules__pnpm_0k8t~gn._.js} +2 -2
  177. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0mvih7b._.js → node_modules__pnpm_0kx2gj~._.js} +2 -2
  178. package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_0lzb-n~._.js +1 -1
  179. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0fm6wcx._.js → node_modules__pnpm_0m2aya9._.js} +1 -1
  180. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_05~w-ok._.js → node_modules__pnpm_0rhh2ug._.js} +1 -1
  181. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0beormu._.js → node_modules__pnpm_0s7.cqo._.js} +2 -2
  182. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0adm8h6._.js → node_modules__pnpm_0u2s0ie._.js} +1 -1
  183. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_09d5yyu._.js → node_modules__pnpm_0uhtpu4._.js} +1 -1
  184. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0tq8zs6._.js → node_modules__pnpm_0vn52ck._.js} +1 -1
  185. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0c7u76a._.js → node_modules__pnpm_0z_-o7y._.js} +2 -2
  186. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0xa.ko1._.js → node_modules__pnpm_11li7t8._.js} +1 -1
  187. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0.kyqfq._.js → node_modules__pnpm_12ggywb._.js} +1 -1
  188. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0vyv.lz._.js → node_modules__pnpm_12ohbxv._.js} +1 -1
  189. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_12.ymhl._.js → node_modules__pnpm_12yj7m8._.js} +1 -1
  190. package/.next/standalone/.next/server/chunks/ssr/src_app_page_tsx_0ss2.w7._.js +19 -0
  191. package/.next/standalone/.next/server/edge/chunks/0p91_next_dist_0nh.6nc._.js +1 -1
  192. package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
  193. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  194. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  195. package/.next/standalone/.next/server/next-font-manifest.json +30 -3
  196. package/.next/standalone/.next/server/pages/404.html +1 -1
  197. package/.next/standalone/.next/server/pages/500.html +1 -1
  198. package/.next/standalone/.next/static/chunks/02c9264uigqjd.js +1 -0
  199. package/.next/standalone/.next/static/chunks/03zepg.10g9nk.js +21 -0
  200. package/.next/standalone/.next/static/chunks/08~wl1f9eyv70.css +5 -0
  201. package/.next/standalone/.next/static/chunks/0cre2g95gqnc_.js +1 -0
  202. package/.next/standalone/.next/static/chunks/0dhnx18v._gaq.js +113 -0
  203. package/.next/standalone/.next/static/chunks/{144e01xuvhx~x.js → 0g5dv59skfo1z.js} +1 -1
  204. package/.next/standalone/.next/static/chunks/{14n5cp8rr-k_b.js → 0qiz7kkyaxa93.js} +1 -1
  205. package/.next/standalone/.next/static/chunks/0vhw1us0pjfdy.js +1 -0
  206. package/.next/standalone/.next/static/chunks/{06iw_iy5e90d4.js → 0vp-ahhagxptc.js} +1 -1
  207. package/.next/standalone/.next/static/chunks/{0b84.439zffwm.js → 0yhis._5rr6tc.js} +1 -1
  208. package/.next/standalone/.next/static/chunks/0z1s6bzchqtx3.js +17 -0
  209. package/.next/standalone/.next/static/chunks/139g2hzko-flp.js +1 -0
  210. package/.next/standalone/.next/static/chunks/141sj6_6_3ryx.js +113 -0
  211. package/.next/standalone/.next/static/chunks/{turbopack-0lf4~b-ofzbm6.js → turbopack-12~z-mr7b9b50.js} +1 -1
  212. package/.next/standalone/.next/static/media/02263ebadd758ea4-s.0qg7j5o.yrclm.woff2 +0 -0
  213. package/.next/standalone/.next/static/media/0ada71b763703d9d-s.03kpp5fbi.88j.woff2 +0 -0
  214. package/.next/standalone/.next/static/media/167cd0713aa75522-s.0j1f760ks3~7e.woff2 +0 -0
  215. package/.next/standalone/.next/static/media/1a69062cfe6f77f8-s.07r2ragk8ph~z.woff2 +0 -0
  216. package/.next/standalone/.next/static/media/23b7a97ae3b5c134-s.p.0o14nraug8u5s.woff2 +0 -0
  217. package/.next/standalone/.next/static/media/2b7d3311b69a4dca-s.p.0g6adshk-wxa_.woff2 +0 -0
  218. package/.next/standalone/.next/static/media/2e95a7d252b9825a-s.0dgq8lqrj3gc_.woff2 +0 -0
  219. package/.next/standalone/.next/static/media/2fe89d53234c61d4-s.0k_.i63k_i_qa.woff2 +0 -0
  220. package/.next/standalone/.next/static/media/59b15b4bcd7b1eb5-s.0x08jh8vondwt.woff2 +0 -0
  221. package/.next/standalone/.next/static/media/5e05ae5b48faa55e-s.0m9hhkgdlzukj.woff2 +0 -0
  222. package/.next/standalone/.next/static/media/6632a144c419935f-s.02msn089-soa4.woff2 +0 -0
  223. package/.next/standalone/.next/static/media/68757d6cddeff913-s.0hkrq11n-dhos.woff2 +0 -0
  224. package/.next/standalone/.next/static/media/6ff74e33ebd7bca3-s.0_n_qwbzcushi.woff2 +0 -0
  225. package/.next/standalone/.next/static/media/791bf8c4bb753ed6-s.p.0524igg32t-c1.woff2 +0 -0
  226. package/.next/standalone/.next/static/media/7b27d9904b50e540-s.13-bl75dp544c.woff2 +0 -0
  227. package/.next/standalone/.next/static/media/99e609270109b47d-s.p.16-z~2sp29ex6.woff2 +0 -0
  228. package/.next/standalone/.next/static/media/9a4838fcda0d1bca-s.0787d67~10694.woff2 +0 -0
  229. package/.next/standalone/.next/static/media/a7afbb44bec2bb18-s.0juuwbcf7uz~t.woff2 +0 -0
  230. package/.next/standalone/.next/static/media/ca8956476e4b15e1-s.08wnys.spqmz-.woff2 +0 -0
  231. package/.next/standalone/.next/static/media/d38f3bca7db33566-s.p.07n94j49quulv.woff2 +0 -0
  232. package/.next/standalone/.next/static/media/e390973e931a41c5-s.08hd0g.321csk.woff2 +0 -0
  233. package/.next/standalone/.next/static/media/e455bcff747f0d5e-s.0lukgm0wyhr0a.woff2 +0 -0
  234. package/.next/standalone/.next/static/media/e532fa1b9921e1cd-s.0~wrfy7sm-h4g.woff2 +0 -0
  235. package/.next/standalone/.next/static/media/effe91970fc4db64-s.p.07ig5l8azj~hy.woff2 +0 -0
  236. package/.next/standalone/docs/editorial-skin-spec.md +242 -0
  237. package/.next/standalone/package.json +1 -1
  238. package/.next/standalone/src/app/api/share/[token]/route.ts +269 -0
  239. package/.next/standalone/src/app/api/share/route.ts +127 -0
  240. package/.next/standalone/src/app/api/system/workspaces/route.ts +9 -0
  241. package/.next/standalone/src/app/globals.css +470 -56
  242. package/.next/standalone/src/app/layout.tsx +29 -2
  243. package/.next/standalone/src/app/page.tsx +162 -19
  244. package/.next/standalone/src/app/s/[token]/page.tsx +357 -0
  245. package/.next/standalone/src/components/ai-panel/ai-panel.tsx +1 -1
  246. package/.next/standalone/src/components/auth-settings-sheet.tsx +38 -1
  247. package/.next/standalone/src/components/editor/csv-viewer.tsx +46 -3
  248. package/.next/standalone/src/components/editor/editor.tsx +14 -6
  249. package/.next/standalone/src/components/editor/large-file-gate.tsx +108 -0
  250. package/.next/standalone/src/components/editor/office/xlsx-viewer.tsx +83 -8
  251. package/.next/standalone/src/components/editor/slash-commands.tsx +2 -2
  252. package/.next/standalone/src/components/editor/source-viewer.tsx +67 -18
  253. package/.next/standalone/src/components/share-dialog.tsx +307 -0
  254. package/.next/standalone/src/components/ui/dialog.tsx +1 -1
  255. package/.next/standalone/src/components/ui/sheet.tsx +1 -1
  256. package/.next/standalone/src/components/ui/switch.tsx +1 -1
  257. package/.next/standalone/src/components/view-width-toggle.tsx +23 -0
  258. package/.next/standalone/src/lib/shared-docs/db.ts +177 -0
  259. package/.next/standalone/src/middleware.ts +1 -0
  260. package/.next/standalone/src/stores/sidebar-width-store.ts +39 -0
  261. package/.next/standalone/src/stores/skin-store.ts +42 -0
  262. package/.next/standalone/src/stores/view-width-store.ts +43 -4
  263. package/.next/standalone/tailwind.config.ts +11 -21
  264. package/.next/standalone/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +1 -1
  266. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-244bv._.js +0 -16
  267. package/.next/standalone/.next/server/chunks/[root-of-the-server]__012753j._.js +0 -3
  268. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03p0ob1._.js +0 -16
  269. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gda_iu._.js +0 -3
  270. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jk1uf4._.js +0 -3
  271. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nd.b_c._.js +0 -3
  272. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13aid91._.js +0 -3
  273. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hvvps3._.js +0 -3
  274. package/.next/standalone/.next/server/chunks/ssr/_0pqaawz._.js +0 -131
  275. package/.next/standalone/.next/static/chunks/09-jtayuhrq~b.js +0 -1
  276. package/.next/standalone/.next/static/chunks/0vp2gi~fq70je.js +0 -21
  277. package/.next/standalone/.next/static/chunks/125_k3o0s4cid.js +0 -129
  278. package/.next/standalone/.next/static/chunks/135c~rq_ux73w.js +0 -1
  279. package/.next/standalone/.next/static/chunks/167ph4xws_-61.css +0 -2
  280. /package/.next/standalone/.next/static/{NN8w2BNeE9aJeGzUsWJ8G → GCGec_I7i0LnI4YpnaeMc}/_buildManifest.js +0 -0
  281. /package/.next/standalone/.next/static/{NN8w2BNeE9aJeGzUsWJ8G → GCGec_I7i0LnI4YpnaeMc}/_clientMiddlewareManifest.js +0 -0
  282. /package/.next/standalone/.next/static/{NN8w2BNeE9aJeGzUsWJ8G → GCGec_I7i0LnI4YpnaeMc}/_ssgManifest.js +0 -0
@@ -17,7 +17,7 @@ const DialogOverlay = React.forwardRef<
17
17
  <DialogPrimitive.Overlay
18
18
  ref={ref}
19
19
  className={cn(
20
- "fixed inset-0 z-40 bg-[#0c0a09]/40 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
20
+ "fixed inset-0 z-40 bg-overlay backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
21
21
  className,
22
22
  )}
23
23
  {...props}
@@ -17,7 +17,7 @@ const SheetOverlay = React.forwardRef<
17
17
  <DialogPrimitive.Overlay
18
18
  ref={ref}
19
19
  className={cn(
20
- "fixed inset-0 z-40 bg-black/40 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
20
+ "fixed inset-0 z-40 bg-overlay backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
21
21
  className,
22
22
  )}
23
23
  {...props}
@@ -12,7 +12,7 @@ function Switch({
12
12
  <SwitchPrimitive.Root
13
13
  data-slot="switch"
14
14
  className={cn(
15
- "peer data-[state=checked]:bg-accent data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 items-center rounded-sm border-2 border-transparent shadow-e-1 transition-all outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer",
15
+ "peer data-[state=checked]:bg-[var(--switch-checked)] data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 items-center rounded-sm border-2 border-transparent shadow-e-1 transition-all outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer",
16
16
  className,
17
17
  )}
18
18
  {...props}
@@ -6,17 +6,23 @@ import {
6
6
  DropdownMenu,
7
7
  DropdownMenuContent,
8
8
  DropdownMenuItem,
9
+ DropdownMenuLabel,
10
+ DropdownMenuSeparator,
9
11
  DropdownMenuTrigger,
10
12
  } from "@/components/ui/dropdown-menu";
11
13
  import {
12
14
  useViewWidthStore,
13
15
  VIEW_WIDTH_LABEL,
14
16
  VIEW_WIDTH_ORDER,
17
+ VIEW_ALIGN_LABEL,
18
+ VIEW_ALIGN_ORDER,
15
19
  } from "@/stores/view-width-store";
16
20
 
17
21
  export function ViewWidthToggle({ className }: { className?: string }) {
18
22
  const width = useViewWidthStore((s) => s.width);
19
23
  const setWidth = useViewWidthStore((s) => s.setWidth);
24
+ const align = useViewWidthStore((s) => s.align);
25
+ const setAlign = useViewWidthStore((s) => s.setAlign);
20
26
 
21
27
  return (
22
28
  <DropdownMenu>
@@ -31,6 +37,9 @@ export function ViewWidthToggle({ className }: { className?: string }) {
31
37
  </Button>
32
38
  </DropdownMenuTrigger>
33
39
  <DropdownMenuContent align="end" className="w-36">
40
+ <DropdownMenuLabel className="text-[11px] text-muted-foreground">
41
+ Width
42
+ </DropdownMenuLabel>
34
43
  {VIEW_WIDTH_ORDER.map((w) => (
35
44
  <DropdownMenuItem
36
45
  key={w}
@@ -41,6 +50,20 @@ export function ViewWidthToggle({ className }: { className?: string }) {
41
50
  {w === width && <Check className="h-3.5 w-3.5" />}
42
51
  </DropdownMenuItem>
43
52
  ))}
53
+ <DropdownMenuSeparator />
54
+ <DropdownMenuLabel className="text-[11px] text-muted-foreground">
55
+ Alignment
56
+ </DropdownMenuLabel>
57
+ {VIEW_ALIGN_ORDER.map((a) => (
58
+ <DropdownMenuItem
59
+ key={a}
60
+ onClick={() => setAlign(a)}
61
+ className="flex items-center justify-between text-xs"
62
+ >
63
+ {VIEW_ALIGN_LABEL[a]}
64
+ {a === align && <Check className="h-3.5 w-3.5" />}
65
+ </DropdownMenuItem>
66
+ ))}
44
67
  </DropdownMenuContent>
45
68
  </DropdownMenu>
46
69
  );
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Shared docs DB — stores share links for public read-only access.
3
+ *
4
+ * Each share link references a (workspaceId, filePath) pair. The link
5
+ * can optionally be password-protected and/or time-limited.
6
+ *
7
+ * DB: ~/.wiki-viewer/shared.db (WAL mode, separate from auth.db and search.db).
8
+ */
9
+ import Database from "better-sqlite3";
10
+ import path from "node:path";
11
+ import os from "node:os";
12
+ import { mkdirSync } from "node:fs";
13
+ import { randomBytes, scryptSync, timingSafeEqual } from "node:crypto";
14
+
15
+ export interface SharedDoc {
16
+ id: string;
17
+ workspaceId: string;
18
+ filePath: string;
19
+ token: string;
20
+ passwordHash: string | null;
21
+ expiresAt: string | null;
22
+ createdBy: string;
23
+ createdAt: string;
24
+ viewCount: number;
25
+ isRevoked: boolean;
26
+ }
27
+
28
+ export interface CreateSharedDocInput {
29
+ workspaceId: string;
30
+ filePath: string;
31
+ password?: string;
32
+ expiresAt?: string; // ISO date string, e.g. "2026-07-10T00:00:00Z"
33
+ createdBy: string;
34
+ }
35
+
36
+ function dataDir(): string {
37
+ return path.join(process.env.HOME ?? os.homedir(), ".wiki-viewer");
38
+ }
39
+
40
+ let _db: InstanceType<typeof Database> | null = null;
41
+
42
+ function getDb(): InstanceType<typeof Database> {
43
+ if (_db) return _db;
44
+ const dir = dataDir();
45
+ mkdirSync(dir, { recursive: true });
46
+ _db = new Database(path.join(dir, "shared.db"));
47
+ _db.pragma("journal_mode = WAL");
48
+ _db.pragma("synchronous = NORMAL");
49
+ _db.exec(`
50
+ CREATE TABLE IF NOT EXISTS shared_docs (
51
+ id TEXT PRIMARY KEY,
52
+ workspace_id TEXT NOT NULL,
53
+ file_path TEXT NOT NULL,
54
+ token TEXT NOT NULL UNIQUE,
55
+ password_hash TEXT,
56
+ expires_at TEXT,
57
+ created_by TEXT NOT NULL,
58
+ created_at TEXT NOT NULL,
59
+ view_count INTEGER NOT NULL DEFAULT 0,
60
+ is_revoked INTEGER NOT NULL DEFAULT 0
61
+ );
62
+ CREATE INDEX IF NOT EXISTS shared_docs_token_idx ON shared_docs(token);
63
+ CREATE INDEX IF NOT EXISTS shared_docs_file_idx ON shared_docs(workspace_id, file_path);
64
+ `);
65
+ return _db;
66
+ }
67
+
68
+ export function createShare(input: CreateSharedDocInput): SharedDoc {
69
+ const db = getDb();
70
+ const id = "shr_" + randomBytes(8).toString("base64url");
71
+ const token = randomBytes(16).toString("base64url");
72
+ const passwordHash = input.password ? hashPassword(input.password) : null;
73
+
74
+ const shared: SharedDoc = {
75
+ id,
76
+ workspaceId: input.workspaceId,
77
+ filePath: input.filePath,
78
+ token,
79
+ passwordHash,
80
+ expiresAt: input.expiresAt ?? null,
81
+ createdBy: input.createdBy,
82
+ createdAt: new Date().toISOString(),
83
+ viewCount: 0,
84
+ isRevoked: false,
85
+ };
86
+
87
+ const dbValues = {
88
+ ...shared,
89
+ isRevoked: shared.isRevoked ? 1 : 0,
90
+ };
91
+
92
+ db.prepare(
93
+ `INSERT INTO shared_docs
94
+ (id, workspace_id, file_path, token, password_hash, expires_at, created_by, created_at, view_count, is_revoked)
95
+ VALUES (@id, @workspaceId, @filePath, @token, @passwordHash, @expiresAt, @createdBy, @createdAt, @viewCount, @isRevoked)`,
96
+ ).run(dbValues);
97
+ return shared;
98
+ }
99
+
100
+ type DbRow = Record<string, unknown>;
101
+
102
+ function rowToShare(row: DbRow): SharedDoc {
103
+ return {
104
+ id: row.id as string,
105
+ workspaceId: row.workspace_id as string,
106
+ filePath: row.file_path as string,
107
+ token: row.token as string,
108
+ passwordHash: (row.password_hash as string | null) ?? null,
109
+ expiresAt: (row.expires_at as string | null) ?? null,
110
+ createdBy: row.created_by as string,
111
+ createdAt: row.created_at as string,
112
+ viewCount: (row.view_count as number) ?? 0,
113
+ isRevoked: (row.is_revoked as number) === 1,
114
+ };
115
+ }
116
+
117
+ export function getShareByToken(token: string): SharedDoc | null {
118
+ const db = getDb();
119
+ const row = db.prepare("SELECT * FROM shared_docs WHERE token = ?").get(token) as
120
+ | DbRow
121
+ | undefined;
122
+ return row ? rowToShare(row) : null;
123
+ }
124
+
125
+ export function listSharesForFile(
126
+ workspaceId: string,
127
+ filePath: string,
128
+ ): SharedDoc[] {
129
+ const db = getDb();
130
+ const rows = db
131
+ .prepare(
132
+ "SELECT * FROM shared_docs WHERE workspace_id = ? AND file_path = ? AND is_revoked = 0 ORDER BY created_at DESC",
133
+ )
134
+ .all(workspaceId, filePath) as DbRow[];
135
+ return rows.map(rowToShare);
136
+ }
137
+
138
+ export function revokeShare(id: string): void {
139
+ const db = getDb();
140
+ db.prepare("UPDATE shared_docs SET is_revoked = 1 WHERE id = ?").run(id);
141
+ }
142
+
143
+ export function incrementViewCount(token: string): void {
144
+ const db = getDb();
145
+ db.prepare(
146
+ "UPDATE shared_docs SET view_count = view_count + 1 WHERE token = ?",
147
+ ).run(token);
148
+ }
149
+
150
+ export function isExpired(share: SharedDoc): boolean {
151
+ if (!share.expiresAt) return false;
152
+ return new Date(share.expiresAt) < new Date();
153
+ }
154
+
155
+ function hashPassword(password: string): string {
156
+ const salt = randomBytes(16).toString("hex");
157
+ const hash = scryptSync(password, salt, 64).toString("hex");
158
+ return `${salt}:${hash}`;
159
+ }
160
+
161
+ export function verifyPassword(password: string, stored: string): boolean {
162
+ const [salt, hash] = stored.split(":");
163
+ const expected = scryptSync(password, salt, 64);
164
+ const actual = Buffer.from(hash, "hex");
165
+ if (expected.length !== actual.length) return false;
166
+ return timingSafeEqual(expected, actual);
167
+ }
168
+
169
+ /** Reset cached DB handle (used by tests). */
170
+ export function _resetSharedDb(): void {
171
+ try {
172
+ _db?.close();
173
+ } catch {
174
+ /* ignore */
175
+ }
176
+ _db = null;
177
+ }
@@ -6,6 +6,7 @@ import { NextResponse, type NextRequest } from "next/server";
6
6
  const PASSTHROUGH_PREFIXES = [
7
7
  "/signin",
8
8
  "/api/", // ALL API routes self-gate; middleware never redirects API
9
+ "/s/", // Public shared doc pages (auth handled by the page/api)
9
10
  "/_next",
10
11
  "/icon.svg",
11
12
  "/favicon.ico",
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { create } from "zustand";
3
+
4
+ const STORAGE_KEY = "wiki-sidebar-width";
5
+
6
+ export const SIDEBAR_MIN_WIDTH = 200;
7
+ export const SIDEBAR_MAX_WIDTH = 600;
8
+ export const SIDEBAR_DEFAULT_WIDTH = 288; // matches former w-72 (18rem)
9
+
10
+ function clamp(w: number): number {
11
+ if (Number.isNaN(w)) return SIDEBAR_DEFAULT_WIDTH;
12
+ return Math.min(SIDEBAR_MAX_WIDTH, Math.max(SIDEBAR_MIN_WIDTH, Math.round(w)));
13
+ }
14
+
15
+ function loadInitial(): number {
16
+ if (typeof window === "undefined") return SIDEBAR_DEFAULT_WIDTH;
17
+ const saved = localStorage.getItem(STORAGE_KEY);
18
+ if (saved) {
19
+ const n = Number.parseInt(saved, 10);
20
+ if (!Number.isNaN(n)) return clamp(n);
21
+ }
22
+ return SIDEBAR_DEFAULT_WIDTH;
23
+ }
24
+
25
+ interface SidebarWidthState {
26
+ width: number;
27
+ setWidth: (width: number) => void;
28
+ }
29
+
30
+ export const useSidebarWidthStore = create<SidebarWidthState>((set) => ({
31
+ width: loadInitial(),
32
+ setWidth: (width) => {
33
+ const w = clamp(width);
34
+ if (typeof window !== "undefined") {
35
+ localStorage.setItem(STORAGE_KEY, String(w));
36
+ }
37
+ set({ width: w });
38
+ },
39
+ }));
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { create } from "zustand";
3
+
4
+ export type Skin = "default" | "editorial";
5
+
6
+ const STORAGE_KEY = "wiki-skin";
7
+
8
+ export const SKIN_LABEL: Record<Skin, string> = {
9
+ default: "Default",
10
+ editorial: "Editorial",
11
+ };
12
+
13
+ export const SKIN_ORDER: Skin[] = ["default", "editorial"];
14
+
15
+ function loadInitial(): Skin {
16
+ // Read from the attribute already set by the no-flash script (avoids hydration mismatch).
17
+ if (typeof window === "undefined") return "default";
18
+ const attr = document.documentElement.dataset.skin;
19
+ if (attr === "editorial") return "editorial";
20
+ return "default";
21
+ }
22
+
23
+ interface SkinState {
24
+ skin: Skin;
25
+ setSkin: (skin: Skin) => void;
26
+ }
27
+
28
+ export const useSkinStore = create<SkinState>((set) => ({
29
+ skin: loadInitial(),
30
+ setSkin: (skin) => {
31
+ if (typeof window !== "undefined") {
32
+ if (skin === "editorial") {
33
+ document.documentElement.setAttribute("data-skin", "editorial");
34
+ localStorage.setItem(STORAGE_KEY, "editorial");
35
+ } else {
36
+ document.documentElement.removeAttribute("data-skin");
37
+ localStorage.removeItem(STORAGE_KEY);
38
+ }
39
+ }
40
+ set({ skin });
41
+ },
42
+ }));
@@ -2,21 +2,23 @@
2
2
  import { create } from "zustand";
3
3
 
4
4
  export type ViewWidth = "narrow" | "normal" | "wide";
5
+ export type ViewAlign = "center" | "left";
5
6
 
6
7
  const STORAGE_KEY = "wiki-view-width";
8
+ const ALIGN_STORAGE_KEY = "wiki-view-align";
7
9
 
8
10
  /** Tailwind max-width class per setting. "wide" removes the cap. */
9
11
  export const VIEW_WIDTH_CLASS: Record<ViewWidth, string> = {
10
12
  narrow: "max-w-2xl",
11
- normal: "max-w-4xl",
12
- wide: "max-w-screen-xl",
13
+ normal: "max-w-5xl",
14
+ wide: "max-w-[90rem]",
13
15
  };
14
16
 
15
17
  /** CSS max-width value per setting, for use via the --editor-max-w variable. */
16
18
  export const VIEW_WIDTH_CSS: Record<ViewWidth, string> = {
17
19
  narrow: "42rem",
18
- normal: "56rem",
19
- wide: "80rem",
20
+ normal: "64rem",
21
+ wide: "90rem",
20
22
  };
21
23
 
22
24
  export const VIEW_WIDTH_LABEL: Record<ViewWidth, string> = {
@@ -27,6 +29,25 @@ export const VIEW_WIDTH_LABEL: Record<ViewWidth, string> = {
27
29
 
28
30
  export const VIEW_WIDTH_ORDER: ViewWidth[] = ["narrow", "normal", "wide"];
29
31
 
32
+ export const VIEW_ALIGN_LABEL: Record<ViewAlign, string> = {
33
+ center: "Center",
34
+ left: "Left",
35
+ };
36
+
37
+ export const VIEW_ALIGN_ORDER: ViewAlign[] = ["center", "left"];
38
+
39
+ /** Tailwind horizontal-margin class per alignment, for the content wrapper. */
40
+ export const VIEW_ALIGN_CLASS: Record<ViewAlign, string> = {
41
+ center: "mx-auto",
42
+ left: "mr-auto",
43
+ };
44
+
45
+ /** CSS left-margin value per alignment, for use via the --editor-ml variable. */
46
+ export const VIEW_ALIGN_ML: Record<ViewAlign, string> = {
47
+ center: "auto",
48
+ left: "0",
49
+ };
50
+
30
51
  function loadInitial(): ViewWidth {
31
52
  if (typeof window === "undefined") return "normal";
32
53
  const saved = localStorage.getItem(STORAGE_KEY);
@@ -36,20 +57,38 @@ function loadInitial(): ViewWidth {
36
57
  return "normal";
37
58
  }
38
59
 
60
+ function loadInitialAlign(): ViewAlign {
61
+ if (typeof window === "undefined") return "center";
62
+ const saved = localStorage.getItem(ALIGN_STORAGE_KEY);
63
+ if (saved === "center" || saved === "left") {
64
+ return saved;
65
+ }
66
+ return "center";
67
+ }
68
+
39
69
  interface ViewWidthState {
40
70
  width: ViewWidth;
71
+ align: ViewAlign;
41
72
  setWidth: (width: ViewWidth) => void;
73
+ setAlign: (align: ViewAlign) => void;
42
74
  cycle: () => void;
43
75
  }
44
76
 
45
77
  export const useViewWidthStore = create<ViewWidthState>((set) => ({
46
78
  width: loadInitial(),
79
+ align: loadInitialAlign(),
47
80
  setWidth: (width) => {
48
81
  if (typeof window !== "undefined") {
49
82
  localStorage.setItem(STORAGE_KEY, width);
50
83
  }
51
84
  set({ width });
52
85
  },
86
+ setAlign: (align) => {
87
+ if (typeof window !== "undefined") {
88
+ localStorage.setItem(ALIGN_STORAGE_KEY, align);
89
+ }
90
+ set({ align });
91
+ },
53
92
  cycle: () =>
54
93
  set((s) => {
55
94
  const idx = VIEW_WIDTH_ORDER.indexOf(s.width);
@@ -21,7 +21,6 @@ const config: Config = {
21
21
  DEFAULT: "var(--primary)",
22
22
  foreground: "var(--primary-foreground)",
23
23
  soft: "var(--primary-soft)",
24
- active: "var(--primary-active, #0c0a09)",
25
24
  },
26
25
  secondary: {
27
26
  DEFAULT: "var(--secondary)",
@@ -44,13 +43,7 @@ const config: Config = {
44
43
  border: "var(--border)",
45
44
  input: "var(--input)",
46
45
  ring: "var(--ring)",
47
- chart: {
48
- "1": "var(--chart-1)",
49
- "2": "var(--chart-2)",
50
- "3": "var(--chart-3)",
51
- "4": "var(--chart-4)",
52
- "5": "var(--chart-5)",
53
- },
46
+ overlay: "var(--overlay)",
54
47
  sidebar: {
55
48
  DEFAULT: "var(--sidebar-background)",
56
49
  foreground: "var(--sidebar-foreground)",
@@ -61,19 +54,6 @@ const config: Config = {
61
54
  border: "var(--sidebar-border)",
62
55
  ring: "var(--sidebar-ring)",
63
56
  },
64
- // Eisenhower quadrant colors
65
- "quadrant-do": "var(--quadrant-do)",
66
- "quadrant-do-soft": "var(--quadrant-do-soft)",
67
- "quadrant-schedule": "var(--quadrant-schedule)",
68
- "quadrant-schedule-soft": "var(--quadrant-schedule-soft)",
69
- "quadrant-delegate": "var(--quadrant-delegate)",
70
- "quadrant-delegate-soft": "var(--quadrant-delegate-soft)",
71
- "quadrant-eliminate": "var(--quadrant-eliminate)",
72
- "quadrant-eliminate-soft": "var(--quadrant-eliminate-soft)",
73
- // Status colors
74
- "status-not-started": "var(--status-not-started)",
75
- "status-in-progress": "var(--status-in-progress)",
76
- "status-done": "var(--status-done)",
77
57
  // Semantic colors
78
58
  success: {
79
59
  DEFAULT: "var(--success)",
@@ -127,6 +107,16 @@ const config: Config = {
127
107
  "sans-serif",
128
108
  ],
129
109
  serif: ["Waldenburg", "EB Garamond", "Times New Roman", "serif"],
110
+ // Editorial skin font families (scoped to [data-skin="editorial"])
111
+ display: ["var(--font-fraunces)", "Georgia", "serif"],
112
+ reading: ["var(--font-newsreader)", "Georgia", "serif"],
113
+ mono: [
114
+ "var(--font-plex-mono)",
115
+ "ui-monospace",
116
+ "SFMono-Regular",
117
+ "Menlo",
118
+ "monospace",
119
+ ],
130
120
  },
131
121
  fontSize: {
132
122
  "display-mega": [