(function () {
'use strict';
function getTimeParts(tz, fmt, showSec) {
try {
var now = new Date();
var opts = { timeZone: tz, hour: 'numeric', minute: '2-digit', second: showSec ? '2-digit' : undefined, hour12: fmt === '12h' };
var optsDate = { timeZone: tz, month: 'short', day: 'numeric', weekday: 'short' };
return {
time: new Intl.DateTimeFormat('en-US', opts).format(now),
date: new Intl.DateTimeFormat('en-US', optsDate).format(now)
};
} catch (e) {
return { time: 'Invalid TZ', date: '' };
}
}
function getAngles(tz) {
try {
var now = new Date();
var s = new Intl.DateTimeFormat('en-US', {
timeZone: tz, hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false
}).format(now);
// s may be "03:25:42" or similar
var parts = s.split(':').map(Number);
var h = (parts[0] || 0) % 12, m = parts[1] || 0, sec = parts[2] || 0;
return {
h: (h * 30) + (m * 0.5),
m: m * 6 + sec * 0.1,
s: sec * 6
};
} catch (e) {
return { h: 0, m: 0, s: 0 };
}
}
function esc(str) {
return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
}
function svgClock(tz, o) {
var size = o.analogSize || 120;
var r = size / 2;
var ang = getAngles(tz);
var bc = o.borderColor || '#e5e7eb';
var ac = o.accentColor || '#6c3fb5';
function handLine(angle, len, color, width) {
var rad = (angle - 90) * Math.PI / 180;
return '';
}
var ticks = '';
for (var i = 0; i < 12; i++) {
var rad = (i * 30 - 90) * Math.PI / 180;
var rIn = r * 0.82, rOut = r * 0.92;
ticks += '';
}
var svg = '';
return svg;
}
function buildCards(container, o) {
var cols = o.columns || 4;
var gap = (o.gap || 16) + 'px';
container.style.display = 'grid';
container.style.gridTemplateColumns = 'repeat(' + cols + ', 1fr)';
container.style.gap = gap;
container.style.maxWidth = (o.maxWidth || 960) + 'px';
container.style.margin = '0 auto';
container.innerHTML = '';
(o.zones || []).forEach(function (zone) {
var card = document.createElement('div');
card.className = 'bkbg-wc-card';
card.style.cssText = [
'background:' + (o.cardBg || '#fff'),
'border:1px solid ' + (o.borderColor || '#e5e7eb'),
'border-radius:' + (o.cardRadius || 16) + 'px',
'padding:' + (o.cardPadding || 24) + 'px',
'display:flex',
'flex-direction:column',
'align-items:center',
'gap:8px',
'box-sizing:border-box'
].join(';');
card.dataset.tz = zone.tz;
card.dataset.label = zone.label;
container.appendChild(card);
});
}
function updateCards(container, o) {
var cards = container.querySelectorAll('.bkbg-wc-card');
cards.forEach(function (card) {
var tz = card.dataset.tz;
var label = card.dataset.label;
var parts = getTimeParts(tz, o.timeFormat, o.showSeconds !== false);
var inner = '';
if (o.clockStyle === 'analog') {
inner += '
' + svgClock(tz, o) + '
';
}
inner += '' + esc(label) + '
';
if (o.clockStyle !== 'analog') {
inner += '' + esc(parts.time) + '
';
}
if (o.showDate !== false) {
inner += '' + esc(parts.date) + '
';
}
card.innerHTML = inner;
});
}
function buildApp(app) {
var opts;
try { opts = JSON.parse(app.getAttribute('data-opts') || '{}'); } catch (e) { return; }
var o = opts;
app.style.paddingTop = (o.paddingTop || 60) + 'px';
app.style.paddingBottom = (o.paddingBottom || 60) + 'px';
if (o.sectionBg) app.style.background = o.sectionBg;
/* Header */
if (o.showTitle || o.showSubtitle) {
var hdr = document.createElement('div');
hdr.style.cssText = 'text-align:center;margin-bottom:32px';
if (o.showTitle && o.title) {
var ht = document.createElement('h3');
ht.className = 'bkbg-wc-title';
ht.textContent = o.title;
ht.style.cssText = 'color:' + (o.titleColor || '#1e1b4b') + ';margin:0 0 8px';
hdr.appendChild(ht);
}
if (o.showSubtitle && o.subtitle) {
var hs = document.createElement('p');
hs.className = 'bkbg-wc-subtitle';
hs.textContent = o.subtitle;
hs.style.cssText = 'color:' + (o.subtitleColor || '#6b7280') + ';margin:0';
hdr.appendChild(hs);
}
app.appendChild(hdr);
}
/* Grid container */
var grid = document.createElement('div');
grid.className = 'bkbg-wc-grid';
app.appendChild(grid);
buildCards(grid, o);
updateCards(grid, o);
/* Tick every second */
setInterval(function () {
updateCards(grid, o);
}, 1000);
}
document.querySelectorAll('.bkbg-wc-app').forEach(buildApp);
})();