@taskmark/ui 0.2.6 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/README.md +16 -1
  2. package/app/board/page.tsx +3 -272
  3. package/app/globals.css +25 -0
  4. package/app/layout.tsx +15 -5
  5. package/app/page.tsx +14 -14
  6. package/app/setup/actions.ts +4 -4
  7. package/app/setup/page.tsx +9 -4
  8. package/bin/lib/resolve-board.mjs +1 -4
  9. package/bin/taskmark.js +15 -2
  10. package/components/board/app-bar.tsx +3 -0
  11. package/components/board/board-screen.tsx +229 -0
  12. package/components/board/changelog-panel.tsx +26 -0
  13. package/components/board/epic-list.tsx +4 -2
  14. package/components/board/list-view-switcher.tsx +7 -3
  15. package/components/board/markdown-content.tsx +21 -1
  16. package/components/board/mermaid-diagram.tsx +88 -0
  17. package/components/board/metric-stat-card.tsx +4 -4
  18. package/components/board/overall-tree-list.tsx +467 -0
  19. package/components/board/overall-work-items-list.tsx +6 -2
  20. package/components/board/points-heatmap.tsx +183 -0
  21. package/components/board/project-status-metrics-strip.tsx +5 -22
  22. package/components/board/static-board-app.tsx +29 -94
  23. package/components/board/status-badge.tsx +8 -0
  24. package/components/board/story-list.tsx +3 -1
  25. package/components/board/task-list.tsx +5 -1
  26. package/components/board/work-item-detail-body.tsx +123 -8
  27. package/components/board/work-items-list.tsx +2 -0
  28. package/components/theme-provider.tsx +39 -0
  29. package/components/theme-toggle.tsx +27 -0
  30. package/components/ui/sonner.tsx +2 -2
  31. package/dist/prod-next/BUILD_ID +1 -1
  32. package/dist/prod-next/app-path-routes-manifest.json +2 -2
  33. package/dist/prod-next/build-manifest.json +6 -6
  34. package/dist/prod-next/prerender-manifest.json +3 -27
  35. package/dist/prod-next/react-loadable-manifest.json +392 -2
  36. package/dist/prod-next/server/app/_global-error/page.js +2 -2
  37. package/dist/prod-next/server/app/_global-error/page.js.nft.json +1 -1
  38. package/dist/prod-next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  39. package/dist/prod-next/server/app/_global-error.html +1 -1
  40. package/dist/prod-next/server/app/_global-error.rsc +1 -1
  41. package/dist/prod-next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  42. package/dist/prod-next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  43. package/dist/prod-next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  44. package/dist/prod-next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  45. package/dist/prod-next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  46. package/dist/prod-next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  47. package/dist/prod-next/server/app/_not-found/page.js +2 -2
  48. package/dist/prod-next/server/app/_not-found/page.js.nft.json +1 -1
  49. package/dist/prod-next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  50. package/dist/prod-next/server/app/_not-found.html +1 -1
  51. package/dist/prod-next/server/app/_not-found.rsc +19 -17
  52. package/dist/prod-next/server/app/_not-found.segments/_full.segment.rsc +19 -17
  53. package/dist/prod-next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  54. package/dist/prod-next/server/app/_not-found.segments/_index.segment.rsc +8 -6
  55. package/dist/prod-next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  56. package/dist/prod-next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  57. package/dist/prod-next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  58. package/dist/prod-next/server/app/api/taskmark-reload/route.js +1 -1
  59. package/dist/prod-next/server/app/api/taskmark-reload/route.js.nft.json +1 -1
  60. package/dist/prod-next/server/app/board/page.js +2 -50
  61. package/dist/prod-next/server/app/board/page.js.nft.json +1 -1
  62. package/dist/prod-next/server/app/board/page_client-reference-manifest.js +1 -1
  63. package/dist/prod-next/server/app/favicon.ico/route.js +1 -1
  64. package/dist/prod-next/server/app/favicon.ico/route.js.nft.json +1 -1
  65. package/dist/prod-next/server/app/page.js +2 -2
  66. package/dist/prod-next/server/app/page.js.nft.json +1 -1
  67. package/dist/prod-next/server/app/page_client-reference-manifest.js +1 -1
  68. package/dist/prod-next/server/app/setup/page.js +2 -2
  69. package/dist/prod-next/server/app/setup/page.js.nft.json +1 -1
  70. package/dist/prod-next/server/app/setup/page_client-reference-manifest.js +1 -1
  71. package/dist/prod-next/server/app-paths-manifest.json +2 -2
  72. package/dist/prod-next/server/chunks/102.js +90 -0
  73. package/dist/prod-next/server/chunks/11.js +1 -0
  74. package/dist/prod-next/server/chunks/1286.js +1 -0
  75. package/dist/prod-next/server/chunks/1412.js +38 -0
  76. package/dist/prod-next/server/chunks/1605.js +1 -0
  77. package/dist/prod-next/server/chunks/169.js +1 -0
  78. package/dist/prod-next/server/chunks/18.js +86 -0
  79. package/dist/prod-next/server/chunks/2.js +1 -0
  80. package/dist/prod-next/server/chunks/2022.js +1 -0
  81. package/dist/prod-next/server/chunks/2156.js +1 -0
  82. package/dist/prod-next/server/chunks/2157.js +1 -0
  83. package/dist/prod-next/server/chunks/2325.js +82 -0
  84. package/dist/prod-next/server/chunks/2838.js +1 -0
  85. package/dist/prod-next/server/chunks/2897.js +79 -0
  86. package/dist/prod-next/server/chunks/3227.js +1 -0
  87. package/dist/prod-next/server/chunks/3266.js +1 -0
  88. package/dist/prod-next/server/chunks/3307.js +49 -0
  89. package/dist/prod-next/server/chunks/3387.js +19 -0
  90. package/dist/prod-next/server/chunks/3428.js +32 -0
  91. package/dist/prod-next/server/chunks/3479.js +1 -0
  92. package/dist/prod-next/server/chunks/367.js +115 -0
  93. package/dist/prod-next/server/chunks/3698.js +93 -0
  94. package/dist/prod-next/server/chunks/3709.js +148 -0
  95. package/dist/prod-next/server/chunks/41.js +1 -0
  96. package/dist/prod-next/server/chunks/4107.js +62 -0
  97. package/dist/prod-next/server/chunks/4569.js +34 -0
  98. package/dist/prod-next/server/chunks/{741.js → 4741.js} +1 -1
  99. package/dist/prod-next/server/chunks/4755.js +153 -0
  100. package/dist/prod-next/server/chunks/487.js +1 -0
  101. package/dist/prod-next/server/chunks/5002.js +1 -0
  102. package/dist/prod-next/server/chunks/5112.js +1 -0
  103. package/dist/prod-next/server/chunks/5289.js +8 -0
  104. package/dist/prod-next/server/chunks/5318.js +1 -0
  105. package/dist/prod-next/server/chunks/5452.js +23 -0
  106. package/dist/prod-next/server/chunks/5453.js +1 -0
  107. package/dist/prod-next/server/chunks/5749.js +27 -0
  108. package/dist/prod-next/server/chunks/5782.js +36 -0
  109. package/dist/prod-next/server/chunks/6163.js +104 -0
  110. package/dist/prod-next/server/chunks/6169.js +64 -0
  111. package/dist/prod-next/server/chunks/6208.js +172 -0
  112. package/dist/prod-next/server/chunks/6399.js +24 -0
  113. package/dist/prod-next/server/chunks/6496.js +1 -0
  114. package/dist/prod-next/server/chunks/6823.js +215 -0
  115. package/dist/prod-next/server/chunks/6888.js +1 -0
  116. package/dist/prod-next/server/chunks/6980.js +1 -0
  117. package/dist/prod-next/server/chunks/7245.js +77 -0
  118. package/dist/prod-next/server/chunks/7307.js +1 -0
  119. package/dist/prod-next/server/chunks/7372.js +287 -0
  120. package/dist/prod-next/server/chunks/7384.js +226 -0
  121. package/dist/prod-next/server/chunks/7516.js +1 -0
  122. package/dist/prod-next/server/chunks/7531.js +24 -0
  123. package/dist/prod-next/server/chunks/7591.js +1 -0
  124. package/dist/prod-next/server/chunks/7755.js +138 -0
  125. package/dist/prod-next/server/chunks/7916.js +1 -0
  126. package/dist/prod-next/server/chunks/8078.js +94 -0
  127. package/dist/prod-next/server/chunks/8253.js +41 -0
  128. package/dist/prod-next/server/chunks/8635.js +1 -0
  129. package/dist/prod-next/server/chunks/8688.js +1 -0
  130. package/dist/prod-next/server/chunks/8872.js +1 -0
  131. package/dist/prod-next/server/chunks/9006.js +1 -0
  132. package/dist/prod-next/server/chunks/9018.js +1 -0
  133. package/dist/prod-next/server/chunks/9047.js +1 -0
  134. package/dist/prod-next/server/chunks/9108.js +1 -0
  135. package/dist/prod-next/server/chunks/9280.js +256 -0
  136. package/dist/prod-next/server/chunks/9419.js +1 -0
  137. package/dist/prod-next/server/chunks/9430.js +1 -0
  138. package/dist/prod-next/server/chunks/9586.js +1 -0
  139. package/dist/prod-next/server/chunks/9775.js +1 -0
  140. package/dist/prod-next/server/chunks/992.js +1 -0
  141. package/dist/prod-next/server/chunks/9926.js +1 -0
  142. package/dist/prod-next/server/chunks/9984.js +8 -0
  143. package/dist/prod-next/server/middleware-build-manifest.js +1 -1
  144. package/dist/prod-next/server/middleware-react-loadable-manifest.js +1 -1
  145. package/dist/prod-next/server/pages/404.html +1 -1
  146. package/dist/prod-next/server/pages/500.html +1 -1
  147. package/dist/prod-next/server/server-reference-manifest.js +1 -1
  148. package/dist/prod-next/server/server-reference-manifest.json +1 -1
  149. package/dist/prod-next/server/webpack-runtime.js +1 -1
  150. package/dist/prod-next/static/chunks/1213.e5c6e70a79b5f7e6.js +24 -0
  151. package/dist/prod-next/static/chunks/1519.2f596e5f5af9ef57.js +62 -0
  152. package/dist/prod-next/static/chunks/1759-f5b8fb456f8fb420.js +1 -0
  153. package/dist/prod-next/static/chunks/1974.885c9a133b86d8a4.js +32 -0
  154. package/dist/prod-next/static/chunks/2280.6a7f540787704698.js +1 -0
  155. package/dist/prod-next/static/chunks/2521.7f745f50d30076e7.js +77 -0
  156. package/dist/prod-next/static/chunks/2585.4d6aa847c780c666.js +1 -0
  157. package/dist/prod-next/static/chunks/2589.1aad68c09021b1ac.js +1 -0
  158. package/dist/prod-next/static/chunks/2600.45ba17a0f756fc31.js +1 -0
  159. package/dist/prod-next/static/chunks/2619.9aac8983f30c7c8a.js +1 -0
  160. package/dist/prod-next/static/chunks/26d302b2.9f6383e42abdfe16.js +122 -0
  161. package/dist/prod-next/static/chunks/2768.305914f7900745b6.js +1 -0
  162. package/dist/prod-next/static/chunks/2931.c2acdbf72808b646.js +41 -0
  163. package/dist/prod-next/static/chunks/3012-838f69b72a0dc1b3.js +1 -0
  164. package/dist/prod-next/static/chunks/3016.406e568aa95ff867.js +1 -0
  165. package/dist/prod-next/static/chunks/3022.972047558a20553a.js +172 -0
  166. package/dist/prod-next/static/chunks/3064.3a2a1e7cd4fdca5f.js +1 -0
  167. package/dist/prod-next/static/chunks/3174.03fbed7b7d7a8256.js +1 -0
  168. package/dist/prod-next/static/chunks/3189.b048866768087750.js +1 -0
  169. package/dist/prod-next/static/chunks/3217.1a053843c58b70b5.js +24 -0
  170. package/dist/prod-next/static/chunks/3308.30b95d524f9c1daf.js +74 -0
  171. package/dist/prod-next/static/chunks/331.fc5d78e1e91daf43.js +1 -0
  172. package/dist/prod-next/static/chunks/3510.5d4d1c79533e080c.js +1 -0
  173. package/dist/prod-next/static/chunks/364.ce5400a9dd70b9dc.js +1 -0
  174. package/dist/prod-next/static/chunks/3661-1f08d73aaffb011d.js +1 -0
  175. package/dist/prod-next/static/chunks/370.57cfa27da8567918.js +1 -0
  176. package/dist/prod-next/static/chunks/3789.c418b69121761983.js +1 -0
  177. package/dist/prod-next/static/chunks/3794-c66b3d8325973459.js +32 -0
  178. package/dist/prod-next/static/chunks/3831.25ae62d10dccc27a.js +1 -0
  179. package/dist/prod-next/static/chunks/395.b41e9d76613d37b5.js +90 -0
  180. package/dist/prod-next/static/chunks/3a7aa434.93dbd20997cfd24f.js +82 -0
  181. package/dist/prod-next/static/chunks/4020.3cc19c463c49f969.js +23 -0
  182. package/dist/prod-next/static/chunks/4035.0acc428926d5c8dd.js +1 -0
  183. package/dist/prod-next/static/chunks/405.0902e4f6eb7bd9a2.js +215 -0
  184. package/dist/prod-next/static/chunks/4159.49ae537ff687bdc6.js +138 -0
  185. package/dist/prod-next/static/chunks/4208.384b381ca2757643.js +287 -0
  186. package/dist/prod-next/static/chunks/4263.ffa8d9bd8a0faaae.js +1 -0
  187. package/dist/prod-next/static/chunks/4561.d1a3aaca8bae3224.js +34 -0
  188. package/dist/prod-next/static/chunks/4592.d0f37bc216b9d988.js +93 -0
  189. package/dist/prod-next/static/chunks/4799.0dc7aa21bff2fd2a.js +1 -0
  190. package/dist/prod-next/static/chunks/4bd1b696-e356ca5ba0218e27.js +1 -0
  191. package/dist/prod-next/static/chunks/514.b804c51b26f5e126.js +1 -0
  192. package/dist/prod-next/static/chunks/5270.28592864d38e881c.js +1 -0
  193. package/dist/prod-next/static/chunks/52733464.3870f99cc446f9ff.js +1 -0
  194. package/dist/prod-next/static/chunks/5354.b559c717a607dc5c.js +1 -0
  195. package/dist/prod-next/static/chunks/5448.d3972d9fb464b54f.js +38 -0
  196. package/dist/prod-next/static/chunks/587.d52737d7288c11b4.js +1 -0
  197. package/dist/prod-next/static/chunks/5909.9e37f7b495b11995.js +115 -0
  198. package/dist/prod-next/static/chunks/5949.5504b3545fcc3d34.js +104 -0
  199. package/dist/prod-next/static/chunks/6322-4e97920c006f7933.js +1 -0
  200. package/dist/prod-next/static/chunks/6361.893d04ac34fa1b49.js +148 -0
  201. package/dist/prod-next/static/chunks/6774.8cd53427dbf32cac.js +86 -0
  202. package/dist/prod-next/static/chunks/6968.b80277c724dbc96e.js +1 -0
  203. package/dist/prod-next/static/chunks/7113.4b9e7ea870aa300a.js +8 -0
  204. package/dist/prod-next/static/chunks/7236.55a9728d35f5b8a6.js +1 -0
  205. package/dist/prod-next/static/chunks/7390.dde9b5bc2f6e24b8.js +1 -0
  206. package/dist/prod-next/static/chunks/7806.a903780fcfa3a30e.js +1 -0
  207. package/dist/prod-next/static/chunks/7997.be57e92e583fe635.js +1 -0
  208. package/dist/prod-next/static/chunks/8216.64a72d4d35ea7be0.js +1 -0
  209. package/dist/prod-next/static/chunks/830.5d5274d7ad1cb58e.js +1 -0
  210. package/dist/prod-next/static/chunks/8378.fa91de3406f554c9.js +226 -0
  211. package/dist/prod-next/static/chunks/8501.cd06aa1b0c7e1c6a.js +79 -0
  212. package/dist/prod-next/static/chunks/8663.6ec5792fb4952e45.js +27 -0
  213. package/dist/prod-next/static/chunks/872.96937e758ddce860.js +1 -0
  214. package/dist/prod-next/static/chunks/8803.75bde095fe3613f5.js +1 -0
  215. package/dist/prod-next/static/chunks/8863.72f5dbb820a0e4c3.js +1 -0
  216. package/dist/prod-next/static/chunks/90542734.f7a7b2972ef5a749.js +1 -0
  217. package/dist/prod-next/static/chunks/9379.5bc9c9343ec5a16c.js +64 -0
  218. package/dist/prod-next/static/chunks/9389.906fe7aa9cd6a170.js +1 -0
  219. package/dist/prod-next/static/chunks/9472.8818ee52cfa931a4.js +94 -0
  220. package/dist/prod-next/static/chunks/966.d6babbf8119162cc.js +1 -0
  221. package/dist/prod-next/static/chunks/9884.d4ac1a961b3366f1.js +36 -0
  222. package/dist/prod-next/static/chunks/9909.67cf9940b125243b.js +1 -0
  223. package/dist/prod-next/static/chunks/app/_global-error/page-8be5492b3b872a4c.js +1 -0
  224. package/dist/prod-next/static/chunks/app/_not-found/page-799e445a538b0024.js +1 -0
  225. package/dist/prod-next/static/chunks/app/api/taskmark-reload/route-8be5492b3b872a4c.js +1 -0
  226. package/dist/prod-next/static/chunks/app/board/page-5c181f45738daf1c.js +1 -0
  227. package/dist/prod-next/static/chunks/app/layout-21782e6d13a6f275.js +1 -0
  228. package/dist/prod-next/static/chunks/app/page-51bfe4356fe233e3.js +1 -0
  229. package/dist/prod-next/static/chunks/app/setup/page-3ccfba00c10f9b17.js +1 -0
  230. package/dist/prod-next/static/chunks/d3ac728e.7964f816a1ca64e5.js +1 -0
  231. package/dist/prod-next/static/chunks/e413bedd.3a12a8cb02e28fdf.js +153 -0
  232. package/dist/prod-next/static/chunks/ea233666.f00b64a7d99b4950.js +62 -0
  233. package/dist/prod-next/static/chunks/framework-711ef29bc66f648c.js +1 -0
  234. package/dist/prod-next/static/chunks/main-app-dd26d4f9d120646e.js +1 -0
  235. package/dist/prod-next/static/chunks/{main-bb33c46a9c25dee8.js → main-df4bcaed74f274eb.js} +2 -2
  236. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/app-error-8be5492b3b872a4c.js +1 -0
  237. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/forbidden-8be5492b3b872a4c.js +1 -0
  238. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/global-error-45a0cf77e03361ed.js +1 -0
  239. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/not-found-8be5492b3b872a4c.js +1 -0
  240. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/unauthorized-8be5492b3b872a4c.js +1 -0
  241. package/dist/prod-next/static/chunks/webpack-713747aaa9716c4c.js +1 -0
  242. package/dist/prod-next/static/css/cb78d4b0062d9a3f.css +1 -0
  243. package/dist/public/taskmark-snapshot.json +1 -1
  244. package/lib/taskmark/board-index.ts +101 -0
  245. package/lib/taskmark/build-snapshot.ts +28 -7
  246. package/lib/taskmark/derive-parents.test.ts +23 -0
  247. package/lib/taskmark/derive-parents.ts +323 -0
  248. package/lib/taskmark/detail-load.ts +55 -7
  249. package/lib/taskmark/detail-types.ts +10 -2
  250. package/lib/taskmark/dev-reload-token.ts +1 -1
  251. package/lib/taskmark/discover.ts +4 -7
  252. package/lib/taskmark/epic-types.ts +2 -1
  253. package/lib/taskmark/flat-work-item-types.ts +1 -4
  254. package/lib/taskmark/identity.ts +3 -3
  255. package/lib/taskmark/item-types.ts +2 -1
  256. package/lib/taskmark/list-filters.test.ts +23 -0
  257. package/lib/taskmark/list-filters.ts +7 -2
  258. package/lib/taskmark/list-view-mode.test.ts +45 -0
  259. package/lib/taskmark/list-view-mode.ts +20 -9
  260. package/lib/taskmark/load-changelog.test.ts +32 -0
  261. package/lib/taskmark/load-changelog.ts +18 -0
  262. package/lib/taskmark/overall-tree.test.ts +196 -0
  263. package/lib/taskmark/overall-tree.ts +194 -0
  264. package/lib/taskmark/parse-detail.ts +5 -5
  265. package/lib/taskmark/parse-epics.ts +19 -16
  266. package/lib/taskmark/parse-flat-lists.ts +32 -28
  267. package/lib/taskmark/parse-items.ts +47 -9
  268. package/lib/taskmark/parse-stories.ts +18 -15
  269. package/lib/taskmark/points-calendar.test.ts +72 -0
  270. package/lib/taskmark/points-calendar.ts +86 -0
  271. package/lib/taskmark/project-metrics.ts +11 -7
  272. package/lib/taskmark/snapshot-types.ts +2 -0
  273. package/lib/taskmark/story-types.ts +2 -1
  274. package/lib/taskmark/table-sort.ts +4 -3
  275. package/lib/taskmark/timing.ts +29 -18
  276. package/lib/taskmark/validate.ts +1 -1
  277. package/lib/theme-cookie.test.ts +27 -0
  278. package/lib/theme-cookie.ts +43 -0
  279. package/package.json +3 -1
  280. package/public/taskmark-snapshot.json +1 -1
  281. package/scripts/build-static.mjs +61 -3
  282. package/dist/prod-next/server/app/setup.html +0 -1
  283. package/dist/prod-next/server/app/setup.meta +0 -17
  284. package/dist/prod-next/server/app/setup.rsc +0 -22
  285. package/dist/prod-next/server/app/setup.segments/_full.segment.rsc +0 -22
  286. package/dist/prod-next/server/app/setup.segments/_head.segment.rsc +0 -6
  287. package/dist/prod-next/server/app/setup.segments/_index.segment.rsc +0 -8
  288. package/dist/prod-next/server/app/setup.segments/_tree.segment.rsc +0 -5
  289. package/dist/prod-next/server/app/setup.segments/setup/__PAGE__.segment.rsc +0 -6
  290. package/dist/prod-next/server/app/setup.segments/setup.segment.rsc +0 -5
  291. package/dist/prod-next/server/chunks/318.js +0 -1
  292. package/dist/prod-next/server/chunks/490.js +0 -8
  293. package/dist/prod-next/server/chunks/57.js +0 -19
  294. package/dist/prod-next/server/chunks/616.js +0 -1
  295. package/dist/prod-next/server/chunks/708.js +0 -1
  296. package/dist/prod-next/server/chunks/724.js +0 -1
  297. package/dist/prod-next/static/chunks/4bd1b696-deb4a0a1da1923b0.js +0 -1
  298. package/dist/prod-next/static/chunks/51.e9139a9ea6eb36b9.js +0 -1
  299. package/dist/prod-next/static/chunks/613-6f794154d28bb75a.js +0 -1
  300. package/dist/prod-next/static/chunks/669-8103441c67b185da.js +0 -1
  301. package/dist/prod-next/static/chunks/701-df3ee5f1cf837b1a.js +0 -1
  302. package/dist/prod-next/static/chunks/794-25668765560cb197.js +0 -32
  303. package/dist/prod-next/static/chunks/app/_global-error/page-d34451c04262dd7d.js +0 -1
  304. package/dist/prod-next/static/chunks/app/_not-found/page-0b3785af737e7968.js +0 -1
  305. package/dist/prod-next/static/chunks/app/api/taskmark-reload/route-d34451c04262dd7d.js +0 -1
  306. package/dist/prod-next/static/chunks/app/board/page-cd1d9be0c0127225.js +0 -1
  307. package/dist/prod-next/static/chunks/app/layout-856e8a282e69e7d0.js +0 -1
  308. package/dist/prod-next/static/chunks/app/page-d34451c04262dd7d.js +0 -1
  309. package/dist/prod-next/static/chunks/app/setup/page-c3003359e8becc84.js +0 -1
  310. package/dist/prod-next/static/chunks/framework-b29f9083d3cda3b2.js +0 -1
  311. package/dist/prod-next/static/chunks/main-app-bfb36455d24b3e5a.js +0 -1
  312. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/app-error-d34451c04262dd7d.js +0 -1
  313. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/forbidden-d34451c04262dd7d.js +0 -1
  314. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/global-error-dc53ab29e0491fe4.js +0 -1
  315. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/not-found-d34451c04262dd7d.js +0 -1
  316. package/dist/prod-next/static/chunks/next/dist/client/components/builtin/unauthorized-d34451c04262dd7d.js +0 -1
  317. package/dist/prod-next/static/chunks/webpack-bfe8992962004e2b.js +0 -1
  318. package/dist/prod-next/static/css/2e6ec4c80894e3c0.css +0 -1
  319. /package/dist/prod-next/static/{sAWr5ATVuqk6Wqs18kAWs → EI1zQaa_kQ7DqUSE4o3Qo}/_buildManifest.js +0 -0
  320. /package/dist/prod-next/static/{sAWr5ATVuqk6Wqs18kAWs → EI1zQaa_kQ7DqUSE4o3Qo}/_ssgManifest.js +0 -0
