@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.
- package/dist/components/blocks/admin-users-table.js +7 -7
- package/dist/components/blocks/comment-composer.d.ts +1 -1
- package/dist/components/blocks/comment-composer.js +23 -5
- package/dist/components/blocks/comment-item.d.ts +1 -1
- package/dist/components/blocks/comment-item.js +4 -4
- package/dist/components/blocks/comment-thread.d.ts +2 -2
- package/dist/components/blocks/comment-thread.js +35 -5
- package/dist/components/blocks/copy-field.js +3 -3
- package/dist/components/blocks/feedback-center-comments.d.ts +2 -2
- package/dist/components/blocks/feedback-center-comments.js +3 -3
- package/dist/components/blocks/feedback-center-footer.d.ts +2 -2
- package/dist/components/blocks/feedback-center-footer.js +2 -2
- package/dist/components/blocks/feedback-center-sheet-parts.d.ts +5 -5
- package/dist/components/blocks/feedback-center-sheet-parts.js +7 -7
- package/dist/components/blocks/feedback-center-sheet.d.ts +5 -5
- package/dist/components/blocks/feedback-center-sheet.js +5 -5
- package/dist/components/blocks/feedback-composer-parts.d.ts +1 -1
- package/dist/components/blocks/feedback-composer-parts.js +4 -4
- package/dist/components/blocks/feedback-composer-types.d.ts +1 -1
- package/dist/components/blocks/feedback-composer.d.ts +1 -1
- package/dist/components/blocks/feedback-composer.js +8 -8
- package/dist/components/blocks/feedback-date-format.d.ts +2 -2
- package/dist/components/blocks/feedback-date-format.js +2 -2
- package/dist/components/blocks/feedback-detail-sheet.d.ts +1 -1
- package/dist/components/blocks/feedback-detail-sheet.js +14 -14
- package/dist/components/blocks/feedback-emergency-fields.d.ts +1 -1
- package/dist/components/blocks/feedback-emergency-fields.js +7 -7
- package/dist/components/blocks/feedback-metrics.d.ts +1 -1
- package/dist/components/blocks/feedback-metrics.js +1 -1
- package/dist/components/blocks/feedback-sheet.d.ts +1 -1
- package/dist/components/blocks/feedback-sheet.js +4 -4
- package/dist/components/blocks/feedback-status-badge.d.ts +1 -1
- package/dist/components/blocks/feedback-status-badge.js +2 -2
- package/dist/components/blocks/feedback-table-row.d.ts +1 -1
- package/dist/components/blocks/feedback-table-row.js +8 -8
- package/dist/components/blocks/feedback-table-sort.d.ts +2 -2
- package/dist/components/blocks/feedback-table.d.ts +2 -2
- package/dist/components/blocks/feedback-table.js +5 -5
- package/dist/components/blocks/feedback-tracking-types.d.ts +7 -1
- package/dist/components/blocks/feedback-triage-timeline.d.ts +11 -0
- package/dist/components/blocks/feedback-triage-timeline.js +17 -0
- package/dist/components/blocks/feedback-type-badge.d.ts +7 -2
- package/dist/components/blocks/feedback-type-badge.js +14 -8
- package/dist/components/blocks/feedback-unread-badge.d.ts +6 -0
- package/dist/components/blocks/feedback-unread-badge.js +9 -0
- package/dist/components/blocks/feedback-user-detail.d.ts +1 -1
- package/dist/components/blocks/feedback-user-detail.js +10 -10
- package/dist/components/blocks/feedback-user-list.d.ts +1 -1
- package/dist/components/blocks/feedback-user-list.js +11 -11
- package/dist/components/blocks/generated-connect-link.d.ts +1 -1
- package/dist/components/blocks/generated-connect-link.js +3 -3
- package/dist/components/blocks/invite-user-sheet.js +5 -5
- package/dist/components/blocks/kanban-board-parts.d.ts +2 -2
- package/dist/components/blocks/kanban-board-parts.js +3 -3
- package/dist/components/blocks/kanban-board-utils.d.ts +1 -1
- package/dist/components/blocks/kanban-board.d.ts +1 -1
- package/dist/components/blocks/kanban-board.js +2 -2
- package/dist/components/blocks/kanban-card.d.ts +1 -1
- package/dist/components/blocks/kanban-card.js +1 -1
- package/dist/components/blocks/kanban-column.d.ts +1 -1
- package/dist/components/blocks/kanban-column.js +3 -3
- package/dist/components/blocks/kanban-detail-sheet.d.ts +1 -1
- package/dist/components/blocks/kanban-detail-sheet.js +5 -5
- package/dist/components/blocks/mcp-access-grouped-tool-picker.d.ts +2 -2
- package/dist/components/blocks/mcp-access-grouped-tool-picker.js +4 -4
- package/dist/components/blocks/mcp-access-tool-picker-internals.d.ts +1 -1
- package/dist/components/blocks/mcp-access-tool-picker-internals.js +1 -1
- package/dist/components/blocks/mcp-access-tool-picker.d.ts +4 -4
- package/dist/components/blocks/mcp-access-tool-picker.js +3 -3
- package/dist/components/blocks/mcp-client-setup.d.ts +2 -2
- package/dist/components/blocks/mcp-client-setup.js +4 -4
- package/dist/components/blocks/mcp-connect-clients.d.ts +1 -1
- package/dist/components/blocks/mcp-plan-choice.d.ts +1 -1
- package/dist/components/blocks/mcp-plan-choice.js +1 -1
- package/dist/components/blocks/submit-feedback-composer.d.ts +2 -2
- package/dist/components/blocks/timestamp-format.d.ts +7 -1
- package/dist/components/blocks/timestamp-format.js +9 -1
- package/dist/components/blocks/use-feedback-composer-state.d.ts +1 -1
- package/dist/components/pages/admin-users-page.d.ts +2 -2
- package/dist/components/pages/admin-users-page.js +5 -5
- package/dist/components/pages/feedback-stakeholder-page-parts.d.ts +1 -1
- package/dist/components/pages/feedback-stakeholder-page-parts.js +4 -4
- package/dist/components/pages/feedback-stakeholder-page.d.ts +1 -1
- package/dist/components/pages/feedback-stakeholder-page.js +5 -5
- package/dist/components/pages/kanban-page.d.ts +1 -1
- package/dist/components/pages/kanban-page.js +5 -5
- package/dist/components/ui/accordion.js +1 -1
- package/dist/components/ui/alert-dialog.d.ts +1 -1
- package/dist/components/ui/alert-dialog.js +2 -2
- package/dist/components/ui/alert.js +1 -1
- package/dist/components/ui/app-shell-page.d.ts +1 -1
- package/dist/components/ui/app-shell-page.js +3 -3
- package/dist/components/ui/app-shell.d.ts +2 -2
- package/dist/components/ui/app-shell.js +3 -3
- package/dist/components/ui/avatar.js +1 -1
- package/dist/components/ui/badge-variants.d.ts +1 -1
- package/dist/components/ui/badge.d.ts +1 -1
- package/dist/components/ui/badge.js +2 -2
- package/dist/components/ui/breadcrumb.js +1 -1
- package/dist/components/ui/button-group.d.ts +2 -2
- package/dist/components/ui/button-group.js +3 -3
- package/dist/components/ui/button-variants.d.ts +1 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/button.js +3 -3
- package/dist/components/ui/calendar.d.ts +1 -1
- package/dist/components/ui/calendar.js +3 -3
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/carousel.d.ts +1 -1
- package/dist/components/ui/carousel.js +2 -2
- package/dist/components/ui/chart-panel.js +1 -1
- package/dist/components/ui/chart-tooltip.js +2 -2
- package/dist/components/ui/chart.d.ts +2 -2
- package/dist/components/ui/chart.js +3 -3
- package/dist/components/ui/checkbox.js +1 -1
- package/dist/components/ui/ciridae-ui-provider.d.ts +1 -1
- package/dist/components/ui/ciridae-ui-provider.js +3 -3
- package/dist/components/ui/color-theme-context.d.ts +1 -1
- package/dist/components/ui/color-theme.d.ts +2 -2
- package/dist/components/ui/color-theme.js +8 -6
- package/dist/components/ui/combobox.js +3 -3
- package/dist/components/ui/command.d.ts +1 -1
- package/dist/components/ui/command.js +2 -2
- package/dist/components/ui/context-menu.js +1 -1
- package/dist/components/ui/data-table-column-settings.js +5 -5
- package/dist/components/ui/data-table-controls.d.ts +1 -1
- package/dist/components/ui/data-table-controls.js +3 -3
- package/dist/components/ui/data-table-facet-filter.d.ts +22 -6
- package/dist/components/ui/data-table-facet-filter.js +38 -26
- package/dist/components/ui/data-table-grid.js +3 -3
- package/dist/components/ui/data-table-pagination.d.ts +1 -1
- package/dist/components/ui/data-table-pagination.js +3 -3
- package/dist/components/ui/data-table-search-input.d.ts +14 -0
- package/dist/components/ui/data-table-search-input.js +15 -0
- package/dist/components/ui/data-table-tanstack.js +6 -6
- package/dist/components/ui/data-table.d.ts +4 -4
- package/dist/components/ui/data-table.js +5 -5
- package/dist/components/ui/dialog.js +2 -2
- package/dist/components/ui/drawer.js +1 -1
- package/dist/components/ui/dropdown-menu.js +1 -1
- package/dist/components/ui/empty.js +1 -1
- package/dist/components/ui/expandable-data-table.d.ts +1 -1
- package/dist/components/ui/expandable-data-table.js +4 -4
- package/dist/components/ui/field.d.ts +1 -1
- package/dist/components/ui/field.js +3 -3
- package/dist/components/ui/file-upload-field-parts.js +3 -3
- package/dist/components/ui/file-upload-field.js +2 -2
- package/dist/components/ui/form-sheet.js +2 -2
- package/dist/components/ui/form.js +3 -3
- package/dist/components/ui/hover-card.js +1 -1
- package/dist/components/ui/input-group.d.ts +1 -1
- package/dist/components/ui/input-group.js +4 -4
- package/dist/components/ui/input-otp.js +1 -1
- package/dist/components/ui/input.js +1 -1
- package/dist/components/ui/item.d.ts +1 -1
- package/dist/components/ui/item.js +9 -5
- package/dist/components/ui/kbd.js +1 -1
- package/dist/components/ui/label.js +1 -1
- package/dist/components/ui/loading-state.d.ts +1 -1
- package/dist/components/ui/loading-state.js +4 -4
- package/dist/components/ui/menubar.js +1 -1
- package/dist/components/ui/metrics-strip.js +1 -1
- package/dist/components/ui/native-select.js +1 -1
- package/dist/components/ui/navigation-menu.js +2 -2
- package/dist/components/ui/page-header.d.ts +1 -1
- package/dist/components/ui/page-header.js +2 -2
- package/dist/components/ui/pagination.d.ts +1 -1
- package/dist/components/ui/pagination.js +2 -2
- package/dist/components/ui/popover.js +1 -1
- package/dist/components/ui/progress.js +1 -1
- package/dist/components/ui/property-list.js +1 -1
- package/dist/components/ui/radio-group.js +1 -1
- package/dist/components/ui/registry-docs-api.js +1 -1
- package/dist/components/ui/registry-docs-code.js +2 -2
- package/dist/components/ui/registry-docs-showcase.js +3 -3
- package/dist/components/ui/registry-docs.d.ts +4 -4
- package/dist/components/ui/registry-docs.js +6 -6
- package/dist/components/ui/resizable.js +1 -1
- package/dist/components/ui/scroll-area.js +1 -1
- package/dist/components/ui/select.js +1 -1
- package/dist/components/ui/separator.js +1 -1
- package/dist/components/ui/sheet.js +1 -1
- package/dist/components/ui/sidebar/group.js +1 -1
- package/dist/components/ui/sidebar/layout.d.ts +2 -2
- package/dist/components/ui/sidebar/layout.js +5 -5
- package/dist/components/ui/sidebar/menu.d.ts +1 -1
- package/dist/components/ui/sidebar/menu.js +4 -4
- package/dist/components/ui/sidebar/provider.js +4 -4
- package/dist/components/ui/sidebar/rail.js +2 -2
- package/dist/components/ui/sidebar/trigger.d.ts +1 -1
- package/dist/components/ui/sidebar/trigger.js +3 -3
- package/dist/components/ui/sidebar-account-menu-theme.js +2 -2
- package/dist/components/ui/sidebar-account-menu.d.ts +1 -1
- package/dist/components/ui/sidebar-account-menu.js +7 -7
- package/dist/components/ui/sidebar.d.ts +7 -7
- package/dist/components/ui/sidebar.js +7 -7
- package/dist/components/ui/skeleton.js +1 -1
- package/dist/components/ui/slider.js +1 -1
- package/dist/components/ui/sonner.js +1 -1
- package/dist/components/ui/spinner.js +1 -1
- package/dist/components/ui/switch.js +1 -1
- package/dist/components/ui/table.js +1 -1
- package/dist/components/ui/tabs.d.ts +1 -1
- package/dist/components/ui/tabs.js +2 -2
- package/dist/components/ui/textarea.js +1 -1
- package/dist/components/ui/toggle-group.d.ts +1 -1
- package/dist/components/ui/toggle-group.js +2 -2
- package/dist/components/ui/toggle.d.ts +1 -1
- package/dist/components/ui/toggle.js +2 -2
- package/dist/components/ui/tooltip.js +1 -1
- package/dist/components/ui/use-color-theme.d.ts +1 -1
- package/dist/components/ui/use-color-theme.js +1 -1
- package/dist/components/ui/workflow-timeline.js +1 -1
- package/dist/entries/accordion.d.ts +1 -1
- package/dist/entries/accordion.js +1 -1
- package/dist/entries/admin-users-page.d.ts +1 -1
- package/dist/entries/admin-users-page.js +1 -1
- package/dist/entries/admin-users-table.d.ts +1 -1
- package/dist/entries/admin-users-table.js +1 -1
- package/dist/entries/alert-dialog.d.ts +1 -1
- package/dist/entries/alert-dialog.js +1 -1
- package/dist/entries/alert.d.ts +1 -1
- package/dist/entries/alert.js +1 -1
- package/dist/entries/app-shell-page.d.ts +1 -1
- package/dist/entries/app-shell-page.js +1 -1
- package/dist/entries/app-shell.d.ts +1 -1
- package/dist/entries/app-shell.js +1 -1
- package/dist/entries/aspect-ratio.d.ts +1 -1
- package/dist/entries/aspect-ratio.js +1 -1
- package/dist/entries/avatar.d.ts +1 -1
- package/dist/entries/avatar.js +1 -1
- package/dist/entries/badge-variants.d.ts +1 -1
- package/dist/entries/badge-variants.js +1 -1
- package/dist/entries/badge.d.ts +1 -1
- package/dist/entries/badge.js +1 -1
- package/dist/entries/breadcrumb.d.ts +1 -1
- package/dist/entries/breadcrumb.js +1 -1
- package/dist/entries/button-group-variants.d.ts +1 -1
- package/dist/entries/button-group-variants.js +1 -1
- package/dist/entries/button-group.d.ts +1 -1
- package/dist/entries/button-group.js +1 -1
- package/dist/entries/button-variants.d.ts +1 -1
- package/dist/entries/button-variants.js +1 -1
- package/dist/entries/button.d.ts +1 -1
- package/dist/entries/button.js +1 -1
- package/dist/entries/calendar.d.ts +1 -1
- package/dist/entries/calendar.js +1 -1
- package/dist/entries/card.d.ts +1 -1
- package/dist/entries/card.js +1 -1
- package/dist/entries/carousel.d.ts +1 -1
- package/dist/entries/carousel.js +1 -1
- package/dist/entries/chart-context.d.ts +1 -1
- package/dist/entries/chart-context.js +1 -1
- package/dist/entries/chart-panel.d.ts +1 -1
- package/dist/entries/chart-panel.js +1 -1
- package/dist/entries/chart-tooltip.d.ts +1 -1
- package/dist/entries/chart-tooltip.js +1 -1
- package/dist/entries/chart.d.ts +1 -1
- package/dist/entries/chart.js +1 -1
- package/dist/entries/checkbox.d.ts +1 -1
- package/dist/entries/checkbox.js +1 -1
- package/dist/entries/ciridae-brand-assets.d.ts +1 -1
- package/dist/entries/ciridae-brand-assets.js +1 -1
- package/dist/entries/ciridae-ui-provider.d.ts +1 -1
- package/dist/entries/ciridae-ui-provider.js +1 -1
- package/dist/entries/collapsible.d.ts +1 -1
- package/dist/entries/collapsible.js +1 -1
- package/dist/entries/color-theme-context.d.ts +1 -1
- package/dist/entries/color-theme-context.js +1 -1
- package/dist/entries/color-theme.d.ts +1 -1
- package/dist/entries/color-theme.js +1 -1
- package/dist/entries/combobox-anchor.d.ts +1 -1
- package/dist/entries/combobox-anchor.js +1 -1
- package/dist/entries/combobox.d.ts +1 -1
- package/dist/entries/combobox.js +1 -1
- package/dist/entries/command.d.ts +1 -1
- package/dist/entries/command.js +1 -1
- package/dist/entries/comment-composer.d.ts +1 -1
- package/dist/entries/comment-composer.js +1 -1
- package/dist/entries/comment-item.d.ts +1 -1
- package/dist/entries/comment-item.js +1 -1
- package/dist/entries/comment-thread.d.ts +1 -1
- package/dist/entries/comment-thread.js +1 -1
- package/dist/entries/comment-types.d.ts +1 -1
- package/dist/entries/comment-types.js +1 -1
- package/dist/entries/context-menu.d.ts +1 -1
- package/dist/entries/context-menu.js +1 -1
- package/dist/entries/copy-field.d.ts +1 -1
- package/dist/entries/copy-field.js +1 -1
- package/dist/entries/data-table-column-settings.d.ts +1 -1
- package/dist/entries/data-table-column-settings.js +1 -1
- package/dist/entries/data-table-context.d.ts +1 -1
- package/dist/entries/data-table-context.js +1 -1
- package/dist/entries/data-table-controls.d.ts +1 -1
- package/dist/entries/data-table-controls.js +1 -1
- package/dist/entries/data-table-facet-filter.d.ts +1 -1
- package/dist/entries/data-table-facet-filter.js +1 -1
- package/dist/entries/data-table-grid.d.ts +1 -1
- package/dist/entries/data-table-grid.js +1 -1
- package/dist/entries/data-table-pagination.d.ts +1 -1
- package/dist/entries/data-table-pagination.js +1 -1
- package/dist/entries/data-table-search-input.d.ts +1 -0
- package/dist/entries/data-table-search-input.js +1 -0
- package/dist/entries/data-table-state.d.ts +1 -1
- package/dist/entries/data-table-state.js +1 -1
- package/dist/entries/data-table-tanstack.d.ts +1 -1
- package/dist/entries/data-table-tanstack.js +1 -1
- package/dist/entries/data-table.d.ts +1 -1
- package/dist/entries/data-table.js +1 -1
- package/dist/entries/dialog.d.ts +1 -1
- package/dist/entries/dialog.js +1 -1
- package/dist/entries/direction-context.d.ts +1 -1
- package/dist/entries/direction-context.js +1 -1
- package/dist/entries/direction.d.ts +1 -1
- package/dist/entries/direction.js +1 -1
- package/dist/entries/drawer.d.ts +1 -1
- package/dist/entries/drawer.js +1 -1
- package/dist/entries/dropdown-menu.d.ts +1 -1
- package/dist/entries/dropdown-menu.js +1 -1
- package/dist/entries/empty.d.ts +1 -1
- package/dist/entries/empty.js +1 -1
- package/dist/entries/expandable-data-table.d.ts +1 -1
- package/dist/entries/expandable-data-table.js +1 -1
- package/dist/entries/feedback-center-comments.d.ts +1 -1
- package/dist/entries/feedback-center-comments.js +1 -1
- package/dist/entries/feedback-center-footer.d.ts +1 -1
- package/dist/entries/feedback-center-footer.js +1 -1
- package/dist/entries/feedback-center-sheet-parts.d.ts +1 -1
- package/dist/entries/feedback-center-sheet-parts.js +1 -1
- package/dist/entries/feedback-center-sheet.d.ts +1 -1
- package/dist/entries/feedback-center-sheet.js +1 -1
- package/dist/entries/feedback-composer-parts.d.ts +1 -1
- package/dist/entries/feedback-composer-parts.js +1 -1
- package/dist/entries/feedback-composer-types.d.ts +1 -1
- package/dist/entries/feedback-composer-types.js +1 -1
- package/dist/entries/feedback-composer.d.ts +1 -1
- package/dist/entries/feedback-composer.js +1 -1
- package/dist/entries/feedback-date-format.d.ts +1 -1
- package/dist/entries/feedback-date-format.js +1 -1
- package/dist/entries/feedback-detail-sheet.d.ts +1 -1
- package/dist/entries/feedback-detail-sheet.js +1 -1
- package/dist/entries/feedback-emergency-fields.d.ts +1 -1
- package/dist/entries/feedback-emergency-fields.js +1 -1
- package/dist/entries/feedback-metrics.d.ts +1 -1
- package/dist/entries/feedback-metrics.js +1 -1
- package/dist/entries/feedback-sheet.d.ts +1 -1
- package/dist/entries/feedback-sheet.js +1 -1
- package/dist/entries/feedback-stakeholder-page-parts.d.ts +1 -1
- package/dist/entries/feedback-stakeholder-page-parts.js +1 -1
- package/dist/entries/feedback-stakeholder-page.d.ts +1 -1
- package/dist/entries/feedback-stakeholder-page.js +1 -1
- package/dist/entries/feedback-status-badge.d.ts +1 -1
- package/dist/entries/feedback-status-badge.js +1 -1
- package/dist/entries/feedback-table-row.d.ts +1 -1
- package/dist/entries/feedback-table-row.js +1 -1
- package/dist/entries/feedback-table-sort.d.ts +1 -1
- package/dist/entries/feedback-table-sort.js +1 -1
- package/dist/entries/feedback-table.d.ts +1 -1
- package/dist/entries/feedback-table.js +1 -1
- package/dist/entries/feedback-tracking-types.d.ts +1 -1
- package/dist/entries/feedback-tracking-types.js +1 -1
- package/dist/entries/feedback-triage-timeline.d.ts +1 -0
- package/dist/entries/feedback-triage-timeline.js +1 -0
- package/dist/entries/feedback-type-badge.d.ts +1 -1
- package/dist/entries/feedback-type-badge.js +1 -1
- package/dist/entries/feedback-unread-badge.d.ts +1 -0
- package/dist/entries/feedback-unread-badge.js +1 -0
- package/dist/entries/feedback-user-detail.d.ts +1 -1
- package/dist/entries/feedback-user-detail.js +1 -1
- package/dist/entries/feedback-user-list.d.ts +1 -1
- package/dist/entries/feedback-user-list.js +1 -1
- package/dist/entries/field.d.ts +1 -1
- package/dist/entries/field.js +1 -1
- package/dist/entries/file-upload-field-parts.d.ts +1 -1
- package/dist/entries/file-upload-field-parts.js +1 -1
- package/dist/entries/file-upload-field.d.ts +1 -1
- package/dist/entries/file-upload-field.js +1 -1
- package/dist/entries/form-context.d.ts +1 -1
- package/dist/entries/form-context.js +1 -1
- package/dist/entries/form-sheet.d.ts +1 -1
- package/dist/entries/form-sheet.js +1 -1
- package/dist/entries/form.d.ts +1 -1
- package/dist/entries/form.js +1 -1
- package/dist/entries/generated-connect-link.d.ts +1 -1
- package/dist/entries/generated-connect-link.js +1 -1
- package/dist/entries/hover-card.d.ts +1 -1
- package/dist/entries/hover-card.js +1 -1
- package/dist/entries/input-group.d.ts +1 -1
- package/dist/entries/input-group.js +1 -1
- package/dist/entries/input-otp.d.ts +1 -1
- package/dist/entries/input-otp.js +1 -1
- package/dist/entries/input.d.ts +1 -1
- package/dist/entries/input.js +1 -1
- package/dist/entries/invite-user-sheet.d.ts +1 -1
- package/dist/entries/invite-user-sheet.js +1 -1
- package/dist/entries/item.d.ts +1 -1
- package/dist/entries/item.js +1 -1
- package/dist/entries/kanban-board-parts.d.ts +1 -1
- package/dist/entries/kanban-board-parts.js +1 -1
- package/dist/entries/kanban-board-utils.d.ts +1 -1
- package/dist/entries/kanban-board-utils.js +1 -1
- package/dist/entries/kanban-board.d.ts +1 -1
- package/dist/entries/kanban-board.js +1 -1
- package/dist/entries/kanban-card.d.ts +1 -1
- package/dist/entries/kanban-card.js +1 -1
- package/dist/entries/kanban-column.d.ts +1 -1
- package/dist/entries/kanban-column.js +1 -1
- package/dist/entries/kanban-detail-sheet.d.ts +1 -1
- package/dist/entries/kanban-detail-sheet.js +1 -1
- package/dist/entries/kanban-page.d.ts +1 -1
- package/dist/entries/kanban-page.js +1 -1
- package/dist/entries/kanban-types.d.ts +1 -1
- package/dist/entries/kanban-types.js +1 -1
- package/dist/entries/kbd.d.ts +1 -1
- package/dist/entries/kbd.js +1 -1
- package/dist/entries/label.d.ts +1 -1
- package/dist/entries/label.js +1 -1
- package/dist/entries/loading-state.d.ts +1 -1
- package/dist/entries/loading-state.js +1 -1
- package/dist/entries/mcp-access-grouped-tool-picker.d.ts +1 -1
- package/dist/entries/mcp-access-grouped-tool-picker.js +1 -1
- package/dist/entries/mcp-access-tool-picker.d.ts +1 -1
- package/dist/entries/mcp-access-tool-picker.js +1 -1
- package/dist/entries/mcp-access-types.d.ts +1 -1
- package/dist/entries/mcp-access-types.js +1 -1
- package/dist/entries/mcp-client-setup.d.ts +1 -1
- package/dist/entries/mcp-client-setup.js +1 -1
- package/dist/entries/mcp-connect-clients.d.ts +1 -1
- package/dist/entries/mcp-connect-clients.js +1 -1
- package/dist/entries/mcp-plan-choice.d.ts +1 -1
- package/dist/entries/mcp-plan-choice.js +1 -1
- package/dist/entries/menubar.d.ts +1 -1
- package/dist/entries/menubar.js +1 -1
- package/dist/entries/metrics-strip.d.ts +1 -1
- package/dist/entries/metrics-strip.js +1 -1
- package/dist/entries/native-select.d.ts +1 -1
- package/dist/entries/native-select.js +1 -1
- package/dist/entries/navigation-menu-variants.d.ts +1 -1
- package/dist/entries/navigation-menu-variants.js +1 -1
- package/dist/entries/navigation-menu.d.ts +1 -1
- package/dist/entries/navigation-menu.js +1 -1
- package/dist/entries/page-header.d.ts +1 -1
- package/dist/entries/page-header.js +1 -1
- package/dist/entries/pagination.d.ts +1 -1
- package/dist/entries/pagination.js +1 -1
- package/dist/entries/palette.d.ts +2 -2
- package/dist/entries/palette.js +2 -2
- package/dist/entries/popover.d.ts +1 -1
- package/dist/entries/popover.js +1 -1
- package/dist/entries/progress.d.ts +1 -1
- package/dist/entries/progress.js +1 -1
- package/dist/entries/property-list.d.ts +1 -1
- package/dist/entries/property-list.js +1 -1
- package/dist/entries/radio-group.d.ts +1 -1
- package/dist/entries/radio-group.js +1 -1
- package/dist/entries/registry-docs-api.d.ts +1 -1
- package/dist/entries/registry-docs-api.js +1 -1
- package/dist/entries/registry-docs-code.d.ts +1 -1
- package/dist/entries/registry-docs-code.js +1 -1
- package/dist/entries/registry-docs-showcase.d.ts +1 -1
- package/dist/entries/registry-docs-showcase.js +1 -1
- package/dist/entries/registry-docs.d.ts +1 -1
- package/dist/entries/registry-docs.js +1 -1
- package/dist/entries/resizable.d.ts +1 -1
- package/dist/entries/resizable.js +1 -1
- package/dist/entries/scroll-area.d.ts +1 -1
- package/dist/entries/scroll-area.js +1 -1
- package/dist/entries/select.d.ts +1 -1
- package/dist/entries/select.js +1 -1
- package/dist/entries/separator.d.ts +1 -1
- package/dist/entries/separator.js +1 -1
- package/dist/entries/sheet.d.ts +1 -1
- package/dist/entries/sheet.js +1 -1
- package/dist/entries/sidebar/context.d.ts +1 -1
- package/dist/entries/sidebar/context.js +1 -1
- package/dist/entries/sidebar/group.d.ts +1 -1
- package/dist/entries/sidebar/group.js +1 -1
- package/dist/entries/sidebar/layout.d.ts +1 -1
- package/dist/entries/sidebar/layout.js +1 -1
- package/dist/entries/sidebar/menu.d.ts +1 -1
- package/dist/entries/sidebar/menu.js +1 -1
- package/dist/entries/sidebar/provider.d.ts +1 -1
- package/dist/entries/sidebar/provider.js +1 -1
- package/dist/entries/sidebar/rail.d.ts +1 -1
- package/dist/entries/sidebar/rail.js +1 -1
- package/dist/entries/sidebar/trigger.d.ts +1 -1
- package/dist/entries/sidebar/trigger.js +1 -1
- package/dist/entries/sidebar-account-menu-theme.d.ts +1 -1
- package/dist/entries/sidebar-account-menu-theme.js +1 -1
- package/dist/entries/sidebar-account-menu.d.ts +1 -1
- package/dist/entries/sidebar-account-menu.js +1 -1
- package/dist/entries/sidebar.d.ts +1 -1
- package/dist/entries/sidebar.js +1 -1
- package/dist/entries/skeleton.d.ts +1 -1
- package/dist/entries/skeleton.js +1 -1
- package/dist/entries/slider.d.ts +1 -1
- package/dist/entries/slider.js +1 -1
- package/dist/entries/sonner.d.ts +1 -1
- package/dist/entries/sonner.js +1 -1
- package/dist/entries/spinner.d.ts +1 -1
- package/dist/entries/spinner.js +1 -1
- package/dist/entries/submit-feedback-composer.d.ts +1 -1
- package/dist/entries/submit-feedback-composer.js +1 -1
- package/dist/entries/switch.d.ts +1 -1
- package/dist/entries/switch.js +1 -1
- package/dist/entries/table.d.ts +1 -1
- package/dist/entries/table.js +1 -1
- package/dist/entries/tabs-variants.d.ts +1 -1
- package/dist/entries/tabs-variants.js +1 -1
- package/dist/entries/tabs.d.ts +1 -1
- package/dist/entries/tabs.js +1 -1
- package/dist/entries/textarea.d.ts +1 -1
- package/dist/entries/textarea.js +1 -1
- package/dist/entries/timestamp-format.d.ts +1 -1
- package/dist/entries/timestamp-format.js +1 -1
- package/dist/entries/toggle-group.d.ts +1 -1
- package/dist/entries/toggle-group.js +1 -1
- package/dist/entries/toggle-variants.d.ts +1 -1
- package/dist/entries/toggle-variants.js +1 -1
- package/dist/entries/toggle.d.ts +1 -1
- package/dist/entries/toggle.js +1 -1
- package/dist/entries/tooltip.d.ts +1 -1
- package/dist/entries/tooltip.js +1 -1
- package/dist/entries/use-color-theme.d.ts +1 -1
- package/dist/entries/use-color-theme.js +1 -1
- package/dist/entries/use-feedback-composer-state.d.ts +1 -1
- package/dist/entries/use-feedback-composer-state.js +1 -1
- package/dist/entries/use-mobile.d.ts +1 -1
- package/dist/entries/use-mobile.js +1 -1
- package/dist/entries/utils.d.ts +1 -1
- package/dist/entries/utils.js +1 -1
- package/dist/entries/workflow-timeline.d.ts +1 -1
- package/dist/entries/workflow-timeline.js +1 -1
- package/dist/hooks/use-mobile.js +4 -2
- package/dist/lib/palette-presets.d.ts +1 -1
- package/dist/lib/palette.d.ts +1 -1
- package/dist/lib/palette.js +2 -2
- 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
|
|
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
|
-
|
|
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 {
|
|
3
|
-
import {
|
|
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
|
-
|
|
10
|
+
const Icon = feedbackTypeIcons[type];
|
|
11
|
+
return (_jsxs(Badge, { variant: "outline", children: [_jsx(Icon, {}), feedbackTypeLabels[type]] }));
|
|
6
12
|
}
|
|
7
|
-
const
|
|
8
|
-
bug:
|
|
9
|
-
feature:
|
|
10
|
-
general:
|
|
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
|
|
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,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
|
|
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 { 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,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,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 * 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
|
-
|
|
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 = {
|