web-mojo 2.1.527 → 2.1.529

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 (57) hide show
  1. package/dist/admin.cjs.js +1 -1
  2. package/dist/admin.es.js +10 -10
  3. package/dist/auth.cjs.js +1 -1
  4. package/dist/auth.cjs.js.map +1 -1
  5. package/dist/auth.es.js +3 -3
  6. package/dist/auth.es.js.map +1 -1
  7. package/dist/charts.cjs.js +1 -1
  8. package/dist/charts.cjs.js.map +1 -1
  9. package/dist/charts.es.js +679 -2
  10. package/dist/charts.es.js.map +1 -1
  11. package/dist/chunks/{ChatView-B57YxUKj.js → ChatView-5DP7NWav.js} +6 -6
  12. package/dist/chunks/{ChatView-B57YxUKj.js.map → ChatView-5DP7NWav.js.map} +1 -1
  13. package/dist/chunks/{ChatView-BrVd1y6Y.js → ChatView-D0uBPb-J.js} +2 -2
  14. package/dist/chunks/{ChatView-BrVd1y6Y.js.map → ChatView-D0uBPb-J.js.map} +1 -1
  15. package/dist/chunks/{ContextMenu-CjPlCuJl.js → ContextMenu-C_0Ufmea.js} +2 -2
  16. package/dist/chunks/{ContextMenu-CjPlCuJl.js.map → ContextMenu-C_0Ufmea.js.map} +1 -1
  17. package/dist/chunks/{ContextMenu-Ced9TnyF.js → ContextMenu-D7PRlvcY.js} +2 -2
  18. package/dist/chunks/{ContextMenu-Ced9TnyF.js.map → ContextMenu-D7PRlvcY.js.map} +1 -1
  19. package/dist/chunks/{DataView-CtzsJJ5W.js → DataView-COb1gukO.js} +2 -2
  20. package/dist/chunks/{DataView-CtzsJJ5W.js.map → DataView-COb1gukO.js.map} +1 -1
  21. package/dist/chunks/{DataView-C0sfssWn.js → DataView-T7wmnYqr.js} +2 -2
  22. package/dist/chunks/{DataView-C0sfssWn.js.map → DataView-T7wmnYqr.js.map} +1 -1
  23. package/dist/chunks/{Dialog-ms9f-96b.js → Dialog-BX09s8EF.js} +2 -2
  24. package/dist/chunks/{Dialog-ms9f-96b.js.map → Dialog-BX09s8EF.js.map} +1 -1
  25. package/dist/chunks/{Dialog-Bu4kE-6z.js → Dialog-dm5fTLiY.js} +5 -5
  26. package/dist/chunks/{Dialog-Bu4kE-6z.js.map → Dialog-dm5fTLiY.js.map} +1 -1
  27. package/dist/chunks/{FormView-tRzDzz1X.js → FormView--Wybw8OP.js} +2 -2
  28. package/dist/chunks/{FormView-tRzDzz1X.js.map → FormView--Wybw8OP.js.map} +1 -1
  29. package/dist/chunks/{FormView-D2RN_VDh.js → FormView-5PM8GJfG.js} +2 -2
  30. package/dist/chunks/{FormView-D2RN_VDh.js.map → FormView-5PM8GJfG.js.map} +1 -1
  31. package/dist/chunks/{MetricsChart-Cssnc0Gg.js → MetricsChart-BWQ1YAJP.js} +2 -2
  32. package/dist/chunks/{MetricsChart-Cssnc0Gg.js.map → MetricsChart-BWQ1YAJP.js.map} +1 -1
  33. package/dist/chunks/{MetricsChart-CDX8JKp-.js → MetricsChart-fDEOs6eG.js} +3 -3
  34. package/dist/chunks/{MetricsChart-CDX8JKp-.js.map → MetricsChart-fDEOs6eG.js.map} +1 -1
  35. package/dist/chunks/{PDFViewer-gbGWhRZD.js → PDFViewer-BbYyy42P.js} +3 -3
  36. package/dist/chunks/{PDFViewer-gbGWhRZD.js.map → PDFViewer-BbYyy42P.js.map} +1 -1
  37. package/dist/chunks/{PDFViewer-xyB0U9sL.js → PDFViewer-DPhlBTFr.js} +2 -2
  38. package/dist/chunks/{PDFViewer-xyB0U9sL.js.map → PDFViewer-DPhlBTFr.js.map} +1 -1
  39. package/dist/chunks/{Page-DJA--Pwm.js → Page-B7v6uh02.js} +2 -2
  40. package/dist/chunks/{Page-DJA--Pwm.js.map → Page-B7v6uh02.js.map} +1 -1
  41. package/dist/chunks/{Page-C7F-OstP.js → Page-CcIMnuov.js} +2 -2
  42. package/dist/chunks/{Page-C7F-OstP.js.map → Page-CcIMnuov.js.map} +1 -1
  43. package/dist/chunks/{TopNav-dgXgzEIz.js → TopNav-BC51rpEJ.js} +2 -2
  44. package/dist/chunks/{TopNav-dgXgzEIz.js.map → TopNav-BC51rpEJ.js.map} +1 -1
  45. package/dist/chunks/{TopNav-BusOFMOX.js → TopNav-CudazPzU.js} +2 -2
  46. package/dist/chunks/{TopNav-BusOFMOX.js.map → TopNav-CudazPzU.js.map} +1 -1
  47. package/dist/chunks/{WebApp-DbS9A-y6.js → WebApp-C5V1vLhz.js} +2 -2
  48. package/dist/chunks/{WebApp-DbS9A-y6.js.map → WebApp-C5V1vLhz.js.map} +1 -1
  49. package/dist/chunks/{WebApp-CDxq9aWO.js → WebApp-tr4cjBu1.js} +13 -13
  50. package/dist/chunks/{WebApp-CDxq9aWO.js.map → WebApp-tr4cjBu1.js.map} +1 -1
  51. package/dist/docit.cjs.js +1 -1
  52. package/dist/docit.es.js +5 -5
  53. package/dist/index.cjs.js +1 -1
  54. package/dist/index.es.js +11 -11
  55. package/dist/lightbox.cjs.js +1 -1
  56. package/dist/lightbox.es.js +4 -4
  57. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"charts.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"charts.es.js","sources":["../src/extensions/charts/MiniChart.js","../src/extensions/charts/MetricsMiniChart.js"],"sourcesContent":["/**\n * MiniChart - Lightweight sparkline chart component\n * Renders simple line or bar charts with minimal configuration\n * Uses SVG for crisp rendering at any size\n */\n\nimport View from '@core/View.js';\n\nexport default class MiniChart extends View {\n constructor(options = {}) {\n super({\n className: 'mini-chart',\n ...options\n });\n\n // Chart type: 'line' or 'bar'\n this.chartType = options.chartType || 'line';\n \n // Data\n this.data = options.data || [];\n \n // Dimensions\n this.width = options.width || '100%'; // Support both number and '100%'\n this.height = options.height || 30;\n this.maintainAspectRatio = options.maintainAspectRatio || false;\n \n // Styling\n this.color = options.color || 'rgba(54, 162, 235, 1)'; // Primary blue\n this.fillColor = options.fillColor || 'rgba(54, 162, 235, 0.1)'; // Light fill\n this.strokeWidth = options.strokeWidth || 2;\n this.barGap = options.barGap || 2;\n \n // Fill area under line\n this.fill = options.fill !== false; // Default true\n \n // Curve smoothing (0 = straight lines, 1 = very smooth)\n this.smoothing = options.smoothing || 0.3;\n \n // Padding\n this.padding = options.padding || 2;\n \n // Min/Max values (auto-calculated if not provided)\n this.minValue = options.minValue;\n this.maxValue = options.maxValue;\n \n // Show dots on line chart\n this.showDots = options.showDots || false;\n this.dotRadius = options.dotRadius || 2;\n \n // Animation\n this.animate = options.animate !== false;\n this.animationDuration = options.animationDuration || 300;\n \n // Tooltip\n this.showTooltip = options.showTooltip !== false;\n this.tooltipFormatter = options.tooltipFormatter || null;\n \n // Crosshair\n this.showCrosshair = options.showCrosshair !== false;\n this.crosshairColor = options.crosshairColor || 'rgba(0, 0, 0, 0.2)';\n this.crosshairWidth = options.crosshairWidth || 1;\n \n // Tooltip state\n this.tooltip = null;\n this.crosshair = null;\n this.hoveredIndex = -1;\n }\n\n getTemplate() {\n const widthStyle = typeof this.width === 'number' ? `${this.width}px` : this.width;\n const heightStyle = typeof this.height === 'number' ? `${this.height}px` : this.height;\n const preserveAspectRatio = this.maintainAspectRatio ? 'xMidYMid meet' : 'none';\n \n return `\n <div class=\"mini-chart-wrapper\" style=\"position: relative; display: block; width: ${widthStyle}; height: ${heightStyle};\">\n <svg \n class=\"mini-chart-svg\" \n width=\"100%\" \n height=\"100%\"\n viewBox=\"0 0 100 ${this.height}\"\n preserveAspectRatio=\"${preserveAspectRatio}\"\n style=\"display: block;\">\n </svg>\n ${this.showTooltip ? '<div class=\"mini-chart-tooltip\" style=\"display: none;\"></div>' : ''}\n </div>\n `;\n }\n\n async onAfterRender() {\n this.svg = this.element.querySelector('.mini-chart-svg');\n this.tooltip = this.element.querySelector('.mini-chart-tooltip');\n \n // Get actual rendered dimensions\n this.updateDimensions();\n \n if (this.data && this.data.length > 0) {\n this.renderChart();\n }\n \n // Setup hover interactions if tooltip enabled\n if (this.showTooltip && this.svg) {\n this.setupTooltip();\n }\n \n // Setup resize observer for responsive behavior\n this.setupResizeObserver();\n }\n\n updateDimensions() {\n if (!this.svg) return;\n \n const rect = this.svg.getBoundingClientRect();\n this.actualWidth = rect.width || 100;\n this.actualHeight = rect.height || this.height;\n \n // Update viewBox to match aspect ratio\n this.svg.setAttribute('viewBox', `0 0 ${this.actualWidth} ${this.actualHeight}`);\n }\n\n setupResizeObserver() {\n if (typeof ResizeObserver === 'undefined') return;\n \n this.resizeObserver = new ResizeObserver(() => {\n this.updateDimensions();\n if (this.data && this.data.length > 0) {\n this.renderChart();\n }\n });\n \n if (this.svg) {\n this.resizeObserver.observe(this.svg);\n }\n }\n\n renderChart() {\n if (!this.svg || !this.data || this.data.length === 0) return;\n\n // Clear previous content\n this.svg.innerHTML = '';\n\n // Calculate bounds\n const { min, max } = this.calculateBounds();\n \n if (this.chartType === 'line') {\n this.renderLine(min, max);\n } else if (this.chartType === 'bar') {\n this.renderBar(min, max);\n }\n\n // Add crosshair line (initially hidden)\n if (this.showCrosshair) {\n const height = this.getActualHeight();\n this.crosshair = this.createSVGElement('line', {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: height,\n stroke: this.crosshairColor,\n 'stroke-width': this.crosshairWidth,\n 'stroke-dasharray': '3,3',\n style: 'display: none; pointer-events: none;'\n });\n this.svg.appendChild(this.crosshair);\n }\n\n // Setup tooltip hit areas after rendering chart\n if (this.showTooltip && this.tooltip) {\n this.setupTooltip();\n }\n\n // Apply animation if enabled\n if (this.animate) {\n this.applyAnimation();\n }\n }\n\n calculateBounds() {\n const values = this.data.map(d => typeof d === 'object' ? d.value : d);\n \n let min = this.minValue !== undefined ? this.minValue : Math.min(...values);\n let max = this.maxValue !== undefined ? this.maxValue : Math.max(...values);\n \n // Add padding to range\n const range = max - min;\n if (range === 0) {\n min = min - 1;\n max = max + 1;\n }\n \n return { min, max };\n }\n\n getActualWidth() {\n return this.actualWidth || this.width || 100;\n }\n\n getActualHeight() {\n return this.actualHeight || this.height || 30;\n }\n\n renderLine(min, max) {\n const values = this.data.map(d => typeof d === 'object' ? d.value : d);\n const points = this.calculatePoints(values, min, max);\n \n // Create filled area under line\n if (this.fill) {\n const areaPath = this.createAreaPath(points);\n const area = this.createSVGElement('path', {\n d: areaPath,\n fill: this.fillColor,\n stroke: 'none'\n });\n this.svg.appendChild(area);\n }\n \n // Create line path\n const linePath = this.smoothing > 0 \n ? this.createSmoothPath(points) \n : this.createLinePath(points);\n \n const line = this.createSVGElement('path', {\n d: linePath,\n fill: 'none',\n stroke: this.color,\n 'stroke-width': this.strokeWidth,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round'\n });\n this.svg.appendChild(line);\n \n // Add dots if enabled\n if (this.showDots) {\n points.forEach(point => {\n const dot = this.createSVGElement('circle', {\n cx: point.x,\n cy: point.y,\n r: this.dotRadius,\n fill: this.color\n });\n this.svg.appendChild(dot);\n });\n }\n }\n\n renderBar(min, max) {\n const values = this.data.map(d => typeof d === 'object' ? d.value : d);\n const points = this.calculatePoints(values, min, max);\n \n const width = this.getActualWidth();\n const height = this.getActualHeight();\n const barWidth = (width - this.padding * 2 - (this.barGap * (values.length - 1))) / values.length;\n \n points.forEach((point, index) => {\n const barHeight = height - this.padding * 2 - point.y + this.padding;\n const x = point.x - barWidth / 2;\n const y = point.y;\n \n const bar = this.createSVGElement('rect', {\n x: x,\n y: y,\n width: barWidth,\n height: barHeight,\n fill: this.color,\n rx: 1, // Slight rounding\n 'data-bar-index': index,\n class: 'mini-chart-bar'\n });\n this.svg.appendChild(bar);\n });\n }\n\n calculatePoints(values, min, max) {\n const range = max - min;\n const width = this.getActualWidth();\n const height = this.getActualHeight();\n const xStep = (width - this.padding * 2) / (values.length - 1 || 1);\n const yScale = (height - this.padding * 2) / range;\n \n return values.map((value, index) => ({\n x: this.padding + (index * xStep),\n y: height - this.padding - ((value - min) * yScale)\n }));\n }\n\n createLinePath(points) {\n if (points.length === 0) return '';\n \n let path = `M ${points[0].x},${points[0].y}`;\n for (let i = 1; i < points.length; i++) {\n path += ` L ${points[i].x},${points[i].y}`;\n }\n return path;\n }\n\n createSmoothPath(points) {\n if (points.length < 2) return this.createLinePath(points);\n \n let path = `M ${points[0].x},${points[0].y}`;\n \n for (let i = 0; i < points.length - 1; i++) {\n const current = points[i];\n const next = points[i + 1];\n \n // Calculate control points for cubic bezier curve\n const cp1x = current.x + (next.x - current.x) * this.smoothing;\n const cp1y = current.y;\n const cp2x = next.x - (next.x - current.x) * this.smoothing;\n const cp2y = next.y;\n \n path += ` C ${cp1x},${cp1y} ${cp2x},${cp2y} ${next.x},${next.y}`;\n }\n \n return path;\n }\n\n createAreaPath(points) {\n if (points.length === 0) return '';\n \n const linePath = this.smoothing > 0 \n ? this.createSmoothPath(points) \n : this.createLinePath(points);\n \n // Close the path along the bottom\n const lastPoint = points[points.length - 1];\n const firstPoint = points[0];\n const height = this.getActualHeight();\n \n return `${linePath} L ${lastPoint.x},${height - this.padding} L ${firstPoint.x},${height - this.padding} Z`;\n }\n\n createSVGElement(tag, attributes = {}) {\n const element = document.createElementNS('http://www.w3.org/2000/svg', tag);\n Object.entries(attributes).forEach(([key, value]) => {\n element.setAttribute(key, value);\n });\n return element;\n }\n\n applyAnimation() {\n const paths = this.svg.querySelectorAll('path');\n paths.forEach(path => {\n const length = path.getTotalLength();\n path.style.strokeDasharray = length;\n path.style.strokeDashoffset = length;\n path.style.animation = `mini-chart-draw ${this.animationDuration}ms ease-out forwards`;\n });\n \n const bars = this.svg.querySelectorAll('rect');\n bars.forEach((bar, index) => {\n bar.style.transformOrigin = 'bottom';\n bar.style.animation = `mini-chart-bar-grow ${this.animationDuration}ms ease-out ${index * 20}ms forwards`;\n bar.style.transform = 'scaleY(0)';\n });\n }\n\n setupTooltip() {\n if (!this.svg || !this.tooltip) return;\n \n // Create invisible overlay rects for hover detection\n const values = this.data.map(d => typeof d === 'object' ? d.value : d);\n const points = this.calculatePoints(values, ...Object.values(this.calculateBounds()));\n \n const width = this.getActualWidth();\n const height = this.getActualHeight();\n const barWidth = width / values.length;\n \n points.forEach((point, index) => {\n const hitArea = this.createSVGElement('rect', {\n x: index * barWidth,\n y: 0,\n width: barWidth,\n height: height,\n fill: 'transparent',\n style: 'cursor: pointer;'\n });\n \n hitArea.addEventListener('mouseenter', (e) => {\n this.showTooltipAtIndex(index, e);\n });\n \n hitArea.addEventListener('mousemove', (e) => {\n this.updateTooltipPosition(e);\n });\n \n hitArea.addEventListener('mouseleave', () => {\n this.hideTooltip();\n });\n \n this.svg.appendChild(hitArea);\n });\n }\n\n showTooltipAtIndex(index, event) {\n if (!this.tooltip) return;\n \n this.hoveredIndex = index;\n const value = typeof this.data[index] === 'object' ? this.data[index].value : this.data[index];\n const label = typeof this.data[index] === 'object' ? this.data[index].label : null;\n \n // Format the value\n let displayValue = value;\n if (this.tooltipFormatter) {\n if (typeof this.tooltipFormatter === 'function') {\n displayValue = this.tooltipFormatter(value, index);\n }\n } else {\n displayValue = typeof value === 'number' ? value.toLocaleString() : value;\n }\n \n // Build tooltip content\n let content = `<strong>${displayValue}</strong>`;\n if (label) {\n content = `${label}<br>${content}`;\n }\n \n this.tooltip.innerHTML = content;\n this.tooltip.style.display = 'block';\n this.updateTooltipPosition(event);\n \n // Highlight bar if in bar chart mode\n if (this.chartType === 'bar') {\n this.highlightBar(index);\n }\n \n // Show crosshair at the hovered position\n if (this.crosshair && this.showCrosshair) {\n const width = this.getActualWidth();\n const barWidth = width / this.data.length;\n const x = (index * barWidth) + (barWidth / 2);\n this.crosshair.setAttribute('x1', x);\n this.crosshair.setAttribute('x2', x);\n this.crosshair.style.display = 'block';\n }\n }\n\n updateTooltipPosition(event) {\n if (!this.tooltip || this.tooltip.style.display === 'none') return;\n \n const rect = this.svg.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n \n // Position tooltip above cursor\n this.tooltip.style.left = `${x}px`;\n this.tooltip.style.top = `${y - 10}px`;\n this.tooltip.style.transform = 'translate(-50%, -100%)';\n }\n\n hideTooltip() {\n if (this.tooltip) {\n this.tooltip.style.display = 'none';\n this.hoveredIndex = -1;\n }\n \n // Remove bar highlight\n if (this.chartType === 'bar') {\n this.unhighlightBars();\n }\n \n // Hide crosshair\n if (this.crosshair) {\n this.crosshair.style.display = 'none';\n }\n }\n\n highlightBar(index) {\n if (!this.svg) return;\n \n // Remove previous highlights\n this.unhighlightBars();\n \n // Highlight the hovered bar\n const bar = this.svg.querySelector(`rect.mini-chart-bar[data-bar-index=\"${index}\"]`);\n if (bar) {\n bar.style.opacity = '0.7';\n }\n }\n\n unhighlightBars() {\n if (!this.svg) return;\n \n const bars = this.svg.querySelectorAll('rect.mini-chart-bar');\n bars.forEach(bar => {\n bar.style.opacity = '1';\n });\n }\n\n // Public API\n setData(data) {\n this.data = data;\n if (this.svg) {\n this.renderChart();\n }\n }\n\n setColor(color) {\n this.color = color;\n if (this.svg) {\n this.renderChart();\n }\n }\n\n setType(type) {\n if (['line', 'bar'].includes(type)) {\n this.chartType = type;\n if (this.svg) {\n this.renderChart();\n }\n }\n }\n\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.updateDimensions();\n if (this.svg) {\n this.renderChart();\n }\n }\n\n async onBeforeDestroy() {\n // Clean up resize observer\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n await super.onBeforeDestroy();\n }\n}\n","/**\n * MetricsMiniChart - Metrics display with integrated mini sparkline\n * Shows a metric value with label and a small trend chart\n * Supports the same /api/metrics/fetch API as MetricsChart\n */\n\nimport View from '@core/View.js';\nimport MiniChart from './MiniChart.js';\n\nexport default class MetricsMiniChart extends View {\n constructor(options = {}) {\n super({\n className: 'metrics-mini-chart',\n ...options\n });\n\n // Metric data\n this.label = options.label || '';\n this.value = options.value || 0;\n this.data = options.data || [];\n this.trend = options.trend; // 'up', 'down', or auto-calculate\n this.trendValue = options.trendValue; // Percentage change\n \n // Chart configuration\n this.chartType = options.chartType || 'line';\n this.chartWidth = options.chartWidth || 100;\n this.chartHeight = options.chartHeight || 40;\n this.chartColor = options.chartColor || 'rgba(54, 162, 235, 1)';\n this.fill = options.fill !== false;\n this.smoothing = options.smoothing || 0.3;\n \n // Formatting\n this.valueFormatter = options.valueFormatter || null;\n this.suffix = options.suffix || '';\n this.prefix = options.prefix || '';\n \n // Styling\n this.variant = options.variant || 'default'; // 'default', 'success', 'danger', 'warning', 'info'\n this.size = options.size || 'md'; // 'sm', 'md', 'lg'\n \n // Layout\n this.layout = options.layout || 'horizontal'; // 'horizontal' or 'vertical'\n \n // API configuration (matching MetricsChart)\n this.endpoint = options.endpoint || '/api/metrics/fetch';\n this.account = options.account || 'global';\n this.granularity = options.granularity || 'hours';\n this.slugs = options.slugs || null; // Single slug or array of slugs\n this.category = options.category || null;\n this.dateStart = options.dateStart || null;\n this.dateEnd = options.dateEnd || null;\n this.defaultDateRange = options.defaultDateRange || '24h';\n \n // State\n this.isLoading = false;\n this.lastFetch = null;\n this.refreshInterval = options.refreshInterval;\n \n // Initialize date range if missing\n if (!this.dateStart || !this.dateEnd) {\n this.setQuickRange(this.defaultDateRange);\n }\n \n // Normalize slugs to array\n if (this.slugs && !Array.isArray(this.slugs)) {\n this.slugs = [this.slugs];\n }\n \n // Create mini chart instance\n this.miniChart = null;\n }\n\n getTemplate() {\n const sizeClass = `metrics-mini-chart-${this.size}`;\n const variantClass = this.variant !== 'default' ? `metrics-mini-chart-${this.variant}` : '';\n const layoutClass = `metrics-mini-chart-${this.layout}`;\n \n return `\n <div class=\"metrics-mini-chart-container ${sizeClass} ${variantClass} ${layoutClass}\">\n <div class=\"metrics-info\">\n <div class=\"metrics-label\">${this.escapeHtml(this.label)}</div>\n <div class=\"metrics-value-row\">\n <div class=\"metrics-value\" data-ref=\"value\">\n ${this.formatValue(this.value)}\n </div>\n ${this.renderTrendBadge()}\n </div>\n </div>\n <div class=\"metrics-chart\" data-container=\"chart\"></div>\n </div>\n `;\n }\n\n async onInit() {\n // Create mini chart\n this.miniChart = new MiniChart({\n chartType: this.chartType,\n data: this.data,\n width: this.chartWidth,\n height: this.chartHeight,\n color: this.getChartColor(),\n fillColor: this.getFillColor(),\n fill: this.fill,\n smoothing: this.smoothing,\n animate: true\n });\n \n this.addChild(this.miniChart, 'chart');\n \n // Setup auto-refresh if configured\n if (this.refreshInterval && this.endpoint) {\n this.startAutoRefresh();\n }\n }\n\n async onAfterRender() {\n await super.onAfterRender();\n \n // Fetch initial data if endpoint provided\n if (this.endpoint && this.data.length === 0) {\n await this.fetchData();\n }\n }\n\n renderTrendBadge() {\n if (!this.trend && this.trendValue === undefined) {\n return '';\n }\n \n const trend = this.trend || (this.trendValue > 0 ? 'up' : 'down');\n const trendIcon = trend === 'up' ? 'bi-arrow-up' : 'bi-arrow-down';\n const trendClass = trend === 'up' ? 'trend-up' : 'trend-down';\n const trendValueStr = this.trendValue !== undefined \n ? `${Math.abs(this.trendValue)}%` \n : '';\n \n return `\n <span class=\"metrics-trend ${trendClass}\">\n <i class=\"bi ${trendIcon}\"></i>\n ${trendValueStr}\n </span>\n `;\n }\n\n getChartColor() {\n // Return color based on variant\n const colorMap = {\n success: 'rgba(75, 192, 192, 1)',\n danger: 'rgba(255, 99, 132, 1)',\n warning: 'rgba(255, 206, 86, 1)',\n info: 'rgba(54, 162, 235, 1)',\n default: this.chartColor\n };\n \n return colorMap[this.variant] || this.chartColor;\n }\n\n getFillColor() {\n const color = this.getChartColor();\n // Convert to fill with low opacity\n return color.replace(/[\\d.]+\\)$/, '0.1)');\n }\n\n formatValue(value) {\n let formatted = value;\n \n if (this.valueFormatter) {\n // Use custom formatter\n if (typeof this.valueFormatter === 'function') {\n formatted = this.valueFormatter(value);\n } else if (this.dataFormatter) {\n formatted = this.dataFormatter.pipe(value, this.valueFormatter);\n }\n } else {\n // Default formatting\n if (typeof value === 'number') {\n formatted = value.toLocaleString();\n }\n }\n \n return `${this.prefix}${formatted}${this.suffix}`;\n }\n\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n buildApiParams() {\n const params = {\n granularity: this.granularity,\n account: this.account,\n with_labels: true\n };\n\n // Add slugs\n if (this.slugs && this.slugs.length > 0) {\n this.slugs.forEach(slug => {\n if (!params['slugs[]']) params['slugs[]'] = [];\n params['slugs[]'].push(slug);\n });\n }\n\n if (this.category) {\n params.category = this.category;\n }\n\n // Date range\n if (this.dateStart) {\n params.dr_start = Math.floor(this.dateStart.getTime() / 1000);\n }\n if (this.dateEnd) {\n params.dr_end = Math.floor(this.dateEnd.getTime() / 1000);\n }\n\n // Cache buster\n params._ = Date.now();\n\n return params;\n }\n\n async fetchData() {\n if (!this.endpoint) return;\n \n this.isLoading = true;\n \n try {\n const rest = this.getApp()?.rest;\n if (!rest) {\n throw new Error('No REST client available');\n }\n \n const params = this.buildApiParams();\n const response = await rest.GET(this.endpoint, params);\n \n // Handle Rest standardized response\n if (!response.success) {\n throw new Error(response.message || 'Network error');\n }\n if (!response.data?.status) {\n throw new Error(response.data?.error || 'Server error');\n }\n \n const metricsData = response.data.data;\n this.processMetricsData(metricsData);\n this.lastFetch = new Date();\n \n // Re-render to show updated values\n await this.render();\n \n this.emit('metrics:loaded', { chart: this, data: metricsData, params });\n \n } catch (error) {\n console.error('Failed to fetch metrics:', error);\n this.emit('metrics:error', { chart: this, error });\n } finally {\n this.isLoading = false;\n }\n }\n\n processMetricsData(metricsData) {\n // Expecting: { labels: [...], data: { metric_slug: [values...] } }\n const { data: metrics, labels } = metricsData;\n \n if (!metrics) return;\n \n // Get the first (or only) metric's data\n const metricKeys = Object.keys(metrics);\n if (metricKeys.length === 0) return;\n \n const metricSlug = metricKeys[0];\n const values = metrics[metricSlug];\n \n // Sanitize values\n const sanitizedValues = values.map(val => {\n if (val === null || val === undefined || val === '') return 0;\n return typeof val === 'number' ? val : (parseFloat(val) || 0);\n });\n \n // Update chart data\n this.setData(sanitizedValues);\n \n // Calculate current value (latest data point)\n const currentValue = sanitizedValues[sanitizedValues.length - 1] || 0;\n this.setValue(currentValue);\n \n // Auto-calculate trend if we have at least 2 data points\n if (sanitizedValues.length >= 2) {\n const firstValue = sanitizedValues[0];\n const lastValue = sanitizedValues[sanitizedValues.length - 1];\n \n if (firstValue !== 0) {\n this.trendValue = parseFloat(((lastValue - firstValue) / firstValue * 100).toFixed(1));\n this.trend = this.trendValue >= 0 ? 'up' : 'down';\n }\n }\n }\n\n setQuickRange(range) {\n const now = new Date();\n let startDate;\n\n switch (range) {\n case '1h':\n startDate = new Date(now.getTime() - (60 * 60 * 1000));\n break;\n case '24h':\n startDate = new Date(now.getTime() - (24 * 60 * 60 * 1000));\n break;\n case '7d':\n startDate = new Date(now.getTime() - (7 * 24 * 60 * 60 * 1000));\n break;\n case '30d':\n startDate = new Date(now.getTime() - (30 * 24 * 60 * 60 * 1000));\n break;\n default:\n startDate = new Date(now.getTime() - (24 * 60 * 60 * 1000));\n }\n\n this.dateStart = startDate;\n this.dateEnd = now;\n }\n\n startAutoRefresh() {\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n }\n \n this.refreshTimer = setInterval(() => {\n this.fetchData();\n }, this.refreshInterval);\n }\n\n stopAutoRefresh() {\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n this.refreshTimer = null;\n }\n }\n\n // Public API\n setValue(value) {\n this.value = value;\n const valueElement = this.element?.querySelector('[data-ref=\"value\"]');\n if (valueElement) {\n valueElement.textContent = this.formatValue(value);\n }\n }\n\n setData(data) {\n this.data = data;\n if (this.miniChart) {\n this.miniChart.setData(data);\n }\n \n // Auto-calculate trend if not set\n if (data.length >= 2 && this.trendValue === undefined) {\n const first = typeof data[0] === 'object' ? data[0].value : data[0];\n const last = typeof data[data.length - 1] === 'object' ? data[data.length - 1].value : data[data.length - 1];\n \n if (first !== 0) {\n this.trendValue = ((last - first) / first * 100).toFixed(1);\n this.trend = this.trendValue > 0 ? 'up' : 'down';\n }\n }\n }\n\n setLabel(label) {\n this.label = label;\n const labelElement = this.element?.querySelector('.metrics-label');\n if (labelElement) {\n labelElement.textContent = label;\n }\n }\n\n setVariant(variant) {\n if (this.element) {\n this.element.querySelector('.metrics-mini-chart-container')\n ?.classList.remove(`metrics-mini-chart-${this.variant}`);\n this.element.querySelector('.metrics-mini-chart-container')\n ?.classList.add(`metrics-mini-chart-${variant}`);\n }\n this.variant = variant;\n \n if (this.miniChart) {\n this.miniChart.setColor(this.getChartColor());\n }\n }\n\n refresh() {\n return this.fetchData();\n }\n\n async onBeforeDestroy() {\n this.stopAutoRefresh();\n await super.onBeforeDestroy();\n }\n}\n"],"names":["e"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { M as Model, C as Collection, T as ToastService, G as GroupList, d as UserList } from "./ContextMenu-CjPlCuJl.js";
2
- import { r as rest, V as View, d as dataFormatter, M as Mustache } from "./WebApp-CDxq9aWO.js";
3
- import { P as Page } from "./Page-C7F-OstP.js";
4
- import Dialog from "./Dialog-Bu4kE-6z.js";
5
- import { F as FormView, a as applyFileDropMixin } from "./FormView-D2RN_VDh.js";
1
+ import { M as Model, C as Collection, T as ToastService, G as GroupList, d as UserList } from "./ContextMenu-C_0Ufmea.js";
2
+ import { r as rest, V as View, d as dataFormatter, M as Mustache } from "./WebApp-tr4cjBu1.js";
3
+ import { P as Page } from "./Page-CcIMnuov.js";
4
+ import Dialog from "./Dialog-dm5fTLiY.js";
5
+ import { F as FormView, a as applyFileDropMixin } from "./FormView-5PM8GJfG.js";
6
6
  class S3Bucket extends Model {
7
7
  constructor(data = {}) {
8
8
  super(data, {
@@ -7177,4 +7177,4 @@ export {
7177
7177
  FileList as y,
7178
7178
  FileForms as z
7179
7179
  };
7180
- //# sourceMappingURL=ChatView-B57YxUKj.js.map
7180
+ //# sourceMappingURL=ChatView-5DP7NWav.js.map