@ciridae/ui 0.3.3 → 0.3.6
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/README.md +1 -1
- package/dist/assets/ciridae/brand-background-dark.webp +0 -0
- package/dist/assets/ciridae/brand-background-light.webp +0 -0
- package/dist/assets/ciridae/ciridae-black.svg +17 -0
- package/dist/assets/ciridae/ciridae-brand-assets.d.ts +25 -0
- package/dist/assets/ciridae/ciridae-brand-assets.js +25 -0
- package/dist/assets/ciridae/ciridae-icon-black.png +0 -0
- package/dist/assets/ciridae/ciridae-icon-white.png +0 -0
- package/dist/assets/ciridae/ciridae-ui-wordmark-black.png +0 -0
- package/dist/assets/ciridae/ciridae-ui-wordmark-white.png +0 -0
- package/dist/assets/ciridae/ciridae-white.svg +17 -0
- package/dist/assets/ciridae/ciridae-wordmark-black.png +0 -0
- package/dist/assets/ciridae/ciridae-wordmark-white.png +0 -0
- package/dist/assets/ciridae/favicon.ico +0 -0
- package/dist/assets/ciridae/logo-white.png +0 -0
- package/dist/assets/ciridae/sign-in-screenshot.png +0 -0
- package/dist/ciridae.css +491 -0
- package/dist/ciridae.css.d.ts +2 -0
- package/dist/components/blocks/admin-users-table.d.ts +22 -0
- package/dist/components/blocks/admin-users-table.js +115 -0
- package/dist/components/blocks/comment-composer.d.ts +16 -0
- package/dist/components/blocks/comment-composer.js +113 -0
- package/dist/components/blocks/comment-item.d.ts +8 -0
- package/dist/components/blocks/comment-item.js +45 -0
- package/dist/components/blocks/comment-thread.d.ts +18 -0
- package/dist/components/blocks/comment-thread.js +30 -0
- package/dist/components/blocks/comment-types.d.ts +18 -0
- package/dist/components/blocks/comment-types.js +11 -0
- package/dist/components/blocks/feedback-center-comments.d.ts +12 -0
- package/dist/components/blocks/feedback-center-comments.js +11 -0
- package/dist/components/blocks/feedback-center-sheet-parts.d.ts +34 -0
- package/dist/components/blocks/feedback-center-sheet-parts.js +44 -0
- package/dist/components/blocks/feedback-center-sheet.d.ts +19 -0
- package/dist/components/blocks/feedback-center-sheet.js +46 -0
- package/dist/components/blocks/feedback-composer-parts.d.ts +16 -0
- package/dist/components/blocks/feedback-composer-parts.js +43 -0
- package/dist/components/blocks/feedback-composer-types.d.ts +11 -0
- package/dist/components/blocks/feedback-composer-types.js +1 -0
- package/dist/components/blocks/feedback-composer.d.ts +17 -0
- package/dist/components/blocks/feedback-composer.js +112 -0
- package/dist/components/blocks/feedback-date-format.d.ts +5 -0
- package/dist/components/blocks/feedback-date-format.js +11 -0
- package/dist/components/blocks/feedback-detail-sheet.d.ts +9 -0
- package/dist/components/blocks/feedback-detail-sheet.js +41 -0
- package/dist/components/blocks/feedback-metrics.d.ts +6 -0
- package/dist/components/blocks/feedback-metrics.js +15 -0
- package/dist/components/blocks/feedback-sheet.d.ts +8 -0
- package/dist/components/blocks/feedback-sheet.js +16 -0
- package/dist/components/blocks/feedback-status-badge.d.ts +6 -0
- package/dist/components/blocks/feedback-status-badge.js +14 -0
- package/dist/components/blocks/feedback-table-row.d.ts +6 -0
- package/dist/components/blocks/feedback-table-row.js +37 -0
- package/dist/components/blocks/feedback-table-sort.d.ts +11 -0
- package/dist/components/blocks/feedback-table-sort.js +81 -0
- package/dist/components/blocks/feedback-table.d.ts +16 -0
- package/dist/components/blocks/feedback-table.js +45 -0
- package/dist/components/blocks/feedback-tracking-types.d.ts +78 -0
- package/dist/components/blocks/feedback-tracking-types.js +36 -0
- package/dist/components/blocks/feedback-type-badge.d.ts +6 -0
- package/dist/components/blocks/feedback-type-badge.js +12 -0
- package/dist/components/blocks/feedback-user-detail.d.ts +10 -0
- package/dist/components/blocks/feedback-user-detail.js +57 -0
- package/dist/components/blocks/feedback-user-list.d.ts +9 -0
- package/dist/components/blocks/feedback-user-list.js +33 -0
- package/dist/components/blocks/invite-user-sheet.d.ts +20 -0
- package/dist/components/blocks/invite-user-sheet.js +72 -0
- package/dist/components/blocks/kanban-board-parts.d.ts +26 -0
- package/dist/components/blocks/kanban-board-parts.js +85 -0
- package/dist/components/blocks/kanban-board-utils.d.ts +42 -0
- package/dist/components/blocks/kanban-board-utils.js +115 -0
- package/dist/components/blocks/kanban-board.d.ts +16 -0
- package/dist/components/blocks/kanban-board.js +36 -0
- package/dist/components/blocks/kanban-card.d.ts +10 -0
- package/dist/components/blocks/kanban-card.js +34 -0
- package/dist/components/blocks/kanban-column.d.ts +17 -0
- package/dist/components/blocks/kanban-column.js +34 -0
- package/dist/components/blocks/kanban-detail-sheet.d.ts +17 -0
- package/dist/components/blocks/kanban-detail-sheet.js +34 -0
- package/dist/components/blocks/kanban-types.d.ts +24 -0
- package/dist/components/blocks/kanban-types.js +1 -0
- package/dist/components/blocks/timestamp-format.d.ts +8 -0
- package/dist/components/blocks/timestamp-format.js +66 -0
- package/dist/components/pages/admin-users-page.d.ts +11 -0
- package/dist/components/pages/admin-users-page.js +30 -0
- package/dist/components/pages/feedback-stakeholder-page-parts.d.ts +18 -0
- package/dist/components/pages/feedback-stakeholder-page-parts.js +36 -0
- package/dist/components/pages/feedback-stakeholder-page.d.ts +9 -0
- package/dist/components/pages/feedback-stakeholder-page.js +66 -0
- package/dist/components/pages/kanban-page.d.ts +13 -0
- package/dist/components/pages/kanban-page.js +68 -0
- 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.d.ts +1 -1
- 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/aspect-ratio.d.ts +1 -1
- package/dist/components/ui/avatar.js +1 -1
- package/dist/components/ui/badge-variants.d.ts +1 -1
- package/dist/components/ui/badge-variants.js +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-variants.d.ts +1 -1
- package/dist/components/ui/button-group.d.ts +5 -5
- package/dist/components/ui/button-group.js +3 -3
- package/dist/components/ui/button-variants.d.ts +1 -1
- package/dist/components/ui/button-variants.js +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 +3 -2
- package/dist/components/ui/calendar.js +4 -4
- 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 +2 -2
- package/dist/components/ui/ciridae-ui-provider.js +3 -3
- package/dist/components/ui/collapsible.d.ts +3 -3
- 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-controls.js +3 -3
- 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 +2 -2
- package/dist/components/ui/data-table-tanstack.js +2 -2
- package/dist/components/ui/data-table.d.ts +2 -2
- package/dist/components/ui/data-table.js +4 -4
- package/dist/components/ui/dialog.d.ts +2 -1
- package/dist/components/ui/dialog.js +4 -4
- package/dist/components/ui/drawer.js +1 -1
- package/dist/components/ui/dropdown-menu.js +1 -1
- package/dist/components/ui/empty.d.ts +7 -7
- 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 +12 -12
- 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 +1 -1
- package/dist/components/ui/form-context.d.ts +1 -1
- package/dist/components/ui/form.d.ts +1 -1
- 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 +3 -3
- 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 +3 -3
- package/dist/components/ui/item.js +2 -2
- package/dist/components/ui/kbd.d.ts +2 -2
- 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-variants.d.ts +1 -1
- package/dist/components/ui/navigation-menu.js +2 -2
- package/dist/components/ui/page-header.d.ts +16 -2
- package/dist/components/ui/page-header.js +22 -4
- package/dist/components/ui/pagination.d.ts +1 -1
- package/dist/components/ui/pagination.js +4 -4
- 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.d.ts +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 +2 -2
- package/dist/components/ui/registry-docs.d.ts +1 -1
- package/dist/components/ui/registry-docs.js +3 -3
- package/dist/components/ui/resizable.d.ts +10 -3
- package/dist/components/ui/resizable.js +4 -4
- 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 +2 -2
- 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.d.ts +1 -1
- package/dist/components/ui/sidebar-account-menu-theme.js +2 -2
- package/dist/components/ui/sidebar-account-menu.d.ts +2 -2
- 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.d.ts +1 -1
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/slider.js +1 -1
- package/dist/components/ui/sonner.d.ts +3 -3
- package/dist/components/ui/sonner.js +3 -3
- package/dist/components/ui/spinner.d.ts +1 -1
- package/dist/components/ui/spinner.js +2 -2
- package/dist/components/ui/switch.js +1 -1
- package/dist/components/ui/table.js +1 -1
- package/dist/components/ui/tabs-variants.d.ts +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-variants.d.ts +1 -1
- 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/workflow-timeline.js +1 -1
- package/dist/entries/accordion.d.ts +1 -0
- package/dist/entries/accordion.js +1 -0
- package/dist/entries/admin-users-page.d.ts +1 -0
- package/dist/entries/admin-users-page.js +1 -0
- package/dist/entries/admin-users-table.d.ts +1 -0
- package/dist/entries/admin-users-table.js +1 -0
- package/dist/entries/alert-dialog.d.ts +1 -0
- package/dist/entries/alert-dialog.js +1 -0
- package/dist/entries/alert.d.ts +1 -0
- package/dist/entries/alert.js +1 -0
- package/dist/entries/app-shell-page.d.ts +1 -0
- package/dist/entries/app-shell-page.js +1 -0
- package/dist/entries/app-shell.d.ts +1 -0
- package/dist/entries/app-shell.js +1 -0
- package/dist/entries/aspect-ratio.d.ts +1 -0
- package/dist/entries/aspect-ratio.js +1 -0
- package/dist/entries/avatar.d.ts +1 -0
- package/dist/entries/avatar.js +1 -0
- package/dist/entries/badge-variants.d.ts +1 -0
- package/dist/entries/badge-variants.js +1 -0
- package/dist/entries/badge.d.ts +1 -0
- package/dist/entries/badge.js +1 -0
- package/dist/entries/breadcrumb.d.ts +1 -0
- package/dist/entries/breadcrumb.js +1 -0
- package/dist/entries/button-group-variants.d.ts +1 -0
- package/dist/entries/button-group-variants.js +1 -0
- package/dist/entries/button-group.d.ts +1 -0
- package/dist/entries/button-group.js +1 -0
- package/dist/entries/button-variants.d.ts +1 -0
- package/dist/entries/button-variants.js +1 -0
- package/dist/entries/button.d.ts +1 -0
- package/dist/entries/button.js +1 -0
- package/dist/entries/calendar.d.ts +1 -0
- package/dist/entries/calendar.js +1 -0
- package/dist/entries/card.d.ts +1 -0
- package/dist/entries/card.js +1 -0
- package/dist/entries/carousel.d.ts +1 -0
- package/dist/entries/carousel.js +1 -0
- package/dist/entries/chart-context.d.ts +1 -0
- package/dist/entries/chart-context.js +1 -0
- package/dist/entries/chart-panel.d.ts +1 -0
- package/dist/entries/chart-panel.js +1 -0
- package/dist/entries/chart-tooltip.d.ts +1 -0
- package/dist/entries/chart-tooltip.js +1 -0
- package/dist/entries/chart.d.ts +1 -0
- package/dist/entries/chart.js +1 -0
- package/dist/entries/checkbox.d.ts +1 -0
- package/dist/entries/checkbox.js +1 -0
- package/dist/entries/ciridae-brand-assets.d.ts +1 -0
- package/dist/entries/ciridae-brand-assets.js +1 -0
- package/dist/entries/ciridae-ui-provider.d.ts +1 -0
- package/dist/entries/ciridae-ui-provider.js +1 -0
- package/dist/entries/collapsible.d.ts +1 -0
- package/dist/entries/collapsible.js +1 -0
- package/dist/entries/color-theme-context.d.ts +1 -0
- package/dist/entries/color-theme-context.js +1 -0
- package/dist/entries/color-theme.d.ts +1 -0
- package/dist/entries/color-theme.js +1 -0
- package/dist/entries/combobox-anchor.d.ts +1 -0
- package/dist/entries/combobox-anchor.js +1 -0
- package/dist/entries/combobox.d.ts +1 -0
- package/dist/entries/combobox.js +1 -0
- package/dist/entries/command.d.ts +1 -0
- package/dist/entries/command.js +1 -0
- package/dist/entries/comment-composer.d.ts +1 -0
- package/dist/entries/comment-composer.js +1 -0
- package/dist/entries/comment-item.d.ts +1 -0
- package/dist/entries/comment-item.js +1 -0
- package/dist/entries/comment-thread.d.ts +1 -0
- package/dist/entries/comment-thread.js +1 -0
- package/dist/entries/comment-types.d.ts +1 -0
- package/dist/entries/comment-types.js +1 -0
- package/dist/entries/context-menu.d.ts +1 -0
- package/dist/entries/context-menu.js +1 -0
- package/dist/entries/data-table-controls.d.ts +1 -0
- package/dist/entries/data-table-controls.js +1 -0
- package/dist/entries/data-table-grid.d.ts +1 -0
- package/dist/entries/data-table-grid.js +1 -0
- package/dist/entries/data-table-pagination.d.ts +1 -0
- package/dist/entries/data-table-pagination.js +1 -0
- package/dist/entries/data-table-tanstack.d.ts +1 -0
- package/dist/entries/data-table-tanstack.js +1 -0
- package/dist/entries/data-table.d.ts +1 -0
- package/dist/entries/data-table.js +1 -0
- package/dist/entries/dialog.d.ts +1 -0
- package/dist/entries/dialog.js +1 -0
- package/dist/entries/direction-context.d.ts +1 -0
- package/dist/entries/direction-context.js +1 -0
- package/dist/entries/direction.d.ts +1 -0
- package/dist/entries/direction.js +1 -0
- package/dist/entries/drawer.d.ts +1 -0
- package/dist/entries/drawer.js +1 -0
- package/dist/entries/dropdown-menu.d.ts +1 -0
- package/dist/entries/dropdown-menu.js +1 -0
- package/dist/entries/empty.d.ts +1 -0
- package/dist/entries/empty.js +1 -0
- package/dist/entries/expandable-data-table.d.ts +1 -0
- package/dist/entries/expandable-data-table.js +1 -0
- package/dist/entries/feedback-center-comments.d.ts +1 -0
- package/dist/entries/feedback-center-comments.js +1 -0
- package/dist/entries/feedback-center-sheet-parts.d.ts +1 -0
- package/dist/entries/feedback-center-sheet-parts.js +1 -0
- package/dist/entries/feedback-center-sheet.d.ts +1 -0
- package/dist/entries/feedback-center-sheet.js +1 -0
- package/dist/entries/feedback-composer-parts.d.ts +1 -0
- package/dist/entries/feedback-composer-parts.js +1 -0
- package/dist/entries/feedback-composer-types.d.ts +1 -0
- package/dist/entries/feedback-composer-types.js +1 -0
- package/dist/entries/feedback-composer.d.ts +1 -0
- package/dist/entries/feedback-composer.js +1 -0
- package/dist/entries/feedback-date-format.d.ts +1 -0
- package/dist/entries/feedback-date-format.js +1 -0
- package/dist/entries/feedback-detail-sheet.d.ts +1 -0
- package/dist/entries/feedback-detail-sheet.js +1 -0
- package/dist/entries/feedback-metrics.d.ts +1 -0
- package/dist/entries/feedback-metrics.js +1 -0
- package/dist/entries/feedback-sheet.d.ts +1 -0
- package/dist/entries/feedback-sheet.js +1 -0
- package/dist/entries/feedback-stakeholder-page-parts.d.ts +1 -0
- package/dist/entries/feedback-stakeholder-page-parts.js +1 -0
- package/dist/entries/feedback-stakeholder-page.d.ts +1 -0
- package/dist/entries/feedback-stakeholder-page.js +1 -0
- package/dist/entries/feedback-status-badge.d.ts +1 -0
- package/dist/entries/feedback-status-badge.js +1 -0
- package/dist/entries/feedback-table-row.d.ts +1 -0
- package/dist/entries/feedback-table-row.js +1 -0
- package/dist/entries/feedback-table-sort.d.ts +1 -0
- package/dist/entries/feedback-table-sort.js +1 -0
- package/dist/entries/feedback-table.d.ts +1 -0
- package/dist/entries/feedback-table.js +1 -0
- package/dist/entries/feedback-tracking-types.d.ts +1 -0
- package/dist/entries/feedback-tracking-types.js +1 -0
- package/dist/entries/feedback-type-badge.d.ts +1 -0
- package/dist/entries/feedback-type-badge.js +1 -0
- package/dist/entries/feedback-user-detail.d.ts +1 -0
- package/dist/entries/feedback-user-detail.js +1 -0
- package/dist/entries/feedback-user-list.d.ts +1 -0
- package/dist/entries/feedback-user-list.js +1 -0
- package/dist/entries/field.d.ts +1 -0
- package/dist/entries/field.js +1 -0
- package/dist/entries/file-upload-field-parts.d.ts +1 -0
- package/dist/entries/file-upload-field-parts.js +1 -0
- package/dist/entries/file-upload-field.d.ts +1 -0
- package/dist/entries/file-upload-field.js +1 -0
- package/dist/entries/form-context.d.ts +1 -0
- package/dist/entries/form-context.js +1 -0
- package/dist/entries/form.d.ts +1 -0
- package/dist/entries/form.js +1 -0
- package/dist/entries/hover-card.d.ts +1 -0
- package/dist/entries/hover-card.js +1 -0
- package/dist/entries/input-group.d.ts +1 -0
- package/dist/entries/input-group.js +1 -0
- package/dist/entries/input-otp.d.ts +1 -0
- package/dist/entries/input-otp.js +1 -0
- package/dist/entries/input.d.ts +1 -0
- package/dist/entries/input.js +1 -0
- package/dist/entries/invite-user-sheet.d.ts +1 -0
- package/dist/entries/invite-user-sheet.js +1 -0
- package/dist/entries/item.d.ts +1 -0
- package/dist/entries/item.js +1 -0
- package/dist/entries/kanban-board-parts.d.ts +1 -0
- package/dist/entries/kanban-board-parts.js +1 -0
- package/dist/entries/kanban-board-utils.d.ts +1 -0
- package/dist/entries/kanban-board-utils.js +1 -0
- package/dist/entries/kanban-board.d.ts +1 -0
- package/dist/entries/kanban-board.js +1 -0
- package/dist/entries/kanban-card.d.ts +1 -0
- package/dist/entries/kanban-card.js +1 -0
- package/dist/entries/kanban-column.d.ts +1 -0
- package/dist/entries/kanban-column.js +1 -0
- package/dist/entries/kanban-detail-sheet.d.ts +1 -0
- package/dist/entries/kanban-detail-sheet.js +1 -0
- package/dist/entries/kanban-page.d.ts +1 -0
- package/dist/entries/kanban-page.js +1 -0
- package/dist/entries/kanban-types.d.ts +1 -0
- package/dist/entries/kanban-types.js +1 -0
- package/dist/entries/kbd.d.ts +1 -0
- package/dist/entries/kbd.js +1 -0
- package/dist/entries/label.d.ts +1 -0
- package/dist/entries/label.js +1 -0
- package/dist/entries/loading-state.d.ts +1 -0
- package/dist/entries/loading-state.js +1 -0
- package/dist/entries/menubar.d.ts +1 -0
- package/dist/entries/menubar.js +1 -0
- package/dist/entries/metrics-strip.d.ts +1 -0
- package/dist/entries/metrics-strip.js +1 -0
- package/dist/entries/native-select.d.ts +1 -0
- package/dist/entries/native-select.js +1 -0
- package/dist/entries/navigation-menu-variants.d.ts +1 -0
- package/dist/entries/navigation-menu-variants.js +1 -0
- package/dist/entries/navigation-menu.d.ts +1 -0
- package/dist/entries/navigation-menu.js +1 -0
- package/dist/entries/page-header.d.ts +1 -0
- package/dist/entries/page-header.js +1 -0
- package/dist/entries/pagination.d.ts +1 -0
- package/dist/entries/pagination.js +1 -0
- package/dist/entries/popover.d.ts +1 -0
- package/dist/entries/popover.js +1 -0
- package/dist/entries/progress.d.ts +1 -0
- package/dist/entries/progress.js +1 -0
- package/dist/entries/property-list.d.ts +1 -0
- package/dist/entries/property-list.js +1 -0
- package/dist/entries/radio-group.d.ts +1 -0
- package/dist/entries/radio-group.js +1 -0
- package/dist/entries/registry-docs-api.d.ts +1 -0
- package/dist/entries/registry-docs-api.js +1 -0
- package/dist/entries/registry-docs-code.d.ts +1 -0
- package/dist/entries/registry-docs-code.js +1 -0
- package/dist/entries/registry-docs-showcase.d.ts +1 -0
- package/dist/entries/registry-docs-showcase.js +1 -0
- package/dist/entries/registry-docs.d.ts +1 -0
- package/dist/entries/registry-docs.js +1 -0
- package/dist/entries/resizable.d.ts +1 -0
- package/dist/entries/resizable.js +1 -0
- package/dist/entries/scroll-area.d.ts +1 -0
- package/dist/entries/scroll-area.js +1 -0
- package/dist/entries/select.d.ts +1 -0
- package/dist/entries/select.js +1 -0
- package/dist/entries/separator.d.ts +1 -0
- package/dist/entries/separator.js +1 -0
- package/dist/entries/sheet.d.ts +1 -0
- package/dist/entries/sheet.js +1 -0
- package/dist/entries/sidebar/context.d.ts +1 -0
- package/dist/entries/sidebar/context.js +1 -0
- package/dist/entries/sidebar/group.d.ts +1 -0
- package/dist/entries/sidebar/group.js +1 -0
- package/dist/entries/sidebar/layout.d.ts +1 -0
- package/dist/entries/sidebar/layout.js +1 -0
- package/dist/entries/sidebar/menu.d.ts +1 -0
- package/dist/entries/sidebar/menu.js +1 -0
- package/dist/entries/sidebar/provider.d.ts +1 -0
- package/dist/entries/sidebar/provider.js +1 -0
- package/dist/entries/sidebar/rail.d.ts +1 -0
- package/dist/entries/sidebar/rail.js +1 -0
- package/dist/entries/sidebar/trigger.d.ts +1 -0
- package/dist/entries/sidebar/trigger.js +1 -0
- package/dist/entries/sidebar-account-menu-theme.d.ts +1 -0
- package/dist/entries/sidebar-account-menu-theme.js +1 -0
- package/dist/entries/sidebar-account-menu.d.ts +1 -0
- package/dist/entries/sidebar-account-menu.js +1 -0
- package/dist/entries/sidebar.d.ts +1 -0
- package/dist/entries/sidebar.js +1 -0
- package/dist/entries/skeleton.d.ts +1 -0
- package/dist/entries/skeleton.js +1 -0
- package/dist/entries/slider.d.ts +1 -0
- package/dist/entries/slider.js +1 -0
- package/dist/entries/sonner.d.ts +1 -0
- package/dist/entries/sonner.js +1 -0
- package/dist/entries/spinner.d.ts +1 -0
- package/dist/entries/spinner.js +1 -0
- package/dist/entries/switch.d.ts +1 -0
- package/dist/entries/switch.js +1 -0
- package/dist/entries/table.d.ts +1 -0
- package/dist/entries/table.js +1 -0
- package/dist/entries/tabs-variants.d.ts +1 -0
- package/dist/entries/tabs-variants.js +1 -0
- package/dist/entries/tabs.d.ts +1 -0
- package/dist/entries/tabs.js +1 -0
- package/dist/entries/textarea.d.ts +1 -0
- package/dist/entries/textarea.js +1 -0
- package/dist/entries/timestamp-format.d.ts +1 -0
- package/dist/entries/timestamp-format.js +1 -0
- package/dist/entries/toggle-group.d.ts +1 -0
- package/dist/entries/toggle-group.js +1 -0
- package/dist/entries/toggle-variants.d.ts +1 -0
- package/dist/entries/toggle-variants.js +1 -0
- package/dist/entries/toggle.d.ts +1 -0
- package/dist/entries/toggle.js +1 -0
- package/dist/entries/tooltip.d.ts +1 -0
- package/dist/entries/tooltip.js +1 -0
- package/dist/entries/use-color-theme.d.ts +1 -0
- package/dist/entries/use-color-theme.js +1 -0
- package/dist/entries/use-mobile.d.ts +1 -0
- package/dist/entries/use-mobile.js +1 -0
- package/dist/entries/utils.d.ts +1 -0
- package/dist/entries/utils.js +1 -0
- package/dist/entries/workflow-timeline.d.ts +1 -0
- package/dist/entries/workflow-timeline.js +1 -0
- package/dist/lib/utils.js +1 -1
- package/dist/style-imports.d.ts +3 -0
- package/dist/styled-system/styles.css +61 -393
- package/dist/styles.css +490 -1
- package/package.json +33 -415
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import type { KanbanCardData, KanbanColumnData } from "./kanban-types";
|
|
3
|
+
type KanbanDetailProperty = {
|
|
4
|
+
label: string;
|
|
5
|
+
value: React.ReactNode;
|
|
6
|
+
};
|
|
7
|
+
type KanbanDetailSheetProps = {
|
|
8
|
+
actionsSlot?: React.ReactNode;
|
|
9
|
+
activitySlot?: React.ReactNode;
|
|
10
|
+
card?: KanbanCardData;
|
|
11
|
+
column?: KanbanColumnData;
|
|
12
|
+
onOpenChange: (open: boolean) => void;
|
|
13
|
+
open: boolean;
|
|
14
|
+
properties?: KanbanDetailProperty[];
|
|
15
|
+
};
|
|
16
|
+
declare function KanbanDetailSheet({ actionsSlot, activitySlot, card, column, onOpenChange, open, properties, }: KanbanDetailSheetProps): React.JSX.Element;
|
|
17
|
+
export { KanbanDetailSheet, type KanbanDetailProperty, type KanbanDetailSheetProps };
|
|
@@ -0,0 +1,34 @@
|
|
|
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";
|
|
7
|
+
function KanbanDetailSheet({ actionsSlot, activitySlot, card, column, onOpenChange, open, properties = [], }) {
|
|
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
|
+
}
|
|
10
|
+
function KanbanDetailContent({ activitySlot, card, column, properties, }) {
|
|
11
|
+
return (_jsxs(_Fragment, { children: [_jsx(KanbanDetailHeader, { card: card, column: column }), _jsx(KanbanDetailProperties, { card: card, properties: properties }), _jsx(KanbanDetailDescription, { card: card }), activitySlot ? _jsx(KanbanDetailActivity, { children: activitySlot }) : null] }));
|
|
12
|
+
}
|
|
13
|
+
function KanbanDetailHeader({ card, column }) {
|
|
14
|
+
return (_jsx("header", { className: "grid gap-3", children: _jsxs("div", { className: "flex min-w-0 items-center justify-between gap-3", children: [_jsx("h3", { className: "min-w-0 truncate text-sm font-medium text-foreground", children: card.title }), _jsx(KanbanDetailBadges, { card: card, column: column })] }) }));
|
|
15
|
+
}
|
|
16
|
+
function KanbanDetailBadges({ card, column }) {
|
|
17
|
+
return (_jsxs("div", { className: "flex shrink-0 flex-wrap justify-end gap-2", children: [card.badges, _jsx(KanbanStatusBadge, { column: column })] }));
|
|
18
|
+
}
|
|
19
|
+
function KanbanStatusBadge({ column }) {
|
|
20
|
+
return _jsx(Badge, { variant: "outline", children: column?.title ?? "Unassigned" });
|
|
21
|
+
}
|
|
22
|
+
function KanbanDetailProperties({ card, properties, }) {
|
|
23
|
+
return (_jsxs(PropertyList, { children: [_jsx(KanbanProperty, { label: "Reference", children: _jsx("span", { className: "font-mono text-xs tabular-nums", children: card.meta ?? card.id }) }), properties.map((property) => (_jsx(KanbanProperty, { label: property.label, children: property.value }, property.label)))] }));
|
|
24
|
+
}
|
|
25
|
+
function KanbanProperty({ children, label }) {
|
|
26
|
+
return (_jsxs(PropertyListItem, { children: [_jsx(PropertyListLabel, { children: label }), _jsx(PropertyListValue, { children: children })] }));
|
|
27
|
+
}
|
|
28
|
+
function KanbanDetailDescription({ card }) {
|
|
29
|
+
return (_jsxs(Card, { className: "grid gap-2 p-(--panel-padding)", children: [_jsx("div", { className: "text-meta text-muted-foreground", children: "Details" }), _jsx("p", { className: "text-sm whitespace-pre-wrap text-foreground", children: card.description ?? "No description provided." })] }));
|
|
30
|
+
}
|
|
31
|
+
function KanbanDetailActivity({ children }) {
|
|
32
|
+
return (_jsxs(Card, { className: "grid gap-2 p-(--panel-padding)", children: [_jsx("div", { className: "text-meta text-muted-foreground", children: "Activity" }), children] }));
|
|
33
|
+
}
|
|
34
|
+
export { KanbanDetailSheet };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
type KanbanColumnData = {
|
|
3
|
+
description?: string;
|
|
4
|
+
id: string;
|
|
5
|
+
limit?: number;
|
|
6
|
+
title: string;
|
|
7
|
+
};
|
|
8
|
+
type KanbanCardData = {
|
|
9
|
+
badges?: React.ReactNode;
|
|
10
|
+
columnId: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
id: string;
|
|
14
|
+
meta?: React.ReactNode;
|
|
15
|
+
title: string;
|
|
16
|
+
};
|
|
17
|
+
type KanbanMoveEvent = {
|
|
18
|
+
cardId: string;
|
|
19
|
+
fromColumnId: string;
|
|
20
|
+
fromIndex: number;
|
|
21
|
+
toColumnId: string;
|
|
22
|
+
toIndex: number;
|
|
23
|
+
};
|
|
24
|
+
export type { KanbanCardData, KanbanColumnData, KanbanMoveEvent };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type TimestampFormatOptions = {
|
|
2
|
+
fallback?: string;
|
|
3
|
+
};
|
|
4
|
+
declare function formatTimestamp(value: string | undefined, options?: TimestampFormatOptions): string;
|
|
5
|
+
declare function formatTimestampFull(value: string | undefined, options?: TimestampFormatOptions): string;
|
|
6
|
+
declare function getTimestampDateTime(value: string | undefined): string | undefined;
|
|
7
|
+
export { formatTimestamp, formatTimestampFull, getTimestampDateTime };
|
|
8
|
+
export type { TimestampFormatOptions };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
function formatTimestamp(value, options = {}) {
|
|
2
|
+
const date = parseTimestamp(value);
|
|
3
|
+
if (!date)
|
|
4
|
+
return getTimestampFallback(value, options.fallback);
|
|
5
|
+
const time = timeFormatter.format(date);
|
|
6
|
+
const dayDifference = getLocalCalendarDayDifference(date, new Date());
|
|
7
|
+
if (dayDifference === 0)
|
|
8
|
+
return `Today, ${time}`;
|
|
9
|
+
if (dayDifference === -1)
|
|
10
|
+
return `Yesterday, ${time}`;
|
|
11
|
+
if (dayDifference < 0 && dayDifference > -7) {
|
|
12
|
+
return `${weekdayFormatter.format(date)}, ${time}`;
|
|
13
|
+
}
|
|
14
|
+
if (date.getFullYear() === new Date().getFullYear()) {
|
|
15
|
+
return `${monthDayFormatter.format(date)}, ${time}`;
|
|
16
|
+
}
|
|
17
|
+
return dateTimeFormatter.format(date);
|
|
18
|
+
}
|
|
19
|
+
function formatTimestampFull(value, options = {}) {
|
|
20
|
+
const date = parseTimestamp(value);
|
|
21
|
+
if (!date)
|
|
22
|
+
return getTimestampFallback(value, options.fallback);
|
|
23
|
+
return dateTimeFormatter.format(date);
|
|
24
|
+
}
|
|
25
|
+
function getTimestampDateTime(value) {
|
|
26
|
+
const date = parseTimestamp(value);
|
|
27
|
+
if (!date)
|
|
28
|
+
return undefined;
|
|
29
|
+
return date.toISOString();
|
|
30
|
+
}
|
|
31
|
+
function parseTimestamp(value) {
|
|
32
|
+
if (!value)
|
|
33
|
+
return undefined;
|
|
34
|
+
const timestamp = Date.parse(value);
|
|
35
|
+
if (Number.isNaN(timestamp))
|
|
36
|
+
return undefined;
|
|
37
|
+
return new Date(timestamp);
|
|
38
|
+
}
|
|
39
|
+
function getTimestampFallback(value, fallback = "No update") {
|
|
40
|
+
return value?.trim() || fallback;
|
|
41
|
+
}
|
|
42
|
+
function getLocalCalendarDayDifference(date, comparisonDate) {
|
|
43
|
+
const dateStart = new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();
|
|
44
|
+
const comparisonStart = new Date(comparisonDate.getFullYear(), comparisonDate.getMonth(), comparisonDate.getDate()).getTime();
|
|
45
|
+
return Math.round((dateStart - comparisonStart) / millisecondsPerDay);
|
|
46
|
+
}
|
|
47
|
+
const millisecondsPerDay = 24 * 60 * 60 * 1000;
|
|
48
|
+
const timeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
49
|
+
hour: "numeric",
|
|
50
|
+
minute: "2-digit",
|
|
51
|
+
});
|
|
52
|
+
const weekdayFormatter = new Intl.DateTimeFormat(undefined, {
|
|
53
|
+
weekday: "short",
|
|
54
|
+
});
|
|
55
|
+
const monthDayFormatter = new Intl.DateTimeFormat(undefined, {
|
|
56
|
+
day: "numeric",
|
|
57
|
+
month: "short",
|
|
58
|
+
});
|
|
59
|
+
const dateTimeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
60
|
+
day: "numeric",
|
|
61
|
+
hour: "numeric",
|
|
62
|
+
minute: "2-digit",
|
|
63
|
+
month: "short",
|
|
64
|
+
year: "numeric",
|
|
65
|
+
});
|
|
66
|
+
export { formatTimestamp, formatTimestampFull, getTimestampDateTime };
|
|
@@ -0,0 +1,11 @@
|
|
|
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";
|
|
4
|
+
type AdminUsersPageProps = AdminUsersTableProps & {
|
|
5
|
+
defaultRole?: string;
|
|
6
|
+
isInviting?: boolean;
|
|
7
|
+
onInviteUser: (values: InviteUserValues) => void | Promise<void>;
|
|
8
|
+
roles: InviteUserRole[];
|
|
9
|
+
};
|
|
10
|
+
declare function AdminUsersPage({ defaultRole, isInviting, onInviteUser, roles, users, ...tableProps }: AdminUsersPageProps): React.JSX.Element;
|
|
11
|
+
export { AdminUsersPage, type AdminUsersPageProps };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
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";
|
|
9
|
+
function AdminUsersPage({ defaultRole, isInviting = false, onInviteUser, roles, users, ...tableProps }) {
|
|
10
|
+
const [inviteOpen, setInviteOpen] = React.useState(false);
|
|
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 })] }));
|
|
12
|
+
}
|
|
13
|
+
function AdminUsersPageHeader({ onInvite }) {
|
|
14
|
+
return (_jsx(PageHeader, { children: _jsxs(PageHeaderMain, { children: [_jsxs(PageHeaderContent, { children: [_jsx(PageHeaderTitle, { children: "Admin user management" }), _jsx(PageHeaderDescription, { children: "Manage platform access, pending invites, and user status." })] }), _jsx(PageHeaderActions, { children: _jsxs(Button, { onClick: onInvite, type: "button", children: [_jsx(UserPlusIcon, {}), "Invite user"] }) })] }) }));
|
|
15
|
+
}
|
|
16
|
+
function AdminUsersMetrics({ users }) {
|
|
17
|
+
const metrics = getAdminUserMetrics(users);
|
|
18
|
+
return (_jsxs(MetricsStrip, { className: "md:grid-cols-3", children: [_jsx(AdminUsersMetric, { detail: "Total platform users", label: "Users", value: metrics.total }), _jsx(AdminUsersMetric, { detail: "Invites awaiting acceptance", label: "Pending", value: metrics.invited }), _jsx(AdminUsersMetric, { detail: "Users with admin access", label: "Admins", value: metrics.admins })] }));
|
|
19
|
+
}
|
|
20
|
+
function AdminUsersMetric({ detail, label, value, }) {
|
|
21
|
+
return (_jsxs(MetricsStripItem, { children: [_jsx(MetricsStripLabel, { children: label }), _jsx(MetricsStripValue, { children: value }), _jsx(MetricsStripDetail, { children: detail })] }));
|
|
22
|
+
}
|
|
23
|
+
function getAdminUserMetrics(users) {
|
|
24
|
+
return {
|
|
25
|
+
admins: users.filter((user) => user.role.toLowerCase().includes("admin")).length,
|
|
26
|
+
invited: users.filter((user) => user.status === "invited").length,
|
|
27
|
+
total: users.length,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export { AdminUsersPage };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type FeedbackStatus, type StakeholderFeedbackType } from "../blocks/feedback-tracking-types";
|
|
2
|
+
type StatusFilter = FeedbackStatus | "all";
|
|
3
|
+
type TypeFilter = StakeholderFeedbackType | "all";
|
|
4
|
+
type FeedbackFilters = {
|
|
5
|
+
search: string;
|
|
6
|
+
status: StatusFilter;
|
|
7
|
+
type: TypeFilter;
|
|
8
|
+
};
|
|
9
|
+
declare function FeedbackFiltersToolbar({ filters, hasActiveFilters, onClearFilters, onFiltersChange, }: {
|
|
10
|
+
filters: FeedbackFilters;
|
|
11
|
+
hasActiveFilters: boolean;
|
|
12
|
+
onClearFilters: () => void;
|
|
13
|
+
onFiltersChange: (filters: FeedbackFilters) => void;
|
|
14
|
+
}): import("@types/react").JSX.Element;
|
|
15
|
+
declare function ClearFiltersButton({ onClearFilters }: {
|
|
16
|
+
onClearFilters: () => void;
|
|
17
|
+
}): import("@types/react").JSX.Element;
|
|
18
|
+
export { ClearFiltersButton, FeedbackFiltersToolbar, type FeedbackFilters, type StatusFilter, type TypeFilter, };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SearchIcon, XIcon } from "lucide-react";
|
|
3
|
+
import { feedbackStatusOptions, feedbackTypeOptions, } from "../blocks/feedback-tracking-types";
|
|
4
|
+
import { Button } from "../ui/button";
|
|
5
|
+
import { Input } from "../ui/input";
|
|
6
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select";
|
|
7
|
+
function FeedbackFiltersToolbar({ filters, hasActiveFilters, onClearFilters, onFiltersChange, }) {
|
|
8
|
+
return (_jsxs("div", { className: "flex flex-col gap-2 md:flex-row md:items-center md:justify-between", children: [_jsx(FeedbackSearchInput, { onSearchChange: (search) => onFiltersChange({ ...filters, search }), search: filters.search }), _jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center", children: [_jsx(FeedbackStatusFilter, { onStatusChange: (status) => onFiltersChange({ ...filters, status }), status: filters.status }), _jsx(FeedbackTypeFilter, { onTypeChange: (type) => onFiltersChange({ ...filters, type }), type: filters.type }), hasActiveFilters ? _jsx(ClearFiltersButton, { onClearFilters: onClearFilters }) : null] })] }));
|
|
9
|
+
}
|
|
10
|
+
function FeedbackSearchInput({ onSearchChange, search, }) {
|
|
11
|
+
return (_jsxs("div", { className: "relative w-full md:max-w-sm", children: [_jsx(SearchIcon, { className: "pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { "aria-label": "Search feedback", className: "pl-8", onChange: (event) => onSearchChange(event.target.value), placeholder: "Search feedback", value: search })] }));
|
|
12
|
+
}
|
|
13
|
+
function FeedbackStatusFilter({ onStatusChange, status, }) {
|
|
14
|
+
return (_jsxs(Select, { onValueChange: (value) => updateStatusFilter(value, onStatusChange), value: status, children: [_jsx(SelectTrigger, { "aria-label": "Filter by status", className: "w-full sm:w-40", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: feedbackStatusOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value))) })] }));
|
|
15
|
+
}
|
|
16
|
+
function FeedbackTypeFilter({ onTypeChange, type, }) {
|
|
17
|
+
return (_jsxs(Select, { onValueChange: (value) => updateTypeFilter(value, onTypeChange), value: type, children: [_jsx(SelectTrigger, { "aria-label": "Filter by type", className: "w-full sm:w-44", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: feedbackTypeOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value))) })] }));
|
|
18
|
+
}
|
|
19
|
+
function ClearFiltersButton({ onClearFilters }) {
|
|
20
|
+
return (_jsxs(Button, { onClick: onClearFilters, type: "button", variant: "outline", children: [_jsx(XIcon, {}), "Clear filters"] }));
|
|
21
|
+
}
|
|
22
|
+
function updateStatusFilter(value, onStatusChange) {
|
|
23
|
+
if (isStatusFilter(value))
|
|
24
|
+
onStatusChange(value);
|
|
25
|
+
}
|
|
26
|
+
function updateTypeFilter(value, onTypeChange) {
|
|
27
|
+
if (isTypeFilter(value))
|
|
28
|
+
onTypeChange(value);
|
|
29
|
+
}
|
|
30
|
+
function isStatusFilter(value) {
|
|
31
|
+
return feedbackStatusOptions.some((option) => option.value === value);
|
|
32
|
+
}
|
|
33
|
+
function isTypeFilter(value) {
|
|
34
|
+
return feedbackTypeOptions.some((option) => option.value === value);
|
|
35
|
+
}
|
|
36
|
+
export { ClearFiltersButton, FeedbackFiltersToolbar, };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type FeedbackMetrics, type StakeholderFeedbackItem } from "../blocks/feedback-tracking-types";
|
|
3
|
+
type FeedbackStakeholderPageProps = {
|
|
4
|
+
isLoading?: boolean;
|
|
5
|
+
items: StakeholderFeedbackItem[];
|
|
6
|
+
metrics: FeedbackMetrics;
|
|
7
|
+
};
|
|
8
|
+
declare function FeedbackStakeholderPage({ isLoading, items, metrics, }: FeedbackStakeholderPageProps): React.JSX.Element;
|
|
9
|
+
export { FeedbackStakeholderPage, type FeedbackStakeholderPageProps };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { FeedbackDetailSheet } from "../blocks/feedback-detail-sheet";
|
|
4
|
+
import { FeedbackMetricsStrip } from "../blocks/feedback-metrics";
|
|
5
|
+
import { FeedbackTable } from "../blocks/feedback-table";
|
|
6
|
+
import { ClearFiltersButton, FeedbackFiltersToolbar, } from "./feedback-stakeholder-page-parts";
|
|
7
|
+
import { PageHeader, PageHeaderContent, PageHeaderDescription, PageHeaderMain, PageHeaderTitle, } from "../ui/page-header";
|
|
8
|
+
function FeedbackStakeholderPage({ isLoading = false, items, metrics, }) {
|
|
9
|
+
const [filters, setFilters] = React.useState(defaultFilters);
|
|
10
|
+
const [selectedFeedback, setSelectedFeedback] = React.useState();
|
|
11
|
+
const filteredItems = React.useMemo(() => filterFeedbackItems(items, filters), [items, filters]);
|
|
12
|
+
const hasActiveFilters = !areDefaultFilters(filters);
|
|
13
|
+
return (_jsxs("div", { className: "min-h-svh bg-background text-foreground", children: [_jsx(FeedbackStakeholderPageHeader, {}), _jsxs("main", { className: "grid gap-4 px-4 py-4 md:px-6 lg:px-8", children: [_jsx(FeedbackMetricsStrip, { metrics: metrics }), _jsx(FeedbackTrackerSurface, { filters: filters, hasActiveFilters: hasActiveFilters, isLoading: isLoading, items: filteredItems, onClearFilters: () => setFilters(defaultFilters), onFiltersChange: setFilters, onSelectFeedback: setSelectedFeedback })] }), _jsx(FeedbackDetailSheet, { feedback: selectedFeedback, onOpenChange: (open) => {
|
|
14
|
+
if (!open)
|
|
15
|
+
setSelectedFeedback(undefined);
|
|
16
|
+
}, open: Boolean(selectedFeedback) })] }));
|
|
17
|
+
}
|
|
18
|
+
function FeedbackStakeholderPageHeader() {
|
|
19
|
+
return (_jsx(PageHeader, { children: _jsx(PageHeaderMain, { children: _jsxs(PageHeaderContent, { children: [_jsx(PageHeaderTitle, { children: "Feedback" }), _jsx(PageHeaderDescription, { children: "Track submitted feedback and Ciridae's progress on review and implementation." })] }) }) }));
|
|
20
|
+
}
|
|
21
|
+
function FeedbackTrackerSurface({ filters, hasActiveFilters, isLoading, items, onClearFilters, onFiltersChange, onSelectFeedback, }) {
|
|
22
|
+
return (_jsxs("div", { className: "grid gap-(--panel-gap)", children: [_jsx(FeedbackFiltersToolbar, { filters: filters, hasActiveFilters: hasActiveFilters, onClearFilters: onClearFilters, onFiltersChange: onFiltersChange }), _jsx(FeedbackTable, { emptyAction: hasActiveFilters ? _jsx(ClearFiltersButton, { onClearFilters: onClearFilters }) : null, emptyDescription: getEmptyDescription(hasActiveFilters), emptyTitle: hasActiveFilters ? "No matching feedback" : "No feedback", isLoading: isLoading, items: items, onSelectFeedback: onSelectFeedback })] }));
|
|
23
|
+
}
|
|
24
|
+
const defaultFilters = {
|
|
25
|
+
search: "",
|
|
26
|
+
status: "all",
|
|
27
|
+
type: "all",
|
|
28
|
+
};
|
|
29
|
+
function filterFeedbackItems(items, filters) {
|
|
30
|
+
return items.filter((item) => {
|
|
31
|
+
return (matchesSearch(item, filters.search) &&
|
|
32
|
+
matchesStatus(item, filters.status) &&
|
|
33
|
+
matchesType(item, filters.type));
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function matchesSearch(item, search) {
|
|
37
|
+
const query = search.trim().toLowerCase();
|
|
38
|
+
if (!query)
|
|
39
|
+
return true;
|
|
40
|
+
return [
|
|
41
|
+
item.subject,
|
|
42
|
+
item.description,
|
|
43
|
+
item.submittedBy.name,
|
|
44
|
+
item.submittedBy.email,
|
|
45
|
+
item.referenceId,
|
|
46
|
+
]
|
|
47
|
+
.filter(Boolean)
|
|
48
|
+
.some((value) => value?.toLowerCase().includes(query));
|
|
49
|
+
}
|
|
50
|
+
function matchesStatus(item, status) {
|
|
51
|
+
return status === "all" || item.status === status;
|
|
52
|
+
}
|
|
53
|
+
function matchesType(item, type) {
|
|
54
|
+
return type === "all" || item.type === type;
|
|
55
|
+
}
|
|
56
|
+
function areDefaultFilters(filters) {
|
|
57
|
+
return (filters.search === defaultFilters.search &&
|
|
58
|
+
filters.status === defaultFilters.status &&
|
|
59
|
+
filters.type === defaultFilters.type);
|
|
60
|
+
}
|
|
61
|
+
function getEmptyDescription(hasActiveFilters) {
|
|
62
|
+
if (hasActiveFilters)
|
|
63
|
+
return "No feedback matches the current filters.";
|
|
64
|
+
return "Feedback submitted by users will appear here.";
|
|
65
|
+
}
|
|
66
|
+
export { FeedbackStakeholderPage };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { KanbanCardData, KanbanColumnData, KanbanMoveEvent } from "../blocks/kanban-types";
|
|
3
|
+
type KanbanPageProps = {
|
|
4
|
+
cards: KanbanCardData[];
|
|
5
|
+
columns: KanbanColumnData[];
|
|
6
|
+
isLoading?: boolean;
|
|
7
|
+
onCardMove?: (event: KanbanMoveEvent) => void;
|
|
8
|
+
onCreateCard?: () => void;
|
|
9
|
+
renderCardActions?: (card: KanbanCardData) => React.ReactNode;
|
|
10
|
+
renderColumnActions?: (column: KanbanColumnData) => React.ReactNode;
|
|
11
|
+
};
|
|
12
|
+
declare function KanbanPage({ cards, columns, isLoading, onCardMove, onCreateCard, renderCardActions, renderColumnActions, }: KanbanPageProps): React.JSX.Element;
|
|
13
|
+
export { KanbanPage, type KanbanPageProps };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { PlusIcon, SearchIcon } from "lucide-react";
|
|
4
|
+
import { KanbanBoard } from "../blocks/kanban-board";
|
|
5
|
+
import { KanbanDetailSheet } from "../blocks/kanban-detail-sheet";
|
|
6
|
+
import { Button } from "../ui/button";
|
|
7
|
+
import { InputGroup, InputGroupAddon, InputGroupInput, InputGroupText } from "../ui/input-group";
|
|
8
|
+
import { PageHeader, PageHeaderActions, PageHeaderContent, PageHeaderDescription, PageHeaderMain, PageHeaderTitle, } from "../ui/page-header";
|
|
9
|
+
function KanbanPage({ cards, columns, isLoading = false, onCardMove, onCreateCard, renderCardActions, renderColumnActions, }) {
|
|
10
|
+
const [search, setSearch] = React.useState("");
|
|
11
|
+
const [selectedCardId, setSelectedCardId] = React.useState();
|
|
12
|
+
const filteredCards = React.useMemo(() => filterKanbanCards(cards, search), [cards, search]);
|
|
13
|
+
const selectedCard = React.useMemo(() => cards.find((card) => card.id === selectedCardId), [cards, selectedCardId]);
|
|
14
|
+
const selectedColumn = getSelectedColumn(columns, selectedCard);
|
|
15
|
+
return (_jsxs("div", { className: "min-h-svh bg-background text-foreground", children: [_jsx(KanbanPageHeader, { onCreateCard: onCreateCard }), _jsxs("main", { className: "grid gap-4 px-4 py-4 md:px-6 lg:px-8", children: [_jsx(KanbanPageToolbar, { filteredCount: filteredCards.length, onSearchChange: setSearch, search: search, totalCount: cards.length }), _jsx(KanbanBoard, { cards: filteredCards, columnMaxHeight: "calc(100vh - 18rem)", columns: columns, empty: getBoardEmptyMessage(search), isLoading: isLoading, onCardMove: onCardMove
|
|
16
|
+
? (move) => onCardMove(getUnfilteredMoveEvent(move, filteredCards, cards))
|
|
17
|
+
: undefined, onCardSelect: (card) => setSelectedCardId(card.id), renderCardActions: renderCardActions, renderColumnActions: renderColumnActions })] }), _jsx(KanbanDetailSheet, { card: selectedCard, column: selectedColumn, onOpenChange: (open) => {
|
|
18
|
+
if (!open)
|
|
19
|
+
setSelectedCardId(undefined);
|
|
20
|
+
}, open: Boolean(selectedCard) })] }));
|
|
21
|
+
}
|
|
22
|
+
function KanbanPageHeader({ onCreateCard }) {
|
|
23
|
+
return (_jsx(PageHeader, { children: _jsxs(PageHeaderMain, { children: [_jsxs(PageHeaderContent, { children: [_jsx(PageHeaderTitle, { children: "Work board" }), _jsx(PageHeaderDescription, { children: "Track work across status columns and open cards for detail." })] }), onCreateCard ? (_jsx(PageHeaderActions, { children: _jsxs(Button, { onClick: onCreateCard, type: "button", children: [_jsx(PlusIcon, {}), "New card"] }) })) : null] }) }));
|
|
24
|
+
}
|
|
25
|
+
function KanbanPageToolbar({ filteredCount, onSearchChange, search, totalCount, }) {
|
|
26
|
+
return (_jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between", children: [_jsx("div", { className: "w-full sm:max-w-sm", children: _jsxs(InputGroup, { children: [_jsx(InputGroupAddon, { children: _jsx(KanbanSearchAdornment, {}) }), _jsx(InputGroupInput, { "aria-label": "Search cards", onChange: (event) => onSearchChange(event.target.value), placeholder: "Search cards...", value: search })] }) }), _jsxs("div", { className: "font-mono text-xs text-muted-foreground tabular-nums", children: [filteredCount, " of ", totalCount, " cards"] })] }));
|
|
27
|
+
}
|
|
28
|
+
function KanbanSearchAdornment() {
|
|
29
|
+
return (_jsxs(InputGroupText, { children: [_jsx(SearchIcon, {}), _jsx("span", { className: "sr-only", children: "Search" })] }));
|
|
30
|
+
}
|
|
31
|
+
function filterKanbanCards(cards, search) {
|
|
32
|
+
const query = search.trim().toLowerCase();
|
|
33
|
+
if (!query)
|
|
34
|
+
return cards;
|
|
35
|
+
return cards.filter((card) => matchesKanbanSearch(card, query));
|
|
36
|
+
}
|
|
37
|
+
function matchesKanbanSearch(card, query) {
|
|
38
|
+
return [card.id, card.title, card.description]
|
|
39
|
+
.filter(Boolean)
|
|
40
|
+
.some((value) => value?.toLowerCase().includes(query));
|
|
41
|
+
}
|
|
42
|
+
function getSelectedColumn(columns, selectedCard) {
|
|
43
|
+
if (!selectedCard)
|
|
44
|
+
return undefined;
|
|
45
|
+
return columns.find((column) => column.id === selectedCard.columnId);
|
|
46
|
+
}
|
|
47
|
+
function getUnfilteredMoveEvent(move, filteredCards, cards) {
|
|
48
|
+
const fromIndex = cards
|
|
49
|
+
.filter((card) => card.columnId === move.fromColumnId)
|
|
50
|
+
.findIndex((card) => card.id === move.cardId);
|
|
51
|
+
const filteredTargetCards = filteredCards.filter((card) => card.columnId === move.toColumnId);
|
|
52
|
+
const targetCard = filteredTargetCards[move.toIndex];
|
|
53
|
+
const unfilteredTargetCards = cards.filter((card) => card.columnId === move.toColumnId);
|
|
54
|
+
const toIndex = targetCard
|
|
55
|
+
? unfilteredTargetCards.findIndex((card) => card.id === targetCard.id)
|
|
56
|
+
: unfilteredTargetCards.length;
|
|
57
|
+
return {
|
|
58
|
+
...move,
|
|
59
|
+
fromIndex: fromIndex >= 0 ? fromIndex : move.fromIndex,
|
|
60
|
+
toIndex: toIndex >= 0 ? toIndex : move.toIndex,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function getBoardEmptyMessage(search) {
|
|
64
|
+
if (search.trim())
|
|
65
|
+
return "No cards match this search";
|
|
66
|
+
return "No cards";
|
|
67
|
+
}
|
|
68
|
+
export { KanbanPage };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { ChevronDownIcon } from "lucide-react";
|
|
3
3
|
import { Accordion as AccordionPrimitive } from "radix-ui";
|
|
4
|
-
import { cn } from "
|
|
4
|
+
import { cn } from "../../lib/utils";
|
|
5
5
|
function Accordion({ ...props }) {
|
|
6
6
|
return _jsx(AccordionPrimitive.Root, { "data-slot": "accordion", ...props });
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
|
|
3
|
-
import { type ButtonVariantProps } from "
|
|
3
|
+
import { type ButtonVariantProps } from "./button-variants";
|
|
4
4
|
declare function AlertDialogPortalContainerProvider({ children, container, }: {
|
|
5
5
|
children: React.ReactNode;
|
|
6
6
|
container: HTMLElement | null;
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
|
|
5
|
-
import { cn } from "
|
|
6
|
-
import { buttonVariants } from "
|
|
5
|
+
import { cn } from "../../lib/utils";
|
|
6
|
+
import { buttonVariants } from "./button-variants";
|
|
7
7
|
const AlertDialogPortalContainerContext = React.createContext({
|
|
8
8
|
container: null,
|
|
9
9
|
});
|
|
@@ -2,7 +2,7 @@ import * as React from "react";
|
|
|
2
2
|
import { type VariantProps } from "class-variance-authority";
|
|
3
3
|
declare const alertVariants: (props?: ({
|
|
4
4
|
variant?: "default" | "destructive" | null | undefined;
|
|
5
|
-
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
5
|
+
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
6
6
|
declare function Alert({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>): React.JSX.Element;
|
|
7
7
|
declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
8
8
|
declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cva } from "class-variance-authority";
|
|
3
|
-
import { cn } from "
|
|
3
|
+
import { cn } from "../../lib/utils";
|
|
4
4
|
const alertVariants = cva("relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-(--panel-padding) py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", {
|
|
5
5
|
variants: {
|
|
6
6
|
variant: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import { PageHeader, PageHeaderActions, PageHeaderContent, PageHeaderDescription, PageHeaderMain, PageHeaderTitle, } from "
|
|
4
|
-
import { SidebarTrigger } from "
|
|
2
|
+
import { cn } from "../../lib/utils";
|
|
3
|
+
import { PageHeader, PageHeaderActions, PageHeaderContent, PageHeaderDescription, PageHeaderMain, PageHeaderTitle, } from "./page-header";
|
|
4
|
+
import { SidebarTrigger } from "./sidebar";
|
|
5
5
|
function AppShellPage({ className, ...props }) {
|
|
6
6
|
return (_jsx("div", { "data-slot": "app-shell-page", className: cn("flex min-h-0 flex-1 flex-col bg-background text-foreground", className), ...props }));
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import type { SidebarAccountThemeMode } from "
|
|
3
|
-
import type { SidebarProviderStyle } from "
|
|
2
|
+
import type { SidebarAccountThemeMode } from "./sidebar-account-menu-theme";
|
|
3
|
+
import type { SidebarProviderStyle } from "./sidebar/context";
|
|
4
4
|
type AppShellBrand = {
|
|
5
5
|
name: string;
|
|
6
6
|
iconLight: string;
|
|
@@ -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 { cn } from "
|
|
4
|
-
import { SidebarAccountMenu } from "
|
|
5
|
-
import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarProvider, SidebarTrigger, } from "
|
|
3
|
+
import { cn } from "../../lib/utils";
|
|
4
|
+
import { SidebarAccountMenu } from "./sidebar-account-menu";
|
|
5
|
+
import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarProvider, SidebarTrigger, } from "./sidebar";
|
|
6
6
|
const defaultSidebarStyle = {
|
|
7
7
|
"--sidebar-width": "15.5rem",
|
|
8
8
|
"--sidebar-width-icon": "3rem",
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { AspectRatio as AspectRatioPrimitive } from "radix-ui";
|
|
2
|
-
declare function AspectRatio({ ...props }: React.ComponentProps<typeof AspectRatioPrimitive.Root>): import("react").JSX.Element;
|
|
2
|
+
declare function AspectRatio({ ...props }: React.ComponentProps<typeof AspectRatioPrimitive.Root>): import("@types/react").JSX.Element;
|
|
3
3
|
export { AspectRatio };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Avatar as AvatarPrimitive } from "radix-ui";
|
|
3
|
-
import { cn } from "
|
|
3
|
+
import { cn } from "../../lib/utils";
|
|
4
4
|
function Avatar({ className, size = "default", ...props }) {
|
|
5
5
|
return (_jsx(AvatarPrimitive.Root, { "data-slot": "avatar", "data-size": size, className: cn("group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6", className), ...props }));
|
|
6
6
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { type BadgeVariantProps } from "
|
|
2
|
+
import { type BadgeVariantProps } from "./badge-variants";
|
|
3
3
|
declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & BadgeVariantProps & {
|
|
4
4
|
asChild?: boolean;
|
|
5
5
|
}): React.JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Slot } from "radix-ui";
|
|
3
|
-
import { cn } from "
|
|
4
|
-
import { badgeVariants } from "
|
|
3
|
+
import { cn } from "../../lib/utils";
|
|
4
|
+
import { badgeVariants } from "./badge-variants";
|
|
5
5
|
function Badge({ className, variant = "default", asChild = false, ...props }) {
|
|
6
6
|
const Comp = asChild ? Slot.Root : "span";
|
|
7
7
|
return (_jsx(Comp, { "data-slot": "badge", "data-variant": variant, className: cn(badgeVariants({ variant }), className), ...props }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { ChevronRight, MoreHorizontal } from "lucide-react";
|
|
3
3
|
import { Slot } from "radix-ui";
|
|
4
|
-
import { cn } from "
|
|
4
|
+
import { cn } from "../../lib/utils";
|
|
5
5
|
function Breadcrumb({ ...props }) {
|
|
6
6
|
return _jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type VariantProps } from "class-variance-authority";
|
|
2
2
|
declare const buttonGroupVariants: (props?: ({
|
|
3
3
|
orientation?: "horizontal" | "vertical" | null | undefined;
|
|
4
|
-
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
4
|
+
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
5
5
|
type ButtonGroupVariantProps = VariantProps<typeof buttonGroupVariants>;
|
|
6
6
|
export { buttonGroupVariants, type ButtonGroupVariantProps };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Separator } from "
|
|
2
|
-
import { type ButtonGroupVariantProps } from "
|
|
3
|
-
declare function ButtonGroup({ className, orientation, ...props }: React.ComponentProps<"div"> & ButtonGroupVariantProps): import("react").JSX.Element;
|
|
1
|
+
import { Separator } from "./separator";
|
|
2
|
+
import { type ButtonGroupVariantProps } from "./button-group-variants";
|
|
3
|
+
declare function ButtonGroup({ className, orientation, ...props }: React.ComponentProps<"div"> & ButtonGroupVariantProps): import("@types/react").JSX.Element;
|
|
4
4
|
declare function ButtonGroupText({ className, asChild, ...props }: React.ComponentProps<"div"> & {
|
|
5
5
|
asChild?: boolean;
|
|
6
|
-
}): import("react").JSX.Element;
|
|
7
|
-
declare function ButtonGroupSeparator({ className, orientation, ...props }: React.ComponentProps<typeof Separator>): import("react").JSX.Element;
|
|
6
|
+
}): import("@types/react").JSX.Element;
|
|
7
|
+
declare function ButtonGroupSeparator({ className, orientation, ...props }: React.ComponentProps<typeof Separator>): import("@types/react").JSX.Element;
|
|
8
8
|
export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Slot } from "radix-ui";
|
|
3
|
-
import { cn } from "
|
|
4
|
-
import { Separator } from "
|
|
5
|
-
import { buttonGroupVariants
|
|
3
|
+
import { cn } from "../../lib/utils";
|
|
4
|
+
import { Separator } from "./separator";
|
|
5
|
+
import { buttonGroupVariants } from "./button-group-variants";
|
|
6
6
|
function ButtonGroup({ className, orientation, ...props }) {
|
|
7
7
|
return (_jsx("div", { role: "group", "data-slot": "button-group", "data-orientation": orientation, className: cn(buttonGroupVariants({ orientation }), className), ...props }));
|
|
8
8
|
}
|