web-mojo 2.1.627 → 2.1.676
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin.cjs.js +1 -1
- package/dist/admin.cjs.js.map +1 -1
- package/dist/admin.es.js +105 -75
- package/dist/admin.es.js.map +1 -1
- package/dist/auth.cjs.js +1 -1
- package/dist/auth.cjs.js.map +1 -1
- package/dist/auth.es.js +3 -3
- package/dist/auth.es.js.map +1 -1
- package/dist/charts.cjs.js +1 -1
- package/dist/charts.cjs.js.map +1 -1
- package/dist/charts.es.js +8 -590
- package/dist/charts.es.js.map +1 -1
- package/dist/chunks/{ChatView-swFqHyZi.js → ChatView-B3p8qSTr.js} +6 -6
- package/dist/chunks/{ChatView-swFqHyZi.js.map → ChatView-B3p8qSTr.js.map} +1 -1
- package/dist/chunks/{ChatView-BjbXRdAB.js → ChatView-BGlI_MSK.js} +2 -2
- package/dist/chunks/{ChatView-BjbXRdAB.js.map → ChatView-BGlI_MSK.js.map} +1 -1
- package/dist/chunks/{ContextMenu-CyfbvpND.js → ContextMenu-Bx0cE5UR.js} +2 -2
- package/dist/chunks/{ContextMenu-CyfbvpND.js.map → ContextMenu-Bx0cE5UR.js.map} +1 -1
- package/dist/chunks/{ContextMenu-DeL1AJ2K.js → ContextMenu-C5T3u9pD.js} +2 -2
- package/dist/chunks/{ContextMenu-DeL1AJ2K.js.map → ContextMenu-C5T3u9pD.js.map} +1 -1
- package/dist/chunks/{DataView-gB9r-zaX.js → DataView-DnmzuwRI.js} +2 -2
- package/dist/chunks/{DataView-gB9r-zaX.js.map → DataView-DnmzuwRI.js.map} +1 -1
- package/dist/chunks/{DataView-jx8l28w_.js → DataView-Qn3t_qcS.js} +2 -2
- package/dist/chunks/{DataView-jx8l28w_.js.map → DataView-Qn3t_qcS.js.map} +1 -1
- package/dist/chunks/{Dialog-Cj0Qxc7O.js → Dialog-CDwoJqc9.js} +5 -5
- package/dist/chunks/{Dialog-Cj0Qxc7O.js.map → Dialog-CDwoJqc9.js.map} +1 -1
- package/dist/chunks/{Dialog-JhRBUdiM.js → Dialog-DMXaIubd.js} +2 -2
- package/dist/chunks/{Dialog-JhRBUdiM.js.map → Dialog-DMXaIubd.js.map} +1 -1
- package/dist/chunks/{FormView-bFKcq_xg.js → FormView-66LGmBqh.js} +2 -2
- package/dist/chunks/{FormView-bFKcq_xg.js.map → FormView-66LGmBqh.js.map} +1 -1
- package/dist/chunks/{FormView-CpChFpxv.js → FormView-DP6RZ-L7.js} +2 -2
- package/dist/chunks/{FormView-CpChFpxv.js.map → FormView-DP6RZ-L7.js.map} +1 -1
- package/dist/chunks/{MetricsChart-DS6rz7HC.js → MetricsMiniChartWidget-CzqKovoB.js} +777 -4
- package/dist/chunks/MetricsMiniChartWidget-CzqKovoB.js.map +1 -0
- package/dist/chunks/{MetricsChart-Dv49hXjf.js → MetricsMiniChartWidget-hthLm2UU.js} +2 -2
- package/dist/chunks/MetricsMiniChartWidget-hthLm2UU.js.map +1 -0
- package/dist/chunks/{PDFViewer-DnsHONcG.js → PDFViewer-B1mYS5sx.js} +2 -2
- package/dist/chunks/{PDFViewer-DnsHONcG.js.map → PDFViewer-B1mYS5sx.js.map} +1 -1
- package/dist/chunks/{PDFViewer-CcHiuM7c.js → PDFViewer-DcCMCAcj.js} +3 -3
- package/dist/chunks/{PDFViewer-CcHiuM7c.js.map → PDFViewer-DcCMCAcj.js.map} +1 -1
- package/dist/chunks/{Page-DmOy8qUF.js → Page-CTj8NKBW.js} +2 -2
- package/dist/chunks/{Page-DmOy8qUF.js.map → Page-CTj8NKBW.js.map} +1 -1
- package/dist/chunks/{Page-DdYMaASr.js → Page-CayRLia1.js} +2 -2
- package/dist/chunks/{Page-DdYMaASr.js.map → Page-CayRLia1.js.map} +1 -1
- package/dist/chunks/{TopNav-Bat8EzdF.js → TopNav-CKO0_lBo.js} +5 -5
- package/dist/chunks/{TopNav-Bat8EzdF.js.map → TopNav-CKO0_lBo.js.map} +1 -1
- package/dist/chunks/{TopNav-CN_2e_48.js → TopNav-DMkIwiOK.js} +2 -2
- package/dist/chunks/{TopNav-CN_2e_48.js.map → TopNav-DMkIwiOK.js.map} +1 -1
- package/dist/chunks/{WebApp-DpGABopL.js → WebApp-BEjXQJb8.js} +2 -2
- package/dist/chunks/{WebApp-DpGABopL.js.map → WebApp-BEjXQJb8.js.map} +1 -1
- package/dist/chunks/{WebApp-DeoEYrl6.js → WebApp-nRyeYQ0g.js} +14 -13
- package/dist/chunks/{WebApp-DeoEYrl6.js.map → WebApp-nRyeYQ0g.js.map} +1 -1
- package/dist/docit.cjs.js +1 -1
- package/dist/docit.es.js +5 -5
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +11 -11
- package/dist/lightbox.cjs.js +1 -1
- package/dist/lightbox.es.js +4 -4
- package/package.json +1 -1
- package/dist/chunks/MetricsChart-DS6rz7HC.js.map +0 -1
- package/dist/chunks/MetricsChart-Dv49hXjf.js.map +0 -1
package/dist/charts.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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';\nimport dataFormatter from '@core/utils/DataFormatter.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 this.tooltipTemplate = options.tooltipTemplate || null; // Function returning HTML\n this.valueFormat = options.valueFormat || null; // DataFormatter string\n this.labelFormat = options.labelFormat || null; // DataFormatter string for labels\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 // X-axis\n this.showXAxis = options.showXAxis || false;\n this.xAxisColor = options.xAxisColor || this.color;\n this.xAxisWidth = options.xAxisWidth || 1;\n this.xAxisDashed = options.xAxisDashed !== false;\n\n // Tooltip state\n this.tooltip = null;\n this.crosshair = null;\n this.hoveredIndex = -1;\n\n // DataFormatter instance\n this.dataFormatter = dataFormatter;\n\n // Labels array (can be set externally or from API)\n this.labels = options.labels || null;\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 // Add x-axis line if enabled (render first so it's behind chart)\n if (this.showXAxis) {\n this.renderXAxis(min, max);\n }\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 renderXAxis(min, max) {\n const width = this.getActualWidth();\n const height = this.getActualHeight();\n\n // Calculate y position for x-axis (at zero if data crosses zero, otherwise at bottom)\n let yPos;\n if (min <= 0 && max >= 0) {\n // Data crosses zero, place axis at zero\n const range = max - min;\n const yScale = (height - this.padding * 2) / range;\n yPos = height - this.padding - ((0 - min) * yScale);\n } else {\n // Place at bottom\n yPos = height - this.padding;\n }\n\n const xAxis = this.createSVGElement('line', {\n x1: this.padding,\n y1: yPos,\n x2: width - this.padding,\n y2: yPos,\n stroke: this.xAxisColor,\n 'stroke-width': this.xAxisWidth,\n 'stroke-dasharray': this.xAxisDashed ? '2,2' : 'none',\n 'stroke-opacity': '0.5'\n });\n\n this.svg.appendChild(xAxis);\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 dataLabel = typeof this.data[index] === 'object' ? this.data[index].label : null;\n const label = this.labels ? this.labels[index] : dataLabel;\n\n // Build tooltip content using priority system\n let content;\n\n if (this.tooltipTemplate && typeof this.tooltipTemplate === 'function') {\n // 1. Custom template function (highest priority)\n content = this.tooltipTemplate({ value, label, index, data: this.data[index] });\n } else {\n // 2. Format value with DataFormatter or custom formatter\n let displayValue = value;\n\n if (this.valueFormat && this.dataFormatter) {\n // Use DataFormatter with format string\n displayValue = this.dataFormatter.pipe(value, this.valueFormat);\n } else if (this.tooltipFormatter && typeof this.tooltipFormatter === 'function') {\n // Use custom formatter function\n displayValue = this.tooltipFormatter(value, index);\n } else {\n // Default formatting\n displayValue = typeof value === 'number' ? value.toLocaleString() : value;\n }\n\n // Format label if formatter provided\n let displayLabel = label;\n if (label && this.labelFormat && this.dataFormatter) {\n displayLabel = this.dataFormatter.pipe(label, this.labelFormat);\n }\n\n // Build default tooltip HTML\n content = `<strong>${displayValue}</strong>`;\n if (displayLabel) {\n content = `<div class=\"mini-chart-tooltip-label\">${displayLabel}</div>${content}`;\n }\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 - MiniChart with API integration\n * Extends MiniChart to add /api/metrics/fetch support (same API as MetricsChart)\n */\n\nimport MiniChart from './MiniChart.js';\n\nexport default class MetricsMiniChart extends MiniChart {\n constructor(options = {}) {\n super(options);\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\n async onAfterRender() {\n await super.onAfterRender();\n \n // Fetch initial data if endpoint provided and no data\n if (this.endpoint && (!this.data || this.data.length === 0)) {\n await this.fetchData();\n }\n \n // Setup auto-refresh if configured\n if (this.refreshInterval && this.endpoint) {\n this.startAutoRefresh();\n }\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 labels (for tooltips)\n this.labels = labels || null;\n \n // Update chart data\n this.setData(sanitizedValues);\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 setGranularity(granularity) {\n this.granularity = granularity;\n return this.fetchData();\n }\n\n setDateRange(startDate, endDate) {\n this.dateStart = new Date(startDate);\n this.dateEnd = new Date(endDate);\n return this.fetchData();\n }\n\n setMetrics(slugs) {\n this.slugs = Array.isArray(slugs) ? slugs : [slugs];\n return this.fetchData();\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
|
+
{"version":3,"file":"charts.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { M as Model, C as Collection, T as ToastService, G as GroupList, d as UserList } from "./ContextMenu-
|
|
2
|
-
import { r as rest, V as View, d as dataFormatter, M as Mustache } from "./WebApp-
|
|
3
|
-
import { P as Page } from "./Page-
|
|
4
|
-
import Dialog from "./Dialog-
|
|
5
|
-
import { F as FormView, a as applyFileDropMixin } from "./FormView-
|
|
1
|
+
import { M as Model, C as Collection, T as ToastService, G as GroupList, d as UserList } from "./ContextMenu-Bx0cE5UR.js";
|
|
2
|
+
import { r as rest, V as View, d as dataFormatter, M as Mustache } from "./WebApp-nRyeYQ0g.js";
|
|
3
|
+
import { P as Page } from "./Page-CTj8NKBW.js";
|
|
4
|
+
import Dialog from "./Dialog-CDwoJqc9.js";
|
|
5
|
+
import { F as FormView, a as applyFileDropMixin } from "./FormView-66LGmBqh.js";
|
|
6
6
|
class S3Bucket extends Model {
|
|
7
7
|
constructor(data = {}) {
|
|
8
8
|
super(data, {
|
|
@@ -7234,4 +7234,4 @@ export {
|
|
|
7234
7234
|
FileList as y,
|
|
7235
7235
|
FileForms as z
|
|
7236
7236
|
};
|
|
7237
|
-
//# sourceMappingURL=ChatView-
|
|
7237
|
+
//# sourceMappingURL=ChatView-B3p8qSTr.js.map
|