@burdenoff/microfe-bigconsole 2026.805.2 → 2026.805.3

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 (134) hide show
  1. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +109 -113
  2. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
  3. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +115 -113
  4. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
  5. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +71 -62
  6. package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
  7. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +90 -89
  8. package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
  9. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +56 -54
  10. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
  11. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +126 -125
  12. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
  13. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +151 -150
  14. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
  15. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +77 -76
  16. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
  17. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +97 -96
  18. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  19. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +172 -191
  20. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
  21. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +75 -83
  22. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js.map +1 -1
  23. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +151 -154
  24. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
  25. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +181 -190
  26. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js.map +1 -1
  27. package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -0
  28. package/dist/bigconsole/components/dashboard/WidgetPalette.js +110 -108
  29. package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
  30. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +102 -103
  31. package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
  32. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +36 -41
  33. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
  34. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +38 -37
  35. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
  36. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +113 -117
  37. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js.map +1 -1
  38. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +182 -197
  39. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  40. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +166 -168
  41. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
  42. package/dist/bigconsole/components/parser/DataSinkSelector.js +87 -86
  43. package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
  44. package/dist/bigconsole/components/parser/ImportParserDialog.js +196 -211
  45. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  46. package/dist/bigconsole/components/parser/ParserSelector.js +130 -128
  47. package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
  48. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +66 -63
  49. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
  50. package/dist/bigconsole/components/preview/AiPreviewPanel.js +95 -91
  51. package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
  52. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +222 -215
  53. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  54. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +149 -145
  55. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
  56. package/dist/bigconsole/components/widgets/PropertiesPanel.js +504 -470
  57. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  58. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +44 -47
  59. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
  60. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +143 -142
  61. package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
  62. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +101 -88
  63. package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
  64. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +135 -134
  65. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
  66. package/dist/bigconsole/components/widgets/form/FormWidget.js +167 -159
  67. package/dist/bigconsole/components/widgets/form/FormWidget.js.map +1 -1
  68. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +69 -68
  69. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
  70. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +64 -72
  71. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
  72. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +60 -59
  73. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
  74. package/dist/bigconsole/components/widgets/list/ListConfig.js +57 -56
  75. package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
  76. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +70 -69
  77. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
  78. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +35 -34
  79. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
  80. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +20 -19
  81. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js.map +1 -1
  82. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +178 -177
  83. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
  84. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +76 -75
  85. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
  86. package/dist/bigconsole/components/widgets/table/TableConfig.js +183 -168
  87. package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
  88. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +187 -180
  89. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
  90. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +40 -38
  91. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
  92. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +150 -148
  93. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
  94. package/dist/bigconsole/pages/DashboardBuilderPage.js +181 -176
  95. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  96. package/dist/bigconsole/pages/DashboardViewPage.js +196 -192
  97. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  98. package/dist/bigconsole/pages/DashboardsPage.js +223 -219
  99. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  100. package/dist/bigconsole/pages/DataParsersPage.js +167 -170
  101. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  102. package/dist/bigconsole/pages/DataSinkBuilderPage.js +204 -189
  103. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  104. package/dist/bigconsole/pages/DataSinkViewPage.js +175 -169
  105. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  106. package/dist/bigconsole/pages/DataSourcesPage.js +8 -7
  107. package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
  108. package/dist/bigconsole/pages/InsightsPage.js +238 -208
  109. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  110. package/dist/bigconsole/pages/ParserBuilderPage.js +464 -412
  111. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  112. package/dist/bigconsole/pages/ParserViewPage.js +92 -90
  113. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  114. package/dist/bigconsole/pages/PipelineBuilderPage.js +221 -194
  115. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  116. package/dist/bigconsole/pages/PipelineViewPage.js +181 -184
  117. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  118. package/dist/bigconsole/pages/PipelinesPage.js +128 -127
  119. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  120. package/dist/bigconsole/pages/SettingsPage.js +177 -172
  121. package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
  122. package/dist/bigconsole/pages/WidgetDemoPage.js +121 -83
  123. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  124. package/dist/bigconsole/pages/WorkflowViewPage.js +199 -193
  125. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  126. package/dist/bigconsole/pages/WorkflowsPage.js +129 -128
  127. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  128. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +111 -109
  129. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js.map +1 -1
  130. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +127 -126
  131. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js.map +1 -1
  132. package/dist/bigconsole/renderers/adapters/CustomRenderer.js +103 -103
  133. package/dist/bigconsole/renderers/adapters/CustomRenderer.js.map +1 -1
  134. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FilterChip.js","names":[],"sources":["../../../../../src/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.tsx"],"sourcesContent":["/**\n * FilterChip Component\n *\n * Individual filter chip with value display and controls.\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport type { GlobalFilter, FilterType } from '../../../hooks';\n\n// Dynamic colors that respect dark mode\nconst getColors = (isDark: boolean) => ({\n bgPrimary: isDark ? '#1f2937' : '#ffffff',\n bgSecondary: isDark ? '#374151' : '#f9fafb',\n textPrimary: isDark ? '#f9fafb' : '#111827',\n textSecondary: isDark ? '#9ca3af' : '#6b7280',\n borderDefault: isDark ? '#4b5563' : '#e5e7eb',\n actionPrimaryBg: '#6366f1',\n actionPrimaryBgSubtle: isDark ? '#312e81' : '#eef2ff',\n actionPrimaryFg: '#ffffff',\n bgTertiary: isDark ? '#4b5563' : '#f3f4f6',\n textTertiary: isDark ? '#6b7280' : '#9ca3af',\n statusErrorText: '#ef4444',\n statusErrorBg: isDark ? '#991b1b' : '#fee2e2',\n actionPrimaryText: isDark ? '#c7d2fe' : '#4338ca',\n backdropBg: 'rgba(0, 0, 0, 0.5)',\n});\n\n// Hook to detect dark mode\nfunction useDarkMode() {\n const [isDark, setIsDark] = useState(false);\n\n useEffect(() => {\n const checkDarkMode = () => {\n setIsDark(document.documentElement.classList.contains('dark'));\n };\n checkDarkMode();\n\n const observer = new MutationObserver(checkDarkMode);\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });\n return () => observer.disconnect();\n }, []);\n\n return isDark;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface FilterChipProps {\n filter: GlobalFilter;\n value: unknown;\n onChange: (value: unknown) => void;\n onEdit: () => void;\n onDelete: () => void;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Format filter value for display\n * Filter types per spec: DATE_RANGE, CATEGORY, CUSTOM, NUMERIC_RANGE, TEXT_SEARCH\n */\nfunction formatFilterValue(value: unknown, type: FilterType): string {\n if (value === undefined || value === null) {\n return 'All';\n }\n\n switch (type) {\n case 'DATE_RANGE': {\n const dateRange = value as Record<string, unknown>;\n if (dateRange.start && dateRange.end) {\n return `${formatDate(dateRange.start as string)} - ${formatDate(dateRange.end as string)}`;\n }\n return 'All dates';\n }\n\n case 'CATEGORY':\n // Category can be single or multiple selection\n if (Array.isArray(value) && value.length > 0) {\n if (value.length === 1) {\n const first = value[0] as Record<string, unknown> | string;\n return (\n (typeof first === 'object' && first !== null\n ? ((first as Record<string, unknown>).label as string)\n : first) || String(value[0])\n );\n }\n return `${value.length} selected`;\n }\n if (typeof value === 'object' && value !== null) {\n return ((value as Record<string, unknown>).label as string) || 'All';\n }\n return String(value) || 'All';\n\n case 'TEXT_SEARCH':\n return (value as string) || 'Any';\n\n case 'NUMERIC_RANGE': {\n const numRange = value as Record<string, unknown>;\n if (numRange.min !== undefined && numRange.max !== undefined) {\n return `${numRange.min} - ${numRange.max}`;\n }\n if (numRange.min !== undefined) {\n return `>= ${numRange.min}`;\n }\n if (numRange.max !== undefined) {\n return `<= ${numRange.max}`;\n }\n return 'Any';\n }\n\n case 'CUSTOM':\n // Custom filters may have various value formats\n if (typeof value === 'object') {\n return JSON.stringify(value).substring(0, 30) + '...';\n }\n return String(value);\n\n default:\n return String(value);\n }\n}\n\nfunction formatDate(date: string | Date): string {\n const d = new Date(date);\n return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function FilterChip({ filter, value, onChange, onEdit, onDelete }: FilterChipProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [showMenu, setShowMenu] = useState(false);\n const chipRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const isDarkMode = useDarkMode();\n const SEMANTIC_COLORS = getColors(isDarkMode);\n\n const hasValue = value !== undefined && value !== null && value !== '';\n const displayValue = formatFilterValue(value, filter.type);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (chipRef.current && !chipRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setShowMenu(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(undefined);\n };\n\n return (\n <div\n ref={chipRef}\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 16px',\n backgroundColor: hasValue ? SEMANTIC_COLORS.actionPrimaryBgSubtle : SEMANTIC_COLORS.bgPrimary,\n border: `2px solid ${hasValue ? SEMANTIC_COLORS.actionPrimaryBg : SEMANTIC_COLORS.textTertiary}`,\n borderRadius: '24px',\n fontSize: '15px',\n cursor: 'pointer',\n userSelect: 'none',\n boxShadow: '0 2px 6px rgba(0,0,0,0.12)',\n transition: 'all 0.2s ease',\n minHeight: '36px',\n }}\n >\n {/* Filter Name */}\n <span\n style={{\n fontWeight: 700,\n color: hasValue ? SEMANTIC_COLORS.actionPrimaryText : SEMANTIC_COLORS.textPrimary,\n fontSize: '14px',\n }}\n onClick={() => setIsOpen(!isOpen)}\n >\n {filter.name}:\n </span>\n\n {/* Filter Value */}\n <span\n style={{\n color: hasValue ? SEMANTIC_COLORS.actionPrimaryBg : SEMANTIC_COLORS.textSecondary,\n maxWidth: '200px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontWeight: 600,\n fontSize: '14px',\n }}\n onClick={() => setIsOpen(!isOpen)}\n >\n {displayValue}\n </span>\n\n {/* Clear button */}\n {hasValue && (\n <button\n onClick={handleClear}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '22px',\n height: '22px',\n padding: 0,\n backgroundColor: SEMANTIC_COLORS.statusErrorBg,\n border: 'none',\n borderRadius: '50%',\n cursor: 'pointer',\n color: SEMANTIC_COLORS.actionPrimaryFg,\n fontSize: '14px',\n fontWeight: 'bold',\n marginLeft: '4px',\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\n }}\n title=\"Clear filter\"\n >\n ×\n </button>\n )}\n\n {/* Menu button */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(!showMenu);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '22px',\n height: '22px',\n padding: 0,\n backgroundColor: SEMANTIC_COLORS.textTertiary,\n border: 'none',\n borderRadius: '50%',\n cursor: 'pointer',\n color: SEMANTIC_COLORS.actionPrimaryFg,\n fontSize: '16px',\n fontWeight: 'bold',\n marginLeft: '4px',\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\n }}\n title=\"Filter options\"\n >\n ⋮\n </button>\n\n {/* Value Editor Dropdown */}\n {isOpen && (\n <FilterValueEditor\n filter={filter}\n value={value}\n onChange={(newValue) => {\n onChange(newValue);\n setIsOpen(false);\n }}\n onClose={() => setIsOpen(false)}\n />\n )}\n\n {/* Context Menu */}\n {showMenu && (\n <>\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 99998,\n }}\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(false);\n }}\n />\n <div\n ref={menuRef}\n style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: '8px',\n minWidth: '150px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '8px',\n boxShadow: '0 8px 24px rgba(0,0,0,0.2)',\n zIndex: 99999,\n overflow: 'hidden',\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(false);\n onEdit();\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: '12px 16px',\n textAlign: 'left',\n backgroundColor: 'transparent',\n border: 'none',\n borderBottom: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n cursor: 'pointer',\n fontSize: '14px',\n color: SEMANTIC_COLORS.textPrimary,\n fontWeight: 500,\n }}\n >\n ✏️ Edit Filter\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(false);\n onDelete();\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: '12px 16px',\n textAlign: 'left',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: SEMANTIC_COLORS.statusErrorText,\n fontWeight: 500,\n }}\n >\n 🗑️ Delete Filter\n </button>\n </div>\n </>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// FilterValueEditor Sub-component\n// ============================================================================\n\ninterface FilterValueEditorProps {\n filter: GlobalFilter;\n value: unknown;\n onChange: (value: unknown) => void;\n onClose: () => void;\n}\n\nfunction FilterValueEditor({ filter, value, onChange, onClose }: FilterValueEditorProps) {\n const [localValue, setLocalValue] = useState(value);\n const isDarkMode = useDarkMode();\n const SEMANTIC_COLORS = getColors(isDarkMode);\n\n const handleApply = () => {\n onChange(localValue);\n };\n\n return (\n <>\n {/* Backdrop to capture clicks outside */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 99998,\n }}\n onClick={onClose}\n />\n <div\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: '8px',\n minWidth: '280px',\n padding: '16px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '12px',\n boxShadow: '0 8px 24px rgba(0,0,0,0.25)',\n zIndex: 99999,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Render appropriate input based on filter type (per spec) */}\n {filter.type === 'TEXT_SEARCH' && (\n <input\n type=\"text\"\n value={(localValue as string) || ''}\n onChange={(e) => setLocalValue(e.target.value)}\n placeholder=\"Search...\"\n style={{\n width: '100%',\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n boxSizing: 'border-box',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n )}\n\n {filter.type === 'CATEGORY' && (\n <select\n value={(localValue as string) || ''}\n onChange={(e) => setLocalValue(e.target.value)}\n style={{\n width: '100%',\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n >\n <option value=\"\">All</option>\n {(filter.config.options as Array<Record<string, unknown>> | undefined)?.map((opt) => (\n <option key={String(opt.value)} value={String(opt.value)}>\n {String(opt.label)}\n </option>\n ))}\n </select>\n )}\n\n {filter.type === 'DATE_RANGE' &&\n (() => {\n const dateVal = (localValue || {}) as Record<string, string>;\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <input\n type=\"date\"\n value={dateVal.start || ''}\n onChange={(e) => setLocalValue({ ...dateVal, start: e.target.value })}\n style={{\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n <input\n type=\"date\"\n value={dateVal.end || ''}\n onChange={(e) => setLocalValue({ ...dateVal, end: e.target.value })}\n style={{\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n </div>\n );\n })()}\n\n {filter.type === 'NUMERIC_RANGE' &&\n (() => {\n const numVal = (localValue || {}) as Record<string, number | undefined>;\n return (\n <div style={{ display: 'flex', gap: '8px' }}>\n <input\n type=\"number\"\n value={numVal.min ?? ''}\n onChange={(e) =>\n setLocalValue({ ...numVal, min: e.target.value ? Number(e.target.value) : undefined })\n }\n placeholder=\"Min\"\n style={{\n flex: 1,\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n <input\n type=\"number\"\n value={numVal.max ?? ''}\n onChange={(e) =>\n setLocalValue({ ...numVal, max: e.target.value ? Number(e.target.value) : undefined })\n }\n placeholder=\"Max\"\n style={{\n flex: 1,\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n </div>\n );\n })()}\n\n {filter.type === 'CUSTOM' && (\n <input\n type=\"text\"\n value={typeof localValue === 'string' ? localValue : JSON.stringify(localValue || '')}\n onChange={(e) => setLocalValue(e.target.value)}\n placeholder=\"Custom filter value...\"\n style={{\n width: '100%',\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n boxSizing: 'border-box',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n )}\n\n {/* Apply Button */}\n <div style={{ marginTop: '16px', display: 'flex', justifyContent: 'flex-end', gap: '10px' }}>\n <button\n onClick={onClose}\n style={{\n padding: '8px 16px',\n fontSize: '14px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '6px',\n cursor: 'pointer',\n color: SEMANTIC_COLORS.textSecondary,\n fontWeight: 500,\n }}\n >\n Cancel\n </button>\n <button\n onClick={handleApply}\n style={{\n padding: '8px 16px',\n fontSize: '14px',\n backgroundColor: SEMANTIC_COLORS.actionPrimaryBg,\n color: SEMANTIC_COLORS.actionPrimaryFg,\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontWeight: 500,\n boxShadow: '0 2px 4px rgba(99, 102, 241, 0.3)',\n }}\n >\n Apply\n </button>\n </div>\n </div>\n </>\n );\n}\n\nexport default FilterChip;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FilterChip.js","names":[],"sources":["../../../../../src/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.tsx"],"sourcesContent":["/**\n * FilterChip Component\n *\n * Individual filter chip with value display and controls.\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { GlobalFilter, FilterType } from '../../../hooks';\n\ntype TranslateFn = (\n key: string,\n fallbackOrParams?: string | Record<string, string | number>,\n params?: Record<string, string | number>\n) => string;\n\n// Dynamic colors that respect dark mode\nconst getColors = (isDark: boolean) => ({\n bgPrimary: isDark ? '#1f2937' : '#ffffff',\n bgSecondary: isDark ? '#374151' : '#f9fafb',\n textPrimary: isDark ? '#f9fafb' : '#111827',\n textSecondary: isDark ? '#9ca3af' : '#6b7280',\n borderDefault: isDark ? '#4b5563' : '#e5e7eb',\n actionPrimaryBg: '#6366f1',\n actionPrimaryBgSubtle: isDark ? '#312e81' : '#eef2ff',\n actionPrimaryFg: '#ffffff',\n bgTertiary: isDark ? '#4b5563' : '#f3f4f6',\n textTertiary: isDark ? '#6b7280' : '#9ca3af',\n statusErrorText: '#ef4444',\n statusErrorBg: isDark ? '#991b1b' : '#fee2e2',\n actionPrimaryText: isDark ? '#c7d2fe' : '#4338ca',\n backdropBg: 'rgba(0, 0, 0, 0.5)',\n});\n\n// Hook to detect dark mode\nfunction useDarkMode() {\n const [isDark, setIsDark] = useState(false);\n\n useEffect(() => {\n const checkDarkMode = () => {\n setIsDark(document.documentElement.classList.contains('dark'));\n };\n checkDarkMode();\n\n const observer = new MutationObserver(checkDarkMode);\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });\n return () => observer.disconnect();\n }, []);\n\n return isDark;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface FilterChipProps {\n filter: GlobalFilter;\n value: unknown;\n onChange: (value: unknown) => void;\n onEdit: () => void;\n onDelete: () => void;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Format filter value for display\n * Filter types per spec: DATE_RANGE, CATEGORY, CUSTOM, NUMERIC_RANGE, TEXT_SEARCH\n */\nfunction formatFilterValue(value: unknown, type: FilterType, t: TranslateFn): string {\n if (value === undefined || value === null) {\n return t('bigconsole.filters.chip.value.all', 'All');\n }\n\n switch (type) {\n case 'DATE_RANGE': {\n const dateRange = value as Record<string, unknown>;\n if (dateRange.start && dateRange.end) {\n return `${formatDate(dateRange.start as string)} - ${formatDate(dateRange.end as string)}`;\n }\n return t('bigconsole.filters.chip.value.allDates', 'All dates');\n }\n\n case 'CATEGORY':\n // Category can be single or multiple selection\n if (Array.isArray(value) && value.length > 0) {\n if (value.length === 1) {\n const first = value[0] as Record<string, unknown> | string;\n return (\n (typeof first === 'object' && first !== null\n ? ((first as Record<string, unknown>).label as string)\n : first) || String(value[0])\n );\n }\n return t('bigconsole.filters.chip.value.countSelected', '{{count}} selected', {\n count: value.length,\n });\n }\n if (typeof value === 'object' && value !== null) {\n return ((value as Record<string, unknown>).label as string) || t('bigconsole.filters.chip.value.all', 'All');\n }\n return String(value) || t('bigconsole.filters.chip.value.all', 'All');\n\n case 'TEXT_SEARCH':\n return (value as string) || t('bigconsole.filters.chip.value.any', 'Any');\n\n case 'NUMERIC_RANGE': {\n const numRange = value as Record<string, unknown>;\n if (numRange.min !== undefined && numRange.max !== undefined) {\n return `${numRange.min} - ${numRange.max}`;\n }\n if (numRange.min !== undefined) {\n return `>= ${numRange.min}`;\n }\n if (numRange.max !== undefined) {\n return `<= ${numRange.max}`;\n }\n return t('bigconsole.filters.chip.value.any', 'Any');\n }\n\n case 'CUSTOM':\n // Custom filters may have various value formats\n if (typeof value === 'object') {\n return JSON.stringify(value).substring(0, 30) + '...';\n }\n return String(value);\n\n default:\n return String(value);\n }\n}\n\nfunction formatDate(date: string | Date): string {\n const d = new Date(date);\n return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function FilterChip({ filter, value, onChange, onEdit, onDelete }: FilterChipProps) {\n const { t } = useI18n();\n const [isOpen, setIsOpen] = useState(false);\n const [showMenu, setShowMenu] = useState(false);\n const chipRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const isDarkMode = useDarkMode();\n const SEMANTIC_COLORS = getColors(isDarkMode);\n\n const hasValue = value !== undefined && value !== null && value !== '';\n const displayValue = formatFilterValue(value, filter.type, t);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (chipRef.current && !chipRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setShowMenu(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(undefined);\n };\n\n return (\n <div\n ref={chipRef}\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 16px',\n backgroundColor: hasValue ? SEMANTIC_COLORS.actionPrimaryBgSubtle : SEMANTIC_COLORS.bgPrimary,\n border: `2px solid ${hasValue ? SEMANTIC_COLORS.actionPrimaryBg : SEMANTIC_COLORS.textTertiary}`,\n borderRadius: '24px',\n fontSize: '15px',\n cursor: 'pointer',\n userSelect: 'none',\n boxShadow: '0 2px 6px rgba(0,0,0,0.12)',\n transition: 'all 0.2s ease',\n minHeight: '36px',\n }}\n >\n {/* Filter Name */}\n <span\n style={{\n fontWeight: 700,\n color: hasValue ? SEMANTIC_COLORS.actionPrimaryText : SEMANTIC_COLORS.textPrimary,\n fontSize: '14px',\n }}\n onClick={() => setIsOpen(!isOpen)}\n >\n {filter.name}:\n </span>\n\n {/* Filter Value */}\n <span\n style={{\n color: hasValue ? SEMANTIC_COLORS.actionPrimaryBg : SEMANTIC_COLORS.textSecondary,\n maxWidth: '200px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontWeight: 600,\n fontSize: '14px',\n }}\n onClick={() => setIsOpen(!isOpen)}\n >\n {displayValue}\n </span>\n\n {/* Clear button */}\n {hasValue && (\n <button\n onClick={handleClear}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '22px',\n height: '22px',\n padding: 0,\n backgroundColor: SEMANTIC_COLORS.statusErrorBg,\n border: 'none',\n borderRadius: '50%',\n cursor: 'pointer',\n color: SEMANTIC_COLORS.actionPrimaryFg,\n fontSize: '14px',\n fontWeight: 'bold',\n marginLeft: '4px',\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\n }}\n title={t('bigconsole.filters.chip.action.clear', 'Clear filter')}\n >\n ×\n </button>\n )}\n\n {/* Menu button */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(!showMenu);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '22px',\n height: '22px',\n padding: 0,\n backgroundColor: SEMANTIC_COLORS.textTertiary,\n border: 'none',\n borderRadius: '50%',\n cursor: 'pointer',\n color: SEMANTIC_COLORS.actionPrimaryFg,\n fontSize: '16px',\n fontWeight: 'bold',\n marginLeft: '4px',\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\n }}\n title={t('bigconsole.filters.chip.action.options', 'Filter options')}\n >\n ⋮\n </button>\n\n {/* Value Editor Dropdown */}\n {isOpen && (\n <FilterValueEditor\n filter={filter}\n value={value}\n onChange={(newValue) => {\n onChange(newValue);\n setIsOpen(false);\n }}\n onClose={() => setIsOpen(false)}\n />\n )}\n\n {/* Context Menu */}\n {showMenu && (\n <>\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 99998,\n }}\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(false);\n }}\n />\n <div\n ref={menuRef}\n style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: '8px',\n minWidth: '150px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '8px',\n boxShadow: '0 8px 24px rgba(0,0,0,0.2)',\n zIndex: 99999,\n overflow: 'hidden',\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(false);\n onEdit();\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: '12px 16px',\n textAlign: 'left',\n backgroundColor: 'transparent',\n border: 'none',\n borderBottom: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n cursor: 'pointer',\n fontSize: '14px',\n color: SEMANTIC_COLORS.textPrimary,\n fontWeight: 500,\n }}\n >\n ✏️ {t('bigconsole.filters.chip.menu.edit', 'Edit Filter')}\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(false);\n onDelete();\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: '12px 16px',\n textAlign: 'left',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: SEMANTIC_COLORS.statusErrorText,\n fontWeight: 500,\n }}\n >\n 🗑️ {t('bigconsole.filters.chip.menu.delete', 'Delete Filter')}\n </button>\n </div>\n </>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// FilterValueEditor Sub-component\n// ============================================================================\n\ninterface FilterValueEditorProps {\n filter: GlobalFilter;\n value: unknown;\n onChange: (value: unknown) => void;\n onClose: () => void;\n}\n\nfunction FilterValueEditor({ filter, value, onChange, onClose }: FilterValueEditorProps) {\n const { t } = useI18n();\n const [localValue, setLocalValue] = useState(value);\n const isDarkMode = useDarkMode();\n const SEMANTIC_COLORS = getColors(isDarkMode);\n\n const handleApply = () => {\n onChange(localValue);\n };\n\n return (\n <>\n {/* Backdrop to capture clicks outside */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 99998,\n }}\n onClick={onClose}\n />\n <div\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: '8px',\n minWidth: '280px',\n padding: '16px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '12px',\n boxShadow: '0 8px 24px rgba(0,0,0,0.25)',\n zIndex: 99999,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Render appropriate input based on filter type (per spec) */}\n {filter.type === 'TEXT_SEARCH' && (\n <input\n type=\"text\"\n value={(localValue as string) || ''}\n onChange={(e) => setLocalValue(e.target.value)}\n placeholder={t('bigconsole.filters.chip.editor.searchPlaceholder', 'Search...')}\n style={{\n width: '100%',\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n boxSizing: 'border-box',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n )}\n\n {filter.type === 'CATEGORY' && (\n <select\n value={(localValue as string) || ''}\n onChange={(e) => setLocalValue(e.target.value)}\n style={{\n width: '100%',\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n >\n <option value=\"\">{t('bigconsole.filters.chip.editor.allOption', 'All')}</option>\n {(filter.config.options as Array<Record<string, unknown>> | undefined)?.map((opt) => (\n <option key={String(opt.value)} value={String(opt.value)}>\n {String(opt.label)}\n </option>\n ))}\n </select>\n )}\n\n {filter.type === 'DATE_RANGE' &&\n (() => {\n const dateVal = (localValue || {}) as Record<string, string>;\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <input\n type=\"date\"\n value={dateVal.start || ''}\n onChange={(e) => setLocalValue({ ...dateVal, start: e.target.value })}\n style={{\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n <input\n type=\"date\"\n value={dateVal.end || ''}\n onChange={(e) => setLocalValue({ ...dateVal, end: e.target.value })}\n style={{\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n </div>\n );\n })()}\n\n {filter.type === 'NUMERIC_RANGE' &&\n (() => {\n const numVal = (localValue || {}) as Record<string, number | undefined>;\n return (\n <div style={{ display: 'flex', gap: '8px' }}>\n <input\n type=\"number\"\n value={numVal.min ?? ''}\n onChange={(e) =>\n setLocalValue({ ...numVal, min: e.target.value ? Number(e.target.value) : undefined })\n }\n placeholder={t('bigconsole.filters.chip.editor.minPlaceholder', 'Min')}\n style={{\n flex: 1,\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n <input\n type=\"number\"\n value={numVal.max ?? ''}\n onChange={(e) =>\n setLocalValue({ ...numVal, max: e.target.value ? Number(e.target.value) : undefined })\n }\n placeholder={t('bigconsole.filters.chip.editor.maxPlaceholder', 'Max')}\n style={{\n flex: 1,\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n </div>\n );\n })()}\n\n {filter.type === 'CUSTOM' && (\n <input\n type=\"text\"\n value={typeof localValue === 'string' ? localValue : JSON.stringify(localValue || '')}\n onChange={(e) => setLocalValue(e.target.value)}\n placeholder={t('bigconsole.filters.chip.editor.customPlaceholder', 'Custom filter value...')}\n style={{\n width: '100%',\n padding: '8px',\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '4px',\n fontSize: '13px',\n boxSizing: 'border-box',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n color: SEMANTIC_COLORS.textPrimary,\n }}\n />\n )}\n\n {/* Apply Button */}\n <div style={{ marginTop: '16px', display: 'flex', justifyContent: 'flex-end', gap: '10px' }}>\n <button\n onClick={onClose}\n style={{\n padding: '8px 16px',\n fontSize: '14px',\n backgroundColor: SEMANTIC_COLORS.bgPrimary,\n border: `1px solid ${SEMANTIC_COLORS.borderDefault}`,\n borderRadius: '6px',\n cursor: 'pointer',\n color: SEMANTIC_COLORS.textSecondary,\n fontWeight: 500,\n }}\n >\n {t('bigconsole.filters.chip.editor.cancel', 'Cancel')}\n </button>\n <button\n onClick={handleApply}\n style={{\n padding: '8px 16px',\n fontSize: '14px',\n backgroundColor: SEMANTIC_COLORS.actionPrimaryBg,\n color: SEMANTIC_COLORS.actionPrimaryFg,\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontWeight: 500,\n boxShadow: '0 2px 4px rgba(99, 102, 241, 0.3)',\n }}\n >\n {t('bigconsole.filters.chip.editor.apply', 'Apply')}\n </button>\n </div>\n </div>\n </>\n );\n}\n\nexport default FilterChip;\n"],"mappings":"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"}