@epicbagel/saas-kit 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +71 -2
- package/THIRD_PARTY_NOTICES.md +47 -0
- package/dist/chunk-23UMHZ4S.cjs +124 -0
- package/dist/chunk-2BHI5ZWJ.cjs +117 -0
- package/dist/chunk-2HTYXBDU.cjs +34 -0
- package/dist/chunk-2XDFTB2W.cjs +35 -0
- package/dist/chunk-35YMAIEL.js +135 -0
- package/dist/chunk-373W6VAD.cjs +82 -0
- package/dist/chunk-3BZ4CQHW.js +94 -0
- package/dist/chunk-3OWGL4Q2.js +65 -0
- package/dist/chunk-3QT5VYZ3.js +141 -0
- package/dist/chunk-4HWCNRK4.js +117 -0
- package/dist/chunk-4LXN6GLZ.cjs +44 -0
- package/dist/chunk-4NN7EA3W.js +222 -0
- package/dist/chunk-62UTAG2C.js +152 -0
- package/dist/chunk-667ZCM4X.cjs +72 -0
- package/dist/chunk-6RVPQGYS.js +181 -0
- package/dist/chunk-6T2EULKN.cjs +42 -0
- package/dist/chunk-7CRDYV3C.js +137 -0
- package/dist/chunk-BEJJN2SY.cjs +73 -0
- package/dist/chunk-BGLGRUPP.cjs +31 -0
- package/dist/chunk-CS7DM3NV.js +98 -0
- package/dist/chunk-CTYOW3V2.cjs +59 -0
- package/dist/chunk-D4ZL2OEQ.js +61 -0
- package/dist/chunk-DFB4ILN6.cjs +137 -0
- package/dist/chunk-E2TQMDO7.js +34 -0
- package/dist/chunk-EIY5LLSP.js +82 -0
- package/dist/chunk-EJP2L5QV.cjs +74 -0
- package/dist/chunk-F73ONTCK.js +73 -0
- package/dist/chunk-F7JHSZNT.js +73 -0
- package/dist/chunk-FJLINIC6.js +48 -0
- package/dist/chunk-FLPYZNWZ.js +124 -0
- package/dist/chunk-FNDBM67K.cjs +61 -0
- package/dist/chunk-G54TQV2R.cjs +222 -0
- package/dist/chunk-G6SRSWXB.js +32 -0
- package/dist/chunk-G76JANB4.js +138 -0
- package/dist/chunk-GL5CV4FF.js +59 -0
- package/dist/chunk-GMJWBGTJ.js +34 -0
- package/dist/chunk-GRZMUGT6.cjs +94 -0
- package/dist/chunk-GXHGMI3Z.cjs +48 -0
- package/dist/chunk-H2O6NMLZ.js +52 -0
- package/dist/chunk-H2UFRLLN.cjs +100 -0
- package/dist/chunk-H7TETFLB.js +39 -0
- package/dist/chunk-HQRWRRZJ.js +179 -0
- package/dist/chunk-HYSWE75T.js +67 -0
- package/dist/chunk-HYTILYE5.js +31 -0
- package/dist/chunk-I6GUOEBO.cjs +61 -0
- package/dist/chunk-IQZLUT2Y.cjs +34 -0
- package/dist/chunk-J3GQXM37.js +61 -0
- package/dist/chunk-J6NXDZR5.js +145 -0
- package/dist/chunk-JH4GAGOQ.cjs +34 -0
- package/dist/chunk-KGFL3VWY.cjs +62 -0
- package/dist/chunk-KN4RPX35.js +36 -0
- package/dist/chunk-KWLSBTB2.cjs +34 -0
- package/dist/chunk-L4DH72UF.cjs +179 -0
- package/dist/chunk-LELBCBDT.cjs +52 -0
- package/dist/chunk-LELFPLTE.js +55 -0
- package/dist/chunk-LI5EOSQG.js +171 -0
- package/dist/chunk-LIE6W3QT.js +42 -0
- package/dist/chunk-MLHNYRFX.js +411 -0
- package/dist/chunk-NBUWGRQO.js +31 -0
- package/dist/chunk-NE3ZVJ6G.cjs +67 -0
- package/dist/chunk-NQK5ZWC7.cjs +31 -0
- package/dist/chunk-NW3OWKBN.js +57 -0
- package/dist/chunk-OICAYRVH.js +34 -0
- package/dist/chunk-PIU5SSUV.js +25 -0
- package/dist/chunk-PNWNU6JW.cjs +171 -0
- package/dist/chunk-PPX2VPGI.cjs +138 -0
- package/dist/chunk-PQUSJEXL.cjs +51 -0
- package/dist/chunk-QD63LB2F.js +62 -0
- package/dist/chunk-QMA3WVB7.js +51 -0
- package/dist/chunk-QNZYQLNP.js +125 -0
- package/dist/chunk-R35FT53G.cjs +25 -0
- package/dist/chunk-R3DQS6U4.cjs +135 -0
- package/dist/chunk-R4AIM3BQ.js +72 -0
- package/dist/chunk-R5L4CM6V.cjs +202 -0
- package/dist/chunk-RRRD5EUI.js +202 -0
- package/dist/chunk-RSFEKQDR.cjs +181 -0
- package/dist/chunk-RWWOFWLP.cjs +510 -0
- package/dist/chunk-SGW4FWBX.cjs +411 -0
- package/dist/chunk-T2ZFSPE4.cjs +36 -0
- package/dist/chunk-U2NES7VR.cjs +32 -0
- package/dist/chunk-UGF2K6NR.js +510 -0
- package/dist/chunk-V4LE2HWP.js +166 -0
- package/dist/chunk-V5SPFLKW.cjs +145 -0
- package/dist/chunk-V7542UGX.js +31 -0
- package/dist/chunk-VBPPFC7X.cjs +66 -0
- package/dist/chunk-VGTINL5Q.cjs +39 -0
- package/dist/chunk-VKIGJNJR.cjs +57 -0
- package/dist/chunk-W5HPHEE7.cjs +31 -0
- package/dist/chunk-W5I4FN7G.cjs +78 -0
- package/dist/chunk-WABCLRBR.cjs +65 -0
- package/dist/chunk-WDXEJDMO.cjs +141 -0
- package/dist/chunk-WNXVGUBF.cjs +40 -0
- package/dist/chunk-WQJKUKBL.cjs +125 -0
- package/dist/chunk-XAPPU3MD.js +35 -0
- package/dist/chunk-XLIAY56V.cjs +55 -0
- package/dist/chunk-YEW65ASC.js +66 -0
- package/dist/chunk-YG7FBJRM.js +40 -0
- package/dist/chunk-YWAQRAXP.js +78 -0
- package/dist/chunk-YYFVG5A6.cjs +152 -0
- package/dist/chunk-ZAITUDYD.cjs +166 -0
- package/dist/chunk-ZRLUUZHK.js +32 -0
- package/dist/chunk-ZWZAAGQF.js +44 -0
- package/dist/hooks/use-copy-to-clipboard.cjs +7 -0
- package/dist/hooks/use-copy-to-clipboard.d.cts +12 -0
- package/dist/hooks/use-copy-to-clipboard.d.ts +12 -0
- package/dist/hooks/use-copy-to-clipboard.js +7 -0
- package/dist/hooks/use-layout-preference.cjs +51 -0
- package/dist/hooks/use-layout-preference.d.cts +10 -0
- package/dist/hooks/use-layout-preference.d.ts +10 -0
- package/dist/hooks/use-layout-preference.js +51 -0
- package/dist/hooks/use-mobile.cjs +7 -0
- package/dist/hooks/use-mobile.d.cts +3 -0
- package/dist/hooks/use-mobile.d.ts +3 -0
- package/dist/hooks/use-mobile.js +7 -0
- package/dist/lib/date-utils.cjs +15 -0
- package/dist/lib/date-utils.d.cts +16 -0
- package/dist/lib/date-utils.d.ts +16 -0
- package/dist/lib/date-utils.js +14 -0
- package/dist/lib/filter-types.cjs +161 -0
- package/dist/lib/filter-types.d.cts +60 -0
- package/dist/lib/filter-types.d.ts +60 -0
- package/dist/lib/filter-types.js +160 -0
- package/dist/lib/neutral-theme.cjs +238 -0
- package/dist/lib/neutral-theme.d.cts +92 -0
- package/dist/lib/neutral-theme.d.ts +92 -0
- package/dist/lib/neutral-theme.js +236 -0
- package/dist/lib/status-colors.cjs +18 -0
- package/dist/lib/status-colors.d.cts +76 -0
- package/dist/lib/status-colors.d.ts +76 -0
- package/dist/lib/status-colors.js +17 -0
- package/dist/lib/utils.cjs +9 -0
- package/dist/lib/utils.d.cts +9 -0
- package/dist/lib/utils.d.ts +9 -0
- package/dist/lib/utils.js +8 -0
- package/dist/primitives/activity-feed.cjs +177 -0
- package/dist/primitives/activity-feed.d.cts +78 -0
- package/dist/primitives/activity-feed.d.ts +78 -0
- package/dist/primitives/activity-feed.js +177 -0
- package/dist/primitives/activity-log.cjs +79 -0
- package/dist/primitives/activity-log.d.cts +55 -0
- package/dist/primitives/activity-log.d.ts +55 -0
- package/dist/primitives/activity-log.js +79 -0
- package/dist/primitives/agent-comment.cjs +39 -0
- package/dist/primitives/agent-comment.d.cts +33 -0
- package/dist/primitives/agent-comment.d.ts +33 -0
- package/dist/primitives/agent-comment.js +39 -0
- package/dist/primitives/alert-dialog.cjs +30 -0
- package/dist/primitives/alert-dialog.d.cts +23 -0
- package/dist/primitives/alert-dialog.d.ts +23 -0
- package/dist/primitives/alert-dialog.js +30 -0
- package/dist/primitives/alert.cjs +12 -0
- package/dist/primitives/alert.d.cts +26 -0
- package/dist/primitives/alert.d.ts +26 -0
- package/dist/primitives/alert.js +12 -0
- package/dist/primitives/anchor-target.cjs +13 -0
- package/dist/primitives/anchor-target.d.cts +7 -0
- package/dist/primitives/anchor-target.d.ts +7 -0
- package/dist/primitives/anchor-target.js +13 -0
- package/dist/primitives/anchor.cjs +35 -0
- package/dist/primitives/anchor.d.cts +16 -0
- package/dist/primitives/anchor.d.ts +16 -0
- package/dist/primitives/anchor.js +35 -0
- package/dist/primitives/archive-confirmation-dialog.cjs +50 -0
- package/dist/primitives/archive-confirmation-dialog.d.cts +12 -0
- package/dist/primitives/archive-confirmation-dialog.d.ts +12 -0
- package/dist/primitives/archive-confirmation-dialog.js +50 -0
- package/dist/primitives/aspect-ratio.cjs +8 -0
- package/dist/primitives/aspect-ratio.d.cts +6 -0
- package/dist/primitives/aspect-ratio.d.ts +6 -0
- package/dist/primitives/aspect-ratio.js +8 -0
- package/dist/primitives/attachment.cjs +203 -0
- package/dist/primitives/attachment.d.cts +28 -0
- package/dist/primitives/attachment.d.ts +28 -0
- package/dist/primitives/attachment.js +203 -0
- package/dist/primitives/avatar.cjs +12 -0
- package/dist/primitives/avatar.d.cts +22 -0
- package/dist/primitives/avatar.d.ts +22 -0
- package/dist/primitives/avatar.js +12 -0
- package/dist/primitives/badge.cjs +10 -0
- package/dist/primitives/badge.d.cts +27 -0
- package/dist/primitives/badge.d.ts +27 -0
- package/dist/primitives/badge.js +10 -0
- package/dist/primitives/board-view-internals.cjs +16 -0
- package/dist/primitives/board-view-internals.d.cts +33 -0
- package/dist/primitives/board-view-internals.d.ts +33 -0
- package/dist/primitives/board-view-internals.js +16 -0
- package/dist/primitives/board-view.cjs +108 -0
- package/dist/primitives/board-view.d.cts +39 -0
- package/dist/primitives/board-view.d.ts +39 -0
- package/dist/primitives/board-view.js +108 -0
- package/dist/primitives/browser-preview.cjs +62 -0
- package/dist/primitives/browser-preview.d.cts +41 -0
- package/dist/primitives/browser-preview.d.ts +41 -0
- package/dist/primitives/browser-preview.js +62 -0
- package/dist/primitives/button.cjs +10 -0
- package/dist/primitives/button.d.cts +32 -0
- package/dist/primitives/button.d.ts +32 -0
- package/dist/primitives/button.js +10 -0
- package/dist/primitives/calendar.cjs +11 -0
- package/dist/primitives/calendar.d.cts +13 -0
- package/dist/primitives/calendar.d.ts +13 -0
- package/dist/primitives/calendar.js +11 -0
- package/dist/primitives/call-card.cjs +195 -0
- package/dist/primitives/call-card.d.cts +86 -0
- package/dist/primitives/call-card.d.ts +86 -0
- package/dist/primitives/call-card.js +195 -0
- package/dist/primitives/callout.cjs +8 -0
- package/dist/primitives/callout.d.cts +41 -0
- package/dist/primitives/callout.d.ts +41 -0
- package/dist/primitives/callout.js +8 -0
- package/dist/primitives/card.cjs +18 -0
- package/dist/primitives/card.d.cts +55 -0
- package/dist/primitives/card.d.ts +55 -0
- package/dist/primitives/card.js +18 -0
- package/dist/primitives/checkbox.cjs +8 -0
- package/dist/primitives/checkbox.d.cts +20 -0
- package/dist/primitives/checkbox.d.ts +20 -0
- package/dist/primitives/checkbox.js +8 -0
- package/dist/primitives/chip-tabs.cjs +10 -0
- package/dist/primitives/chip-tabs.d.cts +39 -0
- package/dist/primitives/chip-tabs.d.ts +39 -0
- package/dist/primitives/chip-tabs.js +10 -0
- package/dist/primitives/code-block.cjs +56 -0
- package/dist/primitives/code-block.d.cts +35 -0
- package/dist/primitives/code-block.d.ts +35 -0
- package/dist/primitives/code-block.js +56 -0
- package/dist/primitives/collapsible-section.cjs +69 -0
- package/dist/primitives/collapsible-section.d.cts +24 -0
- package/dist/primitives/collapsible-section.d.ts +24 -0
- package/dist/primitives/collapsible-section.js +69 -0
- package/dist/primitives/collapsible.cjs +12 -0
- package/dist/primitives/collapsible.d.cts +14 -0
- package/dist/primitives/collapsible.d.ts +14 -0
- package/dist/primitives/collapsible.js +12 -0
- package/dist/primitives/compact-app-shell.cjs +40 -0
- package/dist/primitives/compact-app-shell.d.cts +12 -0
- package/dist/primitives/compact-app-shell.d.ts +12 -0
- package/dist/primitives/compact-app-shell.js +40 -0
- package/dist/primitives/compact-log.cjs +39 -0
- package/dist/primitives/compact-log.d.cts +19 -0
- package/dist/primitives/compact-log.d.ts +19 -0
- package/dist/primitives/compact-log.js +39 -0
- package/dist/primitives/confirm-bar.cjs +101 -0
- package/dist/primitives/confirm-bar.d.cts +60 -0
- package/dist/primitives/confirm-bar.d.ts +60 -0
- package/dist/primitives/confirm-bar.js +101 -0
- package/dist/primitives/connection-status-bar.cjs +243 -0
- package/dist/primitives/connection-status-bar.d.cts +52 -0
- package/dist/primitives/connection-status-bar.d.ts +52 -0
- package/dist/primitives/connection-status-bar.js +243 -0
- package/dist/primitives/connection.cjs +206 -0
- package/dist/primitives/connection.d.cts +126 -0
- package/dist/primitives/connection.d.ts +126 -0
- package/dist/primitives/connection.js +206 -0
- package/dist/primitives/contact-header.cjs +60 -0
- package/dist/primitives/contact-header.d.cts +54 -0
- package/dist/primitives/contact-header.d.ts +54 -0
- package/dist/primitives/contact-header.js +60 -0
- package/dist/primitives/copy-button.cjs +10 -0
- package/dist/primitives/copy-button.d.cts +21 -0
- package/dist/primitives/copy-button.d.ts +21 -0
- package/dist/primitives/copy-button.js +10 -0
- package/dist/primitives/count-badge.cjs +9 -0
- package/dist/primitives/count-badge.d.cts +21 -0
- package/dist/primitives/count-badge.d.ts +21 -0
- package/dist/primitives/count-badge.js +9 -0
- package/dist/primitives/decision-actions.cjs +66 -0
- package/dist/primitives/decision-actions.d.cts +31 -0
- package/dist/primitives/decision-actions.d.ts +31 -0
- package/dist/primitives/decision-actions.js +66 -0
- package/dist/primitives/definition-list.cjs +65 -0
- package/dist/primitives/definition-list.d.cts +23 -0
- package/dist/primitives/definition-list.d.ts +23 -0
- package/dist/primitives/definition-list.js +65 -0
- package/dist/primitives/delete-confirmation-dialog.cjs +11 -0
- package/dist/primitives/delete-confirmation-dialog.d.cts +23 -0
- package/dist/primitives/delete-confirmation-dialog.d.ts +23 -0
- package/dist/primitives/delete-confirmation-dialog.js +11 -0
- package/dist/primitives/dialog.cjs +26 -0
- package/dist/primitives/dialog.d.cts +44 -0
- package/dist/primitives/dialog.d.ts +44 -0
- package/dist/primitives/dialog.js +26 -0
- package/dist/primitives/drawer.cjs +26 -0
- package/dist/primitives/drawer.d.cts +36 -0
- package/dist/primitives/drawer.d.ts +36 -0
- package/dist/primitives/drawer.js +26 -0
- package/dist/primitives/dropdown-menu.cjs +36 -0
- package/dist/primitives/dropdown-menu.d.cts +34 -0
- package/dist/primitives/dropdown-menu.d.ts +34 -0
- package/dist/primitives/dropdown-menu.js +36 -0
- package/dist/primitives/editable-list.cjs +108 -0
- package/dist/primitives/editable-list.d.cts +23 -0
- package/dist/primitives/editable-list.d.ts +23 -0
- package/dist/primitives/editable-list.js +108 -0
- package/dist/primitives/empty-state.cjs +9 -0
- package/dist/primitives/empty-state.d.cts +54 -0
- package/dist/primitives/empty-state.d.ts +54 -0
- package/dist/primitives/empty-state.js +9 -0
- package/dist/primitives/eyebrow.cjs +8 -0
- package/dist/primitives/eyebrow.d.cts +21 -0
- package/dist/primitives/eyebrow.d.ts +21 -0
- package/dist/primitives/eyebrow.js +8 -0
- package/dist/primitives/feature-empty-state.cjs +133 -0
- package/dist/primitives/feature-empty-state.d.cts +42 -0
- package/dist/primitives/feature-empty-state.d.ts +42 -0
- package/dist/primitives/feature-empty-state.js +133 -0
- package/dist/primitives/field.cjs +260 -0
- package/dist/primitives/field.d.cts +43 -0
- package/dist/primitives/field.d.ts +43 -0
- package/dist/primitives/field.js +260 -0
- package/dist/primitives/file-dropzone.cjs +118 -0
- package/dist/primitives/file-dropzone.d.cts +36 -0
- package/dist/primitives/file-dropzone.d.ts +36 -0
- package/dist/primitives/file-dropzone.js +118 -0
- package/dist/primitives/filter-bar.cjs +20 -0
- package/dist/primitives/filter-bar.d.cts +25 -0
- package/dist/primitives/filter-bar.d.ts +25 -0
- package/dist/primitives/filter-bar.js +20 -0
- package/dist/primitives/flex-item.cjs +34 -0
- package/dist/primitives/flex-item.d.cts +18 -0
- package/dist/primitives/flex-item.d.ts +18 -0
- package/dist/primitives/flex-item.js +34 -0
- package/dist/primitives/grid.cjs +47 -0
- package/dist/primitives/grid.d.cts +18 -0
- package/dist/primitives/grid.d.ts +18 -0
- package/dist/primitives/grid.js +47 -0
- package/dist/primitives/heading.cjs +8 -0
- package/dist/primitives/heading.d.cts +28 -0
- package/dist/primitives/heading.d.ts +28 -0
- package/dist/primitives/heading.js +8 -0
- package/dist/primitives/hidden-control.cjs +13 -0
- package/dist/primitives/hidden-control.d.cts +7 -0
- package/dist/primitives/hidden-control.d.ts +7 -0
- package/dist/primitives/hidden-control.js +13 -0
- package/dist/primitives/icon.cjs +8 -0
- package/dist/primitives/icon.d.cts +22 -0
- package/dist/primitives/icon.d.ts +22 -0
- package/dist/primitives/icon.js +8 -0
- package/dist/primitives/image.cjs +52 -0
- package/dist/primitives/image.d.cts +21 -0
- package/dist/primitives/image.d.ts +21 -0
- package/dist/primitives/image.js +52 -0
- package/dist/primitives/inline-code.cjs +34 -0
- package/dist/primitives/inline-code.d.cts +15 -0
- package/dist/primitives/inline-code.d.ts +15 -0
- package/dist/primitives/inline-code.js +34 -0
- package/dist/primitives/input.cjs +8 -0
- package/dist/primitives/input.d.cts +23 -0
- package/dist/primitives/input.d.ts +23 -0
- package/dist/primitives/input.js +8 -0
- package/dist/primitives/inset.cjs +20 -0
- package/dist/primitives/inset.d.cts +12 -0
- package/dist/primitives/inset.d.ts +12 -0
- package/dist/primitives/inset.js +20 -0
- package/dist/primitives/interactive-card.cjs +11 -0
- package/dist/primitives/interactive-card.d.cts +68 -0
- package/dist/primitives/interactive-card.d.ts +68 -0
- package/dist/primitives/interactive-card.js +11 -0
- package/dist/primitives/label.cjs +8 -0
- package/dist/primitives/label.d.cts +12 -0
- package/dist/primitives/label.d.ts +12 -0
- package/dist/primitives/label.js +8 -0
- package/dist/primitives/line-break.cjs +10 -0
- package/dist/primitives/line-break.d.cts +6 -0
- package/dist/primitives/line-break.d.ts +6 -0
- package/dist/primitives/line-break.js +10 -0
- package/dist/primitives/list.cjs +68 -0
- package/dist/primitives/list.d.cts +35 -0
- package/dist/primitives/list.d.ts +35 -0
- package/dist/primitives/list.js +68 -0
- package/dist/primitives/load-more-button.cjs +10 -0
- package/dist/primitives/load-more-button.d.cts +42 -0
- package/dist/primitives/load-more-button.d.ts +42 -0
- package/dist/primitives/load-more-button.js +10 -0
- package/dist/primitives/loading.cjs +10 -0
- package/dist/primitives/loading.d.cts +5 -0
- package/dist/primitives/loading.d.ts +5 -0
- package/dist/primitives/loading.js +10 -0
- package/dist/primitives/message.cjs +95 -0
- package/dist/primitives/message.d.cts +13 -0
- package/dist/primitives/message.d.ts +13 -0
- package/dist/primitives/message.js +95 -0
- package/dist/primitives/native-select.cjs +33 -0
- package/dist/primitives/native-select.d.cts +15 -0
- package/dist/primitives/native-select.d.ts +15 -0
- package/dist/primitives/native-select.js +33 -0
- package/dist/primitives/page-header-actions.cjs +11 -0
- package/dist/primitives/page-header-actions.d.cts +49 -0
- package/dist/primitives/page-header-actions.d.ts +49 -0
- package/dist/primitives/page-header-actions.js +11 -0
- package/dist/primitives/page-header.cjs +72 -0
- package/dist/primitives/page-header.d.cts +40 -0
- package/dist/primitives/page-header.d.ts +40 -0
- package/dist/primitives/page-header.js +72 -0
- package/dist/primitives/page-shell.cjs +46 -0
- package/dist/primitives/page-shell.d.cts +44 -0
- package/dist/primitives/page-shell.d.ts +44 -0
- package/dist/primitives/page-shell.js +46 -0
- package/dist/primitives/page-tabs.cjs +63 -0
- package/dist/primitives/page-tabs.d.cts +28 -0
- package/dist/primitives/page-tabs.d.ts +28 -0
- package/dist/primitives/page-tabs.js +63 -0
- package/dist/primitives/panel-section.cjs +52 -0
- package/dist/primitives/panel-section.d.cts +20 -0
- package/dist/primitives/panel-section.d.ts +20 -0
- package/dist/primitives/panel-section.js +52 -0
- package/dist/primitives/person-avatar.cjs +57 -0
- package/dist/primitives/person-avatar.d.cts +33 -0
- package/dist/primitives/person-avatar.d.ts +33 -0
- package/dist/primitives/person-avatar.js +57 -0
- package/dist/primitives/phone.cjs +69 -0
- package/dist/primitives/phone.d.cts +50 -0
- package/dist/primitives/phone.d.ts +50 -0
- package/dist/primitives/phone.js +69 -0
- package/dist/primitives/popover.cjs +12 -0
- package/dist/primitives/popover.d.cts +14 -0
- package/dist/primitives/popover.d.ts +14 -0
- package/dist/primitives/popover.js +12 -0
- package/dist/primitives/progress.cjs +31 -0
- package/dist/primitives/progress.d.cts +6 -0
- package/dist/primitives/progress.d.ts +6 -0
- package/dist/primitives/progress.js +31 -0
- package/dist/primitives/quick-filters.cjs +10 -0
- package/dist/primitives/quick-filters.d.cts +36 -0
- package/dist/primitives/quick-filters.d.ts +36 -0
- package/dist/primitives/quick-filters.js +10 -0
- package/dist/primitives/radio-group.cjs +46 -0
- package/dist/primitives/radio-group.d.cts +7 -0
- package/dist/primitives/radio-group.d.ts +7 -0
- package/dist/primitives/radio-group.js +46 -0
- package/dist/primitives/resource-card.cjs +104 -0
- package/dist/primitives/resource-card.d.cts +93 -0
- package/dist/primitives/resource-card.d.ts +93 -0
- package/dist/primitives/resource-card.js +104 -0
- package/dist/primitives/resource-list.cjs +28 -0
- package/dist/primitives/resource-list.d.cts +103 -0
- package/dist/primitives/resource-list.d.ts +103 -0
- package/dist/primitives/resource-list.js +28 -0
- package/dist/primitives/responsive-dialog.cjs +142 -0
- package/dist/primitives/responsive-dialog.d.cts +56 -0
- package/dist/primitives/responsive-dialog.d.ts +56 -0
- package/dist/primitives/responsive-dialog.js +142 -0
- package/dist/primitives/responsive-view.cjs +29 -0
- package/dist/primitives/responsive-view.d.cts +10 -0
- package/dist/primitives/responsive-view.d.ts +10 -0
- package/dist/primitives/responsive-view.js +29 -0
- package/dist/primitives/rich-text.cjs +43 -0
- package/dist/primitives/rich-text.d.cts +14 -0
- package/dist/primitives/rich-text.d.ts +14 -0
- package/dist/primitives/rich-text.js +43 -0
- package/dist/primitives/scroll-area.cjs +10 -0
- package/dist/primitives/scroll-area.d.cts +13 -0
- package/dist/primitives/scroll-area.d.ts +13 -0
- package/dist/primitives/scroll-area.js +10 -0
- package/dist/primitives/section-header.cjs +51 -0
- package/dist/primitives/section-header.d.cts +22 -0
- package/dist/primitives/section-header.d.ts +22 -0
- package/dist/primitives/section-header.js +51 -0
- package/dist/primitives/section.cjs +39 -0
- package/dist/primitives/section.d.cts +22 -0
- package/dist/primitives/section.d.ts +22 -0
- package/dist/primitives/section.js +39 -0
- package/dist/primitives/select.cjs +26 -0
- package/dist/primitives/select.d.cts +25 -0
- package/dist/primitives/select.d.ts +25 -0
- package/dist/primitives/select.js +26 -0
- package/dist/primitives/selection-overlay.cjs +24 -0
- package/dist/primitives/selection-overlay.d.cts +7 -0
- package/dist/primitives/selection-overlay.d.ts +7 -0
- package/dist/primitives/selection-overlay.js +24 -0
- package/dist/primitives/sentiment-dot.cjs +15 -0
- package/dist/primitives/sentiment-dot.d.cts +42 -0
- package/dist/primitives/sentiment-dot.d.ts +42 -0
- package/dist/primitives/sentiment-dot.js +15 -0
- package/dist/primitives/separator.cjs +8 -0
- package/dist/primitives/separator.d.cts +9 -0
- package/dist/primitives/separator.d.ts +9 -0
- package/dist/primitives/separator.js +8 -0
- package/dist/primitives/sheet.cjs +27 -0
- package/dist/primitives/sheet.d.cts +48 -0
- package/dist/primitives/sheet.d.ts +48 -0
- package/dist/primitives/sheet.js +27 -0
- package/dist/primitives/skeleton.cjs +8 -0
- package/dist/primitives/skeleton.d.cts +15 -0
- package/dist/primitives/skeleton.d.ts +15 -0
- package/dist/primitives/skeleton.js +8 -0
- package/dist/primitives/spacer.cjs +20 -0
- package/dist/primitives/spacer.d.cts +11 -0
- package/dist/primitives/spacer.d.ts +11 -0
- package/dist/primitives/spacer.js +20 -0
- package/dist/primitives/split-action-button.cjs +95 -0
- package/dist/primitives/split-action-button.d.cts +41 -0
- package/dist/primitives/split-action-button.d.ts +41 -0
- package/dist/primitives/split-action-button.js +95 -0
- package/dist/primitives/stack.cjs +8 -0
- package/dist/primitives/stack.d.cts +63 -0
- package/dist/primitives/stack.d.ts +63 -0
- package/dist/primitives/stack.js +8 -0
- package/dist/primitives/status-badge.cjs +9 -0
- package/dist/primitives/status-badge.d.cts +20 -0
- package/dist/primitives/status-badge.d.ts +20 -0
- package/dist/primitives/status-badge.js +9 -0
- package/dist/primitives/status-icon-tile.cjs +32 -0
- package/dist/primitives/status-icon-tile.d.cts +12 -0
- package/dist/primitives/status-icon-tile.d.ts +12 -0
- package/dist/primitives/status-icon-tile.js +32 -0
- package/dist/primitives/status-icon.cjs +8 -0
- package/dist/primitives/status-icon.d.cts +18 -0
- package/dist/primitives/status-icon.d.ts +18 -0
- package/dist/primitives/status-icon.js +8 -0
- package/dist/primitives/status-panel.cjs +83 -0
- package/dist/primitives/status-panel.d.cts +25 -0
- package/dist/primitives/status-panel.d.ts +25 -0
- package/dist/primitives/status-panel.js +83 -0
- package/dist/primitives/switch-field.cjs +44 -0
- package/dist/primitives/switch-field.d.cts +17 -0
- package/dist/primitives/switch-field.d.ts +17 -0
- package/dist/primitives/switch-field.js +44 -0
- package/dist/primitives/switch.cjs +8 -0
- package/dist/primitives/switch.d.cts +6 -0
- package/dist/primitives/switch.d.ts +6 -0
- package/dist/primitives/switch.js +8 -0
- package/dist/primitives/tabs.cjs +14 -0
- package/dist/primitives/tabs.d.cts +36 -0
- package/dist/primitives/tabs.d.ts +36 -0
- package/dist/primitives/tabs.js +14 -0
- package/dist/primitives/tag-input.cjs +90 -0
- package/dist/primitives/tag-input.d.cts +13 -0
- package/dist/primitives/tag-input.d.ts +13 -0
- package/dist/primitives/tag-input.js +90 -0
- package/dist/primitives/text.cjs +8 -0
- package/dist/primitives/text.d.cts +51 -0
- package/dist/primitives/text.d.ts +51 -0
- package/dist/primitives/text.js +8 -0
- package/dist/primitives/textarea.cjs +37 -0
- package/dist/primitives/textarea.d.cts +12 -0
- package/dist/primitives/textarea.d.ts +12 -0
- package/dist/primitives/textarea.js +37 -0
- package/dist/primitives/thinking-screen.cjs +87 -0
- package/dist/primitives/thinking-screen.d.cts +46 -0
- package/dist/primitives/thinking-screen.d.ts +46 -0
- package/dist/primitives/thinking-screen.js +87 -0
- package/dist/primitives/timeline.cjs +13 -0
- package/dist/primitives/timeline.d.cts +54 -0
- package/dist/primitives/timeline.d.ts +54 -0
- package/dist/primitives/timeline.js +13 -0
- package/dist/primitives/toggle-group.cjs +51 -0
- package/dist/primitives/toggle-group.d.cts +18 -0
- package/dist/primitives/toggle-group.d.ts +18 -0
- package/dist/primitives/toggle-group.js +51 -0
- package/dist/primitives/toggle.cjs +10 -0
- package/dist/primitives/toggle.d.cts +15 -0
- package/dist/primitives/toggle.d.ts +15 -0
- package/dist/primitives/toggle.js +10 -0
- package/dist/primitives/tooltip.cjs +14 -0
- package/dist/primitives/tooltip.d.cts +9 -0
- package/dist/primitives/tooltip.d.ts +9 -0
- package/dist/primitives/tooltip.js +14 -0
- package/dist/primitives/voice-dictation-button.cjs +244 -0
- package/dist/primitives/voice-dictation-button.d.cts +41 -0
- package/dist/primitives/voice-dictation-button.d.ts +41 -0
- package/dist/primitives/voice-dictation-button.js +244 -0
- package/package.json +1243 -3
- package/src/styles/components/attachment.css +61 -0
- package/src/styles/components/message.css +29 -0
- package/src/styles/components.css +3 -0
- package/src/styles/globals.css +10 -0
- package/src/styles/keyframes.css +26 -0
- package/src/styles/palette.gen.css +150 -0
- package/src/styles/shadcn.css +631 -0
- package/src/styles/source.css +4 -0
- package/src/styles/tokens/base.css +36 -0
- package/src/styles/tokens/container.css +9 -0
- package/src/styles/tokens/forms.css +61 -0
- package/src/styles/tokens/theme.css +93 -0
- package/src/styles/tokens.css +17 -0
- package/src/styles/utilities.css +9 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
type ConnectionStatus = "connected" | "disconnected" | "syncing" | "error";
|
|
5
|
+
interface ConnectionAction {
|
|
6
|
+
label: ReactNode;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
/** Optional leading icon. */
|
|
9
|
+
icon?: ReactNode;
|
|
10
|
+
/** Muted sub-line under the label (e.g. "Re-fetch the last 90 days"). */
|
|
11
|
+
description?: ReactNode;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Red treatment in the menu, and a destructive (red) confirm button. The
|
|
15
|
+
* common treatment for Disconnect / Remove / Revoke.
|
|
16
|
+
*/
|
|
17
|
+
destructive?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Require confirmation before `onClick` fires. Just pass the dialog copy —
|
|
20
|
+
* the menu item opens an AlertDialog and `onClick` runs only on confirm.
|
|
21
|
+
* Pair with `destructive` for the standard Disconnect pattern.
|
|
22
|
+
*/
|
|
23
|
+
confirm?: {
|
|
24
|
+
title?: ReactNode;
|
|
25
|
+
description?: ReactNode;
|
|
26
|
+
confirmLabel?: ReactNode;
|
|
27
|
+
cancelLabel?: ReactNode;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Open a form dialog when the menu item is selected — for setup that needs
|
|
31
|
+
* input (an API key, a webhook generator). `content` receives a `close`
|
|
32
|
+
* callback to dismiss the dialog (call it after a successful connect).
|
|
33
|
+
* Use this for configuration that belongs under the standard Settings menu.
|
|
34
|
+
*/
|
|
35
|
+
dialog?: {
|
|
36
|
+
title?: ReactNode;
|
|
37
|
+
description?: ReactNode;
|
|
38
|
+
content: (close: () => void) => ReactNode;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
interface ConnectionPrimaryAction {
|
|
42
|
+
label: ReactNode;
|
|
43
|
+
onClick?: () => void;
|
|
44
|
+
disabled?: boolean;
|
|
45
|
+
/** Standard setup dialog opened by the primary action. */
|
|
46
|
+
dialog?: {
|
|
47
|
+
title?: ReactNode;
|
|
48
|
+
description?: ReactNode;
|
|
49
|
+
content: (close: () => void) => ReactNode;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
interface ConnectionProps {
|
|
53
|
+
/** Service name, e.g. "Gmail". */
|
|
54
|
+
name: ReactNode;
|
|
55
|
+
/** Logo / icon shown left of the name (a brand mark, lucide icon, …). */
|
|
56
|
+
logo?: ReactNode;
|
|
57
|
+
/** Status — drives the badge. Defaults to "disconnected". */
|
|
58
|
+
status?: ConnectionStatus;
|
|
59
|
+
/** Override the badge text (e.g. "Sign-in required"). */
|
|
60
|
+
statusLabel?: ReactNode;
|
|
61
|
+
/** Secondary line — e.g. "you@example.com · last synced 2h ago". */
|
|
62
|
+
meta?: ReactNode;
|
|
63
|
+
/** Help / description text under the header. */
|
|
64
|
+
description?: ReactNode;
|
|
65
|
+
/**
|
|
66
|
+
* The one visible row action, normally Connect. Connection owns its
|
|
67
|
+
* placement and sizing so every integration uses the same action pattern.
|
|
68
|
+
*/
|
|
69
|
+
primaryAction?: ConnectionPrimaryAction;
|
|
70
|
+
/**
|
|
71
|
+
* Optional supporting content. Primary Connect and Settings controls belong
|
|
72
|
+
* in `primaryAction` and `actions`; do not recreate them here.
|
|
73
|
+
*/
|
|
74
|
+
children?: ReactNode;
|
|
75
|
+
/**
|
|
76
|
+
* Management actions (Sync, Re-sync, Disconnect, …) collapsed into the
|
|
77
|
+
* visible Settings menu on the right of the row. Mark Disconnect with
|
|
78
|
+
* `{ destructive: true, confirm: { … } }` for the standard guarded treatment.
|
|
79
|
+
*/
|
|
80
|
+
actions?: ConnectionAction[];
|
|
81
|
+
/** Error — rendered as a destructive Alert under the row. */
|
|
82
|
+
error?: ReactNode;
|
|
83
|
+
className?: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Connection — one external service in a settings/onboarding connections list.
|
|
87
|
+
*
|
|
88
|
+
* Handles every state from one shape: **disconnected** (a visible Connect
|
|
89
|
+
* action), **connected** (status + meta + a Settings menu of management
|
|
90
|
+
* `actions`), **syncing**, and **error** (a destructive Alert).
|
|
91
|
+
* Local config — logo, name, description, status label — is all per-connection
|
|
92
|
+
* props, so the same primitive serves Gmail, Outlook, an API-key integration,
|
|
93
|
+
* anything. Stack several inside `<ConnectionList>`.
|
|
94
|
+
*
|
|
95
|
+
* ```tsx
|
|
96
|
+
* <Connection
|
|
97
|
+
* name="Gmail"
|
|
98
|
+
* logo={<Mail className="h-5 w-5" />}
|
|
99
|
+
* status="connected"
|
|
100
|
+
* meta="you@example.com · last synced 2h ago"
|
|
101
|
+
* primaryAction={{ label: "Connect", onClick: connect }}
|
|
102
|
+
* actions={[
|
|
103
|
+
* { label: "Sync now", onClick: sync },
|
|
104
|
+
* {
|
|
105
|
+
* label: "Disconnect",
|
|
106
|
+
* onClick: disconnect,
|
|
107
|
+
* destructive: true,
|
|
108
|
+
* confirm: {
|
|
109
|
+
* title: "Disconnect Gmail?",
|
|
110
|
+
* description: "Syncing stops. You can reconnect anytime.",
|
|
111
|
+
* confirmLabel: "Disconnect",
|
|
112
|
+
* },
|
|
113
|
+
* },
|
|
114
|
+
* ]}
|
|
115
|
+
* />
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
declare function Connection({ name, logo, status, statusLabel, meta, description, primaryAction, children, actions, error, className, }: ConnectionProps): react_jsx_runtime.JSX.Element;
|
|
119
|
+
interface ConnectionListProps {
|
|
120
|
+
children: ReactNode;
|
|
121
|
+
className?: string;
|
|
122
|
+
}
|
|
123
|
+
/** A divided stack of `<Connection>`s. */
|
|
124
|
+
declare function ConnectionList({ children, className }: ConnectionListProps): react_jsx_runtime.JSX.Element;
|
|
125
|
+
|
|
126
|
+
export { Connection, type ConnectionAction, ConnectionList, type ConnectionListProps, type ConnectionPrimaryAction, type ConnectionProps, type ConnectionStatus };
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
StatusBadge
|
|
4
|
+
} from "../chunk-GMJWBGTJ.js";
|
|
5
|
+
import {
|
|
6
|
+
PageHeaderActions
|
|
7
|
+
} from "../chunk-QNZYQLNP.js";
|
|
8
|
+
import {
|
|
9
|
+
Dialog,
|
|
10
|
+
DialogContent,
|
|
11
|
+
DialogDescription,
|
|
12
|
+
DialogHeader,
|
|
13
|
+
DialogTitle
|
|
14
|
+
} from "../chunk-3QT5VYZ3.js";
|
|
15
|
+
import "../chunk-V4LE2HWP.js";
|
|
16
|
+
import {
|
|
17
|
+
Text
|
|
18
|
+
} from "../chunk-EIY5LLSP.js";
|
|
19
|
+
import {
|
|
20
|
+
Callout
|
|
21
|
+
} from "../chunk-GL5CV4FF.js";
|
|
22
|
+
import "../chunk-D4ZL2OEQ.js";
|
|
23
|
+
import {
|
|
24
|
+
Alert,
|
|
25
|
+
AlertDescription
|
|
26
|
+
} from "../chunk-R4AIM3BQ.js";
|
|
27
|
+
import {
|
|
28
|
+
AlertDialog,
|
|
29
|
+
AlertDialogAction,
|
|
30
|
+
AlertDialogCancel,
|
|
31
|
+
AlertDialogContent,
|
|
32
|
+
AlertDialogDescription,
|
|
33
|
+
AlertDialogFooter,
|
|
34
|
+
AlertDialogHeader,
|
|
35
|
+
AlertDialogTitle
|
|
36
|
+
} from "../chunk-FLPYZNWZ.js";
|
|
37
|
+
import {
|
|
38
|
+
buttonVariants
|
|
39
|
+
} from "../chunk-HQRWRRZJ.js";
|
|
40
|
+
import {
|
|
41
|
+
cn
|
|
42
|
+
} from "../chunk-G6SRSWXB.js";
|
|
43
|
+
|
|
44
|
+
// src/primitives/connection.tsx
|
|
45
|
+
import { useState } from "react";
|
|
46
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
47
|
+
var STATUS = {
|
|
48
|
+
connected: { label: "Connected", tone: "success" },
|
|
49
|
+
syncing: { label: "Syncing", tone: "info" },
|
|
50
|
+
error: { label: "Error", tone: "error" },
|
|
51
|
+
disconnected: { label: "Not connected", tone: "neutral" }
|
|
52
|
+
};
|
|
53
|
+
function Connection({
|
|
54
|
+
name,
|
|
55
|
+
logo,
|
|
56
|
+
status = "disconnected",
|
|
57
|
+
statusLabel,
|
|
58
|
+
meta,
|
|
59
|
+
description,
|
|
60
|
+
primaryAction,
|
|
61
|
+
children,
|
|
62
|
+
actions,
|
|
63
|
+
error,
|
|
64
|
+
className
|
|
65
|
+
}) {
|
|
66
|
+
const [primaryDialogOpen, setPrimaryDialogOpen] = useState(false);
|
|
67
|
+
const [confirmIdx, setConfirmIdx] = useState(null);
|
|
68
|
+
const [formIdx, setFormIdx] = useState(null);
|
|
69
|
+
const s = STATUS[status];
|
|
70
|
+
const hasActions = Boolean(actions && actions.length > 0);
|
|
71
|
+
const confirming = confirmIdx == null ? null : actions?.[confirmIdx];
|
|
72
|
+
const formAction = formIdx == null ? null : actions?.[formIdx];
|
|
73
|
+
const confirmation = confirming?.confirm;
|
|
74
|
+
const formDialog = formAction?.dialog;
|
|
75
|
+
const responsiveActions = [
|
|
76
|
+
...primaryAction ? [
|
|
77
|
+
{
|
|
78
|
+
id: "connection-primary",
|
|
79
|
+
label: primaryAction.label,
|
|
80
|
+
variant: "default",
|
|
81
|
+
priority: "primary",
|
|
82
|
+
disabled: primaryAction.disabled,
|
|
83
|
+
onSelect: () => {
|
|
84
|
+
if (primaryAction.dialog) setPrimaryDialogOpen(true);
|
|
85
|
+
else primaryAction.onClick?.();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
] : [],
|
|
89
|
+
...hasActions ? [
|
|
90
|
+
{
|
|
91
|
+
id: "connection-settings",
|
|
92
|
+
label: "Settings",
|
|
93
|
+
variant: "outline",
|
|
94
|
+
priority: "secondary",
|
|
95
|
+
items: actions.map((action, index) => ({
|
|
96
|
+
id: `connection-setting-${index}`,
|
|
97
|
+
label: action.label,
|
|
98
|
+
icon: action.icon,
|
|
99
|
+
description: action.description,
|
|
100
|
+
disabled: action.disabled,
|
|
101
|
+
tone: action.destructive ? "destructive" : "default",
|
|
102
|
+
separatorBefore: index > 0,
|
|
103
|
+
onSelect: () => {
|
|
104
|
+
if (action.dialog) setFormIdx(index);
|
|
105
|
+
else if (action.confirm) setConfirmIdx(index);
|
|
106
|
+
else action.onClick?.();
|
|
107
|
+
}
|
|
108
|
+
}))
|
|
109
|
+
}
|
|
110
|
+
] : []
|
|
111
|
+
];
|
|
112
|
+
const hasSecondary = Boolean(meta || description || children || error);
|
|
113
|
+
return /* @__PURE__ */ jsxs(
|
|
114
|
+
"div",
|
|
115
|
+
{
|
|
116
|
+
"data-slot": "connection",
|
|
117
|
+
className: cn(
|
|
118
|
+
"flex flex-col gap-3 py-4 first:pt-0 last:pb-0 sm:flex-row sm:items-start",
|
|
119
|
+
className
|
|
120
|
+
),
|
|
121
|
+
children: [
|
|
122
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
|
|
123
|
+
logo && /* @__PURE__ */ jsx("span", { className: "flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded-md border border-border bg-background text-muted-foreground", children: logo }),
|
|
124
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
125
|
+
/* @__PURE__ */ jsx("div", { className: "truncate text-base font-medium text-foreground", children: name }),
|
|
126
|
+
hasSecondary && /* @__PURE__ */ jsxs("div", { className: "mt-0.5 flex flex-col gap-2", children: [
|
|
127
|
+
description && /* @__PURE__ */ jsx(Text, { variant: "small", className: "text-muted-foreground", children: description }),
|
|
128
|
+
meta && /* @__PURE__ */ jsx(Text, { variant: "small", className: "truncate text-muted-foreground", children: meta }),
|
|
129
|
+
children && /* @__PURE__ */ jsx(Callout, { padding: "sm", className: "mt-1 flex flex-col gap-2", children }),
|
|
130
|
+
error && /* @__PURE__ */ jsx(Alert, { variant: "destructive", className: "mt-1", children: /* @__PURE__ */ jsx(AlertDescription, { children: error }) })
|
|
131
|
+
] })
|
|
132
|
+
] })
|
|
133
|
+
] }),
|
|
134
|
+
/* @__PURE__ */ jsxs(
|
|
135
|
+
"div",
|
|
136
|
+
{
|
|
137
|
+
"data-slot": "connection-controls",
|
|
138
|
+
className: cn(
|
|
139
|
+
"flex w-full shrink-0 items-center justify-between gap-2 sm:w-auto sm:justify-end",
|
|
140
|
+
logo && "pl-12 sm:pl-0"
|
|
141
|
+
),
|
|
142
|
+
children: [
|
|
143
|
+
/* @__PURE__ */ jsx(StatusBadge, { tone: s.tone, children: statusLabel ?? s.label }),
|
|
144
|
+
responsiveActions.length > 0 && /* @__PURE__ */ jsx(PageHeaderActions, { actions: responsiveActions, mobileLabel: "Actions" })
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
),
|
|
148
|
+
primaryAction?.dialog && /* @__PURE__ */ jsx(Dialog, { open: primaryDialogOpen, onOpenChange: setPrimaryDialogOpen, children: /* @__PURE__ */ jsxs(DialogContent, { children: [
|
|
149
|
+
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
150
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: primaryAction.dialog.title ?? primaryAction.label }),
|
|
151
|
+
primaryAction.dialog.description && /* @__PURE__ */ jsx(DialogDescription, { children: primaryAction.dialog.description })
|
|
152
|
+
] }),
|
|
153
|
+
primaryAction.dialog.content(() => setPrimaryDialogOpen(false))
|
|
154
|
+
] }) }),
|
|
155
|
+
/* @__PURE__ */ jsx(
|
|
156
|
+
AlertDialog,
|
|
157
|
+
{
|
|
158
|
+
open: confirming != null,
|
|
159
|
+
onOpenChange: (open) => !open && setConfirmIdx(null),
|
|
160
|
+
children: /* @__PURE__ */ jsxs(AlertDialogContent, { children: [
|
|
161
|
+
/* @__PURE__ */ jsxs(AlertDialogHeader, { children: [
|
|
162
|
+
/* @__PURE__ */ jsx(AlertDialogTitle, { children: confirmation?.title ?? "Are you sure?" }),
|
|
163
|
+
confirmation?.description && /* @__PURE__ */ jsx(AlertDialogDescription, { children: confirmation.description })
|
|
164
|
+
] }),
|
|
165
|
+
/* @__PURE__ */ jsxs(AlertDialogFooter, { children: [
|
|
166
|
+
/* @__PURE__ */ jsx(AlertDialogCancel, { children: confirmation?.cancelLabel ?? "Cancel" }),
|
|
167
|
+
/* @__PURE__ */ jsx(
|
|
168
|
+
AlertDialogAction,
|
|
169
|
+
{
|
|
170
|
+
onClick: () => {
|
|
171
|
+
confirming?.onClick?.();
|
|
172
|
+
setConfirmIdx(null);
|
|
173
|
+
},
|
|
174
|
+
className: confirming?.destructive ? buttonVariants({ variant: "destructive" }) : void 0,
|
|
175
|
+
children: confirmation?.confirmLabel ?? confirming?.label
|
|
176
|
+
}
|
|
177
|
+
)
|
|
178
|
+
] })
|
|
179
|
+
] })
|
|
180
|
+
}
|
|
181
|
+
),
|
|
182
|
+
/* @__PURE__ */ jsx(
|
|
183
|
+
Dialog,
|
|
184
|
+
{
|
|
185
|
+
open: formAction != null,
|
|
186
|
+
onOpenChange: (open) => !open && setFormIdx(null),
|
|
187
|
+
children: /* @__PURE__ */ jsx(DialogContent, { children: formDialog && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
188
|
+
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
189
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: formDialog.title ?? formAction?.label }),
|
|
190
|
+
formDialog.description && /* @__PURE__ */ jsx(DialogDescription, { children: formDialog.description })
|
|
191
|
+
] }),
|
|
192
|
+
formDialog.content(() => setFormIdx(null))
|
|
193
|
+
] }) })
|
|
194
|
+
}
|
|
195
|
+
)
|
|
196
|
+
]
|
|
197
|
+
}
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
function ConnectionList({ children, className }) {
|
|
201
|
+
return /* @__PURE__ */ jsx("div", { className: cn("divide-y divide-border", className), children });
|
|
202
|
+
}
|
|
203
|
+
export {
|
|
204
|
+
Connection,
|
|
205
|
+
ConnectionList
|
|
206
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
|
|
5
|
+
|
|
6
|
+
// src/primitives/contact-header.tsx
|
|
7
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
8
|
+
function ContactHeader({
|
|
9
|
+
avatar,
|
|
10
|
+
name,
|
|
11
|
+
status,
|
|
12
|
+
meta,
|
|
13
|
+
actions,
|
|
14
|
+
onClose,
|
|
15
|
+
closeLabel = "Close",
|
|
16
|
+
className,
|
|
17
|
+
spacing = "default"
|
|
18
|
+
}) {
|
|
19
|
+
const hasTrailing = !!actions || !!onClose;
|
|
20
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "flex items-start gap-4", spacing === "default" && "mb-6", className), children: [
|
|
21
|
+
avatar && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "shrink-0", children: avatar }),
|
|
22
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0 flex-1", children: [
|
|
23
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-start justify-between gap-3", children: [
|
|
24
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h1", { className: "min-w-0 text-xl font-semibold tracking-tight md:text-2xl", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "inline-flex min-w-0 max-w-full items-center gap-2", children: [
|
|
25
|
+
name,
|
|
26
|
+
status
|
|
27
|
+
] }) }),
|
|
28
|
+
hasTrailing && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex shrink-0 items-center gap-1.5", children: [
|
|
29
|
+
actions,
|
|
30
|
+
onClose && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
31
|
+
"button",
|
|
32
|
+
{
|
|
33
|
+
type: "button",
|
|
34
|
+
onClick: onClose,
|
|
35
|
+
"aria-label": closeLabel,
|
|
36
|
+
className: "inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
|
|
37
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
38
|
+
"svg",
|
|
39
|
+
{
|
|
40
|
+
viewBox: "0 0 24 24",
|
|
41
|
+
fill: "none",
|
|
42
|
+
stroke: "currentColor",
|
|
43
|
+
strokeWidth: "2",
|
|
44
|
+
strokeLinecap: "round",
|
|
45
|
+
className: "h-4 w-4",
|
|
46
|
+
"aria-hidden": true,
|
|
47
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { d: "M18 6 6 18M6 6l12 12" })
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
] })
|
|
53
|
+
] }),
|
|
54
|
+
meta && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-1.5 flex flex-wrap items-center gap-1.5", children: meta })
|
|
55
|
+
] })
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
exports.ContactHeader = ContactHeader;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface ContactHeaderProps {
|
|
5
|
+
/** Avatar or avatar uploader. Sized by the caller; 44–48px reads best. */
|
|
6
|
+
avatar?: ReactNode;
|
|
7
|
+
/** The person's name — plain text, or an inline editor. */
|
|
8
|
+
name: ReactNode;
|
|
9
|
+
/**
|
|
10
|
+
* A marker that belongs ON the name line: an unread dot, a "needs contact"
|
|
11
|
+
* indicator, a verification tick. Kept out of `meta` so it can't be pushed
|
|
12
|
+
* onto the second line when the chips wrap.
|
|
13
|
+
*/
|
|
14
|
+
status?: ReactNode;
|
|
15
|
+
/**
|
|
16
|
+
* Secondary identity under the name — role and company, typically as chips
|
|
17
|
+
* or inline editors. Wraps freely.
|
|
18
|
+
*/
|
|
19
|
+
meta?: ReactNode;
|
|
20
|
+
/** Reach-out controls. Sits on the name line, right-aligned. */
|
|
21
|
+
actions?: ReactNode;
|
|
22
|
+
/** Renders a close control alongside the actions. Omit outside a panel. */
|
|
23
|
+
onClose?: () => void;
|
|
24
|
+
closeLabel?: string;
|
|
25
|
+
className?: string;
|
|
26
|
+
spacing?: "none" | "default";
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The identity block at the top of a contact view — avatar, name, role and
|
|
30
|
+
* company, and the ways to reach them.
|
|
31
|
+
*
|
|
32
|
+
* Exists because composing this from a page header goes subtly wrong. A page
|
|
33
|
+
* header IS a row: title left, actions right, `justify-between` between them. Put it
|
|
34
|
+
* in a column beside an avatar and that row collapses to the column's width,
|
|
35
|
+
* so the actions have nowhere to go but underneath — a third stacked band with
|
|
36
|
+
* a lone icon in it, and a wide empty gutter to the right of the name. Its
|
|
37
|
+
* page-level `text-3xl` and `mb-6` are tuned for a route heading, not for
|
|
38
|
+
* sitting next to a 44px avatar.
|
|
39
|
+
*
|
|
40
|
+
* So this owns the whole composition instead:
|
|
41
|
+
* - one row: avatar, then a column of (name + actions) over (meta)
|
|
42
|
+
* - the actions share the name's line, which is what closes the gutter and
|
|
43
|
+
* removes the orphaned band
|
|
44
|
+
* - the close control joins the actions, so there's a single right-hand
|
|
45
|
+
* cluster rather than a × floating in the corner
|
|
46
|
+
* - the name steps down to text-xl/2xl — a contact is the subject of a
|
|
47
|
+
* panel, not the title of a page
|
|
48
|
+
*
|
|
49
|
+
* Every slot is a ReactNode, so the same header serves a read-only card and a
|
|
50
|
+
* fully editable detail view without knowing which it is.
|
|
51
|
+
*/
|
|
52
|
+
declare function ContactHeader({ avatar, name, status, meta, actions, onClose, closeLabel, className, spacing, }: ContactHeaderProps): react_jsx_runtime.JSX.Element;
|
|
53
|
+
|
|
54
|
+
export { ContactHeader, type ContactHeaderProps };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface ContactHeaderProps {
|
|
5
|
+
/** Avatar or avatar uploader. Sized by the caller; 44–48px reads best. */
|
|
6
|
+
avatar?: ReactNode;
|
|
7
|
+
/** The person's name — plain text, or an inline editor. */
|
|
8
|
+
name: ReactNode;
|
|
9
|
+
/**
|
|
10
|
+
* A marker that belongs ON the name line: an unread dot, a "needs contact"
|
|
11
|
+
* indicator, a verification tick. Kept out of `meta` so it can't be pushed
|
|
12
|
+
* onto the second line when the chips wrap.
|
|
13
|
+
*/
|
|
14
|
+
status?: ReactNode;
|
|
15
|
+
/**
|
|
16
|
+
* Secondary identity under the name — role and company, typically as chips
|
|
17
|
+
* or inline editors. Wraps freely.
|
|
18
|
+
*/
|
|
19
|
+
meta?: ReactNode;
|
|
20
|
+
/** Reach-out controls. Sits on the name line, right-aligned. */
|
|
21
|
+
actions?: ReactNode;
|
|
22
|
+
/** Renders a close control alongside the actions. Omit outside a panel. */
|
|
23
|
+
onClose?: () => void;
|
|
24
|
+
closeLabel?: string;
|
|
25
|
+
className?: string;
|
|
26
|
+
spacing?: "none" | "default";
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The identity block at the top of a contact view — avatar, name, role and
|
|
30
|
+
* company, and the ways to reach them.
|
|
31
|
+
*
|
|
32
|
+
* Exists because composing this from a page header goes subtly wrong. A page
|
|
33
|
+
* header IS a row: title left, actions right, `justify-between` between them. Put it
|
|
34
|
+
* in a column beside an avatar and that row collapses to the column's width,
|
|
35
|
+
* so the actions have nowhere to go but underneath — a third stacked band with
|
|
36
|
+
* a lone icon in it, and a wide empty gutter to the right of the name. Its
|
|
37
|
+
* page-level `text-3xl` and `mb-6` are tuned for a route heading, not for
|
|
38
|
+
* sitting next to a 44px avatar.
|
|
39
|
+
*
|
|
40
|
+
* So this owns the whole composition instead:
|
|
41
|
+
* - one row: avatar, then a column of (name + actions) over (meta)
|
|
42
|
+
* - the actions share the name's line, which is what closes the gutter and
|
|
43
|
+
* removes the orphaned band
|
|
44
|
+
* - the close control joins the actions, so there's a single right-hand
|
|
45
|
+
* cluster rather than a × floating in the corner
|
|
46
|
+
* - the name steps down to text-xl/2xl — a contact is the subject of a
|
|
47
|
+
* panel, not the title of a page
|
|
48
|
+
*
|
|
49
|
+
* Every slot is a ReactNode, so the same header serves a read-only card and a
|
|
50
|
+
* fully editable detail view without knowing which it is.
|
|
51
|
+
*/
|
|
52
|
+
declare function ContactHeader({ avatar, name, status, meta, actions, onClose, closeLabel, className, spacing, }: ContactHeaderProps): react_jsx_runtime.JSX.Element;
|
|
53
|
+
|
|
54
|
+
export { ContactHeader, type ContactHeaderProps };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
cn
|
|
4
|
+
} from "../chunk-G6SRSWXB.js";
|
|
5
|
+
|
|
6
|
+
// src/primitives/contact-header.tsx
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
function ContactHeader({
|
|
9
|
+
avatar,
|
|
10
|
+
name,
|
|
11
|
+
status,
|
|
12
|
+
meta,
|
|
13
|
+
actions,
|
|
14
|
+
onClose,
|
|
15
|
+
closeLabel = "Close",
|
|
16
|
+
className,
|
|
17
|
+
spacing = "default"
|
|
18
|
+
}) {
|
|
19
|
+
const hasTrailing = !!actions || !!onClose;
|
|
20
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex items-start gap-4", spacing === "default" && "mb-6", className), children: [
|
|
21
|
+
avatar && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: avatar }),
|
|
22
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
23
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
|
|
24
|
+
/* @__PURE__ */ jsx("h1", { className: "min-w-0 text-xl font-semibold tracking-tight md:text-2xl", children: /* @__PURE__ */ jsxs("span", { className: "inline-flex min-w-0 max-w-full items-center gap-2", children: [
|
|
25
|
+
name,
|
|
26
|
+
status
|
|
27
|
+
] }) }),
|
|
28
|
+
hasTrailing && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [
|
|
29
|
+
actions,
|
|
30
|
+
onClose && /* @__PURE__ */ jsx(
|
|
31
|
+
"button",
|
|
32
|
+
{
|
|
33
|
+
type: "button",
|
|
34
|
+
onClick: onClose,
|
|
35
|
+
"aria-label": closeLabel,
|
|
36
|
+
className: "inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
|
|
37
|
+
children: /* @__PURE__ */ jsx(
|
|
38
|
+
"svg",
|
|
39
|
+
{
|
|
40
|
+
viewBox: "0 0 24 24",
|
|
41
|
+
fill: "none",
|
|
42
|
+
stroke: "currentColor",
|
|
43
|
+
strokeWidth: "2",
|
|
44
|
+
strokeLinecap: "round",
|
|
45
|
+
className: "h-4 w-4",
|
|
46
|
+
"aria-hidden": true,
|
|
47
|
+
children: /* @__PURE__ */ jsx("path", { d: "M18 6 6 18M6 6l12 12" })
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
] })
|
|
53
|
+
] }),
|
|
54
|
+
meta && /* @__PURE__ */ jsx("div", { className: "mt-1.5 flex flex-wrap items-center gap-1.5", children: meta })
|
|
55
|
+
] })
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
ContactHeader
|
|
60
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkVKIGJNJRcjs = require('../chunk-VKIGJNJR.cjs');
|
|
5
|
+
require('../chunk-L4DH72UF.cjs');
|
|
6
|
+
require('../chunk-4LXN6GLZ.cjs');
|
|
7
|
+
require('../chunk-KWLSBTB2.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.CopyButton = _chunkVKIGJNJRcjs.CopyButton;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { ButtonProps } from './button.cjs';
|
|
4
|
+
import 'class-variance-authority/types';
|
|
5
|
+
import 'class-variance-authority';
|
|
6
|
+
|
|
7
|
+
interface CopyButtonProps extends Omit<ButtonProps, "onClick" | "children"> {
|
|
8
|
+
/** The text to copy when clicked. */
|
|
9
|
+
text: string;
|
|
10
|
+
/** Optional label shown next to the icon. Omit for an icon-only button. */
|
|
11
|
+
label?: ReactNode;
|
|
12
|
+
/** Label shown after a successful copy. Defaults to `label`. */
|
|
13
|
+
copiedLabel?: ReactNode;
|
|
14
|
+
/** ms before the success state reverts. Defaults to 2000. */
|
|
15
|
+
resetAfter?: number;
|
|
16
|
+
/** Fired after `navigator.clipboard.writeText` resolves with success/failure. */
|
|
17
|
+
onCopied?: (success: boolean) => void;
|
|
18
|
+
}
|
|
19
|
+
declare const CopyButton: React.ForwardRefExoticComponent<CopyButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
20
|
+
|
|
21
|
+
export { CopyButton, type CopyButtonProps };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { ButtonProps } from './button.js';
|
|
4
|
+
import 'class-variance-authority/types';
|
|
5
|
+
import 'class-variance-authority';
|
|
6
|
+
|
|
7
|
+
interface CopyButtonProps extends Omit<ButtonProps, "onClick" | "children"> {
|
|
8
|
+
/** The text to copy when clicked. */
|
|
9
|
+
text: string;
|
|
10
|
+
/** Optional label shown next to the icon. Omit for an icon-only button. */
|
|
11
|
+
label?: ReactNode;
|
|
12
|
+
/** Label shown after a successful copy. Defaults to `label`. */
|
|
13
|
+
copiedLabel?: ReactNode;
|
|
14
|
+
/** ms before the success state reverts. Defaults to 2000. */
|
|
15
|
+
resetAfter?: number;
|
|
16
|
+
/** Fired after `navigator.clipboard.writeText` resolves with success/failure. */
|
|
17
|
+
onCopied?: (success: boolean) => void;
|
|
18
|
+
}
|
|
19
|
+
declare const CopyButton: React.ForwardRefExoticComponent<CopyButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
20
|
+
|
|
21
|
+
export { CopyButton, type CopyButtonProps };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkVGTINL5Qcjs = require('../chunk-VGTINL5Q.cjs');
|
|
5
|
+
require('../chunk-I6GUOEBO.cjs');
|
|
6
|
+
require('../chunk-KWLSBTB2.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.CountBadge = _chunkVGTINL5Qcjs.CountBadge;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { BadgeProps } from './badge.cjs';
|
|
3
|
+
import 'class-variance-authority/types';
|
|
4
|
+
import 'class-variance-authority';
|
|
5
|
+
import 'react';
|
|
6
|
+
|
|
7
|
+
interface CountBadgeProps extends Omit<BadgeProps, "as" | "children" | "size" | "shrink"> {
|
|
8
|
+
/** Theme colour. Defaults to destructive; use secondary for neutral totals. */
|
|
9
|
+
variant?: BadgeProps["variant"];
|
|
10
|
+
/** Number or compact count label, for example `12`, `9+`, or `…`. */
|
|
11
|
+
value: number | string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Compact numeric status badge with stable geometry.
|
|
15
|
+
*
|
|
16
|
+
* A single character is a true 20px circle. Longer values grow horizontally
|
|
17
|
+
* while retaining a 20px height, centred text, and tabular numerals.
|
|
18
|
+
*/
|
|
19
|
+
declare function CountBadge({ value, variant, className, ...props }: CountBadgeProps): react_jsx_runtime.JSX.Element;
|
|
20
|
+
|
|
21
|
+
export { CountBadge, type CountBadgeProps };
|