@taskmark/ui 0.1.0 → 0.2.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 (691) hide show
  1. package/README.md +17 -5
  2. package/app/board/actions.ts +62 -0
  3. package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/app → app}/board/page.tsx +13 -0
  4. package/app/layout.tsx +87 -0
  5. package/{dist/standalone/dist/standalone/dist/standalone/app → app}/page.tsx +4 -0
  6. package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/app → app}/setup/page.tsx +5 -0
  7. package/bin/taskmark.js +52 -13
  8. package/{dist/standalone/dist/standalone/components → components}/board/project-status-metrics-strip.tsx +4 -2
  9. package/{dist/standalone/dist/standalone/app/board/page.tsx → components/board/static-board-app.tsx} +35 -104
  10. package/{dist/standalone/dist/standalone/dist/standalone/components → components}/board/work-item-sheet.tsx +37 -4
  11. package/dist/standalone/.next/BUILD_ID +1 -1
  12. package/dist/standalone/.next/build-manifest.json +8 -7
  13. package/dist/standalone/.next/required-server-files.json +6 -0
  14. package/dist/standalone/.next/server/app/_global-error/page/build-manifest.json +5 -4
  15. package/dist/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  16. package/dist/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  17. package/dist/standalone/.next/server/app/_global-error.html +1 -1
  18. package/dist/standalone/.next/server/app/_global-error.rsc +1 -1
  19. package/dist/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  20. package/dist/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  21. package/dist/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/dist/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/dist/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/dist/standalone/.next/server/app/_not-found/page/build-manifest.json +5 -4
  25. package/dist/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  26. package/dist/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  27. package/dist/standalone/.next/server/app/_not-found.html +1 -1
  28. package/dist/standalone/.next/server/app/_not-found.rsc +4 -4
  29. package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  30. package/dist/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  31. package/dist/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  32. package/dist/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  33. package/dist/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  34. package/dist/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  35. package/dist/standalone/.next/server/app/board/page/build-manifest.json +5 -4
  36. package/dist/standalone/.next/server/app/board/page/server-reference-manifest.json +6 -6
  37. package/dist/standalone/.next/server/app/board/page.js +3 -3
  38. package/dist/standalone/.next/server/app/board/page.js.nft.json +1 -1
  39. package/dist/standalone/.next/server/app/board/page_client-reference-manifest.js +1 -1
  40. package/dist/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  41. package/dist/standalone/.next/server/app/page/build-manifest.json +5 -4
  42. package/dist/standalone/.next/server/app/page.js.nft.json +1 -1
  43. package/dist/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  44. package/dist/standalone/.next/server/app/setup/page/build-manifest.json +5 -4
  45. package/dist/standalone/.next/server/app/setup/page.js +1 -1
  46. package/dist/standalone/.next/server/app/setup/page.js.nft.json +1 -1
  47. package/dist/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  48. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__056osos._.js +3 -0
  49. package/dist/standalone/.next/server/chunks/ssr/{[root-of-the-server]__03_ho7w._.js → [root-of-the-server]__09zm1qv._.js} +5 -5
  50. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gn-ti0._.js +1 -1
  51. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__0op8wkj._.js +1 -1
  52. package/dist/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ptadz9._.js → [root-of-the-server]__0srwu25._.js} +3 -3
  53. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zq2v_u._.js +1 -1
  54. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__12ufd6u._.js +6 -0
  55. package/dist/standalone/.next/server/chunks/ssr/{[root-of-the-server]__10pik1x._.js → [root-of-the-server]__18cyjiz._.js} +2 -2
  56. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ig72i1._.js +2 -2
  57. package/dist/standalone/.next/server/chunks/ssr/_05k6qx-._.js +3 -0
  58. package/dist/standalone/.next/server/chunks/ssr/_0aho3h6._.js +1 -1
  59. package/dist/standalone/.next/server/chunks/ssr/_0xl0vrn._.js +3 -0
  60. package/dist/standalone/.next/server/chunks/ssr/_17p0g27._.js +3 -0
  61. package/dist/standalone/.next/server/chunks/ssr/_1ln4p7u._.js +1 -1
  62. package/dist/standalone/.next/server/chunks/ssr/_1nr_jtr._.js +3 -0
  63. package/dist/standalone/.next/server/chunks/ssr/_1qgmrdc._.js +3 -0
  64. package/dist/standalone/.next/server/chunks/ssr/{_1u3jg4m._.js → _1yb3kog._.js} +1 -1
  65. package/dist/standalone/.next/server/chunks/ssr/app_board_actions_ts_0f5ys15._.js +3 -0
  66. package/dist/standalone/.next/server/chunks/ssr/node_modules_0h91jdk._.js +1 -1
  67. package/dist/standalone/.next/server/middleware-build-manifest.js +8 -7
  68. package/dist/standalone/.next/server/pages/404.html +1 -1
  69. package/dist/standalone/.next/server/pages/500.html +1 -1
  70. package/dist/standalone/.next/server/server-reference-manifest.js +1 -1
  71. package/dist/standalone/.next/server/server-reference-manifest.json +6 -6
  72. package/dist/standalone/.next/static/chunks/018wh8zp6bjth.js +1 -0
  73. package/dist/standalone/.next/static/chunks/{3-2jy1bmsuo5l.js → 01fxdzfqp-khv.js} +1 -1
  74. package/dist/standalone/.next/static/chunks/06t7fr3j7axc1.js +1 -0
  75. package/dist/standalone/.next/static/chunks/0g8oss7mvdgy2.js +1 -0
  76. package/dist/standalone/.next/static/chunks/{42tcxcpa-z9hi.js → 0tckbkthn_lz5.js} +1 -1
  77. package/dist/standalone/.next/static/chunks/1b4b87nf50pwj.js +1 -0
  78. package/dist/standalone/.next/static/chunks/1etzx8zdgoji7.js +2 -0
  79. package/dist/standalone/.next/static/chunks/1ob9-gyputghy.js +1 -0
  80. package/dist/standalone/.next/static/chunks/{3w2ohvdljvkpj.js → 2r5ngr5zaimmw.js} +1 -1
  81. package/dist/standalone/.next/static/chunks/2z9l0n877if48.css +1 -0
  82. package/dist/standalone/.next/static/chunks/40bad20ki94w3.js +1 -0
  83. package/dist/standalone/.next/static/chunks/turbopack-3ekz2izuoc92r.js +1 -0
  84. package/dist/standalone/README.md +17 -5
  85. package/dist/standalone/app/board/actions.ts +24 -173
  86. package/dist/standalone/app/board/page.tsx +13 -0
  87. package/dist/standalone/app/layout.tsx +50 -5
  88. package/dist/standalone/app/page.tsx +4 -0
  89. package/dist/standalone/app/setup/page.tsx +5 -0
  90. package/dist/standalone/bin/taskmark.js +52 -13
  91. package/dist/standalone/components/board/project-status-metrics-strip.tsx +4 -2
  92. package/dist/standalone/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/board/page.tsx → components/board/static-board-app.tsx} +35 -104
  93. package/dist/standalone/components/board/work-item-sheet.tsx +37 -4
  94. package/dist/standalone/lib/site.ts +8 -0
  95. package/dist/standalone/lib/taskmark/build-snapshot.ts +198 -0
  96. package/dist/standalone/lib/taskmark/cookies.ts +16 -0
  97. package/dist/standalone/{dist/standalone/dist/standalone/dist/standalone/app/board/actions.ts → lib/taskmark/detail-load.ts} +59 -90
  98. package/dist/standalone/lib/taskmark/load-snapshot-server.ts +11 -0
  99. package/dist/standalone/lib/taskmark/project-metrics-shared.ts +21 -0
  100. package/dist/standalone/lib/taskmark/project-metrics.ts +6 -18
  101. package/dist/standalone/lib/taskmark/snapshot-client.ts +67 -0
  102. package/dist/standalone/lib/taskmark/snapshot-types.ts +37 -0
  103. package/dist/standalone/lib/taskmark/static-mode.ts +15 -0
  104. package/dist/standalone/next.config.ts +13 -2
  105. package/dist/standalone/package-lock.json +541 -232
  106. package/dist/standalone/package.json +25 -11
  107. package/dist/standalone/public/apple-touch-icon.png +0 -0
  108. package/dist/standalone/public/favicon-96x96.png +0 -0
  109. package/dist/standalone/public/favicon.ico +0 -0
  110. package/dist/standalone/public/favicon.svg +1 -0
  111. package/dist/standalone/public/og/og-default.png +0 -0
  112. package/dist/standalone/public/site.webmanifest +21 -0
  113. package/dist/standalone/public/taskmark-snapshot.json +1 -0
  114. package/dist/standalone/public/web-app-manifest-192x192.png +0 -0
  115. package/dist/standalone/public/web-app-manifest-512x512.png +0 -0
  116. package/dist/standalone/scripts/build-static.mjs +169 -0
  117. package/dist/standalone/scripts/write-board-snapshot.ts +20 -0
  118. package/dist/standalone/server.js +1 -1
  119. package/dist/standalone/tsconfig.json +1 -1
  120. package/dist/standalone/tsconfig.tsbuildinfo +1 -1
  121. package/dist/standalone/yarn.lock +56 -0
  122. package/lib/site.ts +8 -0
  123. package/lib/taskmark/build-snapshot.ts +198 -0
  124. package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/cookies.ts +16 -0
  125. package/{dist/standalone/dist/standalone/dist/standalone/app/board/actions.ts → lib/taskmark/detail-load.ts} +59 -90
  126. package/lib/taskmark/load-snapshot-server.ts +11 -0
  127. package/lib/taskmark/project-metrics-shared.ts +21 -0
  128. package/{dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/project-metrics.ts +6 -18
  129. package/lib/taskmark/snapshot-client.ts +67 -0
  130. package/lib/taskmark/snapshot-types.ts +37 -0
  131. package/lib/taskmark/static-mode.ts +15 -0
  132. package/next.config.ts +19 -0
  133. package/package.json +25 -11
  134. package/public/apple-touch-icon.png +0 -0
  135. package/public/favicon-96x96.png +0 -0
  136. package/public/favicon.ico +0 -0
  137. package/public/favicon.svg +1 -0
  138. package/public/og/og-default.png +0 -0
  139. package/public/site.webmanifest +21 -0
  140. package/public/taskmark-snapshot.json +1 -0
  141. package/public/web-app-manifest-192x192.png +0 -0
  142. package/public/web-app-manifest-512x512.png +0 -0
  143. package/scripts/build-static.mjs +169 -0
  144. package/scripts/write-board-snapshot.ts +20 -0
  145. package/{dist/standalone/dist/standalone/dist/standalone/tsconfig.json → tsconfig.json} +1 -1
  146. package/dist/standalone/.next/server/chunks/ssr/[externals]_node_path_1pmhwj3._.js +0 -3
  147. package/dist/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ahb350._.js +0 -6
  148. package/dist/standalone/.next/server/chunks/ssr/_0d5ymu2._.js +0 -3
  149. package/dist/standalone/.next/server/chunks/ssr/_0ltlf7m._.js +0 -3
  150. package/dist/standalone/.next/server/chunks/ssr/_1ewgzdg._.js +0 -3
  151. package/dist/standalone/.next/server/chunks/ssr/_1y1lrmo._.js +0 -3
  152. package/dist/standalone/.next/server/chunks/ssr/components_setup_setup-wizard_tsx_19mu5ru._.js +0 -3
  153. package/dist/standalone/.next/static/chunks/12kmjf-wk-m-0.js +0 -2
  154. package/dist/standalone/.next/static/chunks/15g-piqywkucg.css +0 -1
  155. package/dist/standalone/.next/static/chunks/2ao0tkrplrup7.js +0 -1
  156. package/dist/standalone/.next/static/chunks/3a8w_qvn2gpqt.js +0 -1
  157. package/dist/standalone/.next/static/chunks/3sz1w0ssobbwn.js +0 -1
  158. package/dist/standalone/.next/static/chunks/turbopack-0xo65f5j55qxe.js +0 -1
  159. package/dist/standalone/dist/standalone/AGENTS.md +0 -5
  160. package/dist/standalone/dist/standalone/CLAUDE.md +0 -1
  161. package/dist/standalone/dist/standalone/README.md +0 -74
  162. package/dist/standalone/dist/standalone/app/board/actions.ts +0 -211
  163. package/dist/standalone/dist/standalone/app/layout.tsx +0 -42
  164. package/dist/standalone/dist/standalone/app/page.tsx +0 -13
  165. package/dist/standalone/dist/standalone/app/setup/page.tsx +0 -62
  166. package/dist/standalone/dist/standalone/bin/lib/resolve-board.mjs +0 -108
  167. package/dist/standalone/dist/standalone/bin/taskmark.js +0 -232
  168. package/dist/standalone/dist/standalone/components/board/work-item-sheet.tsx +0 -604
  169. package/dist/standalone/dist/standalone/dist/standalone/AGENTS.md +0 -5
  170. package/dist/standalone/dist/standalone/dist/standalone/CLAUDE.md +0 -1
  171. package/dist/standalone/dist/standalone/dist/standalone/README.md +0 -74
  172. package/dist/standalone/dist/standalone/dist/standalone/app/board/page.tsx +0 -271
  173. package/dist/standalone/dist/standalone/dist/standalone/app/favicon.ico +0 -0
  174. package/dist/standalone/dist/standalone/dist/standalone/app/globals.css +0 -128
  175. package/dist/standalone/dist/standalone/dist/standalone/app/layout.tsx +0 -42
  176. package/dist/standalone/dist/standalone/dist/standalone/app/setup/actions.ts +0 -113
  177. package/dist/standalone/dist/standalone/dist/standalone/app/setup/page.tsx +0 -62
  178. package/dist/standalone/dist/standalone/dist/standalone/bin/lib/resolve-board.mjs +0 -108
  179. package/dist/standalone/dist/standalone/dist/standalone/bin/taskmark.js +0 -232
  180. package/dist/standalone/dist/standalone/dist/standalone/components/board/app-bar.tsx +0 -99
  181. package/dist/standalone/dist/standalone/dist/standalone/components/board/attribution-avatars.tsx +0 -176
  182. package/dist/standalone/dist/standalone/dist/standalone/components/board/child-progress-bar.tsx +0 -40
  183. package/dist/standalone/dist/standalone/dist/standalone/components/board/date-tooltip.tsx +0 -93
  184. package/dist/standalone/dist/standalone/dist/standalone/components/board/detail-children-list.tsx +0 -70
  185. package/dist/standalone/dist/standalone/dist/standalone/components/board/epic-list.tsx +0 -363
  186. package/dist/standalone/dist/standalone/dist/standalone/components/board/hide-completed-toggle.tsx +0 -39
  187. package/dist/standalone/dist/standalone/dist/standalone/components/board/list-filters-bar.tsx +0 -78
  188. package/dist/standalone/dist/standalone/dist/standalone/components/board/list-pagination.tsx +0 -124
  189. package/dist/standalone/dist/standalone/dist/standalone/components/board/list-search-box.tsx +0 -59
  190. package/dist/standalone/dist/standalone/dist/standalone/components/board/list-view-switcher.tsx +0 -74
  191. package/dist/standalone/dist/standalone/dist/standalone/components/board/markdown-content.tsx +0 -91
  192. package/dist/standalone/dist/standalone/dist/standalone/components/board/metric-stat-card.tsx +0 -55
  193. package/dist/standalone/dist/standalone/dist/standalone/components/board/overall-work-items-list.tsx +0 -356
  194. package/dist/standalone/dist/standalone/dist/standalone/components/board/parent-filter-combobox.tsx +0 -89
  195. package/dist/standalone/dist/standalone/dist/standalone/components/board/parent-tag-badge.tsx +0 -46
  196. package/dist/standalone/dist/standalone/dist/standalone/components/board/project-contributors-panel.tsx +0 -86
  197. package/dist/standalone/dist/standalone/dist/standalone/components/board/project-status-metrics-strip.tsx +0 -88
  198. package/dist/standalone/dist/standalone/dist/standalone/components/board/sortable-table-head.tsx +0 -69
  199. package/dist/standalone/dist/standalone/dist/standalone/components/board/status-badge.tsx +0 -82
  200. package/dist/standalone/dist/standalone/dist/standalone/components/board/story-list.tsx +0 -336
  201. package/dist/standalone/dist/standalone/dist/standalone/components/board/tags-multiselect-filter.tsx +0 -70
  202. package/dist/standalone/dist/standalone/dist/standalone/components/board/task-list.tsx +0 -307
  203. package/dist/standalone/dist/standalone/dist/standalone/components/board/timeframe-filter.tsx +0 -676
  204. package/dist/standalone/dist/standalone/dist/standalone/components/board/work-item-detail-body.tsx +0 -392
  205. package/dist/standalone/dist/standalone/dist/standalone/components/board/work-items-list.tsx +0 -372
  206. package/dist/standalone/dist/standalone/dist/standalone/components/brand-logo.tsx +0 -39
  207. package/dist/standalone/dist/standalone/dist/standalone/components/setup/setup-wizard.tsx +0 -180
  208. package/dist/standalone/dist/standalone/dist/standalone/components/ui/alert-dialog.tsx +0 -187
  209. package/dist/standalone/dist/standalone/dist/standalone/components/ui/alert.tsx +0 -101
  210. package/dist/standalone/dist/standalone/dist/standalone/components/ui/avatar.tsx +0 -109
  211. package/dist/standalone/dist/standalone/dist/standalone/components/ui/badge.tsx +0 -52
  212. package/dist/standalone/dist/standalone/dist/standalone/components/ui/breadcrumb.tsx +0 -122
  213. package/dist/standalone/dist/standalone/dist/standalone/components/ui/button.tsx +0 -64
  214. package/dist/standalone/dist/standalone/dist/standalone/components/ui/calendar.tsx +0 -237
  215. package/dist/standalone/dist/standalone/dist/standalone/components/ui/card.tsx +0 -103
  216. package/dist/standalone/dist/standalone/dist/standalone/components/ui/combobox.tsx +0 -297
  217. package/dist/standalone/dist/standalone/dist/standalone/components/ui/dialog.tsx +0 -159
  218. package/dist/standalone/dist/standalone/dist/standalone/components/ui/field.tsx +0 -238
  219. package/dist/standalone/dist/standalone/dist/standalone/components/ui/input-group.tsx +0 -158
  220. package/dist/standalone/dist/standalone/dist/standalone/components/ui/input.tsx +0 -20
  221. package/dist/standalone/dist/standalone/dist/standalone/components/ui/item.tsx +0 -201
  222. package/dist/standalone/dist/standalone/dist/standalone/components/ui/label.tsx +0 -20
  223. package/dist/standalone/dist/standalone/dist/standalone/components/ui/pagination.tsx +0 -133
  224. package/dist/standalone/dist/standalone/dist/standalone/components/ui/popover.tsx +0 -90
  225. package/dist/standalone/dist/standalone/dist/standalone/components/ui/progress.tsx +0 -83
  226. package/dist/standalone/dist/standalone/dist/standalone/components/ui/resizable.tsx +0 -55
  227. package/dist/standalone/dist/standalone/dist/standalone/components/ui/select.tsx +0 -199
  228. package/dist/standalone/dist/standalone/dist/standalone/components/ui/separator.tsx +0 -25
  229. package/dist/standalone/dist/standalone/dist/standalone/components/ui/sheet.tsx +0 -137
  230. package/dist/standalone/dist/standalone/dist/standalone/components/ui/sidebar.tsx +0 -723
  231. package/dist/standalone/dist/standalone/dist/standalone/components/ui/skeleton.tsx +0 -13
  232. package/dist/standalone/dist/standalone/dist/standalone/components/ui/slider.tsx +0 -56
  233. package/dist/standalone/dist/standalone/dist/standalone/components/ui/sonner.tsx +0 -54
  234. package/dist/standalone/dist/standalone/dist/standalone/components/ui/spinner.tsx +0 -17
  235. package/dist/standalone/dist/standalone/dist/standalone/components/ui/switch.tsx +0 -32
  236. package/dist/standalone/dist/standalone/dist/standalone/components/ui/table.tsx +0 -116
  237. package/dist/standalone/dist/standalone/dist/standalone/components/ui/tabs.tsx +0 -82
  238. package/dist/standalone/dist/standalone/dist/standalone/components/ui/textarea.tsx +0 -18
  239. package/dist/standalone/dist/standalone/dist/standalone/components/ui/tooltip.tsx +0 -66
  240. package/dist/standalone/dist/standalone/dist/standalone/components.json +0 -28
  241. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/AGENTS.md +0 -5
  242. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/CLAUDE.md +0 -1
  243. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/README.md +0 -74
  244. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/favicon.ico +0 -0
  245. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/globals.css +0 -128
  246. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/layout.tsx +0 -42
  247. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/page.tsx +0 -13
  248. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/setup/actions.ts +0 -113
  249. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/bin/lib/resolve-board.mjs +0 -108
  250. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/bin/taskmark.js +0 -232
  251. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/app-bar.tsx +0 -99
  252. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/attribution-avatars.tsx +0 -176
  253. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/child-progress-bar.tsx +0 -40
  254. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/date-tooltip.tsx +0 -93
  255. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/detail-children-list.tsx +0 -70
  256. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/epic-list.tsx +0 -363
  257. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/hide-completed-toggle.tsx +0 -39
  258. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/list-filters-bar.tsx +0 -78
  259. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/list-pagination.tsx +0 -124
  260. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/list-search-box.tsx +0 -59
  261. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/list-view-switcher.tsx +0 -74
  262. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/markdown-content.tsx +0 -91
  263. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/metric-stat-card.tsx +0 -55
  264. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/overall-work-items-list.tsx +0 -356
  265. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/parent-filter-combobox.tsx +0 -89
  266. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/parent-tag-badge.tsx +0 -46
  267. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/project-contributors-panel.tsx +0 -86
  268. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/project-status-metrics-strip.tsx +0 -88
  269. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/sortable-table-head.tsx +0 -69
  270. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/status-badge.tsx +0 -82
  271. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/story-list.tsx +0 -336
  272. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/tags-multiselect-filter.tsx +0 -70
  273. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/task-list.tsx +0 -307
  274. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/timeframe-filter.tsx +0 -676
  275. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/work-item-detail-body.tsx +0 -392
  276. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/work-item-sheet.tsx +0 -604
  277. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/work-items-list.tsx +0 -372
  278. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/brand-logo.tsx +0 -39
  279. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/setup/setup-wizard.tsx +0 -180
  280. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/alert-dialog.tsx +0 -187
  281. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/alert.tsx +0 -101
  282. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/avatar.tsx +0 -109
  283. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/badge.tsx +0 -52
  284. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/breadcrumb.tsx +0 -122
  285. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/button.tsx +0 -64
  286. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/calendar.tsx +0 -237
  287. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/card.tsx +0 -103
  288. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/combobox.tsx +0 -297
  289. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/dialog.tsx +0 -159
  290. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/field.tsx +0 -238
  291. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/input-group.tsx +0 -158
  292. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/input.tsx +0 -20
  293. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/item.tsx +0 -201
  294. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/label.tsx +0 -20
  295. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/pagination.tsx +0 -133
  296. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/popover.tsx +0 -90
  297. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/progress.tsx +0 -83
  298. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/resizable.tsx +0 -55
  299. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/select.tsx +0 -199
  300. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/separator.tsx +0 -25
  301. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/sheet.tsx +0 -137
  302. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/sidebar.tsx +0 -723
  303. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/skeleton.tsx +0 -13
  304. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/slider.tsx +0 -56
  305. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/sonner.tsx +0 -54
  306. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/spinner.tsx +0 -17
  307. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/switch.tsx +0 -32
  308. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/table.tsx +0 -116
  309. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/tabs.tsx +0 -82
  310. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/textarea.tsx +0 -18
  311. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/tooltip.tsx +0 -66
  312. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -28
  313. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/AGENTS.md +0 -5
  314. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/CLAUDE.md +0 -1
  315. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/README.md +0 -97
  316. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/board/actions.ts +0 -211
  317. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/favicon.ico +0 -0
  318. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/globals.css +0 -128
  319. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/layout.tsx +0 -42
  320. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/page.tsx +0 -13
  321. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/setup/actions.ts +0 -113
  322. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/app/setup/page.tsx +0 -62
  323. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/bin/lib/resolve-board.mjs +0 -108
  324. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/bin/taskmark.js +0 -230
  325. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/app-bar.tsx +0 -99
  326. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/attribution-avatars.tsx +0 -176
  327. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/child-progress-bar.tsx +0 -40
  328. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/date-tooltip.tsx +0 -93
  329. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/detail-children-list.tsx +0 -70
  330. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/epic-list.tsx +0 -363
  331. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/hide-completed-toggle.tsx +0 -39
  332. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/list-filters-bar.tsx +0 -78
  333. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/list-pagination.tsx +0 -124
  334. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/list-search-box.tsx +0 -59
  335. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/list-view-switcher.tsx +0 -74
  336. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/markdown-content.tsx +0 -91
  337. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/metric-stat-card.tsx +0 -55
  338. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/overall-work-items-list.tsx +0 -356
  339. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/parent-filter-combobox.tsx +0 -89
  340. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/parent-tag-badge.tsx +0 -46
  341. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/project-contributors-panel.tsx +0 -86
  342. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/project-status-metrics-strip.tsx +0 -88
  343. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/sortable-table-head.tsx +0 -69
  344. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/status-badge.tsx +0 -82
  345. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/story-list.tsx +0 -336
  346. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/tags-multiselect-filter.tsx +0 -70
  347. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/task-list.tsx +0 -307
  348. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/timeframe-filter.tsx +0 -676
  349. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/work-item-detail-body.tsx +0 -392
  350. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/work-item-sheet.tsx +0 -604
  351. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/board/work-items-list.tsx +0 -372
  352. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/brand-logo.tsx +0 -39
  353. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/setup/setup-wizard.tsx +0 -180
  354. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/alert-dialog.tsx +0 -187
  355. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/alert.tsx +0 -101
  356. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/avatar.tsx +0 -109
  357. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/badge.tsx +0 -52
  358. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/breadcrumb.tsx +0 -122
  359. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/button.tsx +0 -64
  360. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/calendar.tsx +0 -237
  361. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/card.tsx +0 -103
  362. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/combobox.tsx +0 -297
  363. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/dialog.tsx +0 -159
  364. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/field.tsx +0 -238
  365. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/input-group.tsx +0 -158
  366. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/input.tsx +0 -20
  367. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/item.tsx +0 -201
  368. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/label.tsx +0 -20
  369. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/pagination.tsx +0 -133
  370. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/popover.tsx +0 -90
  371. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/progress.tsx +0 -83
  372. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/resizable.tsx +0 -55
  373. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/select.tsx +0 -199
  374. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/separator.tsx +0 -25
  375. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/sheet.tsx +0 -137
  376. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/sidebar.tsx +0 -723
  377. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/skeleton.tsx +0 -13
  378. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/slider.tsx +0 -56
  379. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/sonner.tsx +0 -54
  380. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/spinner.tsx +0 -17
  381. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/switch.tsx +0 -32
  382. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/table.tsx +0 -116
  383. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/tabs.tsx +0 -82
  384. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/textarea.tsx +0 -18
  385. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components/ui/tooltip.tsx +0 -66
  386. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/components.json +0 -28
  387. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/eslint.config.mjs +0 -18
  388. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/project-metrics.ts +0 -296
  389. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/next.config.ts +0 -8
  390. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package-lock.json +0 -11201
  391. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -58
  392. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/server.js +0 -44
  393. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  394. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.tsbuildinfo +0 -1
  395. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/yarn.lock +0 -5265
  396. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/eslint.config.mjs +0 -18
  397. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/hooks/use-mobile.ts +0 -19
  398. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/hooks/use-paginated-rows.ts +0 -54
  399. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/hooks/use-persisted-hide-completed.ts +0 -29
  400. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/hooks/use-table-sort.ts +0 -22
  401. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/format-date.ts +0 -75
  402. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/format-duration.ts +0 -72
  403. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/format-list-date.ts +0 -2
  404. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/active-project.ts +0 -16
  405. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/autoconfig.ts +0 -118
  406. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/constants.ts +0 -43
  407. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/cookies.ts +0 -153
  408. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/count-leaves.ts +0 -204
  409. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/detail-types.ts +0 -131
  410. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/discover.ts +0 -153
  411. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/epic-types.ts +0 -41
  412. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/flat-work-item-types.ts +0 -122
  413. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/frontmatter.ts +0 -45
  414. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/general-epic.ts +0 -25
  415. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/hide-completed-cookie.ts +0 -40
  416. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/identity.ts +0 -182
  417. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/item-types.ts +0 -46
  418. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/list-filters.ts +0 -327
  419. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/list-view-mode.ts +0 -137
  420. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/pagination.ts +0 -51
  421. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-detail.ts +0 -227
  422. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-epics.ts +0 -153
  423. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-flat-lists.ts +0 -353
  424. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-items.ts +0 -318
  425. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-sections.ts +0 -135
  426. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-stories.ts +0 -237
  427. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/pick-folder.ts +0 -141
  428. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/project-label.ts +0 -11
  429. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/project-metrics.ts +0 -296
  430. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/projects.ts +0 -55
  431. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/resolve-work-item.ts +0 -219
  432. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/story-types.ts +0 -46
  433. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/table-sort.ts +0 -344
  434. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/timeframe-filters.ts +0 -258
  435. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/timing.ts +0 -32
  436. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/types.ts +0 -28
  437. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/validate.ts +0 -72
  438. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/workspace.ts +0 -53
  439. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib/utils.ts +0 -6
  440. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/next.config.ts +0 -8
  441. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package-lock.json +0 -11682
  442. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/package.json +0 -60
  443. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/postcss.config.mjs +0 -7
  444. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public/file.svg +0 -1
  445. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public/globe.svg +0 -1
  446. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public/next.svg +0 -1
  447. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public/tm_dark.png +0 -0
  448. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public/tm_light.png +0 -0
  449. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public/vercel.svg +0 -1
  450. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public/window.svg +0 -1
  451. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/scripts/prepare-standalone.mjs +0 -50
  452. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/server.js +0 -44
  453. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.json +0 -34
  454. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/tsconfig.tsbuildinfo +0 -1
  455. package/dist/standalone/dist/standalone/dist/standalone/dist/standalone/yarn.lock +0 -5265
  456. package/dist/standalone/dist/standalone/dist/standalone/eslint.config.mjs +0 -18
  457. package/dist/standalone/dist/standalone/dist/standalone/hooks/use-mobile.ts +0 -19
  458. package/dist/standalone/dist/standalone/dist/standalone/hooks/use-paginated-rows.ts +0 -54
  459. package/dist/standalone/dist/standalone/dist/standalone/hooks/use-persisted-hide-completed.ts +0 -29
  460. package/dist/standalone/dist/standalone/dist/standalone/hooks/use-table-sort.ts +0 -22
  461. package/dist/standalone/dist/standalone/dist/standalone/lib/format-date.ts +0 -75
  462. package/dist/standalone/dist/standalone/dist/standalone/lib/format-duration.ts +0 -72
  463. package/dist/standalone/dist/standalone/dist/standalone/lib/format-list-date.ts +0 -2
  464. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/active-project.ts +0 -16
  465. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/autoconfig.ts +0 -118
  466. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/constants.ts +0 -43
  467. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/cookies.ts +0 -153
  468. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/count-leaves.ts +0 -204
  469. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/detail-types.ts +0 -131
  470. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/discover.ts +0 -153
  471. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/epic-types.ts +0 -41
  472. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/flat-work-item-types.ts +0 -122
  473. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/frontmatter.ts +0 -45
  474. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/general-epic.ts +0 -25
  475. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/hide-completed-cookie.ts +0 -40
  476. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/identity.ts +0 -182
  477. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/item-types.ts +0 -46
  478. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/list-filters.ts +0 -327
  479. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/list-view-mode.ts +0 -137
  480. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/pagination.ts +0 -51
  481. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-detail.ts +0 -227
  482. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-epics.ts +0 -153
  483. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-flat-lists.ts +0 -353
  484. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-items.ts +0 -318
  485. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-sections.ts +0 -135
  486. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/parse-stories.ts +0 -237
  487. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/pick-folder.ts +0 -141
  488. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/project-label.ts +0 -11
  489. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/projects.ts +0 -55
  490. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/resolve-work-item.ts +0 -219
  491. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/story-types.ts +0 -46
  492. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/table-sort.ts +0 -344
  493. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/timeframe-filters.ts +0 -258
  494. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/timing.ts +0 -32
  495. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/types.ts +0 -28
  496. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/validate.ts +0 -72
  497. package/dist/standalone/dist/standalone/dist/standalone/lib/taskmark/workspace.ts +0 -53
  498. package/dist/standalone/dist/standalone/dist/standalone/lib/utils.ts +0 -6
  499. package/dist/standalone/dist/standalone/dist/standalone/next.config.ts +0 -8
  500. package/dist/standalone/dist/standalone/dist/standalone/package-lock.json +0 -11682
  501. package/dist/standalone/dist/standalone/dist/standalone/package.json +0 -60
  502. package/dist/standalone/dist/standalone/dist/standalone/postcss.config.mjs +0 -7
  503. package/dist/standalone/dist/standalone/dist/standalone/public/file.svg +0 -1
  504. package/dist/standalone/dist/standalone/dist/standalone/public/globe.svg +0 -1
  505. package/dist/standalone/dist/standalone/dist/standalone/public/next.svg +0 -1
  506. package/dist/standalone/dist/standalone/dist/standalone/public/tm_dark.png +0 -0
  507. package/dist/standalone/dist/standalone/dist/standalone/public/tm_light.png +0 -0
  508. package/dist/standalone/dist/standalone/dist/standalone/public/vercel.svg +0 -1
  509. package/dist/standalone/dist/standalone/dist/standalone/public/window.svg +0 -1
  510. package/dist/standalone/dist/standalone/dist/standalone/scripts/prepare-standalone.mjs +0 -50
  511. package/dist/standalone/dist/standalone/dist/standalone/server.js +0 -44
  512. package/dist/standalone/dist/standalone/dist/standalone/tsconfig.tsbuildinfo +0 -1
  513. package/dist/standalone/dist/standalone/dist/standalone/yarn.lock +0 -5265
  514. package/dist/standalone/dist/standalone/eslint.config.mjs +0 -18
  515. package/dist/standalone/dist/standalone/hooks/use-mobile.ts +0 -19
  516. package/dist/standalone/dist/standalone/hooks/use-paginated-rows.ts +0 -54
  517. package/dist/standalone/dist/standalone/hooks/use-persisted-hide-completed.ts +0 -29
  518. package/dist/standalone/dist/standalone/hooks/use-table-sort.ts +0 -22
  519. package/dist/standalone/dist/standalone/lib/format-date.ts +0 -75
  520. package/dist/standalone/dist/standalone/lib/format-duration.ts +0 -72
  521. package/dist/standalone/dist/standalone/lib/format-list-date.ts +0 -2
  522. package/dist/standalone/dist/standalone/lib/taskmark/active-project.ts +0 -16
  523. package/dist/standalone/dist/standalone/lib/taskmark/autoconfig.ts +0 -118
  524. package/dist/standalone/dist/standalone/lib/taskmark/constants.ts +0 -43
  525. package/dist/standalone/dist/standalone/lib/taskmark/cookies.ts +0 -153
  526. package/dist/standalone/dist/standalone/lib/taskmark/count-leaves.ts +0 -204
  527. package/dist/standalone/dist/standalone/lib/taskmark/detail-types.ts +0 -131
  528. package/dist/standalone/dist/standalone/lib/taskmark/discover.ts +0 -153
  529. package/dist/standalone/dist/standalone/lib/taskmark/epic-types.ts +0 -41
  530. package/dist/standalone/dist/standalone/lib/taskmark/flat-work-item-types.ts +0 -122
  531. package/dist/standalone/dist/standalone/lib/taskmark/frontmatter.ts +0 -45
  532. package/dist/standalone/dist/standalone/lib/taskmark/general-epic.ts +0 -25
  533. package/dist/standalone/dist/standalone/lib/taskmark/hide-completed-cookie.ts +0 -40
  534. package/dist/standalone/dist/standalone/lib/taskmark/identity.ts +0 -182
  535. package/dist/standalone/dist/standalone/lib/taskmark/item-types.ts +0 -46
  536. package/dist/standalone/dist/standalone/lib/taskmark/list-filters.ts +0 -327
  537. package/dist/standalone/dist/standalone/lib/taskmark/list-view-mode.ts +0 -137
  538. package/dist/standalone/dist/standalone/lib/taskmark/pagination.ts +0 -51
  539. package/dist/standalone/dist/standalone/lib/taskmark/parse-detail.ts +0 -227
  540. package/dist/standalone/dist/standalone/lib/taskmark/parse-epics.ts +0 -153
  541. package/dist/standalone/dist/standalone/lib/taskmark/parse-flat-lists.ts +0 -353
  542. package/dist/standalone/dist/standalone/lib/taskmark/parse-items.ts +0 -318
  543. package/dist/standalone/dist/standalone/lib/taskmark/parse-sections.ts +0 -135
  544. package/dist/standalone/dist/standalone/lib/taskmark/parse-stories.ts +0 -237
  545. package/dist/standalone/dist/standalone/lib/taskmark/pick-folder.ts +0 -141
  546. package/dist/standalone/dist/standalone/lib/taskmark/project-label.ts +0 -11
  547. package/dist/standalone/dist/standalone/lib/taskmark/project-metrics.ts +0 -296
  548. package/dist/standalone/dist/standalone/lib/taskmark/projects.ts +0 -55
  549. package/dist/standalone/dist/standalone/lib/taskmark/resolve-work-item.ts +0 -219
  550. package/dist/standalone/dist/standalone/lib/taskmark/story-types.ts +0 -46
  551. package/dist/standalone/dist/standalone/lib/taskmark/table-sort.ts +0 -344
  552. package/dist/standalone/dist/standalone/lib/taskmark/timeframe-filters.ts +0 -258
  553. package/dist/standalone/dist/standalone/lib/taskmark/timing.ts +0 -32
  554. package/dist/standalone/dist/standalone/lib/taskmark/types.ts +0 -28
  555. package/dist/standalone/dist/standalone/lib/taskmark/validate.ts +0 -72
  556. package/dist/standalone/dist/standalone/lib/taskmark/workspace.ts +0 -53
  557. package/dist/standalone/dist/standalone/lib/utils.ts +0 -6
  558. package/dist/standalone/dist/standalone/next.config.ts +0 -8
  559. package/dist/standalone/dist/standalone/package-lock.json +0 -11682
  560. package/dist/standalone/dist/standalone/package.json +0 -60
  561. package/dist/standalone/dist/standalone/postcss.config.mjs +0 -7
  562. package/dist/standalone/dist/standalone/public/file.svg +0 -1
  563. package/dist/standalone/dist/standalone/public/globe.svg +0 -1
  564. package/dist/standalone/dist/standalone/public/next.svg +0 -1
  565. package/dist/standalone/dist/standalone/public/tm_dark.png +0 -0
  566. package/dist/standalone/dist/standalone/public/tm_light.png +0 -0
  567. package/dist/standalone/dist/standalone/public/vercel.svg +0 -1
  568. package/dist/standalone/dist/standalone/public/window.svg +0 -1
  569. package/dist/standalone/dist/standalone/scripts/prepare-standalone.mjs +0 -50
  570. package/dist/standalone/dist/standalone/server.js +0 -44
  571. package/dist/standalone/dist/standalone/tsconfig.json +0 -34
  572. package/dist/standalone/dist/standalone/tsconfig.tsbuildinfo +0 -1
  573. package/dist/standalone/dist/standalone/yarn.lock +0 -5265
  574. package/dist/standalone/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +0 -6
  575. package/dist/standalone/node_modules/react/cjs/react.development.js +0 -1284
  576. /package/{dist/standalone/dist/standalone/app → app}/favicon.ico +0 -0
  577. /package/{dist/standalone/dist/standalone/app → app}/globals.css +0 -0
  578. /package/{dist/standalone/dist/standalone/app → app}/setup/actions.ts +0 -0
  579. /package/{dist/standalone/dist/standalone/components → components}/board/app-bar.tsx +0 -0
  580. /package/{dist/standalone/dist/standalone/components → components}/board/attribution-avatars.tsx +0 -0
  581. /package/{dist/standalone/dist/standalone/components → components}/board/child-progress-bar.tsx +0 -0
  582. /package/{dist/standalone/dist/standalone/components → components}/board/date-tooltip.tsx +0 -0
  583. /package/{dist/standalone/dist/standalone/components → components}/board/detail-children-list.tsx +0 -0
  584. /package/{dist/standalone/dist/standalone/components → components}/board/epic-list.tsx +0 -0
  585. /package/{dist/standalone/dist/standalone/components → components}/board/hide-completed-toggle.tsx +0 -0
  586. /package/{dist/standalone/dist/standalone/components → components}/board/list-filters-bar.tsx +0 -0
  587. /package/{dist/standalone/dist/standalone/components → components}/board/list-pagination.tsx +0 -0
  588. /package/{dist/standalone/dist/standalone/components → components}/board/list-search-box.tsx +0 -0
  589. /package/{dist/standalone/dist/standalone/components → components}/board/list-view-switcher.tsx +0 -0
  590. /package/{dist/standalone/dist/standalone/components → components}/board/markdown-content.tsx +0 -0
  591. /package/{dist/standalone/dist/standalone/components → components}/board/metric-stat-card.tsx +0 -0
  592. /package/{dist/standalone/dist/standalone/components → components}/board/overall-work-items-list.tsx +0 -0
  593. /package/{dist/standalone/dist/standalone/components → components}/board/parent-filter-combobox.tsx +0 -0
  594. /package/{dist/standalone/dist/standalone/components → components}/board/parent-tag-badge.tsx +0 -0
  595. /package/{dist/standalone/dist/standalone/components → components}/board/project-contributors-panel.tsx +0 -0
  596. /package/{dist/standalone/dist/standalone/components → components}/board/sortable-table-head.tsx +0 -0
  597. /package/{dist/standalone/dist/standalone/components → components}/board/status-badge.tsx +0 -0
  598. /package/{dist/standalone/dist/standalone/components → components}/board/story-list.tsx +0 -0
  599. /package/{dist/standalone/dist/standalone/components → components}/board/tags-multiselect-filter.tsx +0 -0
  600. /package/{dist/standalone/dist/standalone/components → components}/board/task-list.tsx +0 -0
  601. /package/{dist/standalone/dist/standalone/components → components}/board/timeframe-filter.tsx +0 -0
  602. /package/{dist/standalone/dist/standalone/components → components}/board/work-item-detail-body.tsx +0 -0
  603. /package/{dist/standalone/dist/standalone/components → components}/board/work-items-list.tsx +0 -0
  604. /package/{dist/standalone/dist/standalone/components → components}/brand-logo.tsx +0 -0
  605. /package/{dist/standalone/dist/standalone/components → components}/setup/setup-wizard.tsx +0 -0
  606. /package/{dist/standalone/dist/standalone/components → components}/ui/alert-dialog.tsx +0 -0
  607. /package/{dist/standalone/dist/standalone/components → components}/ui/alert.tsx +0 -0
  608. /package/{dist/standalone/dist/standalone/components → components}/ui/avatar.tsx +0 -0
  609. /package/{dist/standalone/dist/standalone/components → components}/ui/badge.tsx +0 -0
  610. /package/{dist/standalone/dist/standalone/components → components}/ui/breadcrumb.tsx +0 -0
  611. /package/{dist/standalone/dist/standalone/components → components}/ui/button.tsx +0 -0
  612. /package/{dist/standalone/dist/standalone/components → components}/ui/calendar.tsx +0 -0
  613. /package/{dist/standalone/dist/standalone/components → components}/ui/card.tsx +0 -0
  614. /package/{dist/standalone/dist/standalone/components → components}/ui/combobox.tsx +0 -0
  615. /package/{dist/standalone/dist/standalone/components → components}/ui/dialog.tsx +0 -0
  616. /package/{dist/standalone/dist/standalone/components → components}/ui/field.tsx +0 -0
  617. /package/{dist/standalone/dist/standalone/components → components}/ui/input-group.tsx +0 -0
  618. /package/{dist/standalone/dist/standalone/components → components}/ui/input.tsx +0 -0
  619. /package/{dist/standalone/dist/standalone/components → components}/ui/item.tsx +0 -0
  620. /package/{dist/standalone/dist/standalone/components → components}/ui/label.tsx +0 -0
  621. /package/{dist/standalone/dist/standalone/components → components}/ui/pagination.tsx +0 -0
  622. /package/{dist/standalone/dist/standalone/components → components}/ui/popover.tsx +0 -0
  623. /package/{dist/standalone/dist/standalone/components → components}/ui/progress.tsx +0 -0
  624. /package/{dist/standalone/dist/standalone/components → components}/ui/resizable.tsx +0 -0
  625. /package/{dist/standalone/dist/standalone/components → components}/ui/select.tsx +0 -0
  626. /package/{dist/standalone/dist/standalone/components → components}/ui/separator.tsx +0 -0
  627. /package/{dist/standalone/dist/standalone/components → components}/ui/sheet.tsx +0 -0
  628. /package/{dist/standalone/dist/standalone/components → components}/ui/sidebar.tsx +0 -0
  629. /package/{dist/standalone/dist/standalone/components → components}/ui/skeleton.tsx +0 -0
  630. /package/{dist/standalone/dist/standalone/components → components}/ui/slider.tsx +0 -0
  631. /package/{dist/standalone/dist/standalone/components → components}/ui/sonner.tsx +0 -0
  632. /package/{dist/standalone/dist/standalone/components → components}/ui/spinner.tsx +0 -0
  633. /package/{dist/standalone/dist/standalone/components → components}/ui/switch.tsx +0 -0
  634. /package/{dist/standalone/dist/standalone/components → components}/ui/table.tsx +0 -0
  635. /package/{dist/standalone/dist/standalone/components → components}/ui/tabs.tsx +0 -0
  636. /package/{dist/standalone/dist/standalone/components → components}/ui/textarea.tsx +0 -0
  637. /package/{dist/standalone/dist/standalone/components → components}/ui/tooltip.tsx +0 -0
  638. /package/{dist/standalone/dist/standalone/components.json → components.json} +0 -0
  639. /package/dist/standalone/.next/static/{yYMAgTQ-mApv2yRSEYmVO → w9yZK-dY-FmU0xmh175u4}/_buildManifest.js +0 -0
  640. /package/dist/standalone/.next/static/{yYMAgTQ-mApv2yRSEYmVO → w9yZK-dY-FmU0xmh175u4}/_clientMiddlewareManifest.js +0 -0
  641. /package/dist/standalone/.next/static/{yYMAgTQ-mApv2yRSEYmVO → w9yZK-dY-FmU0xmh175u4}/_ssgManifest.js +0 -0
  642. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/hooks → hooks}/use-mobile.ts +0 -0
  643. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/hooks → hooks}/use-paginated-rows.ts +0 -0
  644. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/hooks → hooks}/use-persisted-hide-completed.ts +0 -0
  645. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/hooks → hooks}/use-table-sort.ts +0 -0
  646. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/format-date.ts +0 -0
  647. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/format-duration.ts +0 -0
  648. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/format-list-date.ts +0 -0
  649. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/active-project.ts +0 -0
  650. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/autoconfig.ts +0 -0
  651. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/constants.ts +0 -0
  652. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/count-leaves.ts +0 -0
  653. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/detail-types.ts +0 -0
  654. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/discover.ts +0 -0
  655. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/epic-types.ts +0 -0
  656. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/flat-work-item-types.ts +0 -0
  657. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/frontmatter.ts +0 -0
  658. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/general-epic.ts +0 -0
  659. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/hide-completed-cookie.ts +0 -0
  660. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/identity.ts +0 -0
  661. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/item-types.ts +0 -0
  662. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/list-filters.ts +0 -0
  663. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/list-view-mode.ts +0 -0
  664. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/pagination.ts +0 -0
  665. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/parse-detail.ts +0 -0
  666. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/parse-epics.ts +0 -0
  667. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/parse-flat-lists.ts +0 -0
  668. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/parse-items.ts +0 -0
  669. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/parse-sections.ts +0 -0
  670. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/parse-stories.ts +0 -0
  671. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/pick-folder.ts +0 -0
  672. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/project-label.ts +0 -0
  673. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/projects.ts +0 -0
  674. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/resolve-work-item.ts +0 -0
  675. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/story-types.ts +0 -0
  676. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/table-sort.ts +0 -0
  677. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/timeframe-filters.ts +0 -0
  678. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/timing.ts +0 -0
  679. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/types.ts +0 -0
  680. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/validate.ts +0 -0
  681. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/taskmark/workspace.ts +0 -0
  682. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/lib → lib}/utils.ts +0 -0
  683. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/postcss.config.mjs → postcss.config.mjs} +0 -0
  684. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public → public}/file.svg +0 -0
  685. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public → public}/globe.svg +0 -0
  686. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public → public}/next.svg +0 -0
  687. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public → public}/tm_dark.png +0 -0
  688. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public → public}/tm_light.png +0 -0
  689. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public → public}/vercel.svg +0 -0
  690. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/public → public}/window.svg +0 -0
  691. /package/{dist/standalone/dist/standalone/dist/standalone/dist/standalone/dist/standalone/scripts → scripts}/prepare-standalone.mjs +0 -0
