@epicbagel/saas-kit 0.0.0-stage → 1.1.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 +108 -2
- package/THIRD_PARTY_NOTICES.md +53 -0
- package/dist/chunk-23UMHZ4S.cjs +124 -0
- package/dist/chunk-2AU7ZRGX.cjs +96 -0
- package/dist/chunk-2BHI5ZWJ.cjs +117 -0
- package/dist/chunk-2BTDBZYN.cjs +154 -0
- package/dist/chunk-2HTYXBDU.cjs +34 -0
- package/dist/chunk-2HV2KKOE.cjs +38 -0
- package/dist/chunk-2KFZQJH5.cjs +29 -0
- package/dist/chunk-2XDFTB2W.cjs +35 -0
- package/dist/chunk-32Q4XOTU.cjs +204 -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-42RTTHND.js +29 -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-6FC65AZQ.js +38 -0
- package/dist/chunk-6RVPQGYS.js +181 -0
- package/dist/chunk-6T2EULKN.cjs +42 -0
- package/dist/chunk-6V4XMQ6D.js +118 -0
- package/dist/chunk-7CRDYV3C.js +137 -0
- package/dist/chunk-B765DSRG.cjs +66 -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-ELPV44S6.cjs +44 -0
- package/dist/chunk-EOUO3ORO.cjs +244 -0
- package/dist/chunk-EZCKWTH7.js +204 -0
- package/dist/chunk-F366BHWH.js +116 -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-GFG2R5BZ.js +132 -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-HAC32ALJ.js +244 -0
- package/dist/chunk-HQRWRRZJ.js +179 -0
- package/dist/chunk-HRLP4BHJ.js +510 -0
- package/dist/chunk-HYSWE75T.js +67 -0
- package/dist/chunk-HYTILYE5.js +31 -0
- package/dist/chunk-I5UQSBBZ.cjs +118 -0
- package/dist/chunk-I6GUOEBO.cjs +61 -0
- package/dist/chunk-IH3COANJ.cjs +510 -0
- package/dist/chunk-INNGGLMZ.js +44 -0
- package/dist/chunk-IQZLUT2Y.cjs +34 -0
- package/dist/chunk-IW4ZIXXG.js +66 -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-JZOBIPFC.js +96 -0
- package/dist/chunk-KENBU3NV.cjs +27 -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-MHYAVXOE.js +159 -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-RIWLAMME.cjs +159 -0
- package/dist/chunk-RRRD5EUI.js +202 -0
- package/dist/chunk-RSFEKQDR.cjs +181 -0
- package/dist/chunk-SGW4FWBX.cjs +411 -0
- package/dist/chunk-SUB4BAYE.cjs +73 -0
- package/dist/chunk-T2ZFSPE4.cjs +36 -0
- package/dist/chunk-THWIJG5C.js +73 -0
- package/dist/chunk-U2NES7VR.cjs +32 -0
- package/dist/chunk-V4LE2HWP.js +166 -0
- package/dist/chunk-V4YWTRLD.cjs +116 -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-VY5U4VGV.js +27 -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-XABXUP6L.cjs +132 -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-Z45YKVAM.js +154 -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/action-dock.cjs +8 -0
- package/dist/primitives/action-dock.d.cts +10 -0
- package/dist/primitives/action-dock.d.ts +10 -0
- package/dist/primitives/action-dock.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 +25 -0
- package/dist/primitives/attachment.d.cts +28 -0
- package/dist/primitives/attachment.d.ts +28 -0
- package/dist/primitives/attachment.js +25 -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/bubble.cjs +14 -0
- package/dist/primitives/bubble.d.cts +21 -0
- package/dist/primitives/bubble.d.ts +21 -0
- package/dist/primitives/bubble.js +14 -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/chat.cjs +864 -0
- package/dist/primitives/chat.d.cts +326 -0
- package/dist/primitives/chat.d.ts +326 -0
- package/dist/primitives/chat.js +864 -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 +12 -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 +12 -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-group.cjs +21 -0
- package/dist/primitives/input-group.d.cts +20 -0
- package/dist/primitives/input-group.d.ts +20 -0
- package/dist/primitives/input-group.js +21 -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/item.cjs +197 -0
- package/dist/primitives/item.d.cts +28 -0
- package/dist/primitives/item.d.ts +28 -0
- package/dist/primitives/item.js +197 -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/lazy-markdown.cjs +10 -0
- package/dist/primitives/lazy-markdown.d.cts +20 -0
- package/dist/primitives/lazy-markdown.d.ts +20 -0
- package/dist/primitives/lazy-markdown.js +10 -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/markdown.cjs +17 -0
- package/dist/primitives/markdown.d.cts +32 -0
- package/dist/primitives/markdown.d.ts +32 -0
- package/dist/primitives/markdown.js +17 -0
- package/dist/primitives/marker.cjs +14 -0
- package/dist/primitives/marker.d.cts +15 -0
- package/dist/primitives/marker.d.ts +15 -0
- package/dist/primitives/marker.js +14 -0
- package/dist/primitives/message-scroller.cjs +26 -0
- package/dist/primitives/message-scroller.d.cts +16 -0
- package/dist/primitives/message-scroller.d.ts +16 -0
- package/dist/primitives/message-scroller.js +26 -0
- package/dist/primitives/message.cjs +18 -0
- package/dist/primitives/message.d.cts +13 -0
- package/dist/primitives/message.d.ts +13 -0
- package/dist/primitives/message.js +18 -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 +8 -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 +8 -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/spinner.cjs +23 -0
- package/dist/primitives/spinner.d.cts +6 -0
- package/dist/primitives/spinner.d.ts +6 -0
- package/dist/primitives/spinner.js +23 -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/suggestion.cjs +11 -0
- package/dist/primitives/suggestion.d.cts +19 -0
- package/dist/primitives/suggestion.d.ts +19 -0
- package/dist/primitives/suggestion.js +11 -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 +8 -0
- package/dist/primitives/textarea.d.cts +12 -0
- package/dist/primitives/textarea.d.ts +12 -0
- package/dist/primitives/textarea.js +8 -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/trace.cjs +23 -0
- package/dist/primitives/trace.d.cts +22 -0
- package/dist/primitives/trace.d.ts +22 -0
- package/dist/primitives/trace.js +23 -0
- package/dist/primitives/voice-dictation-button.cjs +10 -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 +10 -0
- package/package.json +1366 -3
- package/src/styles/components/attachment.css +61 -0
- package/src/styles/components/bubble.css +81 -0
- package/src/styles/components/marker.css +27 -0
- package/src/styles/components/message-scroller.css +11 -0
- package/src/styles/components/message.css +29 -0
- package/src/styles/components.css +6 -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 +10 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunk6T2EULKNcjs = require('../chunk-6T2EULKN.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunk373W6VADcjs = require('../chunk-373W6VAD.cjs');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
var _chunkW5HPHEE7cjs = require('../chunk-W5HPHEE7.cjs');
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
var _chunkWABCLRBRcjs = require('../chunk-WABCLRBR.cjs');
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
var _chunkVBPPFC7Xcjs = require('../chunk-VBPPFC7X.cjs');
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
|
|
25
|
+
|
|
26
|
+
// src/primitives/call-card.tsx
|
|
27
|
+
var _react = require('react');
|
|
28
|
+
var _lucidereact = require('lucide-react');
|
|
29
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
30
|
+
var CallCard = _react.forwardRef.call(void 0,
|
|
31
|
+
function CallCard2({
|
|
32
|
+
title,
|
|
33
|
+
source,
|
|
34
|
+
timestamp,
|
|
35
|
+
duration,
|
|
36
|
+
participants,
|
|
37
|
+
summary,
|
|
38
|
+
summaryClampLines = 4,
|
|
39
|
+
segments,
|
|
40
|
+
transcript,
|
|
41
|
+
headerAside,
|
|
42
|
+
actions,
|
|
43
|
+
transcriptLabel = "Show transcript",
|
|
44
|
+
defaultTranscriptOpen = false,
|
|
45
|
+
transcriptOpen,
|
|
46
|
+
onTranscriptOpenChange,
|
|
47
|
+
onLoadTranscript,
|
|
48
|
+
loading = false,
|
|
49
|
+
className
|
|
50
|
+
}, ref) {
|
|
51
|
+
const [internalOpen, setInternalOpen] = _react.useState.call(void 0, defaultTranscriptOpen);
|
|
52
|
+
const [loadedOnce, setLoadedOnce] = _react.useState.call(void 0, defaultTranscriptOpen);
|
|
53
|
+
const open = _nullishCoalesce(transcriptOpen, () => ( internalOpen));
|
|
54
|
+
const summaryRef = _react.useRef.call(void 0, null);
|
|
55
|
+
const [summaryExpanded, setSummaryExpanded] = _react.useState.call(void 0, false);
|
|
56
|
+
const [summaryOverflows, setSummaryOverflows] = _react.useState.call(void 0, false);
|
|
57
|
+
_react.useEffect.call(void 0, () => {
|
|
58
|
+
const el = summaryRef.current;
|
|
59
|
+
if (el) setSummaryOverflows(el.scrollHeight - el.clientHeight > 4);
|
|
60
|
+
}, [summary]);
|
|
61
|
+
function handleOpenChange(next) {
|
|
62
|
+
if (next && !loadedOnce) {
|
|
63
|
+
setLoadedOnce(true);
|
|
64
|
+
_optionalChain([onLoadTranscript, 'optionalCall', _ => _()]);
|
|
65
|
+
}
|
|
66
|
+
if (transcriptOpen === void 0) setInternalOpen(next);
|
|
67
|
+
_optionalChain([onTranscriptOpenChange, 'optionalCall', _2 => _2(next)]);
|
|
68
|
+
}
|
|
69
|
+
const meta = [timestamp, source, duration].filter(Boolean);
|
|
70
|
+
const hasTranscript = segments && segments.length > 0 || transcript != null;
|
|
71
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
72
|
+
"div",
|
|
73
|
+
{
|
|
74
|
+
ref,
|
|
75
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
76
|
+
"overflow-hidden rounded-xl border border-border bg-card text-card-foreground",
|
|
77
|
+
className
|
|
78
|
+
),
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-start gap-3 p-4 md:p-5", children: [
|
|
81
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
82
|
+
"span",
|
|
83
|
+
{
|
|
84
|
+
className: "grid h-9 w-9 shrink-0 place-items-center rounded-full bg-muted text-muted-foreground",
|
|
85
|
+
"aria-hidden": true,
|
|
86
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.PhoneCall, { className: "h-4 w-4" })
|
|
87
|
+
}
|
|
88
|
+
),
|
|
89
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0 flex-1", children: [
|
|
90
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-start justify-between gap-2", children: [
|
|
91
|
+
loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBPPFC7Xcjs.Skeleton, { className: "h-4 w-40" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "min-w-0 flex-1 truncate text-sm font-semibold leading-tight", children: _nullishCoalesce(title, () => ( "Untitled call")) }),
|
|
92
|
+
headerAside && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "-mt-1 shrink-0", children: headerAside })
|
|
93
|
+
] }),
|
|
94
|
+
meta.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "mt-1 truncate text-xs text-muted-foreground", children: meta.map((m, i) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
|
|
95
|
+
i > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "px-1.5 opacity-50", children: "\xB7" }),
|
|
96
|
+
m
|
|
97
|
+
] }, i)) })
|
|
98
|
+
] })
|
|
99
|
+
] }),
|
|
100
|
+
participants && participants.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap gap-x-5 gap-y-3 border-t border-border px-4 py-3 md:px-5", children: participants.map((p, i) => {
|
|
101
|
+
const label = p.name || p.email || "Unknown";
|
|
102
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
103
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWABCLRBRcjs.Avatar, { className: "h-7 w-7 text-[10px]", children: [
|
|
104
|
+
p.avatarUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWABCLRBRcjs.AvatarImage, { src: p.avatarUrl, alt: label }) : null,
|
|
105
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWABCLRBRcjs.AvatarFallback, { children: initials(label) })
|
|
106
|
+
] }),
|
|
107
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0 leading-tight", children: [
|
|
108
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-sm font-medium", children: label }),
|
|
109
|
+
p.email && p.name && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "truncate text-xs text-muted-foreground", children: p.email })
|
|
110
|
+
] })
|
|
111
|
+
] }, i);
|
|
112
|
+
}) }),
|
|
113
|
+
(summary || loading && !title) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "border-t border-border px-4 py-3 md:px-5", children: [
|
|
114
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6T2EULKNcjs.Eyebrow, { className: "mb-1.5", children: "Summary" }),
|
|
115
|
+
loading ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-1.5", children: [
|
|
116
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBPPFC7Xcjs.Skeleton, { className: "h-3 w-full" }),
|
|
117
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBPPFC7Xcjs.Skeleton, { className: "h-3 w-4/5" })
|
|
118
|
+
] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
119
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
120
|
+
"div",
|
|
121
|
+
{
|
|
122
|
+
ref: summaryRef,
|
|
123
|
+
className: "whitespace-pre-wrap text-sm leading-relaxed text-muted-foreground",
|
|
124
|
+
style: summaryExpanded ? void 0 : {
|
|
125
|
+
display: "-webkit-box",
|
|
126
|
+
WebkitLineClamp: summaryClampLines,
|
|
127
|
+
WebkitBoxOrient: "vertical",
|
|
128
|
+
overflow: "hidden"
|
|
129
|
+
},
|
|
130
|
+
children: summary
|
|
131
|
+
}
|
|
132
|
+
),
|
|
133
|
+
summaryOverflows && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
134
|
+
"button",
|
|
135
|
+
{
|
|
136
|
+
type: "button",
|
|
137
|
+
onClick: () => setSummaryExpanded((v) => !v),
|
|
138
|
+
className: "mt-1.5 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",
|
|
139
|
+
children: summaryExpanded ? "Show less" : "Show more"
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
] })
|
|
143
|
+
] }),
|
|
144
|
+
hasTranscript && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
145
|
+
_chunkW5HPHEE7cjs.Collapsible,
|
|
146
|
+
{
|
|
147
|
+
open,
|
|
148
|
+
onOpenChange: handleOpenChange,
|
|
149
|
+
className: "border-t border-border",
|
|
150
|
+
children: [
|
|
151
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkW5HPHEE7cjs.CollapsibleTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
152
|
+
"button",
|
|
153
|
+
{
|
|
154
|
+
type: "button",
|
|
155
|
+
className: "flex w-full items-center gap-1.5 px-4 py-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground md:px-5",
|
|
156
|
+
children: [
|
|
157
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
158
|
+
_lucidereact.ChevronRight,
|
|
159
|
+
{
|
|
160
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
161
|
+
"h-3.5 w-3.5 transition-transform",
|
|
162
|
+
open && "rotate-90"
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
),
|
|
166
|
+
open ? "Hide transcript" : transcriptLabel
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
) }),
|
|
170
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkW5HPHEE7cjs.CollapsibleContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "max-h-80 space-y-3 overflow-y-auto px-4 pb-4 md:px-5", children: segments && segments.length > 0 ? segments.map((s, i) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { children: [
|
|
171
|
+
s.speaker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-xs font-semibold text-foreground", children: s.speaker }),
|
|
172
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "mt-0.5 whitespace-pre-wrap text-sm leading-relaxed text-muted-foreground", children: s.text })
|
|
173
|
+
] }, i)) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
174
|
+
_chunk373W6VADcjs.Text,
|
|
175
|
+
{
|
|
176
|
+
variant: "muted",
|
|
177
|
+
className: "whitespace-pre-wrap text-sm leading-relaxed",
|
|
178
|
+
children: transcript
|
|
179
|
+
}
|
|
180
|
+
) }) })
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
),
|
|
184
|
+
actions && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap items-center justify-end gap-2 border-t border-border bg-muted/30 px-4 py-3 md:px-5", children: actions })
|
|
185
|
+
]
|
|
186
|
+
}
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
);
|
|
190
|
+
function initials(value) {
|
|
191
|
+
return value.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]).join("").toUpperCase();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
exports.CallCard = CallCard;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface CallParticipant {
|
|
5
|
+
/** Display name. Falls back to email when absent. */
|
|
6
|
+
name?: string;
|
|
7
|
+
/** Email, shown muted under the name. */
|
|
8
|
+
email?: string;
|
|
9
|
+
/** Avatar image; initials are used when omitted. */
|
|
10
|
+
avatarUrl?: string | null;
|
|
11
|
+
}
|
|
12
|
+
interface CallSegment {
|
|
13
|
+
/** Who is speaking this turn. */
|
|
14
|
+
speaker: string;
|
|
15
|
+
/** What they said. */
|
|
16
|
+
text: string;
|
|
17
|
+
}
|
|
18
|
+
interface CallCardProps {
|
|
19
|
+
/** Call title, e.g. "Weekly catch up". */
|
|
20
|
+
title?: ReactNode;
|
|
21
|
+
/** Provider label, e.g. "Meeting notes". */
|
|
22
|
+
source?: ReactNode;
|
|
23
|
+
/** Pre-formatted date/time — anything renderable. */
|
|
24
|
+
timestamp?: ReactNode;
|
|
25
|
+
/** Optional duration, e.g. "32 min". */
|
|
26
|
+
duration?: ReactNode;
|
|
27
|
+
/** Who was on the call. Rendered as avatar + name (+ muted email). */
|
|
28
|
+
participants?: CallParticipant[];
|
|
29
|
+
/**
|
|
30
|
+
* Short, human summary — the gist of the call. Kept visually distinct
|
|
31
|
+
* from the transcript (it is NOT a raw transcript snippet). Long summaries
|
|
32
|
+
* (e.g. a notes provider's full write-up) are clamped with a "Show more" toggle.
|
|
33
|
+
*/
|
|
34
|
+
summary?: ReactNode;
|
|
35
|
+
/** Lines of summary shown before the "Show more" clamp. Default 4. */
|
|
36
|
+
summaryClampLines?: number;
|
|
37
|
+
/** Speaker-labelled turns — the formatted transcript. */
|
|
38
|
+
segments?: CallSegment[];
|
|
39
|
+
/** Flat transcript fallback, used when there are no `segments`. */
|
|
40
|
+
transcript?: ReactNode;
|
|
41
|
+
/** Top-right slot — a status Badge or a quiet action (Dismiss / overflow). */
|
|
42
|
+
headerAside?: ReactNode;
|
|
43
|
+
/** Footer action row (Attach, Unlink, …). Right-aligned, on a tinted bar. */
|
|
44
|
+
actions?: ReactNode;
|
|
45
|
+
/** Transcript trigger label when collapsed. Default "Show transcript". */
|
|
46
|
+
transcriptLabel?: string;
|
|
47
|
+
/** Uncontrolled initial open state for the transcript. */
|
|
48
|
+
defaultTranscriptOpen?: boolean;
|
|
49
|
+
/** Controlled transcript open state. */
|
|
50
|
+
transcriptOpen?: boolean;
|
|
51
|
+
onTranscriptOpenChange?: (open: boolean) => void;
|
|
52
|
+
/** Fired the first time the transcript expands — lazy-load the content. */
|
|
53
|
+
onLoadTranscript?: () => void;
|
|
54
|
+
/** Skeleton placeholder while the call loads. */
|
|
55
|
+
loading?: boolean;
|
|
56
|
+
className?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* CallCard — the cross-app representation of a recorded call: a sectioned
|
|
60
|
+
* card with a clear hierarchy of title → who was on it → summary → transcript
|
|
61
|
+
* → actions. Built so every "calls" surface across the product family reads
|
|
62
|
+
* the same, instead of each app re-stacking divs.
|
|
63
|
+
*
|
|
64
|
+
* Why sections (header / participants / summary / transcript / actions) instead
|
|
65
|
+
* of one block: a call answers five questions — what, who, the gist, the detail,
|
|
66
|
+
* and what can I do — and each deserves its own weight. The transcript is lazy
|
|
67
|
+
* (`onLoadTranscript`) because it's often fetched on demand. The summary is a
|
|
68
|
+
* first-class slot, never the raw transcript text.
|
|
69
|
+
*
|
|
70
|
+
* ```tsx
|
|
71
|
+
* <CallCard
|
|
72
|
+
* title="Weekly catch up"
|
|
73
|
+
* source="Meeting notes"
|
|
74
|
+
* timestamp="14 May 2026"
|
|
75
|
+
* participants={[{ name: "Jane Doe", email: "jane@example.com" }]}
|
|
76
|
+
* summary="Agreed next steps and a follow-up date."
|
|
77
|
+
* segments={segments}
|
|
78
|
+
* onLoadTranscript={fetchTranscript}
|
|
79
|
+
* headerAside={<Button variant="ghost" size="sm">Dismiss</Button>}
|
|
80
|
+
* actions={<Button size="sm">Attach</Button>}
|
|
81
|
+
* />
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
declare const CallCard: React.ForwardRefExoticComponent<CallCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
85
|
+
|
|
86
|
+
export { CallCard, type CallCardProps, type CallParticipant, type CallSegment };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface CallParticipant {
|
|
5
|
+
/** Display name. Falls back to email when absent. */
|
|
6
|
+
name?: string;
|
|
7
|
+
/** Email, shown muted under the name. */
|
|
8
|
+
email?: string;
|
|
9
|
+
/** Avatar image; initials are used when omitted. */
|
|
10
|
+
avatarUrl?: string | null;
|
|
11
|
+
}
|
|
12
|
+
interface CallSegment {
|
|
13
|
+
/** Who is speaking this turn. */
|
|
14
|
+
speaker: string;
|
|
15
|
+
/** What they said. */
|
|
16
|
+
text: string;
|
|
17
|
+
}
|
|
18
|
+
interface CallCardProps {
|
|
19
|
+
/** Call title, e.g. "Weekly catch up". */
|
|
20
|
+
title?: ReactNode;
|
|
21
|
+
/** Provider label, e.g. "Meeting notes". */
|
|
22
|
+
source?: ReactNode;
|
|
23
|
+
/** Pre-formatted date/time — anything renderable. */
|
|
24
|
+
timestamp?: ReactNode;
|
|
25
|
+
/** Optional duration, e.g. "32 min". */
|
|
26
|
+
duration?: ReactNode;
|
|
27
|
+
/** Who was on the call. Rendered as avatar + name (+ muted email). */
|
|
28
|
+
participants?: CallParticipant[];
|
|
29
|
+
/**
|
|
30
|
+
* Short, human summary — the gist of the call. Kept visually distinct
|
|
31
|
+
* from the transcript (it is NOT a raw transcript snippet). Long summaries
|
|
32
|
+
* (e.g. a notes provider's full write-up) are clamped with a "Show more" toggle.
|
|
33
|
+
*/
|
|
34
|
+
summary?: ReactNode;
|
|
35
|
+
/** Lines of summary shown before the "Show more" clamp. Default 4. */
|
|
36
|
+
summaryClampLines?: number;
|
|
37
|
+
/** Speaker-labelled turns — the formatted transcript. */
|
|
38
|
+
segments?: CallSegment[];
|
|
39
|
+
/** Flat transcript fallback, used when there are no `segments`. */
|
|
40
|
+
transcript?: ReactNode;
|
|
41
|
+
/** Top-right slot — a status Badge or a quiet action (Dismiss / overflow). */
|
|
42
|
+
headerAside?: ReactNode;
|
|
43
|
+
/** Footer action row (Attach, Unlink, …). Right-aligned, on a tinted bar. */
|
|
44
|
+
actions?: ReactNode;
|
|
45
|
+
/** Transcript trigger label when collapsed. Default "Show transcript". */
|
|
46
|
+
transcriptLabel?: string;
|
|
47
|
+
/** Uncontrolled initial open state for the transcript. */
|
|
48
|
+
defaultTranscriptOpen?: boolean;
|
|
49
|
+
/** Controlled transcript open state. */
|
|
50
|
+
transcriptOpen?: boolean;
|
|
51
|
+
onTranscriptOpenChange?: (open: boolean) => void;
|
|
52
|
+
/** Fired the first time the transcript expands — lazy-load the content. */
|
|
53
|
+
onLoadTranscript?: () => void;
|
|
54
|
+
/** Skeleton placeholder while the call loads. */
|
|
55
|
+
loading?: boolean;
|
|
56
|
+
className?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* CallCard — the cross-app representation of a recorded call: a sectioned
|
|
60
|
+
* card with a clear hierarchy of title → who was on it → summary → transcript
|
|
61
|
+
* → actions. Built so every "calls" surface across the product family reads
|
|
62
|
+
* the same, instead of each app re-stacking divs.
|
|
63
|
+
*
|
|
64
|
+
* Why sections (header / participants / summary / transcript / actions) instead
|
|
65
|
+
* of one block: a call answers five questions — what, who, the gist, the detail,
|
|
66
|
+
* and what can I do — and each deserves its own weight. The transcript is lazy
|
|
67
|
+
* (`onLoadTranscript`) because it's often fetched on demand. The summary is a
|
|
68
|
+
* first-class slot, never the raw transcript text.
|
|
69
|
+
*
|
|
70
|
+
* ```tsx
|
|
71
|
+
* <CallCard
|
|
72
|
+
* title="Weekly catch up"
|
|
73
|
+
* source="Meeting notes"
|
|
74
|
+
* timestamp="14 May 2026"
|
|
75
|
+
* participants={[{ name: "Jane Doe", email: "jane@example.com" }]}
|
|
76
|
+
* summary="Agreed next steps and a follow-up date."
|
|
77
|
+
* segments={segments}
|
|
78
|
+
* onLoadTranscript={fetchTranscript}
|
|
79
|
+
* headerAside={<Button variant="ghost" size="sm">Dismiss</Button>}
|
|
80
|
+
* actions={<Button size="sm">Attach</Button>}
|
|
81
|
+
* />
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
declare const CallCard: React.ForwardRefExoticComponent<CallCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
85
|
+
|
|
86
|
+
export { CallCard, type CallCardProps, type CallParticipant, type CallSegment };
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
import {
|
|
4
|
+
Eyebrow
|
|
5
|
+
} from "../chunk-LIE6W3QT.js";
|
|
6
|
+
import {
|
|
7
|
+
Text
|
|
8
|
+
} from "../chunk-EIY5LLSP.js";
|
|
9
|
+
import {
|
|
10
|
+
Collapsible,
|
|
11
|
+
CollapsibleContent,
|
|
12
|
+
CollapsibleTrigger
|
|
13
|
+
} from "../chunk-NBUWGRQO.js";
|
|
14
|
+
import {
|
|
15
|
+
Avatar,
|
|
16
|
+
AvatarFallback,
|
|
17
|
+
AvatarImage
|
|
18
|
+
} from "../chunk-3OWGL4Q2.js";
|
|
19
|
+
import {
|
|
20
|
+
Skeleton
|
|
21
|
+
} from "../chunk-YEW65ASC.js";
|
|
22
|
+
import {
|
|
23
|
+
cn
|
|
24
|
+
} from "../chunk-G6SRSWXB.js";
|
|
25
|
+
|
|
26
|
+
// src/primitives/call-card.tsx
|
|
27
|
+
import { forwardRef, useEffect, useRef, useState } from "react";
|
|
28
|
+
import { ChevronRight, PhoneCall } from "lucide-react";
|
|
29
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
30
|
+
var CallCard = forwardRef(
|
|
31
|
+
function CallCard2({
|
|
32
|
+
title,
|
|
33
|
+
source,
|
|
34
|
+
timestamp,
|
|
35
|
+
duration,
|
|
36
|
+
participants,
|
|
37
|
+
summary,
|
|
38
|
+
summaryClampLines = 4,
|
|
39
|
+
segments,
|
|
40
|
+
transcript,
|
|
41
|
+
headerAside,
|
|
42
|
+
actions,
|
|
43
|
+
transcriptLabel = "Show transcript",
|
|
44
|
+
defaultTranscriptOpen = false,
|
|
45
|
+
transcriptOpen,
|
|
46
|
+
onTranscriptOpenChange,
|
|
47
|
+
onLoadTranscript,
|
|
48
|
+
loading = false,
|
|
49
|
+
className
|
|
50
|
+
}, ref) {
|
|
51
|
+
const [internalOpen, setInternalOpen] = useState(defaultTranscriptOpen);
|
|
52
|
+
const [loadedOnce, setLoadedOnce] = useState(defaultTranscriptOpen);
|
|
53
|
+
const open = transcriptOpen ?? internalOpen;
|
|
54
|
+
const summaryRef = useRef(null);
|
|
55
|
+
const [summaryExpanded, setSummaryExpanded] = useState(false);
|
|
56
|
+
const [summaryOverflows, setSummaryOverflows] = useState(false);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
const el = summaryRef.current;
|
|
59
|
+
if (el) setSummaryOverflows(el.scrollHeight - el.clientHeight > 4);
|
|
60
|
+
}, [summary]);
|
|
61
|
+
function handleOpenChange(next) {
|
|
62
|
+
if (next && !loadedOnce) {
|
|
63
|
+
setLoadedOnce(true);
|
|
64
|
+
onLoadTranscript?.();
|
|
65
|
+
}
|
|
66
|
+
if (transcriptOpen === void 0) setInternalOpen(next);
|
|
67
|
+
onTranscriptOpenChange?.(next);
|
|
68
|
+
}
|
|
69
|
+
const meta = [timestamp, source, duration].filter(Boolean);
|
|
70
|
+
const hasTranscript = segments && segments.length > 0 || transcript != null;
|
|
71
|
+
return /* @__PURE__ */ jsxs(
|
|
72
|
+
"div",
|
|
73
|
+
{
|
|
74
|
+
ref,
|
|
75
|
+
className: cn(
|
|
76
|
+
"overflow-hidden rounded-xl border border-border bg-card text-card-foreground",
|
|
77
|
+
className
|
|
78
|
+
),
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3 p-4 md:p-5", children: [
|
|
81
|
+
/* @__PURE__ */ jsx(
|
|
82
|
+
"span",
|
|
83
|
+
{
|
|
84
|
+
className: "grid h-9 w-9 shrink-0 place-items-center rounded-full bg-muted text-muted-foreground",
|
|
85
|
+
"aria-hidden": true,
|
|
86
|
+
children: /* @__PURE__ */ jsx(PhoneCall, { className: "h-4 w-4" })
|
|
87
|
+
}
|
|
88
|
+
),
|
|
89
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
90
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
|
|
91
|
+
loading ? /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-40" }) : /* @__PURE__ */ jsx("h3", { className: "min-w-0 flex-1 truncate text-sm font-semibold leading-tight", children: title ?? "Untitled call" }),
|
|
92
|
+
headerAside && /* @__PURE__ */ jsx("div", { className: "-mt-1 shrink-0", children: headerAside })
|
|
93
|
+
] }),
|
|
94
|
+
meta.length > 0 && /* @__PURE__ */ jsx("p", { className: "mt-1 truncate text-xs text-muted-foreground", children: meta.map((m, i) => /* @__PURE__ */ jsxs("span", { children: [
|
|
95
|
+
i > 0 && /* @__PURE__ */ jsx("span", { className: "px-1.5 opacity-50", children: "\xB7" }),
|
|
96
|
+
m
|
|
97
|
+
] }, i)) })
|
|
98
|
+
] })
|
|
99
|
+
] }),
|
|
100
|
+
participants && participants.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-x-5 gap-y-3 border-t border-border px-4 py-3 md:px-5", children: participants.map((p, i) => {
|
|
101
|
+
const label = p.name || p.email || "Unknown";
|
|
102
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
103
|
+
/* @__PURE__ */ jsxs(Avatar, { className: "h-7 w-7 text-[10px]", children: [
|
|
104
|
+
p.avatarUrl ? /* @__PURE__ */ jsx(AvatarImage, { src: p.avatarUrl, alt: label }) : null,
|
|
105
|
+
/* @__PURE__ */ jsx(AvatarFallback, { children: initials(label) })
|
|
106
|
+
] }),
|
|
107
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 leading-tight", children: [
|
|
108
|
+
/* @__PURE__ */ jsx("p", { className: "truncate text-sm font-medium", children: label }),
|
|
109
|
+
p.email && p.name && /* @__PURE__ */ jsx("p", { className: "truncate text-xs text-muted-foreground", children: p.email })
|
|
110
|
+
] })
|
|
111
|
+
] }, i);
|
|
112
|
+
}) }),
|
|
113
|
+
(summary || loading && !title) && /* @__PURE__ */ jsxs("div", { className: "border-t border-border px-4 py-3 md:px-5", children: [
|
|
114
|
+
/* @__PURE__ */ jsx(Eyebrow, { className: "mb-1.5", children: "Summary" }),
|
|
115
|
+
loading ? /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
116
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-full" }),
|
|
117
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-4/5" })
|
|
118
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
119
|
+
/* @__PURE__ */ jsx(
|
|
120
|
+
"div",
|
|
121
|
+
{
|
|
122
|
+
ref: summaryRef,
|
|
123
|
+
className: "whitespace-pre-wrap text-sm leading-relaxed text-muted-foreground",
|
|
124
|
+
style: summaryExpanded ? void 0 : {
|
|
125
|
+
display: "-webkit-box",
|
|
126
|
+
WebkitLineClamp: summaryClampLines,
|
|
127
|
+
WebkitBoxOrient: "vertical",
|
|
128
|
+
overflow: "hidden"
|
|
129
|
+
},
|
|
130
|
+
children: summary
|
|
131
|
+
}
|
|
132
|
+
),
|
|
133
|
+
summaryOverflows && /* @__PURE__ */ jsx(
|
|
134
|
+
"button",
|
|
135
|
+
{
|
|
136
|
+
type: "button",
|
|
137
|
+
onClick: () => setSummaryExpanded((v) => !v),
|
|
138
|
+
className: "mt-1.5 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",
|
|
139
|
+
children: summaryExpanded ? "Show less" : "Show more"
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
] })
|
|
143
|
+
] }),
|
|
144
|
+
hasTranscript && /* @__PURE__ */ jsxs(
|
|
145
|
+
Collapsible,
|
|
146
|
+
{
|
|
147
|
+
open,
|
|
148
|
+
onOpenChange: handleOpenChange,
|
|
149
|
+
className: "border-t border-border",
|
|
150
|
+
children: [
|
|
151
|
+
/* @__PURE__ */ jsx(CollapsibleTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
152
|
+
"button",
|
|
153
|
+
{
|
|
154
|
+
type: "button",
|
|
155
|
+
className: "flex w-full items-center gap-1.5 px-4 py-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground md:px-5",
|
|
156
|
+
children: [
|
|
157
|
+
/* @__PURE__ */ jsx(
|
|
158
|
+
ChevronRight,
|
|
159
|
+
{
|
|
160
|
+
className: cn(
|
|
161
|
+
"h-3.5 w-3.5 transition-transform",
|
|
162
|
+
open && "rotate-90"
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
),
|
|
166
|
+
open ? "Hide transcript" : transcriptLabel
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
) }),
|
|
170
|
+
/* @__PURE__ */ jsx(CollapsibleContent, { children: /* @__PURE__ */ jsx("div", { className: "max-h-80 space-y-3 overflow-y-auto px-4 pb-4 md:px-5", children: segments && segments.length > 0 ? segments.map((s, i) => /* @__PURE__ */ jsxs("div", { children: [
|
|
171
|
+
s.speaker && /* @__PURE__ */ jsx("p", { className: "text-xs font-semibold text-foreground", children: s.speaker }),
|
|
172
|
+
/* @__PURE__ */ jsx("p", { className: "mt-0.5 whitespace-pre-wrap text-sm leading-relaxed text-muted-foreground", children: s.text })
|
|
173
|
+
] }, i)) : /* @__PURE__ */ jsx(
|
|
174
|
+
Text,
|
|
175
|
+
{
|
|
176
|
+
variant: "muted",
|
|
177
|
+
className: "whitespace-pre-wrap text-sm leading-relaxed",
|
|
178
|
+
children: transcript
|
|
179
|
+
}
|
|
180
|
+
) }) })
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
),
|
|
184
|
+
actions && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center justify-end gap-2 border-t border-border bg-muted/30 px-4 py-3 md:px-5", children: actions })
|
|
185
|
+
]
|
|
186
|
+
}
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
);
|
|
190
|
+
function initials(value) {
|
|
191
|
+
return value.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]).join("").toUpperCase();
|
|
192
|
+
}
|
|
193
|
+
export {
|
|
194
|
+
CallCard
|
|
195
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
type CalloutPointer = "top" | "top-left" | "top-right" | "bottom" | "bottom-left" | "bottom-right" | "left" | "right";
|
|
5
|
+
type CalloutPadding = "none" | "sm" | "compact" | "md" | "lg";
|
|
6
|
+
interface CalloutProps {
|
|
7
|
+
/**
|
|
8
|
+
* Optional pointer (small triangle on the edge) tying the callout to
|
|
9
|
+
* a related element on the page. Omit for a standalone well.
|
|
10
|
+
*
|
|
11
|
+
* - `top` / `bottom` / `left` / `right` — centered on that edge
|
|
12
|
+
* - `top-left`, `top-right`, etc — aligned near the start/end of the edge
|
|
13
|
+
*/
|
|
14
|
+
pointer?: CalloutPointer;
|
|
15
|
+
/** Internal padding. Defaults to `md`. */
|
|
16
|
+
padding?: CalloutPadding;
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
className?: string;
|
|
19
|
+
tone?: "default" | "warning";
|
|
20
|
+
marginBottom?: "none" | "md";
|
|
21
|
+
textSize?: "inherit" | "micro";
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A muted well/card with an optional pointer triangle, used to visually
|
|
25
|
+
* tie a block of related content to a target element on the page.
|
|
26
|
+
*
|
|
27
|
+
* Common uses:
|
|
28
|
+
* - Suggestion / example pills under an input (pointer="top")
|
|
29
|
+
* - Inline help text under a form field (pointer="top")
|
|
30
|
+
* - Quick-action chips after a state change ("nice — what next?")
|
|
31
|
+
* - Onboarding nudges that point at a specific UI element
|
|
32
|
+
*
|
|
33
|
+
* Pointer-less callouts are valid too — drop the `pointer` prop for a
|
|
34
|
+
* generic muted well that just groups related content.
|
|
35
|
+
*
|
|
36
|
+
* Styling: subtle border + `bg-muted/40` so it reads as related-to
|
|
37
|
+
* rather than primary content. Override via `className`.
|
|
38
|
+
*/
|
|
39
|
+
declare function Callout({ pointer, padding, children, className, tone, marginBottom, textSize, }: CalloutProps): react_jsx_runtime.JSX.Element;
|
|
40
|
+
|
|
41
|
+
export { Callout, type CalloutPadding, type CalloutPointer, type CalloutProps };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
type CalloutPointer = "top" | "top-left" | "top-right" | "bottom" | "bottom-left" | "bottom-right" | "left" | "right";
|
|
5
|
+
type CalloutPadding = "none" | "sm" | "compact" | "md" | "lg";
|
|
6
|
+
interface CalloutProps {
|
|
7
|
+
/**
|
|
8
|
+
* Optional pointer (small triangle on the edge) tying the callout to
|
|
9
|
+
* a related element on the page. Omit for a standalone well.
|
|
10
|
+
*
|
|
11
|
+
* - `top` / `bottom` / `left` / `right` — centered on that edge
|
|
12
|
+
* - `top-left`, `top-right`, etc — aligned near the start/end of the edge
|
|
13
|
+
*/
|
|
14
|
+
pointer?: CalloutPointer;
|
|
15
|
+
/** Internal padding. Defaults to `md`. */
|
|
16
|
+
padding?: CalloutPadding;
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
className?: string;
|
|
19
|
+
tone?: "default" | "warning";
|
|
20
|
+
marginBottom?: "none" | "md";
|
|
21
|
+
textSize?: "inherit" | "micro";
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A muted well/card with an optional pointer triangle, used to visually
|
|
25
|
+
* tie a block of related content to a target element on the page.
|
|
26
|
+
*
|
|
27
|
+
* Common uses:
|
|
28
|
+
* - Suggestion / example pills under an input (pointer="top")
|
|
29
|
+
* - Inline help text under a form field (pointer="top")
|
|
30
|
+
* - Quick-action chips after a state change ("nice — what next?")
|
|
31
|
+
* - Onboarding nudges that point at a specific UI element
|
|
32
|
+
*
|
|
33
|
+
* Pointer-less callouts are valid too — drop the `pointer` prop for a
|
|
34
|
+
* generic muted well that just groups related content.
|
|
35
|
+
*
|
|
36
|
+
* Styling: subtle border + `bg-muted/40` so it reads as related-to
|
|
37
|
+
* rather than primary content. Override via `className`.
|
|
38
|
+
*/
|
|
39
|
+
declare function Callout({ pointer, padding, children, className, tone, marginBottom, textSize, }: CalloutProps): react_jsx_runtime.JSX.Element;
|
|
40
|
+
|
|
41
|
+
export { Callout, type CalloutPadding, type CalloutPointer, type CalloutProps };
|