@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,12 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { MoreHorizontalIcon, ShieldCheckIcon, UserPlusIcon } from "lucide-react";
|
|
3
|
-
import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar";
|
|
4
|
-
import { Badge } from "../ui/badge";
|
|
5
|
-
import { Button } from "../ui/button";
|
|
6
|
-
import { DataTable, DataTableContent, DataTableEmpty, DataTableSkeleton } from "../ui/data-table";
|
|
7
|
-
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "../ui/dropdown-menu";
|
|
8
|
-
import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../ui/empty";
|
|
9
|
-
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../ui/table";
|
|
3
|
+
import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar.js";
|
|
4
|
+
import { Badge } from "../ui/badge.js";
|
|
5
|
+
import { Button } from "../ui/button.js";
|
|
6
|
+
import { DataTable, DataTableContent, DataTableEmpty, DataTableSkeleton } from "../ui/data-table.js";
|
|
7
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "../ui/dropdown-menu.js";
|
|
8
|
+
import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "../ui/empty.js";
|
|
9
|
+
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../ui/table.js";
|
|
10
10
|
function AdminUsersTable({ isLoading = false, users, ...actions }) {
|
|
11
11
|
if (isLoading) {
|
|
12
12
|
return _jsx(AdminUsersTableLoading, {});
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { getCommentAuthorInitials } from "./comment-types";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { getCommentAuthorInitials } from "./comment-types.js";
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
|
+
import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar.js";
|
|
6
|
+
import { InputGroupButton, InputGroupTextarea } from "../ui/input-group.js";
|
|
6
7
|
const COMMENT_TEXTAREA_MAX_HEIGHT = 128;
|
|
7
8
|
function CommentComposer({ actionsSlot, author, defaultExpanded = false, defaultValue = "", disabled = false, isSubmitting = false, loadingLabel = "Posting...", onSubmit, onValueChange, placeholder = "Write a reply...", submitLabel = "Post", value, }) {
|
|
8
9
|
const textareaRef = React.useRef(null);
|
|
@@ -17,9 +18,17 @@ function CommentComposer({ actionsSlot, author, defaultExpanded = false, default
|
|
|
17
18
|
});
|
|
18
19
|
React.useEffect(() => {
|
|
19
20
|
resizeCommentTextarea(textareaRef.current);
|
|
20
|
-
|
|
21
|
+
// showActions is a dep because each min-height bakes into the inline
|
|
22
|
+
// height this writes; a collapse without a value change must recompute.
|
|
23
|
+
}, [state.showActions, state.value]);
|
|
21
24
|
const isDisabled = disabled || isSubmitting;
|
|
22
|
-
return (_jsx("form", { onSubmit: state.onSubmit, children: _jsxs("div", { className: "grid w-full gap-1.5 rounded-md border border-input bg-background px-2.5 py-2 shadow-xs transition-[color,box-shadow] focus-within:border-ring focus-within:ring-[var(--focus-ring-width)] focus-within:ring-ring/50 dark:bg-input/30", "data-disabled": isDisabled ? "true" : undefined, children: [_jsxs("div", { className: "flex min-w-0 items-start gap-2", children: [_jsx(CommentComposerAvatar, { author: author }), _jsx(InputGroupTextarea, { "aria-label": "Comment",
|
|
25
|
+
return (_jsx("form", { onSubmit: state.onSubmit, children: _jsxs("div", { className: "grid w-full gap-1.5 rounded-md border border-input bg-background px-2.5 py-2 shadow-xs transition-[color,box-shadow] focus-within:border-ring focus-within:ring-[var(--focus-ring-width)] focus-within:ring-ring/50 dark:bg-input/30", "data-disabled": isDisabled ? "true" : undefined, children: [_jsxs("div", { className: "flex min-w-0 items-start gap-2", children: [_jsx(CommentComposerAvatar, { author: author }), _jsx(InputGroupTextarea, { "aria-label": "Comment",
|
|
26
|
+
// An active composer opens a few lines of room; min-height beats
|
|
27
|
+
// the resize logic's inline height, so growth still works. The
|
|
28
|
+
// two min-heights are exclusive because cn resolves no conflicts,
|
|
29
|
+
// and important because the base Textarea's own min-h-16 is
|
|
30
|
+
// emitted after both and would otherwise win in every state.
|
|
31
|
+
className: cn("max-h-32 overflow-y-hidden px-0 py-1 text-sm leading-5", state.showActions ? "min-h-14!" : "min-h-7!"), disabled: isDisabled, onBlur: state.onBlur, onChange: state.onValueChange, onFocus: state.onFocus, onKeyDown: onComposerKeyDown, placeholder: placeholder, ref: textareaRef, rows: 1, value: state.value })] }), _jsx(CommentComposerActions, { actionsSlot: actionsSlot, canSubmit: state.canSubmit, isSubmitting: isSubmitting, loadingLabel: loadingLabel, showActions: state.showActions, submitLabel: submitLabel })] }) }));
|
|
23
32
|
}
|
|
24
33
|
function useCommentComposerState({ defaultExpanded, defaultValue, disabled, isSubmitting, onSubmit, onValueChange, value, }) {
|
|
25
34
|
const [localValue, setLocalValue] = React.useState(defaultValue);
|
|
@@ -108,6 +117,15 @@ function CommentComposerAvatar({ author }) {
|
|
|
108
117
|
function CommentSubmitButton({ canSubmit, isSubmitting, loadingLabel, submitLabel, }) {
|
|
109
118
|
return (_jsx(InputGroupButton, { disabled: !canSubmit, loading: isSubmitting, loadingLabel: loadingLabel, size: "sm", type: "submit", children: submitLabel }));
|
|
110
119
|
}
|
|
120
|
+
/** Cmd/Ctrl+Enter posts; plain Enter keeps writing, as in every comment box. */
|
|
121
|
+
function onComposerKeyDown(event) {
|
|
122
|
+
if (event.key !== "Enter" || !(event.metaKey || event.ctrlKey))
|
|
123
|
+
return;
|
|
124
|
+
if (event.nativeEvent.isComposing)
|
|
125
|
+
return; // mid-IME Enter confirms the composition
|
|
126
|
+
event.preventDefault();
|
|
127
|
+
event.currentTarget.form?.requestSubmit();
|
|
128
|
+
}
|
|
111
129
|
function resizeCommentTextarea(textarea) {
|
|
112
130
|
if (!textarea)
|
|
113
131
|
return;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "../../lib/utils";
|
|
3
|
-
import { formatTimestamp, formatTimestampFull, getTimestampDateTime } from "./timestamp-format";
|
|
4
|
-
import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar";
|
|
5
|
-
import { getCommentAuthorInitials } from "./comment-types";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { formatTimestamp, formatTimestampFull, getTimestampDateTime } from "./timestamp-format.js";
|
|
4
|
+
import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar.js";
|
|
5
|
+
import { getCommentAuthorInitials } from "./comment-types.js";
|
|
6
6
|
function CommentItem({ actionsSlot, comment }) {
|
|
7
7
|
return (_jsxs("article", { className: "group/comment flex min-w-0 gap-3 rounded-md px-1 py-3", children: [_jsx(CommentAvatar, { comment: comment }), _jsxs("div", { className: "grid min-w-0 flex-1 gap-1.5", children: [_jsx(CommentHeader, { actionsSlot: actionsSlot, comment: comment }), _jsx("p", { className: "text-sm leading-relaxed break-words whitespace-pre-wrap text-foreground", children: comment.body })] })] }));
|
|
8
8
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { CommentAuthor, CommentItemData } from "./comment-types";
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { CommentAuthor, CommentItemData } from "./comment-types.js";
|
|
3
3
|
type CommentThreadProps = {
|
|
4
4
|
comments: CommentItemData[];
|
|
5
5
|
composerAuthor?: CommentAuthor;
|
|
@@ -1,11 +1,41 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
2
3
|
import { MessageSquareTextIcon } from "lucide-react";
|
|
3
|
-
import { CommentComposer } from "./comment-composer";
|
|
4
|
-
import { CommentItem } from "./comment-item";
|
|
5
|
-
import { Skeleton } from "../ui/skeleton";
|
|
4
|
+
import { CommentComposer } from "./comment-composer.js";
|
|
5
|
+
import { CommentItem } from "./comment-item.js";
|
|
6
|
+
import { Skeleton } from "../ui/skeleton.js";
|
|
6
7
|
function CommentThread({ comments, composerAuthor, composerPlaceholder, composerSubmitLabel, emptyDescription = "Start the conversation with a short update or question.", emptyTitle = "No comments yet", isLoading = false, isSubmitting = false, onSubmit, readOnly = false, renderCommentActions, showHeader = true, title = "Comments", }) {
|
|
7
|
-
const
|
|
8
|
-
|
|
8
|
+
const { armReveal, endRef } = useRevealThreadEnd(comments.length);
|
|
9
|
+
const submitAndReveal = !readOnly && onSubmit
|
|
10
|
+
? async (body) => {
|
|
11
|
+
await onSubmit(body);
|
|
12
|
+
armReveal();
|
|
13
|
+
}
|
|
14
|
+
: undefined;
|
|
15
|
+
return (_jsxs("section", { className: "relative grid w-full gap-(--panel-gap)", "aria-label": title, children: [showHeader ? _jsx(CommentThreadHeader, { count: comments.length, title: title }) : null, _jsx(CommentThreadBody, { comments: comments, emptyDescription: emptyDescription, emptyTitle: emptyTitle, isLoading: isLoading, renderCommentActions: renderCommentActions }), submitAndReveal ? (_jsx(CommentComposer, { author: composerAuthor, isSubmitting: isSubmitting, onSubmit: submitAndReveal, placeholder: composerPlaceholder, submitLabel: composerSubmitLabel })) : null, _jsx("div", { "aria-hidden": true, className: "absolute bottom-0", ref: endRef })] }));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* After a send, the thread follows its own tail: scroll once when the submit
|
|
19
|
+
* resolves, and again when the posted comment actually lands in `comments` —
|
|
20
|
+
* the app may only append it after a refetch.
|
|
21
|
+
*/
|
|
22
|
+
function useRevealThreadEnd(commentCount) {
|
|
23
|
+
const endRef = React.useRef(null);
|
|
24
|
+
// A deadline, not a flag: the follow-up scroll only chases the send it
|
|
25
|
+
// belongs to, so a comment arriving minutes later cannot yank a reader
|
|
26
|
+
// who has scrolled away.
|
|
27
|
+
const armedUntil = React.useRef(0);
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
if (armedUntil.current === 0 || Date.now() > armedUntil.current)
|
|
30
|
+
return;
|
|
31
|
+
armedUntil.current = 0;
|
|
32
|
+
endRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest" });
|
|
33
|
+
}, [commentCount]);
|
|
34
|
+
const armReveal = React.useCallback(() => {
|
|
35
|
+
armedUntil.current = Date.now() + 5000;
|
|
36
|
+
endRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest" });
|
|
37
|
+
}, []);
|
|
38
|
+
return { armReveal, endRef };
|
|
9
39
|
}
|
|
10
40
|
function CommentThreadHeader({ count, title }) {
|
|
11
41
|
return (_jsxs("header", { className: "flex items-center justify-between gap-3", children: [_jsx("h3", { className: "text-sm font-medium text-foreground", children: title }), _jsx("span", { className: "font-mono text-xs text-muted-foreground tabular-nums", children: count })] }));
|
|
@@ -2,9 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { CheckIcon, CopyIcon } from "lucide-react";
|
|
3
3
|
import { useEffect, useId, useState } from "react";
|
|
4
4
|
import { toast } from "sonner";
|
|
5
|
-
import { Button } from "../ui/button";
|
|
6
|
-
import { Input } from "../ui/input";
|
|
7
|
-
import { Label } from "../ui/label";
|
|
5
|
+
import { Button } from "../ui/button.js";
|
|
6
|
+
import { Input } from "../ui/input.js";
|
|
7
|
+
import { Label } from "../ui/label.js";
|
|
8
8
|
/** PostHog's own no-capture vocabulary — a fixed class name, not app config. */
|
|
9
9
|
const POSTHOG_NO_CAPTURE_CLASS_NAME = "ph-no-capture";
|
|
10
10
|
const COPIED_RESET_DELAY = 2000;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CommentItemData } from "./comment-types";
|
|
2
|
-
import type { UserFeedbackItem } from "./feedback-tracking-types";
|
|
1
|
+
import type { CommentItemData } from "./comment-types.js";
|
|
2
|
+
import type { UserFeedbackItem } from "./feedback-tracking-types.js";
|
|
3
3
|
type FeedbackCommentSubmitHandler = (feedback: UserFeedbackItem, body: string) => void | Promise<void>;
|
|
4
4
|
type FeedbackCenterCommentThreadProps = {
|
|
5
5
|
comments: CommentItemData[];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { AlertCircleIcon } from "lucide-react";
|
|
3
|
-
import { CommentThread } from "./comment-thread";
|
|
4
|
-
import { Alert, AlertDescription, AlertTitle } from "../ui/alert";
|
|
5
|
-
import { Button } from "../ui/button";
|
|
3
|
+
import { CommentThread } from "./comment-thread.js";
|
|
4
|
+
import { Alert, AlertDescription, AlertTitle } from "../ui/alert.js";
|
|
5
|
+
import { Button } from "../ui/button.js";
|
|
6
6
|
function FeedbackCenterCommentThread({ comments, error, feedback, isCommentSubmitting, isCommentsLoading, onRetry, onSubmitComment, }) {
|
|
7
7
|
// A retry in flight shows the thread's loading state, not the stale error.
|
|
8
8
|
if (error && !isCommentsLoading) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { FeedbackCenterTab } from "./feedback-center-sheet-parts";
|
|
2
|
-
import type { FeedbackUrgency } from "./feedback-composer-types";
|
|
1
|
+
import type { FeedbackCenterTab } from "./feedback-center-sheet-parts.js";
|
|
2
|
+
import type { FeedbackUrgency } from "./feedback-composer-types.js";
|
|
3
3
|
type FeedbackCenterFooterProps = {
|
|
4
4
|
activeTab: FeedbackCenterTab;
|
|
5
5
|
formId: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { AlertTriangleIcon, SendIcon } from "lucide-react";
|
|
3
|
-
import { Button } from "../ui/button";
|
|
4
|
-
import { SheetFooter } from "../ui/sheet";
|
|
3
|
+
import { Button } from "../ui/button.js";
|
|
4
|
+
import { SheetFooter } from "../ui/sheet.js";
|
|
5
5
|
function FeedbackCenterFooter({ activeTab, formId, isSubmitted, isSubmitting, onCancel, urgency, }) {
|
|
6
6
|
if (activeTab !== "submit" || isSubmitted)
|
|
7
7
|
return null;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type * as React from "react";
|
|
2
|
-
import type { CommentItemData } from "./comment-types";
|
|
3
|
-
import { type FeedbackCommentSubmitHandler } from "./feedback-center-comments";
|
|
4
|
-
import { type FeedbackComposerProps } from "./feedback-composer";
|
|
5
|
-
import type { FeedbackUrgency } from "./feedback-composer-types";
|
|
6
|
-
import type { UserFeedbackItem } from "./feedback-tracking-types";
|
|
2
|
+
import type { CommentItemData } from "./comment-types.js";
|
|
3
|
+
import { type FeedbackCommentSubmitHandler } from "./feedback-center-comments.js";
|
|
4
|
+
import { type FeedbackComposerProps } from "./feedback-composer.js";
|
|
5
|
+
import type { FeedbackUrgency } from "./feedback-composer-types.js";
|
|
6
|
+
import type { UserFeedbackItem } from "./feedback-tracking-types.js";
|
|
7
7
|
type FeedbackCenterTab = "mine" | "submit";
|
|
8
8
|
type FeedbackCenterView = "detail" | "list";
|
|
9
9
|
type FeedbackCenterComposerProps = Omit<FeedbackComposerProps, "actions" | "formId" | "onCancel" | "onDirtyChange" | "onSubmittedChange" | "onUrgencyChange">;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { FeedbackCenterCommentThread, } from "./feedback-center-comments";
|
|
3
|
-
import { FeedbackComposer } from "./feedback-composer";
|
|
4
|
-
import { FeedbackUserDetail } from "./feedback-user-detail";
|
|
5
|
-
import { FeedbackUserList } from "./feedback-user-list";
|
|
6
|
-
import { Badge } from "../ui/badge";
|
|
7
|
-
import { SheetDescription, SheetHeader, SheetTitle } from "../ui/sheet";
|
|
8
|
-
import { TabsContent, TabsList, TabsTrigger } from "../ui/tabs";
|
|
2
|
+
import { FeedbackCenterCommentThread, } from "./feedback-center-comments.js";
|
|
3
|
+
import { FeedbackComposer } from "./feedback-composer.js";
|
|
4
|
+
import { FeedbackUserDetail } from "./feedback-user-detail.js";
|
|
5
|
+
import { FeedbackUserList } from "./feedback-user-list.js";
|
|
6
|
+
import { Badge } from "../ui/badge.js";
|
|
7
|
+
import { SheetDescription, SheetHeader, SheetTitle } from "../ui/sheet.js";
|
|
8
|
+
import { TabsContent, TabsList, TabsTrigger } from "../ui/tabs.js";
|
|
9
9
|
function FeedbackCenterSheetHeader({ unreadReplyCount }) {
|
|
10
10
|
return (_jsxs(SheetHeader, { className: "gap-3", children: [_jsxs("div", { className: "grid gap-1.5 pr-12", children: [_jsx(SheetTitle, { children: "Feedback" }), _jsx(SheetDescription, { children: "Send feedback and track your submissions in one place." })] }), _jsx(FeedbackCenterTabsList, { unreadReplyCount: unreadReplyCount })] }));
|
|
11
11
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import type { CommentItemData } from "./comment-types";
|
|
3
|
-
import type { FeedbackCommentSubmitHandler } from "./feedback-center-comments";
|
|
4
|
-
import { type FeedbackCenterTab } from "./feedback-center-sheet-parts";
|
|
5
|
-
import type { FeedbackComposerProps } from "./feedback-composer";
|
|
6
|
-
import type { UserFeedbackItem } from "./feedback-tracking-types";
|
|
2
|
+
import type { CommentItemData } from "./comment-types.js";
|
|
3
|
+
import type { FeedbackCommentSubmitHandler } from "./feedback-center-comments.js";
|
|
4
|
+
import { type FeedbackCenterTab } from "./feedback-center-sheet-parts.js";
|
|
5
|
+
import type { FeedbackComposerProps } from "./feedback-composer.js";
|
|
6
|
+
import type { UserFeedbackItem } from "./feedback-tracking-types.js";
|
|
7
7
|
type FeedbackCenterSheetProps = Omit<FeedbackComposerProps, "actions" | "formId" | "onCancel" | "onDirtyChange" | "onSubmittedChange" | "onUrgencyChange"> & {
|
|
8
8
|
commentsByFeedbackId?: Record<string, CommentItemData[]>;
|
|
9
9
|
commentsError?: Error | null;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { FeedbackCenterFooter } from "./feedback-center-footer";
|
|
4
|
-
import { FeedbackCenterSheetHeader, FeedbackCenterTabs, } from "./feedback-center-sheet-parts";
|
|
5
|
-
import { FormSheet, useFormSheetActions } from "../ui/form-sheet";
|
|
6
|
-
import { SheetBody, SheetContent } from "../ui/sheet";
|
|
7
|
-
import { Tabs } from "../ui/tabs";
|
|
3
|
+
import { FeedbackCenterFooter } from "./feedback-center-footer.js";
|
|
4
|
+
import { FeedbackCenterSheetHeader, FeedbackCenterTabs, } from "./feedback-center-sheet-parts.js";
|
|
5
|
+
import { FormSheet, useFormSheetActions } from "../ui/form-sheet.js";
|
|
6
|
+
import { SheetBody, SheetContent } from "../ui/sheet.js";
|
|
7
|
+
import { Tabs } from "../ui/tabs.js";
|
|
8
8
|
function FeedbackCenterSheet(props) {
|
|
9
9
|
const state = useFeedbackCenterSheetState(props);
|
|
10
10
|
return (_jsx(FormSheet, { closeDisabled: props.isSubmitting ?? false, isDirty: state.isDirty, onOpenChange: props.onOpenChange, open: props.open, children: _jsx(FeedbackCenterSheetContent, { props: props, state: state }) }));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FeedbackType, FeedbackUrgency } from "./feedback-composer-types";
|
|
1
|
+
import type { FeedbackType, FeedbackUrgency } from "./feedback-composer-types.js";
|
|
2
2
|
declare function FeedbackTypeField({ disabled, onTypeChange, type, }: {
|
|
3
3
|
disabled: boolean;
|
|
4
4
|
onTypeChange: (type: FeedbackType) => void;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { BugIcon, CheckCircle2Icon, LightbulbIcon, MessageSquareTextIcon, SendIcon, } from "lucide-react";
|
|
3
|
-
import { Alert, AlertDescription, AlertTitle } from "../ui/alert";
|
|
4
|
-
import { Button } from "../ui/button";
|
|
5
|
-
import { FieldContent, FieldSet, FieldTitle } from "../ui/field";
|
|
6
|
-
import { ToggleGroup, ToggleGroupItem } from "../ui/toggle-group";
|
|
3
|
+
import { Alert, AlertDescription, AlertTitle } from "../ui/alert.js";
|
|
4
|
+
import { Button } from "../ui/button.js";
|
|
5
|
+
import { FieldContent, FieldSet, FieldTitle } from "../ui/field.js";
|
|
6
|
+
import { ToggleGroup, ToggleGroupItem } from "../ui/toggle-group.js";
|
|
7
7
|
const feedbackTypeOptions = [
|
|
8
8
|
{
|
|
9
9
|
icon: BugIcon,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FeedbackAffectedScope, FeedbackUrgency } from "./feedback-tracking-types";
|
|
1
|
+
import type { FeedbackAffectedScope, FeedbackUrgency } from "./feedback-tracking-types.js";
|
|
2
2
|
type FeedbackType = "bug" | "feature" | "general";
|
|
3
3
|
type FeedbackSubmitValues = {
|
|
4
4
|
affectedScope: FeedbackAffectedScope;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import type { FeedbackSubmitValues, FeedbackType, FeedbackUrgency } from "./feedback-composer-types";
|
|
2
|
+
import type { FeedbackSubmitValues, FeedbackType, FeedbackUrgency } from "./feedback-composer-types.js";
|
|
3
3
|
type FeedbackComposerProps = {
|
|
4
4
|
acceptedFileTypes?: string;
|
|
5
5
|
actions?: "inline" | "external";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { FeedbackComposerActions, FeedbackSubmittedState, FeedbackTypeField, } from "./feedback-composer-parts";
|
|
4
|
-
import { FeedbackEmergencyFields } from "./feedback-emergency-fields";
|
|
5
|
-
import { submitFeedbackComposer } from "./submit-feedback-composer";
|
|
6
|
-
import { useFeedbackComposerState } from "./use-feedback-composer-state";
|
|
7
|
-
import { FileUploadField } from "../ui/file-upload-field";
|
|
8
|
-
import { Field, FieldContent, FieldError, FieldGroup, FieldLabel } from "../ui/field";
|
|
9
|
-
import { Input } from "../ui/input";
|
|
10
|
-
import { Textarea } from "../ui/textarea";
|
|
3
|
+
import { FeedbackComposerActions, FeedbackSubmittedState, FeedbackTypeField, } from "./feedback-composer-parts.js";
|
|
4
|
+
import { FeedbackEmergencyFields } from "./feedback-emergency-fields.js";
|
|
5
|
+
import { submitFeedbackComposer } from "./submit-feedback-composer.js";
|
|
6
|
+
import { useFeedbackComposerState } from "./use-feedback-composer-state.js";
|
|
7
|
+
import { FileUploadField } from "../ui/file-upload-field.js";
|
|
8
|
+
import { Field, FieldContent, FieldError, FieldGroup, FieldLabel } from "../ui/field.js";
|
|
9
|
+
import { Input } from "../ui/input.js";
|
|
10
|
+
import { Textarea } from "../ui/textarea.js";
|
|
11
11
|
function FeedbackComposer(props) {
|
|
12
12
|
// Without its controls, emergency could never be confirmed — a hidden
|
|
13
13
|
// emergency default would soft-lock submit — so it needs urgencyEnabled.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type TimestampFormatOptions } from "./timestamp-format";
|
|
1
|
+
import { toUtcTimestamp, type TimestampFormatOptions } from "./timestamp-format.js";
|
|
2
2
|
declare function formatFeedbackTimestamp(value: string | undefined, options?: TimestampFormatOptions): string;
|
|
3
3
|
declare function formatFeedbackTimestampFull(value: string | undefined, options?: TimestampFormatOptions): string;
|
|
4
4
|
declare function getFeedbackTimestampDateTime(value: string | undefined): string | undefined;
|
|
5
|
-
export { formatFeedbackTimestamp, formatFeedbackTimestampFull, getFeedbackTimestampDateTime };
|
|
5
|
+
export { formatFeedbackTimestamp, formatFeedbackTimestampFull, getFeedbackTimestampDateTime, toUtcTimestamp, };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { formatTimestamp, formatTimestampFull, getTimestampDateTime, } from "./timestamp-format";
|
|
1
|
+
import { formatTimestamp, formatTimestampFull, getTimestampDateTime, toUtcTimestamp, } from "./timestamp-format.js";
|
|
2
2
|
function formatFeedbackTimestamp(value, options = {}) {
|
|
3
3
|
return formatTimestamp(value, options);
|
|
4
4
|
}
|
|
@@ -8,4 +8,4 @@ function formatFeedbackTimestampFull(value, options = {}) {
|
|
|
8
8
|
function getFeedbackTimestampDateTime(value) {
|
|
9
9
|
return getTimestampDateTime(value);
|
|
10
10
|
}
|
|
11
|
-
export { formatFeedbackTimestamp, formatFeedbackTimestampFull, getFeedbackTimestampDateTime };
|
|
11
|
+
export { formatFeedbackTimestamp, formatFeedbackTimestampFull, getFeedbackTimestampDateTime, toUtcTimestamp, };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { type FeedbackStatus, type StakeholderFeedbackItem } from "./feedback-tracking-types";
|
|
2
|
+
import { type FeedbackStatus, type StakeholderFeedbackItem } from "./feedback-tracking-types.js";
|
|
3
3
|
type FeedbackDetailSheetProps = {
|
|
4
4
|
/** Rendered after the submission — the slot for a comment thread. */
|
|
5
5
|
conversation?: React.ReactNode;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { PaperclipIcon } from "lucide-react";
|
|
4
|
-
import { formatFeedbackTimestampFull, getFeedbackTimestampDateTime } from "./feedback-date-format";
|
|
5
|
-
import { FeedbackStatusBadge } from "./feedback-status-badge";
|
|
6
|
-
import { FeedbackTypeBadge } from "./feedback-type-badge";
|
|
7
|
-
import { feedbackStatusLabels, feedbackStatusValues, getFeedbackInitials, } from "./feedback-tracking-types";
|
|
8
|
-
import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar";
|
|
9
|
-
import { Button } from "../ui/button";
|
|
10
|
-
import { Card } from "../ui/card";
|
|
11
|
-
import { Item, ItemActions, ItemContent, ItemDescription, ItemGroup, ItemGroupItem, ItemMedia, ItemTitle, } from "../ui/item";
|
|
12
|
-
import {
|
|
13
|
-
import { PropertyList, PropertyListItem, PropertyListLabel, PropertyListValue, } from "../ui/property-list";
|
|
14
|
-
import { Sheet, SheetBody, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "../ui/sheet";
|
|
4
|
+
import { formatFeedbackTimestampFull, getFeedbackTimestampDateTime } from "./feedback-date-format.js";
|
|
5
|
+
import { FeedbackStatusBadge } from "./feedback-status-badge.js";
|
|
6
|
+
import { FeedbackTypeBadge } from "./feedback-type-badge.js";
|
|
7
|
+
import { feedbackStatusLabels, feedbackStatusValues, getFeedbackInitials, } from "./feedback-tracking-types.js";
|
|
8
|
+
import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar.js";
|
|
9
|
+
import { Button } from "../ui/button.js";
|
|
10
|
+
import { Card } from "../ui/card.js";
|
|
11
|
+
import { Item, ItemActions, ItemContent, ItemDescription, ItemGroup, ItemGroupItem, ItemMedia, ItemTitle, } from "../ui/item.js";
|
|
12
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select.js";
|
|
13
|
+
import { PropertyList, PropertyListItem, PropertyListLabel, PropertyListValue, } from "../ui/property-list.js";
|
|
14
|
+
import { Sheet, SheetBody, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "../ui/sheet.js";
|
|
15
15
|
function FeedbackDetailSheet({ conversation, feedback, onOpenChange, onStatusChange, open, pendingStatus, }) {
|
|
16
16
|
return (_jsx(Sheet, { onOpenChange: onOpenChange, open: open, children: _jsxs(SheetContent, { size: "md", children: [_jsxs(SheetHeader, { children: [_jsx(SheetTitle, { children: feedback?.subject ?? "Feedback" }), _jsx(SheetDescription, { children: onStatusChange
|
|
17
17
|
? "Review the submission and set where it stands."
|
|
@@ -27,11 +27,11 @@ function FeedbackDetailContent({ feedback, onStatusChange, pendingStatus, }) {
|
|
|
27
27
|
*/
|
|
28
28
|
function FeedbackDetailStatusSection({ onStatusChange, pendingStatus, status, }) {
|
|
29
29
|
const selectId = React.useId();
|
|
30
|
-
return (_jsxs("div", { className: "grid gap-2", children: [_jsx("label", { className: "text-meta text-muted-foreground", htmlFor: selectId, children: "Status" }),
|
|
31
|
-
const next = feedbackStatusValues.find((
|
|
30
|
+
return (_jsxs("div", { className: "grid gap-2", children: [_jsx("label", { className: "text-meta text-muted-foreground", htmlFor: selectId, children: "Status" }), _jsxs(Select, { disabled: pendingStatus !== undefined, onValueChange: (value) => {
|
|
31
|
+
const next = feedbackStatusValues.find((candidate) => candidate === value);
|
|
32
32
|
if (next && next !== status)
|
|
33
33
|
onStatusChange(next);
|
|
34
|
-
}, value: pendingStatus ?? status, children: feedbackStatusValues.map((value) => (_jsx(
|
|
34
|
+
}, value: pendingStatus ?? status, children: [_jsx(SelectTrigger, { className: "w-full", id: selectId, children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: feedbackStatusValues.map((value) => (_jsx(SelectItem, { value: value, children: feedbackStatusLabels[value] }, value))) })] })] }));
|
|
35
35
|
}
|
|
36
36
|
function FeedbackDetailSummary({ feedback }) {
|
|
37
37
|
const submitter = feedback.submittedBy;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { AlertTriangleIcon } from "lucide-react";
|
|
3
|
-
import { Alert, AlertDescription, AlertTitle } from "../ui/alert";
|
|
4
|
-
import { Button } from "../ui/button";
|
|
5
|
-
import { Checkbox } from "../ui/checkbox";
|
|
6
|
-
import { Field, FieldContent, FieldDescription, FieldError, FieldLabel } from "../ui/field";
|
|
7
|
-
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select";
|
|
3
|
+
import { Alert, AlertDescription, AlertTitle } from "../ui/alert.js";
|
|
4
|
+
import { Button } from "../ui/button.js";
|
|
5
|
+
import { Checkbox } from "../ui/checkbox.js";
|
|
6
|
+
import { Field, FieldContent, FieldDescription, FieldError, FieldLabel } from "../ui/field.js";
|
|
7
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select.js";
|
|
8
8
|
function FeedbackEmergencyFields({ affectedScope, affectedScopeId, confirmed, confirmationDescriptionId, confirmationErrorId, confirmationId, confirmationInvalid, disabled, onAffectedScopeChange, onConfirmedChange, onEmergencyChange, isEmergency, }) {
|
|
9
9
|
if (!isEmergency)
|
|
10
10
|
return _jsx(FeedbackEmergencyEntry, { disabled: disabled, onEmergencyChange: onEmergencyChange });
|
|
@@ -14,7 +14,7 @@ function FeedbackEmergencyEntry({ disabled, onEmergencyChange, }) {
|
|
|
14
14
|
return (_jsxs("div", { className: "border-t pt-(--panel-gap)", children: [_jsxs(Button, { className: "w-full justify-start text-destructive hover:text-destructive", disabled: disabled, onClick: () => onEmergencyChange(true), type: "button", variant: "outline", children: [_jsx(AlertTriangleIcon, {}), "Report an emergency"] }), _jsx("p", { className: "mt-2 text-xs text-muted-foreground", children: "Use this when service or time-sensitive work is blocked and the team needs to respond now." })] }));
|
|
15
15
|
}
|
|
16
16
|
function FeedbackEmergencyNotice() {
|
|
17
|
-
return (_jsxs(Alert, { variant: "destructive", children: [_jsx(AlertTriangleIcon, {}), _jsx(AlertTitle, { children: "Emergency feedback" }), _jsx(AlertDescription, { children: "This follows the same support workflow,
|
|
17
|
+
return (_jsxs(Alert, { variant: "destructive", children: [_jsx(AlertTriangleIcon, {}), _jsx(AlertTitle, { children: "Emergency feedback" }), _jsx(AlertDescription, { children: "This follows the same support workflow, marked as urgent so the team knows it needs an immediate response." })] }));
|
|
18
18
|
}
|
|
19
19
|
function FeedbackAffectedScopeField({ affectedScope, affectedScopeId, disabled, onAffectedScopeChange, }) {
|
|
20
20
|
return (_jsxs(Field, { children: [_jsx(FieldContent, { children: _jsx(FieldLabel, { htmlFor: affectedScopeId, required: true, children: "Who is affected?" }) }), _jsxs(Select, { disabled: disabled, onValueChange: (value) => {
|
|
@@ -24,7 +24,7 @@ function FeedbackAffectedScopeField({ affectedScope, affectedScopeId, disabled,
|
|
|
24
24
|
}
|
|
25
25
|
function FeedbackEmergencyConfirmation({ confirmed, descriptionId, disabled, errorId, fieldId, invalid, onConfirmedChange, }) {
|
|
26
26
|
const describedBy = invalid ? `${descriptionId} ${errorId}` : descriptionId;
|
|
27
|
-
return (_jsxs(Field, { "data-invalid": invalid, orientation: "horizontal", children: [_jsx(Checkbox, { "aria-describedby": describedBy, "aria-invalid": invalid, "aria-required": "true", checked: confirmed, disabled: disabled, id: fieldId, onCheckedChange: (checked) => onConfirmedChange(checked === true) }), _jsxs("div", { className: "grid gap-1", children: [_jsx(FieldLabel, { htmlFor: fieldId, required: true, children: "This needs an immediate response" }), _jsx(FieldDescription, { id: descriptionId, children: "I understand this
|
|
27
|
+
return (_jsxs(Field, { "data-invalid": invalid, orientation: "horizontal", children: [_jsx(Checkbox, { "aria-describedby": describedBy, "aria-invalid": invalid, "aria-required": "true", checked: confirmed, disabled: disabled, id: fieldId, onCheckedChange: (checked) => onConfirmedChange(checked === true) }), _jsxs("div", { className: "grid gap-1", children: [_jsx(FieldLabel, { htmlFor: fieldId, required: true, children: "This needs an immediate response" }), _jsx(FieldDescription, { id: descriptionId, children: "I understand this marks the feedback as an emergency requiring an immediate response." }), invalid ? (_jsx(FieldError, { id: errorId, children: "Confirm that this needs an immediate response before sending." })) : null] })] }));
|
|
28
28
|
}
|
|
29
29
|
function isAffectedScope(value) {
|
|
30
30
|
return ["everyone", "just_me", "my_team", "unknown"].includes(value);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { MetricsStrip, MetricsStripDetail, MetricsStripItem, MetricsStripLabel, MetricsStripValue, } from "../ui/metrics-strip";
|
|
2
|
+
import { MetricsStrip, MetricsStripDetail, MetricsStripItem, MetricsStripLabel, MetricsStripValue, } from "../ui/metrics-strip.js";
|
|
3
3
|
function FeedbackMetricsStrip({ metrics }) {
|
|
4
4
|
return (_jsxs(MetricsStrip, { className: "md:grid-cols-3 xl:grid-cols-5", children: [_jsx(FeedbackMetricItem, { detail: "Visible tickets", label: "Total", tone: "neutral", value: metrics.total }), _jsx(FeedbackMetricItem, { detail: "Awaiting triage", label: "Received", tone: "warning", value: metrics.received }), _jsx(FeedbackMetricItem, { detail: "Active work", label: "In progress", tone: "info", value: metrics.inProgress }), _jsx(FeedbackMetricItem, { detail: "Needs a decision", label: "Discussion required", tone: "warning", value: metrics.discussionRequired }), _jsx(FeedbackMetricItem, { detail: "Finished", label: "Completed", tone: "success", value: metrics.completed })] }));
|
|
5
5
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { type FeedbackComposerProps } from "./feedback-composer";
|
|
2
|
+
import { type FeedbackComposerProps } from "./feedback-composer.js";
|
|
3
3
|
type FeedbackSheetProps = Omit<FeedbackComposerProps, "actions" | "formId" | "onCancel" | "onDirtyChange" | "onSubmittedChange" | "onUrgencyChange"> & {
|
|
4
4
|
onOpenChange: (open: boolean) => void;
|
|
5
5
|
open: boolean;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { AlertTriangleIcon, SendIcon } from "lucide-react";
|
|
4
|
-
import { FeedbackComposer } from "./feedback-composer";
|
|
5
|
-
import { Button } from "../ui/button";
|
|
6
|
-
import { FormSheet, useFormSheetActions } from "../ui/form-sheet";
|
|
7
|
-
import { SheetBody, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "../ui/sheet";
|
|
4
|
+
import { FeedbackComposer } from "./feedback-composer.js";
|
|
5
|
+
import { Button } from "../ui/button.js";
|
|
6
|
+
import { FormSheet, useFormSheetActions } from "../ui/form-sheet.js";
|
|
7
|
+
import { SheetBody, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "../ui/sheet.js";
|
|
8
8
|
function FeedbackSheet({ onOpenChange, open, ...composerProps }) {
|
|
9
9
|
const [isDirty, setIsDirty] = React.useState(false);
|
|
10
10
|
React.useEffect(() => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Badge } from "../ui/badge";
|
|
3
|
-
import { feedbackStatusLabels } from "./feedback-tracking-types";
|
|
2
|
+
import { Badge } from "../ui/badge.js";
|
|
3
|
+
import { feedbackStatusLabels } from "./feedback-tracking-types.js";
|
|
4
4
|
function FeedbackStatusBadge({ status }) {
|
|
5
5
|
return _jsx(Badge, { variant: feedbackStatusVariants[status], children: feedbackStatusLabels[status] });
|
|
6
6
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type StakeholderFeedbackItem } from "./feedback-tracking-types";
|
|
1
|
+
import { type StakeholderFeedbackItem } from "./feedback-tracking-types.js";
|
|
2
2
|
declare function FeedbackTableRow({ item, onSelectFeedback, }: {
|
|
3
3
|
item: StakeholderFeedbackItem;
|
|
4
4
|
onSelectFeedback?: (item: StakeholderFeedbackItem) => void;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { AlertTriangleIcon, MessageCircleMoreIcon } from "lucide-react";
|
|
3
|
-
import { formatFeedbackTimestamp, getFeedbackTimestampDateTime } from "./feedback-date-format";
|
|
4
|
-
import { FeedbackStatusBadge } from "./feedback-status-badge";
|
|
5
|
-
import { FeedbackTypeBadge } from "./feedback-type-badge";
|
|
6
|
-
import { getFeedbackInitials } from "./feedback-tracking-types";
|
|
7
|
-
import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar";
|
|
8
|
-
import { Badge } from "../ui/badge";
|
|
9
|
-
import { Button } from "../ui/button";
|
|
10
|
-
import { TableCell, TableRow } from "../ui/table";
|
|
3
|
+
import { formatFeedbackTimestamp, getFeedbackTimestampDateTime } from "./feedback-date-format.js";
|
|
4
|
+
import { FeedbackStatusBadge } from "./feedback-status-badge.js";
|
|
5
|
+
import { FeedbackTypeBadge } from "./feedback-type-badge.js";
|
|
6
|
+
import { getFeedbackInitials } from "./feedback-tracking-types.js";
|
|
7
|
+
import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar.js";
|
|
8
|
+
import { Badge } from "../ui/badge.js";
|
|
9
|
+
import { Button } from "../ui/button.js";
|
|
10
|
+
import { TableCell, TableRow } from "../ui/table.js";
|
|
11
11
|
function FeedbackTableRow({ item, onSelectFeedback, }) {
|
|
12
12
|
return (_jsxs(TableRow, { className: onSelectFeedback ? "cursor-pointer focus-within:bg-muted/60" : undefined, onClick: () => onSelectFeedback?.(item), children: [_jsx(TableCell, { className: "max-w-[22rem]", children: onSelectFeedback ? (_jsx(Button, { "aria-label": `Open feedback: ${item.subject}`, className: "h-auto w-full justify-start p-0 text-left whitespace-normal hover:bg-transparent", onClick: (event) => {
|
|
13
13
|
event.stopPropagation();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { SortDirection } from "../ui/data-table";
|
|
2
|
-
import type { StakeholderFeedbackItem } from "./feedback-tracking-types";
|
|
1
|
+
import type { SortDirection } from "../ui/data-table.js";
|
|
2
|
+
import type { StakeholderFeedbackItem } from "./feedback-tracking-types.js";
|
|
3
3
|
type FeedbackTableSortKey = "status" | "submittedAt" | "submittedBy" | "type" | "updatedAt";
|
|
4
4
|
type FeedbackTableSort = {
|
|
5
5
|
direction: SortDirection;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import type { StakeholderFeedbackItem } from "./feedback-tracking-types";
|
|
3
|
-
import { type FeedbackTableSort, type FeedbackTableSortKey } from "./feedback-table-sort";
|
|
2
|
+
import type { StakeholderFeedbackItem } from "./feedback-tracking-types.js";
|
|
3
|
+
import { type FeedbackTableSort, type FeedbackTableSortKey } from "./feedback-table-sort.js";
|
|
4
4
|
type FeedbackTableProps = {
|
|
5
5
|
defaultSort?: FeedbackTableSort;
|
|
6
6
|
emptyAction?: React.ReactNode;
|