@@ -0,0 +1,198 @@
1
+ import fs from "node:fs"
2
+ import path from "node:path"
3
+
4
+ import { loadWorkItemDetailSync } from "@/lib/taskmark/detail-load"
5
+ import type { WorkItemRef } from "@/lib/taskmark/detail-types"
6
+ import { parseEpicsForProject } from "@/lib/taskmark/parse-epics"
7
+ import { parseWorkItemsForEpic, parseWorkItemsViewForProject } from "@/lib/taskmark/parse-flat-lists"
8
+ import { parseItemsForStory } from "@/lib/taskmark/parse-items"
9
+ import {
10
+ collectCompletedLeafPointSamples,
11
+ collectMetricLeaves,
12
+ computeProjectStatusMetrics,
13
+ } from "@/lib/taskmark/project-metrics"
14
+ import {
15
+ type BoardSnapshot,
16
+ storyKey,
17
+ } from "@/lib/taskmark/snapshot-types"
18
+ import type { DiscoveredProject } from "@/lib/taskmark/types"
19
+ import { loadWorkspace } from "@/lib/taskmark/workspace"
20
+ import { asString, extractFrontmatter } from "@/lib/taskmark/frontmatter"
21
+
22
+ function toRef(
23
+ meta: { id: string; title: string; type: string },
24
+ filePath: string
25
+ ): WorkItemRef {
26
+ const type = meta.type.toLowerCase()
27
+ if (type === "epic") {
28
+ return { kind: "epic", id: meta.id, title: meta.title, filePath }
29
+ }
30
+ if (type === "story") {
31
+ return { kind: "story", id: meta.id, title: meta.title, filePath }
32
+ }
33
+ const itemType = type === "bug" ? "bug" : "task"
34
+ return {
35
+ kind: "item",
36
+ id: meta.id,
37
+ title: meta.title,
38
+ filePath,
39
+ itemType,
40
+ }
41
+ }
42
+
43
+ function readMeta(
44
+ filePath: string
45
+ ): { id: string; title: string; type: string } | null {
46
+ try {
47
+ const raw = fs.readFileSync(filePath, "utf8")
48
+ const fm = extractFrontmatter(raw)
49
+ if (!fm) return null
50
+ const id = asString(fm.id)
51
+ const title = asString(fm.title)
52
+ if (!id) return null
53
+ return { id, title, type: asString(fm.type).toLowerCase() }
54
+ } catch {
55
+ return null
56
+ }
57
+ }
58
+
59
+ /** Walk one board and collect every work-item ref. */
60
+ export function listAllWorkItemRefs(boardPath: string): WorkItemRef[] {
61
+ const refs: WorkItemRef[] = []
62
+ const epicsDir = path.join(boardPath, "epics")
63
+ let epicEntries: fs.Dirent[]
64
+ try {
65
+ epicEntries = fs.readdirSync(epicsDir, { withFileTypes: true })
66
+ } catch {
67
+ return refs
68
+ }
69
+
70
+ for (const epicEntry of epicEntries) {
71
+ if (!epicEntry.isDirectory() || epicEntry.name.startsWith(".")) continue
72
+ const epicDir = path.join(epicsDir, epicEntry.name)
73
+
74
+ const epicFile = path.join(epicDir, "epic.md")
75
+ if (fs.existsSync(epicFile)) {
76
+ const meta = readMeta(epicFile)
77
+ if (meta) refs.push(toRef(meta, epicFile))
78
+ }
79
+
80
+ const epicItemsDir = path.join(epicDir, "items")
81
+ try {
82
+ for (const name of fs.readdirSync(epicItemsDir)) {
83
+ if (!name.endsWith(".md") || name.startsWith(".")) continue
84
+ const filePath = path.join(epicItemsDir, name)
85
+ const meta = readMeta(filePath)
86
+ if (meta) refs.push(toRef(meta, filePath))
87
+ }
88
+ } catch {
89
+ /* no epic-direct items */
90
+ }
91
+
92
+ const storiesDir = path.join(epicDir, "stories")
93
+ let storyEntries: fs.Dirent[]
94
+ try {
95
+ storyEntries = fs.readdirSync(storiesDir, { withFileTypes: true })
96
+ } catch {
97
+ continue
98
+ }
99
+
100
+ for (const storyEntry of storyEntries) {
101
+ if (!storyEntry.isDirectory() || storyEntry.name.startsWith(".")) continue
102
+ const storyDir = path.join(storiesDir, storyEntry.name)
103
+ const storyFile = path.join(storyDir, "story.md")
104
+ if (fs.existsSync(storyFile)) {
105
+ const meta = readMeta(storyFile)
106
+ if (meta) refs.push(toRef(meta, storyFile))
107
+ }
108
+
109
+ const storyItemsDir = path.join(storyDir, "items")
110
+ try {
111
+ for (const name of fs.readdirSync(storyItemsDir)) {
112
+ if (!name.endsWith(".md") || name.startsWith(".")) continue
113
+ const filePath = path.join(storyItemsDir, name)
114
+ const meta = readMeta(filePath)
115
+ if (meta) refs.push(toRef(meta, filePath))
116
+ }
117
+ } catch {
118
+ /* no story items */
119
+ }
120
+ }
121
+ }
122
+
123
+ return refs
124
+ }
125
+
126
+ export function buildBoardSnapshot(
127
+ projects: DiscoveredProject[],
128
+ active: DiscoveredProject
129
+ ): BoardSnapshot {
130
+ const epics = parseEpicsForProject(active)
131
+ const workItemsByEpic: BoardSnapshot["workItemsByEpic"] = {}
132
+ const itemsByStory: BoardSnapshot["itemsByStory"] = {}
133
+
134
+ for (const epic of epics.epics) {
135
+ const epicList = parseWorkItemsForEpic(active, epic.id, epic.title)
136
+ workItemsByEpic[epic.id] = epicList
137
+ for (const row of epicList.rows) {
138
+ if (row.kind !== "story") continue
139
+ itemsByStory[storyKey(epic.id, row.id)] = parseItemsForStory(
140
+ active,
141
+ epic.id,
142
+ row.id
143
+ )
144
+ }
145
+ }
146
+
147
+ const refs = listAllWorkItemRefs(active.boardPath)
148
+ const refsById: BoardSnapshot["refsById"] = {}
149
+ const detailsByPath: BoardSnapshot["detailsByPath"] = {}
150
+
151
+ for (const ref of refs) {
152
+ refsById[ref.id] = ref
153
+ const hint =
154
+ ref.kind === "epic" ? "epic" : ref.kind === "story" ? "story" : "item"
155
+ const detail = loadWorkItemDetailSync(projects, ref.filePath, hint)
156
+ if (detail.ok) {
157
+ detailsByPath[ref.filePath] = detail.detail
158
+ }
159
+ }
160
+
161
+ const hideCompletedDefaults = {
162
+ epics: false,
163
+ stories: false,
164
+ tasks: false,
165
+ overallWorkItems: false,
166
+ workItems: false,
167
+ } as const
168
+
169
+ return {
170
+ version: 1,
171
+ builtAt: new Date().toISOString(),
172
+ project: active,
173
+ projects,
174
+ epics,
175
+ workItemsView: parseWorkItemsViewForProject(active),
176
+ workItemsByEpic,
177
+ itemsByStory,
178
+ statusMetrics: computeProjectStatusMetrics(active),
179
+ countableCompletions: collectCompletedLeafPointSamples(
180
+ collectMetricLeaves(active)
181
+ ),
182
+ hideCompletedDefaults: { ...hideCompletedDefaults },
183
+ detailsByPath,
184
+ refsById,
185
+ }
186
+ }
187
+
188
+ /** Build snapshot from env/cwd autoconfig (no cookies). */
189
+ export function buildBoardSnapshotFromEnv(): BoardSnapshot {
190
+ const workspace = loadWorkspace([])
191
+ if (workspace.projects.length === 0) {
192
+ throw new Error(
193
+ "No Taskmark board found. Set TASKMARK_BOARD or run from a board / product root."
194
+ )
195
+ }
196
+ const active = workspace.projects[0]!
197
+ return buildBoardSnapshot(workspace.projects, active)
198
+ }
@@ -11,8 +11,10 @@ import {
11
11
  type HideCompletedCookieKey,
12
12
  } from "@/lib/taskmark/constants"
