myio-js-library 0.1.204 → 0.1.207
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 +150 -35
- package/dist/index.d.cts +5 -0
- package/dist/index.js +150 -35
- package/dist/myio-js-library.umd.js +150 -35
- package/dist/myio-js-library.umd.min.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -25657,9 +25657,12 @@ var AnnotationsTab = class {
|
|
|
25657
25657
|
attachEventListeners() {
|
|
25658
25658
|
const openModalBtn = this.container.querySelector("#open-new-annotation-modal");
|
|
25659
25659
|
if (openModalBtn) {
|
|
25660
|
-
openModalBtn.
|
|
25660
|
+
openModalBtn.addEventListener("click", (e) => {
|
|
25661
|
+
e.preventDefault();
|
|
25662
|
+
e.stopPropagation();
|
|
25663
|
+
console.log("[AnnotationsTab] Create button clicked");
|
|
25661
25664
|
this.showNewAnnotationModal();
|
|
25662
|
-
};
|
|
25665
|
+
});
|
|
25663
25666
|
} else {
|
|
25664
25667
|
console.warn("[AnnotationsTab] Create button not found");
|
|
25665
25668
|
}
|
|
@@ -36125,14 +36128,18 @@ function injectCSS7() {
|
|
|
36125
36128
|
document.head.appendChild(style);
|
|
36126
36129
|
cssInjected7 = true;
|
|
36127
36130
|
}
|
|
36131
|
+
var HIDE_DELAY_MS = 2500;
|
|
36132
|
+
var SAFETY_TIMEOUT_MS = 15e3;
|
|
36128
36133
|
var state3 = {
|
|
36129
36134
|
hideTimer: null,
|
|
36135
|
+
safetyTimer: null,
|
|
36130
36136
|
isMouseOverTooltip: false,
|
|
36131
36137
|
isMaximized: false,
|
|
36132
36138
|
isDragging: false,
|
|
36133
36139
|
dragOffset: { x: 0, y: 0 },
|
|
36134
36140
|
savedPosition: null,
|
|
36135
|
-
pinnedCounter: 0
|
|
36141
|
+
pinnedCounter: 0,
|
|
36142
|
+
isPinned: false
|
|
36136
36143
|
};
|
|
36137
36144
|
function generateHeaderHTML3(icon, title) {
|
|
36138
36145
|
return `
|
|
@@ -36168,6 +36175,7 @@ function setupHoverListeners3(container) {
|
|
|
36168
36175
|
clearTimeout(state3.hideTimer);
|
|
36169
36176
|
state3.hideTimer = null;
|
|
36170
36177
|
}
|
|
36178
|
+
resetSafetyTimer();
|
|
36171
36179
|
};
|
|
36172
36180
|
container.onmouseleave = () => {
|
|
36173
36181
|
state3.isMouseOverTooltip = false;
|
|
@@ -36349,15 +36357,42 @@ function toggleMaximize3(container) {
|
|
|
36349
36357
|
}
|
|
36350
36358
|
}
|
|
36351
36359
|
function startDelayedHide3() {
|
|
36352
|
-
if (state3.isMouseOverTooltip) return;
|
|
36360
|
+
if (state3.isMouseOverTooltip || state3.isPinned) return;
|
|
36353
36361
|
if (state3.hideTimer) {
|
|
36354
36362
|
clearTimeout(state3.hideTimer);
|
|
36355
36363
|
}
|
|
36356
36364
|
state3.hideTimer = setTimeout(() => {
|
|
36357
36365
|
hideWithAnimation3();
|
|
36358
|
-
},
|
|
36366
|
+
}, HIDE_DELAY_MS);
|
|
36367
|
+
}
|
|
36368
|
+
function resetSafetyTimer() {
|
|
36369
|
+
if (state3.safetyTimer) {
|
|
36370
|
+
clearTimeout(state3.safetyTimer);
|
|
36371
|
+
state3.safetyTimer = null;
|
|
36372
|
+
}
|
|
36373
|
+
const container = document.getElementById("myio-info-tooltip");
|
|
36374
|
+
if (container && container.classList.contains("visible") && !state3.isPinned) {
|
|
36375
|
+
state3.safetyTimer = setTimeout(() => {
|
|
36376
|
+
console.log("[InfoTooltip] Safety timeout reached - forcing hide");
|
|
36377
|
+
InfoTooltip.destroy();
|
|
36378
|
+
}, SAFETY_TIMEOUT_MS);
|
|
36379
|
+
}
|
|
36380
|
+
}
|
|
36381
|
+
function clearAllTimers() {
|
|
36382
|
+
if (state3.hideTimer) {
|
|
36383
|
+
clearTimeout(state3.hideTimer);
|
|
36384
|
+
state3.hideTimer = null;
|
|
36385
|
+
}
|
|
36386
|
+
if (state3.safetyTimer) {
|
|
36387
|
+
clearTimeout(state3.safetyTimer);
|
|
36388
|
+
state3.safetyTimer = null;
|
|
36389
|
+
}
|
|
36359
36390
|
}
|
|
36360
36391
|
function hideWithAnimation3() {
|
|
36392
|
+
if (state3.safetyTimer) {
|
|
36393
|
+
clearTimeout(state3.safetyTimer);
|
|
36394
|
+
state3.safetyTimer = null;
|
|
36395
|
+
}
|
|
36361
36396
|
const container = document.getElementById("myio-info-tooltip");
|
|
36362
36397
|
if (container && container.classList.contains("visible")) {
|
|
36363
36398
|
container.classList.add("closing");
|
|
@@ -36402,12 +36437,10 @@ var InfoTooltip = {
|
|
|
36402
36437
|
* Show tooltip
|
|
36403
36438
|
*/
|
|
36404
36439
|
show(triggerElement, options) {
|
|
36405
|
-
|
|
36406
|
-
clearTimeout(state3.hideTimer);
|
|
36407
|
-
state3.hideTimer = null;
|
|
36408
|
-
}
|
|
36440
|
+
clearAllTimers();
|
|
36409
36441
|
const container = this.getContainer();
|
|
36410
36442
|
container.classList.remove("closing");
|
|
36443
|
+
state3.isPinned = false;
|
|
36411
36444
|
container.innerHTML = `
|
|
36412
36445
|
<div class="myio-info-tooltip__panel">
|
|
36413
36446
|
${generateHeaderHTML3(options.icon, options.title)}
|
|
@@ -36421,6 +36454,7 @@ var InfoTooltip = {
|
|
|
36421
36454
|
setupHoverListeners3(container);
|
|
36422
36455
|
setupButtonListeners3(container);
|
|
36423
36456
|
setupDragListeners3(container);
|
|
36457
|
+
resetSafetyTimer();
|
|
36424
36458
|
},
|
|
36425
36459
|
/**
|
|
36426
36460
|
* Start delayed hide
|
|
@@ -36432,10 +36466,7 @@ var InfoTooltip = {
|
|
|
36432
36466
|
* Hide immediately
|
|
36433
36467
|
*/
|
|
36434
36468
|
hide() {
|
|
36435
|
-
|
|
36436
|
-
clearTimeout(state3.hideTimer);
|
|
36437
|
-
state3.hideTimer = null;
|
|
36438
|
-
}
|
|
36469
|
+
clearAllTimers();
|
|
36439
36470
|
state3.isMouseOverTooltip = false;
|
|
36440
36471
|
const container = document.getElementById(this.containerId);
|
|
36441
36472
|
if (container) {
|
|
@@ -36446,19 +36477,36 @@ var InfoTooltip = {
|
|
|
36446
36477
|
* Close and reset all states
|
|
36447
36478
|
*/
|
|
36448
36479
|
close() {
|
|
36480
|
+
clearAllTimers();
|
|
36449
36481
|
state3.isMaximized = false;
|
|
36450
36482
|
state3.isDragging = false;
|
|
36451
36483
|
state3.savedPosition = null;
|
|
36452
|
-
if (state3.hideTimer) {
|
|
36453
|
-
clearTimeout(state3.hideTimer);
|
|
36454
|
-
state3.hideTimer = null;
|
|
36455
|
-
}
|
|
36456
36484
|
state3.isMouseOverTooltip = false;
|
|
36485
|
+
state3.isPinned = false;
|
|
36457
36486
|
const container = document.getElementById(this.containerId);
|
|
36458
36487
|
if (container) {
|
|
36459
36488
|
container.classList.remove("visible", "pinned", "maximized", "dragging", "closing");
|
|
36460
36489
|
}
|
|
36461
36490
|
},
|
|
36491
|
+
/**
|
|
36492
|
+
* Destroy tooltip completely - guaranteed cleanup
|
|
36493
|
+
* Removes from DOM and clears all timers/state
|
|
36494
|
+
*/
|
|
36495
|
+
destroy() {
|
|
36496
|
+
clearAllTimers();
|
|
36497
|
+
state3.isMaximized = false;
|
|
36498
|
+
state3.isDragging = false;
|
|
36499
|
+
state3.savedPosition = null;
|
|
36500
|
+
state3.isMouseOverTooltip = false;
|
|
36501
|
+
state3.isPinned = false;
|
|
36502
|
+
const container = document.getElementById(this.containerId);
|
|
36503
|
+
if (container) {
|
|
36504
|
+
container.remove();
|
|
36505
|
+
}
|
|
36506
|
+
const pinnedClones = document.querySelectorAll('[id^="myio-info-tooltip-pinned-"]');
|
|
36507
|
+
pinnedClones.forEach((clone) => clone.remove());
|
|
36508
|
+
console.log("[InfoTooltip] Destroyed - all tooltips removed");
|
|
36509
|
+
},
|
|
36462
36510
|
/**
|
|
36463
36511
|
* Attach tooltip to trigger element with hover behavior
|
|
36464
36512
|
*/
|
|
@@ -42141,24 +42189,25 @@ var ContractDevicesModalView = class {
|
|
|
42141
42189
|
<h4>Energia</h4>
|
|
42142
42190
|
</div>
|
|
42143
42191
|
<div class="domain-fields">
|
|
42144
|
-
<div class="field-group">
|
|
42192
|
+
<div class="field-group field-total">
|
|
42145
42193
|
<label for="energy_total">Total Contratado</label>
|
|
42146
|
-
<input type="number" id="energy_total" name="energy_total" min="0" step="1" placeholder="0">
|
|
42194
|
+
<input type="number" id="energy_total" name="energy_total" min="0" step="1" placeholder="0" readonly class="input-readonly">
|
|
42147
42195
|
<small class="field-key">${DEVICE_COUNT_KEYS.energy.total}</small>
|
|
42196
|
+
<small class="field-hint">Soma automatica</small>
|
|
42148
42197
|
</div>
|
|
42149
42198
|
<div class="field-group">
|
|
42150
42199
|
<label for="energy_entries">Entradas</label>
|
|
42151
|
-
<input type="number" id="energy_entries" name="energy_entries" min="0" step="1" placeholder="0">
|
|
42200
|
+
<input type="number" id="energy_entries" name="energy_entries" min="0" step="1" placeholder="0" data-domain="energy">
|
|
42152
42201
|
<small class="field-key">${DEVICE_COUNT_KEYS.energy.entries}</small>
|
|
42153
42202
|
</div>
|
|
42154
42203
|
<div class="field-group">
|
|
42155
42204
|
<label for="energy_commonArea">Area Comum</label>
|
|
42156
|
-
<input type="number" id="energy_commonArea" name="energy_commonArea" min="0" step="1" placeholder="0">
|
|
42205
|
+
<input type="number" id="energy_commonArea" name="energy_commonArea" min="0" step="1" placeholder="0" data-domain="energy">
|
|
42157
42206
|
<small class="field-key">${DEVICE_COUNT_KEYS.energy.commonArea}</small>
|
|
42158
42207
|
</div>
|
|
42159
42208
|
<div class="field-group">
|
|
42160
42209
|
<label for="energy_stores">Lojas</label>
|
|
42161
|
-
<input type="number" id="energy_stores" name="energy_stores" min="0" step="1" placeholder="0">
|
|
42210
|
+
<input type="number" id="energy_stores" name="energy_stores" min="0" step="1" placeholder="0" data-domain="energy">
|
|
42162
42211
|
<small class="field-key">${DEVICE_COUNT_KEYS.energy.stores}</small>
|
|
42163
42212
|
</div>
|
|
42164
42213
|
</div>
|
|
@@ -42171,24 +42220,25 @@ var ContractDevicesModalView = class {
|
|
|
42171
42220
|
<h4>Agua</h4>
|
|
42172
42221
|
</div>
|
|
42173
42222
|
<div class="domain-fields">
|
|
42174
|
-
<div class="field-group">
|
|
42223
|
+
<div class="field-group field-total">
|
|
42175
42224
|
<label for="water_total">Total Contratado</label>
|
|
42176
|
-
<input type="number" id="water_total" name="water_total" min="0" step="1" placeholder="0">
|
|
42225
|
+
<input type="number" id="water_total" name="water_total" min="0" step="1" placeholder="0" readonly class="input-readonly">
|
|
42177
42226
|
<small class="field-key">${DEVICE_COUNT_KEYS.water.total}</small>
|
|
42227
|
+
<small class="field-hint">Soma automatica</small>
|
|
42178
42228
|
</div>
|
|
42179
42229
|
<div class="field-group">
|
|
42180
42230
|
<label for="water_entries">Entradas</label>
|
|
42181
|
-
<input type="number" id="water_entries" name="water_entries" min="0" step="1" placeholder="0">
|
|
42231
|
+
<input type="number" id="water_entries" name="water_entries" min="0" step="1" placeholder="0" data-domain="water">
|
|
42182
42232
|
<small class="field-key">${DEVICE_COUNT_KEYS.water.entries}</small>
|
|
42183
42233
|
</div>
|
|
42184
42234
|
<div class="field-group">
|
|
42185
42235
|
<label for="water_commonArea">Area Comum</label>
|
|
42186
|
-
<input type="number" id="water_commonArea" name="water_commonArea" min="0" step="1" placeholder="0">
|
|
42236
|
+
<input type="number" id="water_commonArea" name="water_commonArea" min="0" step="1" placeholder="0" data-domain="water">
|
|
42187
42237
|
<small class="field-key">${DEVICE_COUNT_KEYS.water.commonArea}</small>
|
|
42188
42238
|
</div>
|
|
42189
42239
|
<div class="field-group">
|
|
42190
42240
|
<label for="water_stores">Lojas</label>
|
|
42191
|
-
<input type="number" id="water_stores" name="water_stores" min="0" step="1" placeholder="0">
|
|
42241
|
+
<input type="number" id="water_stores" name="water_stores" min="0" step="1" placeholder="0" data-domain="water">
|
|
42192
42242
|
<small class="field-key">${DEVICE_COUNT_KEYS.water.stores}</small>
|
|
42193
42243
|
</div>
|
|
42194
42244
|
</div>
|
|
@@ -42201,19 +42251,20 @@ var ContractDevicesModalView = class {
|
|
|
42201
42251
|
<h4>Temperatura</h4>
|
|
42202
42252
|
</div>
|
|
42203
42253
|
<div class="domain-fields">
|
|
42204
|
-
<div class="field-group">
|
|
42254
|
+
<div class="field-group field-total">
|
|
42205
42255
|
<label for="temperature_total">Total Contratado</label>
|
|
42206
|
-
<input type="number" id="temperature_total" name="temperature_total" min="0" step="1" placeholder="0">
|
|
42256
|
+
<input type="number" id="temperature_total" name="temperature_total" min="0" step="1" placeholder="0" readonly class="input-readonly">
|
|
42207
42257
|
<small class="field-key">${DEVICE_COUNT_KEYS.temperature.total}</small>
|
|
42258
|
+
<small class="field-hint">Soma automatica</small>
|
|
42208
42259
|
</div>
|
|
42209
42260
|
<div class="field-group">
|
|
42210
42261
|
<label for="temperature_internal">Sensores Internos</label>
|
|
42211
|
-
<input type="number" id="temperature_internal" name="temperature_internal" min="0" step="1" placeholder="0">
|
|
42262
|
+
<input type="number" id="temperature_internal" name="temperature_internal" min="0" step="1" placeholder="0" data-domain="temperature">
|
|
42212
42263
|
<small class="field-key">${DEVICE_COUNT_KEYS.temperature.internal}</small>
|
|
42213
42264
|
</div>
|
|
42214
42265
|
<div class="field-group">
|
|
42215
|
-
<label for="temperature_stores">
|
|
42216
|
-
<input type="number" id="temperature_stores" name="temperature_stores" min="0" step="1" placeholder="0">
|
|
42266
|
+
<label for="temperature_stores">Sensores Externos</label>
|
|
42267
|
+
<input type="number" id="temperature_stores" name="temperature_stores" min="0" step="1" placeholder="0" data-domain="temperature">
|
|
42217
42268
|
<small class="field-key">${DEVICE_COUNT_KEYS.temperature.stores}</small>
|
|
42218
42269
|
</div>
|
|
42219
42270
|
</div>
|
|
@@ -42412,6 +42463,26 @@ var ContractDevicesModalView = class {
|
|
|
42412
42463
|
font-family: 'Courier New', monospace;
|
|
42413
42464
|
}
|
|
42414
42465
|
|
|
42466
|
+
.myio-contract-devices-modal .field-hint {
|
|
42467
|
+
font-size: 10px;
|
|
42468
|
+
color: #6c757d;
|
|
42469
|
+
font-style: italic;
|
|
42470
|
+
}
|
|
42471
|
+
|
|
42472
|
+
.myio-contract-devices-modal .input-readonly {
|
|
42473
|
+
background: #f0f0f0;
|
|
42474
|
+
color: #555;
|
|
42475
|
+
cursor: not-allowed;
|
|
42476
|
+
font-weight: 600;
|
|
42477
|
+
}
|
|
42478
|
+
|
|
42479
|
+
.myio-contract-devices-modal .field-total {
|
|
42480
|
+
background: #f8f9fa;
|
|
42481
|
+
padding: 10px;
|
|
42482
|
+
border-radius: 6px;
|
|
42483
|
+
margin-bottom: 4px;
|
|
42484
|
+
}
|
|
42485
|
+
|
|
42415
42486
|
.myio-contract-devices-modal .modal-footer {
|
|
42416
42487
|
padding: 16px 24px;
|
|
42417
42488
|
border-top: 1px solid #e0e0e0;
|
|
@@ -42490,22 +42561,22 @@ var ContractDevicesModalView = class {
|
|
|
42490
42561
|
}
|
|
42491
42562
|
};
|
|
42492
42563
|
if (data.energy) {
|
|
42493
|
-
setValue("energy_total", data.energy.total);
|
|
42494
42564
|
setValue("energy_entries", data.energy.entries);
|
|
42495
42565
|
setValue("energy_commonArea", data.energy.commonArea);
|
|
42496
42566
|
setValue("energy_stores", data.energy.stores);
|
|
42497
42567
|
}
|
|
42498
42568
|
if (data.water) {
|
|
42499
|
-
setValue("water_total", data.water.total);
|
|
42500
42569
|
setValue("water_entries", data.water.entries);
|
|
42501
42570
|
setValue("water_commonArea", data.water.commonArea);
|
|
42502
42571
|
setValue("water_stores", data.water.stores);
|
|
42503
42572
|
}
|
|
42504
42573
|
if (data.temperature) {
|
|
42505
|
-
setValue("temperature_total", data.temperature.total);
|
|
42506
42574
|
setValue("temperature_internal", data.temperature.internal);
|
|
42507
42575
|
setValue("temperature_stores", data.temperature.stores);
|
|
42508
42576
|
}
|
|
42577
|
+
this.calculateDomainTotal("energy");
|
|
42578
|
+
this.calculateDomainTotal("water");
|
|
42579
|
+
this.calculateDomainTotal("temperature");
|
|
42509
42580
|
}
|
|
42510
42581
|
attachEventListeners() {
|
|
42511
42582
|
const closeBtn = this.modal.querySelector(".close-btn");
|
|
@@ -42537,6 +42608,50 @@ var ContractDevicesModalView = class {
|
|
|
42537
42608
|
this.config.onClose();
|
|
42538
42609
|
}
|
|
42539
42610
|
});
|
|
42611
|
+
this.setupAutoCalculation();
|
|
42612
|
+
}
|
|
42613
|
+
setupAutoCalculation() {
|
|
42614
|
+
const energyFields = ["energy_entries", "energy_commonArea", "energy_stores"];
|
|
42615
|
+
energyFields.forEach((fieldName) => {
|
|
42616
|
+
const input = this.form.querySelector(`[name="${fieldName}"]`);
|
|
42617
|
+
if (input) {
|
|
42618
|
+
input.addEventListener("input", () => this.calculateDomainTotal("energy"));
|
|
42619
|
+
}
|
|
42620
|
+
});
|
|
42621
|
+
const waterFields = ["water_entries", "water_commonArea", "water_stores"];
|
|
42622
|
+
waterFields.forEach((fieldName) => {
|
|
42623
|
+
const input = this.form.querySelector(`[name="${fieldName}"]`);
|
|
42624
|
+
if (input) {
|
|
42625
|
+
input.addEventListener("input", () => this.calculateDomainTotal("water"));
|
|
42626
|
+
}
|
|
42627
|
+
});
|
|
42628
|
+
const temperatureFields = ["temperature_internal", "temperature_stores"];
|
|
42629
|
+
temperatureFields.forEach((fieldName) => {
|
|
42630
|
+
const input = this.form.querySelector(`[name="${fieldName}"]`);
|
|
42631
|
+
if (input) {
|
|
42632
|
+
input.addEventListener("input", () => this.calculateDomainTotal("temperature"));
|
|
42633
|
+
}
|
|
42634
|
+
});
|
|
42635
|
+
}
|
|
42636
|
+
calculateDomainTotal(domain) {
|
|
42637
|
+
const getValue = (name) => {
|
|
42638
|
+
const input = this.form.querySelector(`[name="${name}"]`);
|
|
42639
|
+
if (!input || input.value === "") return 0;
|
|
42640
|
+
const num = parseInt(input.value, 10);
|
|
42641
|
+
return isNaN(num) ? 0 : num;
|
|
42642
|
+
};
|
|
42643
|
+
let total = 0;
|
|
42644
|
+
if (domain === "energy") {
|
|
42645
|
+
total = getValue("energy_entries") + getValue("energy_commonArea") + getValue("energy_stores");
|
|
42646
|
+
} else if (domain === "water") {
|
|
42647
|
+
total = getValue("water_entries") + getValue("water_commonArea") + getValue("water_stores");
|
|
42648
|
+
} else if (domain === "temperature") {
|
|
42649
|
+
total = getValue("temperature_internal") + getValue("temperature_stores");
|
|
42650
|
+
}
|
|
42651
|
+
const totalInput = this.form.querySelector(`[name="${domain}_total"]`);
|
|
42652
|
+
if (totalInput) {
|
|
42653
|
+
totalInput.value = String(total);
|
|
42654
|
+
}
|
|
42540
42655
|
}
|
|
42541
42656
|
setupAccessibility() {
|
|
42542
42657
|
const firstInput = this.modal.querySelector("input");
|