@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,177 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkKGFL3VWYcjs = require('../chunk-KGFL3VWY.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkWABCLRBRcjs = require('../chunk-WABCLRBR.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkPQUSJEXLcjs = require('../chunk-PQUSJEXL.cjs');
|
|
13
|
+
require('../chunk-VGTINL5Q.cjs');
|
|
14
|
+
require('../chunk-I6GUOEBO.cjs');
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
var _chunkG54TQV2Rcjs = require('../chunk-G54TQV2R.cjs');
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
var _chunkVBPPFC7Xcjs = require('../chunk-VBPPFC7X.cjs');
|
|
21
|
+
require('../chunk-L4DH72UF.cjs');
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
|
|
25
|
+
|
|
26
|
+
// src/primitives/activity-feed.tsx
|
|
27
|
+
var _react = require('react');
|
|
28
|
+
var _lucidereact = require('lucide-react');
|
|
29
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
30
|
+
function ActivityFeedToolbar({
|
|
31
|
+
categories,
|
|
32
|
+
category,
|
|
33
|
+
onCategoryChange,
|
|
34
|
+
filters,
|
|
35
|
+
searchValue,
|
|
36
|
+
onSearchChange,
|
|
37
|
+
searchPlaceholder = "Search activity\u2026",
|
|
38
|
+
searchLabel = "Search activity",
|
|
39
|
+
className
|
|
40
|
+
}) {
|
|
41
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "flex flex-col gap-2 rounded-lg border bg-card p-2 lg:flex-row lg:items-center", className), children: [
|
|
42
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
43
|
+
_chunkKGFL3VWYcjs.ChipTabs,
|
|
44
|
+
{
|
|
45
|
+
items: categories,
|
|
46
|
+
value: category,
|
|
47
|
+
onChange: onCategoryChange,
|
|
48
|
+
size: "sm",
|
|
49
|
+
className: "shrink-0"
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
filters != null && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-2 lg:justify-end", children: filters }),
|
|
53
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative min-w-0 lg:w-64 lg:shrink-0", children: [
|
|
54
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Search, { "aria-hidden": true, className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }),
|
|
55
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
56
|
+
_chunkPQUSJEXLcjs.Input,
|
|
57
|
+
{
|
|
58
|
+
value: searchValue,
|
|
59
|
+
onChange: (event) => onSearchChange(event.target.value),
|
|
60
|
+
placeholder: searchPlaceholder,
|
|
61
|
+
"aria-label": searchLabel,
|
|
62
|
+
controlSize: "sm",
|
|
63
|
+
className: "pl-9"
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
] })
|
|
67
|
+
] });
|
|
68
|
+
}
|
|
69
|
+
function ActivityFeed({
|
|
70
|
+
groups,
|
|
71
|
+
loading = false,
|
|
72
|
+
skeletonRows = 5,
|
|
73
|
+
empty,
|
|
74
|
+
defaultExpandedIds = [],
|
|
75
|
+
className
|
|
76
|
+
}) {
|
|
77
|
+
const [expanded, setExpanded] = _react.useState.call(void 0, () => new Set(defaultExpandedIds));
|
|
78
|
+
if (loading) {
|
|
79
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "space-y-2", className), "aria-busy": "true", children: Array.from({ length: skeletonRows }).map((_, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBPPFC7Xcjs.Skeleton, { className: "h-[72px] w-full rounded-lg" }, index)) });
|
|
80
|
+
}
|
|
81
|
+
const populatedGroups = groups.filter((group) => group.items.length > 0);
|
|
82
|
+
if (populatedGroups.length === 0) {
|
|
83
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: _nullishCoalesce(empty, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
84
|
+
_chunkG54TQV2Rcjs.EmptyState,
|
|
85
|
+
{
|
|
86
|
+
variant: "empty",
|
|
87
|
+
title: "No activity found",
|
|
88
|
+
description: "Activity will appear here as it happens."
|
|
89
|
+
}
|
|
90
|
+
))) });
|
|
91
|
+
}
|
|
92
|
+
const toggle = (id) => {
|
|
93
|
+
setExpanded((current) => {
|
|
94
|
+
const next = new Set(current);
|
|
95
|
+
if (next.has(id)) next.delete(id);
|
|
96
|
+
else next.add(id);
|
|
97
|
+
return next;
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "space-y-6", className), children: populatedGroups.map((group) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "section", { "aria-labelledby": `activity-feed-${group.id}`, children: [
|
|
101
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mb-2 flex items-center justify-between gap-3 px-0.5", children: [
|
|
102
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { id: `activity-feed-${group.id}`, className: "text-xs font-semibold text-foreground", children: group.label }),
|
|
103
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-xs text-muted-foreground", children: _nullishCoalesce(group.countLabel, () => ( `${group.items.length} ${group.items.length === 1 ? "activity" : "activities"}`)) })
|
|
104
|
+
] }),
|
|
105
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-1.5", children: group.items.map((item) => {
|
|
106
|
+
const isExpanded = expanded.has(item.id);
|
|
107
|
+
const detailId = `activity-feed-detail-${item.id}`;
|
|
108
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "article", { className: "overflow-hidden rounded-lg border bg-card text-card-foreground", children: [
|
|
109
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid gap-x-4 gap-y-2 p-3 md:grid-cols-[minmax(0,15rem)_minmax(7rem,9rem)_minmax(0,1fr)_2rem] md:items-center", children: [
|
|
110
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, Identity, { identity: item.identity }),
|
|
111
|
+
item.outcome != null ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ActivityFeedOutcome, { outcome: item.outcome }) : item.status != null ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "justify-self-start", children: item.status }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", {}),
|
|
112
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "min-w-0", children: [
|
|
113
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-sm leading-snug text-foreground", children: item.summary }),
|
|
114
|
+
item.meta != null && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-0.5 text-xs text-muted-foreground", children: item.meta })
|
|
115
|
+
] }),
|
|
116
|
+
item.detail != null ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
117
|
+
"button",
|
|
118
|
+
{
|
|
119
|
+
type: "button",
|
|
120
|
+
"aria-expanded": isExpanded,
|
|
121
|
+
"aria-controls": detailId,
|
|
122
|
+
"aria-label": _nullishCoalesce(item.detailLabel, () => ( (isExpanded ? "Hide activity details" : "Show activity details"))),
|
|
123
|
+
onClick: () => toggle(item.id),
|
|
124
|
+
className: "flex size-8 items-center justify-center justify-self-end rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring",
|
|
125
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronDown, { className: _chunkKWLSBTB2cjs.cn.call(void 0, "size-4 transition-transform", isExpanded && "rotate-180") })
|
|
126
|
+
}
|
|
127
|
+
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", {})
|
|
128
|
+
] }),
|
|
129
|
+
item.detail != null && isExpanded && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { id: detailId, className: "border-t bg-muted/20 px-3 py-3 text-sm", children: item.detail })
|
|
130
|
+
] }, item.id);
|
|
131
|
+
}) })
|
|
132
|
+
] }, group.id)) });
|
|
133
|
+
}
|
|
134
|
+
function ActivityFeedOutcome({ outcome }) {
|
|
135
|
+
const tone = _nullishCoalesce(outcome.tone, () => ( "neutral"));
|
|
136
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
137
|
+
"span",
|
|
138
|
+
{
|
|
139
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
140
|
+
"text-xs font-medium leading-5",
|
|
141
|
+
tone === "positive" && "text-green-700 dark:text-green-400",
|
|
142
|
+
tone === "negative" && "text-red-700 dark:text-red-400",
|
|
143
|
+
tone === "neutral" && "text-muted-foreground"
|
|
144
|
+
),
|
|
145
|
+
children: outcome.label
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
function Identity({ identity }) {
|
|
150
|
+
const content = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
151
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkWABCLRBRcjs.Avatar, { size: "sm", surface: "muted", children: [
|
|
152
|
+
identity.imageUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWABCLRBRcjs.AvatarImage, { src: identity.imageUrl, alt: "" }) : null,
|
|
153
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWABCLRBRcjs.AvatarFallback, { textSize: "micro", children: identity.fallback })
|
|
154
|
+
] }),
|
|
155
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "min-w-0 text-left", children: [
|
|
156
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "block truncate text-sm font-medium text-foreground", children: identity.title }),
|
|
157
|
+
identity.subtitle != null && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "block truncate text-xs text-muted-foreground", children: identity.subtitle })
|
|
158
|
+
] })
|
|
159
|
+
] });
|
|
160
|
+
if (identity.onOpen) {
|
|
161
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
162
|
+
"button",
|
|
163
|
+
{
|
|
164
|
+
type: "button",
|
|
165
|
+
onClick: identity.onOpen,
|
|
166
|
+
"aria-label": identity.openLabel,
|
|
167
|
+
className: "flex min-w-0 items-center gap-2 rounded-md text-left hover:opacity-75 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
168
|
+
children: content
|
|
169
|
+
}
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-w-0 items-center gap-2", children: content });
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
exports.ActivityFeed = ActivityFeed; exports.ActivityFeedToolbar = ActivityFeedToolbar;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { ChipTabItem } from './chip-tabs.cjs';
|
|
4
|
+
|
|
5
|
+
interface ActivityFeedIdentity {
|
|
6
|
+
/** Primary identity text, normally a person or resource name. */
|
|
7
|
+
title: ReactNode;
|
|
8
|
+
/** One-line context below the title, such as role, company, or source. */
|
|
9
|
+
subtitle?: ReactNode;
|
|
10
|
+
imageUrl?: string | null;
|
|
11
|
+
/** Initials or an icon rendered when there is no image. */
|
|
12
|
+
fallback?: ReactNode;
|
|
13
|
+
/** Makes the identity a distinct action without turning the whole row into a button. */
|
|
14
|
+
onOpen?: () => void;
|
|
15
|
+
openLabel?: string;
|
|
16
|
+
}
|
|
17
|
+
interface ActivityFeedItem {
|
|
18
|
+
id: string;
|
|
19
|
+
identity: ActivityFeedIdentity;
|
|
20
|
+
/**
|
|
21
|
+
* Plain-text audit outcome. The feed renders this as semantic text rather
|
|
22
|
+
* than a badge, keeping status legible without adding visual noise.
|
|
23
|
+
*/
|
|
24
|
+
outcome?: {
|
|
25
|
+
label: ReactNode;
|
|
26
|
+
tone?: ActivityFeedOutcomeTone;
|
|
27
|
+
};
|
|
28
|
+
/** @deprecated Prefer `outcome` for a consistently styled audit outcome. */
|
|
29
|
+
status?: ReactNode;
|
|
30
|
+
/** The event's main human-readable content. */
|
|
31
|
+
summary: ReactNode;
|
|
32
|
+
/** Actor and relative time, rendered below the summary. */
|
|
33
|
+
meta?: ReactNode;
|
|
34
|
+
/** Additional event context revealed by the disclosure control. */
|
|
35
|
+
detail?: ReactNode;
|
|
36
|
+
detailLabel?: string;
|
|
37
|
+
}
|
|
38
|
+
type ActivityFeedOutcomeTone = "positive" | "negative" | "neutral";
|
|
39
|
+
interface ActivityFeedGroup {
|
|
40
|
+
id: string;
|
|
41
|
+
label: ReactNode;
|
|
42
|
+
items: ActivityFeedItem[];
|
|
43
|
+
/** Overrides the default “N activities” group count. */
|
|
44
|
+
countLabel?: ReactNode;
|
|
45
|
+
}
|
|
46
|
+
interface ActivityFeedProps {
|
|
47
|
+
groups: ActivityFeedGroup[];
|
|
48
|
+
loading?: boolean;
|
|
49
|
+
skeletonRows?: number;
|
|
50
|
+
empty?: ReactNode;
|
|
51
|
+
defaultExpandedIds?: string[];
|
|
52
|
+
className?: string;
|
|
53
|
+
}
|
|
54
|
+
interface ActivityFeedToolbarProps {
|
|
55
|
+
categories: ChipTabItem[];
|
|
56
|
+
category: string;
|
|
57
|
+
onCategoryChange: (category: string) => void;
|
|
58
|
+
/** Selects or other compact filter controls. */
|
|
59
|
+
filters?: ReactNode;
|
|
60
|
+
searchValue: string;
|
|
61
|
+
onSearchChange: (value: string) => void;
|
|
62
|
+
searchPlaceholder?: string;
|
|
63
|
+
searchLabel?: string;
|
|
64
|
+
className?: string;
|
|
65
|
+
}
|
|
66
|
+
/** Standard filter/search header for ActivityFeed-based screens. */
|
|
67
|
+
declare function ActivityFeedToolbar({ categories, category, onCategoryChange, filters, searchValue, onSearchChange, searchPlaceholder, searchLabel, className, }: ActivityFeedToolbarProps): react_jsx_runtime.JSX.Element;
|
|
68
|
+
/**
|
|
69
|
+
* Rich, grouped activity feed for human-facing audit and history screens.
|
|
70
|
+
*
|
|
71
|
+
* Unlike `ActivityLog` (a compact operator/debug log), this primitive gives
|
|
72
|
+
* the subject, outcome, explanation and attribution equal visual weight. It
|
|
73
|
+
* deliberately keeps “open subject” and “expand event” as separate controls,
|
|
74
|
+
* avoiding nested buttons and making both actions keyboard accessible.
|
|
75
|
+
*/
|
|
76
|
+
declare function ActivityFeed({ groups, loading, skeletonRows, empty, defaultExpandedIds, className, }: ActivityFeedProps): react_jsx_runtime.JSX.Element;
|
|
77
|
+
|
|
78
|
+
export { ActivityFeed, type ActivityFeedGroup, type ActivityFeedIdentity, type ActivityFeedItem, type ActivityFeedOutcomeTone, type ActivityFeedProps, ActivityFeedToolbar, type ActivityFeedToolbarProps };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { ChipTabItem } from './chip-tabs.js';
|
|
4
|
+
|
|
5
|
+
interface ActivityFeedIdentity {
|
|
6
|
+
/** Primary identity text, normally a person or resource name. */
|
|
7
|
+
title: ReactNode;
|
|
8
|
+
/** One-line context below the title, such as role, company, or source. */
|
|
9
|
+
subtitle?: ReactNode;
|
|
10
|
+
imageUrl?: string | null;
|
|
11
|
+
/** Initials or an icon rendered when there is no image. */
|
|
12
|
+
fallback?: ReactNode;
|
|
13
|
+
/** Makes the identity a distinct action without turning the whole row into a button. */
|
|
14
|
+
onOpen?: () => void;
|
|
15
|
+
openLabel?: string;
|
|
16
|
+
}
|
|
17
|
+
interface ActivityFeedItem {
|
|
18
|
+
id: string;
|
|
19
|
+
identity: ActivityFeedIdentity;
|
|
20
|
+
/**
|
|
21
|
+
* Plain-text audit outcome. The feed renders this as semantic text rather
|
|
22
|
+
* than a badge, keeping status legible without adding visual noise.
|
|
23
|
+
*/
|
|
24
|
+
outcome?: {
|
|
25
|
+
label: ReactNode;
|
|
26
|
+
tone?: ActivityFeedOutcomeTone;
|
|
27
|
+
};
|
|
28
|
+
/** @deprecated Prefer `outcome` for a consistently styled audit outcome. */
|
|
29
|
+
status?: ReactNode;
|
|
30
|
+
/** The event's main human-readable content. */
|
|
31
|
+
summary: ReactNode;
|
|
32
|
+
/** Actor and relative time, rendered below the summary. */
|
|
33
|
+
meta?: ReactNode;
|
|
34
|
+
/** Additional event context revealed by the disclosure control. */
|
|
35
|
+
detail?: ReactNode;
|
|
36
|
+
detailLabel?: string;
|
|
37
|
+
}
|
|
38
|
+
type ActivityFeedOutcomeTone = "positive" | "negative" | "neutral";
|
|
39
|
+
interface ActivityFeedGroup {
|
|
40
|
+
id: string;
|
|
41
|
+
label: ReactNode;
|
|
42
|
+
items: ActivityFeedItem[];
|
|
43
|
+
/** Overrides the default “N activities” group count. */
|
|
44
|
+
countLabel?: ReactNode;
|
|
45
|
+
}
|
|
46
|
+
interface ActivityFeedProps {
|
|
47
|
+
groups: ActivityFeedGroup[];
|
|
48
|
+
loading?: boolean;
|
|
49
|
+
skeletonRows?: number;
|
|
50
|
+
empty?: ReactNode;
|
|
51
|
+
defaultExpandedIds?: string[];
|
|
52
|
+
className?: string;
|
|
53
|
+
}
|
|
54
|
+
interface ActivityFeedToolbarProps {
|
|
55
|
+
categories: ChipTabItem[];
|
|
56
|
+
category: string;
|
|
57
|
+
onCategoryChange: (category: string) => void;
|
|
58
|
+
/** Selects or other compact filter controls. */
|
|
59
|
+
filters?: ReactNode;
|
|
60
|
+
searchValue: string;
|
|
61
|
+
onSearchChange: (value: string) => void;
|
|
62
|
+
searchPlaceholder?: string;
|
|
63
|
+
searchLabel?: string;
|
|
64
|
+
className?: string;
|
|
65
|
+
}
|
|
66
|
+
/** Standard filter/search header for ActivityFeed-based screens. */
|
|
67
|
+
declare function ActivityFeedToolbar({ categories, category, onCategoryChange, filters, searchValue, onSearchChange, searchPlaceholder, searchLabel, className, }: ActivityFeedToolbarProps): react_jsx_runtime.JSX.Element;
|
|
68
|
+
/**
|
|
69
|
+
* Rich, grouped activity feed for human-facing audit and history screens.
|
|
70
|
+
*
|
|
71
|
+
* Unlike `ActivityLog` (a compact operator/debug log), this primitive gives
|
|
72
|
+
* the subject, outcome, explanation and attribution equal visual weight. It
|
|
73
|
+
* deliberately keeps “open subject” and “expand event” as separate controls,
|
|
74
|
+
* avoiding nested buttons and making both actions keyboard accessible.
|
|
75
|
+
*/
|
|
76
|
+
declare function ActivityFeed({ groups, loading, skeletonRows, empty, defaultExpandedIds, className, }: ActivityFeedProps): react_jsx_runtime.JSX.Element;
|
|
77
|
+
|
|
78
|
+
export { ActivityFeed, type ActivityFeedGroup, type ActivityFeedIdentity, type ActivityFeedItem, type ActivityFeedOutcomeTone, type ActivityFeedProps, ActivityFeedToolbar, type ActivityFeedToolbarProps };
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
ChipTabs
|
|
4
|
+
} from "../chunk-QD63LB2F.js";
|
|
5
|
+
import {
|
|
6
|
+
Avatar,
|
|
7
|
+
AvatarFallback,
|
|
8
|
+
AvatarImage
|
|
9
|
+
} from "../chunk-3OWGL4Q2.js";
|
|
10
|
+
import {
|
|
11
|
+
Input
|
|
12
|
+
} from "../chunk-QMA3WVB7.js";
|
|
13
|
+
import "../chunk-H7TETFLB.js";
|
|
14
|
+
import "../chunk-D4ZL2OEQ.js";
|
|
15
|
+
import {
|
|
16
|
+
EmptyState
|
|
17
|
+
} from "../chunk-4NN7EA3W.js";
|
|
18
|
+
import {
|
|
19
|
+
Skeleton
|
|
20
|
+
} from "../chunk-YEW65ASC.js";
|
|
21
|
+
import "../chunk-HQRWRRZJ.js";
|
|
22
|
+
import {
|
|
23
|
+
cn
|
|
24
|
+
} from "../chunk-G6SRSWXB.js";
|
|
25
|
+
|
|
26
|
+
// src/primitives/activity-feed.tsx
|
|
27
|
+
import { useState } from "react";
|
|
28
|
+
import { ChevronDown, Search } from "lucide-react";
|
|
29
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
30
|
+
function ActivityFeedToolbar({
|
|
31
|
+
categories,
|
|
32
|
+
category,
|
|
33
|
+
onCategoryChange,
|
|
34
|
+
filters,
|
|
35
|
+
searchValue,
|
|
36
|
+
onSearchChange,
|
|
37
|
+
searchPlaceholder = "Search activity\u2026",
|
|
38
|
+
searchLabel = "Search activity",
|
|
39
|
+
className
|
|
40
|
+
}) {
|
|
41
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-2 rounded-lg border bg-card p-2 lg:flex-row lg:items-center", className), children: [
|
|
42
|
+
/* @__PURE__ */ jsx(
|
|
43
|
+
ChipTabs,
|
|
44
|
+
{
|
|
45
|
+
items: categories,
|
|
46
|
+
value: category,
|
|
47
|
+
onChange: onCategoryChange,
|
|
48
|
+
size: "sm",
|
|
49
|
+
className: "shrink-0"
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
filters != null && /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-2 lg:justify-end", children: filters }),
|
|
53
|
+
/* @__PURE__ */ jsxs("div", { className: "relative min-w-0 lg:w-64 lg:shrink-0", children: [
|
|
54
|
+
/* @__PURE__ */ jsx(Search, { "aria-hidden": true, className: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }),
|
|
55
|
+
/* @__PURE__ */ jsx(
|
|
56
|
+
Input,
|
|
57
|
+
{
|
|
58
|
+
value: searchValue,
|
|
59
|
+
onChange: (event) => onSearchChange(event.target.value),
|
|
60
|
+
placeholder: searchPlaceholder,
|
|
61
|
+
"aria-label": searchLabel,
|
|
62
|
+
controlSize: "sm",
|
|
63
|
+
className: "pl-9"
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
] })
|
|
67
|
+
] });
|
|
68
|
+
}
|
|
69
|
+
function ActivityFeed({
|
|
70
|
+
groups,
|
|
71
|
+
loading = false,
|
|
72
|
+
skeletonRows = 5,
|
|
73
|
+
empty,
|
|
74
|
+
defaultExpandedIds = [],
|
|
75
|
+
className
|
|
76
|
+
}) {
|
|
77
|
+
const [expanded, setExpanded] = useState(() => new Set(defaultExpandedIds));
|
|
78
|
+
if (loading) {
|
|
79
|
+
return /* @__PURE__ */ jsx("div", { className: cn("space-y-2", className), "aria-busy": "true", children: Array.from({ length: skeletonRows }).map((_, index) => /* @__PURE__ */ jsx(Skeleton, { className: "h-[72px] w-full rounded-lg" }, index)) });
|
|
80
|
+
}
|
|
81
|
+
const populatedGroups = groups.filter((group) => group.items.length > 0);
|
|
82
|
+
if (populatedGroups.length === 0) {
|
|
83
|
+
return /* @__PURE__ */ jsx(Fragment, { children: empty ?? /* @__PURE__ */ jsx(
|
|
84
|
+
EmptyState,
|
|
85
|
+
{
|
|
86
|
+
variant: "empty",
|
|
87
|
+
title: "No activity found",
|
|
88
|
+
description: "Activity will appear here as it happens."
|
|
89
|
+
}
|
|
90
|
+
) });
|
|
91
|
+
}
|
|
92
|
+
const toggle = (id) => {
|
|
93
|
+
setExpanded((current) => {
|
|
94
|
+
const next = new Set(current);
|
|
95
|
+
if (next.has(id)) next.delete(id);
|
|
96
|
+
else next.add(id);
|
|
97
|
+
return next;
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
return /* @__PURE__ */ jsx("div", { className: cn("space-y-6", className), children: populatedGroups.map((group) => /* @__PURE__ */ jsxs("section", { "aria-labelledby": `activity-feed-${group.id}`, children: [
|
|
101
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between gap-3 px-0.5", children: [
|
|
102
|
+
/* @__PURE__ */ jsx("h3", { id: `activity-feed-${group.id}`, className: "text-xs font-semibold text-foreground", children: group.label }),
|
|
103
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: group.countLabel ?? `${group.items.length} ${group.items.length === 1 ? "activity" : "activities"}` })
|
|
104
|
+
] }),
|
|
105
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-1.5", children: group.items.map((item) => {
|
|
106
|
+
const isExpanded = expanded.has(item.id);
|
|
107
|
+
const detailId = `activity-feed-detail-${item.id}`;
|
|
108
|
+
return /* @__PURE__ */ jsxs("article", { className: "overflow-hidden rounded-lg border bg-card text-card-foreground", children: [
|
|
109
|
+
/* @__PURE__ */ jsxs("div", { className: "grid gap-x-4 gap-y-2 p-3 md:grid-cols-[minmax(0,15rem)_minmax(7rem,9rem)_minmax(0,1fr)_2rem] md:items-center", children: [
|
|
110
|
+
/* @__PURE__ */ jsx(Identity, { identity: item.identity }),
|
|
111
|
+
item.outcome != null ? /* @__PURE__ */ jsx(ActivityFeedOutcome, { outcome: item.outcome }) : item.status != null ? /* @__PURE__ */ jsx("div", { className: "justify-self-start", children: item.status }) : /* @__PURE__ */ jsx("span", {}),
|
|
112
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
113
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm leading-snug text-foreground", children: item.summary }),
|
|
114
|
+
item.meta != null && /* @__PURE__ */ jsx("div", { className: "mt-0.5 text-xs text-muted-foreground", children: item.meta })
|
|
115
|
+
] }),
|
|
116
|
+
item.detail != null ? /* @__PURE__ */ jsx(
|
|
117
|
+
"button",
|
|
118
|
+
{
|
|
119
|
+
type: "button",
|
|
120
|
+
"aria-expanded": isExpanded,
|
|
121
|
+
"aria-controls": detailId,
|
|
122
|
+
"aria-label": item.detailLabel ?? (isExpanded ? "Hide activity details" : "Show activity details"),
|
|
123
|
+
onClick: () => toggle(item.id),
|
|
124
|
+
className: "flex size-8 items-center justify-center justify-self-end rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring",
|
|
125
|
+
children: /* @__PURE__ */ jsx(ChevronDown, { className: cn("size-4 transition-transform", isExpanded && "rotate-180") })
|
|
126
|
+
}
|
|
127
|
+
) : /* @__PURE__ */ jsx("span", {})
|
|
128
|
+
] }),
|
|
129
|
+
item.detail != null && isExpanded && /* @__PURE__ */ jsx("div", { id: detailId, className: "border-t bg-muted/20 px-3 py-3 text-sm", children: item.detail })
|
|
130
|
+
] }, item.id);
|
|
131
|
+
}) })
|
|
132
|
+
] }, group.id)) });
|
|
133
|
+
}
|
|
134
|
+
function ActivityFeedOutcome({ outcome }) {
|
|
135
|
+
const tone = outcome.tone ?? "neutral";
|
|
136
|
+
return /* @__PURE__ */ jsx(
|
|
137
|
+
"span",
|
|
138
|
+
{
|
|
139
|
+
className: cn(
|
|
140
|
+
"text-xs font-medium leading-5",
|
|
141
|
+
tone === "positive" && "text-green-700 dark:text-green-400",
|
|
142
|
+
tone === "negative" && "text-red-700 dark:text-red-400",
|
|
143
|
+
tone === "neutral" && "text-muted-foreground"
|
|
144
|
+
),
|
|
145
|
+
children: outcome.label
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
function Identity({ identity }) {
|
|
150
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
151
|
+
/* @__PURE__ */ jsxs(Avatar, { size: "sm", surface: "muted", children: [
|
|
152
|
+
identity.imageUrl ? /* @__PURE__ */ jsx(AvatarImage, { src: identity.imageUrl, alt: "" }) : null,
|
|
153
|
+
/* @__PURE__ */ jsx(AvatarFallback, { textSize: "micro", children: identity.fallback })
|
|
154
|
+
] }),
|
|
155
|
+
/* @__PURE__ */ jsxs("span", { className: "min-w-0 text-left", children: [
|
|
156
|
+
/* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-foreground", children: identity.title }),
|
|
157
|
+
identity.subtitle != null && /* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-muted-foreground", children: identity.subtitle })
|
|
158
|
+
] })
|
|
159
|
+
] });
|
|
160
|
+
if (identity.onOpen) {
|
|
161
|
+
return /* @__PURE__ */ jsx(
|
|
162
|
+
"button",
|
|
163
|
+
{
|
|
164
|
+
type: "button",
|
|
165
|
+
onClick: identity.onOpen,
|
|
166
|
+
"aria-label": identity.openLabel,
|
|
167
|
+
className: "flex min-w-0 items-center gap-2 rounded-md text-left hover:opacity-75 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
168
|
+
children: content
|
|
169
|
+
}
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
return /* @__PURE__ */ jsx("div", { className: "flex min-w-0 items-center gap-2", children: content });
|
|
173
|
+
}
|
|
174
|
+
export {
|
|
175
|
+
ActivityFeed,
|
|
176
|
+
ActivityFeedToolbar
|
|
177
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkGRZMUGT6cjs = require('../chunk-GRZMUGT6.cjs');
|
|
6
|
+
require('../chunk-BGLGRUPP.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkG54TQV2Rcjs = require('../chunk-G54TQV2R.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkVBPPFC7Xcjs = require('../chunk-VBPPFC7X.cjs');
|
|
13
|
+
require('../chunk-L4DH72UF.cjs');
|
|
14
|
+
require('../chunk-KWLSBTB2.cjs');
|
|
15
|
+
|
|
16
|
+
// src/primitives/activity-log.tsx
|
|
17
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
18
|
+
function ActivityLog({
|
|
19
|
+
entries,
|
|
20
|
+
actionLabels,
|
|
21
|
+
loading = false,
|
|
22
|
+
skeletonRows = 5,
|
|
23
|
+
empty,
|
|
24
|
+
renderDetail,
|
|
25
|
+
onSelect,
|
|
26
|
+
spacing,
|
|
27
|
+
className
|
|
28
|
+
}) {
|
|
29
|
+
if (loading) {
|
|
30
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGRZMUGT6cjs.Timeline, { spacing, className, children: Array.from({ length: skeletonRows }).map((_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVBPPFC7Xcjs.Skeleton, { className: "h-12 w-full rounded-md" }, i)) });
|
|
31
|
+
}
|
|
32
|
+
if (entries.length === 0) {
|
|
33
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: _nullishCoalesce(empty, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
34
|
+
_chunkG54TQV2Rcjs.EmptyState,
|
|
35
|
+
{
|
|
36
|
+
variant: "empty",
|
|
37
|
+
title: "Nothing logged yet",
|
|
38
|
+
description: "Actions will appear here as they happen."
|
|
39
|
+
}
|
|
40
|
+
))) });
|
|
41
|
+
}
|
|
42
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGRZMUGT6cjs.Timeline, { spacing, className, children: entries.map((entry) => {
|
|
43
|
+
const label = _nullishCoalesce(_optionalChain([actionLabels, 'optionalAccess', _2 => _2[entry.action]]), () => ( entry.action));
|
|
44
|
+
const detail = renderDetail ? renderDetail(entry) : defaultDetail(entry.detail);
|
|
45
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
46
|
+
_chunkGRZMUGT6cjs.TimelineRow,
|
|
47
|
+
{
|
|
48
|
+
icon: entry.icon,
|
|
49
|
+
status: entry.status,
|
|
50
|
+
interactive: !!onSelect,
|
|
51
|
+
onClick: onSelect ? () => onSelect(entry) : void 0,
|
|
52
|
+
timestamp: entry.timestamp,
|
|
53
|
+
title: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex flex-wrap items-baseline gap-x-1.5", children: [
|
|
54
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: label }),
|
|
55
|
+
entry.target != null && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "font-normal text-muted-foreground", children: entry.target })
|
|
56
|
+
] }),
|
|
57
|
+
subtitle: entry.actor != null ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
58
|
+
"by ",
|
|
59
|
+
entry.actor
|
|
60
|
+
] }) : void 0,
|
|
61
|
+
children: detail
|
|
62
|
+
},
|
|
63
|
+
entry.id
|
|
64
|
+
);
|
|
65
|
+
}) });
|
|
66
|
+
}
|
|
67
|
+
function defaultDetail(detail) {
|
|
68
|
+
if (detail == null) return null;
|
|
69
|
+
if (typeof detail === "object" && Object.keys(detail).length === 0) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "details", { className: "mt-1 pl-6 text-xs text-muted-foreground", children: [
|
|
73
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "summary", { className: "cursor-pointer select-none hover:text-foreground", children: "Detail" }),
|
|
74
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "pre", { className: "mt-1 overflow-x-auto rounded bg-background/60 p-2 font-mono text-[11px]", children: JSON.stringify(detail, null, 2) })
|
|
75
|
+
] });
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
exports.ActivityLog = ActivityLog;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { TimelineProps } from './timeline.cjs';
|
|
4
|
+
|
|
5
|
+
interface ActivityLogEntry {
|
|
6
|
+
id: string;
|
|
7
|
+
/**
|
|
8
|
+
* Machine-readable action key — `user.impersonate`, `plan.upgrade`.
|
|
9
|
+
* Rendered through `actionLabels` when a label exists, raw otherwise,
|
|
10
|
+
* so a new action type degrades to something readable instead of
|
|
11
|
+
* disappearing.
|
|
12
|
+
*/
|
|
13
|
+
action: string;
|
|
14
|
+
/** Who did it. */
|
|
15
|
+
actor?: ReactNode;
|
|
16
|
+
/** What it was done to. */
|
|
17
|
+
target?: ReactNode;
|
|
18
|
+
/** Right-aligned; pre-format it — this component does no date maths. */
|
|
19
|
+
timestamp?: ReactNode;
|
|
20
|
+
/** Structured extras. Rendered as collapsed JSON unless `renderDetail`. */
|
|
21
|
+
detail?: unknown;
|
|
22
|
+
/** Overrides the leading visual. */
|
|
23
|
+
icon?: ReactNode;
|
|
24
|
+
/** Forwarded to `<TimelineRow>`'s `<StatusIcon>` when no `icon` is set. */
|
|
25
|
+
status?: string;
|
|
26
|
+
}
|
|
27
|
+
interface ActivityLogProps {
|
|
28
|
+
entries: ActivityLogEntry[];
|
|
29
|
+
/** Maps action keys to human labels. Unmapped keys render as-is. */
|
|
30
|
+
actionLabels?: Record<string, string>;
|
|
31
|
+
loading?: boolean;
|
|
32
|
+
/** Skeleton row count while `loading`. Defaults to 5. */
|
|
33
|
+
skeletonRows?: number;
|
|
34
|
+
/** Shown when `entries` is empty and not loading. */
|
|
35
|
+
empty?: ReactNode;
|
|
36
|
+
/** Replaces the default collapsed-JSON rendering of `detail`. */
|
|
37
|
+
renderDetail?: (entry: ActivityLogEntry) => ReactNode;
|
|
38
|
+
/** Makes rows interactive. */
|
|
39
|
+
onSelect?: (entry: ActivityLogEntry) => void;
|
|
40
|
+
spacing?: TimelineProps["spacing"];
|
|
41
|
+
className?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Append-only event feed — audit trails, webhook logs, job history.
|
|
45
|
+
*
|
|
46
|
+
* Composed from `<Timeline>` rather than reimplementing a row: the
|
|
47
|
+
* actor/action/target triple becomes the title, the actor line becomes
|
|
48
|
+
* the subtitle, and `detail` hangs off the bottom in a `<details>`.
|
|
49
|
+
* Anything the default shape can't express, `renderDetail` and `icon`
|
|
50
|
+
* can — and `<Timeline>` itself is still there for feeds that want a
|
|
51
|
+
* different row entirely.
|
|
52
|
+
*/
|
|
53
|
+
declare function ActivityLog({ entries, actionLabels, loading, skeletonRows, empty, renderDetail, onSelect, spacing, className, }: ActivityLogProps): react_jsx_runtime.JSX.Element;
|
|
54
|
+
|
|
55
|
+
export { ActivityLog, type ActivityLogEntry, type ActivityLogProps };
|