@@ -133,6 +133,25 @@ function stagePackageForBuild(board) {
133
133
  return { root: stageDir, staged: true }
134
134
  }
135
135
 
136
+ /**
137
+ * An in-place build overwrites .next with an `output: export` build, which
138
+ * `taskmark serve` cannot run. Park the server build and put it back after.
139
+ */
140
+ function stashNextBuild(buildRoot) {
141
+ const nextDir = path.join(buildRoot, ".next")
142
+ if (!fs.existsSync(nextDir)) return null
143
+ const bak = path.join(buildRoot, ".next.taskmark-serve")
144
+ fs.rmSync(bak, { recursive: true, force: true })
145
+ fs.renameSync(nextDir, bak)
146
+ return { nextDir, bak }
147
+ }
148
+
149
+ function restoreNextBuild(stash) {
150
+ if (!stash) return
151
+ fs.rmSync(stash.nextDir, { recursive: true, force: true })
152
+ fs.renameSync(stash.bak, stash.nextDir)
153
+ }
154
+
136
155
  /** Bundle snapshot writer so `@/` aliases resolve outside Next. */
137
156
  function writeBoardSnapshot(buildRoot, env) {
138
157
  const esbuild = loadEsbuild(buildRoot)
@@ -194,16 +213,50 @@ export async function resetWorkspace() {}
194
213
  fs.writeFileSync(full, stub, "utf8")
195
214
  stashed.push({ full, bak })
196
215
  }
