@ciridae/ui 0.10.0 → 0.11.2

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 (537) hide show
  1. package/dist/components/blocks/admin-users-table.js +7 -7
  2. package/dist/components/blocks/comment-composer.d.ts +1 -1
  3. package/dist/components/blocks/comment-composer.js +23 -5
  4. package/dist/components/blocks/comment-item.d.ts +1 -1
  5. package/dist/components/blocks/comment-item.js +4 -4
  6. package/dist/components/blocks/comment-thread.d.ts +2 -2
  7. package/dist/components/blocks/comment-thread.js +35 -5
  8. package/dist/components/blocks/copy-field.js +3 -3
  9. package/dist/components/blocks/feedback-center-comments.d.ts +2 -2
  10. package/dist/components/blocks/feedback-center-comments.js +3 -3
  11. package/dist/components/blocks/feedback-center-footer.d.ts +2 -2
  12. package/dist/components/blocks/feedback-center-footer.js +2 -2
  13. package/dist/components/blocks/feedback-center-sheet-parts.d.ts +5 -5
  14. package/dist/components/blocks/feedback-center-sheet-parts.js +7 -7
  15. package/dist/components/blocks/feedback-center-sheet.d.ts +5 -5
  16. package/dist/components/blocks/feedback-center-sheet.js +5 -5
  17. package/dist/components/blocks/feedback-composer-parts.d.ts +1 -1
  18. package/dist/components/blocks/feedback-composer-parts.js +4 -4
  19. package/dist/components/blocks/feedback-composer-types.d.ts +1 -1
  20. package/dist/components/blocks/feedback-composer.d.ts +1 -1
  21. package/dist/components/blocks/feedback-composer.js +8 -8
  22. package/dist/components/blocks/feedback-date-format.d.ts +2 -2
  23. package/dist/components/blocks/feedback-date-format.js +2 -2
  24. package/dist/components/blocks/feedback-detail-sheet.d.ts +1 -1
  25. package/dist/components/blocks/feedback-detail-sheet.js +14 -14
  26. package/dist/components/blocks/feedback-emergency-fields.d.ts +1 -1
  27. package/dist/components/blocks/feedback-emergency-fields.js +7 -7
  28. package/dist/components/blocks/feedback-metrics.d.ts +1 -1
  29. package/dist/components/blocks/feedback-metrics.js +1 -1
  30. package/dist/components/blocks/feedback-sheet.d.ts +1 -1
  31. package/dist/components/blocks/feedback-sheet.js +4 -4
  32. package/dist/components/blocks/feedback-status-badge.d.ts +1 -1
  33. package/dist/components/blocks/feedback-status-badge.js +2 -2
  34. package/dist/components/blocks/feedback-table-row.d.ts +1 -1
  35. package/dist/components/blocks/feedback-table-row.js +8 -8
  36. package/dist/components/blocks/feedback-table-sort.d.ts +2 -2
  37. package/dist/components/blocks/feedback-table.d.ts +2 -2
  38. package/dist/components/blocks/feedback-table.js +5 -5
  39. package/dist/components/blocks/feedback-tracking-types.d.ts +7 -1
  40. package/dist/components/blocks/feedback-triage-timeline.d.ts +11 -0
  41. package/dist/components/blocks/feedback-triage-timeline.js +17 -0
  42. package/dist/components/blocks/feedback-type-badge.d.ts +7 -2
  43. package/dist/components/blocks/feedback-type-badge.js +14 -8
  44. package/dist/components/blocks/feedback-unread-badge.d.ts +6 -0
  45. package/dist/components/blocks/feedback-unread-badge.js +9 -0
  46. package/dist/components/blocks/feedback-user-detail.d.ts +1 -1
  47. package/dist/components/blocks/feedback-user-detail.js +10 -10
  48. package/dist/components/blocks/feedback-user-list.d.ts +1 -1
  49. package/dist/components/blocks/feedback-user-list.js +11 -11
  50. package/dist/components/blocks/generated-connect-link.d.ts +1 -1
  51. package/dist/components/blocks/generated-connect-link.js +3 -3
  52. package/dist/components/blocks/invite-user-sheet.js +5 -5
  53. package/dist/components/blocks/kanban-board-parts.d.ts +2 -2
  54. package/dist/components/blocks/kanban-board-parts.js +3 -3
  55. package/dist/components/blocks/kanban-board-utils.d.ts +1 -1
  56. package/dist/components/blocks/kanban-board.d.ts +1 -1
  57. package/dist/components/blocks/kanban-board.js +2 -2
  58. package/dist/components/blocks/kanban-card.d.ts +1 -1
  59. package/dist/components/blocks/kanban-card.js +1 -1
  60. package/dist/components/blocks/kanban-column.d.ts +1 -1
  61. package/dist/components/blocks/kanban-column.js +3 -3
  62. package/dist/components/blocks/kanban-detail-sheet.d.ts +1 -1
  63. package/dist/components/blocks/kanban-detail-sheet.js +5 -5
  64. package/dist/components/blocks/mcp-access-grouped-tool-picker.d.ts +2 -2
  65. package/dist/components/blocks/mcp-access-grouped-tool-picker.js +4 -4
  66. package/dist/components/blocks/mcp-access-tool-picker-internals.d.ts +1 -1
  67. package/dist/components/blocks/mcp-access-tool-picker-internals.js +1 -1
  68. package/dist/components/blocks/mcp-access-tool-picker.d.ts +4 -4
  69. package/dist/components/blocks/mcp-access-tool-picker.js +3 -3
  70. package/dist/components/blocks/mcp-client-setup.d.ts +2 -2
  71. package/dist/components/blocks/mcp-client-setup.js +4 -4
  72. package/dist/components/blocks/mcp-connect-clients.d.ts +1 -1
  73. package/dist/components/blocks/mcp-plan-choice.d.ts +1 -1
  74. package/dist/components/blocks/mcp-plan-choice.js +1 -1
  75. package/dist/components/blocks/submit-feedback-composer.d.ts +2 -2
  76. package/dist/components/blocks/timestamp-format.d.ts +7 -1
  77. package/dist/components/blocks/timestamp-format.js +9 -1
  78. package/dist/components/blocks/use-feedback-composer-state.d.ts +1 -1
  79. package/dist/components/pages/admin-users-page.d.ts +2 -2
  80. package/dist/components/pages/admin-users-page.js +5 -5
  81. package/dist/components/pages/feedback-stakeholder-page-parts.d.ts +1 -1
  82. package/dist/components/pages/feedback-stakeholder-page-parts.js +4 -4
  83. package/dist/components/pages/feedback-stakeholder-page.d.ts +1 -1
  84. package/dist/components/pages/feedback-stakeholder-page.js +5 -5
  85. package/dist/components/pages/kanban-page.d.ts +1 -1
  86. package/dist/components/pages/kanban-page.js +5 -5
  87. package/dist/components/ui/accordion.js +1 -1
  88. package/dist/components/ui/alert-dialog.d.ts +1 -1
  89. package/dist/components/ui/alert-dialog.js +2 -2
  90. package/dist/components/ui/alert.js +1 -1
  91. package/dist/components/ui/app-shell-page.d.ts +1 -1
  92. package/dist/components/ui/app-shell-page.js +3 -3
  93. package/dist/components/ui/app-shell.d.ts +2 -2
  94. package/dist/components/ui/app-shell.js +3 -3
  95. package/dist/components/ui/avatar.js +1 -1
  96. package/dist/components/ui/badge-variants.d.ts +1 -1
  97. package/dist/components/ui/badge.d.ts +1 -1
  98. package/dist/components/ui/badge.js +2 -2
  99. package/dist/components/ui/breadcrumb.js +1 -1
  100. package/dist/components/ui/button-group.d.ts +2 -2
  101. package/dist/components/ui/button-group.js +3 -3
  102. package/dist/components/ui/button-variants.d.ts +1 -1
  103. package/dist/components/ui/button.d.ts +1 -1
  104. package/dist/components/ui/button.js +3 -3
  105. package/dist/components/ui/calendar.d.ts +1 -1
  106. package/dist/components/ui/calendar.js +3 -3
  107. package/dist/components/ui/card.js +1 -1
  108. package/dist/components/ui/carousel.d.ts +1 -1
  109. package/dist/components/ui/carousel.js +2 -2
  110. package/dist/components/ui/chart-panel.js +1 -1
  111. package/dist/components/ui/chart-tooltip.js +2 -2
  112. package/dist/components/ui/chart.d.ts +2 -2
  113. package/dist/components/ui/chart.js +3 -3
  114. package/dist/components/ui/checkbox.js +1 -1
  115. package/dist/components/ui/ciridae-ui-provider.d.ts +1 -1
  116. package/dist/components/ui/ciridae-ui-provider.js +3 -3
  117. package/dist/components/ui/color-theme-context.d.ts +1 -1
  118. package/dist/components/ui/color-theme.d.ts +2 -2
  119. package/dist/components/ui/color-theme.js +8 -6
  120. package/dist/components/ui/combobox.js +3 -3
  121. package/dist/components/ui/command.d.ts +1 -1
  122. package/dist/components/ui/command.js +2 -2
  123. package/dist/components/ui/context-menu.js +1 -1
  124. package/dist/components/ui/data-table-column-settings.js +5 -5
  125. package/dist/components/ui/data-table-controls.d.ts +1 -1
  126. package/dist/components/ui/data-table-controls.js +3 -3
  127. package/dist/components/ui/data-table-facet-filter.d.ts +22 -6
  128. package/dist/components/ui/data-table-facet-filter.js +38 -26
  129. package/dist/components/ui/data-table-grid.js +3 -3
  130. package/dist/components/ui/data-table-pagination.d.ts +1 -1
  131. package/dist/components/ui/data-table-pagination.js +3 -3
  132. package/dist/components/ui/data-table-search-input.d.ts +14 -0
  133. package/dist/components/ui/data-table-search-input.js +15 -0
  134. package/dist/components/ui/data-table-tanstack.js +6 -6
  135. package/dist/components/ui/data-table.d.ts +4 -4
  136. package/dist/components/ui/data-table.js +5 -5
  137. package/dist/components/ui/dialog.js +2 -2
  138. package/dist/components/ui/drawer.js +1 -1
  139. package/dist/components/ui/dropdown-menu.js +1 -1
  140. package/dist/components/ui/empty.js +1 -1
  141. package/dist/components/ui/expandable-data-table.d.ts +1 -1
  142. package/dist/components/ui/expandable-data-table.js +4 -4
  143. package/dist/components/ui/field.d.ts +1 -1
  144. package/dist/components/ui/field.js +3 -3
  145. package/dist/components/ui/file-upload-field-parts.js +3 -3
  146. package/dist/components/ui/file-upload-field.js +2 -2
  147. package/dist/components/ui/form-sheet.js +2 -2
  148. package/dist/components/ui/form.js +3 -3
  149. package/dist/components/ui/hover-card.js +1 -1
  150. package/dist/components/ui/input-group.d.ts +1 -1
  151. package/dist/components/ui/input-group.js +4 -4
  152. package/dist/components/ui/input-otp.js +1 -1
  153. package/dist/components/ui/input.js +1 -1
  154. package/dist/components/ui/item.d.ts +1 -1
  155. package/dist/components/ui/item.js +9 -5
  156. package/dist/components/ui/kbd.js +1 -1
  157. package/dist/components/ui/label.js +1 -1
  158. package/dist/components/ui/loading-state.d.ts +1 -1
  159. package/dist/components/ui/loading-state.js +4 -4
  160. package/dist/components/ui/menubar.js +1 -1
  161. package/dist/components/ui/metrics-strip.js +1 -1
  162. package/dist/components/ui/native-select.js +1 -1
  163. package/dist/components/ui/navigation-menu.js +2 -2
  164. package/dist/components/ui/page-header.d.ts +1 -1
  165. package/dist/components/ui/page-header.js +2 -2
  166. package/dist/components/ui/pagination.d.ts +1 -1
  167. package/dist/components/ui/pagination.js +2 -2
  168. package/dist/components/ui/popover.js +1 -1
  169. package/dist/components/ui/progress.js +1 -1
  170. package/dist/components/ui/property-list.js +1 -1
  171. package/dist/components/ui/radio-group.js +1 -1
  172. package/dist/components/ui/registry-docs-api.js +1 -1
  173. package/dist/components/ui/registry-docs-code.js +2 -2
  174. package/dist/components/ui/registry-docs-showcase.js +3 -3
  175. package/dist/components/ui/registry-docs.d.ts +4 -4
  176. package/dist/components/ui/registry-docs.js +6 -6
  177. package/dist/components/ui/resizable.js +1 -1
  178. package/dist/components/ui/scroll-area.js +1 -1
  179. package/dist/components/ui/select.js +1 -1
  180. package/dist/components/ui/separator.js +1 -1
  181. package/dist/components/ui/sheet.js +1 -1
  182. package/dist/components/ui/sidebar/group.js +1 -1
  183. package/dist/components/ui/sidebar/layout.d.ts +2 -2
  184. package/dist/components/ui/sidebar/layout.js +5 -5
  185. package/dist/components/ui/sidebar/menu.d.ts +1 -1
  186. package/dist/components/ui/sidebar/menu.js +4 -4
  187. package/dist/components/ui/sidebar/provider.js +4 -4
  188. package/dist/components/ui/sidebar/rail.js +2 -2
  189. package/dist/components/ui/sidebar/trigger.d.ts +1 -1
  190. package/dist/components/ui/sidebar/trigger.js +3 -3
  191. package/dist/components/ui/sidebar-account-menu-theme.js +2 -2
  192. package/dist/components/ui/sidebar-account-menu.d.ts +1 -1
  193. package/dist/components/ui/sidebar-account-menu.js +7 -7
  194. package/dist/components/ui/sidebar.d.ts +7 -7
  195. package/dist/components/ui/sidebar.js +7 -7
  196. package/dist/components/ui/skeleton.js +1 -1
  197. package/dist/components/ui/slider.js +1 -1
  198. package/dist/components/ui/sonner.js +1 -1
  199. package/dist/components/ui/spinner.js +1 -1
  200. package/dist/components/ui/switch.js +1 -1
  201. package/dist/components/ui/table.js +1 -1
  202. package/dist/components/ui/tabs.d.ts +1 -1
  203. package/dist/components/ui/tabs.js +2 -2
  204. package/dist/components/ui/textarea.js +1 -1
  205. package/dist/components/ui/toggle-group.d.ts +1 -1
  206. package/dist/components/ui/toggle-group.js +2 -2
  207. package/dist/components/ui/toggle.d.ts +1 -1
  208. package/dist/components/ui/toggle.js +2 -2
  209. package/dist/components/ui/tooltip.js +1 -1
  210. package/dist/components/ui/use-color-theme.d.ts +1 -1
  211. package/dist/components/ui/use-color-theme.js +1 -1
  212. package/dist/components/ui/workflow-timeline.js +1 -1
  213. package/dist/entries/accordion.d.ts +1 -1
  214. package/dist/entries/accordion.js +1 -1
  215. package/dist/entries/admin-users-page.d.ts +1 -1
  216. package/dist/entries/admin-users-page.js +1 -1
  217. package/dist/entries/admin-users-table.d.ts +1 -1
  218. package/dist/entries/admin-users-table.js +1 -1
  219. package/dist/entries/alert-dialog.d.ts +1 -1
  220. package/dist/entries/alert-dialog.js +1 -1
  221. package/dist/entries/alert.d.ts +1 -1
  222. package/dist/entries/alert.js +1 -1
  223. package/dist/entries/app-shell-page.d.ts +1 -1
  224. package/dist/entries/app-shell-page.js +1 -1
  225. package/dist/entries/app-shell.d.ts +1 -1
  226. package/dist/entries/app-shell.js +1 -1
  227. package/dist/entries/aspect-ratio.d.ts +1 -1
  228. package/dist/entries/aspect-ratio.js +1 -1
  229. package/dist/entries/avatar.d.ts +1 -1
  230. package/dist/entries/avatar.js +1 -1
  231. package/dist/entries/badge-variants.d.ts +1 -1
  232. package/dist/entries/badge-variants.js +1 -1
  233. package/dist/entries/badge.d.ts +1 -1
  234. package/dist/entries/badge.js +1 -1
  235. package/dist/entries/breadcrumb.d.ts +1 -1
  236. package/dist/entries/breadcrumb.js +1 -1
  237. package/dist/entries/button-group-variants.d.ts +1 -1
  238. package/dist/entries/button-group-variants.js +1 -1
  239. package/dist/entries/button-group.d.ts +1 -1
  240. package/dist/entries/button-group.js +1 -1
  241. package/dist/entries/button-variants.d.ts +1 -1
  242. package/dist/entries/button-variants.js +1 -1
  243. package/dist/entries/button.d.ts +1 -1
  244. package/dist/entries/button.js +1 -1
  245. package/dist/entries/calendar.d.ts +1 -1
  246. package/dist/entries/calendar.js +1 -1
  247. package/dist/entries/card.d.ts +1 -1
  248. package/dist/entries/card.js +1 -1
  249. package/dist/entries/carousel.d.ts +1 -1
  250. package/dist/entries/carousel.js +1 -1
  251. package/dist/entries/chart-context.d.ts +1 -1
  252. package/dist/entries/chart-context.js +1 -1
  253. package/dist/entries/chart-panel.d.ts +1 -1
  254. package/dist/entries/chart-panel.js +1 -1
  255. package/dist/entries/chart-tooltip.d.ts +1 -1
  256. package/dist/entries/chart-tooltip.js +1 -1
  257. package/dist/entries/chart.d.ts +1 -1
  258. package/dist/entries/chart.js +1 -1
  259. package/dist/entries/checkbox.d.ts +1 -1
  260. package/dist/entries/checkbox.js +1 -1
  261. package/dist/entries/ciridae-brand-assets.d.ts +1 -1
  262. package/dist/entries/ciridae-brand-assets.js +1 -1
  263. package/dist/entries/ciridae-ui-provider.d.ts +1 -1
  264. package/dist/entries/ciridae-ui-provider.js +1 -1
  265. package/dist/entries/collapsible.d.ts +1 -1
  266. package/dist/entries/collapsible.js +1 -1
  267. package/dist/entries/color-theme-context.d.ts +1 -1
  268. package/dist/entries/color-theme-context.js +1 -1
  269. package/dist/entries/color-theme.d.ts +1 -1
  270. package/dist/entries/color-theme.js +1 -1
  271. package/dist/entries/combobox-anchor.d.ts +1 -1
  272. package/dist/entries/combobox-anchor.js +1 -1
  273. package/dist/entries/combobox.d.ts +1 -1
  274. package/dist/entries/combobox.js +1 -1
  275. package/dist/entries/command.d.ts +1 -1
  276. package/dist/entries/command.js +1 -1
  277. package/dist/entries/comment-composer.d.ts +1 -1
  278. package/dist/entries/comment-composer.js +1 -1
  279. package/dist/entries/comment-item.d.ts +1 -1
  280. package/dist/entries/comment-item.js +1 -1
  281. package/dist/entries/comment-thread.d.ts +1 -1
  282. package/dist/entries/comment-thread.js +1 -1
  283. package/dist/entries/comment-types.d.ts +1 -1
  284. package/dist/entries/comment-types.js +1 -1
  285. package/dist/entries/context-menu.d.ts +1 -1
  286. package/dist/entries/context-menu.js +1 -1
  287. package/dist/entries/copy-field.d.ts +1 -1
  288. package/dist/entries/copy-field.js +1 -1
  289. package/dist/entries/data-table-column-settings.d.ts +1 -1
  290. package/dist/entries/data-table-column-settings.js +1 -1
  291. package/dist/entries/data-table-context.d.ts +1 -1
  292. package/dist/entries/data-table-context.js +1 -1
  293. package/dist/entries/data-table-controls.d.ts +1 -1
  294. package/dist/entries/data-table-controls.js +1 -1
  295. package/dist/entries/data-table-facet-filter.d.ts +1 -1
  296. package/dist/entries/data-table-facet-filter.js +1 -1
  297. package/dist/entries/data-table-grid.d.ts +1 -1
  298. package/dist/entries/data-table-grid.js +1 -1
  299. package/dist/entries/data-table-pagination.d.ts +1 -1
  300. package/dist/entries/data-table-pagination.js +1 -1
  301. package/dist/entries/data-table-search-input.d.ts +1 -0
  302. package/dist/entries/data-table-search-input.js +1 -0
  303. package/dist/entries/data-table-state.d.ts +1 -1
  304. package/dist/entries/data-table-state.js +1 -1
  305. package/dist/entries/data-table-tanstack.d.ts +1 -1
  306. package/dist/entries/data-table-tanstack.js +1 -1
  307. package/dist/entries/data-table.d.ts +1 -1
  308. package/dist/entries/data-table.js +1 -1
  309. package/dist/entries/dialog.d.ts +1 -1
  310. package/dist/entries/dialog.js +1 -1
  311. package/dist/entries/direction-context.d.ts +1 -1
  312. package/dist/entries/direction-context.js +1 -1
  313. package/dist/entries/direction.d.ts +1 -1
  314. package/dist/entries/direction.js +1 -1
  315. package/dist/entries/drawer.d.ts +1 -1
  316. package/dist/entries/drawer.js +1 -1
  317. package/dist/entries/dropdown-menu.d.ts +1 -1
  318. package/dist/entries/dropdown-menu.js +1 -1
  319. package/dist/entries/empty.d.ts +1 -1
  320. package/dist/entries/empty.js +1 -1
  321. package/dist/entries/expandable-data-table.d.ts +1 -1
  322. package/dist/entries/expandable-data-table.js +1 -1
  323. package/dist/entries/feedback-center-comments.d.ts +1 -1
  324. package/dist/entries/feedback-center-comments.js +1 -1
  325. package/dist/entries/feedback-center-footer.d.ts +1 -1
  326. package/dist/entries/feedback-center-footer.js +1 -1
  327. package/dist/entries/feedback-center-sheet-parts.d.ts +1 -1
  328. package/dist/entries/feedback-center-sheet-parts.js +1 -1
  329. package/dist/entries/feedback-center-sheet.d.ts +1 -1
  330. package/dist/entries/feedback-center-sheet.js +1 -1
  331. package/dist/entries/feedback-composer-parts.d.ts +1 -1
  332. package/dist/entries/feedback-composer-parts.js +1 -1
  333. package/dist/entries/feedback-composer-types.d.ts +1 -1
  334. package/dist/entries/feedback-composer-types.js +1 -1
  335. package/dist/entries/feedback-composer.d.ts +1 -1
  336. package/dist/entries/feedback-composer.js +1 -1
  337. package/dist/entries/feedback-date-format.d.ts +1 -1
  338. package/dist/entries/feedback-date-format.js +1 -1
  339. package/dist/entries/feedback-detail-sheet.d.ts +1 -1
  340. package/dist/entries/feedback-detail-sheet.js +1 -1
  341. package/dist/entries/feedback-emergency-fields.d.ts +1 -1
  342. package/dist/entries/feedback-emergency-fields.js +1 -1
  343. package/dist/entries/feedback-metrics.d.ts +1 -1
  344. package/dist/entries/feedback-metrics.js +1 -1
  345. package/dist/entries/feedback-sheet.d.ts +1 -1
  346. package/dist/entries/feedback-sheet.js +1 -1
  347. package/dist/entries/feedback-stakeholder-page-parts.d.ts +1 -1
  348. package/dist/entries/feedback-stakeholder-page-parts.js +1 -1
  349. package/dist/entries/feedback-stakeholder-page.d.ts +1 -1
  350. package/dist/entries/feedback-stakeholder-page.js +1 -1
  351. package/dist/entries/feedback-status-badge.d.ts +1 -1
  352. package/dist/entries/feedback-status-badge.js +1 -1
  353. package/dist/entries/feedback-table-row.d.ts +1 -1
  354. package/dist/entries/feedback-table-row.js +1 -1
  355. package/dist/entries/feedback-table-sort.d.ts +1 -1
  356. package/dist/entries/feedback-table-sort.js +1 -1
  357. package/dist/entries/feedback-table.d.ts +1 -1
  358. package/dist/entries/feedback-table.js +1 -1
  359. package/dist/entries/feedback-tracking-types.d.ts +1 -1
  360. package/dist/entries/feedback-tracking-types.js +1 -1
  361. package/dist/entries/feedback-triage-timeline.d.ts +1 -0
  362. package/dist/entries/feedback-triage-timeline.js +1 -0
  363. package/dist/entries/feedback-type-badge.d.ts +1 -1
  364. package/dist/entries/feedback-type-badge.js +1 -1
  365. package/dist/entries/feedback-unread-badge.d.ts +1 -0
  366. package/dist/entries/feedback-unread-badge.js +1 -0
  367. package/dist/entries/feedback-user-detail.d.ts +1 -1
  368. package/dist/entries/feedback-user-detail.js +1 -1
  369. package/dist/entries/feedback-user-list.d.ts +1 -1
  370. package/dist/entries/feedback-user-list.js +1 -1
  371. package/dist/entries/field.d.ts +1 -1
  372. package/dist/entries/field.js +1 -1
  373. package/dist/entries/file-upload-field-parts.d.ts +1 -1
  374. package/dist/entries/file-upload-field-parts.js +1 -1
  375. package/dist/entries/file-upload-field.d.ts +1 -1
  376. package/dist/entries/file-upload-field.js +1 -1
  377. package/dist/entries/form-context.d.ts +1 -1
  378. package/dist/entries/form-context.js +1 -1
  379. package/dist/entries/form-sheet.d.ts +1 -1
  380. package/dist/entries/form-sheet.js +1 -1
  381. package/dist/entries/form.d.ts +1 -1
  382. package/dist/entries/form.js +1 -1
  383. package/dist/entries/generated-connect-link.d.ts +1 -1
  384. package/dist/entries/generated-connect-link.js +1 -1
  385. package/dist/entries/hover-card.d.ts +1 -1
  386. package/dist/entries/hover-card.js +1 -1
  387. package/dist/entries/input-group.d.ts +1 -1
  388. package/dist/entries/input-group.js +1 -1
  389. package/dist/entries/input-otp.d.ts +1 -1
  390. package/dist/entries/input-otp.js +1 -1
  391. package/dist/entries/input.d.ts +1 -1
  392. package/dist/entries/input.js +1 -1
  393. package/dist/entries/invite-user-sheet.d.ts +1 -1
  394. package/dist/entries/invite-user-sheet.js +1 -1
  395. package/dist/entries/item.d.ts +1 -1
  396. package/dist/entries/item.js +1 -1
  397. package/dist/entries/kanban-board-parts.d.ts +1 -1
  398. package/dist/entries/kanban-board-parts.js +1 -1
  399. package/dist/entries/kanban-board-utils.d.ts +1 -1
  400. package/dist/entries/kanban-board-utils.js +1 -1
  401. package/dist/entries/kanban-board.d.ts +1 -1
  402. package/dist/entries/kanban-board.js +1 -1
  403. package/dist/entries/kanban-card.d.ts +1 -1
  404. package/dist/entries/kanban-card.js +1 -1
  405. package/dist/entries/kanban-column.d.ts +1 -1
  406. package/dist/entries/kanban-column.js +1 -1
  407. package/dist/entries/kanban-detail-sheet.d.ts +1 -1
  408. package/dist/entries/kanban-detail-sheet.js +1 -1
  409. package/dist/entries/kanban-page.d.ts +1 -1
  410. package/dist/entries/kanban-page.js +1 -1
  411. package/dist/entries/kanban-types.d.ts +1 -1
  412. package/dist/entries/kanban-types.js +1 -1
  413. package/dist/entries/kbd.d.ts +1 -1
  414. package/dist/entries/kbd.js +1 -1
  415. package/dist/entries/label.d.ts +1 -1
  416. package/dist/entries/label.js +1 -1
  417. package/dist/entries/loading-state.d.ts +1 -1
  418. package/dist/entries/loading-state.js +1 -1
  419. package/dist/entries/mcp-access-grouped-tool-picker.d.ts +1 -1
  420. package/dist/entries/mcp-access-grouped-tool-picker.js +1 -1
  421. package/dist/entries/mcp-access-tool-picker.d.ts +1 -1
  422. package/dist/entries/mcp-access-tool-picker.js +1 -1
  423. package/dist/entries/mcp-access-types.d.ts +1 -1
  424. package/dist/entries/mcp-access-types.js +1 -1
  425. package/dist/entries/mcp-client-setup.d.ts +1 -1
  426. package/dist/entries/mcp-client-setup.js +1 -1
  427. package/dist/entries/mcp-connect-clients.d.ts +1 -1
  428. package/dist/entries/mcp-connect-clients.js +1 -1
  429. package/dist/entries/mcp-plan-choice.d.ts +1 -1
  430. package/dist/entries/mcp-plan-choice.js +1 -1
  431. package/dist/entries/menubar.d.ts +1 -1
  432. package/dist/entries/menubar.js +1 -1
  433. package/dist/entries/metrics-strip.d.ts +1 -1
  434. package/dist/entries/metrics-strip.js +1 -1
  435. package/dist/entries/native-select.d.ts +1 -1
  436. package/dist/entries/native-select.js +1 -1
  437. package/dist/entries/navigation-menu-variants.d.ts +1 -1
  438. package/dist/entries/navigation-menu-variants.js +1 -1
  439. package/dist/entries/navigation-menu.d.ts +1 -1
  440. package/dist/entries/navigation-menu.js +1 -1
  441. package/dist/entries/page-header.d.ts +1 -1
  442. package/dist/entries/page-header.js +1 -1
  443. package/dist/entries/pagination.d.ts +1 -1
  444. package/dist/entries/pagination.js +1 -1
  445. package/dist/entries/palette.d.ts +2 -2
  446. package/dist/entries/palette.js +2 -2
  447. package/dist/entries/popover.d.ts +1 -1
  448. package/dist/entries/popover.js +1 -1
  449. package/dist/entries/progress.d.ts +1 -1
  450. package/dist/entries/progress.js +1 -1
  451. package/dist/entries/property-list.d.ts +1 -1
  452. package/dist/entries/property-list.js +1 -1
  453. package/dist/entries/radio-group.d.ts +1 -1
  454. package/dist/entries/radio-group.js +1 -1
  455. package/dist/entries/registry-docs-api.d.ts +1 -1
  456. package/dist/entries/registry-docs-api.js +1 -1
  457. package/dist/entries/registry-docs-code.d.ts +1 -1
  458. package/dist/entries/registry-docs-code.js +1 -1
  459. package/dist/entries/registry-docs-showcase.d.ts +1 -1
  460. package/dist/entries/registry-docs-showcase.js +1 -1
  461. package/dist/entries/registry-docs.d.ts +1 -1
  462. package/dist/entries/registry-docs.js +1 -1
  463. package/dist/entries/resizable.d.ts +1 -1
  464. package/dist/entries/resizable.js +1 -1
  465. package/dist/entries/scroll-area.d.ts +1 -1
  466. package/dist/entries/scroll-area.js +1 -1
  467. package/dist/entries/select.d.ts +1 -1
  468. package/dist/entries/select.js +1 -1
  469. package/dist/entries/separator.d.ts +1 -1
  470. package/dist/entries/separator.js +1 -1
  471. package/dist/entries/sheet.d.ts +1 -1
  472. package/dist/entries/sheet.js +1 -1
  473. package/dist/entries/sidebar/context.d.ts +1 -1
  474. package/dist/entries/sidebar/context.js +1 -1
  475. package/dist/entries/sidebar/group.d.ts +1 -1
  476. package/dist/entries/sidebar/group.js +1 -1
  477. package/dist/entries/sidebar/layout.d.ts +1 -1
  478. package/dist/entries/sidebar/layout.js +1 -1
  479. package/dist/entries/sidebar/menu.d.ts +1 -1
  480. package/dist/entries/sidebar/menu.js +1 -1
  481. package/dist/entries/sidebar/provider.d.ts +1 -1
  482. package/dist/entries/sidebar/provider.js +1 -1
  483. package/dist/entries/sidebar/rail.d.ts +1 -1
  484. package/dist/entries/sidebar/rail.js +1 -1
  485. package/dist/entries/sidebar/trigger.d.ts +1 -1
  486. package/dist/entries/sidebar/trigger.js +1 -1
  487. package/dist/entries/sidebar-account-menu-theme.d.ts +1 -1
  488. package/dist/entries/sidebar-account-menu-theme.js +1 -1
  489. package/dist/entries/sidebar-account-menu.d.ts +1 -1
  490. package/dist/entries/sidebar-account-menu.js +1 -1
  491. package/dist/entries/sidebar.d.ts +1 -1
  492. package/dist/entries/sidebar.js +1 -1
  493. package/dist/entries/skeleton.d.ts +1 -1
  494. package/dist/entries/skeleton.js +1 -1
  495. package/dist/entries/slider.d.ts +1 -1
  496. package/dist/entries/slider.js +1 -1
  497. package/dist/entries/sonner.d.ts +1 -1
  498. package/dist/entries/sonner.js +1 -1
  499. package/dist/entries/spinner.d.ts +1 -1
  500. package/dist/entries/spinner.js +1 -1
  501. package/dist/entries/submit-feedback-composer.d.ts +1 -1
  502. package/dist/entries/submit-feedback-composer.js +1 -1
  503. package/dist/entries/switch.d.ts +1 -1
  504. package/dist/entries/switch.js +1 -1
  505. package/dist/entries/table.d.ts +1 -1
  506. package/dist/entries/table.js +1 -1
  507. package/dist/entries/tabs-variants.d.ts +1 -1
  508. package/dist/entries/tabs-variants.js +1 -1
  509. package/dist/entries/tabs.d.ts +1 -1
  510. package/dist/entries/tabs.js +1 -1
  511. package/dist/entries/textarea.d.ts +1 -1
  512. package/dist/entries/textarea.js +1 -1
  513. package/dist/entries/timestamp-format.d.ts +1 -1
  514. package/dist/entries/timestamp-format.js +1 -1
  515. package/dist/entries/toggle-group.d.ts +1 -1
  516. package/dist/entries/toggle-group.js +1 -1
  517. package/dist/entries/toggle-variants.d.ts +1 -1
  518. package/dist/entries/toggle-variants.js +1 -1
  519. package/dist/entries/toggle.d.ts +1 -1
  520. package/dist/entries/toggle.js +1 -1
  521. package/dist/entries/tooltip.d.ts +1 -1
  522. package/dist/entries/tooltip.js +1 -1
  523. package/dist/entries/use-color-theme.d.ts +1 -1
  524. package/dist/entries/use-color-theme.js +1 -1
  525. package/dist/entries/use-feedback-composer-state.d.ts +1 -1
  526. package/dist/entries/use-feedback-composer-state.js +1 -1
  527. package/dist/entries/use-mobile.d.ts +1 -1
  528. package/dist/entries/use-mobile.js +1 -1
  529. package/dist/entries/utils.d.ts +1 -1
  530. package/dist/entries/utils.js +1 -1
  531. package/dist/entries/workflow-timeline.d.ts +1 -1
  532. package/dist/entries/workflow-timeline.js +1 -1
  533. package/dist/hooks/use-mobile.js +4 -2
  534. package/dist/lib/palette-presets.d.ts +1 -1
  535. package/dist/lib/palette.d.ts +1 -1
  536. package/dist/lib/palette.js +2 -2
  537. package/package.json +1 -1
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { InboxIcon } from "lucide-react";
4
- import { DataTable, DataTableContent, DataTableEmpty, DataTableSkeleton, SortableTableHead, } from "../ui/data-table";
5
- import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../ui/empty";
6
- import { Table, TableBody, TableHead, TableHeader, TableRow } from "../ui/table";
7
- import { defaultFeedbackTableSort, getNextFeedbackTableSort, sortFeedbackItems, } from "./feedback-table-sort";
8
- import { FeedbackTableRow } from "./feedback-table-row";
4
+ import { DataTable, DataTableContent, DataTableEmpty, DataTableSkeleton, SortableTableHead, } from "../ui/data-table.js";
5
+ import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../ui/empty.js";
6
+ import { Table, TableBody, TableHead, TableHeader, TableRow } from "../ui/table.js";
7
+ import { defaultFeedbackTableSort, getNextFeedbackTableSort, sortFeedbackItems, } from "./feedback-table-sort.js";
8
+ import { FeedbackTableRow } from "./feedback-table-row.js";
9
9
  function FeedbackTable({ defaultSort = defaultFeedbackTableSort, emptyAction, emptyDescription = "No feedback has been submitted yet.", emptyTitle = "No feedback", isLoading = false, items, onSelectFeedback, onSortChange, sort, }) {
10
10
  const [internalSort, setInternalSort] = React.useState(defaultSort);
11
11
  const activeSort = sort ?? internalSort;
@@ -49,6 +49,12 @@ type FeedbackMetrics = {
49
49
  received: number;
50
50
  total: number;
51
51
  };
52
+ type FeedbackTimelineEvent = {
53
+ actorEmail: string;
54
+ actorRole: "reporter" | "support";
55
+ at: string;
56
+ toStatus: FeedbackStatus;
57
+ };
52
58
  declare const feedbackStatusLabels: Record<FeedbackStatus, string>;
53
59
  declare const feedbackTypeLabels: Record<StakeholderFeedbackType, string>;
54
60
  declare const feedbackStatusOptions: readonly [{
@@ -84,4 +90,4 @@ declare const feedbackTypeOptions: readonly [{
84
90
  readonly value: "general";
85
91
  }];
86
92
  declare function getFeedbackInitials(name: string, email: string | undefined): string;
87
- export { feedbackStatusLabels, feedbackStatusOptions, feedbackStatusValues, feedbackTypeLabels, feedbackTypeOptions, getFeedbackInitials, type FeedbackAffectedScope, type FeedbackAttachment, type FeedbackMetrics, type FeedbackStatus, type FeedbackSubmittedBy, type FeedbackUrgency, type StakeholderFeedbackItem, type StakeholderFeedbackType, type UserFeedbackItem, };
93
+ export { feedbackStatusLabels, feedbackStatusOptions, feedbackStatusValues, feedbackTypeLabels, feedbackTypeOptions, getFeedbackInitials, type FeedbackAffectedScope, type FeedbackAttachment, type FeedbackMetrics, type FeedbackStatus, type FeedbackSubmittedBy, type FeedbackTimelineEvent, type FeedbackUrgency, type StakeholderFeedbackItem, type StakeholderFeedbackType, type UserFeedbackItem, };
@@ -0,0 +1,11 @@
1
+ import { type FeedbackTimelineEvent } from "./feedback-tracking-types.js";
2
+ type FeedbackTriageTimelineProps = {
3
+ events: FeedbackTimelineEvent[];
4
+ };
5
+ /**
6
+ * The item's triage history, oldest first: where it has been, who moved it,
7
+ * and when. Support identities read as "Support" -- one team voice, the same
8
+ * rule the conversation applies.
9
+ */
10
+ declare function FeedbackTriageTimeline({ events }: FeedbackTriageTimelineProps): import("@types/react").JSX.Element | null;
11
+ export { FeedbackTriageTimeline, type FeedbackTriageTimelineProps };
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { formatFeedbackTimestamp } from "./feedback-date-format.js";
3
+ import { feedbackStatusLabels } from "./feedback-tracking-types.js";
4
+ /**
5
+ * The item's triage history, oldest first: where it has been, who moved it,
6
+ * and when. Support identities read as "Support" -- one team voice, the same
7
+ * rule the conversation applies.
8
+ */
9
+ function FeedbackTriageTimeline({ events }) {
10
+ if (events.length === 0)
11
+ return null;
12
+ return (_jsxs("section", { "aria-label": "Triage history", className: "grid gap-1.5", children: [_jsx("h3", { className: "text-sm font-medium", children: "Timeline" }), _jsx("ol", { className: "grid gap-1 border-l pl-3", children: events.map((event, index) => (_jsxs("li", { className: "text-xs text-muted-foreground", children: [_jsx("span", { className: "font-medium text-foreground", children: feedbackStatusLabels[event.toStatus] }), " · ", event.actorRole === "support" ? "Support" : event.actorEmail, " · ", formatFeedbackTimestamp(event.at)] }, getTimelineEventKey(event, index)))) })] }));
13
+ }
14
+ function getTimelineEventKey(event, index) {
15
+ return `${event.toStatus}-${event.at}-${index}`; // two transitions can share a status and timestamp
16
+ }
17
+ export { FeedbackTriageTimeline };
@@ -1,6 +1,11 @@
1
- import { type StakeholderFeedbackType } from "./feedback-tracking-types";
1
+ import type * as React from "react";
2
+ import { type StakeholderFeedbackType } from "./feedback-tracking-types.js";
2
3
  type FeedbackTypeBadgeProps = {
3
4
  type: StakeholderFeedbackType;
4
5
  };
5
- declare function FeedbackTypeBadge({ type }: FeedbackTypeBadgeProps): import("@types/react").JSX.Element;
6
+ /**
7
+ * Quiet on purpose: status owns hue wherever the two badges share a row, so
8
+ * the type reads by its icon's silhouette instead of competing for color.
9
+ */
10
+ declare function FeedbackTypeBadge({ type }: FeedbackTypeBadgeProps): React.JSX.Element;
6
11
  export { FeedbackTypeBadge, type FeedbackTypeBadgeProps };
@@ -1,12 +1,18 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Badge } from "../ui/badge";
3
- import { feedbackTypeLabels } from "./feedback-tracking-types";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BugIcon, LightbulbIcon, MessageSquareIcon } from "lucide-react";
3
+ import { Badge } from "../ui/badge.js";
4
+ import { feedbackTypeLabels } from "./feedback-tracking-types.js";
5
+ /**
6
+ * Quiet on purpose: status owns hue wherever the two badges share a row, so
7
+ * the type reads by its icon's silhouette instead of competing for color.
8
+ */
4
9
  function FeedbackTypeBadge({ type }) {
5
- return _jsx(Badge, { variant: feedbackTypeVariants[type], children: feedbackTypeLabels[type] });
10
+ const Icon = feedbackTypeIcons[type];
11
+ return (_jsxs(Badge, { variant: "outline", children: [_jsx(Icon, {}), feedbackTypeLabels[type]] }));
6
12
  }
7
- const feedbackTypeVariants = {
8
- bug: "warning",
9
- feature: "info",
10
- general: "outline",
13
+ const feedbackTypeIcons = {
14
+ bug: BugIcon,
15
+ feature: LightbulbIcon,
16
+ general: MessageSquareIcon,
11
17
  };
12
18
  export { FeedbackTypeBadge };
@@ -0,0 +1,6 @@
1
+ type FeedbackUnreadBadgeProps = {
2
+ count: number;
3
+ };
4
+ /** "N new reply/replies" pill for list rows; renders nothing at zero. */
5
+ declare function FeedbackUnreadBadge({ count }: FeedbackUnreadBadgeProps): import("@types/react").JSX.Element | null;
6
+ export { FeedbackUnreadBadge, type FeedbackUnreadBadgeProps };
@@ -0,0 +1,9 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Badge } from "../ui/badge.js";
3
+ /** "N new reply/replies" pill for list rows; renders nothing at zero. */
4
+ function FeedbackUnreadBadge({ count }) {
5
+ if (count <= 0)
6
+ return null;
7
+ return (_jsxs(Badge, { variant: "secondary", children: [count, " new ", count === 1 ? "reply" : "replies"] }));
8
+ }
9
+ export { FeedbackUnreadBadge };
@@ -1,5 +1,5 @@
1
1
  import type * as React from "react";
2
- import type { UserFeedbackItem } from "./feedback-tracking-types";
2
+ import type { UserFeedbackItem } from "./feedback-tracking-types.js";
3
3
  type FeedbackUserDetailProps = {
4
4
  activityLabel?: string;
5
5
  activitySlot?: React.ReactNode;
@@ -1,14 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { AlertTriangleIcon, ArrowLeftIcon, EyeIcon, MessageSquareTextIcon, PaperclipIcon, } from "lucide-react";
3
- import { formatFeedbackTimestampFull, getFeedbackTimestampDateTime } from "./feedback-date-format";
4
- import { FeedbackStatusBadge } from "./feedback-status-badge";
5
- import { FeedbackTypeBadge } from "./feedback-type-badge";
6
- import { Badge } from "../ui/badge";
7
- import { Button } from "../ui/button";
8
- import { Card } from "../ui/card";
9
- import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../ui/empty";
10
- import { Item, ItemContent, ItemGroup, ItemGroupItem, ItemMedia, ItemTitle } from "../ui/item";
11
- import { PropertyList, PropertyListItem, PropertyListLabel, PropertyListValue, } from "../ui/property-list";
3
+ import { formatFeedbackTimestampFull, getFeedbackTimestampDateTime } from "./feedback-date-format.js";
4
+ import { FeedbackStatusBadge } from "./feedback-status-badge.js";
5
+ import { FeedbackTypeBadge } from "./feedback-type-badge.js";
6
+ import { Badge } from "../ui/badge.js";
7
+ import { Button } from "../ui/button.js";
8
+ import { Card } from "../ui/card.js";
9
+ import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../ui/empty.js";
10
+ import { Item, ItemContent, ItemGroup, ItemGroupItem, ItemMedia, ItemTitle } from "../ui/item.js";
11
+ import { PropertyList, PropertyListItem, PropertyListLabel, PropertyListValue, } from "../ui/property-list.js";
12
12
  function FeedbackUserDetail({ activityLabel = "Activity", activitySlot, evidenceSlot, feedback, onBack, }) {
13
13
  if (!feedback)
14
14
  return _jsx(FeedbackUserDetailEmpty, {});
@@ -18,7 +18,7 @@ function FeedbackUserDetailHeader({ feedback, onBack, }) {
18
18
  return (_jsx("header", { className: "grid gap-3", children: _jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [onBack ? _jsx(FeedbackUserDetailBackButton, { onBack: onBack }) : null, _jsx("div", { className: "min-w-0 flex-1", children: _jsxs("div", { className: "flex min-w-0 items-center justify-between gap-3", children: [_jsx("h3", { className: "truncate text-sm font-medium text-foreground", children: feedback.subject }), _jsx(FeedbackUserDetailBadges, { feedback: feedback })] }) })] }) }));
19
19
  }
20
20
  function FeedbackUserDetailBadges({ feedback }) {
21
- return (_jsxs("div", { className: "flex shrink-0 flex-wrap justify-end gap-2", children: [feedback.hasUnreadReply ? _jsx(Badge, { variant: "secondary", children: "New reply" }) : null, feedback.urgency === "emergency" ? (_jsxs(Badge, { variant: "destructive", children: [_jsx(AlertTriangleIcon, {}), "Emergency"] })) : null, _jsx(FeedbackTypeBadge, { type: feedback.type }), _jsx(FeedbackStatusBadge, { status: feedback.status })] }));
21
+ return (_jsxs("div", { className: "flex shrink-0 flex-wrap justify-end gap-2", children: [feedback.hasUnreadReply ? _jsx(Badge, { variant: "secondary", children: "New activity" }) : null, feedback.urgency === "emergency" ? (_jsxs(Badge, { variant: "destructive", children: [_jsx(AlertTriangleIcon, {}), "Emergency"] })) : null, _jsx(FeedbackTypeBadge, { type: feedback.type }), _jsx(FeedbackStatusBadge, { status: feedback.status })] }));
22
22
  }
23
23
  function FeedbackUserDetailBackButton({ onBack }) {
24
24
  return (_jsx(Button, { "aria-label": "Back to my feedback", className: "-ml-2 shrink-0", onClick: onBack, size: "icon", type: "button", variant: "ghost", children: _jsx(ArrowLeftIcon, {}) }));
@@ -1,4 +1,4 @@
1
- import type { UserFeedbackItem } from "./feedback-tracking-types";
1
+ import type { UserFeedbackItem } from "./feedback-tracking-types.js";
2
2
  type FeedbackUserListProps = {
3
3
  error?: Error | null;
4
4
  isLoading?: boolean;
@@ -1,15 +1,15 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { AlertCircleIcon, AlertTriangleIcon, InboxIcon } from "lucide-react";
3
- import { formatFeedbackTimestamp } from "./feedback-date-format";
4
- import { FeedbackStatusBadge } from "./feedback-status-badge";
5
- import { FeedbackTypeBadge } from "./feedback-type-badge";
6
- import { Alert, AlertDescription, AlertTitle } from "../ui/alert";
7
- import { Badge } from "../ui/badge";
8
- import { Button } from "../ui/button";
9
- import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../ui/empty";
10
- import { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemGroupItem, ItemTitle, } from "../ui/item";
11
- import { Skeleton } from "../ui/skeleton";
12
- import { cn } from "../../lib/utils";
3
+ import { formatFeedbackTimestamp } from "./feedback-date-format.js";
4
+ import { FeedbackStatusBadge } from "./feedback-status-badge.js";
5
+ import { FeedbackTypeBadge } from "./feedback-type-badge.js";
6
+ import { Alert, AlertDescription, AlertTitle } from "../ui/alert.js";
7
+ import { Badge } from "../ui/badge.js";
8
+ import { Button } from "../ui/button.js";
9
+ import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../ui/empty.js";
10
+ import { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemGroupItem, ItemTitle, } from "../ui/item.js";
11
+ import { Skeleton } from "../ui/skeleton.js";
12
+ import { cn } from "../../lib/utils.js";
13
13
  function FeedbackUserList({ error, isLoading = false, items, onRetry, onSelectFeedback, selectedId, }) {
14
14
  if (isLoading)
15
15
  return _jsx(FeedbackUserListLoading, {});
@@ -26,7 +26,7 @@ function FeedbackUserListItem({ item, onSelectFeedback, selected, }) {
26
26
  return (_jsx(ItemGroupItem, { children: _jsx(Item, { "aria-current": selected ? "true" : undefined, asChild: true, className: cn("w-full cursor-pointer text-left", selected && "border-foreground/30 bg-muted/50"), size: "sm", variant: "outline", children: _jsx("button", { onClick: () => onSelectFeedback?.(item), type: "button", children: _jsx(FeedbackUserListItemContent, { item: item }) }) }) }));
27
27
  }
28
28
  function FeedbackUserListItemContent({ item }) {
29
- return (_jsxs(_Fragment, { children: [_jsxs(ItemContent, { className: "min-w-0", children: [_jsx(ItemTitle, { className: "max-w-full truncate", children: item.subject }), _jsx(ItemDescription, { className: "line-clamp-1", children: item.description })] }), _jsxs(ItemActions, { className: "shrink-0", children: [item.hasUnreadReply ? _jsx(Badge, { variant: "secondary", children: "New reply" }) : null, item.urgency === "emergency" ? (_jsxs(Badge, { variant: "destructive", children: [_jsx(AlertTriangleIcon, {}), "Emergency"] })) : null, _jsx(FeedbackTypeBadge, { type: item.type }), _jsx(FeedbackStatusBadge, { status: item.status })] }), _jsxs(ItemFooter, { children: [_jsx(FeedbackListDate, { label: "Submitted", value: item.submittedAt }), item.updatedAt ? _jsx(FeedbackListDate, { label: "Updated", value: item.updatedAt }) : null] })] }));
29
+ return (_jsxs(_Fragment, { children: [_jsxs(ItemContent, { className: "min-w-0", children: [_jsx(ItemTitle, { className: "max-w-full truncate", children: item.subject }), _jsx(ItemDescription, { className: "line-clamp-1", children: item.description })] }), _jsxs(ItemActions, { className: "shrink-0", children: [item.hasUnreadReply ? _jsx(Badge, { variant: "secondary", children: "New activity" }) : null, item.urgency === "emergency" ? (_jsxs(Badge, { variant: "destructive", children: [_jsx(AlertTriangleIcon, {}), "Emergency"] })) : null, _jsx(FeedbackTypeBadge, { type: item.type }), _jsx(FeedbackStatusBadge, { status: item.status })] }), _jsxs(ItemFooter, { children: [_jsx(FeedbackListDate, { label: "Submitted", value: item.submittedAt }), item.updatedAt ? _jsx(FeedbackListDate, { label: "Updated", value: item.updatedAt }) : null] })] }));
30
30
  }
31
31
  function FeedbackListDate({ label, value }) {
32
32
  return (_jsxs("span", { className: "font-mono text-xs text-muted-foreground tabular-nums", children: [label, " ", formatFeedbackTimestamp(value)] }));
@@ -1,4 +1,4 @@
1
- import type { McpAccessMode, McpAccessToolSelector, McpConnectLink } from "./mcp-access-types";
1
+ import type { McpAccessMode, McpAccessToolSelector, McpConnectLink } from "./mcp-access-types.js";
2
2
  /**
3
3
  * The slice of the app's mint mutation this control drives, shaped so a
4
4
  * TanStack Query mutation result can be passed whole. `data` is the link the
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button } from "../ui/button";
3
- import { keyOf } from "./mcp-access-tool-picker";
4
- import { Spinner } from "../ui/spinner";
2
+ import { Button } from "../ui/button.js";
3
+ import { keyOf } from "./mcp-access-tool-picker.js";
4
+ import { Spinner } from "../ui/spinner.js";
5
5
  const expiryFormatter = new Intl.DateTimeFormat(undefined, {
6
6
  dateStyle: "medium",
7
7
  timeStyle: "short",
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { SendIcon } from "lucide-react";
4
- import { Button } from "../ui/button";
5
- import { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, } from "../ui/field";
6
- import { Input } from "../ui/input";
7
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select";
8
- import { Sheet, SheetBody, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "../ui/sheet";
4
+ import { Button } from "../ui/button.js";
5
+ import { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, } from "../ui/field.js";
6
+ import { Input } from "../ui/input.js";
7
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select.js";
8
+ import { Sheet, SheetBody, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "../ui/sheet.js";
9
9
  function InviteUserSheet({ defaultRole, isSubmitting = false, onOpenChange, onSubmit, open, roles, }) {
10
10
  const initialRole = getInitialRole(roles, defaultRole);
11
11
  const formId = React.useId();
@@ -1,6 +1,6 @@
1
1
  import type * as React from "react";
2
- import type { KanbanCardData, KanbanColumnData, KanbanMoveEvent } from "./kanban-types";
3
- import { type KanbanBoardState, type KanbanOverlayRect } from "./kanban-board-utils";
2
+ import type { KanbanCardData, KanbanColumnData, KanbanMoveEvent } from "./kanban-types.js";
3
+ import { type KanbanBoardState, type KanbanOverlayRect } from "./kanban-board-utils.js";
4
4
  type KanbanBoardColumnProps = {
5
5
  activeCardId: string | undefined;
6
6
  activeCardRect: KanbanOverlayRect | undefined;
@@ -3,9 +3,9 @@ import { DragOverlay, useDroppable } from "@dnd-kit/core";
3
3
  import { SortableContext, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable";
4
4
  import { CSS } from "@dnd-kit/utilities";
5
5
  import { createPortal } from "react-dom";
6
- import { KanbanCard } from "./kanban-card";
7
- import { KanbanColumn } from "./kanban-column";
8
- import { getColumnDroppableId, } from "./kanban-board-utils";
6
+ import { KanbanCard } from "./kanban-card.js";
7
+ import { KanbanColumn } from "./kanban-column.js";
8
+ import { getColumnDroppableId, } from "./kanban-board-utils.js";
9
9
  function KanbanBoardColumn({ activeCardId, activeCardRect, activeMove, boardState, column, columnMaxHeight, empty, isLoading, isOver, onCardMove, onCardSelect, renderCard, renderCardActions, renderColumnActions, suppressSelectRef, }) {
10
10
  const cards = boardState.cardsByColumnId.get(column.id) ?? [];
11
11
  const dropPlaceholderIndex = getDropPlaceholderIndex(column.id, activeMove);
@@ -1,6 +1,6 @@
1
1
  import type * as React from "react";
2
2
  import type { DragEndEvent, DragOverEvent, DragStartEvent } from "@dnd-kit/core";
3
- import type { KanbanCardData, KanbanColumnData, KanbanMoveEvent } from "./kanban-types";
3
+ import type { KanbanCardData, KanbanColumnData, KanbanMoveEvent } from "./kanban-types.js";
4
4
  type KanbanBoardState = {
5
5
  cardById: Map<string, KanbanCardData>;
6
6
  cardsByColumnId: Map<string, KanbanCardData[]>;
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import type { KanbanCardData, KanbanColumnData, KanbanMoveEvent } from "./kanban-types";
2
+ import type { KanbanCardData, KanbanColumnData, KanbanMoveEvent } from "./kanban-types.js";
3
3
  type KanbanBoardProps = {
4
4
  cards: KanbanCardData[];
5
5
  columns: KanbanColumnData[];
@@ -3,8 +3,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { closestCorners, DndContext, KeyboardSensor, PointerSensor, useSensor, useSensors, } from "@dnd-kit/core";
5
5
  import { sortableKeyboardCoordinates } from "@dnd-kit/sortable";
6
- import { KanbanBoardColumn, KanbanDragOverlay } from "./kanban-board-parts";
7
- import { clearDragState, getDragEndHandler, getDragOverHandler, getDragStartHandler, getKanbanBoardState, } from "./kanban-board-utils";
6
+ import { KanbanBoardColumn, KanbanDragOverlay } from "./kanban-board-parts.js";
7
+ import { clearDragState, getDragEndHandler, getDragOverHandler, getDragStartHandler, getKanbanBoardState, } from "./kanban-board-utils.js";
8
8
  function KanbanBoard({ cards, columns, columnMaxHeight = "min(44rem, calc(100vh - 14rem))", empty, isLoading = false, onCardMove, onCardSelect, renderCard, renderCardActions, renderColumnActions, }) {
9
9
  const [activeCard, setActiveCard] = React.useState();
10
10
  const [activeCardRect, setActiveCardRect] = React.useState();
@@ -1,5 +1,5 @@
1
1
  import type * as React from "react";
2
- import type { KanbanCardData } from "./kanban-types";
2
+ import type { KanbanCardData } from "./kanban-types.js";
3
3
  type KanbanCardProps = {
4
4
  actionsSlot?: React.ReactNode;
5
5
  card: KanbanCardData;
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { cn } from "../../lib/utils";
2
+ import { cn } from "../../lib/utils.js";
3
3
  function KanbanCard({ actionsSlot, card, isDragging = false, onSelect }) {
4
4
  return (_jsxs("article", { "aria-disabled": card.disabled, "data-dragging": isDragging, "data-disabled": card.disabled, onClick: getCardSelectHandler(card, onSelect), onKeyDown: getCardSelectKeyHandler(card, onSelect), role: onSelect ? "button" : undefined, tabIndex: onSelect && !card.disabled ? 0 : undefined, className: cn("group/kanban-card grid min-w-0 gap-2 rounded-md border bg-card p-3 text-card-foreground shadow-xs transition-[background-color,border-color,box-shadow,opacity,transform] outline-none", "hover:bg-accent/35 focus-visible:border-ring focus-visible:ring-[var(--focus-ring-width)] focus-visible:ring-ring/50", "data-[dragging=true]:border-ring data-[dragging=true]:bg-accent/40 data-[dragging=true]:opacity-80", "data-[disabled=true]:opacity-60", onSelect && !card.disabled ? "cursor-pointer" : undefined), children: [_jsx(KanbanCardHeader, { actionsSlot: actionsSlot, card: card }), card.description ? (_jsx("p", { className: "line-clamp-2 text-sm leading-normal text-muted-foreground", children: card.description })) : null, _jsx(KanbanCardFooter, { card: card })] }));
5
5
  }
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import type { KanbanCardData, KanbanColumnData } from "./kanban-types";
2
+ import type { KanbanCardData, KanbanColumnData } from "./kanban-types.js";
3
3
  type KanbanColumnProps = {
4
4
  actionsSlot?: React.ReactNode;
5
5
  cards: KanbanCardData[];
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
- import { KanbanCard } from "./kanban-card";
4
- import { Skeleton } from "../ui/skeleton";
5
- import { cn } from "../../lib/utils";
3
+ import { KanbanCard } from "./kanban-card.js";
4
+ import { Skeleton } from "../ui/skeleton.js";
5
+ import { cn } from "../../lib/utils.js";
6
6
  function KanbanColumn({ actionsSlot, cards, column, columnMaxHeight, dropPlaceholder, dropPlaceholderIndex, empty, isLoading = false, isOver = false, renderCard, renderCardActions, }) {
7
7
  const isOverLimit = isColumnOverLimit(column, cards);
8
8
  return (_jsxs("section", { "aria-label": column.title, "data-over": isOver, className: cn("flex min-h-72 min-w-72 flex-col overflow-hidden rounded-lg border bg-muted/25 transition-colors", "data-[over=true]:border-ring data-[over=true]:bg-muted/60"), style: { maxHeight: columnMaxHeight }, children: [_jsx(KanbanColumnHeader, { actionsSlot: actionsSlot, cardCount: cards.length, column: column, isOverLimit: isOverLimit }), _jsx("div", { className: "grid flex-1 content-start gap-2 overflow-y-auto p-2", children: _jsx(KanbanColumnContent, { cards: cards, dropPlaceholder: dropPlaceholder, dropPlaceholderIndex: dropPlaceholderIndex, empty: empty, isLoading: isLoading, renderCard: renderCard, renderCardActions: renderCardActions }) })] }));
@@ -1,5 +1,5 @@
1
1
  import type * as React from "react";
2
- import type { KanbanCardData, KanbanColumnData } from "./kanban-types";
2
+ import type { KanbanCardData, KanbanColumnData } from "./kanban-types.js";
3
3
  type KanbanDetailProperty = {
4
4
  label: string;
5
5
  value: React.ReactNode;
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Badge } from "../ui/badge";
3
- import { Button } from "../ui/button";
4
- import { Card } from "../ui/card";
5
- import { PropertyList, PropertyListItem, PropertyListLabel, PropertyListValue, } from "../ui/property-list";
6
- import { Sheet, SheetBody, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "../ui/sheet";
2
+ import { Badge } from "../ui/badge.js";
3
+ import { Button } from "../ui/button.js";
4
+ import { Card } from "../ui/card.js";
5
+ import { PropertyList, PropertyListItem, PropertyListLabel, PropertyListValue, } from "../ui/property-list.js";
6
+ import { Sheet, SheetBody, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "../ui/sheet.js";
7
7
  function KanbanDetailSheet({ actionsSlot, activitySlot, card, column, onOpenChange, open, properties = [], }) {
8
8
  return (_jsx(Sheet, { onOpenChange: onOpenChange, open: open, children: _jsxs(SheetContent, { size: "md", children: [_jsxs(SheetHeader, { children: [_jsx(SheetTitle, { children: "Card details" }), _jsx(SheetDescription, { children: "Review the selected work item." })] }), _jsx(SheetBody, { className: "grid content-start gap-(--panel-gap) pb-(--panel-padding)", children: card ? (_jsx(KanbanDetailContent, { activitySlot: activitySlot, card: card, column: column, properties: properties })) : null }), _jsxs(SheetFooter, { children: [actionsSlot, _jsx(Button, { onClick: () => onOpenChange(false), type: "button", children: "Done" })] })] }) }));
9
9
  }
@@ -1,5 +1,5 @@
1
- import type { McpToolInventoryState } from "./mcp-access-tool-picker-internals";
2
- import type { McpAccessToolSelector } from "./mcp-access-types";
1
+ import type { McpToolInventoryState } from "./mcp-access-tool-picker-internals.js";
2
+ import type { McpAccessToolSelector } from "./mcp-access-types.js";
3
3
  /**
4
4
  * The tool picker for inventories big enough to need navigation: one scroll
5
5
  * region grouped by each tool's first OpenAPI tag, each group split into Read
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
- import { Checkbox } from "../ui/checkbox";
4
- import { Input } from "../ui/input";
5
- import { Spinner } from "../ui/spinner";
6
- import { EmptySelectionWarning, InventoryUnavailableNote, keyOf, PickerRow, } from "./mcp-access-tool-picker-internals";
3
+ import { Checkbox } from "../ui/checkbox.js";
4
+ import { Input } from "../ui/input.js";
5
+ import { Spinner } from "../ui/spinner.js";
6
+ import { EmptySelectionWarning, InventoryUnavailableNote, keyOf, PickerRow, } from "./mcp-access-tool-picker-internals.js";
7
7
  const UNTAGGED_LABEL = "Other";
8
8
  /**
9
9
  * The tool picker for inventories big enough to need navigation: one scroll
@@ -1,4 +1,4 @@
1
- import type { McpAccessToolListing } from "./mcp-access-types";
1
+ import type { McpAccessToolListing } from "./mcp-access-types.js";
2
2
  /** The coordinate a selector and a compiled operation are matched on. */
3
3
  export declare const keyOf: (tool: {
4
4
  method: string;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useId } from "react";
3
- import { Checkbox } from "../ui/checkbox";
3
+ import { Checkbox } from "../ui/checkbox.js";
4
4
  /** The coordinate a selector and a compiled operation are matched on. */
5
5
  export const keyOf = (tool) => `${tool.method} ${tool.pathTemplate}`;
6
6
  /** The one line an absent inventory renders, in both pickers. */
@@ -1,7 +1,7 @@
1
- import type { McpToolInventoryState } from "./mcp-access-tool-picker-internals";
2
- import type { McpAccessToolSelector } from "./mcp-access-types";
3
- export { keyOf } from "./mcp-access-tool-picker-internals";
4
- export type { McpToolInventoryState } from "./mcp-access-tool-picker-internals";
1
+ import type { McpToolInventoryState } from "./mcp-access-tool-picker-internals.js";
2
+ import type { McpAccessToolSelector } from "./mcp-access-types.js";
3
+ export { keyOf } from "./mcp-access-tool-picker-internals.js";
4
+ export type { McpToolInventoryState } from "./mcp-access-tool-picker-internals.js";
5
5
  /**
6
6
  * An exact tool selection, applied as it is clicked. There is nothing to
7
7
  * confirm: the list on screen is always what a code will be minted with, and an
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Spinner } from "../ui/spinner";
3
- import { EmptySelectionWarning, InventoryUnavailableNote, keyOf, PickerRow, } from "./mcp-access-tool-picker-internals";
4
- export { keyOf } from "./mcp-access-tool-picker-internals";
2
+ import { Spinner } from "../ui/spinner.js";
3
+ import { EmptySelectionWarning, InventoryUnavailableNote, keyOf, PickerRow, } from "./mcp-access-tool-picker-internals.js";
4
+ export { keyOf } from "./mcp-access-tool-picker-internals.js";
5
5
  /**
6
6
  * An exact tool selection, applied as it is clicked. There is nothing to
7
7
  * confirm: the list on screen is always what a code will be minted with, and an
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
- import type { ConnectPlan } from "./mcp-access-types";
3
- import type { McpConnectClient } from "./mcp-connect-clients";
2
+ import type { ConnectPlan } from "./mcp-access-types.js";
3
+ import type { McpConnectClient } from "./mcp-connect-clients.js";
4
4
  /**
5
5
  * Per-client setup for the connection.
6
6
  *
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Tabs, TabsList, TabsTrigger } from "../ui/tabs";
3
- import { CopyField } from "./copy-field";
4
- import { CONNECT_CLIENTS, clientSteps, planAffectsClient } from "./mcp-connect-clients";
5
- import { McpPlanChoice } from "./mcp-plan-choice";
2
+ import { Tabs, TabsList, TabsTrigger } from "../ui/tabs.js";
3
+ import { CopyField } from "./copy-field.js";
4
+ import { CONNECT_CLIENTS, clientSteps, planAffectsClient } from "./mcp-connect-clients.js";
5
+ import { McpPlanChoice } from "./mcp-plan-choice.js";
6
6
  /**
7
7
  * The shape a connector name must have to be interpolated unquoted into the
8
8
  * CLI commands below. Stricter than any one CLI needs: the first character
@@ -1,5 +1,5 @@
1
1
  import type { LucideIcon } from "lucide-react";
2
- import type { ConnectPlan } from "./mcp-access-types";
2
+ import type { ConnectPlan } from "./mcp-access-types.js";
3
3
  /**
4
4
  * Closed: an unknown client is not a reason to show a broken dialog.
5
5
  *
@@ -1,4 +1,4 @@
1
- import type { ConnectPlan } from "./mcp-access-types";
1
+ import type { ConnectPlan } from "./mcp-access-types.js";
2
2
  /**
3
3
  * Who adds the connector, as a named pair matching the access control above it.
4
4
  *
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button } from "../ui/button";
2
+ import { Button } from "../ui/button.js";
3
3
  const PLAN_LABEL = {
4
4
  personal: "Personal",
5
5
  workspace: "Team or Enterprise",
@@ -1,5 +1,5 @@
1
1
  import type * as React from "react";
2
- import type { FeedbackComposerProps } from "./feedback-composer";
3
- import type { useFeedbackComposerState } from "./use-feedback-composer-state";
2
+ import type { FeedbackComposerProps } from "./feedback-composer.js";
3
+ import type { useFeedbackComposerState } from "./use-feedback-composer-state.js";
4
4
  declare function submitFeedbackComposer(event: React.FormEvent<HTMLFormElement>, props: FeedbackComposerProps, state: ReturnType<typeof useFeedbackComposerState>): Promise<void>;
5
5
  export { submitFeedbackComposer };
@@ -4,5 +4,11 @@ type TimestampFormatOptions = {
4
4
  declare function formatTimestamp(value: string | undefined, options?: TimestampFormatOptions): string;
5
5
  declare function formatTimestampFull(value: string | undefined, options?: TimestampFormatOptions): string;
6
6
  declare function getTimestampDateTime(value: string | undefined): string | undefined;
7
- export { formatTimestamp, formatTimestampFull, getTimestampDateTime };
7
+ /**
8
+ * Backends that store naive UTC timestamps serialize without a zone designator,
9
+ * and `Date.parse` reads a zoneless string as local time. Append the missing
10
+ * designator so timestamps render in the viewer's timezone.
11
+ */
12
+ declare function toUtcTimestamp(value: string): string;
13
+ export { formatTimestamp, formatTimestampFull, getTimestampDateTime, toUtcTimestamp };
8
14
  export type { TimestampFormatOptions };
@@ -28,6 +28,14 @@ function getTimestampDateTime(value) {
28
28
  return undefined;
29
29
  return date.toISOString();
30
30
  }
31
+ /**
32
+ * Backends that store naive UTC timestamps serialize without a zone designator,
33
+ * and `Date.parse` reads a zoneless string as local time. Append the missing
34
+ * designator so timestamps render in the viewer's timezone.
35
+ */
36
+ function toUtcTimestamp(value) {
37
+ return /(?:z|[+-]\d\d:?\d\d)$/i.test(value) ? value : `${value}Z`;
38
+ }
31
39
  function parseTimestamp(value) {
32
40
  if (!value)
33
41
  return undefined;
@@ -63,4 +71,4 @@ const dateTimeFormatter = new Intl.DateTimeFormat(undefined, {
63
71
  month: "short",
64
72
  year: "numeric",
65
73
  });
66
- export { formatTimestamp, formatTimestampFull, getTimestampDateTime };
74
+ export { formatTimestamp, formatTimestampFull, getTimestampDateTime, toUtcTimestamp };
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import type { FeedbackAffectedScope, FeedbackType, FeedbackUrgency, FeedbackValidationError } from "./feedback-composer-types";
2
+ import type { FeedbackAffectedScope, FeedbackType, FeedbackUrgency, FeedbackValidationError } from "./feedback-composer-types.js";
3
3
  declare function useFeedbackComposerState(defaultType: FeedbackType, defaultUrgency: FeedbackUrgency): {
4
4
  affectedScope: FeedbackAffectedScope;
5
5
  attachments: File[];
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
- import { type AdminUsersTableProps } from "../blocks/admin-users-table";
3
- import { type InviteUserRole, type InviteUserValues } from "../blocks/invite-user-sheet";
2
+ import { type AdminUsersTableProps } from "../blocks/admin-users-table.js";
3
+ import { type InviteUserRole, type InviteUserValues } from "../blocks/invite-user-sheet.js";
4
4
  type AdminUsersPageProps = AdminUsersTableProps & {
5
5
  defaultRole?: string;
6
6
  isInviting?: boolean;
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { UserPlusIcon } from "lucide-react";
4
- import { AdminUsersTable, } from "../blocks/admin-users-table";
5
- import { InviteUserSheet, } from "../blocks/invite-user-sheet";
6
- import { Button } from "../ui/button";
7
- import { MetricsStrip, MetricsStripDetail, MetricsStripItem, MetricsStripLabel, MetricsStripValue, } from "../ui/metrics-strip";
8
- import { PageHeader, PageHeaderActions, PageHeaderContent, PageHeaderDescription, PageHeaderMain, PageHeaderTitle, } from "../ui/page-header";
4
+ import { AdminUsersTable, } from "../blocks/admin-users-table.js";
5
+ import { InviteUserSheet, } from "../blocks/invite-user-sheet.js";
6
+ import { Button } from "../ui/button.js";
7
+ import { MetricsStrip, MetricsStripDetail, MetricsStripItem, MetricsStripLabel, MetricsStripValue, } from "../ui/metrics-strip.js";
8
+ import { PageHeader, PageHeaderActions, PageHeaderContent, PageHeaderDescription, PageHeaderMain, PageHeaderTitle, } from "../ui/page-header.js";
9
9
  function AdminUsersPage({ defaultRole, isInviting = false, onInviteUser, roles, users, ...tableProps }) {
10
10
  const [inviteOpen, setInviteOpen] = React.useState(false);
11
11
  return (_jsxs("div", { className: "min-h-svh bg-background text-foreground", children: [_jsx(AdminUsersPageHeader, { onInvite: () => setInviteOpen(true) }), _jsxs("main", { className: "grid gap-4 px-4 py-4 md:px-6 lg:px-8", children: [_jsx(AdminUsersMetrics, { users: users }), _jsx(AdminUsersTable, { users: users, ...tableProps })] }), _jsx(InviteUserSheet, { defaultRole: defaultRole, isSubmitting: isInviting, onOpenChange: setInviteOpen, onSubmit: onInviteUser, open: inviteOpen, roles: roles })] }));
@@ -1,4 +1,4 @@
1
- import { type FeedbackStatus, type StakeholderFeedbackType } from "../blocks/feedback-tracking-types";
1
+ import { type FeedbackStatus, type StakeholderFeedbackType } from "../blocks/feedback-tracking-types.js";
2
2
  type StatusFilter = FeedbackStatus | "all";
3
3
  type TypeFilter = StakeholderFeedbackType | "all";
4
4
  type FeedbackFilters = {