chordia-ui 3.3.8 → 3.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AgentLiftCard.cjs.js.map +1 -1
- package/dist/AgentLiftCard.es.js +5 -3
- package/dist/AgentLiftCard.es.js.map +1 -1
- package/dist/CustomFilterChips.cjs.js.map +1 -1
- package/dist/CustomFilterChips.es.js +2 -1
- package/dist/CustomFilterChips.es.js.map +1 -1
- package/dist/FileUploadingState.cjs.js.map +1 -1
- package/dist/FileUploadingState.es.js +16 -10
- package/dist/FileUploadingState.es.js.map +1 -1
- package/dist/IntegrationCard.cjs.js.map +1 -1
- package/dist/IntegrationCard.es.js +3 -3
- package/dist/IntegrationCard.es.js.map +1 -1
- package/dist/SectionLabel.cjs.js.map +1 -1
- package/dist/SectionLabel.es.js.map +1 -1
- package/dist/SmallButton.cjs.js.map +1 -1
- package/dist/SmallButton.es.js +16 -16
- package/dist/SmallButton.es.js.map +1 -1
- package/dist/SummarySection.cjs.js.map +1 -1
- package/dist/SummarySection.es.js +11 -9
- package/dist/SummarySection.es.js.map +1 -1
- package/dist/TextInput.cjs.js.map +1 -1
- package/dist/TextInput.es.js.map +1 -1
- package/dist/Timeline.cjs.js.map +1 -1
- package/dist/Timeline.es.js +14 -8
- package/dist/Timeline.es.js.map +1 -1
- package/dist/Tooltip.cjs.js +1 -1
- package/dist/Tooltip.cjs.js.map +1 -1
- package/dist/Tooltip.es.js +31 -20
- package/dist/Tooltip.es.js.map +1 -1
- package/dist/TourGuideTooltip.cjs.js.map +1 -1
- package/dist/TourGuideTooltip.es.js +2 -1
- package/dist/TourGuideTooltip.es.js.map +1 -1
- package/dist/UpdatedInteractionRecording.cjs.js +1 -1
- package/dist/UpdatedInteractionRecording.cjs.js.map +1 -1
- package/dist/UpdatedInteractionRecording.es.js +79 -97
- package/dist/UpdatedInteractionRecording.es.js.map +1 -1
- package/dist/UploadInteraction.cjs.js.map +1 -1
- package/dist/UploadInteraction.es.js.map +1 -1
- package/dist/colors.cjs.js +2 -0
- package/dist/colors.cjs.js.map +1 -0
- package/dist/colors.es.js +2 -0
- package/dist/colors.es.js.map +1 -0
- package/dist/components/UpdatedInteractionDetails.cjs.js +10 -1
- package/dist/components/UpdatedInteractionDetails.cjs.js.map +1 -1
- package/dist/components/UpdatedInteractionDetails.es.js +1531 -9
- package/dist/components/UpdatedInteractionDetails.es.js.map +1 -1
- package/dist/components/chat.cjs.js +30 -1
- package/dist/components/chat.cjs.js.map +1 -1
- package/dist/components/chat.es.js +2222 -7
- package/dist/components/chat.es.js.map +1 -1
- package/dist/components/common.cjs.js +1 -1
- package/dist/components/common.es.js +32 -25
- package/dist/components/common.es.js.map +1 -1
- package/dist/components/data.cjs.js +1 -1
- package/dist/components/data.cjs.js.map +1 -1
- package/dist/components/data.es.js +1033 -4
- package/dist/components/data.es.js.map +1 -1
- package/dist/components/layout.cjs.js +3 -1
- package/dist/components/layout.cjs.js.map +1 -1
- package/dist/components/layout.es.js +1533 -8
- package/dist/components/layout.es.js.map +1 -1
- package/dist/components/login.cjs.js +1 -1
- package/dist/components/login.es.js +6 -2
- package/dist/components/login.es.js.map +1 -1
- package/dist/components/media.cjs.js +1 -1
- package/dist/components/media.cjs.js.map +1 -1
- package/dist/components/media.es.js +220 -6
- package/dist/components/media.es.js.map +1 -1
- package/dist/components/models.cjs.js +1 -1
- package/dist/components/models.cjs.js.map +1 -1
- package/dist/components/models.es.js +91 -2
- package/dist/components/models.es.js.map +1 -1
- package/dist/components/navigation.cjs.js +1 -1
- package/dist/components/navigation.cjs.js.map +1 -1
- package/dist/components/navigation.es.js +766 -7
- package/dist/components/navigation.es.js.map +1 -1
- package/dist/components/notifications.cjs.js +1 -1
- package/dist/components/notifications.cjs.js.map +1 -1
- package/dist/components/notifications.es.js +368 -3
- package/dist/components/notifications.es.js.map +1 -1
- package/dist/components/onboarding.cjs.js +1 -1
- package/dist/components/onboarding.cjs.js.map +1 -1
- package/dist/components/onboarding.es.js +985 -7
- package/dist/components/onboarding.es.js.map +1 -1
- package/dist/components/primitives.cjs.js +1 -1
- package/dist/components/primitives.cjs.js.map +1 -1
- package/dist/components/primitives.es.js +635 -25
- package/dist/components/primitives.es.js.map +1 -1
- package/dist/debugger-wc.cjs.js +4 -4
- package/dist/debugger-wc.cjs.js.map +1 -1
- package/dist/debugger-wc.es.js +15 -11
- package/dist/debugger-wc.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs2.js +2 -49
- package/dist/index.cjs2.js.map +1 -1
- package/dist/index.cjs3.js +50 -0
- package/dist/index.cjs3.js.map +1 -0
- package/dist/index.es.js +104 -99
- package/dist/index.es.js.map +1 -1
- package/dist/index.es2.js +2632 -1776
- package/dist/index.es2.js.map +1 -1
- package/dist/index.es3.js +1944 -0
- package/dist/index.es3.js.map +1 -0
- package/dist/pages/interactionDetails.cjs.js +1 -1
- package/dist/pages/interactionDetails.cjs.js.map +1 -1
- package/dist/pages/interactionDetails.es.js +70 -47
- package/dist/pages/interactionDetails.es.js.map +1 -1
- package/dist/sortable.esm.cjs.js +1 -1
- package/dist/sortable.esm.cjs.js.map +1 -1
- package/dist/sortable.esm.es.js +55 -53
- package/dist/sortable.esm.es.js.map +1 -1
- package/dist/{chordia-ui.css → style.css} +1 -1
- package/package.json +1 -1
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionDetails.jsx +318 -77
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionRecording.jsx +7 -17
- package/dist/ChartRenderer.cjs.js +0 -31
- package/dist/ChartRenderer.cjs.js.map +0 -1
- package/dist/ChartRenderer.es.js +0 -2210
- package/dist/ChartRenderer.es.js.map +0 -1
- package/dist/GettingStarted.cjs.js +0 -2
- package/dist/GettingStarted.cjs.js.map +0 -1
- package/dist/GettingStarted.es.js +0 -983
- package/dist/GettingStarted.es.js.map +0 -1
- package/dist/InlineConfirm.cjs.js +0 -2
- package/dist/InlineConfirm.cjs.js.map +0 -1
- package/dist/InlineConfirm.es.js +0 -618
- package/dist/InlineConfirm.es.js.map +0 -1
- package/dist/InteractionSummaryCard.cjs.js +0 -2
- package/dist/InteractionSummaryCard.cjs.js.map +0 -1
- package/dist/InteractionSummaryCard.es.js +0 -216
- package/dist/InteractionSummaryCard.es.js.map +0 -1
- package/dist/LoginPage.cjs.js +0 -3
- package/dist/LoginPage.cjs.js.map +0 -1
- package/dist/LoginPage.es.js +0 -2618
- package/dist/LoginPage.es.js.map +0 -1
- package/dist/NavigationBar.cjs.js +0 -2
- package/dist/NavigationBar.cjs.js.map +0 -1
- package/dist/NavigationBar.es.js +0 -762
- package/dist/NavigationBar.es.js.map +0 -1
- package/dist/NotificationPanel.cjs.js +0 -2
- package/dist/NotificationPanel.cjs.js.map +0 -1
- package/dist/NotificationPanel.es.js +0 -371
- package/dist/NotificationPanel.es.js.map +0 -1
- package/dist/OverlayPanel.cjs.js +0 -2
- package/dist/OverlayPanel.cjs.js.map +0 -1
- package/dist/OverlayPanel.es.js +0 -93
- package/dist/OverlayPanel.es.js.map +0 -1
- package/dist/SplitPane.cjs.js +0 -4
- package/dist/SplitPane.cjs.js.map +0 -1
- package/dist/SplitPane.es.js +0 -1531
- package/dist/SplitPane.es.js.map +0 -1
- package/dist/SummaryStatsPanel.cjs.js +0 -2
- package/dist/SummaryStatsPanel.cjs.js.map +0 -1
- package/dist/SummaryStatsPanel.es.js +0 -1027
- package/dist/SummaryStatsPanel.es.js.map +0 -1
- package/dist/UpdatedInteractionDetails.cjs.js +0 -11
- package/dist/UpdatedInteractionDetails.cjs.js.map +0 -1
- package/dist/UpdatedInteractionDetails.es.js +0 -1310
- package/dist/UpdatedInteractionDetails.es.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"navigation.es.js","sources":["../../src/assets/LogoChordia.svg","../../src/components/navigation/Sidebar.jsx","../../src/components/navigation/NavigationBar.jsx"],"sourcesContent":["export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQ2IiBoZWlnaHQ9IjQ3IiB2aWV3Qm94PSIwIDAgMTQ2IDQ3IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMzkuNzM0NSAyMy4wODc5QzM5LjczNDUgMTguMzI2NCAzNy45NTYyIDEzLjk4MDYgMzUuMDI2NSAxMC42Nzc4QzMxLjU5ODQgNi44MTMwMyAyNi41OTYxIDQuMzc5OTUgMjEuMDI1NSA0LjM3OTkxQzE1LjU1IDQuMzc5OTEgMTAuNjI2IDYuNzMxNTUgNy4yMDMyNSAxMC40ODE1QzQuMTY3MzIgMTMuODA4NiAyLjMxNzUyIDE4LjIzMTIgMi4zMTc1IDIzLjA4ODlDMi4zMTc1IDI4LjQ3MDQgNC41ODkzNiAzMy4zMjE1IDguMjI4NjQgMzYuNzM1NEw4LjU0NjAyIDM3LjAyNjRDMTEuODY0MyAzOS45OTE5IDE2LjM3NzQgNDEuNzk2OSAyMS4wMjY1IDQxLjc5NjlDMjUuODI4NSA0MS43OTY5IDMwLjIwNjkgMzkuOTg5MiAzMy41MTk3IDM3LjAxNDdDMzcuMzM2MyAzMy41ODc1IDM5LjczNDUgMjguNjE4MSAzOS43MzQ1IDIzLjA4NzlaTTQxLjA5NzggMjMuMDg3OUM0MS4wOTc4IDI5LjAyMSAzOC41MjIgMzQuMzUzNyAzNC40Mjk4IDM4LjAyODRDMzAuODc2NyA0MS4yMTg3IDI2LjE3NzMgNDMuMTYwMiAyMS4wMjY1IDQzLjE2MDJDMTUuODczMiA0My4xNjAyIDEwLjg4NzUgNDEuMDk4OSA3LjI5NjAyIDM3LjcyOTVDMy4zOTM2IDM0LjA2ODggMC45NTQyMjQgMjguODYyMyAwLjk1NDIyNCAyMy4wODg5QzAuOTU0MjM1IDE3Ljg3ODIgMi45NDA0MiAxMy4xMzA4IDYuMTk2NDEgOS41NjI1M0M5Ljg2NjMxIDUuNTQxOCAxNS4xNTExIDMuMDE2NjMgMjEuMDI1NSAzLjAxNjYzQzI3LjAwMjEgMy4wMTY2NiAzMi4zNzAyIDUuNjMwMzIgMzYuMDQ2IDkuNzc0NDRDMzkuMTg4MSAxMy4zMTY4IDQxLjA5NzggMTcuOTgwNiA0MS4wOTc4IDIzLjA4NzlaIiBmaWxsPSIjRThENEEzIi8+CjxwYXRoIGQ9Ik0zNy4yODcyIDIzLjA4OTFDMzcuMjg3MiAxOC44Njk4IDM1LjY3NjkgMTUuMDI2OCAzMy4wMzcyIDEyLjE0MThMMzMuMDM1MiAxMi4xMzk5QzMwLjA2NjcgOC44NzUwMSAyNS43ODYxIDYuODI2NDQgMjEuMDI1NSA2LjgyNjRDMTYuMjU0NiA2LjgyNjQgMTEuOTY0NyA4Ljg4MDYxIDguOTg5MzIgMTIuMTUzNUM2LjM2MzM4IDE1LjA0MjEgNC43NjI3NiAxOC44NzggNC43NjI3NiAyMy4wODkxQzQuNzYyOCAyNy43MTc0IDcuMDIyNTMgMzEuNDcyIDEwLjIxNTkgMzQuNDczOUMxMy4xNzA0IDM3LjI1MTggMTYuODYwNyAzOS4zNTA4IDIxLjAyNTUgMzkuMzUwOEMyNS4yNDI5IDM5LjM1MDggMjkuMDg1MiAzNy43NDQyIDMxLjk3MzcgMzUuMTA5NkwzMi4yNzY0IDM0LjgyNzRDMzUuMzY1MiAzMS44Njg2IDM3LjI4NzEgMjcuNzAzNCAzNy4yODcyIDIzLjA4OTFaTTM4LjQ3OTYgMjMuMDg5MUMzOC40Nzk1IDI4LjIwMTUgMzYuMjc5NCAzMi44MDE5IDMyLjc3NjQgMzUuOTkxNEMyOS42NzcgMzguODE4MiAyNS41NTEzIDQwLjU0MzIgMjEuMDI1NSA0MC41NDMyQzE2LjQ0NjQgNDAuNTQzMiAxMi40Nzg0IDM4LjIzNzkgOS4zOTk0OCAzNS4zNDNDNi4wNTE2OCAzMi4xOTYgMy41NzE0IDI4LjE0NzkgMy41NzEzNSAyMy4wODkxQzMuNTcxMzUgMTguNTcwMSA1LjI4OTA5IDE0LjQ1MTIgOC4xMDY1MSAxMS4zNTE4QzExLjI5ODMgNy44NDA3NCAxNS45MDQ3IDUuNjM0OTkgMjEuMDI1NSA1LjYzNDk5QzI2LjEzNSA1LjYzNTAzIDMwLjczMTEgNy44MzQgMzMuOTE2MSAxMS4zMzYyQzM2Ljc0OTMgMTQuNDMyNCAzOC40Nzk2IDE4LjU2MDIgMzguNDc5NiAyMy4wODkxWiIgZmlsbD0iI0MxRDg5RiIvPgo8cGF0aCBkPSJNMzQuODQxMSAyMy4wODkxQzM0Ljg0MTEgMTkuNDEwMyAzMy4zOTEzIDE2LjA3NjMgMzEuMDQ2MSAxMy42MDA4QzI4LjUyODEgMTAuOTQyNyAyNC45NzQzIDkuMjcyNzYgMjEuMDI1NiA5LjI3MjcyQzE2Ljk1OTQgOS4yNzI3MiAxMy4zMDM2IDExLjAyODUgMTAuNzc1NiAxMy44MjQ1QzguNTU4NSAxNi4yNzU3IDcuMjA5MjMgMTkuNTI0NiA3LjIwOTIzIDIzLjA4OTFDNy4yMDkzIDI2Ljk2ODQgOS40NDY5IDI5LjYxMTYgMTIuMjA1MyAzMi4yMTMyQzE0Ljc4MTUgMzQuNjQyNCAxNy40ODI2IDM2LjkwNDYgMjEuMDI1NiAzNi45MDQ2QzI0LjY1OTcgMzYuOTA0NSAyNy45NjU3IDM1LjQ5OTMgMzAuNDI5OSAzMy4yMDM0QzMzLjE0MzcgMzAuNjgzMiAzNC44NDEgMjcuMDg1IDM0Ljg0MTEgMjMuMDg5MVpNMzUuODYzNSAyMy4wODkxQzM1Ljg2MzUgMjcuMzgwNyAzNC4wMzgzIDMxLjI0NiAzMS4xMjUyIDMzLjk1MTRDMjguNDc5NCAzNi40MTY1IDI0LjkyODQgMzcuOTI3IDIxLjAyNTYgMzcuOTI3QzE3LjAzMTUgMzcuOTI3IDE0LjA1OTUgMzUuMzY1IDExLjUwNTEgMzIuOTU2M0gxMS41MDQyQzguNzIxNjcgMzAuMzMyMSA2LjE4NzgyIDI3LjQyNyA2LjE4Nzc0IDIzLjA4OTFDNi4xODc3NCAxOS4yNjE2IDcuNjM3MzUgMTUuNzcwNyAxMC4wMTc4IDEzLjEzODlMMTAuMjc1NiAxMi44NjE2QzEyLjk3NzIgMTAuMDIyMSAxNi43OTUgOC4yNTEyNCAyMS4wMjU2IDguMjUxMjRDMjUuMjY5NCA4LjI1MTI4IDI5LjA4NzQgMTAuMDQ2NiAzMS43ODgzIDEyLjg5NzdDMzQuMzA0IDE1LjU1MzEgMzUuODYzNSAxOS4xMzU2IDM1Ljg2MzUgMjMuMDg5MVoiIGZpbGw9IiM5QkRCOUMiLz4KPHBhdGggZD0iTTMyLjM5MzggMjMuMDg4QzMyLjM5MzggMTkuOTUwOCAzMS4xMTM0IDE3LjExODQgMjkuMDU2OSAxNS4wNjA3QzI3LjAwMDQgMTMuMDAzMiAyNC4xNjQ5IDExLjcxOSAyMS4wMjU2IDExLjcxODlIMjAuOTQ2NUMxNy42MTc0IDExLjc0MTIgMTQuNjI3NiAxMy4xOTM5IDEyLjU2MTcgMTUuNDk1M0MxMC43NTQ2IDE3LjUwOTIgOS42NTU0OSAyMC4xNjkzIDkuNjU1NDkgMjMuMDg4QzkuNjU1NTMgMjQuNjU3MSAxMC4yMDgzIDI1LjgyMTQgMTEuMDQ2MSAyNi44NjY0QzExLjkwNTYgMjcuOTM4NCAxMy4wMjQ5IDI4Ljg0NDEgMTQuMTkzNiAyOS45NTAzQzE0LjcyODggMzAuNDU3NCAxNS4yNTIxIDMxLjAwODEgMTUuNzYzOSAzMS41Mjc1QzE2LjI4MTEgMzIuMDUyNCAxNi43OTQzIDMyLjU1NDMgMTcuMzM1MiAzMi45OTE0QzE4LjQxMjMgMzMuODYxNiAxOS41NzM3IDM0LjQ1ODIgMjEuMDI0NiAzNC40NTgyQzI0LjA3NTQgMzQuNDU4MSAyNi44NDM5IDMzLjI1NSAyOC44ODQgMzEuMjk4VjMxLjI5N0MzMS4wNDY0IDI5LjIzMDggMzIuMzkzNyAyNi4yMjQ4IDMyLjM5MzggMjMuMDg4Wk0zMy4yNDUzIDIzLjA4OEMzMy4yNDUzIDI2LjM1NzcgMzEuODg3NiAyOS40ODc5IDI5LjY4NzcgMzEuNzAxM0wyOS40NzI5IDMxLjkxMjNDMjcuMjgwNyAzNC4wMTUgMjQuMzAzOSAzNS4zMDk2IDIxLjAyNDYgMzUuMzA5N0MxOS4zMTAzIDM1LjMwOTcgMTcuOTY0OSAzNC41OTQ2IDE2LjggMzMuNjUzNUMxNi4yMiAzMy4xODQ4IDE1LjY3OTIgMzIuNjU0NyAxNS4xNTc0IDMyLjEyNTFDMTQuNjMwMiAzMS41OSAxNC4xMjk3IDMxLjA2MjIgMTMuNjA4NiAzMC41Njg1VjMwLjU2OTVDMTIuNTA1OCAyOS41MjU2IDExLjI4OTMgMjguNTMxNCAxMC4zODExIDI3LjM5ODZDOS40NTEzMyAyNi4yMzg4IDguODAzOTcgMjQuODkyNCA4LjgwMzkyIDIzLjA4OEM4LjgwMzkyIDE5Ljk1MSA5Ljk4NiAxNy4wODk5IDExLjkyNzkgMTQuOTI1OUgxMS45Mjg5QzE0LjE2NTYgMTIuNDM0NSAxNy40MTI2IDEwLjg2NjQgMjEuMDI0NiAxMC44NjY0SDIxLjIwMDRMMjEuMjAzMyAxMC44NzAzQzI0LjUwOTUgMTAuOTE3OSAyNy40ODk2IDEyLjI4OTMgMjkuNjU4NCAxNC40NTkxTDMwLjA2MjcgMTQuODgzQzMyLjAzMzQgMTcuMDQ5OSAzMy4yNDUzIDE5LjkyNDIgMzMuMjQ1MyAyMy4wODhaIiBmaWxsPSIjNzRERjk4Ii8+CjxwYXRoIGQ9Ik0yOS45NDg1IDIzLjA4OTJDMjkuOTQ4NSAyMC40OTE2IDI4LjgzODggMTguMTU0MiAyNy4wNjc3IDE2LjUyMjhDMjUuNDg4IDE1LjA2OCAyMy4zODM2IDE0LjE3NzYgMjEuMDY5NiAxNC4xNjYzSDIxLjAyNDdDMTguMzY4IDE0LjE2NjMgMTUuOTgzNiAxNS4zMjYxIDE0LjM0ODkgMTcuMTY4M0MxMi45NTA0IDE4Ljc0MzcgMTIuMTAxOCAyMC44MTY4IDEyLjEwMTggMjMuMDg5MkMxMi4xMDE5IDI0LjI3MjUgMTIuNjI5IDI0Ljk3NDMgMTMuNDA1NSAyNS42MDU4QzEzLjgwNDIgMjUuOTMgMTQuMjU0MSAyNi4yMjM4IDE0LjczOTUgMjYuNTU3OUMxNS4yMTggMjYuODg3MyAxNS43MTk2IDI3LjI0OTQgMTYuMTgyOSAyNy42OTA4QzE2LjYyMiAyOC4xMDg5IDE3LjAwMjIgMjguNjAzNSAxNy4zNTc3IDI5LjA5NDFDMTcuNzE5MyAyOS41OTMgMTguMDUwMyAzMC4wNzkyIDE4LjQxMjQgMzAuNTIxOEMxOS4xMjk3IDMxLjM5ODYgMTkuODk2OSAzMi4wMTIgMjEuMDI0NyAzMi4wMTJDMjMuNDkxMiAzMi4wMTE5IDI1LjcyMzIgMzEuMDExIDI3LjMzOTEgMjkuMzkyOUMyOC45NTE4IDI3Ljc3ODEgMjkuOTQ4NSAyNS41NTAzIDI5Ljk0ODUgMjMuMDg5MlpNMzAuNjI5MiAyMy4wODkyQzMwLjYyOTEgMjUuNzM4IDI5LjU1NjYgMjguMTM3IDI3LjgyMTYgMjkuODc0M0MyNi4wODMxIDMxLjYxNTIgMjMuNjc5NCAzMi42OTI2IDIxLjAyNDcgMzIuNjkyN0MxOS41OTE2IDMyLjY5MjcgMTguNjUwMiAzMS44ODg3IDE3Ljg4NSAzMC45NTM0QzE3LjUwNjEgMzAuNDkwMiAxNy4xNTE2IDI5Ljk3MTQgMTYuODA1OSAyOS40OTQ1QzE2LjU0MjEgMjkuMTMwNCAxNi4yNzkzIDI4Ljc4NTEgMTUuOTk5MyAyOC40Nzc5TDE1LjcxMzIgMjguMTgzOUMxNS4yOTA4IDI3Ljc4MTYgMTQuODI2NCAyNy40NDQ4IDE0LjM1MzggMjcuMTE5NUMxMy44ODg0IDI2Ljc5OTEgMTMuNDAyMyAyNi40ODE3IDEyLjk3NTkgMjYuMTM1MUMxMi4xMDE5IDI1LjQyNDQgMTEuNDIwMyAyNC41NDU3IDExLjQyMDIgMjMuMDg5MkMxMS40MjAyIDIwLjY0MzkgMTIuMzM0MyAxOC40MTE1IDEzLjgzOTEgMTYuNzE2MUwxNC4xNzggMTYuMzUyOUMxNS44ODYxIDE0LjYxNjcgMTguMjUwOSAxMy41MzA3IDIwLjg3MDQgMTMuNDg5NkwyMC44NzUzIDEzLjQ4MzdIMjEuMDI1N0MyMy41MzQ2IDEzLjQ4MzggMjUuODE4MSAxNC40NDY1IDI3LjUyODYgMTYuMDIxOEMyOS40MzQgMTcuNzc2OCAzMC42MjkyIDIwLjI5MzEgMzAuNjI5MiAyMy4wODkyWiIgZmlsbD0iIzRERTI5NCIvPgo8cGF0aCBkPSJNMTM2LjIwOSAzMi41OTcxQzEzNC45NDIgMzIuNTk3MSAxMzMuOTE3IDMyLjI4ODcgMTMzLjEzNCAzMS42NzIxQzEzMi4zNTEgMzEuMDU1NCAxMzEuOTU5IDMwLjE3MjEgMTMxLjk1OSAyOS4wMjIxQzEzMS45NTkgMjcuODcyMSAxMzIuMzU5IDI2Ljk2MzcgMTMzLjE1OSAyNi4yOTcxQzEzMy45NzYgMjUuNjMwNCAxMzUuMTU5IDI1LjI5NzEgMTM2LjcwOSAyNS4yOTcxSDEzOC4zMzRDMTM5LjQ2NyAyNS4yOTcxIDE0MC4yNjcgMjUuMTQ3MSAxNDAuNzM0IDI0Ljg0NzFDMTQxLjIxNyAyNC41NDcxIDE0MS40NTkgMjQuMDk3MSAxNDEuNDU5IDIzLjQ5NzFDMTQxLjQ1OSAyMi45ODA0IDE0MS4yNDIgMjIuNTMwNCAxNDAuODA5IDIyLjE0NzFDMTQwLjM3NiAyMS43NjM3IDEzOS42OTIgMjEuNTcyMSAxMzguNzU5IDIxLjU3MjFDMTM3Ljg5MiAyMS41NzIxIDEzNy4xODQgMjEuNzg4NyAxMzYuNjM0IDIyLjIyMjFDMTM2LjEwMSAyMi42NTU0IDEzNS43NzYgMjMuMjgwNCAxMzUuNjU5IDI0LjA5NzFIMTMyLjEwOUMxMzIuMjc2IDIyLjQ2MzcgMTMyLjk0MiAyMS4xODg3IDEzNC4xMDkgMjAuMjcyMUMxMzUuMjc2IDE5LjM1NTQgMTM2LjgzNCAxOC44OTcxIDEzOC43ODQgMTguODk3MUMxNDAuNzM0IDE4Ljg5NzEgMTQyLjI1MSAxOS4zMTM3IDE0My4zMzQgMjAuMTQ3MUMxNDQuNDE3IDIwLjk2MzcgMTQ0Ljk1OSAyMi4xMTM3IDE0NC45NTkgMjMuNTk3MVYzMi4xOTcxSDE0MS41MDlMMTQxLjQ1OSAyOS4wNzIxSDE0MS4zMzRDMTQxLjA1MSAzMC4xMDU0IDE0MC40MzQgMzAuOTU1NCAxMzkuNDg0IDMxLjYyMjFDMTM4LjU1MSAzMi4yNzIxIDEzNy40NTkgMzIuNTk3MSAxMzYuMjA5IDMyLjU5NzFaTTEzNS41NTkgMjguNzIyMUMxMzUuNTU5IDI5LjIyMjEgMTM1LjczNCAyOS42MDU0IDEzNi4wODQgMjkuODcyMUMxMzYuNDUxIDMwLjEzODcgMTM2Ljk2NyAzMC4yNzIxIDEzNy42MzQgMzAuMjcyMUMxMzguMzY3IDMwLjI3MjEgMTM5LjAyNiAzMC4wOTcxIDEzOS42MDkgMjkuNzQ3MUMxNDAuMTkyIDI5LjM5NzEgMTQwLjY0MiAyOC45Mzg3IDE0MC45NTkgMjguMzcyMUMxNDEuMjkyIDI3LjgwNTQgMTQxLjQ1OSAyNy4xOTcxIDE0MS40NTkgMjYuNTQ3MVYyNS4zNzIxSDE0MS4zMzRDMTQxLjE4NCAyNS45ODg3IDE0MC44NTkgMjYuNDQ3MSAxNDAuMzU5IDI2Ljc0NzFDMTM5Ljg1OSAyNy4wMzA0IDEzOS4xNTEgMjcuMTcyMSAxMzguMjM0IDI3LjE3MjFIMTM3LjM1OUMxMzYuNzc2IDI3LjE3MjEgMTM2LjMyNiAyNy4zMTM3IDEzNi4wMDkgMjcuNTk3MUMxMzUuNzA5IDI3Ljg2MzcgMTM1LjU1OSAyOC4yMzg3IDEzNS41NTkgMjguNzIyMVoiIGZpbGw9IiNGQUY1RTkiLz4KPHBhdGggZD0iTTEyOS42ODUgMTkuMjk3MVYzMi4xOTcxSDEyNi4xMVYxOS4yOTcxSDEyOS42ODVaTTEyNS43ODUgMTUuNTIyMUMxMjUuNzg1IDE0Ljk1NTQgMTI1Ljk5MyAxNC40NzIxIDEyNi40MSAxNC4wNzIxQzEyNi44MjcgMTMuNjU1NCAxMjcuMzE4IDEzLjQ0NzEgMTI3Ljg4NSAxMy40NDcxQzEyOC40NjggMTMuNDQ3MSAxMjguOTYgMTMuNjQ3MSAxMjkuMzYgMTQuMDQ3MUMxMjkuNzYgMTQuNDQ3MSAxMjkuOTYgMTQuOTM4NyAxMjkuOTYgMTUuNTIyMUMxMjkuOTYgMTYuMDg4NyAxMjkuNzYgMTYuNTcyMSAxMjkuMzYgMTYuOTcyMUMxMjguOTYgMTcuMzcyMSAxMjguNDY4IDE3LjU3MjEgMTI3Ljg4NSAxNy41NzIxQzEyNy4zMDIgMTcuNTcyMSAxMjYuODAyIDE3LjM3MjEgMTI2LjM4NSAxNi45NzIxQzEyNS45ODUgMTYuNTcyMSAxMjUuNzg1IDE2LjA4ODcgMTI1Ljc4NSAxNS41MjIxWiIgZmlsbD0iI0ZBRjVFOSIvPgo8cGF0aCBkPSJNMTA5LjIzMiAyNS43NDcxQzEwOS4yMzIgMjQuMzgwNCAxMDkuNDU3IDIzLjE4MDQgMTA5LjkwNyAyMi4xNDcxQzExMC4zNzMgMjEuMTEzNyAxMTEuMDMyIDIwLjMxMzcgMTExLjg4MiAxOS43NDcxQzExMi43MzIgMTkuMTgwNCAxMTMuNzIzIDE4Ljg5NzEgMTE0Ljg1NyAxOC44OTcxQzExNS45MDcgMTguODk3MSAxMTYuODQgMTkuMTk3MSAxMTcuNjU3IDE5Ljc5NzFDMTE4LjQ3MyAyMC4zOTcxIDExOS4wNzMgMjEuMjIyMSAxMTkuNDU3IDIyLjI3MjFIMTE5LjYwN1YxNC42OTcxSDEyMy4xNTdWMzIuMTk3MUgxMTkuNzA3TDExOS42MDcgMjkuMjQ3MUgxMTkuNDU3QzExOS4wNTcgMzAuMjk3MSAxMTguNDQ4IDMxLjEyMjEgMTE3LjYzMiAzMS43MjIxQzExNi44MTUgMzIuMzA1NCAxMTUuODkgMzIuNTk3MSAxMTQuODU3IDMyLjU5NzFDMTEzLjcyMyAzMi41OTcxIDExMi43MzIgMzIuMzIyMSAxMTEuODgyIDMxLjc3MjFDMTExLjAzMiAzMS4yMDU0IDExMC4zNzMgMzAuNDA1NCAxMDkuOTA3IDI5LjM3MjFDMTA5LjQ1NyAyOC4zMzg3IDEwOS4yMzIgMjcuMTMwNCAxMDkuMjMyIDI1Ljc0NzFaTTExMi44MDcgMjUuNzQ3MUMxMTIuODA3IDI3LjA4MDQgMTEzLjExNSAyOC4xNDcxIDExMy43MzIgMjguOTQ3MUMxMTQuMzQ4IDI5LjczMDQgMTE1LjE3MyAzMC4xMjIxIDExNi4yMDcgMzAuMTIyMUMxMTcuMjIzIDMwLjEyMjEgMTE4LjA0IDI5Ljc4ODcgMTE4LjY1NyAyOS4xMjIxQzExOS4yOSAyOC40Mzg3IDExOS42MDcgMjcuNTcyMSAxMTkuNjA3IDI2LjUyMjFWMjQuOTk3MUMxMTkuNjA3IDIzLjkzMDQgMTE5LjI5OCAyMy4wNjM3IDExOC42ODIgMjIuMzk3MUMxMTguMDY1IDIxLjcxMzcgMTE3LjI0IDIxLjM3MjEgMTE2LjIwNyAyMS4zNzIxQzExNS4xNzMgMjEuMzcyMSAxMTQuMzQ4IDIxLjc3MjEgMTEzLjczMiAyMi41NzIxQzExMy4xMTUgMjMuMzU1NCAxMTIuODA3IDI0LjQxMzcgMTEyLjgwNyAyNS43NDcxWiIgZmlsbD0iI0ZBRjVFOSIvPgo8cGF0aCBkPSJNOTkuNTg4MiAxOS4yOTcxSDEwMy4wMzhMMTAzLjEzOCAyMy4zNDcxSDEwMy4yNjNDMTAzLjQ2MyAyMi4zMzA0IDEwMy43NTUgMjEuNTIyMSAxMDQuMTM4IDIwLjkyMjFDMTA0LjUyMiAyMC4zMDU0IDEwNS4wNjMgMTkuODQ3MSAxMDUuNzYzIDE5LjU0NzFDMTA2LjQ4IDE5LjIzMDQgMTA3LjQyMiAxOS4wNzIxIDEwOC41ODggMTkuMDcyMVYyMi4wNzIxQzEwNi43NTUgMjIuMTM4NyAxMDUuNDMgMjIuNDg4NyAxMDQuNjEzIDIzLjEyMjFDMTA0LjA5NyAyMy41MDU0IDEwMy43MjIgMjQuMDMwNCAxMDMuNDg4IDI0LjY5NzFDMTAzLjI1NSAyNS4zNjM3IDEwMy4xMzggMjYuMjEzNyAxMDMuMTM4IDI3LjI0NzFWMzIuMTk3MUg5OS41ODgyVjE5LjI5NzFaIiBmaWxsPSIjRkFGNUU5Ii8+CjxwYXRoIGQ9Ik05MC40NzQzIDMyLjU5NzFDODkuMTc0MyAzMi41OTcxIDg3Ljk4MjcgMzIuMzIyMSA4Ni44OTkzIDMxLjc3MjFDODUuODMyNyAzMS4yMDU0IDg0Ljk5MSAzMC4zOTcxIDg0LjM3NDMgMjkuMzQ3MUM4My43NTc3IDI4LjI5NzEgODMuNDQ5MyAyNy4wODA0IDgzLjQ0OTMgMjUuNjk3MUM4My40NDkzIDI0LjM0NzEgODMuNzU3NyAyMy4xNTU0IDg0LjM3NDMgMjIuMTIyMUM4NS4wMDc3IDIxLjA4ODcgODUuODU3NyAyMC4yOTcxIDg2LjkyNDMgMTkuNzQ3MUM4Ny45OTEgMTkuMTgwNCA4OS4xNzQzIDE4Ljg5NzEgOTAuNDc0MyAxOC44OTcxQzkxLjc3NDMgMTguODk3MSA5Mi45NTc3IDE5LjE4MDQgOTQuMDI0MyAxOS43NDcxQzk1LjEwNzcgMjAuMjk3MSA5NS45NTc3IDIxLjA4ODcgOTYuNTc0MyAyMi4xMjIxQzk3LjIwNzcgMjMuMTU1NCA5Ny41MjQzIDI0LjM0NzEgOTcuNTI0MyAyNS42OTcxQzk3LjUyNDMgMjcuMDgwNCA5Ny4yMDc3IDI4LjI5NzEgOTYuNTc0MyAyOS4zNDcxQzk1Ljk1NzcgMzAuMzk3MSA5NS4xMDc3IDMxLjIwNTQgOTQuMDI0MyAzMS43NzIxQzkyLjk1NzcgMzIuMzIyMSA5MS43NzQzIDMyLjU5NzEgOTAuNDc0MyAzMi41OTcxWk04Ny4wMjQzIDI1LjY5NzFDODcuMDI0MyAyNy4wNjM3IDg3LjMyNDMgMjguMTA1NCA4Ny45MjQzIDI4LjgyMjFDODguNTQxIDI5LjUzODcgODkuMzkxIDI5Ljg5NzEgOTAuNDc0MyAyOS44OTcxQzkxLjU1NzcgMjkuODk3MSA5Mi4zOTkzIDI5LjUzODcgOTIuOTk5MyAyOC44MjIxQzkzLjYxNiAyOC4xMDU0IDkzLjkyNDMgMjcuMDYzNyA5My45MjQzIDI1LjY5NzFDOTMuOTI0MyAyNC4zNjM3IDkzLjYxNiAyMy4zNDcxIDkyLjk5OTMgMjIuNjQ3MUM5Mi4zOTkzIDIxLjk0NzEgOTEuNTU3NyAyMS41OTcxIDkwLjQ3NDMgMjEuNTk3MUM4OS4zOTEgMjEuNTk3MSA4OC41NDEgMjEuOTQ3MSA4Ny45MjQzIDIyLjY0NzFDODcuMzI0MyAyMy4zNDcxIDg3LjAyNDMgMjQuMzYzNyA4Ny4wMjQzIDI1LjY5NzFaIiBmaWxsPSIjRkFGNUU5Ii8+CjxwYXRoIGQ9Ik02OC4xNDE5IDE0LjY5NzFINzEuNjkxOVYyMi4zNzIxSDcxLjg0MTlDNzIuMTkxOSAyMS4yNTU0IDcyLjc3NTIgMjAuMzk3MSA3My41OTE5IDE5Ljc5NzFDNzQuNDI1MiAxOS4xOTcxIDc1LjQyNTIgMTguODk3MSA3Ni41OTE5IDE4Ljg5NzFDNzcuNDU4NiAxOC44OTcxIDc4LjI1MDIgMTkuMDk3MSA3OC45NjY5IDE5LjQ5NzFDNzkuNzAwMiAxOS44ODA0IDgwLjI3NTIgMjAuNDQ3MSA4MC42OTE5IDIxLjE5NzFDODEuMTI1MiAyMS45NDcxIDgxLjM0MTkgMjIuODM4NyA4MS4zNDE5IDIzLjg3MjFWMzIuMTk3MUg3Ny43OTE5VjI0Ljg3MjFDNzcuNzkxOSAyMy44MjIxIDc3LjU0MTkgMjMuMDMwNCA3Ny4wNDE5IDIyLjQ5NzFDNzYuNTU4NiAyMS45NjM3IDc1LjgzMzYgMjEuNjk3MSA3NC44NjY5IDIxLjY5NzFDNzMuODgzNiAyMS42OTcxIDczLjEwODYgMjIuMDMwNCA3Mi41NDE5IDIyLjY5NzFDNzEuOTc1MiAyMy4zNjM3IDcxLjY5MTkgMjQuMjgwNCA3MS42OTE5IDI1LjQ0NzFWMzIuMTk3MUg2OC4xNDE5VjE0LjY5NzFaIiBmaWxsPSIjRkFGNUU5Ii8+CjxwYXRoIGQ9Ik01Ny43OTc4IDMyLjU5N0M1Ni4wMzExIDMyLjU5NyA1NC40ODk0IDMyLjIzMDQgNTMuMTcyOCAzMS40OTdDNTEuODcyOCAzMC43NjM3IDUwLjg2NDQgMjkuNzA1NCA1MC4xNDc4IDI4LjMyMjFDNDkuNDQ3OCAyNi45Mzg3IDQ5LjA5NzggMjUuMzA1NCA0OS4wOTc4IDIzLjQyMjFDNDkuMDk3OCAyMS41Mzg3IDQ5LjQ0NzggMTkuOTEzNyA1MC4xNDc4IDE4LjU0NzFDNTAuODY0NCAxNy4xNjM3IDUxLjg3MjggMTYuMTEzNyA1My4xNzI4IDE1LjM5N0M1NC40NzI4IDE0LjY2MzcgNTYuMDE0NCAxNC4yOTcxIDU3Ljc5NzggMTQuMjk3MUM2MC4wNjQ0IDE0LjI5NzEgNjEuOTE0NCAxNC44NzIxIDYzLjM0NzggMTYuMDIyMUM2NC43OTc4IDE3LjE1NTQgNjUuNjgxMSAxOC43MDU0IDY1Ljk5NzggMjAuNjcyMUg2Mi4wNDc4QzYxLjc4MTEgMTkuNjM4NyA2MS4yODExIDE4LjgyMjEgNjAuNTQ3OCAxOC4yMjIxQzU5LjgxNDQgMTcuNjIyMSA1OC44OTc4IDE3LjMyMjEgNTcuNzk3OCAxNy4zMjIxQzU2LjMzMTEgMTcuMzIyMSA1NS4xNzI4IDE3Ljg2MzcgNTQuMzIyOCAxOC45NDcxQzUzLjQ4OTQgMjAuMDEzNyA1My4wNzI4IDIxLjUwNTQgNTMuMDcyOCAyMy40MjIxQzUzLjA3MjggMjUuMzM4NyA1My41MDYxIDI2Ljg0NzEgNTQuMzcyOCAyNy45NDcxQzU1LjIzOTQgMjkuMDMwNCA1Ni40MjI4IDI5LjU3MjEgNTcuOTIyOCAyOS41NzIxQzU5LjEwNjEgMjkuNTcyMSA2MC4wNzI4IDI5LjE5NzEgNjAuODIyOCAyOC40NDcxQzYxLjU4OTQgMjcuNjk3MSA2Mi4wNDc4IDI2LjY5NzEgNjIuMTk3OCAyNS40NDcxSDY2LjA5NzhDNjUuOTY0NCAyNi44OTcxIDY1LjU0NzggMjguMTYzNyA2NC44NDc4IDI5LjI0NzFDNjQuMTY0NCAzMC4zMTM3IDYzLjIyMjggMzEuMTM4NyA2Mi4wMjI4IDMxLjcyMkM2MC44MjI4IDMyLjMwNTQgNTkuNDE0NCAzMi41OTcgNTcuNzk3OCAzMi41OTdaIiBmaWxsPSIjRkFGNUU5Ii8+Cjwvc3ZnPgo=\"","\"use client\";\n\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Home, FolderClosed, Users, Settings, ChevronDown,\n LayoutDashboard, Clock3, Activity, Lightbulb, Bell, Plug, BarChart3,\n FileText, Headphones, Shield, Sliders, Workflow, SquareDot,\n PanelLeftClose, PanelLeft,\n} from \"lucide-react\";\nimport { Tooltip, TooltipTrigger, TooltipContent } from \"../primitives/Tooltip\";\n\nimport chordiaLogoSvg from \"../../assets/LogoChordia.svg\";\n\n/**\n * Sidebar — collapsible navigation sidebar.\n *\n * Slot-based: pass menuItems as data, component handles rendering + expand/collapse.\n * No framework dependencies (no router, no auth, no API calls).\n *\n * Props:\n * - menuItems Array<MenuItem> Navigation items (see shape below)\n * - activeId string Currently active item id\n * - onNavigate function(href) Navigation callback\n * - collapsed boolean External collapsed state (controlled)\n * - onToggleCollapse function Toggle callback\n * - header ReactNode Optional header slot (logo, brand)\n * - footer ReactNode Optional footer slot (user, settings)\n * - width number Expanded width (default 240)\n * - collapsedWidth number Collapsed width (default 56)\n *\n * MenuItem shape:\n * - id string\n * - label string\n * - icon string (key from ICON_MAP) or ReactNode\n * - href string\n * - active boolean (override)\n * - children Array<MenuItem> (nested group)\n * - section string (section label above this item)\n */\n\nconst ICON_MAP = {\n home: Home,\n projects: FolderClosed,\n folder: FolderClosed,\n organization: Users,\n users: Users,\n dashboard: LayoutDashboard,\n history: Clock3,\n sessions: Clock3,\n monitoring: Activity,\n activity: Activity,\n insights: Lightbulb,\n notifications: Bell,\n integrations: Plug,\n settings: Settings,\n usage: BarChart3,\n docs: FileText,\n documentation: FileText,\n agents: Headphones,\n security: Shield,\n configuration: Sliders,\n workflow: Workflow,\n};\n\nfunction sidebarNavId(id) {\n if (!id) return undefined;\n return `sidebar-nav-${String(id)}`;\n}\n\nfunction resolveIcon(icon) {\n if (!icon) return SquareDot;\n if (typeof icon === \"string\") return ICON_MAP[icon.toLowerCase()] || SquareDot;\n return icon;\n}\n\nexport default function Sidebar({\n menuItems = [],\n activeId,\n onNavigate,\n collapsed: controlledCollapsed,\n onToggleCollapse,\n header,\n footer,\n width = 244,\n collapsedWidth = 56,\n expandedParentId = undefined,\n defaultExpandedParentId = null,\n onExpandedParentChange,\n singleExpand = false,\n}) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;\n const toggleCollapse = onToggleCollapse || (() => setInternalCollapsed(!internalCollapsed));\n\n const [expandedGroups, setExpandedGroups] = useState(() => {\n const initial = {};\n menuItems.forEach((item) => {\n if (item.children?.length) {\n // Auto-expand groups that contain the active item\n const hasActive = item.children.some((c) => c.id === activeId || c.active);\n initial[item.id] = hasActive;\n }\n });\n return initial;\n });\n\n const parentItemIds = useMemo(\n () => new Set(menuItems.filter((item) => item.children?.length).map((item) => item.id)),\n [menuItems]\n );\n\n const autoExpandedParentId = useMemo(() => {\n const activeParent = menuItems.find(\n (item) =>\n item.children?.length &&\n (item.id === activeId ||\n !!item.active ||\n item.children.some((c) => c.id === activeId || c.active))\n );\n return activeParent?.id ?? null;\n }, [menuItems, activeId]);\n\n const [internalExpandedParentId, setInternalExpandedParentId] = useState(() => {\n const initialParentIds = new Set(\n menuItems.filter((item) => item.children?.length).map((item) => item.id)\n );\n if (defaultExpandedParentId != null && initialParentIds.has(defaultExpandedParentId)) {\n return defaultExpandedParentId;\n }\n const initialActiveParent = menuItems.find(\n (item) =>\n item.children?.length &&\n (item.id === activeId ||\n !!item.active ||\n item.children.some((c) => c.id === activeId || c.active))\n );\n return initialActiveParent?.id ?? null;\n });\n\n const isExpandedParentControlled = expandedParentId !== undefined;\n const currentExpandedParentId = isExpandedParentControlled\n ? (expandedParentId ?? null)\n : (parentItemIds.has(internalExpandedParentId) ? internalExpandedParentId : (autoExpandedParentId ?? null));\n\n useEffect(() => {\n if (isExpandedParentControlled || !singleExpand) return;\n const isMissingOrInvalid =\n internalExpandedParentId == null || !parentItemIds.has(internalExpandedParentId);\n if (isMissingOrInvalid) {\n setInternalExpandedParentId(autoExpandedParentId ?? null);\n }\n }, [\n autoExpandedParentId,\n isExpandedParentControlled,\n singleExpand,\n internalExpandedParentId,\n parentItemIds,\n ]);\n\n const setExpandedParent = (nextId) => {\n if (!isExpandedParentControlled) setInternalExpandedParentId(nextId);\n onExpandedParentChange?.(nextId);\n };\n\n const toggleGroup = (id) => {\n if (singleExpand) {\n const isExpanded = currentExpandedParentId === id;\n setExpandedParent(isExpanded ? null : id);\n return;\n }\n setExpandedGroups((prev) => ({ ...prev, [id]: !prev[id] }));\n };\n\n const isGroupExpanded = (id) => {\n if (singleExpand) return currentExpandedParentId === id;\n return !!expandedGroups[id];\n };\n\n const handleGroupPrimaryClick = (item) => {\n if (singleExpand) {\n if (currentExpandedParentId !== item.id) setExpandedParent(item.id);\n onNavigate?.(item.href || item.id);\n return;\n }\n toggleGroup(item.id);\n };\n\n const currentWidth = collapsed ? collapsedWidth : width;\n\n return (\n <nav\n style={{\n width: currentWidth,\n minWidth: currentWidth,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n padding: collapsed ? \"0\" : \"0 0 24px 24px\",\n gap: 24,\n background: \"var(--Background-Inverse, #0B0B0B)\",\n fontFamily: \"var(--font-sans)\",\n transition: \"width 0.2s ease, min-width 0.2s ease\",\n overflow: \"hidden\",\n flexShrink: 0,\n }}\n >\n {/* Header + Collapse toggle in one row */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: collapsed ? \"center\" : \"space-between\",\n padding: collapsed ? \"12px 0\" : \"12px 0 0\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n {!collapsed && (\n <div style={{ flexShrink: 0 }}>\n {header !== undefined ? header : <img src={chordiaLogoSvg} alt=\"Chordia\" style={{ height: 28, objectFit: \"contain\" }} />}\n </div>\n )}\n <button\n onClick={toggleCollapse}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n borderRadius: \"var(--radius-sm)\",\n border: \"none\",\n background: \"transparent\",\n color: \"rgba(255, 255, 255, 0.5)\",\n cursor: \"pointer\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n flexShrink: 0,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.8)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.5)\";\n }}\n >\n {collapsed ? <PanelLeft size={16} /> : <PanelLeftClose size={16} />}\n </button>\n </div>\n\n {/* Menu items */}\n <div\n className=\"custom-thin-scrollbar\"\n style={{\n flex: 1,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n padding: collapsed ? \"0 8px\" : \"0\",\n width: \"100%\",\n }}\n >\n {menuItems.map((item, idx) => (\n <React.Fragment key={item.id || idx}>\n {/* Section label */}\n {item.section && !collapsed && (\n <div\n style={{\n fontSize: \"var(--text-xs)\",\n fontWeight: 650,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n color: \"rgba(255, 255, 255, 0.35)\",\n padding: \"16px 8px 6px\",\n lineHeight: 1,\n }}\n >\n {item.section}\n </div>\n )}\n\n {item.children?.length ? (\n <SidebarGroup\n item={item}\n activeId={activeId}\n expanded={isGroupExpanded(item.id)}\n onPrimaryClick={() => handleGroupPrimaryClick(item)}\n onToggleOnly={() => toggleGroup(item.id)}\n onNavigate={onNavigate}\n collapsed={collapsed}\n singleExpand={singleExpand}\n />\n ) : (\n <SidebarItem\n item={item}\n active={item.id === activeId || item.active}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Footer slot */}\n {footer && !collapsed && (\n <div\n style={{\n padding: \"12px 16px\",\n borderTop: \"1px solid rgba(255, 255, 255, 0.08)\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n {footer}\n </div>\n )}\n </nav>\n );\n}\n\nfunction SidebarItem({ item, active, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const isReactIcon = typeof item.icon !== \"string\" && typeof item.icon !== \"undefined\";\n const labelRef = useRef(null);\n const [isLabelTruncated, setIsLabelTruncated] = useState(false);\n\n useEffect(() => {\n if (collapsed) return;\n\n const checkTruncation = () => {\n if (!labelRef.current) return;\n setIsLabelTruncated(labelRef.current.scrollWidth > labelRef.current.clientWidth);\n };\n\n checkTruncation();\n window.addEventListener(\"resize\", checkTruncation);\n return () => window.removeEventListener(\"resize\", checkTruncation);\n }, [item.label, collapsed]);\n\n return (\n <button\n id={sidebarNavId(item.id)}\n onClick={() => onNavigate?.(item.href || item.id)}\n title={collapsed || isLabelTruncated ? item.label : undefined}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: collapsed ? 0 : 12,\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n width: \"100%\",\n padding: collapsed ? \"10px 0\" : \"12px 24px 12px 12px\",\n borderRadius: active ? \"4px 0 0 4px\" : \"4px\",\n borderRight: active ? \"2px solid #00A66E\" : \"2px solid transparent\",\n borderTop: \"none\",\n borderBottom: \"none\",\n borderLeft: \"none\",\n background: active ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: active ? \"var(--Brand-400, #33B88B)\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: 500,\n fontSize: \"12px\",\n fontStyle: \"normal\",\n lineHeight: \"120%\",\n textTransform: \"uppercase\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.1s ease, border-color 0.15s ease\",\n marginBottom: 2,\n }}\n onMouseEnter={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n {isReactIcon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{item.icon}</span>\n ) : (\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n cursor: \"pointer\",\n }}\n onClick={(e) => {\n e.stopPropagation();\n onToggleOnly();\n }}\n />\n )}\n {!collapsed && (\n <span\n ref={labelRef}\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n )}\n </button>\n );\n}\n\nfunction SidebarGroup({\n item,\n activeId,\n expanded,\n onPrimaryClick,\n onToggleOnly,\n onNavigate,\n collapsed,\n singleExpand,\n}) {\n const Icon = resolveIcon(item.icon);\n const hasActiveGroupItem =\n item.id === activeId || !!item.active || item.children?.some((c) => c.id === activeId || c.active);\n const groupLabelRef = useRef(null);\n const [isGroupLabelTruncated, setIsGroupLabelTruncated] = useState(false);\n\n useEffect(() => {\n if (collapsed) return;\n\n const checkTruncation = () => {\n if (!groupLabelRef.current) return;\n setIsGroupLabelTruncated(groupLabelRef.current.scrollWidth > groupLabelRef.current.clientWidth);\n };\n\n checkTruncation();\n window.addEventListener(\"resize\", checkTruncation);\n return () => window.removeEventListener(\"resize\", checkTruncation);\n }, [item.label, collapsed]);\n\n if (collapsed) {\n // In collapsed mode, show just the group icon\n return (\n <button\n id={sidebarNavId(item.id)}\n onClick={onPrimaryClick}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n padding: \"10px 0\",\n borderRadius: \"4px\",\n border: \"none\",\n background: hasActiveGroupItem ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: hasActiveGroupItem ? \"var(--Brand-400, #33B88B)\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n cursor: \"pointer\",\n marginBottom: 2,\n transition: \"background 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n if (!hasActiveGroupItem) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!hasActiveGroupItem) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n <Icon\n size={18}\n style={{ color: \"inherit\" }}\n />\n </button>\n );\n }\n\n return (\n <div style={{ marginBottom: 2 }}>\n {/* Group header */}\n <button\n id={sidebarNavId(item.id)}\n onClick={onPrimaryClick}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n width: \"100%\",\n padding: \"12px 24px 12px 12px\",\n borderRadius: \"4px\",\n border: \"none\",\n background: \"transparent\",\n color: hasActiveGroupItem ? \"var(--Brand-400, #33B88B)\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: 700,\n fontSize: \"12px\",\n fontStyle: \"normal\",\n lineHeight: \"120%\",\n textTransform: \"uppercase\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n if (!hasActiveGroupItem) e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n else e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }}\n >\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n {isGroupLabelTruncated ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n ref={groupLabelRef}\n style={{\n flex: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"max-w-[28ch] whitespace-normal break-words\">\n {item.label}\n </TooltipContent>\n </Tooltip>\n ) : (\n <span\n ref={groupLabelRef}\n style={{\n flex: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n )}\n <ChevronDown\n size={14}\n onClick={(e) => {\n e.stopPropagation();\n onToggleOnly();\n }}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n opacity: 0.7,\n transform: expanded ? \"rotate(0deg)\" : \"rotate(-90deg)\",\n transition: \"transform 0.2s ease\",\n cursor: singleExpand ? \"pointer\" : \"inherit\",\n }}\n />\n </button>\n\n {/* Children */}\n {expanded && (\n <div style={{ paddingLeft: 18, marginTop: 2 }}>\n {item.children.map((child, idx) => (\n <SidebarItem\n key={child.id || idx}\n item={child}\n active={child.id === activeId || child.active}\n onNavigate={onNavigate}\n collapsed={false}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { LogOut, ChevronDown } from 'lucide-react';\n\n// Stable avatar colors — warm/neutral palette, no purple\nconst AVATAR_COLORS = [\n '#5a8a6e', // sage green\n '#b07d4f', // warm amber\n '#7a8fa6', // slate blue\n '#c47a5a', // terracotta\n '#6a9a8a', // teal\n '#a0785a', // clay\n '#5a7a9a', // steel blue\n '#9a7a5a', // caramel\n];\n\nfunction avatarColor(name) {\n if (!name) return AVATAR_COLORS[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\n/**\n * NavigationBar — top-level app header bar.\n *\n * Slot-based composition: pass children for center content, trailing for right content,\n * or use the built-in user/switcher/actions props for the standard Chordia layout.\n *\n * Props:\n * - logo ReactNode Left-side branding (defaults to \"Chordia\" wordmark)\n * - title string App title shown after logo\n * - userName string User's display name\n * - userEmail string Fallback if no userName\n * - userRole string Role badge (e.g. \"Admin\")\n * - onSignOut function Sign out callback (renders sign out button)\n * - children ReactNode Center slot — switchers, breadcrumbs, tabs, anything\n * - trailing ReactNode Right slot — status indicators, extra actions\n * - userMenu ReactNode Optional custom user menu (replaces built-in user block)\n * - height number Bar height in px (default 48)\n * - style object Style overrides on the root element\n */\nexport default function NavigationBar({\n logo,\n title,\n userName,\n userEmail,\n userInitials,\n userRole,\n onSignOut,\n children,\n trailing,\n userMenu,\n height = 48,\n style,\n}) {\n const displayName = userName || userEmail || '';\n const initials = userInitials || getInitials(displayName);\n\n return (\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 20px',\n height,\n borderBottom: '1px solid var(--border)',\n background: 'var(--primary-foreground)',\n flexShrink: 0,\n fontFamily: 'var(--font-sans)',\n position: 'sticky',\n top: 0,\n zIndex: 1000,\n ...style,\n }}\n >\n {/* ─── Left: Logo + Title ─── */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {logo !== undefined ? logo : (\n <span style={{\n fontSize: 'var(--text-lg)',\n fontWeight: 700,\n fontFamily: 'var(--font-display)',\n color: 'var(--text-ink)',\n letterSpacing: '-0.01em',\n }}>\n Chordia\n </span>\n )}\n {title && (\n <>\n <span style={{\n width: 1,\n height: 18,\n background: 'var(--border)',\n flexShrink: 0,\n }} />\n <span style={{\n fontSize: 'var(--text-md)',\n fontWeight: 500,\n color: 'var(--text-muted)',\n }}>\n {title}\n </span>\n </>\n )}\n </div>\n\n {/* ─── Center: Slot for switchers, breadcrumbs, tabs ─── */}\n {children && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flex: 1,\n justifyContent: 'center',\n minWidth: 0,\n }}>\n {children}\n </div>\n )}\n\n {/* ─── Right: User + trailing ─── */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n flexShrink: 0,\n }}\n >\n {trailing}\n\n {userMenu\n ? userMenu\n : displayName && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {/* Initials avatar */}\n <div style={{\n width: 30,\n height: 30,\n borderRadius: '50%',\n background: avatarColor(displayName),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 11,\n fontWeight: 600,\n color: '#fff',\n letterSpacing: '0.02em',\n lineHeight: 1,\n }}>\n {initials}\n </span>\n </div>\n\n {/* Name + role */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={{\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n lineHeight: 1.2,\n }}>\n {displayName}\n </span>\n {userRole && (\n <span style={{\n fontSize: 'var(--text-xs)',\n color: 'var(--text-muted)',\n lineHeight: 1.2,\n }}>\n {userRole}\n </span>\n )}\n </div>\n\n {/* Sign out */}\n {onSignOut && (\n <button\n onClick={onSignOut}\n title=\"Sign out\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n border: 'none',\n background: 'transparent',\n color: 'var(--text-faint)',\n cursor: 'pointer',\n transition: 'background 0.15s ease, color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = 'var(--hover-warm)';\n e.currentTarget.style.color = 'var(--text-muted)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = 'transparent';\n e.currentTarget.style.color = 'var(--text-faint)';\n }}\n >\n <LogOut size={14} />\n </button>\n )}\n </div>\n )}\n </div>\n </header>\n );\n}\n\n/**\n * NavPill — compact switcher button for use inside NavigationBar.\n *\n * Props:\n * - label string Display text\n * - color string Rail color token (e.g. \"var(--rail-discovery)\")\n * - active boolean Whether dropdown is open\n * - onClick function Toggle callback\n */\nexport function NavPill({ label, color = 'var(--text-muted)', active, onClick }) {\n return (\n <button\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n fontSize: 'var(--text-sm)',\n fontWeight: 500,\n fontFamily: 'var(--font-sans)',\n padding: '4px 10px',\n borderRadius: 'var(--radius-sm)',\n border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`,\n background: `color-mix(in srgb, ${color} 10%, transparent)`,\n color: color,\n cursor: 'pointer',\n transition: 'background 0.15s ease, border-color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 18%, transparent)`;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 10%, transparent)`;\n }}\n >\n {label}\n <ChevronDown\n size={12}\n style={{\n transform: active ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n opacity: 0.7,\n }}\n />\n </button>\n );\n}\n\n/**\n * NavDropdown — dropdown panel that attaches to a NavPill.\n * Wrap around NavPill and the dropdown content.\n *\n * Props:\n * - open boolean Whether dropdown is visible\n * - onClose function Close callback\n * - children ReactNode Dropdown items\n * - align string \"left\" | \"right\" (default \"left\")\n */\nexport function NavDropdown({ open, onClose, children, align = 'left' }) {\n if (!open) return null;\n return (\n <>\n <div\n onClick={onClose}\n style={{ position: 'fixed', inset: 0, zIndex: 99, background: 'rgba(0,0,0,0.03)' }}\n />\n <div style={{\n position: 'absolute',\n top: '100%',\n [align === 'right' ? 'right' : 'left']: 0,\n marginTop: 4,\n zIndex: 100,\n background: '#fff',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n padding: 4,\n minWidth: 200,\n maxHeight: 280,\n overflowY: 'auto',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}>\n {children}\n </div>\n </>\n );\n}\n\n/**\n * NavDropdownItem — single item inside NavDropdown.\n *\n * Props:\n * - label string\n * - active boolean\n * - onClick function\n */\nexport function NavDropdownItem({ label, active, onClick }) {\n return (\n <div\n onClick={onClick}\n style={{\n padding: '8px 10px',\n borderRadius: 'var(--radius-sm)',\n cursor: 'pointer',\n fontSize: 'var(--text-sm)',\n color: active ? 'var(--text-ink)' : 'var(--text-base)',\n fontWeight: active ? 600 : 400,\n fontFamily: 'var(--font-sans)',\n background: active ? 'var(--hover-warm)' : 'transparent',\n transition: 'background 0.1s ease',\n }}\n onMouseEnter={(e) => {\n if (!active) e.currentTarget.style.background = 'var(--hover-warm-subtle)';\n }}\n onMouseLeave={(e) => {\n if (!active) e.currentTarget.style.background = 'transparent';\n }}\n >\n {label}\n </div>\n );\n}\n\n/**\n * StatusIndicator — connection/status pill for trailing slot.\n *\n * Props:\n * - connected boolean\n * - label string (optional, defaults to Connected/Disconnected)\n */\nexport function StatusIndicator({ connected, label }) {\n const text = label || (connected ? 'Connected' : 'Disconnected');\n return (\n <span style={{\n fontSize: 'var(--text-xs)',\n fontFamily: 'var(--font-sans)',\n padding: '3px 10px',\n borderRadius: 12,\n border: `1px solid ${connected ? 'var(--state-present)' : 'var(--border)'}`,\n color: connected ? 'var(--state-present)' : 'var(--text-faint)',\n background: connected ? 'rgba(37,163,114,0.08)' : 'transparent',\n transition: 'all 0.2s ease',\n }}>\n {text}\n </span>\n );\n}\n\nfunction getInitials(name) {\n if (!name) return '?';\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n}\n"],"names":["chordiaLogoSvg","ICON_MAP","Home","FolderClosed","Users","LayoutDashboard","Clock3","Activity","Lightbulb","Bell","Plug","Settings","BarChart3","FileText","Headphones","Shield","Sliders","Workflow","sidebarNavId","id","resolveIcon","icon","SquareDot","Sidebar","menuItems","activeId","onNavigate","controlledCollapsed","onToggleCollapse","header","footer","width","collapsedWidth","expandedParentId","defaultExpandedParentId","onExpandedParentChange","singleExpand","internalCollapsed","setInternalCollapsed","useState","collapsed","toggleCollapse","expandedGroups","setExpandedGroups","initial","item","_a","hasActive","c","parentItemIds","useMemo","autoExpandedParentId","activeParent","internalExpandedParentId","setInternalExpandedParentId","initialParentIds","initialActiveParent","isExpandedParentControlled","currentExpandedParentId","useEffect","setExpandedParent","nextId","toggleGroup","prev","isGroupExpanded","handleGroupPrimaryClick","currentWidth","jsxs","jsx","e","PanelLeft","PanelLeftClose","idx","React","SidebarGroup","SidebarItem","active","Icon","isReactIcon","labelRef","useRef","isLabelTruncated","setIsLabelTruncated","checkTruncation","expanded","onPrimaryClick","onToggleOnly","hasActiveGroupItem","groupLabelRef","isGroupLabelTruncated","setIsGroupLabelTruncated","Tooltip","TooltipTrigger","TooltipContent","ChevronDown","child","AVATAR_COLORS","avatarColor","name","hash","i","NavigationBar","logo","title","userName","userEmail","userInitials","userRole","onSignOut","children","trailing","userMenu","height","style","displayName","initials","getInitials","Fragment","LogOut","NavPill","label","color","onClick","NavDropdown","open","onClose","align","NavDropdownItem","StatusIndicator","connected","parts"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");require("react");const r=require("lucide-react"),p={feature:{railColor:"#7B68A6",icon:e.jsx(r.Sparkles,{size:16,strokeWidth:2.5}),label:"New Feature"},issue:{railColor:"#C98A5A",icon:e.jsx(r.AlertCircle,{size:16,strokeWidth:2.5}),label:"Known Issue"},maintenance:{railColor:"#8B9D6F",icon:e.jsx(r.Wrench,{size:16,strokeWidth:2.5}),label:"Maintenance"},announcement:{railColor:"#6B7C93",icon:e.jsx(r.Info,{size:16,strokeWidth:2.5}),label:"Announcement"}};function x({type:n,title:l,message:o,timestamp:a,isRead:s=!1,onDismiss:i,onClick:d}){const t=p[n]||p.announcement;return e.jsxs("div",{onClick:d,style:{position:"relative",background:s?"#FFFFFF":"rgba(244, 241, 230, 0.4)",border:"1px solid rgba(30, 33, 37, 0.10)",borderRadius:"6px",padding:"12px 16px",paddingLeft:"20px",display:"flex",flexDirection:"column",gap:"6px",cursor:d?"pointer":"default",transition:"all 0.15s ease",overflow:"hidden"},className:d?"hover:border-[rgba(30,33,37,0.18)]":"",children:[e.jsx("div",{style:{position:"absolute",left:0,top:0,bottom:0,width:"4px",background:t.railColor}}),e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"12px"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flex:1,minWidth:0},children:[e.jsx("h4",{style:{fontSize:"13px",fontWeight:650,color:"rgba(30, 33, 37, 0.92)",letterSpacing:"-0.01em",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:l,"aria-label":l,children:l}),e.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:"4px",padding:"2px 6px",borderRadius:"3px",background:`${t.railColor}10`,border:`1px solid ${t.railColor}25`,fontSize:"10px",fontWeight:600,letterSpacing:"0.01em",color:t.railColor,flexShrink:0},children:[t.icon,e.jsx("span",{style:{whiteSpace:"nowrap"},children:t.label})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[!s&&e.jsx("div",{style:{width:"5px",height:"5px",borderRadius:"50%",background:t.railColor,flexShrink:0}}),e.jsx("span",{style:{fontSize:"11px",color:"rgba(30, 33, 37, 0.52)",fontWeight:500,whiteSpace:"nowrap"},children:a})]}),i&&e.jsx("button",{onClick:c=>{c.stopPropagation(),i()},style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"4px",border:"none",background:"transparent",cursor:"pointer",color:"rgba(30, 33, 37, 0.35)",transition:"color 0.15s ease",borderRadius:"3px"},className:"hover:bg-[rgba(30,33,37,0.05)] hover:text-[rgba(30,33,37,0.65)]",children:e.jsx(r.X,{size:14,strokeWidth:2.5})})]})]}),e.jsx("p",{style:{fontSize:"12px",lineHeight:1.45,color:"rgba(30, 33, 37, 0.65)",margin:0},children:o})]})}function g({notifications:n,onDismiss:l,onMarkAllRead:o,onNotificationClick:a}){const s=n.filter(i=>!i.isRead).length;return e.jsxs("div",{style:{background:"#FFFFFF",border:"1px solid rgba(30, 33, 37, 0.12)",borderRadius:"12px",width:"100%",maxWidth:"560px",minWidth:"600px",boxShadow:"0 6px 24px rgba(0, 0, 0, 0.08)",display:"flex",flexDirection:"column",maxHeight:"600px",overflow:"hidden"},children:[e.jsxs("div",{style:{padding:"16px 20px",borderBottom:"1px solid rgba(30, 33, 37, 0.10)",display:"flex",alignItems:"center",justifyContent:"space-between",flexShrink:0,background:"#FFFFFF"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"10px"},children:[e.jsx(r.Bell,{size:18,strokeWidth:2.5,style:{color:"rgba(30, 33, 37, 0.65)"}}),e.jsx("h3",{style:{fontSize:"15px",fontWeight:650,color:"rgba(30, 33, 37, 0.92)",letterSpacing:"-0.01em"},children:"Notifications"}),s>0&&e.jsx("div",{style:{padding:"2px 8px",borderRadius:"12px",background:"rgba(107, 124, 147, 0.12)",fontSize:"11px",fontWeight:650,color:"#6B7C93"},children:s})]}),s>0&&o&&e.jsxs("button",{onClick:o,style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px 12px",border:"1px solid rgba(30, 33, 37, 0.15)",borderRadius:"6px",background:"transparent",fontSize:"13px",fontWeight:600,color:"rgba(30, 33, 37, 0.65)",cursor:"pointer",transition:"all 0.15s ease"},className:"interactive hover:bg-warm hover:border-hover",children:[e.jsx(r.Check,{size:14,strokeWidth:2.5}),"Mark all read"]})]}),e.jsx("div",{style:{padding:"16px",display:"flex",flexDirection:"column",gap:"12px",overflowY:"auto",flex:1},className:"custom-thin-scrollbar-library",children:n.length===0?e.jsxs("div",{style:{padding:"40px 20px",textAlign:"center",color:"rgba(30, 33, 37, 0.42)"},children:[e.jsx(r.Bell,{size:32,strokeWidth:1.5,style:{margin:"0 auto 12px",opacity:.3}}),e.jsx("p",{style:{fontSize:"13px",fontWeight:500},children:"No notifications"})]}):n.map(i=>e.jsx(x,{type:i.type,title:i.title,message:i.message,timestamp:i.timestamp,isRead:i.isRead,onDismiss:l?()=>l(i.id):void 0,onClick:a?()=>a(i.id):void 0},i.id))})]})}exports.NotificationItem=x;exports.NotificationPanel=g;
|
|
2
2
|
//# sourceMappingURL=notifications.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"notifications.cjs.js","sources":["../../src/components/notifications/NotificationItem.jsx","../../src/components/notifications/NotificationPanel.jsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { X, Sparkles, AlertCircle, Wrench, Info } from \"lucide-react\";\n\n/**\n * NotificationItem Component\n * Displays a single notification item with type, title, message, timestamp, and actions.\n * \n * @param {Object} props - Component props\n * @param {string} props.type - Notification type: 'feature', 'issue', 'maintenance', or 'announcement'\n * @param {string} props.title - Notification title\n * @param {string} props.message - Notification message\n * @param {string} props.timestamp - Timestamp string\n * @param {boolean} props.isRead - Whether the notification is read\n * @param {Function} props.onDismiss - Callback when dismiss button is clicked\n * @param {Function} props.onClick - Callback when notification is clicked\n */\nconst notificationConfig = {\n feature: {\n railColor: \"#7B68A6\",\n icon: <Sparkles size={16} strokeWidth={2.5} />,\n label: \"New Feature\",\n },\n issue: {\n railColor: \"#C98A5A\",\n icon: <AlertCircle size={16} strokeWidth={2.5} />,\n label: \"Known Issue\",\n },\n maintenance: {\n railColor: \"#8B9D6F\",\n icon: <Wrench size={16} strokeWidth={2.5} />,\n label: \"Maintenance\",\n },\n announcement: {\n railColor: \"#6B7C93\",\n icon: <Info size={16} strokeWidth={2.5} />,\n label: \"Announcement\",\n },\n};\n\nexport default function NotificationItem({\n type,\n title,\n message,\n timestamp,\n isRead = false,\n onDismiss,\n onClick,\n}) {\n const config = notificationConfig[type] || notificationConfig.announcement;\n\n return (\n <div\n onClick={onClick}\n style={{\n position: \"relative\",\n background: isRead ? \"#FFFFFF\" : \"rgba(244, 241, 230, 0.4)\",\n border: \"1px solid rgba(30, 33, 37, 0.10)\",\n borderRadius: \"6px\",\n padding: \"12px 16px\",\n paddingLeft: \"20px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\",\n cursor: onClick ? \"pointer\" : \"default\",\n transition: \"all 0.15s ease\",\n overflow: \"hidden\",\n }}\n className={onClick ? \"hover:border-[rgba(30,33,37,0.18)]\" : \"\"}\n >\n {/* Rail */}\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n bottom: 0,\n width: \"4px\",\n background: config.railColor,\n }}\n />\n\n {/* Line 1: Title + Type badge + Timestamp + Dismiss */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"12px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n flex: 1,\n minWidth: 0,\n }}\n >\n {/* Title */}\n <h4\n style={{\n fontSize: \"13px\",\n fontWeight: 650,\n color: \"rgba(30, 33, 37, 0.92)\",\n letterSpacing: \"-0.01em\",\n flex: 1,\n minWidth: 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={title}\n aria-label={title}\n >\n {title}\n </h4>\n {/* Type Badge */}\n <div\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"2px 6px\",\n borderRadius: \"3px\",\n background: `${config.railColor}10`,\n border: `1px solid ${config.railColor}25`,\n fontSize: \"10px\",\n fontWeight: 600,\n letterSpacing: \"0.01em\",\n color: config.railColor,\n flexShrink: 0,\n }}\n >\n {config.icon}\n <span style={{ whiteSpace: \"nowrap\" }}>{config.label}</span>\n </div>\n </div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n flexShrink: 0,\n }}\n >\n {/* Timestamp with colored dot (only for unread) */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n }}\n >\n {!isRead && (\n <div\n style={{\n width: \"5px\",\n height: \"5px\",\n borderRadius: \"50%\",\n background: config.railColor,\n flexShrink: 0,\n }}\n />\n )}\n <span\n style={{\n fontSize: \"11px\",\n color: \"rgba(30, 33, 37, 0.52)\",\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n }}\n >\n {timestamp}\n </span>\n </div>\n {/* Dismiss button */}\n {onDismiss && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onDismiss();\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"4px\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n color: \"rgba(30, 33, 37, 0.35)\",\n transition: \"color 0.15s ease\",\n borderRadius: \"3px\",\n }}\n className=\"hover:bg-[rgba(30,33,37,0.05)] hover:text-[rgba(30,33,37,0.65)]\"\n >\n <X size={14} strokeWidth={2.5} />\n </button>\n )}\n </div>\n </div>\n\n {/* Line 2: Message */}\n <p\n style={{\n fontSize: \"12px\",\n lineHeight: 1.45,\n color: \"rgba(30, 33, 37, 0.65)\",\n margin: 0,\n }}\n >\n {message}\n </p>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Bell, Check } from \"lucide-react\";\nimport NotificationItem from \"./NotificationItem\";\n\n/**\n * NotificationPanel Component\n * Displays a panel of notifications with header, list, and actions.\n * \n * @param {Object} props - Component props\n * @param {Array} props.notifications - Array of notification objects\n * @param {string} props.notifications[].id - Notification ID\n * @param {string} props.notifications[].type - Notification type: 'feature', 'issue', 'maintenance', or 'announcement'\n * @param {string} props.notifications[].title - Notification title\n * @param {string} props.notifications[].message - Notification message\n * @param {string} props.notifications[].timestamp - Timestamp string\n * @param {boolean} props.notifications[].isRead - Whether the notification is read\n * @param {Function} props.onDismiss - Callback when dismiss button is clicked (receives id)\n * @param {Function} props.onMarkAllRead - Callback when mark all read button is clicked\n * @param {Function} props.onNotificationClick - Callback when notification is clicked (receives id)\n */\nexport default function NotificationPanel({\n notifications,\n onDismiss,\n onMarkAllRead,\n onNotificationClick,\n}) {\n const unreadCount = notifications.filter((n) => !n.isRead).length;\n\n return (\n <div\n style={{\n background: \"#FFFFFF\",\n border: \"1px solid rgba(30, 33, 37, 0.12)\",\n borderRadius: \"12px\",\n width: \"100%\",\n maxWidth: \"560px\",\n minWidth: \"600px\",\n boxShadow: \"0 6px 24px rgba(0, 0, 0, 0.08)\",\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"600px\",\n overflow: \"hidden\",\n // position: \"absolute\",\n // top: \"3rem\",\n // right: \"0\",\n // zIndex: 1000,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: \"16px 20px\",\n borderBottom: \"1px solid rgba(30, 33, 37, 0.10)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexShrink: 0,\n background: \"#FFFFFF\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"10px\" }}>\n <Bell size={18} strokeWidth={2.5} style={{ color: \"rgba(30, 33, 37, 0.65)\" }} />\n <h3\n style={{\n fontSize: \"15px\",\n fontWeight: 650,\n color: \"rgba(30, 33, 37, 0.92)\",\n letterSpacing: \"-0.01em\",\n }}\n >\n Notifications\n </h3>\n {unreadCount > 0 && (\n <div\n style={{\n padding: \"2px 8px\",\n borderRadius: \"12px\",\n background: \"rgba(107, 124, 147, 0.12)\",\n fontSize: \"11px\",\n fontWeight: 650,\n color: \"#6B7C93\",\n }}\n >\n {unreadCount}\n </div>\n )}\n </div>\n {unreadCount > 0 && onMarkAllRead && (\n <button\n onClick={onMarkAllRead}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n padding: \"8px 12px\",\n border: \"1px solid rgba(30, 33, 37, 0.15)\",\n borderRadius: \"6px\",\n background: \"transparent\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"rgba(30, 33, 37, 0.65)\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n }}\n className=\"interactive hover:bg-warm hover:border-hover\"\n >\n <Check size={14} strokeWidth={2.5} />\n Mark all read\n </button>\n )}\n </div>\n\n {/* Notifications list */}\n <div\n style={{\n padding: \"16px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"12px\",\n overflowY: \"auto\",\n flex: 1,\n }}\n className=\"custom-thin-scrollbar-library\"\n >\n {notifications.length === 0 ? (\n <div\n style={{\n padding: \"40px 20px\",\n textAlign: \"center\",\n color: \"rgba(30, 33, 37, 0.42)\",\n }}\n >\n <Bell size={32} strokeWidth={1.5} style={{ margin: \"0 auto 12px\", opacity: 0.3 }} />\n <p style={{ fontSize: \"13px\", fontWeight: 500 }}>No notifications</p>\n </div>\n ) : (\n notifications.map((notification) => (\n <NotificationItem\n key={notification.id}\n type={notification.type}\n title={notification.title}\n message={notification.message}\n timestamp={notification.timestamp}\n isRead={notification.isRead}\n onDismiss={onDismiss ? () => onDismiss(notification.id) : undefined}\n onClick={onNotificationClick ? () => onNotificationClick(notification.id) : undefined}\n />\n ))\n )}\n </div>\n </div>\n );\n}\n\n"],"names":["notificationConfig","jsx","Sparkles","AlertCircle","Wrench","Info","NotificationItem","type","title","message","timestamp","isRead","onDismiss","onClick","config","jsxs","e","X","NotificationPanel","notifications","onMarkAllRead","onNotificationClick","unreadCount","n","Bell","Check","notification"],"mappings":"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"}
|
|
@@ -1,6 +1,371 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxs as i, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import { X as g, Sparkles as h, AlertCircle as b, Wrench as f, Info as m, Bell as p, Check as u } from "lucide-react";
|
|
4
|
+
const c = {
|
|
5
|
+
feature: {
|
|
6
|
+
railColor: "#7B68A6",
|
|
7
|
+
icon: /* @__PURE__ */ e(h, { size: 16, strokeWidth: 2.5 }),
|
|
8
|
+
label: "New Feature"
|
|
9
|
+
},
|
|
10
|
+
issue: {
|
|
11
|
+
railColor: "#C98A5A",
|
|
12
|
+
icon: /* @__PURE__ */ e(b, { size: 16, strokeWidth: 2.5 }),
|
|
13
|
+
label: "Known Issue"
|
|
14
|
+
},
|
|
15
|
+
maintenance: {
|
|
16
|
+
railColor: "#8B9D6F",
|
|
17
|
+
icon: /* @__PURE__ */ e(f, { size: 16, strokeWidth: 2.5 }),
|
|
18
|
+
label: "Maintenance"
|
|
19
|
+
},
|
|
20
|
+
announcement: {
|
|
21
|
+
railColor: "#6B7C93",
|
|
22
|
+
icon: /* @__PURE__ */ e(m, { size: 16, strokeWidth: 2.5 }),
|
|
23
|
+
label: "Announcement"
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
function y({
|
|
27
|
+
type: n,
|
|
28
|
+
title: l,
|
|
29
|
+
message: a,
|
|
30
|
+
timestamp: d,
|
|
31
|
+
isRead: o = !1,
|
|
32
|
+
onDismiss: r,
|
|
33
|
+
onClick: s
|
|
34
|
+
}) {
|
|
35
|
+
const t = c[n] || c.announcement;
|
|
36
|
+
return /* @__PURE__ */ i(
|
|
37
|
+
"div",
|
|
38
|
+
{
|
|
39
|
+
onClick: s,
|
|
40
|
+
style: {
|
|
41
|
+
position: "relative",
|
|
42
|
+
background: o ? "#FFFFFF" : "rgba(244, 241, 230, 0.4)",
|
|
43
|
+
border: "1px solid rgba(30, 33, 37, 0.10)",
|
|
44
|
+
borderRadius: "6px",
|
|
45
|
+
padding: "12px 16px",
|
|
46
|
+
paddingLeft: "20px",
|
|
47
|
+
display: "flex",
|
|
48
|
+
flexDirection: "column",
|
|
49
|
+
gap: "6px",
|
|
50
|
+
cursor: s ? "pointer" : "default",
|
|
51
|
+
transition: "all 0.15s ease",
|
|
52
|
+
overflow: "hidden"
|
|
53
|
+
},
|
|
54
|
+
className: s ? "hover:border-[rgba(30,33,37,0.18)]" : "",
|
|
55
|
+
children: [
|
|
56
|
+
/* @__PURE__ */ e(
|
|
57
|
+
"div",
|
|
58
|
+
{
|
|
59
|
+
style: {
|
|
60
|
+
position: "absolute",
|
|
61
|
+
left: 0,
|
|
62
|
+
top: 0,
|
|
63
|
+
bottom: 0,
|
|
64
|
+
width: "4px",
|
|
65
|
+
background: t.railColor
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
/* @__PURE__ */ i(
|
|
70
|
+
"div",
|
|
71
|
+
{
|
|
72
|
+
style: {
|
|
73
|
+
display: "flex",
|
|
74
|
+
alignItems: "center",
|
|
75
|
+
justifyContent: "space-between",
|
|
76
|
+
gap: "12px"
|
|
77
|
+
},
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ i(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
style: {
|
|
83
|
+
display: "flex",
|
|
84
|
+
alignItems: "center",
|
|
85
|
+
gap: "8px",
|
|
86
|
+
flex: 1,
|
|
87
|
+
minWidth: 0
|
|
88
|
+
},
|
|
89
|
+
children: [
|
|
90
|
+
/* @__PURE__ */ e(
|
|
91
|
+
"h4",
|
|
92
|
+
{
|
|
93
|
+
style: {
|
|
94
|
+
fontSize: "13px",
|
|
95
|
+
fontWeight: 650,
|
|
96
|
+
color: "rgba(30, 33, 37, 0.92)",
|
|
97
|
+
letterSpacing: "-0.01em",
|
|
98
|
+
flex: 1,
|
|
99
|
+
minWidth: 0,
|
|
100
|
+
overflow: "hidden",
|
|
101
|
+
textOverflow: "ellipsis",
|
|
102
|
+
whiteSpace: "nowrap"
|
|
103
|
+
},
|
|
104
|
+
title: l,
|
|
105
|
+
"aria-label": l,
|
|
106
|
+
children: l
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
/* @__PURE__ */ i(
|
|
110
|
+
"div",
|
|
111
|
+
{
|
|
112
|
+
style: {
|
|
113
|
+
display: "inline-flex",
|
|
114
|
+
alignItems: "center",
|
|
115
|
+
gap: "4px",
|
|
116
|
+
padding: "2px 6px",
|
|
117
|
+
borderRadius: "3px",
|
|
118
|
+
background: `${t.railColor}10`,
|
|
119
|
+
border: `1px solid ${t.railColor}25`,
|
|
120
|
+
fontSize: "10px",
|
|
121
|
+
fontWeight: 600,
|
|
122
|
+
letterSpacing: "0.01em",
|
|
123
|
+
color: t.railColor,
|
|
124
|
+
flexShrink: 0
|
|
125
|
+
},
|
|
126
|
+
children: [
|
|
127
|
+
t.icon,
|
|
128
|
+
/* @__PURE__ */ e("span", { style: { whiteSpace: "nowrap" }, children: t.label })
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
),
|
|
135
|
+
/* @__PURE__ */ i(
|
|
136
|
+
"div",
|
|
137
|
+
{
|
|
138
|
+
style: {
|
|
139
|
+
display: "flex",
|
|
140
|
+
alignItems: "center",
|
|
141
|
+
gap: "8px",
|
|
142
|
+
flexShrink: 0
|
|
143
|
+
},
|
|
144
|
+
children: [
|
|
145
|
+
/* @__PURE__ */ i(
|
|
146
|
+
"div",
|
|
147
|
+
{
|
|
148
|
+
style: {
|
|
149
|
+
display: "flex",
|
|
150
|
+
alignItems: "center",
|
|
151
|
+
gap: "6px"
|
|
152
|
+
},
|
|
153
|
+
children: [
|
|
154
|
+
!o && /* @__PURE__ */ e(
|
|
155
|
+
"div",
|
|
156
|
+
{
|
|
157
|
+
style: {
|
|
158
|
+
width: "5px",
|
|
159
|
+
height: "5px",
|
|
160
|
+
borderRadius: "50%",
|
|
161
|
+
background: t.railColor,
|
|
162
|
+
flexShrink: 0
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
),
|
|
166
|
+
/* @__PURE__ */ e(
|
|
167
|
+
"span",
|
|
168
|
+
{
|
|
169
|
+
style: {
|
|
170
|
+
fontSize: "11px",
|
|
171
|
+
color: "rgba(30, 33, 37, 0.52)",
|
|
172
|
+
fontWeight: 500,
|
|
173
|
+
whiteSpace: "nowrap"
|
|
174
|
+
},
|
|
175
|
+
children: d
|
|
176
|
+
}
|
|
177
|
+
)
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
),
|
|
181
|
+
r && /* @__PURE__ */ e(
|
|
182
|
+
"button",
|
|
183
|
+
{
|
|
184
|
+
onClick: (x) => {
|
|
185
|
+
x.stopPropagation(), r();
|
|
186
|
+
},
|
|
187
|
+
style: {
|
|
188
|
+
display: "flex",
|
|
189
|
+
alignItems: "center",
|
|
190
|
+
justifyContent: "center",
|
|
191
|
+
padding: "4px",
|
|
192
|
+
border: "none",
|
|
193
|
+
background: "transparent",
|
|
194
|
+
cursor: "pointer",
|
|
195
|
+
color: "rgba(30, 33, 37, 0.35)",
|
|
196
|
+
transition: "color 0.15s ease",
|
|
197
|
+
borderRadius: "3px"
|
|
198
|
+
},
|
|
199
|
+
className: "hover:bg-[rgba(30,33,37,0.05)] hover:text-[rgba(30,33,37,0.65)]",
|
|
200
|
+
children: /* @__PURE__ */ e(g, { size: 14, strokeWidth: 2.5 })
|
|
201
|
+
}
|
|
202
|
+
)
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
)
|
|
206
|
+
]
|
|
207
|
+
}
|
|
208
|
+
),
|
|
209
|
+
/* @__PURE__ */ e(
|
|
210
|
+
"p",
|
|
211
|
+
{
|
|
212
|
+
style: {
|
|
213
|
+
fontSize: "12px",
|
|
214
|
+
lineHeight: 1.45,
|
|
215
|
+
color: "rgba(30, 33, 37, 0.65)",
|
|
216
|
+
margin: 0
|
|
217
|
+
},
|
|
218
|
+
children: a
|
|
219
|
+
}
|
|
220
|
+
)
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
function F({
|
|
226
|
+
notifications: n,
|
|
227
|
+
onDismiss: l,
|
|
228
|
+
onMarkAllRead: a,
|
|
229
|
+
onNotificationClick: d
|
|
230
|
+
}) {
|
|
231
|
+
const o = n.filter((r) => !r.isRead).length;
|
|
232
|
+
return /* @__PURE__ */ i(
|
|
233
|
+
"div",
|
|
234
|
+
{
|
|
235
|
+
style: {
|
|
236
|
+
background: "#FFFFFF",
|
|
237
|
+
border: "1px solid rgba(30, 33, 37, 0.12)",
|
|
238
|
+
borderRadius: "12px",
|
|
239
|
+
width: "100%",
|
|
240
|
+
maxWidth: "560px",
|
|
241
|
+
minWidth: "600px",
|
|
242
|
+
boxShadow: "0 6px 24px rgba(0, 0, 0, 0.08)",
|
|
243
|
+
display: "flex",
|
|
244
|
+
flexDirection: "column",
|
|
245
|
+
maxHeight: "600px",
|
|
246
|
+
overflow: "hidden"
|
|
247
|
+
// position: "absolute",
|
|
248
|
+
// top: "3rem",
|
|
249
|
+
// right: "0",
|
|
250
|
+
// zIndex: 1000,
|
|
251
|
+
},
|
|
252
|
+
children: [
|
|
253
|
+
/* @__PURE__ */ i(
|
|
254
|
+
"div",
|
|
255
|
+
{
|
|
256
|
+
style: {
|
|
257
|
+
padding: "16px 20px",
|
|
258
|
+
borderBottom: "1px solid rgba(30, 33, 37, 0.10)",
|
|
259
|
+
display: "flex",
|
|
260
|
+
alignItems: "center",
|
|
261
|
+
justifyContent: "space-between",
|
|
262
|
+
flexShrink: 0,
|
|
263
|
+
background: "#FFFFFF"
|
|
264
|
+
},
|
|
265
|
+
children: [
|
|
266
|
+
/* @__PURE__ */ i("div", { style: { display: "flex", alignItems: "center", gap: "10px" }, children: [
|
|
267
|
+
/* @__PURE__ */ e(p, { size: 18, strokeWidth: 2.5, style: { color: "rgba(30, 33, 37, 0.65)" } }),
|
|
268
|
+
/* @__PURE__ */ e(
|
|
269
|
+
"h3",
|
|
270
|
+
{
|
|
271
|
+
style: {
|
|
272
|
+
fontSize: "15px",
|
|
273
|
+
fontWeight: 650,
|
|
274
|
+
color: "rgba(30, 33, 37, 0.92)",
|
|
275
|
+
letterSpacing: "-0.01em"
|
|
276
|
+
},
|
|
277
|
+
children: "Notifications"
|
|
278
|
+
}
|
|
279
|
+
),
|
|
280
|
+
o > 0 && /* @__PURE__ */ e(
|
|
281
|
+
"div",
|
|
282
|
+
{
|
|
283
|
+
style: {
|
|
284
|
+
padding: "2px 8px",
|
|
285
|
+
borderRadius: "12px",
|
|
286
|
+
background: "rgba(107, 124, 147, 0.12)",
|
|
287
|
+
fontSize: "11px",
|
|
288
|
+
fontWeight: 650,
|
|
289
|
+
color: "#6B7C93"
|
|
290
|
+
},
|
|
291
|
+
children: o
|
|
292
|
+
}
|
|
293
|
+
)
|
|
294
|
+
] }),
|
|
295
|
+
o > 0 && a && /* @__PURE__ */ i(
|
|
296
|
+
"button",
|
|
297
|
+
{
|
|
298
|
+
onClick: a,
|
|
299
|
+
style: {
|
|
300
|
+
display: "flex",
|
|
301
|
+
alignItems: "center",
|
|
302
|
+
gap: "8px",
|
|
303
|
+
padding: "8px 12px",
|
|
304
|
+
border: "1px solid rgba(30, 33, 37, 0.15)",
|
|
305
|
+
borderRadius: "6px",
|
|
306
|
+
background: "transparent",
|
|
307
|
+
fontSize: "13px",
|
|
308
|
+
fontWeight: 600,
|
|
309
|
+
color: "rgba(30, 33, 37, 0.65)",
|
|
310
|
+
cursor: "pointer",
|
|
311
|
+
transition: "all 0.15s ease"
|
|
312
|
+
},
|
|
313
|
+
className: "interactive hover:bg-warm hover:border-hover",
|
|
314
|
+
children: [
|
|
315
|
+
/* @__PURE__ */ e(u, { size: 14, strokeWidth: 2.5 }),
|
|
316
|
+
"Mark all read"
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
)
|
|
320
|
+
]
|
|
321
|
+
}
|
|
322
|
+
),
|
|
323
|
+
/* @__PURE__ */ e(
|
|
324
|
+
"div",
|
|
325
|
+
{
|
|
326
|
+
style: {
|
|
327
|
+
padding: "16px",
|
|
328
|
+
display: "flex",
|
|
329
|
+
flexDirection: "column",
|
|
330
|
+
gap: "12px",
|
|
331
|
+
overflowY: "auto",
|
|
332
|
+
flex: 1
|
|
333
|
+
},
|
|
334
|
+
className: "custom-thin-scrollbar-library",
|
|
335
|
+
children: n.length === 0 ? /* @__PURE__ */ i(
|
|
336
|
+
"div",
|
|
337
|
+
{
|
|
338
|
+
style: {
|
|
339
|
+
padding: "40px 20px",
|
|
340
|
+
textAlign: "center",
|
|
341
|
+
color: "rgba(30, 33, 37, 0.42)"
|
|
342
|
+
},
|
|
343
|
+
children: [
|
|
344
|
+
/* @__PURE__ */ e(p, { size: 32, strokeWidth: 1.5, style: { margin: "0 auto 12px", opacity: 0.3 } }),
|
|
345
|
+
/* @__PURE__ */ e("p", { style: { fontSize: "13px", fontWeight: 500 }, children: "No notifications" })
|
|
346
|
+
]
|
|
347
|
+
}
|
|
348
|
+
) : n.map((r) => /* @__PURE__ */ e(
|
|
349
|
+
y,
|
|
350
|
+
{
|
|
351
|
+
type: r.type,
|
|
352
|
+
title: r.title,
|
|
353
|
+
message: r.message,
|
|
354
|
+
timestamp: r.timestamp,
|
|
355
|
+
isRead: r.isRead,
|
|
356
|
+
onDismiss: l ? () => l(r.id) : void 0,
|
|
357
|
+
onClick: d ? () => d(r.id) : void 0
|
|
358
|
+
},
|
|
359
|
+
r.id
|
|
360
|
+
))
|
|
361
|
+
}
|
|
362
|
+
)
|
|
363
|
+
]
|
|
364
|
+
}
|
|
365
|
+
);
|
|
366
|
+
}
|
|
2
367
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
368
|
+
y as NotificationItem,
|
|
369
|
+
F as NotificationPanel
|
|
5
370
|
};
|
|
6
371
|
//# sourceMappingURL=notifications.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"notifications.es.js","sources":["../../src/components/notifications/NotificationItem.jsx","../../src/components/notifications/NotificationPanel.jsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { X, Sparkles, AlertCircle, Wrench, Info } from \"lucide-react\";\n\n/**\n * NotificationItem Component\n * Displays a single notification item with type, title, message, timestamp, and actions.\n * \n * @param {Object} props - Component props\n * @param {string} props.type - Notification type: 'feature', 'issue', 'maintenance', or 'announcement'\n * @param {string} props.title - Notification title\n * @param {string} props.message - Notification message\n * @param {string} props.timestamp - Timestamp string\n * @param {boolean} props.isRead - Whether the notification is read\n * @param {Function} props.onDismiss - Callback when dismiss button is clicked\n * @param {Function} props.onClick - Callback when notification is clicked\n */\nconst notificationConfig = {\n feature: {\n railColor: \"#7B68A6\",\n icon: <Sparkles size={16} strokeWidth={2.5} />,\n label: \"New Feature\",\n },\n issue: {\n railColor: \"#C98A5A\",\n icon: <AlertCircle size={16} strokeWidth={2.5} />,\n label: \"Known Issue\",\n },\n maintenance: {\n railColor: \"#8B9D6F\",\n icon: <Wrench size={16} strokeWidth={2.5} />,\n label: \"Maintenance\",\n },\n announcement: {\n railColor: \"#6B7C93\",\n icon: <Info size={16} strokeWidth={2.5} />,\n label: \"Announcement\",\n },\n};\n\nexport default function NotificationItem({\n type,\n title,\n message,\n timestamp,\n isRead = false,\n onDismiss,\n onClick,\n}) {\n const config = notificationConfig[type] || notificationConfig.announcement;\n\n return (\n <div\n onClick={onClick}\n style={{\n position: \"relative\",\n background: isRead ? \"#FFFFFF\" : \"rgba(244, 241, 230, 0.4)\",\n border: \"1px solid rgba(30, 33, 37, 0.10)\",\n borderRadius: \"6px\",\n padding: \"12px 16px\",\n paddingLeft: \"20px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\",\n cursor: onClick ? \"pointer\" : \"default\",\n transition: \"all 0.15s ease\",\n overflow: \"hidden\",\n }}\n className={onClick ? \"hover:border-[rgba(30,33,37,0.18)]\" : \"\"}\n >\n {/* Rail */}\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n bottom: 0,\n width: \"4px\",\n background: config.railColor,\n }}\n />\n\n {/* Line 1: Title + Type badge + Timestamp + Dismiss */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"12px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n flex: 1,\n minWidth: 0,\n }}\n >\n {/* Title */}\n <h4\n style={{\n fontSize: \"13px\",\n fontWeight: 650,\n color: \"rgba(30, 33, 37, 0.92)\",\n letterSpacing: \"-0.01em\",\n flex: 1,\n minWidth: 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={title}\n aria-label={title}\n >\n {title}\n </h4>\n {/* Type Badge */}\n <div\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"2px 6px\",\n borderRadius: \"3px\",\n background: `${config.railColor}10`,\n border: `1px solid ${config.railColor}25`,\n fontSize: \"10px\",\n fontWeight: 600,\n letterSpacing: \"0.01em\",\n color: config.railColor,\n flexShrink: 0,\n }}\n >\n {config.icon}\n <span style={{ whiteSpace: \"nowrap\" }}>{config.label}</span>\n </div>\n </div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n flexShrink: 0,\n }}\n >\n {/* Timestamp with colored dot (only for unread) */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n }}\n >\n {!isRead && (\n <div\n style={{\n width: \"5px\",\n height: \"5px\",\n borderRadius: \"50%\",\n background: config.railColor,\n flexShrink: 0,\n }}\n />\n )}\n <span\n style={{\n fontSize: \"11px\",\n color: \"rgba(30, 33, 37, 0.52)\",\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n }}\n >\n {timestamp}\n </span>\n </div>\n {/* Dismiss button */}\n {onDismiss && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onDismiss();\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"4px\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n color: \"rgba(30, 33, 37, 0.35)\",\n transition: \"color 0.15s ease\",\n borderRadius: \"3px\",\n }}\n className=\"hover:bg-[rgba(30,33,37,0.05)] hover:text-[rgba(30,33,37,0.65)]\"\n >\n <X size={14} strokeWidth={2.5} />\n </button>\n )}\n </div>\n </div>\n\n {/* Line 2: Message */}\n <p\n style={{\n fontSize: \"12px\",\n lineHeight: 1.45,\n color: \"rgba(30, 33, 37, 0.65)\",\n margin: 0,\n }}\n >\n {message}\n </p>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Bell, Check } from \"lucide-react\";\nimport NotificationItem from \"./NotificationItem\";\n\n/**\n * NotificationPanel Component\n * Displays a panel of notifications with header, list, and actions.\n * \n * @param {Object} props - Component props\n * @param {Array} props.notifications - Array of notification objects\n * @param {string} props.notifications[].id - Notification ID\n * @param {string} props.notifications[].type - Notification type: 'feature', 'issue', 'maintenance', or 'announcement'\n * @param {string} props.notifications[].title - Notification title\n * @param {string} props.notifications[].message - Notification message\n * @param {string} props.notifications[].timestamp - Timestamp string\n * @param {boolean} props.notifications[].isRead - Whether the notification is read\n * @param {Function} props.onDismiss - Callback when dismiss button is clicked (receives id)\n * @param {Function} props.onMarkAllRead - Callback when mark all read button is clicked\n * @param {Function} props.onNotificationClick - Callback when notification is clicked (receives id)\n */\nexport default function NotificationPanel({\n notifications,\n onDismiss,\n onMarkAllRead,\n onNotificationClick,\n}) {\n const unreadCount = notifications.filter((n) => !n.isRead).length;\n\n return (\n <div\n style={{\n background: \"#FFFFFF\",\n border: \"1px solid rgba(30, 33, 37, 0.12)\",\n borderRadius: \"12px\",\n width: \"100%\",\n maxWidth: \"560px\",\n minWidth: \"600px\",\n boxShadow: \"0 6px 24px rgba(0, 0, 0, 0.08)\",\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"600px\",\n overflow: \"hidden\",\n // position: \"absolute\",\n // top: \"3rem\",\n // right: \"0\",\n // zIndex: 1000,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: \"16px 20px\",\n borderBottom: \"1px solid rgba(30, 33, 37, 0.10)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexShrink: 0,\n background: \"#FFFFFF\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"10px\" }}>\n <Bell size={18} strokeWidth={2.5} style={{ color: \"rgba(30, 33, 37, 0.65)\" }} />\n <h3\n style={{\n fontSize: \"15px\",\n fontWeight: 650,\n color: \"rgba(30, 33, 37, 0.92)\",\n letterSpacing: \"-0.01em\",\n }}\n >\n Notifications\n </h3>\n {unreadCount > 0 && (\n <div\n style={{\n padding: \"2px 8px\",\n borderRadius: \"12px\",\n background: \"rgba(107, 124, 147, 0.12)\",\n fontSize: \"11px\",\n fontWeight: 650,\n color: \"#6B7C93\",\n }}\n >\n {unreadCount}\n </div>\n )}\n </div>\n {unreadCount > 0 && onMarkAllRead && (\n <button\n onClick={onMarkAllRead}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n padding: \"8px 12px\",\n border: \"1px solid rgba(30, 33, 37, 0.15)\",\n borderRadius: \"6px\",\n background: \"transparent\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"rgba(30, 33, 37, 0.65)\",\n cursor: \"pointer\",\n transition: \"all 0.15s ease\",\n }}\n className=\"interactive hover:bg-warm hover:border-hover\"\n >\n <Check size={14} strokeWidth={2.5} />\n Mark all read\n </button>\n )}\n </div>\n\n {/* Notifications list */}\n <div\n style={{\n padding: \"16px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"12px\",\n overflowY: \"auto\",\n flex: 1,\n }}\n className=\"custom-thin-scrollbar-library\"\n >\n {notifications.length === 0 ? (\n <div\n style={{\n padding: \"40px 20px\",\n textAlign: \"center\",\n color: \"rgba(30, 33, 37, 0.42)\",\n }}\n >\n <Bell size={32} strokeWidth={1.5} style={{ margin: \"0 auto 12px\", opacity: 0.3 }} />\n <p style={{ fontSize: \"13px\", fontWeight: 500 }}>No notifications</p>\n </div>\n ) : (\n notifications.map((notification) => (\n <NotificationItem\n key={notification.id}\n type={notification.type}\n title={notification.title}\n message={notification.message}\n timestamp={notification.timestamp}\n isRead={notification.isRead}\n onDismiss={onDismiss ? () => onDismiss(notification.id) : undefined}\n onClick={onNotificationClick ? () => onNotificationClick(notification.id) : undefined}\n />\n ))\n )}\n </div>\n </div>\n );\n}\n\n"],"names":["notificationConfig","jsx","Sparkles","AlertCircle","Wrench","Info","NotificationItem","type","title","message","timestamp","isRead","onDismiss","onClick","config","jsxs","e","X","NotificationPanel","notifications","onMarkAllRead","onNotificationClick","unreadCount","n","Bell","Check","notification"],"mappings":"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"}
|