@burdenoff/microfe-bigconsole 2026.805.2 → 2026.812.1

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.
Files changed (253) hide show
  1. package/dist/bigconsole/components/DrilldownDashboardRenderer.js +118 -106
  2. package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
  3. package/dist/bigconsole/components/DrilldownModal.js +54 -50
  4. package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
  5. package/dist/bigconsole/components/builder/BuilderCanvas.js +2 -2
  6. package/dist/bigconsole/components/builder/BuilderCanvas.js.map +1 -1
  7. package/dist/bigconsole/components/builder/BuilderTopbar.js +3 -3
  8. package/dist/bigconsole/components/builder/BuilderTopbar.js.map +1 -1
  9. package/dist/bigconsole/components/builder/inspector/AdvancedSection.js +24 -25
  10. package/dist/bigconsole/components/builder/inspector/AdvancedSection.js.map +1 -1
  11. package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +40 -29
  12. package/dist/bigconsole/components/builder/inspector/AppearanceSection.js.map +1 -1
  13. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +145 -111
  14. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
  15. package/dist/bigconsole/components/builder/inspector/GeneralSection.js +58 -44
  16. package/dist/bigconsole/components/builder/inspector/GeneralSection.js.map +1 -1
  17. package/dist/bigconsole/components/common/Section.js +70 -0
  18. package/dist/bigconsole/components/common/Section.js.map +1 -0
  19. package/dist/bigconsole/components/common/index.js +2 -0
  20. package/dist/bigconsole/components/common/sectionStyles.js +42 -0
  21. package/dist/bigconsole/components/common/sectionStyles.js.map +1 -0
  22. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +269 -251
  23. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
  24. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +214 -223
  25. package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
  26. package/dist/bigconsole/components/dashboard/DashboardGrid.js +12 -18
  27. package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
  28. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +110 -102
  29. package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
  30. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -68
  31. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
  32. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +125 -159
  33. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
  34. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +147 -144
  35. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
  36. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +154 -153
  37. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
  38. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +82 -79
  39. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
  40. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +171 -284
  41. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  42. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +250 -273
  43. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
  44. package/dist/bigconsole/components/dashboard/LiveBoardBanner.js +45 -53
  45. package/dist/bigconsole/components/dashboard/LiveBoardBanner.js.map +1 -1
  46. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +157 -148
  47. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
  48. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +75 -83
  49. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js.map +1 -1
  50. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +167 -161
  51. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
  52. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +181 -190
  53. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js.map +1 -1
  54. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
  55. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
  56. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
  57. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
  58. package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -0
  59. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
  60. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
  61. package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -229
  62. package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
  63. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +128 -129
  64. package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
  65. package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
  66. package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
  67. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
  68. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
  69. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -61
  70. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
  71. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -64
  72. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
  73. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
  74. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
  75. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
  76. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
  77. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
  78. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
  79. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +113 -117
  80. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js.map +1 -1
  81. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +312 -307
  82. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  83. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
  84. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
  85. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
  86. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
  87. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +194 -189
  88. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
  89. package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
  90. package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
  91. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
  92. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
  93. package/dist/bigconsole/components/parser/DataSinkSelector.js +163 -131
  94. package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
  95. package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
  96. package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
  97. package/dist/bigconsole/components/parser/ImportParserDialog.js +205 -260
  98. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  99. package/dist/bigconsole/components/parser/ParserCard.js +133 -114
  100. package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
  101. package/dist/bigconsole/components/parser/ParserSelector.js +193 -174
  102. package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
  103. package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
  104. package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
  105. package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
  106. package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
  107. package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
  108. package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
  109. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
  110. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
  111. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
  112. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
  113. package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
  114. package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
  115. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -103
  116. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
  117. package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -148
  118. package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
  119. package/dist/bigconsole/components/preview/previewShared.js +41 -23
  120. package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
  121. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +405 -364
  122. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  123. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +265 -237
  124. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
  125. package/dist/bigconsole/components/widgets/PropertiesPanel.js +764 -821
  126. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  127. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
  128. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
  129. package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
  130. package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
  131. package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
  132. package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
  133. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
  134. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
  135. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +46 -49
  136. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
  137. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +154 -147
  138. package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
  139. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +118 -101
  140. package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
  141. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +244 -191
  142. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
  143. package/dist/bigconsole/components/widgets/form/FormWidget.js +167 -159
  144. package/dist/bigconsole/components/widgets/form/FormWidget.js.map +1 -1
  145. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +92 -76
  146. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
  147. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +1 -1
  148. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
  149. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +89 -86
  150. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
  151. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
  152. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
  153. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +64 -63
  154. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
  155. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +2 -2
  156. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
  157. package/dist/bigconsole/components/widgets/list/ListConfig.js +65 -58
  158. package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
  159. package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
  160. package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
  161. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
  162. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
  163. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +79 -72
  164. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
  165. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +35 -34
  166. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
  167. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +20 -19
  168. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js.map +1 -1
  169. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +181 -180
  170. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
  171. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +100 -90
  172. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
  173. package/dist/bigconsole/components/widgets/retention/RetentionWidget.js +3 -3
  174. package/dist/bigconsole/components/widgets/retention/RetentionWidget.js.map +1 -1
  175. package/dist/bigconsole/components/widgets/states/EmptyState.js +6 -4
  176. package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
  177. package/dist/bigconsole/components/widgets/states/ErrorState.js +7 -5
  178. package/dist/bigconsole/components/widgets/states/ErrorState.js.map +1 -1
  179. package/dist/bigconsole/components/widgets/states/LoadingState.js +5 -4
  180. package/dist/bigconsole/components/widgets/states/LoadingState.js.map +1 -1
  181. package/dist/bigconsole/components/widgets/table/TableConfig.js +193 -172
  182. package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
  183. package/dist/bigconsole/components/widgets/table/TableHeader.js +1 -1
  184. package/dist/bigconsole/components/widgets/table/TableHeader.js.map +1 -1
  185. package/dist/bigconsole/components/widgets/table/TableWidget.js +1 -1
  186. package/dist/bigconsole/components/widgets/table/TableWidget.js.map +1 -1
  187. package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +1 -1
  188. package/dist/bigconsole/components/widgets/text-widget/TextWidget.js.map +1 -1
  189. package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js +3 -3
  190. package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js.map +1 -1
  191. package/dist/bigconsole/components/widgets/utils/conditionalFormat.js +2 -2
  192. package/dist/bigconsole/components/widgets/utils/conditionalFormat.js.map +1 -1
  193. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +283 -249
  194. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
  195. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
  196. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
  197. package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
  198. package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
  199. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
  200. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
  201. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
  202. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
  203. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +46 -42
  204. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
  205. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +372 -348
  206. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
  207. package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
  208. package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
  209. package/dist/bigconsole/pages/DashboardBuilderPage.js +153 -142
  210. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  211. package/dist/bigconsole/pages/DashboardViewPage.js +230 -220
  212. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  213. package/dist/bigconsole/pages/DashboardsPage.js +832 -790
  214. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  215. package/dist/bigconsole/pages/DataParsersPage.js +249 -304
  216. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  217. package/dist/bigconsole/pages/DataSinkBuilderPage.js +324 -349
  218. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  219. package/dist/bigconsole/pages/DataSinkViewPage.js +336 -323
  220. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  221. package/dist/bigconsole/pages/DataSinksPage.js +356 -458
  222. package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
  223. package/dist/bigconsole/pages/DataSourcesPage.js +14 -8
  224. package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
  225. package/dist/bigconsole/pages/HomePage.js +186 -193
  226. package/dist/bigconsole/pages/HomePage.js.map +1 -1
  227. package/dist/bigconsole/pages/InsightsPage.js +901 -724
  228. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  229. package/dist/bigconsole/pages/ParserBuilderPage.js +769 -675
  230. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  231. package/dist/bigconsole/pages/ParserViewPage.js +382 -354
  232. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  233. package/dist/bigconsole/pages/PipelineBuilderPage.js +540 -420
  234. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  235. package/dist/bigconsole/pages/PipelineViewPage.js +416 -384
  236. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  237. package/dist/bigconsole/pages/PipelinesPage.js +260 -309
  238. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  239. package/dist/bigconsole/pages/SettingsPage.js +177 -172
  240. package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
  241. package/dist/bigconsole/pages/WidgetDemoPage.js +278 -142
  242. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  243. package/dist/bigconsole/pages/WorkflowViewPage.js +382 -366
  244. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  245. package/dist/bigconsole/pages/WorkflowsPage.js +202 -316
  246. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  247. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +111 -109
  248. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js.map +1 -1
  249. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +127 -126
  250. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js.map +1 -1
  251. package/dist/bigconsole/renderers/adapters/CustomRenderer.js +103 -103
  252. package/dist/bigconsole/renderers/adapters/CustomRenderer.js.map +1 -1
  253. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AdaptiveCardWidget.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.tsx"],"sourcesContent":["/**\n * AdaptiveCardWidget Component\n *\n * JSON-based adaptive cards renderer.\n */\n\nimport { type FC, memo, type ReactNode } from 'react';\nimport type { Widget } from '../../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AdaptiveCardWidgetProps {\n widget: Widget;\n data?: AdaptiveCardData;\n onClick?: (action: AdaptiveCardAction) => void;\n}\n\nexport interface AdaptiveCardData {\n body?: AdaptiveCardElement[];\n actions?: AdaptiveCardAction[];\n}\n\nexport interface AdaptiveCardElement {\n type: 'TextBlock' | 'Image' | 'Container' | 'ColumnSet' | 'Column' | 'FactSet' | 'ActionSet';\n text?: string;\n url?: string;\n size?: 'small' | 'medium' | 'large' | 'extraLarge';\n weight?: 'lighter' | 'default' | 'bolder';\n color?: 'default' | 'accent' | 'attention' | 'good' | 'warning';\n wrap?: boolean;\n items?: AdaptiveCardElement[];\n columns?: AdaptiveCardElement[];\n width?: string;\n facts?: Array<{ title: string; value: string }>;\n actions?: AdaptiveCardAction[];\n}\n\nexport interface AdaptiveCardAction {\n type: 'Action.OpenUrl' | 'Action.Submit' | 'Action.ShowCard';\n title: string;\n url?: string;\n data?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getTextSizeClass(size?: string): string {\n switch (size) {\n case 'small':\n return 'text-xs';\n case 'large':\n return 'text-lg';\n case 'extraLarge':\n return 'text-2xl';\n default:\n return 'text-sm';\n }\n}\n\nfunction getTextWeightClass(weight?: string): string {\n switch (weight) {\n case 'lighter':\n return 'font-light';\n case 'bolder':\n return 'font-bold';\n default:\n return 'font-normal';\n }\n}\n\nfunction getTextColorClass(color?: string): string {\n switch (color) {\n case 'accent':\n return 'text-action-primary-bg';\n case 'attention':\n return 'text-status-error-text';\n case 'good':\n return 'text-status-success-text';\n case 'warning':\n return 'text-status-warning-text';\n default:\n return 'text-text-primary';\n }\n}\n\n// ============================================================================\n// Element Renderer\n// ============================================================================\n\nfunction renderElement(\n element: AdaptiveCardElement,\n index: number,\n onAction?: (action: AdaptiveCardAction) => void\n): ReactNode {\n switch (element.type) {\n case 'TextBlock':\n return (\n <p\n key={index}\n className={`\n ${getTextSizeClass(element.size)}\n ${getTextWeightClass(element.weight)}\n ${getTextColorClass(element.color)}\n ${element.wrap ? '' : 'truncate'}\n mb-1\n `}\n >\n {element.text}\n </p>\n );\n\n case 'Image':\n return <img key={index} src={element.url} alt=\"\" className=\"max-w-full h-auto rounded mb-2\" />;\n\n case 'Container':\n return (\n <div key={index} className=\"mb-2\">\n {element.items?.map((item, i) => renderElement(item, i, onAction))}\n </div>\n );\n\n case 'ColumnSet':\n return (\n <div key={index} className=\"flex gap-2 mb-2\">\n {element.columns?.map((col, i) => renderElement(col, i, onAction))}\n </div>\n );\n\n case 'Column':\n return (\n <div key={index} className=\"flex-1\" style={{ flexBasis: element.width }}>\n {element.items?.map((item, i) => renderElement(item, i, onAction))}\n </div>\n );\n\n case 'FactSet':\n return (\n <div key={index} className=\"mb-2\">\n {element.facts?.map((fact, i) => (\n <div key={i} className=\"flex gap-2 text-sm py-1\">\n <span className=\"text-text-secondary flex-shrink-0\">{fact.title}:</span>\n <span className=\"text-text-primary font-medium\">{fact.value}</span>\n </div>\n ))}\n </div>\n );\n\n case 'ActionSet':\n return (\n <div key={index} className=\"flex gap-2 mt-3\">\n {element.actions?.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => onAction?.(action)}\n className=\"\n px-3 py-1.5\n text-sm font-medium\n text-action-primary-fg\n bg-action-primary-bg\n hover:bg-action-primary-bgHover\n rounded-md\n transition-colors\n \"\n >\n {action.title}\n </button>\n ))}\n </div>\n );\n\n default:\n return null;\n }\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const AdaptiveCardWidget: FC<AdaptiveCardWidgetProps> = memo(function AdaptiveCardWidget({\n widget: _widget,\n data,\n onClick,\n}) {\n if (!data?.body?.length && !data?.actions?.length) {\n return <div className=\"flex items-center justify-center h-full p-4 text-text-secondary\">No content to display</div>;\n }\n\n return (\n <div className=\"flex flex-col h-full p-4\">\n {/* Body */}\n <div className=\"flex-1\">{data.body?.map((element, i) => renderElement(element, i, onClick))}</div>\n\n {/* Actions */}\n {data.actions && data.actions.length > 0 && (\n <div className=\"flex gap-2 mt-4 pt-4 border-t border-border-default\">\n {data.actions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => onClick?.(action)}\n className=\"\n px-4 py-2\n text-sm font-medium\n text-action-primary-fg\n bg-action-primary-bg\n hover:bg-action-primary-bgHover\n rounded-md\n transition-colors\n \"\n >\n {action.title}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n});\n\nexport default AdaptiveCardWidget;\n"],"mappings":";;;AAkDA,SAAS,EAAiB,GAAuB;AAC/C,SAAQ,GAAR;EACE,KAAK,QACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,KAAK,aACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,EAAmB,GAAyB;AACnD,SAAQ,GAAR;EACE,KAAK,UACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,EAAkB,GAAwB;AACjD,SAAQ,GAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,YACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAQb,SAAS,EACP,GACA,GACA,GACW;AACX,SAAQ,EAAQ,MAAhB;EACE,KAAK,YACH,QACE,kBAAC,KAAD;GAEE,WAAW;cACP,EAAiB,EAAQ,KAAK,CAAC;cAC/B,EAAmB,EAAQ,OAAO,CAAC;cACnC,EAAkB,EAAQ,MAAM,CAAC;cACjC,EAAQ,OAAO,KAAK,WAAW;;;aAIlC,EAAQ;GACP,EAVG,EAUH;EAGR,KAAK,QACH,QAAO,kBAAC,OAAD;GAAiB,KAAK,EAAQ;GAAK,KAAI;GAAG,WAAU;GAAmC,EAA7E,EAA6E;EAEhG,KAAK,YACH,QACE,kBAAC,OAAD;GAAiB,WAAU;aACxB,EAAQ,OAAO,KAAK,GAAM,MAAM,EAAc,GAAM,GAAG,EAAS,CAAC;GAC9D,EAFI,EAEJ;EAGV,KAAK,YACH,QACE,kBAAC,OAAD;GAAiB,WAAU;aACxB,EAAQ,SAAS,KAAK,GAAK,MAAM,EAAc,GAAK,GAAG,EAAS,CAAC;GAC9D,EAFI,EAEJ;EAGV,KAAK,SACH,QACE,kBAAC,OAAD;GAAiB,WAAU;GAAS,OAAO,EAAE,WAAW,EAAQ,OAAO;aACpE,EAAQ,OAAO,KAAK,GAAM,MAAM,EAAc,GAAM,GAAG,EAAS,CAAC;GAC9D,EAFI,EAEJ;EAGV,KAAK,UACH,QACE,kBAAC,OAAD;GAAiB,WAAU;aACxB,EAAQ,OAAO,KAAK,GAAM,MACzB,kBAAC,OAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,QAAD;KAAM,WAAU;eAAhB,CAAqD,EAAK,OAAM,IAAQ;QACxE,kBAAC,QAAD;KAAM,WAAU;eAAiC,EAAK;KAAa,CAAA,CAC/D;MAHI,EAGJ,CACN;GACE,EAPI,EAOJ;EAGV,KAAK,YACH,QACE,kBAAC,OAAD;GAAiB,WAAU;aACxB,EAAQ,SAAS,KAAK,GAAQ,MAC7B,kBAAC,UAAD;IAEE,MAAK;IACL,eAAe,IAAW,EAAO;IACjC,WAAU;cAUT,EAAO;IACD,EAdF,EAcE,CACT;GACE,EAnBI,EAmBJ;EAGV,QACE,QAAO;;;AAQb,IAAa,IAAkD,EAAK,SAA4B,EAC9F,QAAQ,GACR,SACA,cACC;AAKD,QAJI,CAAC,GAAM,MAAM,UAAU,CAAC,GAAM,SAAS,SAClC,kBAAC,OAAD;EAAK,WAAU;YAAkE;EAA2B,CAAA,GAInH,kBAAC,OAAD;EAAK,WAAU;YAAf,CAEE,kBAAC,OAAD;GAAK,WAAU;aAAU,EAAK,MAAM,KAAK,GAAS,MAAM,EAAc,GAAS,GAAG,EAAQ,CAAC;GAAO,CAAA,EAGjG,EAAK,WAAW,EAAK,QAAQ,SAAS,KACrC,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAK,QAAQ,KAAK,GAAQ,MACzB,kBAAC,UAAD;IAEE,MAAK;IACL,eAAe,IAAU,EAAO;IAChC,WAAU;cAUT,EAAO;IACD,EAdF,EAcE,CACT;GACE,CAAA,CAEJ;;EAER"}
