chore: stop tracking compiled blade cache

This commit is contained in:
2026-09-23 13:56:51 +07:00
parent 507fc6ccdf
commit edd2f626be
154 changed files with 1149 additions and 12046 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Kucing">
<rect width="128" height="128" rx="28" fill="#f1f5f9"/>
<path d="M35 48 25 27l25 12a47 47 0 0 1 28 0l25-12-10 21c7 8 11 18 11 29 0 23-18 36-40 36S24 100 24 77c0-11 4-21 11-29Z" fill="#cbd5e1"/>
<path d="M42 74c4-4 9-4 13 0M73 74c4-4 9-4 13 0" fill="none" stroke="#475569" stroke-width="5" stroke-linecap="round"/>
<path d="M59 84c3 3 7 3 10 0" fill="none" stroke="#475569" stroke-width="4" stroke-linecap="round"/>
<path d="m60 78 4 3 4-3" fill="#64748b"/>
<path d="M42 86 19 82M43 92 21 96M86 86l23-4M85 92l22 4" stroke="#94a3b8" stroke-width="3" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 686 B

File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+142
View File
@@ -0,0 +1,142 @@
(function () {
'use strict';
// Kompatibilitas SweetAlert tanpa CDN eksternal.
window.Swal = window.Swal || {
fire: function (options) {
options = options || {};
if (typeof options === 'string') options = { title: options };
var title = options.title || '';
var rawText = options.text || options.html || '';
var text = String(rawText).replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ').trim();
var message = [title, text].filter(Boolean).join('\n\n');
if (options.showCancelButton) {
var ok = window.confirm(message || 'Lanjutkan?');
return Promise.resolve({ isConfirmed: ok, isDismissed: !ok });
}
if (message) window.alert(message);
return Promise.resolve({ isConfirmed: true });
}
};
// Renderer line chart ringan sebagai pengganti Chart.js CDN untuk chart legacy ILYCats.
if (!window.Chart) {
window.Chart = function SimpleChart(target, config) {
this.canvas = target && target.canvas ? target.canvas : target;
this.config = config || {};
var self = this;
this._resize = function () { self.draw(); };
window.addEventListener('resize', this._resize);
this.draw();
};
window.Chart.prototype.destroy = function () {
window.removeEventListener('resize', this._resize);
};
window.Chart.prototype.draw = function () {
var canvas = this.canvas;
var config = this.config || {};
if (!canvas || !canvas.getContext || config.type !== 'line') return;
var labels = (config.data && config.data.labels) || [];
var datasets = (config.data && config.data.datasets) || [];
if (!labels.length || !datasets.length) return;
var parent = canvas.parentElement;
var width = Math.max(280, (parent && parent.clientWidth) || canvas.clientWidth || 600);
var height = Math.max(220, (parent && parent.clientHeight) || canvas.clientHeight || 300);
var dpr = window.devicePixelRatio || 1;
canvas.width = width * dpr;
canvas.height = height * dpr;
canvas.style.width = width + 'px';
canvas.style.height = height + 'px';
var ctx = canvas.getContext('2d');
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
ctx.clearRect(0, 0, width, height);
var pad = { left: 44, right: 18, top: 16, bottom: 36 };
var chartW = width - pad.left - pad.right;
var chartH = height - pad.top - pad.bottom;
var allValues = [];
datasets.forEach(function (ds) {
(ds.data || []).forEach(function (v) {
if (v !== null && v !== undefined && !isNaN(Number(v))) allValues.push(Number(v));
});
});
if (!allValues.length) return;
var minY = Math.min.apply(Math, allValues);
var maxY = Math.max.apply(Math, allValues);
var beginAtZero = !!(config.options && config.options.scales && config.options.scales.y && config.options.scales.y.beginAtZero === true);
if (beginAtZero) minY = 0;
if (minY === maxY) { minY = Math.max(0, minY - 1); maxY += 1; }
var margin = (maxY - minY) * 0.12;
if (!beginAtZero) minY = Math.max(0, minY - margin);
maxY += margin;
var xAt = function (i) {
return pad.left + (labels.length <= 1 ? chartW / 2 : (i / (labels.length - 1)) * chartW);
};
var yAt = function (v) {
return pad.top + chartH - ((Number(v) - minY) / (maxY - minY)) * chartH;
};
ctx.font = '11px system-ui, -apple-system, Segoe UI, sans-serif';
ctx.textBaseline = 'middle';
for (var i = 0; i <= 4; i++) {
var value = minY + (maxY - minY) * (i / 4);
var y = yAt(value);
ctx.strokeStyle = '#e2e8f0';
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(pad.left, y);
ctx.lineTo(pad.left + chartW, y);
ctx.stroke();
ctx.fillStyle = '#94a3b8';
ctx.textAlign = 'right';
ctx.fillText(value.toFixed(value < 10 ? 1 : 0), pad.left - 7, y);
}
var labelStep = Math.max(1, Math.ceil(labels.length / 6));
labels.forEach(function (label, idx) {
if (idx % labelStep !== 0 && idx !== labels.length - 1) return;
ctx.fillStyle = '#94a3b8';
ctx.textAlign = 'center';
ctx.fillText(String(label), xAt(idx), height - 15);
});
var palette = ['#2563eb', '#059669', '#db2777', '#d97706', '#7c3aed', '#0891b2'];
datasets.forEach(function (ds, index) {
var color = ds.borderColor || palette[index % palette.length];
var values = ds.data || [];
ctx.strokeStyle = color;
ctx.lineWidth = Number(ds.borderWidth || 2.5);
ctx.lineJoin = 'round';
ctx.lineCap = 'round';
ctx.beginPath();
var started = false;
values.forEach(function (v, idx) {
if (v === null || v === undefined) { started = false; return; }
var x = xAt(idx), y = yAt(v);
if (!started) { ctx.moveTo(x, y); started = true; } else { ctx.lineTo(x, y); }
});
ctx.stroke();
values.forEach(function (v, idx) {
if (v === null || v === undefined) return;
ctx.fillStyle = ds.pointBackgroundColor || '#fff';
ctx.strokeStyle = ds.pointBorderColor || color;
ctx.lineWidth = Number(ds.pointBorderWidth || 2);
ctx.beginPath();
ctx.arc(xAt(idx), yAt(v), Number(ds.pointRadius || 3), 0, Math.PI * 2);
ctx.fill();
ctx.stroke();
});
});
};
}
})();