myio-js-library 0.1.468 → 0.1.470
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/index.cjs +196 -30
- package/dist/index.d.cts +2 -2
- package/dist/index.js +196 -30
- package/dist/myio-js-library.umd.js +196 -30
- package/dist/myio-js-library.umd.min.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1139,7 +1139,7 @@ module.exports = __toCommonJS(index_exports);
|
|
|
1139
1139
|
// package.json
|
|
1140
1140
|
var package_default = {
|
|
1141
1141
|
name: "myio-js-library",
|
|
1142
|
-
version: "0.1.
|
|
1142
|
+
version: "0.1.470",
|
|
1143
1143
|
description: "A clean, standalone JS SDK for MYIO projects",
|
|
1144
1144
|
license: "MIT",
|
|
1145
1145
|
repository: "github:gh-myio/myio-js-library",
|
|
@@ -3256,7 +3256,19 @@ function createDefaultActionHandlers(config, entityObject, item) {
|
|
|
3256
3256
|
const MyIOAuth = MyIOUtils?.MyIOAuth;
|
|
3257
3257
|
const CLIENT_ID = MyIOUtils?.CLIENT_ID;
|
|
3258
3258
|
const CLIENT_SECRET = MyIOUtils?.CLIENT_SECRET;
|
|
3259
|
-
const getDataApiHost =
|
|
3259
|
+
const getDataApiHost = () => {
|
|
3260
|
+
const host = MyIOUtils?.getDataApiHost?.() || MyIOUtils?.DATA_API_HOST || "";
|
|
3261
|
+
if (!host) {
|
|
3262
|
+
const msg = "DATA_API_HOST n\xE3o configurado. Verifique as configura\xE7\xF5es do widget.";
|
|
3263
|
+
LogHelper2.warn(`[${config.widgetName}]`, msg);
|
|
3264
|
+
if (MyIOLibrary2?.MyIOToast?.error) {
|
|
3265
|
+
MyIOLibrary2.MyIOToast.error(msg);
|
|
3266
|
+
} else {
|
|
3267
|
+
window.alert(msg);
|
|
3268
|
+
}
|
|
3269
|
+
}
|
|
3270
|
+
return host;
|
|
3271
|
+
};
|
|
3260
3272
|
return {
|
|
3261
3273
|
handleActionDashboard: async () => {
|
|
3262
3274
|
LogHelper2.log(`[${config.widgetName}] Opening dashboard for:`, entityObject.entityId);
|
|
@@ -3306,6 +3318,8 @@ function createDefaultActionHandlers(config, entityObject, item) {
|
|
|
3306
3318
|
window.alert("Autentica\xE7\xE3o n\xE3o dispon\xEDvel. Recarregue a p\xE1gina.");
|
|
3307
3319
|
return;
|
|
3308
3320
|
}
|
|
3321
|
+
const dataApiBaseUrl = getDataApiHost();
|
|
3322
|
+
if (!dataApiBaseUrl) return;
|
|
3309
3323
|
const ingestionToken2 = await MyIOAuth.getToken();
|
|
3310
3324
|
await MyIOLibrary2?.openDashboardPopupReport?.({
|
|
3311
3325
|
ingestionId: item.ingestionId,
|
|
@@ -3313,7 +3327,7 @@ function createDefaultActionHandlers(config, entityObject, item) {
|
|
|
3313
3327
|
label: item.label,
|
|
3314
3328
|
domain: config.domain,
|
|
3315
3329
|
api: {
|
|
3316
|
-
dataApiBaseUrl
|
|
3330
|
+
dataApiBaseUrl,
|
|
3317
3331
|
clientId: CLIENT_ID,
|
|
3318
3332
|
clientSecret: CLIENT_SECRET,
|
|
3319
3333
|
ingestionToken: ingestionToken2
|
|
@@ -3936,7 +3950,7 @@ function buildMyioIngestionAuth(config) {
|
|
|
3936
3950
|
if (!dataApiHost || !clientId || !clientSecret) {
|
|
3937
3951
|
throw new Error("dataApiHost, clientId, and clientSecret are required");
|
|
3938
3952
|
}
|
|
3939
|
-
const authUrl = new URL(`${dataApiHost}/
|
|
3953
|
+
const authUrl = new URL(`${dataApiHost}/auth`);
|
|
3940
3954
|
const cacheKey = generateCacheKey(config);
|
|
3941
3955
|
if (!globalCache.has(cacheKey)) {
|
|
3942
3956
|
globalCache.set(cacheKey, {
|
|
@@ -5638,6 +5652,12 @@ var MyIOSelectionStoreClass = class _MyIOSelectionStoreClass {
|
|
|
5638
5652
|
ingestionId: entity.ingestionId || entityId,
|
|
5639
5653
|
// ⭐ ADD: Store ingestionId for API calls
|
|
5640
5654
|
customerName: entity.customerName || entity.ownerName || entity.centralName || "",
|
|
5655
|
+
// RFC-0157: Operational metrics for comparison modal
|
|
5656
|
+
domain: entity.domain || null,
|
|
5657
|
+
availability: entity.availability ?? null,
|
|
5658
|
+
mtbf: entity.mtbf ?? null,
|
|
5659
|
+
mttr: entity.mttr ?? null,
|
|
5660
|
+
equipmentType: entity.equipmentType || null,
|
|
5641
5661
|
// Optional metadata passthrough (used by alarm comparisons)
|
|
5642
5662
|
meta: entity.meta || entity.alarmMeta || null,
|
|
5643
5663
|
alarm: entity.alarm || null
|
|
@@ -23649,7 +23669,11 @@ function createDateRangePicker($2, input, opts) {
|
|
|
23649
23669
|
ranges = {
|
|
23650
23670
|
"Hoje": [moment().startOf("day"), moment().endOf("day")],
|
|
23651
23671
|
"\xDAltimos 7 dias": [moment().subtract(6, "days").startOf("day"), moment().endOf("day")],
|
|
23672
|
+
"\xDAltimos 15 dias": [moment().subtract(14, "days").startOf("day"), moment().endOf("day")],
|
|
23652
23673
|
"\xDAltimos 30 dias": [moment().subtract(29, "days").startOf("day"), moment().endOf("day")],
|
|
23674
|
+
"\xDAltimos 60 dias": [moment().subtract(59, "days").startOf("day"), moment().endOf("day")],
|
|
23675
|
+
"\xDAltimos 90 dias": [moment().subtract(89, "days").startOf("day"), moment().endOf("day")],
|
|
23676
|
+
"M\xEAs Atual": [moment().startOf("month"), moment().endOf("day")],
|
|
23653
23677
|
"M\xEAs Anterior": [moment().subtract(1, "month").startOf("month"), moment().subtract(1, "month").endOf("month")]
|
|
23654
23678
|
};
|
|
23655
23679
|
}
|
|
@@ -26321,7 +26345,28 @@ async function openRealTimeTelemetryModal(params) {
|
|
|
26321
26345
|
gearBtn.addEventListener("click", openIntervalConfigModal);
|
|
26322
26346
|
}
|
|
26323
26347
|
if (customerId) await loadCheckDeviceInterval();
|
|
26348
|
+
const useCheckDeviceOnOpen = !!centralId && !sessionStorage.getItem("rtt_check_device_disabled");
|
|
26349
|
+
if (useCheckDeviceOnOpen) {
|
|
26350
|
+
startCountdown(checkDeviceWaitMs);
|
|
26351
|
+
try {
|
|
26352
|
+
await fetch(
|
|
26353
|
+
`https://${centralId}.y.myio.com.br/api/check_device/${deviceCheckName}`,
|
|
26354
|
+
{ signal: AbortSignal.timeout(1e4) }
|
|
26355
|
+
);
|
|
26356
|
+
centralStatus = "ok";
|
|
26357
|
+
checkDeviceHistory.push({ ts: Date.now(), status: "ok" });
|
|
26358
|
+
} catch (e) {
|
|
26359
|
+
console.warn("[RTT] check_device (open) error:", e?.message ?? e);
|
|
26360
|
+
centralStatus = "offline";
|
|
26361
|
+
checkDeviceHistory.push({ ts: Date.now(), status: "offline" });
|
|
26362
|
+
}
|
|
26363
|
+
if (checkDeviceHistory.length > MAX_CHECK_DEVICE_HISTORY) checkDeviceHistory.shift();
|
|
26364
|
+
updateStatusBadges();
|
|
26365
|
+
await new Promise((r) => setTimeout(r, checkDeviceWaitMs));
|
|
26366
|
+
clearCountdown();
|
|
26367
|
+
}
|
|
26324
26368
|
await refreshData();
|
|
26369
|
+
isFirstTick = false;
|
|
26325
26370
|
scheduleCheckDeviceTick();
|
|
26326
26371
|
return {
|
|
26327
26372
|
destroy: closeModal2
|
|
@@ -53727,16 +53772,41 @@ var ALARMS_NOTIFICATIONS_PANEL_STYLES = `
|
|
|
53727
53772
|
background: rgba(139, 92, 246, 0.2);
|
|
53728
53773
|
}
|
|
53729
53774
|
|
|
53775
|
+
/* \u2500\u2500 alarm-text-btn: base style (mirrors ALARM widget .alarm-text-btn) \u2500\u2500 */
|
|
53776
|
+
.myio-alarms-panel .alarm-text-btn {
|
|
53777
|
+
display: inline-flex;
|
|
53778
|
+
align-items: center;
|
|
53779
|
+
gap: 5px;
|
|
53780
|
+
padding: 4px 10px;
|
|
53781
|
+
border: 1px solid var(--alarms-primary);
|
|
53782
|
+
border-radius: 6px;
|
|
53783
|
+
background: var(--alarms-primary-light);
|
|
53784
|
+
color: var(--alarms-primary);
|
|
53785
|
+
font-size: 10px;
|
|
53786
|
+
font-weight: 600;
|
|
53787
|
+
line-height: 1;
|
|
53788
|
+
letter-spacing: 0.06em;
|
|
53789
|
+
text-transform: uppercase;
|
|
53790
|
+
cursor: pointer;
|
|
53791
|
+
white-space: nowrap;
|
|
53792
|
+
transition: background 0.15s, color 0.15s;
|
|
53793
|
+
}
|
|
53794
|
+
|
|
53795
|
+
.myio-alarms-panel .alarm-text-btn svg {
|
|
53796
|
+
fill: currentColor;
|
|
53797
|
+
flex-shrink: 0;
|
|
53798
|
+
}
|
|
53799
|
+
|
|
53800
|
+
.myio-alarms-panel .alarm-text-btn:hover {
|
|
53801
|
+
background: var(--alarms-primary);
|
|
53802
|
+
color: #fff;
|
|
53803
|
+
}
|
|
53804
|
+
|
|
53730
53805
|
/* Bundle map button \u2014 logo ap\xF3s as tabs, margem fixa \xE0 esquerda */
|
|
53731
53806
|
.myio-alarms-tabs .alarms-tab-map-btn {
|
|
53732
53807
|
margin-left: 16px;
|
|
53733
53808
|
flex-shrink: 0;
|
|
53734
53809
|
align-self: center;
|
|
53735
|
-
padding: 4px 8px;
|
|
53736
|
-
font-size: 10px;
|
|
53737
|
-
font-weight: 600;
|
|
53738
|
-
letter-spacing: 0.04em;
|
|
53739
|
-
white-space: nowrap;
|
|
53740
53810
|
}
|
|
53741
53811
|
|
|
53742
53812
|
/* Alarm count badge \u2014 hidden (kept for JS compatibility) */
|
|
@@ -58147,17 +58217,11 @@ var ALARMS_NOTIFICATIONS_PANEL_STYLES = `
|
|
|
58147
58217
|
border-radius: var(--alarms-radius-lg);
|
|
58148
58218
|
}
|
|
58149
58219
|
|
|
58150
|
-
/* History button \u2014
|
|
58220
|
+
/* History button \u2014 modifier only (base comes from .alarm-text-btn) */
|
|
58151
58221
|
.myio-alarms-tabs .alarms-tab-history-btn {
|
|
58152
58222
|
margin-left: 8px;
|
|
58153
58223
|
flex-shrink: 0;
|
|
58154
58224
|
align-self: center;
|
|
58155
|
-
padding: 4px 8px;
|
|
58156
|
-
font-size: 10px;
|
|
58157
|
-
font-weight: 600;
|
|
58158
|
-
letter-spacing: 0.04em;
|
|
58159
|
-
white-space: nowrap;
|
|
58160
|
-
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
|
58161
58225
|
}
|
|
58162
58226
|
|
|
58163
58227
|
.myio-alarms-tabs .alarms-tab-history-btn.is-active {
|
|
@@ -88722,7 +88786,9 @@ var PoliciesTab = class {
|
|
|
88722
88786
|
<div class="gm-accordion-panel" style="display:${this.expandedId === p.id ? "" : "none"}">
|
|
88723
88787
|
<div class="gm-panel-section">
|
|
88724
88788
|
<div class="gm-panel-section-header"><span class="gm-panel-section-title">\u2705 Permitidas</span></div>
|
|
88725
|
-
${p.allow?.length ? p.allow.map(
|
|
88789
|
+
${p.allow?.length ? p.allow.map(
|
|
88790
|
+
(a) => `<code style="display:block;font-size:11px;color:var(--um-badge-user-text);padding:2px 0;">${this.esc(a)}</code>`
|
|
88791
|
+
).join("") : '<span class="gm-empty-inline">Nenhuma.</span>'}
|
|
88726
88792
|
</div>
|
|
88727
88793
|
${p.deny?.length ? `<div class="gm-panel-section">
|
|
88728
88794
|
<div class="gm-panel-section-header"><span class="gm-panel-section-title">\u{1F6AB} Negadas</span></div>
|
|
@@ -88753,11 +88819,13 @@ var PoliciesTab = class {
|
|
|
88753
88819
|
showPolicyForm(existing) {
|
|
88754
88820
|
const isEdit = existing !== null;
|
|
88755
88821
|
const overlay = document.createElement("div");
|
|
88756
|
-
overlay.
|
|
88822
|
+
overlay.className = "um-backdrop";
|
|
88823
|
+
overlay.setAttribute("data-theme", this.config.theme || "light");
|
|
88757
88824
|
const modal = document.createElement("div");
|
|
88758
|
-
modal.
|
|
88825
|
+
modal.className = "um-modal";
|
|
88826
|
+
modal.style.cssText = "padding: 24px; width: min(520px, 92vw); max-height: 80vh; height: auto; aspect-ratio: unset; overflow-y: auto; display: block;";
|
|
88759
88827
|
modal.innerHTML = `
|
|
88760
|
-
<h4 style="margin:0 0 16px;font-size:15px;font-weight:600;color:var(--um-text-primary
|
|
88828
|
+
<h4 style="margin:0 0 16px;font-size:15px;font-weight:600;color:var(--um-text-primary); font-family: inherit;">${isEdit ? "Editar" : "Nova"} Pol\xEDtica</h4>
|
|
88761
88829
|
<div class="um-form" style="max-width:100%;">
|
|
88762
88830
|
<div class="um-form-group">
|
|
88763
88831
|
<label class="um-label">Nome <span class="um-req">*</span></label>
|
|
@@ -88814,7 +88882,11 @@ var PoliciesTab = class {
|
|
|
88814
88882
|
try {
|
|
88815
88883
|
const body = { name, description: description || void 0, riskLevel, allow, deny };
|
|
88816
88884
|
const url = isEdit ? `${this.gcdrBase()}/policies/${existing.id}` : `${this.gcdrBase()}/policies`;
|
|
88817
|
-
const res = await fetch(url, {
|
|
88885
|
+
const res = await fetch(url, {
|
|
88886
|
+
method: isEdit ? "PUT" : "POST",
|
|
88887
|
+
headers: this.gcdrHeaders(),
|
|
88888
|
+
body: JSON.stringify(body)
|
|
88889
|
+
});
|
|
88818
88890
|
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
88819
88891
|
this.callbacks.showToast(isEdit ? "Pol\xEDtica atualizada!" : "Pol\xEDtica criada!", "success");
|
|
88820
88892
|
close();
|
|
@@ -88830,7 +88902,10 @@ var PoliciesTab = class {
|
|
|
88830
88902
|
async deletePolicy(p) {
|
|
88831
88903
|
if (!confirm(`Excluir a pol\xEDtica "${p.displayName}"? Esta a\xE7\xE3o n\xE3o pode ser desfeita.`)) return;
|
|
88832
88904
|
try {
|
|
88833
|
-
const res = await fetch(`${this.gcdrBase()}/policies/${p.id}`, {
|
|
88905
|
+
const res = await fetch(`${this.gcdrBase()}/policies/${p.id}`, {
|
|
88906
|
+
method: "DELETE",
|
|
88907
|
+
headers: this.gcdrHeaders()
|
|
88908
|
+
});
|
|
88834
88909
|
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
88835
88910
|
this.callbacks.showToast("Pol\xEDtica exclu\xEDda.", "success");
|
|
88836
88911
|
await this.loadPolicies();
|
|
@@ -88984,7 +89059,8 @@ var RolesTab = class {
|
|
|
88984
89059
|
const policyMap = new Map(this.policies.map((p) => [p.id, p]));
|
|
88985
89060
|
const items = r.policyIds.map((pid) => {
|
|
88986
89061
|
const p = policyMap.get(pid);
|
|
88987
|
-
if (!p)
|
|
89062
|
+
if (!p)
|
|
89063
|
+
return `<div style="font-size:12px;color:var(--um-text-faint);padding:3px 0;">ID: ${this.esc(pid)}</div>`;
|
|
88988
89064
|
const allowStr = p.allow?.join(", ") || "\u2014";
|
|
88989
89065
|
return `<div style="padding:6px 0;border-bottom:1px solid var(--um-border-sub);">
|
|
88990
89066
|
<div style="font-size:12px;font-weight:600;color:var(--um-text-secondary);">${this.esc(p.displayName)}</div>
|
|
@@ -89000,9 +89076,11 @@ var RolesTab = class {
|
|
|
89000
89076
|
showRoleForm(existing) {
|
|
89001
89077
|
const isEdit = existing !== null;
|
|
89002
89078
|
const overlay = document.createElement("div");
|
|
89003
|
-
overlay.
|
|
89079
|
+
overlay.className = "um-backdrop";
|
|
89080
|
+
overlay.setAttribute("data-theme", this.config.theme || "light");
|
|
89004
89081
|
const modal = document.createElement("div");
|
|
89005
|
-
modal.
|
|
89082
|
+
modal.className = "um-modal";
|
|
89083
|
+
modal.style.cssText = "padding: 24px; width: min(520px, 92vw); max-height: 80vh; height: auto; aspect-ratio: unset; overflow-y: auto; display: block;";
|
|
89006
89084
|
const policiesCheckboxes = this.policies.map((p) => {
|
|
89007
89085
|
const checked = existing?.policyIds?.includes(p.id) ? " checked" : "";
|
|
89008
89086
|
return `<label style="display:flex;align-items:center;gap:8px;padding:4px 0;font-size:12px;color:var(--um-text-secondary);cursor:pointer;">
|
|
@@ -89011,7 +89089,7 @@ var RolesTab = class {
|
|
|
89011
89089
|
</label>`;
|
|
89012
89090
|
}).join("");
|
|
89013
89091
|
modal.innerHTML = `
|
|
89014
|
-
<h4 style="margin:0 0 16px;font-size:15px;font-weight:600;color:var(--um-text-primary
|
|
89092
|
+
<h4 style="margin:0 0 16px;font-size:15px;font-weight:600;color:var(--um-text-primary); font-family: inherit;">${isEdit ? "Editar" : "Nova"} Fun\xE7\xE3o</h4>
|
|
89015
89093
|
<div class="um-form" style="max-width:100%;">
|
|
89016
89094
|
<div class="um-form-group">
|
|
89017
89095
|
<label class="um-label">Nome <span class="um-req">*</span></label>
|
|
@@ -89050,14 +89128,20 @@ var RolesTab = class {
|
|
|
89050
89128
|
}
|
|
89051
89129
|
errEl.textContent = "";
|
|
89052
89130
|
const description = modal.querySelector("[name=description]").value.trim();
|
|
89053
|
-
const policyIds = Array.from(
|
|
89131
|
+
const policyIds = Array.from(
|
|
89132
|
+
modal.querySelectorAll(".um-role-policy-chk:checked")
|
|
89133
|
+
).map((c) => c.value);
|
|
89054
89134
|
const btn = modal.querySelector(".role-save");
|
|
89055
89135
|
btn.disabled = true;
|
|
89056
89136
|
btn.textContent = "...";
|
|
89057
89137
|
try {
|
|
89058
89138
|
const body = { name, description: description || void 0, policyIds };
|
|
89059
89139
|
const url = isEdit ? `${this.gcdrBase()}/roles/${existing.id}` : `${this.gcdrBase()}/roles`;
|
|
89060
|
-
const res = await fetch(url, {
|
|
89140
|
+
const res = await fetch(url, {
|
|
89141
|
+
method: isEdit ? "PUT" : "POST",
|
|
89142
|
+
headers: this.gcdrHeaders(),
|
|
89143
|
+
body: JSON.stringify(body)
|
|
89144
|
+
});
|
|
89061
89145
|
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
89062
89146
|
this.callbacks.showToast(isEdit ? "Fun\xE7\xE3o atualizada!" : "Fun\xE7\xE3o criada!", "success");
|
|
89063
89147
|
close();
|
|
@@ -89073,7 +89157,10 @@ var RolesTab = class {
|
|
|
89073
89157
|
async deleteRole(r) {
|
|
89074
89158
|
if (!confirm(`Excluir a fun\xE7\xE3o "${r.displayName}"? Esta a\xE7\xE3o n\xE3o pode ser desfeita.`)) return;
|
|
89075
89159
|
try {
|
|
89076
|
-
const res = await fetch(`${this.gcdrBase()}/roles/${r.id}`, {
|
|
89160
|
+
const res = await fetch(`${this.gcdrBase()}/roles/${r.id}`, {
|
|
89161
|
+
method: "DELETE",
|
|
89162
|
+
headers: this.gcdrHeaders()
|
|
89163
|
+
});
|
|
89077
89164
|
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
89078
89165
|
this.callbacks.showToast("Fun\xE7\xE3o exclu\xEDda.", "success");
|
|
89079
89166
|
await this.loadAll();
|
|
@@ -101943,7 +102030,17 @@ function createHeaderShoppingComponent(params) {
|
|
|
101943
102030
|
const lib = getLib();
|
|
101944
102031
|
if (!lib?.buildMyioIngestionAuth) return;
|
|
101945
102032
|
const utils = getUtils();
|
|
101946
|
-
const dataApiHost = config.dataApiHost || utils?.DATA_API_HOST
|
|
102033
|
+
const dataApiHost = config.dataApiHost || utils?.DATA_API_HOST;
|
|
102034
|
+
if (!dataApiHost) {
|
|
102035
|
+
const msg = "DATA_API_HOST n\xE3o configurado. Verifique as configura\xE7\xF5es do widget.";
|
|
102036
|
+
LogHelper3.warn("[HeaderShopping] initAuth:", msg);
|
|
102037
|
+
if (lib?.MyIOToast?.error) {
|
|
102038
|
+
lib?.MyIOToast.error(msg);
|
|
102039
|
+
} else {
|
|
102040
|
+
window.alert(msg);
|
|
102041
|
+
}
|
|
102042
|
+
return;
|
|
102043
|
+
}
|
|
101947
102044
|
const clientId = params.credentials?.clientId || "";
|
|
101948
102045
|
const clientSecret = params.credentials?.clientSecret || "";
|
|
101949
102046
|
if (!clientId || !clientSecret) {
|
|
@@ -108290,6 +108387,75 @@ var OPERATIONAL_HEADER_DEVICES_GRID_STYLES = `
|
|
|
108290
108387
|
font-size: 18px;
|
|
108291
108388
|
}
|
|
108292
108389
|
|
|
108390
|
+
/* ========== Hover Expand Effect ========== */
|
|
108391
|
+
.ohg-header-v2 .ohg-col,
|
|
108392
|
+
.ohg-header-v2 .ohg-sub-col {
|
|
108393
|
+
transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
108394
|
+
box-shadow 0.22s ease,
|
|
108395
|
+
background 0.18s ease;
|
|
108396
|
+
position: relative;
|
|
108397
|
+
z-index: 1;
|
|
108398
|
+
cursor: default;
|
|
108399
|
+
}
|
|
108400
|
+
|
|
108401
|
+
.ohg-header-v2 .ohg-col .ohg-col-title,
|
|
108402
|
+
.ohg-header-v2 .ohg-col .ohg-col-value,
|
|
108403
|
+
.ohg-header-v2 .ohg-sub-col .ohg-sub-label,
|
|
108404
|
+
.ohg-header-v2 .ohg-sub-col .ohg-sub-value {
|
|
108405
|
+
transition: font-size 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
108406
|
+
}
|
|
108407
|
+
|
|
108408
|
+
.ohg-header-v2 .ohg-col:hover {
|
|
108409
|
+
transform: scale(1.18);
|
|
108410
|
+
z-index: 20;
|
|
108411
|
+
border-radius: 6px;
|
|
108412
|
+
box-shadow: 0 8px 28px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(139, 92, 246, 0.35);
|
|
108413
|
+
background: rgba(255, 255, 255, 0.07) !important;
|
|
108414
|
+
}
|
|
108415
|
+
|
|
108416
|
+
.ohg-header-v2 .ohg-col:hover .ohg-col-title {
|
|
108417
|
+
font-size: 10px;
|
|
108418
|
+
}
|
|
108419
|
+
|
|
108420
|
+
.ohg-header-v2 .ohg-col:hover .ohg-col-value {
|
|
108421
|
+
font-size: 22px;
|
|
108422
|
+
}
|
|
108423
|
+
|
|
108424
|
+
.ohg-header-v2 .ohg-col-total:hover .ohg-col-value {
|
|
108425
|
+
font-size: 28px;
|
|
108426
|
+
}
|
|
108427
|
+
|
|
108428
|
+
.ohg-header-v2 .ohg-col-availability:hover .ohg-col-value {
|
|
108429
|
+
font-size: 28px;
|
|
108430
|
+
}
|
|
108431
|
+
|
|
108432
|
+
.ohg-header-v2 .ohg-sub-col:hover {
|
|
108433
|
+
transform: scale(1.22);
|
|
108434
|
+
z-index: 20;
|
|
108435
|
+
border-radius: 5px;
|
|
108436
|
+
box-shadow: 0 6px 22px rgba(0, 0, 0, 0.45), 0 0 0 1px rgba(255, 255, 255, 0.1);
|
|
108437
|
+
background: rgba(255, 255, 255, 0.08) !important;
|
|
108438
|
+
}
|
|
108439
|
+
|
|
108440
|
+
.ohg-header-v2 .ohg-sub-col:hover .ohg-sub-label {
|
|
108441
|
+
font-size: 9px;
|
|
108442
|
+
}
|
|
108443
|
+
|
|
108444
|
+
.ohg-header-v2 .ohg-sub-col:hover .ohg-sub-value {
|
|
108445
|
+
font-size: 20px;
|
|
108446
|
+
}
|
|
108447
|
+
|
|
108448
|
+
/* Light mode hover adjustments */
|
|
108449
|
+
.ohg-header-v2.ohg-header--light .ohg-col:hover {
|
|
108450
|
+
box-shadow: 0 8px 28px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(139, 92, 246, 0.4);
|
|
108451
|
+
background: rgba(0, 0, 0, 0.04) !important;
|
|
108452
|
+
}
|
|
108453
|
+
|
|
108454
|
+
.ohg-header-v2.ohg-header--light .ohg-sub-col:hover {
|
|
108455
|
+
box-shadow: 0 6px 22px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(139, 92, 246, 0.3);
|
|
108456
|
+
background: rgba(0, 0, 0, 0.04) !important;
|
|
108457
|
+
}
|
|
108458
|
+
|
|
108293
108459
|
/* Actions Column */
|
|
108294
108460
|
.ohg-header-v2 .ohg-col-actions {
|
|
108295
108461
|
display: flex;
|