197
- // Route handlers are incompatible with `output: 'export'`.
216
+ // Route handlers are incompatible with `output: 'export'`. Park the backup
217
+ // outside `app/` — a `.staticbak` suffix is still a routable segment there.
198
218
  const apiDir = path.join(buildRoot, "app", "api")
199
219
  if (fs.existsSync(apiDir)) {
200
- const bak = apiDir + ".staticbak"
220
+ const bak = path.join(buildRoot, ".taskmark-build", "app-api.staticbak")
221
+ fs.mkdirSync(path.dirname(bak), { recursive: true })
222
+ fs.rmSync(bak, { recursive: true, force: true })
201
223
  fs.renameSync(apiDir, bak)
202
224
  stashed.push({ full: apiDir, bak, isDir: true })
203
225
  }
204
226
  return stashed
205
227
  }
206
228
 
229
+ /**
230
+ * `output: 'export'` rejects `force-dynamic`, but the local server needs it.
231
+ * Swap the literal for the duration of the static build.
232
+ */
233
+ function stashDynamicPages(buildRoot) {
234
+ const pages = [
235
+ "app/page.tsx",
236
+ "app/board/page.tsx",
237
+ "app/setup/page.tsx",
238
+ ]
239
+ const from = `export const dynamic = "force-dynamic"`
240
+ const to = `export const dynamic = "force-static"`
241
+ const stashed = []
242
+ for (const rel of pages) {
243
+ const full = path.join(buildRoot, rel)
244
+ if (!fs.existsSync(full)) continue
245
+ const src = fs.readFileSync(full, "utf8")
246
+ if (!src.includes(from)) continue
247
+ const bak = path.join(
248
+ buildRoot,
249
+ ".taskmark-build",
250
+ rel.replace(/[\\/]/g, "__") + ".staticbak"
251
+ )
252
+ fs.mkdirSync(path.dirname(bak), { recursive: true })
253
+ fs.copyFileSync(full, bak)
254
+ fs.writeFileSync(full, src.replace(from, to), "utf8")
255
+ stashed.push({ full, bak })
256
+ }
257
+ return stashed
258
+ }
259
+
207
260
  function restoreServerActions(stashed) {
208
261
  for (const { full, bak } of stashed) {
209
262
  if (fs.existsSync(full)) {
@@ -268,7 +321,11 @@ function main() {
268
321
 
269
322
  writeBoardSnapshot(buildRoot, env)
270
323
 
271
- const stashed = stashServerActions(buildRoot)
324
+ const stashed = [
325
+ ...stashServerActions(buildRoot),
326
+ ...stashDynamicPages(buildRoot),
327
+ ]
328
+ const stashedNext = staged ? null : stashNextBuild(buildRoot)
272
329
  try {
273
330
  run(process.execPath, [resolveNextBin(buildRoot), "build", "--webpack"], {
274
331
  cwd: buildRoot,
@@ -288,6 +345,7 @@ function main() {
288
345
  process.exitCode = 1
289
346
  } finally {
290
347
  restoreServerActions(stashed)
348
+ restoreNextBuild(stashedNext)
291
349
  if (staged) {
292
350
  // Keep stage on failure for debugging; remove on success.
293
351
  if (!process.exitCode) {
@@ -1 +0,0 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-bfe8992962004e2b.js"/><script src="/_next/static/chunks/4bd1b696-deb4a0a1da1923b0.js" async=""></script><script src="/_next/static/chunks/794-25668765560cb197.js" async=""></script><script src="/_next/static/chunks/main-app-bfb36455d24b3e5a.js" async=""></script><meta name="theme-color" content="#111111"/><title>Taskmark</title><meta name="description" content="Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."/><meta name="application-name" content="Taskmark"/><link rel="manifest" href="/site.webmanifest"/><meta name="robots" content="index, follow"/><meta property="og:title" content="Taskmark"/><meta property="og:description" content="Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."/><meta property="og:url" content="https://taskmark.dev"/><meta property="og:site_name" content="Taskmark"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="https://taskmark.dev/og/og-default.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Taskmark — product memory for agent work"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Taskmark"/><meta name="twitter:description" content="Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."/><meta name="twitter:image" content="https://taskmark.dev/og/og-default.png"/><link rel="icon" href="/favicon.ico?603d046c9a6fdfbb" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="icon" href="/favicon-96x96.png" sizes="96x96" type="image/png"/><link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><script src="/_next/static/chunks/webpack-bfe8992962004e2b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[61549,[\"613\",\"static/chunks/613-6f794154d28bb75a.js\",\"177\",\"static/chunks/app/layout-856e8a282e69e7d0.js\"],\"Toaster\"]\n3:I[10223,[\"613\",\"static/chunks/613-6f794154d28bb75a.js\",\"177\",\"static/chunks/app/layout-856e8a282e69e7d0.js\"],\"BoardDevReloader\"]\n4:I[57121,[],\"\"]\n5:I[74581,[],\"\"]\n7:I[90484,[],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\nb:I[90484,[],\"ViewportBoundary\"]\nd:I[90484,[],\"MetadataBoundary\"]\nf:I[27123,[],\"default\",1]\n:HL[\"/_next/static/media/36966cca54120369-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/982ceffe7b733b3b-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/c593627ceef17a4b.css\",\"style\"]\n:HL[\"/_next/static/css/2e6ec4c80894e3c0.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"setup\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"setup\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c593627ceef17a4b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/2e6ec4c80894e3c0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_93a132 __variable_dd5b2f font-sans antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L6\",null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,null]},null,false,\"$@a\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"sAWr5ATVuqk6Wqs18kAWs\"}\n"])</script><script>self.__next_f.push([1,"10:[]\na:\"$W10\"\n6:E{\"digest\":\"NEXT_REDIRECT;replace;/board;307;\"}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#111111\"}]]\n"])</script><script>self.__next_f.push([1,"11:I[86869,[],\"IconMark\"]\n9:null\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"title\",\"0\",{\"children\":\"Taskmark\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"Taskmark\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/site.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"4\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"Taskmark\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://taskmark.dev\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"Taskmark\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image\",\"content\":\"https://taskmark.dev/og/og-default.png\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:alt\",\"content\":\"Taskmark — product memory for agent work\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:title\",\"content\":\"Taskmark\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:description\",\"content\":\"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity.\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:image\",\"content\":\"https://taskmark.dev/og/og-default.png\"}],[\"$\",\"link\",\"19\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?603d046c9a6fdfbb\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"20\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",\"21\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"22\",{\"rel\":\"icon\",\"href\":\"/favicon-96x96.png\",\"sizes\":\"96x96\",\"type\":\"image/png\"}],[\"$\",\"link\",\"23\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\",\"sizes\":\"180x180\"}],[\"$\",\"$L11\",\"24\",{}]]\n"])</script></body></html>
@@ -1,17 +0,0 @@
1
- {
2
- "status": 307,
3
- "headers": {
4
- "location": "/board",
5
- "x-nextjs-stale-time": "300",
6
- "x-nextjs-prerender": "1",
7
- "x-next-cache-tags": "_N_T_/layout,_N_T_/setup/layout,_N_T_/setup/page,_N_T_/setup"
8
- },
9
- "segmentPaths": [
10
- "/_tree",
11
- "/_full",
12
- "/setup/__PAGE__",
13
- "/setup",
14
- "/_index",
15
- "/_head"
16
- ]
17
- }
@@ -1,22 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[61549,["613","static/chunks/613-6f794154d28bb75a.js","177","static/chunks/app/layout-856e8a282e69e7d0.js"],"Toaster"]
3
- 3:I[10223,["613","static/chunks/613-6f794154d28bb75a.js","177","static/chunks/app/layout-856e8a282e69e7d0.js"],"BoardDevReloader"]
4
- 4:I[57121,[],""]
5
- 5:I[74581,[],""]
6
- 7:I[90484,[],"OutletBoundary"]
7
- 8:"$Sreact.suspense"
8
- b:I[90484,[],"ViewportBoundary"]
9
- d:I[90484,[],"MetadataBoundary"]
10
- f:I[27123,[],"default",1]
11
- :HL["/_next/static/media/36966cca54120369-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
12
- :HL["/_next/static/media/982ceffe7b733b3b-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
13
- :HL["/_next/static/css/c593627ceef17a4b.css","style"]
14
- :HL["/_next/static/css/2e6ec4c80894e3c0.css","style"]
15
- 0:{"P":null,"c":["","setup"],"q":"","i":false,"f":[[["",{"children":["setup",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/c593627ceef17a4b.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/2e6ec4c80894e3c0.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_93a132 __variable_dd5b2f font-sans antialiased","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$L6",null,["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,null]},null,false,"$@a"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"sAWr5ATVuqk6Wqs18kAWs"}
16
- 10:[]
17
- a:"$W10"
18
- 6:E{"digest":"NEXT_REDIRECT;replace;/board;307;"}
19
- c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#111111"}]]
20
- 11:I[86869,[],"IconMark"]
21
- 9:null
22
- e:[["$","title","0",{"children":"Taskmark"}],["$","meta","1",{"name":"description","content":"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."}],["$","meta","2",{"name":"application-name","content":"Taskmark"}],["$","link","3",{"rel":"manifest","href":"/site.webmanifest","crossOrigin":"$undefined"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"property":"og:title","content":"Taskmark"}],["$","meta","6",{"property":"og:description","content":"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."}],["$","meta","7",{"property":"og:url","content":"https://taskmark.dev"}],["$","meta","8",{"property":"og:site_name","content":"Taskmark"}],["$","meta","9",{"property":"og:locale","content":"en_US"}],["$","meta","10",{"property":"og:image","content":"https://taskmark.dev/og/og-default.png"}],["$","meta","11",{"property":"og:image:width","content":"1200"}],["$","meta","12",{"property":"og:image:height","content":"630"}],["$","meta","13",{"property":"og:image:alt","content":"Taskmark — product memory for agent work"}],["$","meta","14",{"property":"og:type","content":"website"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Taskmark"}],["$","meta","17",{"name":"twitter:description","content":"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."}],["$","meta","18",{"name":"twitter:image","content":"https://taskmark.dev/og/og-default.png"}],["$","link","19",{"rel":"icon","href":"/favicon.ico?603d046c9a6fdfbb","type":"image/x-icon","sizes":"16x16"}],["$","link","20",{"rel":"icon","href":"/favicon.ico","sizes":"any"}],["$","link","21",{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml"}],["$","link","22",{"rel":"icon","href":"/favicon-96x96.png","sizes":"96x96","type":"image/png"}],["$","link","23",{"rel":"apple-touch-icon","href":"/apple-touch-icon.png","sizes":"180x180"}],["$","$L11","24",{}]]
@@ -1,22 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[61549,["613","static/chunks/613-6f794154d28bb75a.js","177","static/chunks/app/layout-856e8a282e69e7d0.js"],"Toaster"]
3
- 3:I[10223,["613","static/chunks/613-6f794154d28bb75a.js","177","static/chunks/app/layout-856e8a282e69e7d0.js"],"BoardDevReloader"]
4
- 4:I[57121,[],""]
5
- 5:I[74581,[],""]
6
- 7:I[90484,[],"OutletBoundary"]
7
- 8:"$Sreact.suspense"
8
- b:I[90484,[],"ViewportBoundary"]
9
- d:I[90484,[],"MetadataBoundary"]
10
- f:I[27123,[],"default",1]
11
- :HL["/_next/static/media/36966cca54120369-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
12
- :HL["/_next/static/media/982ceffe7b733b3b-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
13
- :HL["/_next/static/css/c593627ceef17a4b.css","style"]
14
- :HL["/_next/static/css/2e6ec4c80894e3c0.css","style"]
15
- 0:{"P":null,"c":["","setup"],"q":"","i":false,"f":[[["",{"children":["setup",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/c593627ceef17a4b.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/2e6ec4c80894e3c0.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_93a132 __variable_dd5b2f font-sans antialiased","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$L6",null,["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,null]},null,false,"$@a"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"sAWr5ATVuqk6Wqs18kAWs"}
16
- 10:[]
17
- a:"$W10"
18
- 6:E{"digest":"NEXT_REDIRECT;replace;/board;307;"}
19
- c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#111111"}]]
20
- 11:I[86869,[],"IconMark"]
21
- 9:null
22
- e:[["$","title","0",{"children":"Taskmark"}],["$","meta","1",{"name":"description","content":"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."}],["$","meta","2",{"name":"application-name","content":"Taskmark"}],["$","link","3",{"rel":"manifest","href":"/site.webmanifest","crossOrigin":"$undefined"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"property":"og:title","content":"Taskmark"}],["$","meta","6",{"property":"og:description","content":"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."}],["$","meta","7",{"property":"og:url","content":"https://taskmark.dev"}],["$","meta","8",{"property":"og:site_name","content":"Taskmark"}],["$","meta","9",{"property":"og:locale","content":"en_US"}],["$","meta","10",{"property":"og:image","content":"https://taskmark.dev/og/og-default.png"}],["$","meta","11",{"property":"og:image:width","content":"1200"}],["$","meta","12",{"property":"og:image:height","content":"630"}],["$","meta","13",{"property":"og:image:alt","content":"Taskmark — product memory for agent work"}],["$","meta","14",{"property":"og:type","content":"website"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Taskmark"}],["$","meta","17",{"name":"twitter:description","content":"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."}],["$","meta","18",{"name":"twitter:image","content":"https://taskmark.dev/og/og-default.png"}],["$","link","19",{"rel":"icon","href":"/favicon.ico?603d046c9a6fdfbb","type":"image/x-icon","sizes":"16x16"}],["$","link","20",{"rel":"icon","href":"/favicon.ico","sizes":"any"}],["$","link","21",{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml"}],["$","link","22",{"rel":"icon","href":"/favicon-96x96.png","sizes":"96x96","type":"image/png"}],["$","link","23",{"rel":"apple-touch-icon","href":"/apple-touch-icon.png","sizes":"180x180"}],["$","$L11","24",{}]]
@@ -1,6 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[90484,[],"ViewportBoundary"]
3
- 3:I[90484,[],"MetadataBoundary"]
4
- 4:"$Sreact.suspense"
5
- 5:I[86869,[],"IconMark"]
6
- 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#111111"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Taskmark"}],["$","meta","1",{"name":"description","content":"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."}],["$","meta","2",{"name":"application-name","content":"Taskmark"}],["$","link","3",{"rel":"manifest","href":"/site.webmanifest"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"property":"og:title","content":"Taskmark"}],["$","meta","6",{"property":"og:description","content":"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."}],["$","meta","7",{"property":"og:url","content":"https://taskmark.dev"}],["$","meta","8",{"property":"og:site_name","content":"Taskmark"}],["$","meta","9",{"property":"og:locale","content":"en_US"}],["$","meta","10",{"property":"og:image","content":"https://taskmark.dev/og/og-default.png"}],["$","meta","11",{"property":"og:image:width","content":"1200"}],["$","meta","12",{"property":"og:image:height","content":"630"}],["$","meta","13",{"property":"og:image:alt","content":"Taskmark — product memory for agent work"}],["$","meta","14",{"property":"og:type","content":"website"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"Taskmark"}],["$","meta","17",{"name":"twitter:description","content":"Taskmark — product memory for agent work. Local markdown boards for Cursor with sizing, work logs, and velocity."}],["$","meta","18",{"name":"twitter:image","content":"https://taskmark.dev/og/og-default.png"}],["$","link","19",{"rel":"icon","href":"/favicon.ico?603d046c9a6fdfbb","type":"image/x-icon","sizes":"16x16"}],["$","link","20",{"rel":"icon","href":"/favicon.ico","sizes":"any"}],["$","link","21",{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml"}],["$","link","22",{"rel":"icon","href":"/favicon-96x96.png","sizes":"96x96","type":"image/png"}],["$","link","23",{"rel":"apple-touch-icon","href":"/apple-touch-icon.png","sizes":"180x180"}],["$","$L5","24",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"sAWr5ATVuqk6Wqs18kAWs"}
@@ -1,8 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[61549,["613","static/chunks/613-6f794154d28bb75a.js","177","static/chunks/app/layout-856e8a282e69e7d0.js"],"Toaster"]
3
- 3:I[10223,["613","static/chunks/613-6f794154d28bb75a.js","177","static/chunks/app/layout-856e8a282e69e7d0.js"],"BoardDevReloader"]
4
- 4:I[57121,[],""]
5
- 5:I[74581,[],""]
6
- :HL["/_next/static/css/c593627ceef17a4b.css","style"]
7
- :HL["/_next/static/css/2e6ec4c80894e3c0.css","style"]
8
- 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/c593627ceef17a4b.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/2e6ec4c80894e3c0.css","precedence":"next"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__variable_93a132 __variable_dd5b2f font-sans antialiased","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"sAWr5ATVuqk6Wqs18kAWs"}
@@ -1,5 +0,0 @@
1
- :HL["/_next/static/media/36966cca54120369-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
2
- :HL["/_next/static/media/982ceffe7b733b3b-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
3
- :HL["/_next/static/css/c593627ceef17a4b.css","style"]
4
- :HL["/_next/static/css/2e6ec4c80894e3c0.css","style"]
5
- 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"setup","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"sAWr5ATVuqk6Wqs18kAWs"}
@@ -1,6 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 3:I[90484,[],"OutletBoundary"]
3
- 4:"$Sreact.suspense"
4
- 0:{"rsc":["$","$1","c",{"children":["$L2",null,["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"sAWr5ATVuqk6Wqs18kAWs"}
5
- 5:null
6
- 2:E{"digest":"NEXT_REDIRECT;replace;/board;307;"}
@@ -1,5 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[57121,[],""]
3
- 3:I[74581,[],""]
4
- 4:[]
5
- 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"sAWr5ATVuqk6Wqs18kAWs"}
@@ -1 +0,0 @@
1
- "use strict";exports.id=318,exports.ids=[318],exports.modules={108:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=c(48894),e=c(64491),f=c(62880),g=c(76484),h=c(23445),i=c(43449);("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},10381:(a,b)=>{Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return d}});class c extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class d extends URLSearchParams{append(){throw new c}delete(){throw new c}set(){throw new c}sort(){throw new c}}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},32171:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(81494),g=c(52220),h=c(19121).actionAsyncStorage;function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h?.getStore()?.isAction?"push":"replace",f.RedirectStatusCode.TemporaryRedirect)}function k(a,b="replace"){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},34655:(a,b,c)=>{let d=c(63033),e=c(29294),f=c(23445),g=c(89768),h=c(15693),i=c(43449),j=c(72339),k=c(48894);c(20445);new WeakMap;(0,g.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E835",enumerable:!1,configurable:!0})})},44057:(a,b,c)=>{function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unauthorized",{enumerable:!0,get:function(){return d}}),c(7638).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},52283:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"notFound",{enumerable:!0,get:function(){return f}});let d=c(7638),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},56022:(a,b,c)=>{let d=c(41398),e=c(29294),f=c(63033),g=c(23445),h=c(15693),i=c(48894),j=c(89768),k=c(92305),l=c(72339);c(65934);new WeakMap;(0,j.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E836",enumerable:!1,configurable:!0})})},65573:(a,b,c)=>{c.d(b,{UL:()=>d.U});var d=c(69015);c(56022),c(34655)},66610:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(10381),g=c(32171),h=c(52283),i=c(92606),j=c(44057),k=c(98621);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},69015:(a,b,c)=>{Object.defineProperty(b,"U",{enumerable:!0,get:function(){return n}});let d=c(20503),e=c(91488),f=c(29294),g=c(63033),h=c(23445),i=c(15693),j=c(48894),k=c(89768),l=c(92305),m=c(72339);function n(){let a="cookies",b=f.workAsyncStorage.getStore(),c=g.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,l.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`cookies()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E843",enumerable:!1,configurable:!0});if(b.forceStatic)return p(d.RequestCookiesAdapter.seal(new e.RequestCookies(new Headers({}))));if(b.dynamicShouldError)throw Object.defineProperty(new i.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`cookies()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E849",enumerable:!1,configurable:!0});if(c)switch(c.type){case"cache":let f=Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E831",enumerable:!1,configurable:!0});throw Error.captureStackTrace(f,n),b.invalidDynamicUsageError??=f,f;case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E846",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1123",enumerable:!1,configurable:!0});case"prerender":var k=b,q=c;let r=o.get(q);if(r)return r;let s=(0,j.makeHangingPromise)(q.renderSignal,k.route,"`cookies()`");return o.set(q,s),s;case"prerender-client":case"validation-client":let t="`cookies`";throw Object.defineProperty(new m.InvariantError(`${t} must not be used within a Client Component. Next.js should be preventing ${t} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1037",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,h.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,h.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,j.delayUntilRuntimeStage)(c,p(c.cookies));case"private-cache":return p(c.cookies);case"request":let u;if((0,h.trackDynamicDataInDynamicRender)(c),u=(0,d.areCookiesMutableInCurrentPhase)(c)?c.userspaceMutableCookies:c.cookies,!c.asyncApiPromises)return p(u);{let a=(0,g.isInEarlyRenderStage)(c);if(u===c.mutableCookies)return a?c.asyncApiPromises.earlyMutableCookies:c.asyncApiPromises.mutableCookies;return a?c.asyncApiPromises.earlyCookies:c.asyncApiPromises.cookies}}}(0,g.throwForMissingRequestStore)(a)}c(65934);let o=new WeakMap;function p(a){let b=o.get(a);if(b)return b;let c=Promise.resolve(a);return o.set(a,c),c}(0,k.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E830",enumerable:!1,configurable:!0})})},91970:(a,b,c)=>{var d=c(66610);c.o(d,"redirect")&&c.d(b,{redirect:function(){return d.redirect}})},92606:(a,b,c)=>{function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"forbidden",{enumerable:!0,get:function(){return d}}),c(7638).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},98621:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=c(108).unstable_rethrow;("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)}};
@@ -1,8 +0,0 @@
1
- "use strict";exports.id=490,exports.ids=[490],exports.modules={17305:(a,b,c)=>{c.d(b,{cn:()=>f});var d=c(89356),e=c(16184);function f(...a){return(0,e.QP)((0,d.$)(a))}},24925:(a,b,c)=>{c.d(b,{C:()=>h,o:()=>g});var d=c(74794),e=c(99405),f=c(81788);function g(a){let b=[];for(let c of a){let a=(0,f.N)(c);a.ok&&b.push(a.masterPath)}let c=(0,e.tb)(b);return{masters:b,projects:c,source:"cookies",autoconfig:!1}}function h(a){let b=(0,d.resolveAutoconfigWorkspace)();return b&&b.projects.length>0?{masters:b.masters,projects:b.projects,source:b.source,autoconfig:!0}:g(a)}},26284:(a,b,c)=>{c.d(b,{$:()=>i,r:()=>h});var d=c(48249),e=c(15712),f=c(21654),g=c(33191);let h=(0,f.F)((0,g.cn)("group/button font-head font-medium inline-flex cursor-pointer items-center justify-center gap-2 rounded whitespace-nowrap select-none transition-all duration-200","disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60","focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary aria-invalid:border-destructive","[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"),{variants:{variant:{default:"border-2 border-black bg-primary text-primary-foreground shadow-md transition duration-200 hover:translate-y-1 hover:bg-primary-hover hover:shadow active:translate-x-1 active:translate-y-2 active:shadow-none",secondary:"border-2 border-black bg-secondary text-secondary-foreground shadow-md transition duration-200 hover:translate-y-1 hover:bg-secondary-hover hover:shadow active:translate-x-1 active:translate-y-2 active:shadow-none",destructive:"border-2 border-black bg-destructive text-destructive-foreground shadow-md transition duration-200 hover:translate-y-1 hover:bg-destructive/90 hover:shadow active:translate-x-1 active:translate-y-2 active:shadow-none",outline:"border-2 bg-transparent shadow-md transition duration-200 hover:translate-y-1 hover:shadow active:translate-x-1 active:translate-y-2 active:shadow-none",ghost:"bg-transparent hover:bg-accent",link:"bg-transparent hover:underline"},size:{default:"px-4 py-1.5 text-base",xs:"px-2 py-0.5 text-xs",sm:"px-3 py-1 text-sm",lg:"px-6 py-2 text-base lg:px-8 lg:py-3 lg:text-lg",icon:"p-2","icon-xs":"p-1","icon-sm":"p-1.5","icon-lg":"p-3"}},defaultVariants:{variant:"default",size:"default"}});function i({className:a,variant:b="default",size:c="default",...f}){return(0,d.jsx)(e.$,{"data-slot":"button","data-variant":b,"data-size":c,className:(0,g.cn)(h({variant:b,size:c,className:a})),...f})}},33191:(a,b,c)=>{c.d(b,{cn:()=>f});var d=c(99314),e=c(96862);function f(...a){return(0,e.QP)((0,d.$)(a))}},61132:(a,b,c)=>{c.d(b,{xS:()=>t,ap:()=>s,RM:()=>q,HH:()=>v,yJ:()=>r,s3:()=>u});var d=c(95349),e=c(49487),f=c(42650),g=c(71324),h=c(31421);let i=(0,c(57975).promisify)(h.execFile);function j(a){return a.length>1&&(a.endsWith("/")||a.endsWith("\\"))?a.slice(0,-1):a}async function k(){try{let{stdout:a}=await i("osascript",["-e",'POSIX path of (choose folder with prompt "Select Taskmark master folder")'],{timeout:12e4}),b=j(a.trim());if(!b)return{ok:!1,cancelled:!0};return{ok:!0,path:b}}catch(b){let a=b instanceof Error?b.message:String(b);if(a.includes("User canceled")||a.includes("User cancelled")||a.includes("-128")||b&&"object"==typeof b&&"stderr"in b&&String(b.stderr).includes("-128"))return{ok:!1,cancelled:!0};return{ok:!1,cancelled:!1,error:`Folder picker failed: ${a}`}}}async function l(){try{let{stdout:a}=await i("zenity",["--file-selection","--directory","--title=Select Taskmark master folder"],{timeout:12e4}),b=j(a.trim());if(!b)return{ok:!1,cancelled:!0};return{ok:!0,path:b}}catch(b){if(1===(b&&"object"==typeof b&&"code"in b?b.code:void 0))return{ok:!1,cancelled:!0};let a=b instanceof Error?b.message:String(b);if(a.includes("ENOENT"))return{ok:!1,cancelled:!1,error:"Folder picker needs zenity on Linux, or paste a path instead."};return{ok:!1,cancelled:!1,error:`Folder picker failed: ${a}`}}}async function m(){let a=`
2
- Add-Type -AssemblyName System.Windows.Forms
3
- $dialog = New-Object System.Windows.Forms.FolderBrowserDialog
4
- $dialog.Description = 'Select Taskmark master folder'
5
- $dialog.ShowNewFolderButton = $false
6
- if ($dialog.ShowDialog() -ne [System.Windows.Forms.DialogResult]::OK) { exit 1 }
7
- Write-Output $dialog.SelectedPath
8
- `;try{let{stdout:b}=await i("powershell.exe",["-NoProfile","-Command",a],{timeout:12e4}),c=j(b.trim());if(!c)return{ok:!1,cancelled:!0};return{ok:!0,path:c}}catch(b){if(1===(b&&"object"==typeof b&&"code"in b?b.code:void 0))return{ok:!1,cancelled:!0};let a=b instanceof Error?b.message:String(b);return{ok:!1,cancelled:!1,error:`Folder picker failed: ${a}`}}}async function n(){switch(process.platform){case"darwin":return k();case"win32":return m();case"linux":return l();default:return{ok:!1,cancelled:!1,error:`Folder picker is not supported on ${process.platform}. Paste a path instead.`}}}var o=c(24925),p=c(81788);async function q(a,b){let c=String(b.get("masterPath")??""),d=(0,p.N)(c);return d.ok?{masterPath:d.masterPath,projects:d.projects}:{error:d.error}}async function r(a,b){let c=String(b.get("masterPath")??""),d=(0,p.N)(c);if(!d.ok)return{error:d.error};await (0,g.mY)(d.masterPath);let f=await (0,g.ek)(),h=(0,o.o)(f),i=d.projects[0],j=h.projects.find(a=>a.id===i?.id)??h.projects[0];j&&await (0,g.CS)(j.id),(0,e.redirect)("/board")}async function s(){let a=await n();return a.ok?{path:a.path}:a.cancelled?{}:{error:a.error}}async function t(){let{resolveAutoconfigWorkspace:a}=await Promise.resolve().then(c.bind(c,74794));a()?.projects.length&&(0,e.redirect)("/board"),(0,e.redirect)("/setup?mode=add")}async function u(a){let b=String(a.get("projectId")??"").trim();b&&(await (0,g.CS)(b),(0,f.revalidatePath)("/board"),(0,e.redirect)("/board"))}async function v(){let{clearMasterFoldersCookie:a}=await Promise.resolve().then(c.bind(c,71324));await a(),await (0,g.df)(),(0,e.redirect)("/setup")}(0,c(89337).D)([q,r,s,t,u,v]),(0,d.A)(q,"60c1b804c85b496a5a4268cadf2d53c67586fb1686",null),(0,d.A)(r,"607f0d919c1cf80e0c8d9f1dcb6541718e94e60ffb",null),(0,d.A)(s,"007c68ee4611c2a0d55fb6f7eb65b2f96bfc714a7e",null),(0,d.A)(t,"00234aed495dfcf35cc075646553fee4b12df48f47",null),(0,d.A)(u,"4061257288b15175bc020e0ec9c7f40bb72ff89257",null),(0,d.A)(v,"006f5085673b66e660b417b5a8ce6c2ce69f1bbf34",null)},61189:(a,b,c)=>{c.d(b,{Ku:()=>f,NT:()=>d,UW:()=>k,XD:()=>h,_7:()=>j,a4:()=>e,qv:()=>g,rt:()=>i});let d="taskmark_master_folder",e="taskmark_master_folders",f="taskmark_active_project",g=31536e3,h=31536e3,i=31536e3,j=3,k=new Set(["node_modules",".git",".next",".turbo",".cache","dist","build","coverage","out","vendor"])},64034:(a,b,c)=>{c.d(b,{BT:()=>i,Wu:()=>k,X9:()=>j,ZB:()=>h,Zp:()=>f,aR:()=>g,wL:()=>l});var d=c(48249);c(67484);var e=c(33191);function f({className:a,size:b="default",...c}){return(0,d.jsx)("div",{"data-slot":"card","data-size":b,className:(0,e.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded border-2 bg-card py-(--card-spacing) text-sm text-card-foreground shadow-md [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...c})}function g({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-header",className:(0,e.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",a),...b})}function h({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-title",className:(0,e.cn)("text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...b})}function i({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-description",className:(0,e.cn)("text-sm text-muted-foreground",a),...b})}function j({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-action",className:(0,e.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",a),...b})}function k({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-content",className:(0,e.cn)("px-(--card-spacing)",a),...b})}function l({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"card-footer",className:(0,e.cn)("flex items-center rounded-b-xl border-t-2 bg-muted/50 p-(--card-spacing)",a),...b})}},71324:(a,b,c)=>{c.d(b,{mY:()=>k,df:()=>o,clearMasterFoldersCookie:()=>l,KQ:()=>m,ek:()=>i,CS:()=>n});var d=c(36042),e=c(61189);function f(){return"1"===process.env.NEXT_PUBLIC_TASKMARK_STATIC||"1"===process.env.TASKMARK_STATIC}async function g(a){if(f())return null;let b=await (0,d.UL)(),c=b.get(a)?.value;if(!c)return null;try{return decodeURIComponent(c)}catch{return c}}function h(a){return encodeURIComponent(a)}async function i(){let a=await g(e.a4);if(a)try{let b=JSON.parse(a);if(Array.isArray(b))return[...new Set(b.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(Boolean))]}catch{}let b=await g(e.NT);return b?.trim()?[b.trim()]:[]}async function j(a){if(f())return;let b=[...new Set(a.map(a=>a.trim()).filter(Boolean))],c=await (0,d.UL)();c.set(e.a4,h(JSON.stringify(b)),{path:"/",maxAge:e.XD,sameSite:"lax",httpOnly:!0}),b.length>0?c.set(e.NT,h(b[b.length-1]),{path:"/",maxAge:e.qv,sameSite:"lax",httpOnly:!0}):c.delete(e.NT)}async function k(a){let b=[...await i()];return b.includes(a)||b.push(a),await j(b),b}async function l(){if(f())return;let a=await (0,d.UL)();a.delete(e.a4),a.delete(e.NT)}async function m(){return g(e.Ku)}async function n(a){f()||(await (0,d.UL)()).set(e.Ku,h(a),{path:"/",maxAge:e.rt,sameSite:"lax",httpOnly:!0})}async function o(){f()||(await (0,d.UL)()).delete(e.Ku)}},74794:(a,b,c)=>{c.d(b,{resolveAutoconfigWorkspace:()=>l});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(99405);function i(a){let b=process.env[a];return b&&b.trim()?g().resolve(b.trim()):null}function j(a,b){let c=(0,h.NB)(a);return{source:b,singleProject:!0,masters:[c.projectPath],projects:[c]}}function k(){let a=[],b=new Set;for(let c of[process.env.TASKMARK_CWD,process.env.INIT_CWD,process.cwd()]){if(!c||!c.trim())continue;let d=g().resolve(c.trim());try{let c=e().realpathSync(d);if(b.has(c))continue;b.add(c),a.push(c)}catch{if(b.has(d))continue;b.add(d),a.push(d)}}return a}function l(){let a;if("1"===(a=process.env.TASKMARK_WORKSPACE?.trim().toLowerCase())||"true"===a)return null;let b=i("TASKMARK_BOARD");if(b){let a=(0,h.PG)(b);if(a)return j(a,"env_board");console.warn(`[taskmark] TASKMARK_BOARD is set but is not a valid board path: ${b}`)}let c=i("TASKMARK_MASTER");if(c){let a=function(a,b){let c;try{c=(0,h.c7)(a)}catch{return null}return 0===c.length?null:{source:b,singleProject:1===c.length,masters:[g().resolve(a)],projects:c}}(c,"env_master");if(a)return a;console.warn(`[taskmark] TASKMARK_MASTER is set but no Taskmark boards were found: ${c}`)}for(let a of k()){let b=(0,h.PG)(a);if(b)return j(b,"cwd")}for(let a of k()){let b=function(a){let b,c=g().resolve(a),d=g().dirname(c),f=g().basename(d),i=g().join(d,`${f}-taskmark`),j=(0,h.PG)(i);if(j)return j;try{b=e().readdirSync(d,{withFileTypes:!0})}catch{return null}let k=[];for(let a of b){if(!a.isDirectory()||!a.name.endsWith("-taskmark"))continue;let b=(0,h.PG)(g().join(d,a.name));b&&k.push(b)}if(0===k.length)return null;if(1===k.length)return k[0];let l=g().basename(c).split("-").filter(Boolean);for(let a=l.length-1;a>=1;a--){let b=l.slice(0,a).join("-"),c=k.find(a=>g().basename(a)===`${b}-taskmark`);if(c)return c}return null}(a);if(b)return j(b,"sibling")}return null}},81788:(a,b,c)=>{c.d(b,{N:()=>i});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(99405);function i(a){let b,c,d=a.trim();if(!d)return{ok:!1,code:"empty",error:"Enter a master folder path."};let f=g().resolve(d);try{b=e().statSync(f)}catch(a){if("ENOENT"===(a&&"object"==typeof a&&"code"in a?String(a.code):""))return{ok:!1,code:"not_found",error:"Folder not found. Check the path and try again."};return{ok:!1,code:"unreadable",error:"Cannot read that folder. Check permissions and try again."}}if(!b.isDirectory())return{ok:!1,code:"not_directory",error:"That path is not a folder."};try{c=(0,h.c7)(f)}catch{return{ok:!1,code:"unreadable",error:"Cannot scan that folder. Check permissions and try again."}}return 0===c.length?{ok:!1,code:"no_projects",error:"No Taskmark projects found in subfolders. Look for a nested taskmark/ board (INDEX.md or epics/), or a dedicated *-taskmark folder with those files at its root."}:{ok:!0,masterPath:f,projects:c}}},99405:(a,b,c)=>{c.d(b,{c7:()=>p,tb:()=>q,PG:()=>n,NB:()=>o});var d=c(73024),e=c.n(d),f=c(76760),g=c.n(f),h=c(61189);function i(a){return a.endsWith("-taskmark")}function j(a){let b=g().resolve(a);return i(g().basename(b))?b:g().dirname(b)}function k(a){return e().existsSync(g().join(a,"INDEX.md"))||e().existsSync(g().join(a,"epics"))}function l(a){let b=g().join(a,"taskmark");try{if(!e().statSync(b).isDirectory())return null}catch{return null}return k(b)?b:null}function m(a){if(!i(g().basename(a)))return null;try{if(!e().statSync(a).isDirectory())return null}catch{return null}return k(a)?a:null}function n(a){let b=g().resolve(a);try{if(!e().statSync(b).isDirectory())return null}catch{return null}let c=m(b);if(c)return c;let d=l(b);return d||(k(b)?b:null)}function o(a){let b=function(a){let b=g().resolve(a);try{return e().realpathSync(b)}catch{return b}}(a);return{id:b,name:g().basename(j(b)),projectPath:j(b),boardPath:b}}function p(a,b=h._7){let c=g().resolve(a),d=new Map;return!function a(c,f){var i;let j,k=m(c)??l(c);if(k){let a=o(k);d.set(a.id,a);return}if(!(f>=b)){try{j=e().readdirSync(c,{withFileTypes:!0})}catch{return}for(let b of j)b.isDirectory()&&(i=b.name,!(h.UW.has(i)||i.startsWith("."))&&1&&a(g().join(c,b.name),f+1))}}(c,0),[...d.values()].sort((a,b)=>a.name.localeCompare(b.name))}function q(a){let b=new Map;for(let c of a)for(let a of p(c))b.set(a.id,a);return[...b.values()].sort((a,b)=>a.name.localeCompare(b.name))}}};