13
13
  import { parseHideCompletedCookieValue } from "@/lib/taskmark/hide-completed-cookie"
14
+ import { isStaticRuntime } from "@/lib/taskmark/static-mode"
14
15
 
15
16
  async function readEncodedCookie(name: string): Promise<string | null> {
17
+ if (isStaticRuntime()) return null
16
18
  const store = await cookies()
17
19
  const value = store.get(name)?.value
18
20
  if (!value) return null
@@ -56,6 +58,7 @@ export async function getMasterFoldersCookie(): Promise<string[]> {
56
58
  }
57
59
 
58
60
  export async function setMasterFoldersCookie(masters: string[]): Promise<void> {
61
+ if (isStaticRuntime()) return
59
62
  const unique = [
60
63
  ...new Set(masters.map((m) => m.trim()).filter(Boolean)),
61
64
  ]
@@ -90,6 +93,7 @@ export async function addMasterFolderCookie(masterPath: string): Promise<string[
90
93
  }
91
94
 
92
95
  export async function clearMasterFoldersCookie(): Promise<void> {
96
+ if (isStaticRuntime()) return
93
97
  const store = await cookies()
94
98
  store.delete(MASTER_FOLDERS_COOKIE)
95
99
  store.delete(MASTER_FOLDER_COOKIE)
@@ -106,6 +110,7 @@ export async function getActiveProjectCookie(): Promise<string | null> {
106
110
  }
107
111
 
108
112
  export async function setActiveProjectCookie(projectId: string): Promise<void> {
113
+ if (isStaticRuntime()) return
109
114
  const store = await cookies()
110
115
  store.set(ACTIVE_PROJECT_COOKIE, encodeCookieValue(projectId), {
111
116
  path: "/",
@@ -116,6 +121,7 @@ export async function setActiveProjectCookie(projectId: string): Promise<void> {
116
121
  }
117
122
 
118
123
  export async function clearActiveProjectCookie(): Promise<void> {
124
+ if (isStaticRuntime()) return
119
125
  const store = await cookies()
120
126
  store.delete(ACTIVE_PROJECT_COOKIE)
121
127
  }
@@ -123,6 +129,7 @@ export async function clearActiveProjectCookie(): Promise<void> {
123
129
  export async function getHideCompletedCookie(
124
130
  key: HideCompletedCookieKey
125
131
  ): Promise<boolean> {
132
+ if (isStaticRuntime()) return false
126
133
  const store = await cookies()
127
134
  return parseHideCompletedCookieValue(
128
135
  store.get(HIDE_COMPLETED_COOKIES[key])?.value
@@ -132,6 +139,15 @@ export async function getHideCompletedCookie(
132
139
  export async function getHideCompletedCookies(): Promise<
133
140
  Record<HideCompletedCookieKey, boolean>
134
141
  > {
142
+ if (isStaticRuntime()) {
143
+ return {
144
+ epics: false,
145
+ stories: false,
146
+ tasks: false,
147
+ overallWorkItems: false,
148
+ workItems: false,
149
+ }
150
+ }
135
151
  const store = await cookies()
136
152
  return {
137
153
  epics: parseHideCompletedCookieValue(
@@ -1,16 +1,14 @@
1
- "use server"
2
-
1
+ /**
2
+ * Shared board detail loading (used by server actions and static snapshot).
3
+ */
3
4
  import fs from "node:fs"
4
5
  import path from "node:path"
5
6
 
6
- import { getActiveProjectCookie, getMasterFoldersCookie } from "@/lib/taskmark/cookies"
7
- import { resolveActiveProject } from "@/lib/taskmark/active-project"
8
7
  import { parseWorkItemDetailFromRaw } from "@/lib/taskmark/parse-detail"
9
8
  import type {
10
9
  DetailChildItem,
11
10
  WorkItemDetail,
12
11
  WorkItemDetailResult,
13
- WorkItemRef,
14
12
  } from "@/lib/taskmark/detail-types"
15
13
  import { parseItemsForEpic, parseItemsForStory } from "@/lib/taskmark/parse-items"
16
14
  import { parseStoriesForEpic } from "@/lib/taskmark/parse-stories"
@@ -19,14 +17,14 @@ import {
19
17
  findWorkItemInProjects,
20
18
  findWorkItemOnBoard,
21
19
  } from "@/lib/taskmark/resolve-work-item"
22
- import { loadConfiguredWorkspace } from "@/lib/taskmark/workspace"
20
+ import type { WorkItemRef } from "@/lib/taskmark/detail-types"
23
21
 
24
22
  function isPathInside(parent: string, child: string): boolean {
25
23
  const rel = path.relative(parent, child)
26
24
  return rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel))
27
25
  }
28
26
 
29
- function findProjectForFile(
27
+ export function findProjectForFile(
30
28
  projects: DiscoveredProject[],
31
29
  filePath: string
32
30
  ): DiscoveredProject | null {
@@ -37,7 +35,7 @@ function findProjectForFile(
37
35
  )
38
36
  }
39
37
 
40
- function attachChildren(
38
+ export function attachChildren(
41
39
  detail: WorkItemDetail,
42
40
  project: DiscoveredProject
43
41
  ): WorkItemDetail {
@@ -89,35 +87,64 @@ function attachChildren(
89
87
  return detail
90
88
  }
91
89
 
92
- export type ResolveWorkItemResult =
93
- | { ok: true; ref: WorkItemRef }
94
- | { ok: false; itemId: string; message: string }
90
+ export function loadWorkItemDetailSync(
91
+ projects: DiscoveredProject[],
92
+ filePath: string,
93
+ hint?: "epic" | "story" | "item"
94
+ ): WorkItemDetailResult {
95
+ if (!filePath || typeof filePath !== "string") {
96
+ return { ok: false, filePath: filePath ?? "", message: "Missing file path" }
97
+ }
95
98
 
96
- /**
97
- * Resolve a shareable work item id (E-/S-/T-/B-) to a WorkItemRef.
98
- *
99
- * - `withinFilePath`: only search the board that contains that file (in-sheet nav).
100
- * - otherwise: only search the **active** project board (shared `?item=` links).
101
- */
102
- export async function resolveWorkItemById(
99
+ const resolved = path.resolve(filePath)
100
+ if (!resolved.endsWith(".md")) {
101
+ return { ok: false, filePath: resolved, message: "Not a markdown file" }
102
+ }
103
+
104
+ const project = findProjectForFile(projects, resolved)
105
+ if (!project) {
106
+ return {
107
+ ok: false,
108
+ filePath: resolved,
109
+ message: "File is outside configured Taskmark boards",
110
+ }
111
+ }
112
+
113
+ let raw: string
114
+ try {
115
+ raw = fs.readFileSync(resolved, "utf8")
116
+ } catch (err) {
117
+ return {
118
+ ok: false,
119
+ filePath: resolved,
120
+ message: err instanceof Error ? err.message : "Failed to read file",
121
+ }
122
+ }
123
+
124
+ const result = parseWorkItemDetailFromRaw(raw, resolved, hint)
125
+ if (!result.ok) return result
126
+
127
+ return { ok: true, detail: attachChildren(result.detail, project) }
128
+ }
129
+
130
+ export function resolveWorkItemByIdSync(
131
+ projects: DiscoveredProject[],
103
132
  itemId: string,
104
- options?: { withinFilePath?: string | null }
105
- ): Promise<ResolveWorkItemResult> {
133
+ options?: {
134
+ withinFilePath?: string | null
135
+ activeBoardPath?: string | null
136
+ }
137
+ ):
138
+ | { ok: true; ref: WorkItemRef }
139
+ | { ok: false; itemId: string; message: string } {
106
140
  const id = typeof itemId === "string" ? itemId.trim() : ""
107
141
  if (!id) {
108
142
  return { ok: false, itemId: "", message: "Missing work item id" }
109
143
  }
110
144
 
111
- const masters = await getMasterFoldersCookie()
112
- if (masters.length === 0) {
113
- return { ok: false, itemId: id, message: "No workspace configured" }
114
- }
115
-
116
- const workspace = loadConfiguredWorkspace(masters)
117
145
  const within = options?.withinFilePath?.trim() || null
118
-
119
146
  if (within) {
120
- const project = findProjectForFile(workspace.projects, within)
147
+ const project = findProjectForFile(projects, within)
121
148
  if (!project) {
122
149
  return {
123
150
  ok: false,
@@ -136,18 +163,9 @@ export async function resolveWorkItemById(
136
163
  return { ok: true, ref }
137
164
  }
138
165
 
139
- const savedActiveId = await getActiveProjectCookie()
140
- const active = resolveActiveProject(workspace.projects, savedActiveId)
141
- if (!active) {
142
- return {
143
- ok: false,
144
- itemId: id,
145
- message: "No active Taskmark project selected",
146
- }
147
- }
148
-
149
- const resolved = findWorkItemInProjects(workspace.projects, id, {
150
- boardPath: active.boardPath,
166
+ const boardPath = options?.activeBoardPath?.trim() || null
167
+ const resolved = findWorkItemInProjects(projects, id, {
168
+ boardPath: boardPath ?? undefined,
151
169
  })
152
170
  if (!resolved) {
153
171
  return {
@@ -157,55 +175,6 @@ export async function resolveWorkItemById(
157
175
  }
158
176
  }
159
177
 
160
- const { boardPath: _boardPath, projectId: _projectId, ...ref } = resolved
178
+ const { boardPath: _b, projectId: _p, ...ref } = resolved
161
179
  return { ok: true, ref }
162
180
  }
163
-
164
- /**
165
- * Load and parse a full work item detail from an absolute markdown path.
166
- * Path must resolve under a configured project's boardPath.
167
- */
168
- export async function loadWorkItemDetail(
169
- filePath: string,
170
- hint?: "epic" | "story" | "item"
171
- ): Promise<WorkItemDetailResult> {
172
- if (!filePath || typeof filePath !== "string") {
173
- return { ok: false, filePath: filePath ?? "", message: "Missing file path" }
174
- }
175
-
176
- const resolved = path.resolve(filePath)
177
- if (!resolved.endsWith(".md")) {
178
- return { ok: false, filePath: resolved, message: "Not a markdown file" }
179
- }
180
-
181
- const masters = await getMasterFoldersCookie()
182
- if (masters.length === 0) {
183
- return { ok: false, filePath: resolved, message: "No workspace configured" }
184
- }
185
-
186
- const workspace = loadConfiguredWorkspace(masters)
187
- const project = findProjectForFile(workspace.projects, resolved)
188
- if (!project) {
189
- return {
190
- ok: false,
191
- filePath: resolved,
192
- message: "File is outside configured Taskmark boards",
193
- }
194
- }
195
-
196
- let raw: string
197
- try {
198
- raw = fs.readFileSync(resolved, "utf8")
199
- } catch (err) {
200
- return {
201
- ok: false,
202
- filePath: resolved,
203
- message: err instanceof Error ? err.message : "Failed to read file",
204
- }
205
- }
206
-
207
- const result = parseWorkItemDetailFromRaw(raw, resolved, hint)
208
- if (!result.ok) return result
209
-
210
- return { ok: true, detail: attachChildren(result.detail, project) }
211
- }
@@ -0,0 +1,11 @@
1
+ import "server-only"
2
+ import fs from "node:fs"
3
+ import path from "node:path"
4
+
5
+ import type { BoardSnapshot } from "@/lib/taskmark/snapshot-types"
6
+
7
+ export function loadSnapshotFromPublic(): BoardSnapshot {
8
+ const file = path.join(process.cwd(), "public", "taskmark-snapshot.json")
9
+ const raw = fs.readFileSync(file, "utf8")
10
+ return JSON.parse(raw) as BoardSnapshot
11
+ }
@@ -0,0 +1,21 @@
1
+ import type { ContributorIdentity } from "@/lib/taskmark/identity"
2
+
3
+ /** Shared metrics shape — safe for client components (no fs). */
4
+ export type ProjectStatusMetrics = {
5
+ totalWorkItems: number
6
+ completeWorkItems: number
7
+ /** Story points completed in the current ISO week from done task/bug leaves. */
8
+ currentWeekPointsDone: number
9
+ /** Average story points completed per ISO week over the 90-day window; null if no done tasks/bugs. */
10
+ currentSpeedPtsPerWeek: number | null
11
+ /** Weeks included in the speed average (0 when no speed). */
12
+ speedWeekCount: number
13
+ contributors: ContributorIdentity[]
14
+ }
15
+
16
+ /** Format average pts/week for display (one decimal when needed). */
17
+ export function formatSpeedPtsPerWeek(value: number | null): string {
18
+ if (value == null || !Number.isFinite(value)) return "—"
19
+ const rounded = Math.round(value * 10) / 10
20
+ return Number.isInteger(rounded) ? String(rounded) : rounded.toFixed(1)
21
+ }
@@ -18,6 +18,12 @@ import {
18
18
  type SolvedCompletionSample,
19
19
  } from "@/lib/taskmark/timeframe-filters"
20
20
 
21
+ export type {
22
+ ProjectStatusMetrics,
23
+ } from "@/lib/taskmark/project-metrics-shared"
24
+ export { formatSpeedPtsPerWeek } from "@/lib/taskmark/project-metrics-shared"
25
+ import type { ProjectStatusMetrics } from "@/lib/taskmark/project-metrics-shared"
26
+
21
27
  export type MetricLeafKind = "epic" | "story" | "task" | "bug"
22
28
 
23
29
  export type MetricLeaf = {
@@ -30,18 +36,6 @@ export type MetricLeaf = {
30
36
  resolvers: ContributorIdentity[]
31
37
  }
32
38
 
33
- export type ProjectStatusMetrics = {
34
- totalWorkItems: number
35
- completeWorkItems: number
36
- /** Story points completed in the current ISO week from done task/bug leaves. */
37
- currentWeekPointsDone: number
38
- /** Average story points completed per ISO week over the 90-day window; null if no done tasks/bugs. */
39
- currentSpeedPtsPerWeek: number | null
40
- /** Weeks included in the speed average (0 when no speed). */
41
- speedWeekCount: number
42
- contributors: ContributorIdentity[]
43
- }
44
-
45
39
  const COUNTABLE_KINDS = new Set<MetricLeafKind>(["story", "task", "bug"])
46
40
 
47
41
  function emailKey(email: string, name: string): string {
@@ -288,9 +282,3 @@ export function computeProjectStatusMetrics(
288
282
  }
289
283
  }
290
284
 
291
- /** Format average pts/week for display (one decimal when needed). */
292
- export function formatSpeedPtsPerWeek(value: number | null): string {
293
- if (value == null || !Number.isFinite(value)) return "—"
294
- const rounded = Math.round(value * 10) / 10
295
- return Number.isInteger(rounded) ? String(rounded) : rounded.toFixed(1)
296
- }
@@ -0,0 +1,67 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+
5
+ import type { WorkItemDetail, WorkItemDetailResult, WorkItemRef } from "@/lib/taskmark/detail-types"
6
+ import {
7
+ SNAPSHOT_PATH,
8
+ type BoardSnapshot,
9
+ } from "@/lib/taskmark/snapshot-types"
10
+
11
+ let cached: BoardSnapshot | null = null
12
+ let inflight: Promise<BoardSnapshot> | null = null
13
+
14
+ export async function getBoardSnapshot(): Promise<BoardSnapshot> {
15
+ if (cached) return cached
16
+ if (!inflight) {
17
+ inflight = fetch(SNAPSHOT_PATH)
18
+ .then((r) => {
19
+ if (!r.ok) throw new Error(`Failed to load ${SNAPSHOT_PATH}`)
20
+ return r.json() as Promise<BoardSnapshot>
21
+ })
22
+ .then((snap) => {
23
+ cached = snap
24
+ return snap
25
+ })
26
+ .finally(() => {
27
+ inflight = null
28
+ })
29
+ }
30
+ return inflight
31
+ }
32
+
33
+ export function seedBoardSnapshot(snapshot: BoardSnapshot): void {
34
+ cached = snapshot
35
+ }
36
+
37
+ export async function loadWorkItemDetailFromSnapshot(
38
+ filePath: string
39
+ ): Promise<WorkItemDetailResult> {
40
+ const snap = await getBoardSnapshot()
41
+ const detail = snap.detailsByPath[filePath]
42
+ if (!detail) {
43
+ return {
44
+ ok: false,
45
+ filePath,
46
+ message: "Work item detail not found in static snapshot",
47
+ }
48
+ }
49
+ return { ok: true, detail }
50
+ }
51
+
52
+ export async function resolveWorkItemByIdFromSnapshot(
53
+ itemId: string
54
+ ): Promise<
55
+ | { ok: true; ref: WorkItemRef }
56
+ | { ok: false; itemId: string; message: string }
57
+ > {
58
+ const id = itemId.trim()
59
+ const snap = await getBoardSnapshot()
60
+ const ref = snap.refsById[id]
61
+ if (!ref) {
62
+ return { ok: false, itemId: id, message: `Work item ${id} was not found` }
63
+ }
64
+ return { ok: true, ref }
65
+ }
66
+
67
+ export type { WorkItemDetail }
@@ -0,0 +1,37 @@
1
+ import type { HideCompletedCookieKey } from "@/lib/taskmark/constants"
2
+ import type { WorkItemDetail, WorkItemRef } from "@/lib/taskmark/detail-types"
3
+ import type { ProjectEpicList } from "@/lib/taskmark/epic-types"
4
+ import type {
5
+ EpicWorkItemsList,
6
+ WorkItemsViewList,
7
+ } from "@/lib/taskmark/flat-work-item-types"
8
+ import type { StoryItemList } from "@/lib/taskmark/item-types"
9
+ import type { ProjectStatusMetrics } from "@/lib/taskmark/project-metrics-shared"
10
+ import type { SolvedCompletionSample } from "@/lib/taskmark/timeframe-filters"
11
+ import type { DiscoveredProject } from "@/lib/taskmark/types"
12
+
13
+ export const SNAPSHOT_PATH = "/taskmark-snapshot.json"
14
+
15
+ export type BoardSnapshot = {
16
+ version: 1
17
+ builtAt: string
18
+ project: DiscoveredProject
19
+ projects: DiscoveredProject[]
20
+ epics: ProjectEpicList
21
+ workItemsView: WorkItemsViewList
22
+ /** Epic id → overall work-items list for that epic */
23
+ workItemsByEpic: Record<string, EpicWorkItemsList>
24
+ /** `${epicId}::${storyId}` → sub-task list */
25
+ itemsByStory: Record<string, StoryItemList>
26
+ statusMetrics: ProjectStatusMetrics
27
+ countableCompletions: SolvedCompletionSample[]
28
+ hideCompletedDefaults: Record<HideCompletedCookieKey, boolean>
29
+ /** Absolute file path → detail (children attached) */
30
+ detailsByPath: Record<string, WorkItemDetail>
31
+ /** Work item id → ref for sheet open-by-id */
32
+ refsById: Record<string, WorkItemRef>
33
+ }
34
+
35
+ export function storyKey(epicId: string, storyId: string): string {
36
+ return `${epicId}::${storyId}`
37
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Static hosting mode (Vercel / `taskmark build`).
3
+ * Build: TASKMARK_STATIC=1
4
+ * Runtime (client + baked HTML): NEXT_PUBLIC_TASKMARK_STATIC=1
5
+ */
6
+ export function isStaticBuild(): boolean {
7
+ return process.env.TASKMARK_STATIC === "1"
8
+ }
9
+
10
+ export function isStaticRuntime(): boolean {
11
+ return (
12
+ process.env.NEXT_PUBLIC_TASKMARK_STATIC === "1" ||
13
+ process.env.TASKMARK_STATIC === "1"
14
+ )
15
+ }
@@ -1,8 +1,19 @@
1
1
  import type { NextConfig } from "next"
2
2
 
3
+ const staticExport = process.env.TASKMARK_STATIC === "1"
4
+
3
5
  const nextConfig: NextConfig = {
4
- // Ship a relocatable Node server for `npx taskmark serve` (see bin/ + scripts/).
5
- output: "standalone",
6
+ // `taskmark serve` uses standalone; `taskmark build` (static hosting) uses export.
7
+ output: staticExport ? "export" : "standalone",
8
+ images: staticExport ? { unoptimized: true } : undefined,
9
+ // Static build stubs server actions; skip tsc against those temporary stubs.
10
+ typescript: staticExport ? { ignoreBuildErrors: true } : undefined,
11
+ // Avoid tracing prior dist/standalone into itself (nested copies).
12
+ outputFileTracingExcludes: staticExport
13
+ ? undefined
14
+ : {
15
+ "*": ["./dist/**/*", "./out/**/*"],
16
+ },
6
17
  }
7
18
 
8
19
  export default nextConfig