1
+ {"version":3,"file":"AdaptiveCardWidget.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.tsx"],"sourcesContent":["/**\n * AdaptiveCardWidget Component\n *\n * JSON-based adaptive cards renderer.\n */\n\nimport { type FC, memo, type ReactNode } from 'react';\nimport type { Widget } from '../../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AdaptiveCardWidgetProps {\n widget: Widget;\n data?: AdaptiveCardData;\n onClick?: (action: AdaptiveCardAction) => void;\n}\n\nexport interface AdaptiveCardData {\n body?: AdaptiveCardElement[];\n actions?: AdaptiveCardAction[];\n}\n\nexport interface AdaptiveCardElement {\n type: 'TextBlock' | 'Image' | 'Container' | 'ColumnSet' | 'Column' | 'FactSet' | 'ActionSet';\n text?: string;\n url?: string;\n size?: 'small' | 'medium' | 'large' | 'extraLarge';\n weight?: 'lighter' | 'default' | 'bolder';\n color?: 'default' | 'accent' | 'attention' | 'good' | 'warning';\n wrap?: boolean;\n items?: AdaptiveCardElement[];\n columns?: AdaptiveCardElement[];\n width?: string;\n facts?: Array<{ title: string; value: string }>;\n actions?: AdaptiveCardAction[];\n}\n\nexport interface AdaptiveCardAction {\n type: 'Action.OpenUrl' | 'Action.Submit' | 'Action.ShowCard';\n title: string;\n url?: string;\n data?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getTextSizeClass(size?: string): string {\n switch (size) {\n case 'small':\n return 'text-xs';\n case 'large':\n return 'text-lg';\n case 'extraLarge':\n return 'text-2xl';\n default:\n return 'text-sm';\n }\n}\n\nfunction getTextWeightClass(weight?: string): string {\n switch (weight) {\n case 'lighter':\n return 'font-light';\n case 'bolder':\n return 'font-bold';\n default:\n return 'font-normal';\n }\n}\n\nfunction getTextColorClass(color?: string): string {\n switch (color) {\n case 'accent':\n return 'text-action-primary-bg';\n case 'attention':\n return 'text-status-error-text';\n case 'good':\n return 'text-status-success-text';\n case 'warning':\n return 'text-[var(--color-status-warning-text)]';\n default:\n return 'text-text-primary';\n }\n}\n\n// ============================================================================\n// Element Renderer\n// ============================================================================\n\nfunction renderElement(\n element: AdaptiveCardElement,\n index: number,\n onAction?: (action: AdaptiveCardAction) => void\n): ReactNode {\n switch (element.type) {\n case 'TextBlock':\n return (\n <p\n key={index}\n className={`\n ${getTextSizeClass(element.size)}\n ${getTextWeightClass(element.weight)}\n ${getTextColorClass(element.color)}\n ${element.wrap ? '' : 'truncate'}\n mb-1\n `}\n >\n {element.text}\n </p>\n );\n\n case 'Image':\n return <img key={index} src={element.url} alt=\"\" className=\"max-w-full h-auto rounded mb-2\" />;\n\n case 'Container':\n return (\n <div key={index} className=\"mb-2\">\n {element.items?.map((item, i) => renderElement(item, i, onAction))}\n </div>\n );\n\n case 'ColumnSet':\n return (\n <div key={index} className=\"flex gap-2 mb-2\">\n {element.columns?.map((col, i) => renderElement(col, i, onAction))}\n </div>\n );\n\n case 'Column':\n return (\n <div key={index} className=\"flex-1\" style={{ flexBasis: element.width }}>\n {element.items?.map((item, i) => renderElement(item, i, onAction))}\n </div>\n );\n\n case 'FactSet':\n return (\n <div key={index} className=\"mb-2\">\n {element.facts?.map((fact, i) => (\n <div key={i} className=\"flex gap-2 text-sm py-1\">\n <span className=\"text-text-secondary flex-shrink-0\">{fact.title}:</span>\n <span className=\"text-text-primary font-medium\">{fact.value}</span>\n </div>\n ))}\n </div>\n );\n\n case 'ActionSet':\n return (\n <div key={index} className=\"flex gap-2 mt-3\">\n {element.actions?.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => onAction?.(action)}\n className=\"\n px-3 py-1.5\n text-sm font-medium\n text-action-primary-fg\n bg-action-primary-bg\n hover:bg-action-primary-bgHover\n rounded-md\n transition-colors\n \"\n >\n {action.title}\n </button>\n ))}\n </div>\n );\n\n default:\n return null;\n }\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const AdaptiveCardWidget: FC<AdaptiveCardWidgetProps> = memo(function AdaptiveCardWidget({\n widget: _widget,\n data,\n onClick,\n}) {\n if (!data?.body?.length && !data?.actions?.length) {\n return <div className=\"flex items-center justify-center h-full p-4 text-text-secondary\">No content to display</div>;\n }\n\n return (\n <div className=\"flex flex-col h-full p-4\">\n {/* Body */}\n <div className=\"flex-1\">{data.body?.map((element, i) => renderElement(element, i, onClick))}</div>\n\n {/* Actions */}\n {data.actions && data.actions.length > 0 && (\n <div className=\"flex gap-2 mt-4 pt-4 border-t border-border-default\">\n {data.actions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => onClick?.(action)}\n className=\"\n px-4 py-2\n text-sm font-medium\n text-action-primary-fg\n bg-action-primary-bg\n hover:bg-action-primary-bgHover\n rounded-md\n transition-colors\n \"\n >\n {action.title}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n});\n\nexport default AdaptiveCardWidget;\n"],"mappings":";;;AAkDA,SAAS,EAAiB,GAAuB;AAC/C,SAAQ,GAAR;EACE,KAAK,QACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,KAAK,aACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,EAAmB,GAAyB;AACnD,SAAQ,GAAR;EACE,KAAK,UACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAS,EAAkB,GAAwB;AACjD,SAAQ,GAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,YACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAQb,SAAS,EACP,GACA,GACA,GACW;AACX,SAAQ,EAAQ,MAAhB;EACE,KAAK,YACH,QACE,kBAAC,KAAD;GAEE,WAAW;cACP,EAAiB,EAAQ,KAAK,CAAC;cAC/B,EAAmB,EAAQ,OAAO,CAAC;cACnC,EAAkB,EAAQ,MAAM,CAAC;cACjC,EAAQ,OAAO,KAAK,WAAW;;;aAIlC,EAAQ;GACP,EAVG,EAUH;EAGR,KAAK,QACH,QAAO,kBAAC,OAAD;GAAiB,KAAK,EAAQ;GAAK,KAAI;GAAG,WAAU;GAAmC,EAA7E,EAA6E;EAEhG,KAAK,YACH,QACE,kBAAC,OAAD;GAAiB,WAAU;aACxB,EAAQ,OAAO,KAAK,GAAM,MAAM,EAAc,GAAM,GAAG,EAAS,CAAC;GAC9D,EAFI,EAEJ;EAGV,KAAK,YACH,QACE,kBAAC,OAAD;GAAiB,WAAU;aACxB,EAAQ,SAAS,KAAK,GAAK,MAAM,EAAc,GAAK,GAAG,EAAS,CAAC;GAC9D,EAFI,EAEJ;EAGV,KAAK,SACH,QACE,kBAAC,OAAD;GAAiB,WAAU;GAAS,OAAO,EAAE,WAAW,EAAQ,OAAO;aACpE,EAAQ,OAAO,KAAK,GAAM,MAAM,EAAc,GAAM,GAAG,EAAS,CAAC;GAC9D,EAFI,EAEJ;EAGV,KAAK,UACH,QACE,kBAAC,OAAD;GAAiB,WAAU;aACxB,EAAQ,OAAO,KAAK,GAAM,MACzB,kBAAC,OAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,QAAD;KAAM,WAAU;eAAhB,CAAqD,EAAK,OAAM,IAAQ;QACxE,kBAAC,QAAD;KAAM,WAAU;eAAiC,EAAK;KAAa,CAAA,CAC/D;MAHI,EAGJ,CACN;GACE,EAPI,EAOJ;EAGV,KAAK,YACH,QACE,kBAAC,OAAD;GAAiB,WAAU;aACxB,EAAQ,SAAS,KAAK,GAAQ,MAC7B,kBAAC,UAAD;IAEE,MAAK;IACL,eAAe,IAAW,EAAO;IACjC,WAAU;cAUT,EAAO;IACD,EAdF,EAcE,CACT;GACE,EAnBI,EAmBJ;EAGV,QACE,QAAO;;;AAQb,IAAa,IAAkD,EAAK,SAA4B,EAC9F,QAAQ,GACR,SACA,cACC;AAKD,QAJI,CAAC,GAAM,MAAM,UAAU,CAAC,GAAM,SAAS,SAClC,kBAAC,OAAD;EAAK,WAAU;YAAkE;EAA2B,CAAA,GAInH,kBAAC,OAAD;EAAK,WAAU;YAAf,CAEE,kBAAC,OAAD;GAAK,WAAU;aAAU,EAAK,MAAM,KAAK,GAAS,MAAM,EAAc,GAAS,GAAG,EAAQ,CAAC;GAAO,CAAA,EAGjG,EAAK,WAAW,EAAK,QAAQ,SAAS,KACrC,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAK,QAAQ,KAAK,GAAQ,MACzB,kBAAC,UAAD;IAEE,MAAK;IACL,eAAe,IAAU,EAAO;IAChC,WAAU;cAUT,EAAO;IACD,EAdF,EAcE,CACT;GACE,CAAA,CAEJ;;EAER"}
@@ -1,30 +1,31 @@
1
1
  import { memo as e, useMemo as t } from "react";
2
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
2
+ import { useI18n as n } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
4
  //#region src/bigconsole/components/widgets/calendar/CalendarWidget.tsx
4
- function i(e, t) {
5
+ function a(e, t) {
5
6
  for (let n of t) if (e[n] !== void 0 && e[n] !== null) return e[n];
6
7
  }
7
- function a(e) {
8
+ function o(e) {
8
9
  let t = Array.isArray(e) ? e : Array.isArray(e?.events) ? e.events : Array.isArray(e?.items) ? e.items : Array.isArray(e?.data) ? e.data : void 0;
9
10
  return Array.isArray(t) ? t.map((e, t) => {
10
11
  if (!e || typeof e != "object") return null;
11
- let n = e, r = i(n, [
12
+ let n = e, r = a(n, [
12
13
  "start",
13
14
  "startDate",
14
15
  "date",
15
16
  "startTime"
16
17
  ]);
17
18
  if (!r) return null;
18
- let a = i(n, [
19
+ let i = a(n, [
19
20
  "end",
20
21
  "endDate",
21
22
  "endTime"
22
- ]) ?? r, o = i(n, [
23
+ ]) ?? r, o = a(n, [
23
24
  "title",
24
25
  "name",
25
26
  "label",
26
27
  "summary"
27
- ]) ?? "Untitled event", s = i(n, [
28
+ ]) ?? "Untitled event", s = a(n, [
28
29
  "id",
29
30
  "eventId",
30
31
  "_id"
@@ -33,10 +34,10 @@ function a(e) {
33
34
  id: String(s),
34
35
  title: String(o),
35
36
  start: String(r),
36
- end: String(a),
37
+ end: String(i),
37
38
  color: typeof n.color == "string" ? n.color : void 0,
38
39
  allDay: typeof n.allDay == "boolean" ? n.allDay : void 0,
39
- category: i(n, [
40
+ category: a(n, [
40
41
  "category",
41
42
  "group",
42
43
  "type"
@@ -44,75 +45,75 @@ function a(e) {
44
45
  };
45
46
  }).filter((e) => e !== null) : [];
46
47
  }
47
- var o = e(function({ widget: e, data: i, onClick: o }) {
48
- let s = t(() => a(i), [i]), c = t(() => {
48
+ var s = e(function({ widget: e, data: a, onClick: s }) {
49
+ let { t: c } = n(), l = t(() => o(a), [a]), u = t(() => {
49
50
  let e = /* @__PURE__ */ new Date(), t = new Date(e.getTime() + 10080 * 60 * 1e3);
50
- return s.filter((n) => {
51
+ return l.filter((n) => {
51
52
  let r = new Date(n.start);
52
53
  return r >= e && r <= t;
53
54
  }).sort((e, t) => new Date(e.start).getTime() - new Date(t.start).getTime()).slice(0, 8);
54
- }, [s]);
55
- return s.length ? /* @__PURE__ */ r("div", {
55
+ }, [l]);
56
+ return l.length ? /* @__PURE__ */ i("div", {
56
57
  className: "flex flex-col h-full p-4 overflow-auto",
57
58
  children: [
58
- /* @__PURE__ */ r("div", {
59
+ /* @__PURE__ */ i("div", {
59
60
  className: "flex items-center justify-between mb-4",
60
- children: [/* @__PURE__ */ n("h3", {
61
+ children: [/* @__PURE__ */ r("h3", {
61
62
  className: "text-sm font-medium text-text-primary",
62
- children: "Upcoming Events"
63
+ children: c("bigconsole.widget.calendar.upcomingEvents", "Upcoming Events")
63
64
  }), /* @__PURE__ */ r("span", {
64
65
  className: "text-xs text-text-secondary",
65
- children: [s.length, " events"]
66
+ children: c("bigconsole.widget.calendar.eventCount", "{{count}} events", { count: l.length })
66
67
  })]
67
68
  }),
68
- /* @__PURE__ */ n("div", {
69
+ /* @__PURE__ */ r("div", {
69
70
  className: "flex-1 space-y-2 overflow-auto",
70
- children: c.map((e) => {
71
- let t = new Date(e.start), i = t.toDateString() === (/* @__PURE__ */ new Date()).toDateString();
72
- return /* @__PURE__ */ n("div", {
71
+ children: u.map((e) => {
72
+ let t = new Date(e.start), n = t.toDateString() === (/* @__PURE__ */ new Date()).toDateString();
73
+ return /* @__PURE__ */ r("div", {
73
74
  className: `
74
75
  p-3 rounded-lg border border-border-default
75
- ${o ? "cursor-pointer hover:border-action-primary-bg" : ""}
76
+ ${s ? "cursor-pointer hover:border-action-primary-bg" : ""}
76
77
  transition-colors
77
78
  `,
78
- onClick: () => o?.(e),
79
- children: /* @__PURE__ */ r("div", {
79
+ onClick: () => s?.(e),
80
+ children: /* @__PURE__ */ i("div", {
80
81
  className: "flex items-start gap-3",
81
- children: [/* @__PURE__ */ n("div", {
82
+ children: [/* @__PURE__ */ r("div", {
82
83
  className: "w-1 h-full min-h-[40px] rounded-full flex-shrink-0",
83
84
  style: { backgroundColor: e.color || "var(--color-action-primary-bg)" }
84
- }), /* @__PURE__ */ r("div", {
85
+ }), /* @__PURE__ */ i("div", {
85
86
  className: "flex-1 min-w-0",
86
87
  children: [
87
- /* @__PURE__ */ n("p", {
88
+ /* @__PURE__ */ r("p", {
88
89
  className: "text-sm font-medium text-text-primary truncate",
89
90
  children: e.title
90
91
  }),
91
- /* @__PURE__ */ r("p", {
92
+ /* @__PURE__ */ i("p", {
92
93
  className: "text-xs text-text-secondary mt-1",
93
94
  children: [
94
- i ? /* @__PURE__ */ n("span", {
95
+ n ? /* @__PURE__ */ r("span", {
95
96
  className: "text-status-success-text font-medium",
96
- children: "Today"
97
+ children: c("bigconsole.widget.calendar.today", "Today")
97
98
  }) : t.toLocaleDateString("en-US", {
98
99
  weekday: "short",
99
100
  month: "short",
100
101
  day: "numeric"
101
102
  }),
102
- !e.allDay && /* @__PURE__ */ n("span", {
103
+ !e.allDay && /* @__PURE__ */ r("span", {
103
104
  className: "ml-2",
104
105
  children: t.toLocaleTimeString("en-US", {
105
106
  hour: "numeric",
106
107
  minute: "2-digit"
107
108
  })
108
109
  }),
109
- e.allDay && /* @__PURE__ */ n("span", {
110
+ e.allDay && /* @__PURE__ */ r("span", {
110
111
  className: "ml-2",
111
- children: "All day"
112
+ children: c("bigconsole.widget.calendar.allDay", "All day")
112
113
  })
113
114
  ]
114
115
  }),
115
- e.category && /* @__PURE__ */ n("span", {
116
+ e.category && /* @__PURE__ */ r("span", {
116
117
  className: "inline-block mt-1 px-2 py-0.5 text-[10px] rounded bg-bg-sunken text-text-secondary",
117
118
  children: e.category
118
119
  })
@@ -122,35 +123,31 @@ var o = e(function({ widget: e, data: i, onClick: o }) {
122
123
  }, e.id);
123
124
  })
124
125
  }),
125
- s.length > c.length && /* @__PURE__ */ r("p", {
126
- className: "text-xs text-text-tertiary text-center mt-3",
127
- children: [
128
- "+",
129
- s.length - c.length,
130
- " more events"
131
- ]
126
+ l.length > u.length && /* @__PURE__ */ r("p", {
127
+ className: "text-xs text-text-muted text-center mt-3",
128
+ children: c("bigconsole.widget.calendar.moreEvents", "+{{count}} more events", { count: l.length - u.length })
132
129
  })
133
130
  ]
134
- }) : /* @__PURE__ */ n("div", {
131
+ }) : /* @__PURE__ */ r("div", {
135
132
  className: "flex items-center justify-center h-full text-text-secondary text-sm",
136
- children: /* @__PURE__ */ r("div", {
133
+ children: /* @__PURE__ */ i("div", {
137
134
  className: "text-center",
138
- children: [/* @__PURE__ */ n("svg", {
139
- className: "w-12 h-12 mx-auto mb-2 text-text-tertiary",
135
+ children: [/* @__PURE__ */ r("svg", {
136
+ className: "w-12 h-12 mx-auto mb-2 text-text-muted",
140
137
  fill: "none",
141
138
  stroke: "currentColor",
142
139
  viewBox: "0 0 24 24",
143
- children: /* @__PURE__ */ n("path", {
140
+ children: /* @__PURE__ */ r("path", {
144
141
  strokeLinecap: "round",
145
142
  strokeLinejoin: "round",
146
143
  strokeWidth: 1.5,
147
144
  d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"
148
145
  })
149
- }), /* @__PURE__ */ n("p", { children: "No events to display" })]
146
+ }), /* @__PURE__ */ r("p", { children: c("bigconsole.widget.calendar.emptyState", "No events to display") })]
150
147
  })
151
148
  });
152
149
  });
153
150
  //#endregion
154
- export { o as default };
151
+ export { s as default };
155
152
 
156
153
  //# sourceMappingURL=CalendarWidget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarWidget.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/calendar/CalendarWidget.tsx"],"sourcesContent":["/**\n * CalendarWidget Component\n *\n * Simple calendar view showing events.\n */\n\nimport { type FC, memo, useMemo } from 'react';\nimport type { Widget } from '../../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface CalendarWidgetProps {\n widget: Widget;\n data?: CalendarData;\n onClick?: (event: CalendarEvent) => void;\n}\n\nexport interface CalendarEvent {\n id: string;\n title: string;\n start: string;\n end: string;\n color?: string;\n allDay?: boolean;\n category?: string;\n}\n\nexport interface CalendarData {\n events?: CalendarEvent[];\n currentDate?: string;\n view?: 'month' | 'week' | 'day';\n}\n\n// ============================================================================\n// Normalization\n// ============================================================================\n\nfunction firstDefined<T = unknown>(obj: Record<string, unknown>, keys: string[]): T | undefined {\n for (const key of keys) {\n if (obj[key] !== undefined && obj[key] !== null) return obj[key] as T;\n }\n return undefined;\n}\n\n/**\n * Normalize whatever the widget is bound to into `CalendarEvent[]`. Accepts the\n * documented `{ events, ... }` shape, an events array under a different common\n * key, or a bare array of event-like records — a DataSink parser naturally\n * outputs a bare array, and WidgetWrapper has no calendar-specific reshaping\n * step (unlike table/list/chart), so this widget has to tolerate it itself, the\n * same way MapWidget tolerates a bare marker array instead of requiring\n * `{ markers }`. Field names are matched against common aliases so a parser\n * doesn't have to emit the exact `title`/`start`/`end` keys.\n */\nexport function normalizeCalendarEvents(\n data: CalendarData | CalendarEvent[] | Record<string, unknown> | undefined\n): CalendarEvent[] {\n const rawEvents: unknown = Array.isArray(data)\n ? data\n : Array.isArray((data as CalendarData | undefined)?.events)\n ? (data as CalendarData).events\n : Array.isArray((data as Record<string, unknown> | undefined)?.items)\n ? (data as Record<string, unknown>).items\n : Array.isArray((data as Record<string, unknown> | undefined)?.data)\n ? (data as Record<string, unknown>).data\n : undefined;\n\n if (!Array.isArray(rawEvents)) return [];\n\n return rawEvents\n .map((raw, i): CalendarEvent | null => {\n if (!raw || typeof raw !== 'object') return null;\n const r = raw as Record<string, unknown>;\n const start = firstDefined<string>(r, ['start', 'startDate', 'date', 'startTime']);\n if (!start) return null;\n const end = firstDefined<string>(r, ['end', 'endDate', 'endTime']) ?? start;\n const title = firstDefined<string>(r, ['title', 'name', 'label', 'summary']) ?? 'Untitled event';\n const id = firstDefined<string>(r, ['id', 'eventId', '_id']) ?? `${title}-${start}-${i}`;\n return {\n id: String(id),\n title: String(title),\n start: String(start),\n end: String(end),\n color: typeof r.color === 'string' ? r.color : undefined,\n allDay: typeof r.allDay === 'boolean' ? r.allDay : undefined,\n category: firstDefined<string>(r, ['category', 'group', 'type']),\n };\n })\n .filter((e): e is CalendarEvent => e !== null);\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const CalendarWidget: FC<CalendarWidgetProps> = memo(function CalendarWidget({\n widget: _widget,\n data,\n onClick,\n}) {\n const events = useMemo(() => normalizeCalendarEvents(data), [data]);\n\n // Get upcoming events (next 7 days)\n const upcomingEvents = useMemo(() => {\n const now = new Date();\n const weekFromNow = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);\n return events\n .filter((e) => {\n const eventDate = new Date(e.start);\n return eventDate >= now && eventDate <= weekFromNow;\n })\n .sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime())\n .slice(0, 8);\n }, [events]);\n\n if (!events.length) {\n return (\n <div className=\"flex items-center justify-center h-full text-text-secondary text-sm\">\n <div className=\"text-center\">\n <svg\n className=\"w-12 h-12 mx-auto mb-2 text-text-tertiary\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n <p>No events to display</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col h-full p-4 overflow-auto\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-sm font-medium text-text-primary\">Upcoming Events</h3>\n <span className=\"text-xs text-text-secondary\">{events.length} events</span>\n </div>\n\n {/* Event List */}\n <div className=\"flex-1 space-y-2 overflow-auto\">\n {upcomingEvents.map((event) => {\n const eventDate = new Date(event.start);\n const isToday = eventDate.toDateString() === new Date().toDateString();\n\n return (\n <div\n key={event.id}\n className={`\n p-3 rounded-lg border border-border-default\n ${onClick ? 'cursor-pointer hover:border-action-primary-bg' : ''}\n transition-colors\n `}\n onClick={() => onClick?.(event)}\n >\n <div className=\"flex items-start gap-3\">\n {/* Color indicator */}\n <div\n className=\"w-1 h-full min-h-[40px] rounded-full flex-shrink-0\"\n style={{ backgroundColor: event.color || 'var(--color-action-primary-bg)' }}\n />\n\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-text-primary truncate\">{event.title}</p>\n <p className=\"text-xs text-text-secondary mt-1\">\n {isToday ? (\n <span className=\"text-status-success-text font-medium\">Today</span>\n ) : (\n eventDate.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric' })\n )}\n {!event.allDay && (\n <span className=\"ml-2\">\n {eventDate.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })}\n </span>\n )}\n {event.allDay && <span className=\"ml-2\">All day</span>}\n </p>\n {event.category && (\n <span className=\"inline-block mt-1 px-2 py-0.5 text-[10px] rounded bg-bg-sunken text-text-secondary\">\n {event.category}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n\n {events.length > upcomingEvents.length && (\n <p className=\"text-xs text-text-tertiary text-center mt-3\">\n +{events.length - upcomingEvents.length} more events\n </p>\n )}\n </div>\n );\n});\n\nexport default CalendarWidget;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CalendarWidget.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/calendar/CalendarWidget.tsx"],"sourcesContent":["/**\n * CalendarWidget Component\n *\n * Simple calendar view showing events.\n */\n\nimport { type FC, memo, useMemo } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { Widget } from '../../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface CalendarWidgetProps {\n widget: Widget;\n data?: CalendarData;\n onClick?: (event: CalendarEvent) => void;\n}\n\nexport interface CalendarEvent {\n id: string;\n title: string;\n start: string;\n end: string;\n color?: string;\n allDay?: boolean;\n category?: string;\n}\n\nexport interface CalendarData {\n events?: CalendarEvent[];\n currentDate?: string;\n view?: 'month' | 'week' | 'day';\n}\n\n// ============================================================================\n// Normalization\n// ============================================================================\n\nfunction firstDefined<T = unknown>(obj: Record<string, unknown>, keys: string[]): T | undefined {\n for (const key of keys) {\n if (obj[key] !== undefined && obj[key] !== null) return obj[key] as T;\n }\n return undefined;\n}\n\n/**\n * Normalize whatever the widget is bound to into `CalendarEvent[]`. Accepts the\n * documented `{ events, ... }` shape, an events array under a different common\n * key, or a bare array of event-like records — a DataSink parser naturally\n * outputs a bare array, and WidgetWrapper has no calendar-specific reshaping\n * step (unlike table/list/chart), so this widget has to tolerate it itself, the\n * same way MapWidget tolerates a bare marker array instead of requiring\n * `{ markers }`. Field names are matched against common aliases so a parser\n * doesn't have to emit the exact `title`/`start`/`end` keys.\n */\nexport function normalizeCalendarEvents(\n data: CalendarData | CalendarEvent[] | Record<string, unknown> | undefined\n): CalendarEvent[] {\n const rawEvents: unknown = Array.isArray(data)\n ? data\n : Array.isArray((data as CalendarData | undefined)?.events)\n ? (data as CalendarData).events\n : Array.isArray((data as Record<string, unknown> | undefined)?.items)\n ? (data as Record<string, unknown>).items\n : Array.isArray((data as Record<string, unknown> | undefined)?.data)\n ? (data as Record<string, unknown>).data\n : undefined;\n\n if (!Array.isArray(rawEvents)) return [];\n\n return rawEvents\n .map((raw, i): CalendarEvent | null => {\n if (!raw || typeof raw !== 'object') return null;\n const r = raw as Record<string, unknown>;\n const start = firstDefined<string>(r, ['start', 'startDate', 'date', 'startTime']);\n if (!start) return null;\n const end = firstDefined<string>(r, ['end', 'endDate', 'endTime']) ?? start;\n const title = firstDefined<string>(r, ['title', 'name', 'label', 'summary']) ?? 'Untitled event';\n const id = firstDefined<string>(r, ['id', 'eventId', '_id']) ?? `${title}-${start}-${i}`;\n return {\n id: String(id),\n title: String(title),\n start: String(start),\n end: String(end),\n color: typeof r.color === 'string' ? r.color : undefined,\n allDay: typeof r.allDay === 'boolean' ? r.allDay : undefined,\n category: firstDefined<string>(r, ['category', 'group', 'type']),\n };\n })\n .filter((e): e is CalendarEvent => e !== null);\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const CalendarWidget: FC<CalendarWidgetProps> = memo(function CalendarWidget({\n widget: _widget,\n data,\n onClick,\n}) {\n const { t } = useI18n();\n const events = useMemo(() => normalizeCalendarEvents(data), [data]);\n\n // Get upcoming events (next 7 days)\n const upcomingEvents = useMemo(() => {\n const now = new Date();\n const weekFromNow = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);\n return events\n .filter((e) => {\n const eventDate = new Date(e.start);\n return eventDate >= now && eventDate <= weekFromNow;\n })\n .sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime())\n .slice(0, 8);\n }, [events]);\n\n if (!events.length) {\n return (\n <div className=\"flex items-center justify-center h-full text-text-secondary text-sm\">\n <div className=\"text-center\">\n <svg className=\"w-12 h-12 mx-auto mb-2 text-text-muted\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n <p>{t('bigconsole.widget.calendar.emptyState', 'No events to display')}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col h-full p-4 overflow-auto\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-sm font-medium text-text-primary\">\n {t('bigconsole.widget.calendar.upcomingEvents', 'Upcoming Events')}\n </h3>\n <span className=\"text-xs text-text-secondary\">\n {t('bigconsole.widget.calendar.eventCount', '{{count}} events', { count: events.length })}\n </span>\n </div>\n\n {/* Event List */}\n <div className=\"flex-1 space-y-2 overflow-auto\">\n {upcomingEvents.map((event) => {\n const eventDate = new Date(event.start);\n const isToday = eventDate.toDateString() === new Date().toDateString();\n\n return (\n <div\n key={event.id}\n className={`\n p-3 rounded-lg border border-border-default\n ${onClick ? 'cursor-pointer hover:border-action-primary-bg' : ''}\n transition-colors\n `}\n onClick={() => onClick?.(event)}\n >\n <div className=\"flex items-start gap-3\">\n {/* Color indicator */}\n <div\n className=\"w-1 h-full min-h-[40px] rounded-full flex-shrink-0\"\n style={{ backgroundColor: event.color || 'var(--color-action-primary-bg)' }}\n />\n\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-text-primary truncate\">{event.title}</p>\n <p className=\"text-xs text-text-secondary mt-1\">\n {isToday ? (\n <span className=\"text-status-success-text font-medium\">\n {t('bigconsole.widget.calendar.today', 'Today')}\n </span>\n ) : (\n eventDate.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric' })\n )}\n {!event.allDay && (\n <span className=\"ml-2\">\n {eventDate.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })}\n </span>\n )}\n {event.allDay && <span className=\"ml-2\">{t('bigconsole.widget.calendar.allDay', 'All day')}</span>}\n </p>\n {event.category && (\n <span className=\"inline-block mt-1 px-2 py-0.5 text-[10px] rounded bg-bg-sunken text-text-secondary\">\n {event.category}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n\n {events.length > upcomingEvents.length && (\n <p className=\"text-xs text-text-muted text-center mt-3\">\n {t('bigconsole.widget.calendar.moreEvents', '+{{count}} more events', {\n count: events.length - upcomingEvents.length,\n })}\n </p>\n )}\n </div>\n );\n});\n\nexport default CalendarWidget;\n"],"mappings":"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"}